diff --git a/.dependency-cruiser.cjs b/.dependency-cruiser.cjs index 25f7b64ce85..8c6dff55c8c 100644 --- a/.dependency-cruiser.cjs +++ b/.dependency-cruiser.cjs @@ -156,7 +156,7 @@ module.exports = { path: '^(src)', pathNot: [ '[.](?:spec|test|setup|script)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$', - 'src/test' + './test' ] }, to: { diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000000..be478a2b5fa --- /dev/null +++ b/.editorconfig @@ -0,0 +1,12 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +root = true + +[src/*.{js,ts}] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 8e7606f0a48..79ab1bdc38a 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -4,4 +4,19 @@ * @pagefaultgames/junior-dev-team # github actions/templates etc. - Dev Leads -/.github @pagefaultgames/dev-leads +/.github @pagefaultgames/senior-dev-team + +# Art Team +/public/**/*.png @pagefaultgames/art-team +/public/**/*.json @pagefaultgames/art-team +/public/images @pagefaultgames/art-team +/public/battle-anims @pagefaultgames/art-team + +# Audio files +*.mp3 @pagefaultgames/composer-team +*.wav @pagefaultgames/composer-team +*.ogg @pagefaultgames/composer-team +/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 diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 00000000000..9bcccb9439d --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +v20.13.1 diff --git a/CREDITS.md b/CREDITS.md index 0fe0a8dc290..099d410417e 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -343,92 +343,94 @@ In addition to the lists below, please check [the PokéRogue wiki](https://wiki. # 💻 Development -## Server Owner/Administrator +## Server Developers - pancakes aka patapancakes -## Senior Developers -- Walker -- NightKev -- Moka -- Temp aka Tempo-anon -- Madmadness65 - -## Developers +## Current and former Development Team members +- bennybroseph +- Brain Frog - CodeTappert +- Dakurei - flx-sta -- innerthunder - frutescens +- Greenlamp +- ImperialSympathizer +- innerthunder +- KimJeongSun +- Madmadness65 +- Moka +- Navori +- NightKev - Opaquer +- OrangeRed +- Sam aka Flashfyre (initial developer, started PokéRogue) +- sirzento - SN34KZ - Swain aka torranx - -## Junior Developers -- KimJeongSun -- ImperialSympathizer +- Temp aka Tempo-anon +- Walker +- Xavion ## Bug/Issue Managers -- Snailman - Daleks - Lily - PigeonBar +- Snailman -## Past Contributors -- Fontbane -- sodaMelon -- schmidtc1 -- shayebeadling +## Other Code Contributors +- Admiral-Billy +- allen925 +- arColm +- Arxalc +- AsdarDevelops +- Corrade - DustinLin -- lucfd -- madibye +- ElizaAlex - EmberCM -- Mewtwo2387 +- EmoUsedHM01 +- EvasiveAce +- Fontbane +- francktrouillez +- FredeX +- geeilhan +- happinyz - hayuna -- sirzento -- ReneGV -- mattrossdev -- zacharied -- NxKarim -- td76099 -- Xiaphear +- InfernoVulpix - j-diefenbach - jaimefd -- EvasiveAce -- EmoUsedHM01 -- francktrouillez - JakubHanko -- FredeX -- PigeonBar -- prime-dialga -- rnicar245 -- rationality6 -- Neverblade -- Corrade -- Admiral-Billy -- okimin -- Arxalc -- PrabbyDD - JonStudders - karl-police -- prateau -- meepen -- arColm -- allen925 -- InfernoVulpix -- snoozbuster -- zaccie -- happinyz -- PyGaVS +- lucfd +- Lugiadrien +- madibye +- mattrossdev - mcmontag -- ElizaAlex -- AsdarDevelops -- Vassiat +- meepen +- Mewtwo2387 +- muscode +- Neverblade +- NxKarim +- okimin +- PigeonBar +- PrabbyDD +- prateau +- prime-dialga +- PyGaVS +- rationality6 - RedstonewolfX -- Sam/Flashfyre (initial developer, started PokéRogue) -- Greenlamp -- bennybroseph -- OrangeRed -- Dakurei -- Brain Frog +- ReneGV +- rnicar245 +- schmidtc1 +- shayebeadling +- snoozbuster +- sodaMelon +- td76099 +- Vassiat +- Xiaphear +- zaccie +- zacharied +- Zé Ricardo # 🌎 Translation @@ -615,6 +617,6 @@ In addition to the lists below, please check [the PokéRogue wiki](https://wiki. - roi ## External Tools -- Ydarissep (RogueDex) +- Ydarissep (creator of the now defunct "Yda's Dex") - Admiral-Billy (Offline App - Desktop) - Red aka StonedModder (iOS App) diff --git a/create-test-boilerplate.js b/create-test-boilerplate.js index a365999c623..1ea61e0dc48 100644 --- a/create-test-boilerplate.js +++ b/create-test-boilerplate.js @@ -84,19 +84,19 @@ async function runInteractive() { let description; switch (type) { case "move": - dir = path.join(__dirname, "src", "test", "moves"); + dir = path.join(__dirname, "test", "moves"); description = `Moves - ${formattedName}`; break; case "ability": - dir = path.join(__dirname, "src", "test", "abilities"); + dir = path.join(__dirname, "test", "abilities"); description = `Abilities - ${formattedName}`; break; case "item": - dir = path.join(__dirname, "src", "test", "items"); + dir = path.join(__dirname, "test", "items"); description = `Items - ${formattedName}`; break; case "mystery encounter": - dir = path.join(__dirname, "src", "test", "mystery-encounter", "encounters"); + dir = path.join(__dirname, "test", "mystery-encounter", "encounters"); description = `Mystery Encounter - ${formattedName}`; break; default: @@ -108,7 +108,7 @@ async function runInteractive() { const content = `import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/docs/enemy-ai.md b/docs/enemy-ai.md index 46482f56a90..8edf5a3f10e 100644 --- a/docs/enemy-ai.md +++ b/docs/enemy-ai.md @@ -80,8 +80,8 @@ As part of the move selection process, the enemy Pokémon must compute a **targe A move's UBS and TBS are computed with the respective functions in the `Move` class: ```ts -getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer; -getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer; +getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): number; +getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): number; ``` Logically, these functions are very similar – they add up their respective benefit scores from each of the move's attributes (as determined by `attr.getUserBenefitScore`, and `attr.getTargetBenefitScore`, respectively) and return the total benefit score. However, there are two key functional differences in how the UBS and TBS of a move are handled: diff --git a/eslint.config.js b/eslint.config.js index 2f2b466c66f..e79395e1900 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -5,7 +5,8 @@ import importX from 'eslint-plugin-import-x'; export default [ { - files: ["src/**/*.{ts,tsx,js,jsx}"], + name: "eslint-config", + files: ["src/**/*.{ts,tsx,js,jsx}", "test/**/*.{ts,tsx,js,jsx}"], ignores: ["dist/*", "build/*", "coverage/*", "public/*", ".github/*", "node_modules/*", ".vscode/*"], languageOptions: { parser: parser @@ -46,6 +47,24 @@ export default [ "computed-property-spacing": ["error", "never" ], // Enforces consistent spacing inside computed property brackets "space-infix-ops": ["error", { "int32Hint": false }], // Enforces spacing around infix operators "no-multiple-empty-lines": ["error", { "max": 2, "maxEOF": 1, "maxBOF": 0 }], // Disallows multiple empty lines + "@typescript-eslint/consistent-type-imports": "error", // Enforces type-only imports wherever possible + } + }, + { + name: "eslint-tests", + files: ["test/**/**.test.ts"], + languageOptions: { + parser: parser, + parserOptions: { + "project": ["./tsconfig.json"] + } + }, + plugins: { + "@typescript-eslint": tseslint + }, + rules: { + "@typescript-eslint/no-floating-promises": "error", // Require Promise-like statements to be handled appropriately. - https://typescript-eslint.io/rules/no-floating-promises/ + "@typescript-eslint/no-misused-promises": "error", // Disallow Promises in places not designed to handle them. - https://typescript-eslint.io/rules/no-misused-promises/ } } ] diff --git a/index.css b/index.css index 2ec106516d2..9226f968e3e 100644 --- a/index.css +++ b/index.css @@ -164,13 +164,13 @@ input:-internal-autofill-selected { } /* Show cycle buttons only on STARTER_SELECT and on touch configuration panel */ -#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT']) #apadOpenFilters, -#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT'], [data-ui-mode='RUN_INFO']) #apadCycleForm, -#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT'], [data-ui-mode='RUN_INFO']) #apadCycleShiny, +#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT'], [data-ui-mode='POKEDEX'], [data-ui-mode='POKEDEX_PAGE']) #apadOpenFilters, +#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT'], [data-ui-mode='POKEDEX'], [data-ui-mode='POKEDEX_PAGE'], [data-ui-mode='RUN_INFO']) #apadCycleForm, +#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT'], [data-ui-mode='POKEDEX'], [data-ui-mode='POKEDEX_PAGE'], [data-ui-mode='RUN_INFO']) #apadCycleShiny, #touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT']) #apadCycleNature, -#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT'], [data-ui-mode='RUN_INFO']) #apadCycleAbility, -#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT']) #apadCycleGender, -#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT']) #apadCycleVariant { +#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT'], [data-ui-mode='POKEDEX_PAGE'], [data-ui-mode='RUN_INFO']) #apadCycleAbility, +#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT'], [data-ui-mode='POKEDEX_PAGE']) #apadCycleGender, +#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT'], [data-ui-mode='POKEDEX']) #apadCycleTera { display: none; } diff --git a/index.html b/index.html index 390a29fb365..111464b5e5c 100644 --- a/index.html +++ b/index.html @@ -129,11 +129,11 @@
N
-
+
V
-
+
V
diff --git a/package-lock.json b/package-lock.json index a4568b3f5ac..453a525581b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pokemon-rogue-battle", - "version": "1.3.0", + "version": "1.7.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pokemon-rogue-battle", - "version": "1.3.0", + "version": "1.7.6", "hasInstallScript": true, "dependencies": { "@material/material-color-utilities": "^0.2.7", @@ -28,7 +28,7 @@ "@types/node": "^20.12.13", "@typescript-eslint/eslint-plugin": "^8.0.0-alpha.54", "@typescript-eslint/parser": "^8.0.0-alpha.54", - "@vitest/coverage-istanbul": "^2.0.4", + "@vitest/coverage-istanbul": "^2.1.9", "dependency-cruiser": "^16.3.10", "eslint": "^9.7.0", "eslint-plugin-import-x": "^4.2.1", @@ -40,9 +40,9 @@ "typedoc": "^0.26.4", "typescript": "^5.5.3", "typescript-eslint": "^8.0.0-alpha.54", - "vite": "^5.4.8", + "vite": "^5.4.14", "vite-tsconfig-paths": "^4.3.2", - "vitest": "^2.0.4", + "vitest": "^2.1.9", "vitest-canvas-mock": "^0.3.3" }, "engines": { @@ -269,9 +269,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "dev": true, "license": "MIT", "engines": { @@ -279,9 +279,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true, "license": "MIT", "engines": { @@ -406,11 +406,14 @@ } }, "node_modules/@babel/parser": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.0.tgz", - "integrity": "sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA==", + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.8.tgz", + "integrity": "sha512-TZIQ25pkSoaKEYYaHbbxkfL36GNsQ6iFiBbeuzAkLnXayKR1yP1zFe+NxuZWWsUyvt8icPU9CCq0sgWGXR1GEw==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.8" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -476,15 +479,14 @@ } }, "node_modules/@babel/types": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.0.tgz", - "integrity": "sha512-LcnxQSsd9aXOIgmmSpvZ/1yo46ra2ESYyqLcryaBZOghxy5qqOBjvCWP5JfkI8yl9rlxRgdLTTMCQQRcN2hdCg==", + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.8.tgz", + "integrity": "sha512-eUuWapzEGWFEpHFxgEaBG8e3n6S8L3MSu0oda755rOfabWPnh0Our1AozNFVUxGFIhbKgd1ksprsoDGMinTOTA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -2145,20 +2147,20 @@ } }, "node_modules/@vitest/coverage-istanbul": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@vitest/coverage-istanbul/-/coverage-istanbul-2.0.4.tgz", - "integrity": "sha512-6VibYMkXh8cJm5Bg8JYeOoR4oURlPf4YKP9kuVRE/NKasfYrXPnzSwuxrpgMbgOfPj13KUJXgMB3VAGukECtlQ==", + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/coverage-istanbul/-/coverage-istanbul-2.1.9.tgz", + "integrity": "sha512-vdYE4FkC/y2lxcN3Dcj54Bw+ericmDwiex0B8LV5F/YNYEYP1mgVwhPnHwWGAXu38qizkjOuyczKbFTALfzFKw==", "dev": true, "license": "MIT", "dependencies": { "@istanbuljs/schema": "^0.1.3", - "debug": "^4.3.5", + "debug": "^4.3.7", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-instrument": "^6.0.3", "istanbul-lib-report": "^3.0.1", "istanbul-lib-source-maps": "^5.0.6", "istanbul-reports": "^3.1.7", - "magicast": "^0.3.4", + "magicast": "^0.3.5", "test-exclude": "^7.0.1", "tinyrainbow": "^1.2.0" }, @@ -2166,29 +2168,56 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "vitest": "2.0.4" + "vitest": "2.1.9" } }, "node_modules/@vitest/expect": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.0.4.tgz", - "integrity": "sha512-39jr5EguIoanChvBqe34I8m1hJFI4+jxvdOpD7gslZrVQBKhh8H9eD7J/LJX4zakrw23W+dITQTDqdt43xVcJw==", + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.9.tgz", + "integrity": "sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "2.0.4", - "@vitest/utils": "2.0.4", - "chai": "^5.1.1", + "@vitest/spy": "2.1.9", + "@vitest/utils": "2.1.9", + "chai": "^5.1.2", "tinyrainbow": "^1.2.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, + "node_modules/@vitest/mocker": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.9.tgz", + "integrity": "sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "2.1.9", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.12" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, "node_modules/@vitest/pretty-format": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.0.4.tgz", - "integrity": "sha512-RYZl31STbNGqf4l2eQM1nvKPXE0NhC6Eq0suTTePc4mtMQ1Fn8qZmjV4emZdEdG2NOWGKSCrHZjmTqDCDoeFBw==", + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.9.tgz", + "integrity": "sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2199,13 +2228,13 @@ } }, "node_modules/@vitest/runner": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.0.4.tgz", - "integrity": "sha512-Gk+9Su/2H2zNfNdeJR124gZckd5st4YoSuhF1Rebi37qTXKnqYyFCd9KP4vl2cQHbtuVKjfEKrNJxHHCW8thbQ==", + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.9.tgz", + "integrity": "sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "2.0.4", + "@vitest/utils": "2.1.9", "pathe": "^1.1.2" }, "funding": { @@ -2213,14 +2242,14 @@ } }, "node_modules/@vitest/snapshot": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.0.4.tgz", - "integrity": "sha512-or6Mzoz/pD7xTvuJMFYEtso1vJo1S5u6zBTinfl+7smGUhqybn6VjzCDMhmTyVOFWwkCMuNjmNNxnyXPgKDoPw==", + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.9.tgz", + "integrity": "sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.0.4", - "magic-string": "^0.30.10", + "@vitest/pretty-format": "2.1.9", + "magic-string": "^0.30.12", "pathe": "^1.1.2" }, "funding": { @@ -2228,28 +2257,27 @@ } }, "node_modules/@vitest/spy": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.0.4.tgz", - "integrity": "sha512-uTXU56TNoYrTohb+6CseP8IqNwlNdtPwEO0AWl+5j7NelS6x0xZZtP0bDWaLvOfUbaYwhhWp1guzXUxkC7mW7Q==", + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.9.tgz", + "integrity": "sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==", "dev": true, "license": "MIT", "dependencies": { - "tinyspy": "^3.0.0" + "tinyspy": "^3.0.2" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.0.4.tgz", - "integrity": "sha512-Zc75QuuoJhOBnlo99ZVUkJIuq4Oj0zAkrQ2VzCqNCx6wAwViHEh5Fnp4fiJTE9rA+sAoXRf00Z9xGgfEzV6fzQ==", + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.9.tgz", + "integrity": "sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.0.4", - "estree-walker": "^3.0.3", - "loupe": "^3.1.1", + "@vitest/pretty-format": "2.1.9", + "loupe": "^3.1.2", "tinyrainbow": "^1.2.0" }, "funding": { @@ -2545,9 +2573,9 @@ "license": "CC-BY-4.0" }, "node_modules/chai": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.1.tgz", - "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", + "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", "dev": true, "license": "MIT", "dependencies": { @@ -2800,13 +2828,13 @@ } }, "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -3004,6 +3032,13 @@ "node": ">= 0.4" } }, + "node_modules/es-module-lexer": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", + "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", + "dev": true, + "license": "MIT" + }, "node_modules/esbuild": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", @@ -3450,28 +3485,14 @@ "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", "license": "MIT" }, - "node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "node_modules/expect-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz", + "integrity": "sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==", "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, + "license": "Apache-2.0", "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">=12.0.0" } }, "node_modules/external-editor": { @@ -3695,16 +3716,6 @@ "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, "node_modules/get-intrinsic": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", @@ -3724,19 +3735,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/get-tsconfig": { "version": "4.8.0", "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.0.tgz", @@ -3968,16 +3966,6 @@ "node": ">= 14" } }, - "node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=16.17.0" - } - }, "node_modules/i18next": { "version": "23.12.2", "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.12.2.tgz", @@ -4240,19 +4228,6 @@ "dev": true, "license": "MIT" }, - "node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", @@ -4716,14 +4691,11 @@ "license": "MIT" }, "node_modules/loupe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.1.tgz", - "integrity": "sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz", + "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==", "dev": true, - "license": "MIT", - "dependencies": { - "get-func-name": "^2.0.1" - } + "license": "MIT" }, "node_modules/lru-cache": { "version": "5.1.1", @@ -4743,9 +4715,9 @@ "license": "MIT" }, "node_modules/magic-string": { - "version": "0.30.11", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", - "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", "dev": true, "license": "MIT", "dependencies": { @@ -4753,14 +4725,14 @@ } }, "node_modules/magicast": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.4.tgz", - "integrity": "sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.24.4", - "@babel/types": "^7.24.0", + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", "source-map-js": "^1.2.0" } }, @@ -4819,13 +4791,6 @@ "url": "https://github.com/sindresorhus/memoize?sponsor=1" } }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -4886,19 +4851,6 @@ "node": ">= 0.6" } }, - "node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/mimic-function": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", @@ -4959,9 +4911,9 @@ } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, "license": "MIT" }, @@ -5138,35 +5090,6 @@ "integrity": "sha512-Ww6ZlOiEQfPfXM45v17oabk77Z7mg5bOt7AjDyzy7RjK9OrLrLC8dyZQoAPEOtFX9SaNf1Tdvr5gRJWdTJj7GA==", "dev": true }, - "node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/nwsapi": { "version": "2.2.12", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.12.tgz", @@ -5182,22 +5105,6 @@ "node": ">= 0.4" } }, - "node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -5978,9 +5885,9 @@ } }, "node_modules/std-env": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", - "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz", + "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==", "dev": true, "license": "MIT" }, @@ -6106,19 +6013,6 @@ "node": ">=4" } }, - "node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -6225,16 +6119,23 @@ "license": "MIT" }, "node_modules/tinybench": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.8.0.tgz", - "integrity": "sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", "dev": true, "license": "MIT" }, "node_modules/tinypool": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.0.tgz", - "integrity": "sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz", + "integrity": "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==", "dev": true, "license": "MIT", "engines": { @@ -6252,9 +6153,9 @@ } }, "node_modules/tinyspy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.0.tgz", - "integrity": "sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", "dev": true, "license": "MIT", "engines": { @@ -6274,16 +6175,6 @@ "node": ">=0.6.0" } }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -6561,10 +6452,11 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/vite": { - "version": "5.4.8", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.8.tgz", - "integrity": "sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==", + "version": "5.4.14", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.14.tgz", + "integrity": "sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==", "dev": true, + "license": "MIT", "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", @@ -6620,16 +6512,16 @@ } }, "node_modules/vite-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.0.4.tgz", - "integrity": "sha512-ZpJVkxcakYtig5iakNeL7N3trufe3M6vGuzYAr4GsbCTwobDeyPJpE4cjDhhPluv8OvQCFzu2LWp6GkoKRITXA==", + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.9.tgz", + "integrity": "sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==", "dev": true, "license": "MIT", "dependencies": { "cac": "^6.7.14", - "debug": "^4.3.5", + "debug": "^4.3.7", + "es-module-lexer": "^1.5.4", "pathe": "^1.1.2", - "tinyrainbow": "^1.2.0", "vite": "^5.0.0" }, "bin": { @@ -6663,30 +6555,31 @@ } }, "node_modules/vitest": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.0.4.tgz", - "integrity": "sha512-luNLDpfsnxw5QSW4bISPe6tkxVvv5wn2BBs/PuDRkhXZ319doZyLOBr1sjfB5yCEpTiU7xCAdViM8TNVGPwoog==", + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.9.tgz", + "integrity": "sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==", "dev": true, "license": "MIT", "dependencies": { - "@ampproject/remapping": "^2.3.0", - "@vitest/expect": "2.0.4", - "@vitest/pretty-format": "^2.0.4", - "@vitest/runner": "2.0.4", - "@vitest/snapshot": "2.0.4", - "@vitest/spy": "2.0.4", - "@vitest/utils": "2.0.4", - "chai": "^5.1.1", - "debug": "^4.3.5", - "execa": "^8.0.1", - "magic-string": "^0.30.10", + "@vitest/expect": "2.1.9", + "@vitest/mocker": "2.1.9", + "@vitest/pretty-format": "^2.1.9", + "@vitest/runner": "2.1.9", + "@vitest/snapshot": "2.1.9", + "@vitest/spy": "2.1.9", + "@vitest/utils": "2.1.9", + "chai": "^5.1.2", + "debug": "^4.3.7", + "expect-type": "^1.1.0", + "magic-string": "^0.30.12", "pathe": "^1.1.2", - "std-env": "^3.7.0", - "tinybench": "^2.8.0", - "tinypool": "^1.0.0", + "std-env": "^3.8.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.1", + "tinypool": "^1.0.1", "tinyrainbow": "^1.2.0", "vite": "^5.0.0", - "vite-node": "2.0.4", + "vite-node": "2.1.9", "why-is-node-running": "^2.3.0" }, "bin": { @@ -6701,8 +6594,8 @@ "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "2.0.4", - "@vitest/ui": "2.0.4", + "@vitest/browser": "2.1.9", + "@vitest/ui": "2.1.9", "happy-dom": "*", "jsdom": "*" }, diff --git a/package.json b/package.json index a8641bb0b98..4c9204f60f9 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pokemon-rogue-battle", "private": true, - "version": "1.3.0", + "version": "1.7.6", "type": "module", "scripts": { "start": "vite", @@ -20,7 +20,10 @@ "depcruise": "depcruise src", "depcruise:graph": "depcruise src --output-type dot | node dependency-graph.js > dependency-graph.svg", "create-test": "node ./create-test-boilerplate.js", - "postinstall": "npx lefthook install && npx lefthook run post-merge" + "postinstall": "npx lefthook install && npx lefthook run post-merge", + "update-version:patch": "npm version patch --force --no-git-tag-version", + "update-version:minor": "npm version minor --force --no-git-tag-version", + "update-locales:remote": "git submodule update --progress --init --recursive --force --remote" }, "devDependencies": { "@eslint/js": "^9.3.0", @@ -30,7 +33,7 @@ "@types/node": "^20.12.13", "@typescript-eslint/eslint-plugin": "^8.0.0-alpha.54", "@typescript-eslint/parser": "^8.0.0-alpha.54", - "@vitest/coverage-istanbul": "^2.0.4", + "@vitest/coverage-istanbul": "^2.1.9", "dependency-cruiser": "^16.3.10", "eslint": "^9.7.0", "eslint-plugin-import-x": "^4.2.1", @@ -42,9 +45,9 @@ "typedoc": "^0.26.4", "typescript": "^5.5.3", "typescript-eslint": "^8.0.0-alpha.54", - "vite": "^5.4.8", + "vite": "^5.4.14", "vite-tsconfig-paths": "^4.3.2", - "vitest": "^2.0.4", + "vitest": "^2.1.9", "vitest-canvas-mock": "^0.3.3" }, "dependencies": { @@ -61,11 +64,5 @@ }, "engines": { "node": ">=20.0.0" - }, - "imports": { - "#enums/*": "./enums/*", - "#app": "./src/main.js", - "#app/*": "./src/*", - "#test/*": "./src/test/*" } } diff --git a/public/audio/bgm/battle_champion_kukui.mp3 b/public/audio/bgm/battle_champion_kukui.mp3 new file mode 100644 index 00000000000..9e0739fc4d0 Binary files /dev/null and b/public/audio/bgm/battle_champion_kukui.mp3 differ diff --git a/public/audio/bgm/battle_colress.mp3 b/public/audio/bgm/battle_colress.mp3 new file mode 100644 index 00000000000..49a5557860b Binary files /dev/null and b/public/audio/bgm/battle_colress.mp3 differ diff --git a/public/audio/bgm/battle_mustard.mp3 b/public/audio/bgm/battle_mustard.mp3 new file mode 100644 index 00000000000..dccb8f7dcc5 Binary files /dev/null and b/public/audio/bgm/battle_mustard.mp3 differ diff --git a/public/audio/bgm/battle_plasma_grunt.mp3 b/public/audio/bgm/battle_plasma_grunt.mp3 index 7d1bf710bc5..c3d004514d0 100644 Binary files a/public/audio/bgm/battle_plasma_grunt.mp3 and b/public/audio/bgm/battle_plasma_grunt.mp3 differ diff --git a/public/audio/bgm/end.mp3 b/public/audio/bgm/end.mp3 index c37973fd9cc..fa33f890dc3 100644 Binary files a/public/audio/bgm/end.mp3 and b/public/audio/bgm/end.mp3 differ diff --git a/public/audio/bgm/title.mp3 b/public/audio/bgm/title.mp3 index 86d4be0da35..8ad451a52a9 100644 Binary files a/public/audio/bgm/title.mp3 and b/public/audio/bgm/title.mp3 differ diff --git a/public/audio/se/crit_throw.wav b/public/audio/se/crit_throw.wav new file mode 100644 index 00000000000..a737410e7ce Binary files /dev/null and b/public/audio/se/crit_throw.wav differ diff --git a/public/battle-anims/common-terastallize.json b/public/battle-anims/common-terastallize.json new file mode 100644 index 00000000000..3843464dbde --- /dev/null +++ b/public/battle-anims/common-terastallize.json @@ -0,0 +1,774 @@ +{ + "graphic": "terastallize", + "frames": [ + [ + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "locked": true, + "priority": 1, + "focus": 2 + }, + { + "x": 128, + "y": -64, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "locked": true, + "priority": 1, + "focus": 1 + }, + { + "x": 0, + "y": -20, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 2, + "graphicFrame": 0, + "opacity": 150, + "priority": 1, + "focus": 2 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "locked": true, + "priority": 1, + "focus": 2 + }, + { + "x": 128, + "y": -64, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "locked": true, + "priority": 1, + "focus": 1 + }, + { + "x": 0, + "y": -20, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 2, + "graphicFrame": 0, + "opacity": 225, + "priority": 1, + "focus": 2 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "locked": true, + "priority": 1, + "focus": 2 + }, + { + "x": 128, + "y": -64, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "locked": true, + "priority": 1, + "focus": 1 + }, + { + "x": 0, + "y": -20, + "zoomX": 70, + "zoomY": 70, + "visible": true, + "target": 2, + "graphicFrame": 1, + "opacity": 255, + "priority": 1, + "focus": 2 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "locked": true, + "priority": 1, + "focus": 2 + }, + { + "x": 128, + "y": -64, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "locked": true, + "priority": 1, + "focus": 1 + }, + { + "x": 0, + "y": -20, + "zoomX": 70, + "zoomY": 70, + "visible": true, + "target": 2, + "graphicFrame": 1, + "opacity": 255, + "priority": 1, + "focus": 2 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "locked": true, + "priority": 1, + "focus": 2 + }, + { + "x": 128, + "y": -64, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "locked": true, + "priority": 1, + "focus": 1 + }, + { + "x": 0, + "y": -20, + "zoomX": 90, + "zoomY": 90, + "visible": true, + "target": 2, + "graphicFrame": 1, + "opacity": 255, + "priority": 1, + "focus": 2 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "locked": true, + "priority": 1, + "focus": 2 + }, + { + "x": 128, + "y": -64, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "locked": true, + "priority": 1, + "focus": 1 + }, + { + "x": 0, + "y": -20, + "zoomX": 90, + "zoomY": 90, + "visible": true, + "target": 2, + "graphicFrame": 1, + "opacity": 255, + "priority": 1, + "focus": 2 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "locked": true, + "priority": 1, + "focus": 2 + }, + { + "x": 128, + "y": -64, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "locked": true, + "priority": 1, + "focus": 1 + }, + { + "x": 0, + "y": -20, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 2, + "graphicFrame": 1, + "opacity": 255, + "priority": 1, + "focus": 2 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "locked": true, + "priority": 1, + "focus": 2 + }, + { + "x": 128, + "y": -64, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "locked": true, + "priority": 1, + "focus": 1 + }, + { + "x": 0, + "y": -20, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 2, + "graphicFrame": 1, + "opacity": 255, + "priority": 1, + "focus": 2 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "locked": true, + "priority": 1, + "focus": 2 + }, + { + "x": 128, + "y": -64, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "locked": true, + "priority": 1, + "focus": 1 + }, + { + "x": 0, + "y": -20, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 2, + "graphicFrame": 1, + "opacity": 255, + "priority": 1, + "focus": 2 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "locked": true, + "priority": 1, + "focus": 2 + }, + { + "x": 128, + "y": -64, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "locked": true, + "priority": 1, + "focus": 1 + }, + { + "x": 0, + "y": -20, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 2, + "graphicFrame": 1, + "opacity": 200, + "priority": 1, + "focus": 2 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "tone": [ + 100, + 100, + 100, + 0 + ], + "locked": true, + "priority": 1, + "focus": 2 + }, + { + "x": 128, + "y": -64, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "locked": true, + "priority": 1, + "focus": 1 + }, + { + "x": 0, + "y": -20, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 2, + "graphicFrame": 1, + "opacity": 100, + "priority": 1, + "focus": 2 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "tone": [ + 100, + 100, + 100, + 0 + ], + "locked": true, + "priority": 1, + "focus": 2 + }, + { + "x": 128, + "y": -64, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "locked": true, + "priority": 1, + "focus": 1 + }, + { + "x": 0, + "y": -20, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 2, + "graphicFrame": 1, + "opacity": 100, + "priority": 1, + "focus": 2 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "tone": [ + 100, + 100, + 100, + 0 + ], + "locked": true, + "priority": 1, + "focus": 2 + }, + { + "x": 128, + "y": -64, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "locked": true, + "priority": 1, + "focus": 1 + }, + { + "x": 0, + "y": -20, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 2, + "graphicFrame": 1, + "opacity": 60, + "priority": 1, + "focus": 2 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "tone": [ + 100, + 100, + 100, + 0 + ], + "locked": true, + "priority": 1, + "focus": 2 + }, + { + "x": 128, + "y": -64, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "locked": true, + "priority": 1, + "focus": 1 + }, + { + "x": 0, + "y": -20, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 2, + "graphicFrame": 1, + "opacity": 60, + "priority": 1, + "focus": 2 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "tone": [ + 100, + 100, + 100, + 0 + ], + "locked": true, + "priority": 1, + "focus": 2 + }, + { + "x": 128, + "y": -64, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "locked": true, + "priority": 1, + "focus": 1 + }, + { + "x": 0, + "y": -20, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 2, + "graphicFrame": 1, + "opacity": 60, + "priority": 1, + "focus": 2 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "tone": [ + 100, + 100, + 100, + 0 + ], + "locked": true, + "priority": 1, + "focus": 2 + }, + { + "x": 128, + "y": -64, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "locked": true, + "priority": 1, + "focus": 1 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "tone": [ + 255, + 255, + 255, + 255 + ], + "locked": true, + "priority": 1, + "focus": 2 + }, + { + "x": 128, + "y": -64, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "locked": true, + "priority": 1, + "focus": 1 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "tone": [ + 255, + 255, + 255, + 0 + ], + "locked": true, + "priority": 1, + "focus": 2 + }, + { + "x": 128, + "y": -64, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "locked": true, + "priority": 1, + "focus": 1 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "tone": [ + 255, + 255, + 255, + 255 + ], + "locked": true, + "priority": 1, + "focus": 2 + }, + { + "x": 128, + "y": -64, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "locked": true, + "priority": 1, + "focus": 1 + } + ] + ], + "frameTimedEvents": {}, + "position": 4, + "hue": 0 +} \ No newline at end of file diff --git a/public/exp-sprites.json b/public/exp-sprites.json index 947bffd399d..2bf8c2bf798 100644 --- a/public/exp-sprites.json +++ b/public/exp-sprites.json @@ -201,6 +201,8 @@ "6211", "6215", "6215", + "6215f", + "6215f", "65-mega", "65-mega", "650", @@ -259,10 +261,10 @@ "666-fancy", "666-garden", "666-garden", - "666-high", - "666-high", - "666-icy", - "666-icy", + "666-high-plains", + "666-high-plains", + "666-icy-snow", + "666-icy-snow", "666-jungle", "666-jungle", "666-marine", @@ -275,8 +277,8 @@ "666-monsoon", "666-ocean", "666-ocean", - "666-poke", - "666-poke", + "666-poke-ball", + "666-poke-ball", "666-polar", "666-polar", "666-river", @@ -291,8 +293,8 @@ "666-tundra", "667", "667", - "668-female", - "668-female", + "668f", + "668f", "668", "668", "669-blue", @@ -337,8 +339,7 @@ "6724", "673", "673", - "674", - "674", + "675", "675", "676", @@ -381,16 +382,14 @@ "692", "693", "693", - "694", - "694", + "695", "695", "696", "696", "697", "697", - "698", - "698", + "699", "699", "700", @@ -399,18 +398,13 @@ "701", "702", "702", - "703", - "703", + "704", "704", "705", "705", "706", "706", - "707", - "707", - "708", - "708", "709", "709", "710", @@ -421,8 +415,6 @@ "712", "713", "713", - "714", - "714", "715", "715", "716-active", @@ -431,16 +423,10 @@ "716-neutral", "717", "717", - "718-10", - "718-10", "718-complete", "718-complete", - "718", - "718", "719-mega", "719-mega", - "719", - "719", "720-unbound", "720-unbound", "720", @@ -1333,6 +1319,8 @@ "6211b", "6215b", "6215b", + "6215bf", + "6215bf", "65b-mega", "65b-mega", "650b", @@ -1391,10 +1379,10 @@ "666b-fancy", "666b-garden", "666b-garden", - "666b-high", - "666b-high", - "666b-icy", - "666b-icy", + "666b-high-plains", + "666b-high-plains", + "666b-icy-snow", + "666b-icy-snow", "666b-jungle", "666b-jungle", "666b-marine", @@ -1407,8 +1395,8 @@ "666b-monsoon", "666b-ocean", "666b-ocean", - "666b-poke", - "666b-poke", + "666b-poke-ball", + "666b-poke-ball", "666b-polar", "666b-polar", "666b-river", @@ -1423,8 +1411,8 @@ "666b-tundra", "667b", "667b", - "668b-female", - "668b-female", + "668bf", + "668bf", "668b", "668b", "669b-blue", @@ -1469,8 +1457,7 @@ "6724b", "673b", "673b", - "674b", - "674b", + "675b", "675b", "676b", @@ -1513,16 +1500,14 @@ "692b", "693b", "693b", - "694b", - "694b", + "695b", "695b", "696b", "696b", "697b", "697b", - "698b", - "698b", + "699b", "699b", "700b", @@ -1531,18 +1516,13 @@ "701b", "702b", "702b", - "703b", - "703b", + "704b", "704b", "705b", "705b", "706b", "706b", - "707b", - "707b", - "708b", - "708b", "709b", "709b", "710b", @@ -1553,8 +1533,6 @@ "712b", "713b", "713b", - "714b", - "714b", "715b", "715b", "716b-active", @@ -1563,16 +1541,10 @@ "716b-neutral", "717b", "717b", - "718b-10", - "718b-10", "718b-complete", "718b-complete", - "718b", - "718b", "719b-mega", "719b-mega", - "719b", - "719b", "720b-unbound", "720b-unbound", "720b", @@ -2467,6 +2439,8 @@ "6211sb", "6215sb", "6215sb", + "6215sbf", + "6215sbf", "65sb-mega", "65sb-mega", "650sb", @@ -2525,10 +2499,10 @@ "666sb-fancy", "666sb-garden", "666sb-garden", - "666sb-high", - "666sb-high", - "666sb-icy", - "666sb-icy", + "666sb-high-plains", + "666sb-high-plains", + "666sb-icy-snow", + "666sb-icy-snow", "666sb-jungle", "666sb-jungle", "666sb-marine", @@ -2541,8 +2515,8 @@ "666sb-monsoon", "666sb-ocean", "666sb-ocean", - "666sb-poke", - "666sb-poke", + "666sb-poke-ball", + "666sb-poke-ball", "666sb-polar", "666sb-polar", "666sb-river", @@ -2559,6 +2533,8 @@ "667sb", "668sb", "668sb", + "668sbf", + "668sbf", "669sb-blue", "669sb-blue", "669sb-orange", @@ -2601,8 +2577,7 @@ "6724sb", "673sb", "673sb", - "674sb", - "674sb", + "675sb", "675sb", "676sb", @@ -2645,16 +2620,14 @@ "692sb", "693sb", "693sb", - "694sb", - "694sb", + "695sb", "695sb", "696sb", "696sb", "697sb", "697sb", - "698sb", - "698sb", + "699sb", "699sb", "700sb", @@ -2663,18 +2636,13 @@ "701sb", "702sb", "702sb", - "703sb", - "703sb", + "704sb", "704sb", "705sb", "705sb", "706sb", "706sb", - "707sb", - "707sb", - "708sb", - "708sb", "709sb", "709sb", "710sb", @@ -2685,8 +2653,6 @@ "712sb", "713sb", "713sb", - "714sb", - "714sb", "715sb", "715sb", "716sb-active", @@ -2695,16 +2661,10 @@ "716sb-neutral", "717sb", "717sb", - "718sb-10", - "718sb-10", "718sb-complete", "718sb-complete", - "718sb", - "718sb", "719sb-mega", "719sb-mega", - "719sb", - "719sb", "720sb-unbound", "720sb-unbound", "720sb", @@ -3604,6 +3564,8 @@ "6211s", "6215s", "6215s", + "6215sf", + "6215sf", "65s-mega", "65s-mega", "650s", @@ -3662,10 +3624,10 @@ "666s-fancy", "666s-garden", "666s-garden", - "666s-high", - "666s-high", - "666s-icy", - "666s-icy", + "666s-high-plains", + "666s-high-plains", + "666s-icy-snow", + "666s-icy-snow", "666s-jungle", "666s-jungle", "666s-marine", @@ -3678,8 +3640,8 @@ "666s-monsoon", "666s-ocean", "666s-ocean", - "666s-poke", - "666s-poke", + "666s-poke-ball", + "666s-poke-ball", "666s-polar", "666s-polar", "666s-river", @@ -3694,8 +3656,8 @@ "666s-tundra", "667s", "667s", - "668s-female", - "668s-female", + "668sf", + "668sf", "668s", "668s", "669s-blue", @@ -3740,8 +3702,7 @@ "6724s", "673s", "673s", - "674s", - "674s", + "675s", "675s", "676s", @@ -3784,16 +3745,14 @@ "692s", "693s", "693s", - "694s", - "694s", + "695s", "695s", "696s", "696s", "697s", "697s", - "698s", - "698s", + "699s", "699s", "700s", @@ -3802,18 +3761,13 @@ "701s", "702s", "702s", - "703s", - "703s", + "704s", "704s", "705s", "705s", "706s", "706s", - "707s", - "707s", - "708s", - "708s", "709s", "709s", "710s", @@ -3824,8 +3778,6 @@ "712s", "713s", "713s", - "714s", - "714s", "715s", "715s", "716s-active", @@ -3834,16 +3786,10 @@ "716s-neutral", "717s", "717s", - "718s-10", - "718s-10", "718s-complete", "718s-complete", - "718s", - "718s", "719s-mega", "719s-mega", - "719s", - "719s", "720s-unbound", "720s-unbound", "720s", @@ -4587,6 +4533,7 @@ "475-mega_3", "475-mega_3", "6215", + "6215f", "653", "654", "6549", @@ -4598,19 +4545,15 @@ "666-archipelago", "666-continental", "666-elegant", - "666-fancy_2", - "666-fancy_2", - "666-fancy_3", - "666-fancy_3", + "666-fancy", + "666-fancy", "666-garden", "666-high", - "666-icy", + "666-icy-snow", "666-jungle", "666-marine", - "666-meadow_2", - "666-meadow_2", - "666-meadow_3", - "666-meadow_3", + "666-meadow", + "666-meadow", "666-modern", "666-monsoon", "666-ocean", @@ -4619,8 +4562,6 @@ "666-poke", "666-polar", "666-river", - "666-river_2", - "666-river_2", "666-sandstorm", "666-savanna", "666-sun", @@ -4641,7 +4582,6 @@ "705_3", "705_3", "706", - "708", "709", "710", "711", @@ -4826,6 +4766,10 @@ "150b-mega", "181b-mega", "212b-mega", + "248b-mega", + "248b-mega", + "257b-mega", + "257b-mega", "282b-mega", "3b-mega_2", "3b-mega_2", @@ -4856,6 +4800,7 @@ "475b-mega_3", "475b-mega_3", "6215b", + "6215bf", "653b", "654b", "6549b", @@ -4866,86 +4811,46 @@ "665b", "665_2b", "665_2b", - "666b-archipelago_2", - "666b-archipelago_2", - "666b-archipelago_3", - "666b-archipelago_3", - "666b-continental_2", - "666b-continental_2", - "666b-continental_3", - "666b-continental_3", - "666b-elegant_2", - "666b-elegant_2", - "666b-elegant_3", - "666b-elegant_3", - "666b-fancy_2", - "666b-fancy_2", - "666b-fancy_3", - "666b-fancy_3", - "666b-garden_2", - "666b-garden_2", - "666b-garden_3", - "666b-garden_3", - "666b-high", - "666b-high", - "666b-high", - "666b-high", - "666b-icy", - "666b-icy", - "666b-icy", - "666b-icy", - "666b-jungle_2", - "666b-jungle_2", - "666b-jungle_3", - "666b-jungle_3", - "666b-marine_2", - "666b-marine_2", - "666b-marine_3", - "666b-marine_3", - "666b-meadow_2", - "666b-meadow_2", - "666b-meadow_3", - "666b-meadow_3", - "666b-modern_2", - "666b-modern_2", - "666b-modern_3", - "666b-modern_3", - "666b-monsoon_2", - "666b-monsoon_2", - "666b-monsoon_3", - "666b-monsoon_3", - "666b-ocean_2", - "666b-ocean_2", - "666b-ocean_3", - "666b-ocean_3", - "666b-poke", - "666b-poke", - "666b-poke", - "666b-poke", - "666b-polar_2", - "666b-polar_2", - "666b-polar_3", - "666b-polar_3", - "666b-river_2", - "666b-river_2", - "666b-river_3", - "666b-river_3", - "666b-sandstorm_2", - "666b-sandstorm_2", - "666b-sandstorm_3", - "666b-sandstorm_3", - "666b-savanna_2", - "666b-savanna_2", - "666b-savanna_3", - "666b-savanna_3", - "666b-sun_2", - "666b-sun_2", - "666b-sun_3", - "666b-sun_3", - "666b-tundra_2", - "666b-tundra_2", - "666b-tundra_3", - "666b-tundra_3", + "666b-archipelago", + "666b-archipelago", + "666b-continental", + "666b-continental", + "666b-elegant", + "666b-elegant", + "666b-fancy", + "666b-fancy", + "666b-garden", + "666b-garden", + "666b-high-plains", + "666b-high-plains", + "666b-icy-snow", + "666b-icy-snow", + "666b-jungle", + "666b-jungle", + "666b-marine", + "666b-marine", + "666b-meadow", + "666b-meadow", + "666b-modern", + "666b-modern", + "666b-monsoon", + "666b-monsoon", + "666b-ocean", + "666b-ocean", + "666b-poke-ball", + "666b-poke-ball", + "666b-polar", + "666b-polar", + "666b-river", + "666b-river", + "666b-sandstorm", + "666b-sandstorm", + "666b-savanna", + "666b-savanna", + "666b-sun", + "666b-sun", + "666b-tundra", + "666b-tundra", "6705b", "6706_2b", "6706_2b", @@ -4957,7 +4862,6 @@ "704b", "705b", "706b", - "708b", "709b", "710b", "711b", diff --git a/public/fonts/pkmnems.ttf b/public/fonts/pkmnems.ttf index b0b50d0f10f..2cc7bfeee62 100644 Binary files a/public/fonts/pkmnems.ttf and b/public/fonts/pkmnems.ttf differ diff --git a/public/fonts/pokemon-emerald-pro.ttf b/public/fonts/pokemon-emerald-pro.ttf index 84e49ebbc40..d63ff2d6470 100644 Binary files a/public/fonts/pokemon-emerald-pro.ttf and b/public/fonts/pokemon-emerald-pro.ttf differ diff --git a/public/images/battle_anims/terastallize.png b/public/images/battle_anims/terastallize.png new file mode 100644 index 00000000000..78fbb7ec335 Binary files /dev/null and b/public/images/battle_anims/terastallize.png differ diff --git a/public/images/events/pkmnday2025event-de.png b/public/images/events/pkmnday2025event-de.png new file mode 100644 index 00000000000..4cc53546752 Binary files /dev/null and b/public/images/events/pkmnday2025event-de.png differ diff --git a/public/images/events/pkmnday2025event-en.png b/public/images/events/pkmnday2025event-en.png new file mode 100644 index 00000000000..e9caa9e19d6 Binary files /dev/null and b/public/images/events/pkmnday2025event-en.png differ diff --git a/public/images/events/pkmnday2025event-es-ES.png b/public/images/events/pkmnday2025event-es-ES.png new file mode 100644 index 00000000000..e1ab096dffc Binary files /dev/null and b/public/images/events/pkmnday2025event-es-ES.png differ diff --git a/public/images/events/pkmnday2025event-fr.png b/public/images/events/pkmnday2025event-fr.png new file mode 100644 index 00000000000..037d1e06e61 Binary files /dev/null and b/public/images/events/pkmnday2025event-fr.png differ diff --git a/public/images/events/pkmnday2025event-it.png b/public/images/events/pkmnday2025event-it.png new file mode 100644 index 00000000000..f38a60330fa Binary files /dev/null and b/public/images/events/pkmnday2025event-it.png differ diff --git a/public/images/events/pkmnday2025event-ja.png b/public/images/events/pkmnday2025event-ja.png new file mode 100644 index 00000000000..94b02ad93a0 Binary files /dev/null and b/public/images/events/pkmnday2025event-ja.png differ diff --git a/public/images/events/pkmnday2025event-ko.png b/public/images/events/pkmnday2025event-ko.png new file mode 100644 index 00000000000..aed9ee3fb28 Binary files /dev/null and b/public/images/events/pkmnday2025event-ko.png differ diff --git a/public/images/events/pkmnday2025event-pt-BR.png b/public/images/events/pkmnday2025event-pt-BR.png new file mode 100644 index 00000000000..2190bbac535 Binary files /dev/null and b/public/images/events/pkmnday2025event-pt-BR.png differ diff --git a/public/images/events/pkmnday2025event-zh-CN.png b/public/images/events/pkmnday2025event-zh-CN.png new file mode 100644 index 00000000000..a3430482dd0 Binary files /dev/null and b/public/images/events/pkmnday2025event-zh-CN.png differ diff --git a/public/images/events/valentines2025event-de.png b/public/images/events/valentines2025event-de.png new file mode 100644 index 00000000000..8dd41924a77 Binary files /dev/null and b/public/images/events/valentines2025event-de.png differ diff --git a/public/images/events/valentines2025event-en.png b/public/images/events/valentines2025event-en.png new file mode 100644 index 00000000000..dc36dad3394 Binary files /dev/null and b/public/images/events/valentines2025event-en.png differ diff --git a/public/images/events/valentines2025event-es-ES.png b/public/images/events/valentines2025event-es-ES.png new file mode 100644 index 00000000000..0915299b7bd Binary files /dev/null and b/public/images/events/valentines2025event-es-ES.png differ diff --git a/public/images/events/valentines2025event-fr.png b/public/images/events/valentines2025event-fr.png new file mode 100644 index 00000000000..dbaf23101ed Binary files /dev/null and b/public/images/events/valentines2025event-fr.png differ diff --git a/public/images/events/valentines2025event-it.png b/public/images/events/valentines2025event-it.png new file mode 100644 index 00000000000..b10eb8083be Binary files /dev/null and b/public/images/events/valentines2025event-it.png differ diff --git a/public/images/events/valentines2025event-ja.png b/public/images/events/valentines2025event-ja.png new file mode 100644 index 00000000000..7e9fe5ad3d4 Binary files /dev/null and b/public/images/events/valentines2025event-ja.png differ diff --git a/public/images/events/valentines2025event-ko.png b/public/images/events/valentines2025event-ko.png new file mode 100644 index 00000000000..558a402fc77 Binary files /dev/null and b/public/images/events/valentines2025event-ko.png differ diff --git a/public/images/events/valentines2025event-pt-BR.png b/public/images/events/valentines2025event-pt-BR.png new file mode 100644 index 00000000000..45fa40f30fc Binary files /dev/null and b/public/images/events/valentines2025event-pt-BR.png differ diff --git a/public/images/events/valentines2025event-zh-CN.png b/public/images/events/valentines2025event-zh-CN.png new file mode 100644 index 00000000000..13256da720c Binary files /dev/null and b/public/images/events/valentines2025event-zh-CN.png differ diff --git a/public/images/events/winter_holidays2024-event-de.png b/public/images/events/winter_holidays2024-event-de.png new file mode 100644 index 00000000000..1c2e10086f2 Binary files /dev/null and b/public/images/events/winter_holidays2024-event-de.png differ diff --git a/public/images/events/winter_holidays2024-event-en.png b/public/images/events/winter_holidays2024-event-en.png new file mode 100644 index 00000000000..3a361e99bee Binary files /dev/null and b/public/images/events/winter_holidays2024-event-en.png differ diff --git a/public/images/events/winter_holidays2024-event-es-ES.png b/public/images/events/winter_holidays2024-event-es-ES.png new file mode 100644 index 00000000000..f7e64268ad5 Binary files /dev/null and b/public/images/events/winter_holidays2024-event-es-ES.png differ diff --git a/public/images/events/winter_holidays2024-event-fr.png b/public/images/events/winter_holidays2024-event-fr.png new file mode 100644 index 00000000000..278f5f2afd4 Binary files /dev/null and b/public/images/events/winter_holidays2024-event-fr.png differ diff --git a/public/images/events/winter_holidays2024-event-it.png b/public/images/events/winter_holidays2024-event-it.png new file mode 100644 index 00000000000..f3062f40d51 Binary files /dev/null and b/public/images/events/winter_holidays2024-event-it.png differ diff --git a/public/images/events/winter_holidays2024-event-ja.png b/public/images/events/winter_holidays2024-event-ja.png new file mode 100644 index 00000000000..0a217c81d03 Binary files /dev/null and b/public/images/events/winter_holidays2024-event-ja.png differ diff --git a/public/images/events/winter_holidays2024-event-ko.png b/public/images/events/winter_holidays2024-event-ko.png new file mode 100644 index 00000000000..83c9a8525f0 Binary files /dev/null and b/public/images/events/winter_holidays2024-event-ko.png differ diff --git a/public/images/events/winter_holidays2024-event-pt-BR.png b/public/images/events/winter_holidays2024-event-pt-BR.png new file mode 100644 index 00000000000..1f003be5986 Binary files /dev/null and b/public/images/events/winter_holidays2024-event-pt-BR.png differ diff --git a/public/images/events/winter_holidays2024-event-zh-CN.png b/public/images/events/winter_holidays2024-event-zh-CN.png new file mode 100644 index 00000000000..03a9f57c6f2 Binary files /dev/null and b/public/images/events/winter_holidays2024-event-zh-CN.png differ diff --git a/public/images/events/yearofthesnakeevent-de.png b/public/images/events/yearofthesnakeevent-de.png new file mode 100644 index 00000000000..f5e684bbcd5 Binary files /dev/null and b/public/images/events/yearofthesnakeevent-de.png differ diff --git a/public/images/events/yearofthesnakeevent-en.png b/public/images/events/yearofthesnakeevent-en.png new file mode 100644 index 00000000000..ddd34023b94 Binary files /dev/null and b/public/images/events/yearofthesnakeevent-en.png differ diff --git a/public/images/events/yearofthesnakeevent-es-ES.png b/public/images/events/yearofthesnakeevent-es-ES.png new file mode 100644 index 00000000000..76474c475c5 Binary files /dev/null and b/public/images/events/yearofthesnakeevent-es-ES.png differ diff --git a/public/images/events/yearofthesnakeevent-fr.png b/public/images/events/yearofthesnakeevent-fr.png new file mode 100644 index 00000000000..88ad3e770ca Binary files /dev/null and b/public/images/events/yearofthesnakeevent-fr.png differ diff --git a/public/images/events/yearofthesnakeevent-it.png b/public/images/events/yearofthesnakeevent-it.png new file mode 100644 index 00000000000..a02e7048d2a Binary files /dev/null and b/public/images/events/yearofthesnakeevent-it.png differ diff --git a/public/images/events/yearofthesnakeevent-ja.png b/public/images/events/yearofthesnakeevent-ja.png new file mode 100644 index 00000000000..ba13b5d281f Binary files /dev/null and b/public/images/events/yearofthesnakeevent-ja.png differ diff --git a/public/images/events/yearofthesnakeevent-ko.png b/public/images/events/yearofthesnakeevent-ko.png new file mode 100644 index 00000000000..dca6bcbbd15 Binary files /dev/null and b/public/images/events/yearofthesnakeevent-ko.png differ diff --git a/public/images/events/yearofthesnakeevent-pt-BR.png b/public/images/events/yearofthesnakeevent-pt-BR.png new file mode 100644 index 00000000000..a535aec2aa5 Binary files /dev/null and b/public/images/events/yearofthesnakeevent-pt-BR.png differ diff --git a/public/images/events/yearofthesnakeevent-zh-CN.png b/public/images/events/yearofthesnakeevent-zh-CN.png new file mode 100644 index 00000000000..3ab4fc565a7 Binary files /dev/null and b/public/images/events/yearofthesnakeevent-zh-CN.png differ diff --git a/public/images/pokemon/261.png b/public/images/pokemon/261.png index 9e47128a545..da22d88806f 100644 Binary files a/public/images/pokemon/261.png and b/public/images/pokemon/261.png differ diff --git a/public/images/pokemon/3-gigantamax.png b/public/images/pokemon/3-gigantamax.png index 4036c641327..d551638c880 100644 Binary files a/public/images/pokemon/3-gigantamax.png and b/public/images/pokemon/3-gigantamax.png differ diff --git a/public/images/pokemon/3-mega.png b/public/images/pokemon/3-mega.png index 9f867c8e13d..c15a9cac092 100644 Binary files a/public/images/pokemon/3-mega.png and b/public/images/pokemon/3-mega.png differ diff --git a/public/images/pokemon/3.png b/public/images/pokemon/3.png index b9239f3096e..534a48fdfa6 100644 Binary files a/public/images/pokemon/3.png and b/public/images/pokemon/3.png differ diff --git a/public/images/pokemon/335.json b/public/images/pokemon/335.json index 0279e0fba5a..a9313fcec5d 100644 --- a/public/images/pokemon/335.json +++ b/public/images/pokemon/335.json @@ -1,1910 +1,547 @@ -{ - "textures": [ - { - "image": "335.png", - "format": "RGBA8888", - "size": { - "w": 366, - "h": 366 - }, - "scale": 1, - "frames": [ - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 68, - "h": 63 - }, - "frame": { - "x": 0, - "y": 0, - "w": 68, - "h": 63 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 68, - "h": 63 - }, - "frame": { - "x": 0, - "y": 0, - "w": 68, - "h": 63 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 68, - "h": 63 - }, - "frame": { - "x": 0, - "y": 0, - "w": 68, - "h": 63 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 68, - "h": 63 - }, - "frame": { - "x": 0, - "y": 0, - "w": 68, - "h": 63 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 65, - "h": 66 - }, - "frame": { - "x": 0, - "y": 63, - "w": 65, - "h": 66 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 67, - "h": 63 - }, - "frame": { - "x": 68, - "y": 0, - "w": 67, - "h": 63 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 67, - "h": 63 - }, - "frame": { - "x": 68, - "y": 0, - "w": 67, - "h": 63 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 68, - "h": 61 - }, - "frame": { - "x": 65, - "y": 63, - "w": 68, - "h": 61 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 68, - "h": 61 - }, - "frame": { - "x": 65, - "y": 63, - "w": 68, - "h": 61 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 68, - "h": 61 - }, - "frame": { - "x": 65, - "y": 63, - "w": 68, - "h": 61 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 68, - "h": 61 - }, - "frame": { - "x": 65, - "y": 63, - "w": 68, - "h": 61 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 64, - "h": 63 - }, - "frame": { - "x": 0, - "y": 129, - "w": 64, - "h": 63 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 64, - "h": 63 - }, - "frame": { - "x": 0, - "y": 129, - "w": 64, - "h": 63 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 64, - "h": 63 - }, - "frame": { - "x": 0, - "y": 129, - "w": 64, - "h": 63 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 64, - "h": 63 - }, - "frame": { - "x": 0, - "y": 129, - "w": 64, - "h": 63 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 61, - "h": 66 - }, - "frame": { - "x": 0, - "y": 192, - "w": 61, - "h": 66 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 61, - "h": 66 - }, - "frame": { - "x": 0, - "y": 258, - "w": 61, - "h": 66 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 61, - "h": 66 - }, - "frame": { - "x": 0, - "y": 258, - "w": 61, - "h": 66 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 64, - "h": 62 - }, - "frame": { - "x": 135, - "y": 0, - "w": 64, - "h": 62 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 64, - "h": 62 - }, - "frame": { - "x": 135, - "y": 0, - "w": 64, - "h": 62 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 65, - "h": 61 - }, - "frame": { - "x": 199, - "y": 0, - "w": 65, - "h": 61 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 1, - "y": 8, - "w": 67, - "h": 58 - }, - "frame": { - "x": 264, - "y": 0, - "w": 67, - "h": 58 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 1, - "y": 8, - "w": 67, - "h": 58 - }, - "frame": { - "x": 264, - "y": 0, - "w": 67, - "h": 58 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 1, - "y": 8, - "w": 67, - "h": 58 - }, - "frame": { - "x": 264, - "y": 0, - "w": 67, - "h": 58 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 1, - "y": 8, - "w": 67, - "h": 58 - }, - "frame": { - "x": 264, - "y": 0, - "w": 67, - "h": 58 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 64, - "h": 59 - }, - "frame": { - "x": 65, - "y": 124, - "w": 64, - "h": 59 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 64, - "h": 59 - }, - "frame": { - "x": 65, - "y": 124, - "w": 64, - "h": 59 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 64, - "h": 59 - }, - "frame": { - "x": 65, - "y": 124, - "w": 64, - "h": 59 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 64, - "h": 59 - }, - "frame": { - "x": 65, - "y": 124, - "w": 64, - "h": 59 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 64, - "h": 61 - }, - "frame": { - "x": 64, - "y": 183, - "w": 64, - "h": 61 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 62, - "h": 65 - }, - "frame": { - "x": 61, - "y": 244, - "w": 62, - "h": 65 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 6, - "y": 9, - "w": 63, - "h": 57 - }, - "frame": { - "x": 61, - "y": 309, - "w": 63, - "h": 57 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 61, - "h": 64 - }, - "frame": { - "x": 123, - "y": 244, - "w": 61, - "h": 64 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 1, - "y": 8, - "w": 63, - "h": 58 - }, - "frame": { - "x": 124, - "y": 308, - "w": 63, - "h": 58 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 3, - "y": 5, - "w": 61, - "h": 61 - }, - "frame": { - "x": 128, - "y": 183, - "w": 61, - "h": 61 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 3, - "y": 5, - "w": 61, - "h": 61 - }, - "frame": { - "x": 128, - "y": 183, - "w": 61, - "h": 61 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 3, - "y": 5, - "w": 61, - "h": 61 - }, - "frame": { - "x": 128, - "y": 183, - "w": 61, - "h": 61 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 3, - "y": 5, - "w": 61, - "h": 61 - }, - "frame": { - "x": 128, - "y": 183, - "w": 61, - "h": 61 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 9, - "w": 62, - "h": 57 - }, - "frame": { - "x": 187, - "y": 307, - "w": 62, - "h": 57 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 9, - "w": 62, - "h": 57 - }, - "frame": { - "x": 187, - "y": 307, - "w": 62, - "h": 57 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 62, - "h": 63 - }, - "frame": { - "x": 264, - "y": 58, - "w": 62, - "h": 63 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 55, - "h": 63 - }, - "frame": { - "x": 133, - "y": 63, - "w": 55, - "h": 63 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 55, - "h": 63 - }, - "frame": { - "x": 133, - "y": 63, - "w": 55, - "h": 63 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 55, - "h": 63 - }, - "frame": { - "x": 133, - "y": 63, - "w": 55, - "h": 63 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 55, - "h": 63 - }, - "frame": { - "x": 133, - "y": 63, - "w": 55, - "h": 63 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 55, - "h": 66 - }, - "frame": { - "x": 188, - "y": 62, - "w": 55, - "h": 66 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 55, - "h": 66 - }, - "frame": { - "x": 188, - "y": 62, - "w": 55, - "h": 66 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 58, - "h": 66 - }, - "frame": { - "x": 189, - "y": 128, - "w": 58, - "h": 66 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 60, - "h": 66 - }, - "frame": { - "x": 247, - "y": 121, - "w": 60, - "h": 66 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 59, - "h": 63 - }, - "frame": { - "x": 307, - "y": 121, - "w": 59, - "h": 63 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 59, - "h": 63 - }, - "frame": { - "x": 307, - "y": 121, - "w": 59, - "h": 63 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 59, - "h": 63 - }, - "frame": { - "x": 307, - "y": 121, - "w": 59, - "h": 63 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 59, - "h": 63 - }, - "frame": { - "x": 307, - "y": 121, - "w": 59, - "h": 63 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 247, - "y": 187, - "w": 60, - "h": 63 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 247, - "y": 187, - "w": 60, - "h": 63 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 247, - "y": 187, - "w": 60, - "h": 63 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 247, - "y": 187, - "w": 60, - "h": 63 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 58, - "h": 63 - }, - "frame": { - "x": 307, - "y": 184, - "w": 58, - "h": 63 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 58, - "h": 63 - }, - "frame": { - "x": 307, - "y": 184, - "w": 58, - "h": 63 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 58, - "h": 63 - }, - "frame": { - "x": 307, - "y": 184, - "w": 58, - "h": 63 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 58, - "h": 63 - }, - "frame": { - "x": 307, - "y": 184, - "w": 58, - "h": 63 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 249, - "y": 250, - "w": 60, - "h": 63 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:9c4e9647cd30b406386dcfa45795951c:b817a280fcd689ce74ea32e378a31e74:40bb9f4809624b12bf79bbfe664bea73$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0002.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0003.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0004.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0005.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 185, "w": 59, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 7, "w": 59, "h": 59 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0007.png", + "frame": { "x": 119, "y": 182, "w": 62, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 62, "h": 57 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0008.png", + "frame": { "x": 119, "y": 125, "w": 64, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 64, "h": 57 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0009.png", + "frame": { "x": 195, "y": 0, "w": 66, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 66, "h": 60 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0010.png", + "frame": { "x": 129, "y": 0, "w": 66, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 66, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0011.png", + "frame": { "x": 320, "y": 0, "w": 62, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 62, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0012.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0013.png", + "frame": { "x": 0, "y": 244, "w": 53, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 53, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0014.png", + "frame": { "x": 59, "y": 188, "w": 56, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 56, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0015.png", + "frame": { "x": 306, "y": 187, "w": 57, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 57, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0016.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0017.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0018.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0019.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0020.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0021.png", + "frame": { "x": 0, "y": 185, "w": 59, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 7, "w": 59, "h": 59 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0022.png", + "frame": { "x": 119, "y": 182, "w": 62, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 62, "h": 57 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0023.png", + "frame": { "x": 119, "y": 125, "w": 64, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 64, "h": 57 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0024.png", + "frame": { "x": 195, "y": 0, "w": 66, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 66, "h": 60 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0025.png", + "frame": { "x": 129, "y": 0, "w": 66, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 66, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0026.png", + "frame": { "x": 320, "y": 0, "w": 62, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 62, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0027.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0028.png", + "frame": { "x": 0, "y": 244, "w": 53, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 53, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0029.png", + "frame": { "x": 59, "y": 188, "w": 56, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 56, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0030.png", + "frame": { "x": 306, "y": 187, "w": 57, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 57, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0031.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0032.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0033.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0034.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0035.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 185, "w": 59, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 7, "w": 59, "h": 59 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0037.png", + "frame": { "x": 119, "y": 182, "w": 62, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 62, "h": 57 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0038.png", + "frame": { "x": 119, "y": 125, "w": 64, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 64, "h": 57 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0039.png", + "frame": { "x": 195, "y": 0, "w": 66, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 66, "h": 60 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0040.png", + "frame": { "x": 129, "y": 0, "w": 66, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 66, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0041.png", + "frame": { "x": 320, "y": 0, "w": 62, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 62, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0042.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 244, "w": 53, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 53, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0044.png", + "frame": { "x": 59, "y": 188, "w": 56, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 56, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0045.png", + "frame": { "x": 306, "y": 187, "w": 57, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 57, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0046.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0047.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0048.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0049.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0050.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0051.png", + "frame": { "x": 248, "y": 129, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0052.png", + "frame": { "x": 188, "y": 123, "w": 60, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 60, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0053.png", + "frame": { "x": 0, "y": 125, "w": 61, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 61, "h": 60 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 66, "w": 63, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 63, "h": 59 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0055.png", + "frame": { "x": 234, "y": 190, "w": 61, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 61, "h": 56 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0056.png", + "frame": { "x": 234, "y": 246, "w": 60, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 11, "w": 60, "h": 55 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0057.png", + "frame": { "x": 115, "y": 239, "w": 61, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 11, "w": 61, "h": 56 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0058.png", + "frame": { "x": 63, "y": 62, "w": 62, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 7, "w": 62, "h": 60 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0059.png", + "frame": { "x": 63, "y": 0, "w": 66, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 4, "w": 66, "h": 62 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0060.png", + "frame": { "x": 0, "y": 0, "w": 63, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 63, "h": 66 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0061.png", + "frame": { "x": 261, "y": 0, "w": 59, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 59, "h": 66 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0062.png", + "frame": { "x": 181, "y": 184, "w": 53, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 53, "h": 66 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0063.png", + "frame": { "x": 63, "y": 122, "w": 56, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 56, "h": 66 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0064.png", + "frame": { "x": 320, "y": 61, "w": 58, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 58, "h": 65 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0065.png", + "frame": { "x": 129, "y": 61, "w": 59, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 59, "h": 64 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0066.png", + "frame": { "x": 195, "y": 60, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 60, "h": 63 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0067.png", + "frame": { "x": 255, "y": 66, "w": 59, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 59, "h": 63 }, + "sourceSize": { "w": 74, "h": 67 } + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.9.2-x64", + "image": "335.png", + "format": "I8", + "size": { "w": 382, "h": 305 }, + "scale": "1" + } } diff --git a/public/images/pokemon/335.png b/public/images/pokemon/335.png index e5d051dd850..65b56582339 100644 Binary files a/public/images/pokemon/335.png and b/public/images/pokemon/335.png differ diff --git a/public/images/pokemon/477.png b/public/images/pokemon/477.png index de140bf6ba9..1013ca3d0dd 100644 Binary files a/public/images/pokemon/477.png and b/public/images/pokemon/477.png differ diff --git a/public/images/pokemon/656.json b/public/images/pokemon/656.json index 9f2483c56b9..3776b4ed7e5 100644 --- a/public/images/pokemon/656.json +++ b/public/images/pokemon/656.json @@ -1,41 +1,20 @@ -{ - "textures": [ - { - "image": "656.png", - "format": "RGBA8888", - "size": { - "w": 35, - "h": 35 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:25355f0b039f39b6231cb75c6f8a0200:2e119e5dd64fab6d996ea751c24a38e0:9c4d208e6c2f857bfb0b23b8eea3326c$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 1, "y": 1, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 32, "h": 35 }, + "sourceSize": { "w": 32, "h": 35 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "656.png", + "format": "I8", + "size": { "w": 34, "h": 37 }, + "scale": "1" + } } diff --git a/public/images/pokemon/656.png b/public/images/pokemon/656.png index b653616955d..06a9cd58268 100644 Binary files a/public/images/pokemon/656.png and b/public/images/pokemon/656.png differ diff --git a/public/images/pokemon/658-ash.png b/public/images/pokemon/658-ash.png index a122df859bd..fa6ce5cb165 100644 Binary files a/public/images/pokemon/658-ash.png and b/public/images/pokemon/658-ash.png differ diff --git a/public/images/pokemon/666-continental.png b/public/images/pokemon/666-continental.png index 1bd15dbb70d..b45f5c4e76d 100644 Binary files a/public/images/pokemon/666-continental.png and b/public/images/pokemon/666-continental.png differ diff --git a/public/images/pokemon/666-fancy.png b/public/images/pokemon/666-fancy.png index ec5e8a5f6e8..9e40deb3568 100644 Binary files a/public/images/pokemon/666-fancy.png and b/public/images/pokemon/666-fancy.png differ diff --git a/public/images/pokemon/666-high-plains.png b/public/images/pokemon/666-high-plains.png index c294984e469..45cb22fc592 100644 Binary files a/public/images/pokemon/666-high-plains.png and b/public/images/pokemon/666-high-plains.png differ diff --git a/public/images/pokemon/666-river.png b/public/images/pokemon/666-river.png index eeabeecb069..ca93fd612b7 100644 Binary files a/public/images/pokemon/666-river.png and b/public/images/pokemon/666-river.png differ diff --git a/public/images/pokemon/668-female.png b/public/images/pokemon/668-female.png deleted file mode 100644 index c8f4e205491..00000000000 Binary files a/public/images/pokemon/668-female.png and /dev/null differ diff --git a/public/images/pokemon/674.json b/public/images/pokemon/674.json index 9534a585c64..9954c30188d 100644 --- a/public/images/pokemon/674.json +++ b/public/images/pokemon/674.json @@ -1,41 +1,506 @@ -{ - "textures": [ - { - "image": "674.png", - "format": "RGBA8888", - "size": { - "w": 42, - "h": 42 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 28, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 28, - "h": 42 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:17675dc9d79a224d5cfe26d4ea11594d:afc8db52143597fb62ac44c9a1600a80:b823d10f1c9b4d501296982088ba63d6$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0002.png", + "frame": { "x": 29, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0003.png", + "frame": { "x": 58, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0004.png", + "frame": { "x": 87, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0005.png", + "frame": { "x": 58, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0006.png", + "frame": { "x": 29, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0008.png", + "frame": { "x": 29, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0009.png", + "frame": { "x": 58, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0010.png", + "frame": { "x": 87, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0011.png", + "frame": { "x": 58, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0012.png", + "frame": { "x": 29, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0013.png", + "frame": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0014.png", + "frame": { "x": 29, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0015.png", + "frame": { "x": 58, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0016.png", + "frame": { "x": 87, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0017.png", + "frame": { "x": 58, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0018.png", + "frame": { "x": 29, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0019.png", + "frame": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0020.png", + "frame": { "x": 29, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0021.png", + "frame": { "x": 58, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0022.png", + "frame": { "x": 87, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0023.png", + "frame": { "x": 58, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0024.png", + "frame": { "x": 29, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0026.png", + "frame": { "x": 29, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0027.png", + "frame": { "x": 58, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0028.png", + "frame": { "x": 87, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0029.png", + "frame": { "x": 58, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0030.png", + "frame": { "x": 29, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0031.png", + "frame": { "x": 0, "y": 42, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0032.png", + "frame": { "x": 29, "y": 42, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0033.png", + "frame": { "x": 58, "y": 42, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0034.png", + "frame": { "x": 87, "y": 42, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0035.png", + "frame": { "x": 58, "y": 42, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 84, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0037.png", + "frame": { "x": 29, "y": 84, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0038.png", + "frame": { "x": 58, "y": 84, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0039.png", + "frame": { "x": 87, "y": 84, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0040.png", + "frame": { "x": 0, "y": 126, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0041.png", + "frame": { "x": 87, "y": 84, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0042.png", + "frame": { "x": 58, "y": 84, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0043.png", + "frame": { "x": 29, "y": 84, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0044.png", + "frame": { "x": 58, "y": 84, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0045.png", + "frame": { "x": 87, "y": 84, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0046.png", + "frame": { "x": 0, "y": 126, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0047.png", + "frame": { "x": 87, "y": 84, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0048.png", + "frame": { "x": 58, "y": 84, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0049.png", + "frame": { "x": 29, "y": 84, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0050.png", + "frame": { "x": 0, "y": 84, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0051.png", + "frame": { "x": 58, "y": 42, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0052.png", + "frame": { "x": 87, "y": 42, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0053.png", + "frame": { "x": 29, "y": 126, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0054.png", + "frame": { "x": 29, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0055.png", + "frame": { "x": 58, "y": 126, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "674.png", + "format": "I8", + "size": { "w": 116, "h": 168 }, + "scale": "1" + } } diff --git a/public/images/pokemon/674.png b/public/images/pokemon/674.png index 3161096bb29..85b2fafb91b 100644 Binary files a/public/images/pokemon/674.png and b/public/images/pokemon/674.png differ diff --git a/public/images/pokemon/694.json b/public/images/pokemon/694.json index c770e137915..48e9623d7f4 100644 --- a/public/images/pokemon/694.json +++ b/public/images/pokemon/694.json @@ -1,41 +1,767 @@ -{ - "textures": [ - { - "image": "694.png", - "format": "RGBA8888", - "size": { - "w": 41, - "h": 41 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 38 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 38 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 38 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:a121458917a5069ac5fcf0438e46af2b:afcd331d4ef231f539d602827ea66e55:b0990f9650cfe63b836cbed33f0b44d8$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 41, "y": 176, "w": 41, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 41, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 158, "y": 137, "w": 42, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 12, "w": 42, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 133, "w": 43, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 12, "w": 43, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 114, "y": 132, "w": 44, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 12, "w": 44, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 95, "w": 45, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 45, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 227, "y": 131, "w": 46, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 46, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 273, "y": 136, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 13, "w": 44, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 82, "y": 208, "w": 41, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 13, "w": 41, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 246, "y": 211, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 13, "w": 39, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 207, "y": 211, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 13, "w": 39, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 285, "y": 211, "w": 38, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 13, "w": 38, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 123, "y": 213, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 14, "w": 39, "h": 36 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 0, "y": 209, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 13, "w": 40, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 167, "y": 206, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 12, "w": 40, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 200, "y": 168, "w": 41, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 41, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 41, "y": 176, "w": 41, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 41, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 158, "y": 137, "w": 42, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 12, "w": 42, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 133, "w": 43, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 12, "w": 43, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 114, "y": 132, "w": 44, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 12, "w": 44, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 0, "y": 95, "w": 45, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 45, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 227, "y": 131, "w": 46, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 46, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 273, "y": 136, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 13, "w": 44, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 82, "y": 208, "w": 41, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 13, "w": 41, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 246, "y": 211, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 13, "w": 39, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 207, "y": 211, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 13, "w": 39, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 285, "y": 211, "w": 38, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 13, "w": 38, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 123, "y": 213, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 14, "w": 39, "h": 36 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 0, "y": 209, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 13, "w": 40, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 167, "y": 206, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 12, "w": 40, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 200, "y": 168, "w": 41, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 41, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 41, "y": 176, "w": 41, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 41, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 158, "y": 137, "w": 42, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 12, "w": 42, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 0, "y": 133, "w": 43, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 12, "w": 43, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 114, "y": 132, "w": 44, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 12, "w": 44, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 0, "y": 95, "w": 45, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 45, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 227, "y": 131, "w": 46, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 46, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 273, "y": 136, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 13, "w": 44, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 82, "y": 208, "w": 41, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 13, "w": 41, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 246, "y": 211, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 13, "w": 39, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 207, "y": 211, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 13, "w": 39, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 285, "y": 211, "w": 38, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 13, "w": 38, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 123, "y": 213, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 14, "w": 39, "h": 36 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 209, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 13, "w": 40, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 167, "y": 206, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 12, "w": 40, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 200, "y": 168, "w": 41, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 41, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 41, "y": 176, "w": 41, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 41, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 158, "y": 137, "w": 42, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 12, "w": 42, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 0, "y": 133, "w": 43, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 12, "w": 43, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 114, "y": 132, "w": 44, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 12, "w": 44, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 0, "y": 95, "w": 45, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 45, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 227, "y": 131, "w": 46, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 46, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 273, "y": 136, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 13, "w": 44, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 82, "y": 208, "w": 41, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 13, "w": 41, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 246, "y": 211, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 13, "w": 39, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 207, "y": 211, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 13, "w": 39, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 285, "y": 211, "w": 38, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 13, "w": 38, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 123, "y": 213, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 14, "w": 39, "h": 36 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 0, "y": 209, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 13, "w": 40, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 167, "y": 206, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 12, "w": 40, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 200, "y": 168, "w": 41, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 41, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 41, "y": 176, "w": 41, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 41, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 282, "y": 173, "w": 41, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 41, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 241, "y": 173, "w": 41, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 41, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 0, "y": 171, "w": 41, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 41, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 85, "y": 170, "w": 41, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 41, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 227, "y": 93, "w": 52, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 12, "w": 52, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 57, "y": 50, "w": 55, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 55, "h": 39 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 56, "y": 0, "w": 56, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 56, "h": 50 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 112, "y": 0, "w": 56, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 56, "h": 49 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 0, "y": 0, "w": 56, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 56, "h": 50 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 224, "y": 47, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 281, "y": 46, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 168, "y": 0, "w": 56, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 56, "h": 48 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 281, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 170, "y": 93, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 57, "h": 44 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 224, "y": 0, "w": 57, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 57, "h": 47 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 0, "y": 50, "w": 57, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 45 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 281, "y": 92, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 57, "h": 44 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 57, "y": 94, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 57, "h": 44 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 112, "y": 49, "w": 58, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 58, "h": 45 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 114, "y": 94, "w": 56, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 56, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 170, "y": 48, "w": 53, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 53, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 126, "y": 175, "w": 41, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 12, "w": 41, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 43, "y": 138, "w": 42, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 12, "w": 42, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "694.png", + "format": "I8", + "size": { "w": 338, "h": 249 }, + "scale": "1" + } } diff --git a/public/images/pokemon/694.png b/public/images/pokemon/694.png index 2659476db8a..fbd210e7d89 100644 Binary files a/public/images/pokemon/694.png and b/public/images/pokemon/694.png differ diff --git a/public/images/pokemon/698.json b/public/images/pokemon/698.json index 34938139984..6baf41b0ce7 100644 --- a/public/images/pokemon/698.json +++ b/public/images/pokemon/698.json @@ -1,41 +1,1415 @@ -{ - "textures": [ - { - "image": "698.png", - "format": "RGBA8888", - "size": { - "w": 57, - "h": 57 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 57 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 57 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 57 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:563dc7193ff897a6bf95dc8334febb0f:0dc4e9f203f0efed6323a93621a24f2c:198087d69fed44d4a642fa3ba5c077d6$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0002.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0003.png", + "frame": { "x": 30, "y": 114, "w": 31, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 31, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0004.png", + "frame": { "x": 30, "y": 114, "w": 31, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 31, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0005.png", + "frame": { "x": 123, "y": 113, "w": 29, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 29, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0006.png", + "frame": { "x": 123, "y": 113, "w": 29, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 29, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0007.png", + "frame": { "x": 123, "y": 169, "w": 28, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 28, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0008.png", + "frame": { "x": 123, "y": 169, "w": 28, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 28, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0009.png", + "frame": { "x": 125, "y": 56, "w": 27, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 27, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0010.png", + "frame": { "x": 125, "y": 56, "w": 27, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 27, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0011.png", + "frame": { "x": 125, "y": 56, "w": 27, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 27, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0012.png", + "frame": { "x": 123, "y": 169, "w": 28, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 28, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0013.png", + "frame": { "x": 123, "y": 169, "w": 28, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 28, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0014.png", + "frame": { "x": 123, "y": 113, "w": 29, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 29, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0015.png", + "frame": { "x": 123, "y": 113, "w": 29, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 29, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0016.png", + "frame": { "x": 30, "y": 114, "w": 31, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 31, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0017.png", + "frame": { "x": 30, "y": 114, "w": 31, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 31, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0018.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0019.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0020.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0021.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0022.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0023.png", + "frame": { "x": 111, "y": 0, "w": 34, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 34, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0024.png", + "frame": { "x": 111, "y": 0, "w": 34, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 34, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0025.png", + "frame": { "x": 75, "y": 0, "w": 36, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 36, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0026.png", + "frame": { "x": 75, "y": 0, "w": 36, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 36, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0027.png", + "frame": { "x": 38, "y": 0, "w": 37, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 37, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0028.png", + "frame": { "x": 38, "y": 0, "w": 37, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 37, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0029.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 38, "h": 53 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0030.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 38, "h": 53 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0031.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 38, "h": 53 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0032.png", + "frame": { "x": 38, "y": 0, "w": 37, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 37, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0033.png", + "frame": { "x": 38, "y": 0, "w": 37, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 37, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0034.png", + "frame": { "x": 75, "y": 0, "w": 36, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 36, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0035.png", + "frame": { "x": 75, "y": 0, "w": 36, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 36, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0036.png", + "frame": { "x": 111, "y": 0, "w": 34, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 34, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0037.png", + "frame": { "x": 111, "y": 0, "w": 34, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 34, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0038.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0039.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0040.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0041.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0042.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0043.png", + "frame": { "x": 30, "y": 114, "w": 31, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 31, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0044.png", + "frame": { "x": 30, "y": 114, "w": 31, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 31, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0045.png", + "frame": { "x": 123, "y": 113, "w": 29, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 29, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0046.png", + "frame": { "x": 123, "y": 113, "w": 29, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 29, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0047.png", + "frame": { "x": 123, "y": 169, "w": 28, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 28, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0048.png", + "frame": { "x": 123, "y": 169, "w": 28, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 28, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0049.png", + "frame": { "x": 125, "y": 56, "w": 27, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 27, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0050.png", + "frame": { "x": 125, "y": 56, "w": 27, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 27, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0051.png", + "frame": { "x": 125, "y": 56, "w": 27, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 27, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0052.png", + "frame": { "x": 123, "y": 169, "w": 28, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 28, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0053.png", + "frame": { "x": 123, "y": 169, "w": 28, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 28, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0054.png", + "frame": { "x": 123, "y": 113, "w": 29, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 29, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0055.png", + "frame": { "x": 123, "y": 113, "w": 29, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 29, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0056.png", + "frame": { "x": 30, "y": 114, "w": 31, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 31, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0057.png", + "frame": { "x": 30, "y": 114, "w": 31, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 31, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0058.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0059.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0060.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0063.png", + "frame": { "x": 111, "y": 0, "w": 34, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 34, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0064.png", + "frame": { "x": 111, "y": 0, "w": 34, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 34, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0065.png", + "frame": { "x": 75, "y": 0, "w": 36, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 36, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0066.png", + "frame": { "x": 75, "y": 0, "w": 36, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 36, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0067.png", + "frame": { "x": 38, "y": 0, "w": 37, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 37, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0068.png", + "frame": { "x": 38, "y": 0, "w": 37, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 37, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0069.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 38, "h": 53 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0070.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 38, "h": 53 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0071.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 38, "h": 53 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0072.png", + "frame": { "x": 38, "y": 0, "w": 37, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 37, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0073.png", + "frame": { "x": 38, "y": 0, "w": 37, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 37, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0074.png", + "frame": { "x": 75, "y": 0, "w": 36, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 36, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0075.png", + "frame": { "x": 75, "y": 0, "w": 36, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 36, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0076.png", + "frame": { "x": 111, "y": 0, "w": 34, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 34, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0077.png", + "frame": { "x": 111, "y": 0, "w": 34, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 34, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0078.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0079.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0080.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0081.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0082.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0083.png", + "frame": { "x": 30, "y": 114, "w": 31, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 31, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0084.png", + "frame": { "x": 30, "y": 114, "w": 31, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 31, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0085.png", + "frame": { "x": 123, "y": 113, "w": 29, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 29, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0086.png", + "frame": { "x": 123, "y": 113, "w": 29, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 29, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0087.png", + "frame": { "x": 123, "y": 169, "w": 28, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 28, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0088.png", + "frame": { "x": 123, "y": 169, "w": 28, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 28, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0089.png", + "frame": { "x": 125, "y": 56, "w": 27, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 27, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0090.png", + "frame": { "x": 125, "y": 56, "w": 27, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 27, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0091.png", + "frame": { "x": 125, "y": 56, "w": 27, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 27, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0092.png", + "frame": { "x": 123, "y": 169, "w": 28, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 28, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0093.png", + "frame": { "x": 123, "y": 169, "w": 28, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 28, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0094.png", + "frame": { "x": 123, "y": 113, "w": 29, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 29, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0095.png", + "frame": { "x": 123, "y": 113, "w": 29, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 29, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0096.png", + "frame": { "x": 30, "y": 114, "w": 31, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 31, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0097.png", + "frame": { "x": 30, "y": 114, "w": 31, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 31, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0098.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0099.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0100.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0101.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0102.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0103.png", + "frame": { "x": 111, "y": 0, "w": 34, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 34, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0104.png", + "frame": { "x": 111, "y": 0, "w": 34, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 34, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0105.png", + "frame": { "x": 75, "y": 0, "w": 36, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 36, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0106.png", + "frame": { "x": 75, "y": 0, "w": 36, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 36, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0107.png", + "frame": { "x": 38, "y": 0, "w": 37, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 37, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0108.png", + "frame": { "x": 38, "y": 0, "w": 37, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 37, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0109.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 38, "h": 53 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0110.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 38, "h": 53 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0111.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 38, "h": 53 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0112.png", + "frame": { "x": 38, "y": 0, "w": 37, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 37, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0113.png", + "frame": { "x": 38, "y": 0, "w": 37, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 37, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0114.png", + "frame": { "x": 75, "y": 0, "w": 36, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 36, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0115.png", + "frame": { "x": 75, "y": 0, "w": 36, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 36, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0116.png", + "frame": { "x": 111, "y": 0, "w": 34, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 34, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0117.png", + "frame": { "x": 111, "y": 0, "w": 34, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 34, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0118.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0119.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0120.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0121.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0122.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0123.png", + "frame": { "x": 61, "y": 115, "w": 30, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 30, "h": 58 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0124.png", + "frame": { "x": 61, "y": 115, "w": 30, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 30, "h": 58 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0125.png", + "frame": { "x": 93, "y": 113, "w": 30, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 30, "h": 59 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0126.png", + "frame": { "x": 93, "y": 113, "w": 30, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 30, "h": 59 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0127.png", + "frame": { "x": 0, "y": 113, "w": 30, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 30, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0128.png", + "frame": { "x": 0, "y": 113, "w": 30, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 30, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0129.png", + "frame": { "x": 0, "y": 53, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0130.png", + "frame": { "x": 0, "y": 53, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0131.png", + "frame": { "x": 31, "y": 54, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0132.png", + "frame": { "x": 31, "y": 54, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0133.png", + "frame": { "x": 62, "y": 55, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0134.png", + "frame": { "x": 62, "y": 55, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0135.png", + "frame": { "x": 0, "y": 53, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0136.png", + "frame": { "x": 0, "y": 53, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0137.png", + "frame": { "x": 31, "y": 54, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0138.png", + "frame": { "x": 31, "y": 54, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0139.png", + "frame": { "x": 62, "y": 55, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0140.png", + "frame": { "x": 62, "y": 55, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0141.png", + "frame": { "x": 0, "y": 53, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0142.png", + "frame": { "x": 0, "y": 53, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0143.png", + "frame": { "x": 31, "y": 54, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0144.png", + "frame": { "x": 31, "y": 54, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0145.png", + "frame": { "x": 62, "y": 55, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0146.png", + "frame": { "x": 62, "y": 55, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0147.png", + "frame": { "x": 0, "y": 53, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0148.png", + "frame": { "x": 0, "y": 53, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0149.png", + "frame": { "x": 31, "y": 54, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0150.png", + "frame": { "x": 31, "y": 54, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0151.png", + "frame": { "x": 93, "y": 113, "w": 30, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 30, "h": 59 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0152.png", + "frame": { "x": 93, "y": 113, "w": 30, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 30, "h": 59 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0153.png", + "frame": { "x": 61, "y": 115, "w": 30, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 30, "h": 58 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0154.png", + "frame": { "x": 61, "y": 115, "w": 30, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 30, "h": 58 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0155.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0156.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "698.png", + "format": "I8", + "size": { "w": 152, "h": 224 }, + "scale": "1" + } } diff --git a/public/images/pokemon/698.png b/public/images/pokemon/698.png index 2e00f5693a6..d9e638561d1 100644 Binary files a/public/images/pokemon/698.png and b/public/images/pokemon/698.png differ diff --git a/public/images/pokemon/703.json b/public/images/pokemon/703.json index e160dd32d25..5c0a6230108 100644 --- a/public/images/pokemon/703.json +++ b/public/images/pokemon/703.json @@ -1,41 +1,569 @@ -{ - "textures": [ - { - "image": "703.png", - "format": "RGBA8888", - "size": { - "w": 38, - "h": 38 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 37, - "h": 38 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 38 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 38 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:5da3bf1b2b82712da609c628fc886d69:7a2dc2f1f3b5fa2ee6b04cdf4c952277:721af8c322ff60159262e9b3017c784d$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 37, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 35, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 107, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 148, "y": 0, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 38, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 143, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 143, "y": 40, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 35, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 71, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0013.png", + "frame": { "x": 0, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0014.png", + "frame": { "x": 37, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0015.png", + "frame": { "x": 35, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0016.png", + "frame": { "x": 71, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0017.png", + "frame": { "x": 107, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0019.png", + "frame": { "x": 148, "y": 0, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0020.png", + "frame": { "x": 0, "y": 38, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0021.png", + "frame": { "x": 143, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0022.png", + "frame": { "x": 143, "y": 40, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0023.png", + "frame": { "x": 35, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0024.png", + "frame": { "x": 71, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0026.png", + "frame": { "x": 37, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0027.png", + "frame": { "x": 35, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0028.png", + "frame": { "x": 71, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0029.png", + "frame": { "x": 107, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0030.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0031.png", + "frame": { "x": 148, "y": 0, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 38, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0033.png", + "frame": { "x": 143, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0034.png", + "frame": { "x": 143, "y": 40, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0035.png", + "frame": { "x": 35, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0036.png", + "frame": { "x": 71, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0038.png", + "frame": { "x": 37, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0039.png", + "frame": { "x": 35, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0040.png", + "frame": { "x": 71, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0041.png", + "frame": { "x": 107, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0042.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0043.png", + "frame": { "x": 148, "y": 0, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0044.png", + "frame": { "x": 0, "y": 38, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0045.png", + "frame": { "x": 143, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0046.png", + "frame": { "x": 143, "y": 40, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0047.png", + "frame": { "x": 35, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0048.png", + "frame": { "x": 71, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0050.png", + "frame": { "x": 74, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0051.png", + "frame": { "x": 35, "y": 114, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0052.png", + "frame": { "x": 70, "y": 114, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0053.png", + "frame": { "x": 105, "y": 114, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 117, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0055.png", + "frame": { "x": 140, "y": 117, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 117, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0057.png", + "frame": { "x": 0, "y": 117, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0058.png", + "frame": { "x": 0, "y": 117, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0059.png", + "frame": { "x": 35, "y": 153, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0060.png", + "frame": { "x": 111, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0061.png", + "frame": { "x": 107, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0062.png", + "frame": { "x": 107, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "703.png", + "format": "I8", + "size": { "w": 183, "h": 192 }, + "scale": "1" + } } diff --git a/public/images/pokemon/703.png b/public/images/pokemon/703.png index 3f3767fbc6c..ea231fc6c09 100644 Binary files a/public/images/pokemon/703.png and b/public/images/pokemon/703.png differ diff --git a/public/images/pokemon/707.json b/public/images/pokemon/707.json index b37a090ddb5..ee5036fb541 100644 --- a/public/images/pokemon/707.json +++ b/public/images/pokemon/707.json @@ -1,41 +1,1559 @@ -{ - "textures": [ - { - "image": "707.png", - "format": "RGBA8888", - "size": { - "w": 77, - "h": 77 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 77 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 77 - }, - "frame": { - "x": 0, - "y": 0, - "w": 43, - "h": 77 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:56a3742632a462544b501f22a2cb2e57:5315127216c0bad2620a5352c4e424ba:8e96b9056ea81e44ced99c97f472a528$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 335, "y": 370, "w": 43, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 18, "w": 43, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 88, "y": 429, "w": 42, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 17, "w": 42, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 532, "y": 448, "w": 41, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 33, "y": 16, "w": 41, "h": 76 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 490, "y": 432, "w": 42, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 31, "y": 16, "w": 42, "h": 76 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 566, "y": 373, "w": 44, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 15, "w": 44, "h": 75 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 652, "y": 426, "w": 44, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 15, "w": 44, "h": 74 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 289, "y": 330, "w": 46, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 13, "w": 46, "h": 74 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 49, "y": 354, "w": 47, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 14, "w": 47, "h": 72 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 195, "y": 280, "w": 49, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 13, "w": 49, "h": 72 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 629, "y": 153, "w": 53, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 12, "w": 53, "h": 71 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 692, "y": 151, "w": 54, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 13, "w": 54, "h": 70 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 195, "y": 209, "w": 52, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 14, "w": 52, "h": 71 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 247, "y": 215, "w": 51, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 13, "w": 51, "h": 72 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 522, "y": 219, "w": 50, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 50, "h": 72 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 618, "y": 224, "w": 49, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 15, "w": 49, "h": 73 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 352, "y": 296, "w": 47, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 16, "w": 47, "h": 74 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 96, "y": 354, "w": 45, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 29, "y": 16, "w": 45, "h": 75 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 378, "y": 372, "w": 44, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 32, "y": 17, "w": 44, "h": 75 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 276, "y": 404, "w": 43, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 34, "y": 18, "w": 43, "h": 76 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 361, "y": 447, "w": 41, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 17, "w": 41, "h": 76 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 233, "y": 365, "w": 43, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 38, "y": 16, "w": 43, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 618, "y": 297, "w": 44, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 41, "y": 16, "w": 44, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 144, "y": 282, "w": 45, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 42, "y": 15, "w": 45, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 378, "y": 218, "w": 47, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 43, "y": 14, "w": 47, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 100, "y": 199, "w": 48, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 45, "y": 13, "w": 48, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 474, "y": 141, "w": 50, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 47, "y": 13, "w": 50, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 422, "y": 69, "w": 52, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 48, "y": 12, "w": 52, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 707, "y": 2, "w": 54, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 50, "y": 11, "w": 54, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 651, "y": 2, "w": 56, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 48, "y": 12, "w": 56, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 2, "y": 65, "w": 54, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 47, "y": 13, "w": 54, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 273, "y": 69, "w": 53, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 45, "y": 13, "w": 53, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 586, "y": 71, "w": 52, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 43, "y": 14, "w": 52, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 2, "y": 142, "w": 50, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 42, "y": 15, "w": 50, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 52, "y": 199, "w": 48, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 41, "y": 16, "w": 48, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 98, "y": 277, "w": 46, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 39, "y": 16, "w": 46, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 712, "y": 296, "w": 45, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 17, "w": 45, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 335, "y": 370, "w": 43, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 18, "w": 43, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 88, "y": 429, "w": 42, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 17, "w": 42, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 532, "y": 448, "w": 41, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 33, "y": 16, "w": 41, "h": 76 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 490, "y": 432, "w": 42, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 31, "y": 16, "w": 42, "h": 76 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 566, "y": 373, "w": 44, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 15, "w": 44, "h": 75 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 652, "y": 426, "w": 44, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 15, "w": 44, "h": 74 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 289, "y": 330, "w": 46, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 13, "w": 46, "h": 74 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 49, "y": 354, "w": 47, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 14, "w": 47, "h": 72 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 195, "y": 280, "w": 49, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 13, "w": 49, "h": 72 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 629, "y": 153, "w": 53, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 12, "w": 53, "h": 71 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 692, "y": 151, "w": 54, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 13, "w": 54, "h": 70 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 195, "y": 209, "w": 52, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 14, "w": 52, "h": 71 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 247, "y": 215, "w": 51, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 13, "w": 51, "h": 72 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 522, "y": 219, "w": 50, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 50, "h": 72 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 618, "y": 224, "w": 49, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 15, "w": 49, "h": 73 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 352, "y": 296, "w": 47, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 16, "w": 47, "h": 74 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 96, "y": 354, "w": 45, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 29, "y": 16, "w": 45, "h": 75 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 378, "y": 372, "w": 44, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 32, "y": 17, "w": 44, "h": 75 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 276, "y": 404, "w": 43, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 34, "y": 18, "w": 43, "h": 76 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 361, "y": 447, "w": 41, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 17, "w": 41, "h": 76 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 233, "y": 365, "w": 43, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 38, "y": 16, "w": 43, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 618, "y": 297, "w": 44, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 41, "y": 16, "w": 44, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 144, "y": 282, "w": 45, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 42, "y": 15, "w": 45, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 378, "y": 218, "w": 47, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 43, "y": 14, "w": 47, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 100, "y": 199, "w": 48, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 45, "y": 13, "w": 48, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 474, "y": 141, "w": 50, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 47, "y": 13, "w": 50, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 422, "y": 69, "w": 52, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 48, "y": 12, "w": 52, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 707, "y": 2, "w": 54, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 50, "y": 11, "w": 54, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 651, "y": 2, "w": 56, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 48, "y": 12, "w": 56, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 2, "y": 65, "w": 54, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 47, "y": 13, "w": 54, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 273, "y": 69, "w": 53, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 45, "y": 13, "w": 53, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 586, "y": 71, "w": 52, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 43, "y": 14, "w": 52, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 2, "y": 142, "w": 50, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 42, "y": 15, "w": 50, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 52, "y": 199, "w": 48, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 41, "y": 16, "w": 48, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 98, "y": 277, "w": 46, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 39, "y": 16, "w": 46, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 712, "y": 296, "w": 45, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 17, "w": 45, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 335, "y": 370, "w": 43, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 18, "w": 43, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 88, "y": 429, "w": 42, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 17, "w": 42, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 532, "y": 448, "w": 41, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 33, "y": 16, "w": 41, "h": 76 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 490, "y": 432, "w": 42, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 31, "y": 16, "w": 42, "h": 76 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 566, "y": 373, "w": 44, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 15, "w": 44, "h": 75 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 652, "y": 426, "w": 44, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 15, "w": 44, "h": 74 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 289, "y": 330, "w": 46, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 13, "w": 46, "h": 74 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 49, "y": 354, "w": 47, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 14, "w": 47, "h": 72 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 195, "y": 280, "w": 49, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 13, "w": 49, "h": 72 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 629, "y": 153, "w": 53, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 12, "w": 53, "h": 71 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 692, "y": 151, "w": 54, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 13, "w": 54, "h": 70 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 195, "y": 209, "w": 52, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 14, "w": 52, "h": 71 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 247, "y": 215, "w": 51, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 13, "w": 51, "h": 72 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 522, "y": 219, "w": 50, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 50, "h": 72 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 618, "y": 224, "w": 49, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 15, "w": 49, "h": 73 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 352, "y": 296, "w": 47, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 16, "w": 47, "h": 74 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 96, "y": 354, "w": 45, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 29, "y": 16, "w": 45, "h": 75 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 378, "y": 372, "w": 44, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 32, "y": 17, "w": 44, "h": 75 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 276, "y": 404, "w": 43, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 34, "y": 18, "w": 43, "h": 76 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 361, "y": 447, "w": 41, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 17, "w": 41, "h": 76 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 233, "y": 365, "w": 43, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 38, "y": 16, "w": 43, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 618, "y": 297, "w": 44, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 41, "y": 16, "w": 44, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 144, "y": 282, "w": 45, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 42, "y": 15, "w": 45, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 378, "y": 218, "w": 47, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 43, "y": 14, "w": 47, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 100, "y": 199, "w": 48, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 45, "y": 13, "w": 48, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 474, "y": 141, "w": 50, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 47, "y": 13, "w": 50, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 422, "y": 69, "w": 52, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 48, "y": 12, "w": 52, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 707, "y": 2, "w": 54, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 50, "y": 11, "w": 54, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 651, "y": 2, "w": 56, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 48, "y": 12, "w": 56, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 2, "y": 65, "w": 54, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 47, "y": 13, "w": 54, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 273, "y": 69, "w": 53, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 45, "y": 13, "w": 53, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 586, "y": 71, "w": 52, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 43, "y": 14, "w": 52, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 2, "y": 142, "w": 50, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 42, "y": 15, "w": 50, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 52, "y": 199, "w": 48, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 41, "y": 16, "w": 48, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0107.png", + "frame": { "x": 98, "y": 277, "w": 46, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 39, "y": 16, "w": 46, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0108.png", + "frame": { "x": 712, "y": 296, "w": 45, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 17, "w": 45, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0109.png", + "frame": { "x": 335, "y": 370, "w": 43, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 18, "w": 43, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0110.png", + "frame": { "x": 578, "y": 149, "w": 51, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 32, "y": 17, "w": 51, "h": 75 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0111.png", + "frame": { "x": 95, "y": 62, "w": 59, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 14, "w": 59, "h": 73 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0112.png", + "frame": { "x": 519, "y": 2, "w": 67, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 11, "w": 67, "h": 71 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0113.png", + "frame": { "x": 280, "y": 2, "w": 82, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 6, "w": 82, "h": 67 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0114.png", + "frame": { "x": 2, "y": 2, "w": 93, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 93, "h": 63 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0115.png", + "frame": { "x": 95, "y": 2, "w": 95, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 95, "h": 60 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0116.png", + "frame": { "x": 190, "y": 2, "w": 90, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 90, "h": 62 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0117.png", + "frame": { "x": 362, "y": 2, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0118.png", + "frame": { "x": 445, "y": 2, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 1, "w": 74, "h": 67 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0119.png", + "frame": { "x": 586, "y": 2, "w": 65, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 2, "w": 65, "h": 69 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0120.png", + "frame": { "x": 2, "y": 220, "w": 50, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 4, "w": 50, "h": 72 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0121.png", + "frame": { "x": 319, "y": 447, "w": 42, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 34, "y": 5, "w": 42, "h": 75 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0122.png", + "frame": { "x": 447, "y": 489, "w": 41, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 7, "w": 41, "h": 75 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0123.png", + "frame": { "x": 614, "y": 500, "w": 41, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 10, "w": 41, "h": 75 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0124.png", + "frame": { "x": 573, "y": 453, "w": 41, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 11, "w": 41, "h": 76 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0125.png", + "frame": { "x": 267, "y": 480, "w": 41, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 14, "w": 41, "h": 76 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0126.png", + "frame": { "x": 184, "y": 429, "w": 42, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 14, "w": 42, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0127.png", + "frame": { "x": 2, "y": 443, "w": 41, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 16, "w": 41, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0128.png", + "frame": { "x": 226, "y": 442, "w": 41, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 17, "w": 41, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0129.png", + "frame": { "x": 130, "y": 438, "w": 41, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 18, "w": 41, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0130.png", + "frame": { "x": 2, "y": 366, "w": 43, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 18, "w": 43, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0131.png", + "frame": { "x": 52, "y": 277, "w": 46, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 18, "w": 46, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0132.png", + "frame": { "x": 682, "y": 221, "w": 48, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 18, "w": 48, "h": 75 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0133.png", + "frame": { "x": 519, "y": 361, "w": 47, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 32, "y": 19, "w": 47, "h": 71 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0134.png", + "frame": { "x": 43, "y": 502, "w": 44, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 20, "w": 44, "h": 66 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0135.png", + "frame": { "x": 714, "y": 505, "w": 41, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 29, "y": 20, "w": 41, "h": 67 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0136.png", + "frame": { "x": 402, "y": 489, "w": 45, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 20, "w": 45, "h": 69 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0137.png", + "frame": { "x": 471, "y": 219, "w": 51, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 19, "w": 51, "h": 71 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0138.png", + "frame": { "x": 692, "y": 80, "w": 56, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 19, "w": 56, "h": 71 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0139.png", + "frame": { "x": 389, "y": 147, "w": 54, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 18, "w": 54, "h": 71 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0140.png", + "frame": { "x": 399, "y": 297, "w": 46, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 31, "y": 18, "w": 46, "h": 75 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0141.png", + "frame": { "x": 610, "y": 375, "w": 42, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 18, "w": 42, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0142.png", + "frame": { "x": 141, "y": 360, "w": 43, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 39, "y": 18, "w": 43, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0143.png", + "frame": { "x": 638, "y": 79, "w": 54, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 41, "y": 19, "w": 54, "h": 74 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0144.png", + "frame": { "x": 362, "y": 67, "w": 60, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 42, "y": 19, "w": 60, "h": 69 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0145.png", + "frame": { "x": 474, "y": 73, "w": 59, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 41, "y": 19, "w": 59, "h": 68 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0146.png", + "frame": { "x": 264, "y": 147, "w": 57, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 39, "y": 18, "w": 57, "h": 68 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0147.png", + "frame": { "x": 298, "y": 264, "w": 54, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 18, "w": 54, "h": 66 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0148.png", + "frame": { "x": 524, "y": 148, "w": 54, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 18, "w": 54, "h": 71 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0149.png", + "frame": { "x": 211, "y": 135, "w": 53, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 34, "y": 18, "w": 53, "h": 74 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0150.png", + "frame": { "x": 471, "y": 290, "w": 48, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 32, "y": 19, "w": 48, "h": 73 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0151.png", + "frame": { "x": 569, "y": 302, "w": 48, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 19, "w": 48, "h": 71 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0152.png", + "frame": { "x": 154, "y": 134, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 20, "w": 57, "h": 69 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0153.png", + "frame": { "x": 154, "y": 64, "w": 60, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 20, "w": 60, "h": 70 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0154.png", + "frame": { "x": 214, "y": 64, "w": 59, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 19, "w": 59, "h": 71 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0155.png", + "frame": { "x": 2, "y": 292, "w": 47, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 29, "y": 18, "w": 47, "h": 74 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0156.png", + "frame": { "x": 696, "y": 426, "w": 41, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 39, "y": 18, "w": 41, "h": 79 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0157.png", + "frame": { "x": 533, "y": 73, "w": 53, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 42, "y": 19, "w": 53, "h": 75 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0158.png", + "frame": { "x": 56, "y": 135, "w": 62, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 45, "y": 21, "w": 62, "h": 64 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0159.png", + "frame": { "x": 662, "y": 373, "w": 62, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 45, "y": 22, "w": 62, "h": 53 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0160.png", + "frame": { "x": 655, "y": 505, "w": 59, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 44, "y": 22, "w": 59, "h": 47 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0161.png", + "frame": { "x": 422, "y": 437, "w": 61, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 45, "y": 22, "w": 61, "h": 52 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0162.png", + "frame": { "x": 326, "y": 136, "w": 63, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 45, "y": 21, "w": 63, "h": 62 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0163.png", + "frame": { "x": 321, "y": 198, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 45, "y": 21, "w": 57, "h": 66 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0164.png", + "frame": { "x": 519, "y": 291, "w": 50, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 44, "y": 20, "w": 50, "h": 70 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0165.png", + "frame": { "x": 445, "y": 363, "w": 45, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 43, "y": 20, "w": 45, "h": 74 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0166.png", + "frame": { "x": 45, "y": 426, "w": 43, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 42, "y": 19, "w": 43, "h": 76 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0167.png", + "frame": { "x": 189, "y": 352, "w": 44, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 41, "y": 19, "w": 44, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0168.png", + "frame": { "x": 667, "y": 296, "w": 45, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 41, "y": 19, "w": 45, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0169.png", + "frame": { "x": 425, "y": 218, "w": 46, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 40, "y": 18, "w": 46, "h": 79 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0170.png", + "frame": { "x": 148, "y": 203, "w": 47, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 39, "y": 18, "w": 47, "h": 79 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0171.png", + "frame": { "x": 572, "y": 224, "w": 46, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 38, "y": 18, "w": 46, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0172.png", + "frame": { "x": 244, "y": 287, "w": 45, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 18, "w": 45, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "707.png", + "format": "I8", + "size": { "w": 763, "h": 577 }, + "scale": "1" + } } diff --git a/public/images/pokemon/707.png b/public/images/pokemon/707.png index e96c81bb953..899ab995926 100644 Binary files a/public/images/pokemon/707.png and b/public/images/pokemon/707.png differ diff --git a/public/images/pokemon/708.json b/public/images/pokemon/708.json index 99aa2cffcb4..abc8d24db2b 100644 --- a/public/images/pokemon/708.json +++ b/public/images/pokemon/708.json @@ -1,41 +1,1091 @@ -{ - "textures": [ - { - "image": "708.png", - "format": "RGBA8888", - "size": { - "w": 44, - "h": 44 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 44, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 44, - "h": 40 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:c7204472319329328505da257ec6edec:b1ef9ba3c80855e31831f718036043ff:796c82c5076b122f2663381836c65843$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 270, "y": 124, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 45, "y": 166, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 207, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 7, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 0, "y": 84, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 8, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 45, "y": 84, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 8, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 180, "y": 42, "w": 45, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 45, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 226, "y": 42, "w": 45, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 45, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 90, "y": 84, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 135, "y": 84, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 180, "y": 124, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 225, "y": 124, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 45, "y": 42, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 90, "y": 42, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 135, "y": 42, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 0, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 6, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 45, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 7, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 90, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 8, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 272, "y": 42, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 8, "w": 43, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 180, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 8, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 225, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 5, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 270, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 3, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 0, "y": 42, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 0, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 135, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 0, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 0, "y": 125, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 0, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 45, "y": 125, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 2, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 270, "y": 124, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 45, "y": 166, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 0, "y": 207, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 7, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 0, "y": 84, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 8, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 45, "y": 84, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 8, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 180, "y": 42, "w": 45, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 45, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 226, "y": 42, "w": 45, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 45, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 90, "y": 84, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 135, "y": 84, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 180, "y": 124, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 225, "y": 124, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 45, "y": 42, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 90, "y": 42, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 135, "y": 42, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 0, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 6, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 45, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 7, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 90, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 8, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 272, "y": 42, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 8, "w": 43, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 180, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 8, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 225, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 5, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 270, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 3, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 0, "y": 42, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 0, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 135, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 0, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 125, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 0, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 45, "y": 125, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 2, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 270, "y": 124, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 45, "y": 166, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 0, "y": 207, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 7, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 84, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 8, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 45, "y": 84, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 8, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 180, "y": 42, "w": 45, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 45, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 226, "y": 42, "w": 45, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 45, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 90, "y": 84, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 135, "y": 84, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 180, "y": 124, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 225, "y": 124, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 45, "y": 42, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 90, "y": 42, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 135, "y": 42, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 0, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 6, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 45, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 7, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 90, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 8, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 272, "y": 42, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 8, "w": 43, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 180, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 8, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 225, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 5, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 270, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 3, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 0, "y": 42, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 0, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 135, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 0, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 0, "y": 125, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 0, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 45, "y": 125, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 2, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 270, "y": 124, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 45, "y": 166, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 0, "y": 207, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 7, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 0, "y": 84, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 8, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 45, "y": 84, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 8, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 180, "y": 42, "w": 45, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 45, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 226, "y": 42, "w": 45, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 45, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 90, "y": 84, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 135, "y": 84, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 180, "y": 124, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 225, "y": 124, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 45, "y": 42, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 90, "y": 42, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 135, "y": 42, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 0, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 6, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 45, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 7, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 90, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 8, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 272, "y": 42, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 8, "w": 43, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 180, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 8, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 225, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 5, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 270, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 3, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 0, "y": 42, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 0, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 135, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 0, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 0, "y": 125, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 0, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 45, "y": 125, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 2, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 270, "y": 124, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 90, "y": 125, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 135, "y": 125, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 8, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 90, "y": 207, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 10, "w": 43, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 134, "y": 207, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 12, "w": 43, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 180, "y": 165, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 14, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0107.png", + "frame": { "x": 225, "y": 165, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 15, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0108.png", + "frame": { "x": 270, "y": 165, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 17, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0109.png", + "frame": { "x": 0, "y": 166, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 19, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0110.png", + "frame": { "x": 270, "y": 206, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 21, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0111.png", + "frame": { "x": 90, "y": 166, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 23, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0112.png", + "frame": { "x": 135, "y": 166, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 21, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0113.png", + "frame": { "x": 180, "y": 206, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 20, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0114.png", + "frame": { "x": 225, "y": 206, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 18, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0115.png", + "frame": { "x": 268, "y": 247, "w": 44, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 16, "w": 44, "h": 39 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0116.png", + "frame": { "x": 178, "y": 247, "w": 44, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 15, "w": 44, "h": 39 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0117.png", + "frame": { "x": 223, "y": 247, "w": 44, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 13, "w": 44, "h": 39 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0118.png", + "frame": { "x": 226, "y": 83, "w": 45, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 10, "w": 45, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0119.png", + "frame": { "x": 45, "y": 207, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 8, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0120.png", + "frame": { "x": 180, "y": 83, "w": 45, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 6, "w": 45, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "708.png", + "format": "I8", + "size": { "w": 315, "h": 286 }, + "scale": "1" + } } diff --git a/public/images/pokemon/708.png b/public/images/pokemon/708.png index a51533e592b..0b612280028 100644 Binary files a/public/images/pokemon/708.png and b/public/images/pokemon/708.png differ diff --git a/public/images/pokemon/714.json b/public/images/pokemon/714.json index 84c1183e47b..b43aebd68a1 100644 --- a/public/images/pokemon/714.json +++ b/public/images/pokemon/714.json @@ -1,41 +1,263 @@ -{ - "textures": [ - { - "image": "714.png", - "format": "RGBA8888", - "size": { - "w": 64, - "h": 64 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 64, - "h": 57 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 64, - "h": 57 - }, - "frame": { - "x": 0, - "y": 0, - "w": 64, - "h": 57 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:acf096b1d2c6d9730a18ff797fb5ae47:ea434d000e9983cb42ecd03220d247c4:1a07d46e710b0568ec824f54fbc4fe6a$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 1, "y": 1, "w": 64, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 64, "h": 57 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0002.png", + "frame": { "x": 133, "y": 1, "w": 64, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 64, "h": 56 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0003.png", + "frame": { "x": 1, "y": 60, "w": 61, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 61, "h": 55 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0004.png", + "frame": { "x": 184, "y": 117, "w": 32, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 32, "h": 67 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0005.png", + "frame": { "x": 50, "y": 119, "w": 33, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 33, "h": 63 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0006.png", + "frame": { "x": 199, "y": 1, "w": 47, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 47, "h": 56 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0007.png", + "frame": { "x": 64, "y": 60, "w": 47, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 47, "h": 57 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0008.png", + "frame": { "x": 1, "y": 1, "w": 64, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 64, "h": 57 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0009.png", + "frame": { "x": 133, "y": 1, "w": 64, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 64, "h": 56 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0010.png", + "frame": { "x": 1, "y": 60, "w": 61, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 8, "w": 61, "h": 55 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0011.png", + "frame": { "x": 184, "y": 117, "w": 32, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 3, "w": 32, "h": 67 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0012.png", + "frame": { "x": 50, "y": 119, "w": 33, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 3, "w": 33, "h": 63 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0013.png", + "frame": { "x": 199, "y": 1, "w": 47, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 1, "w": 47, "h": 56 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0014.png", + "frame": { "x": 64, "y": 60, "w": 47, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 47, "h": 57 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0015.png", + "frame": { "x": 1, "y": 1, "w": 64, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 64, "h": 57 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0016.png", + "frame": { "x": 133, "y": 1, "w": 64, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 64, "h": 56 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0017.png", + "frame": { "x": 133, "y": 59, "w": 61, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 61, "h": 56 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0018.png", + "frame": { "x": 113, "y": 117, "w": 33, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 33, "h": 68 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0019.png", + "frame": { "x": 148, "y": 117, "w": 34, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 34, "h": 64 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0020.png", + "frame": { "x": 1, "y": 117, "w": 47, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 47, "h": 57 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0021.png", + "frame": { "x": 64, "y": 60, "w": 47, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 47, "h": 57 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0022.png", + "frame": { "x": 1, "y": 1, "w": 64, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 64, "h": 57 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0023.png", + "frame": { "x": 67, "y": 1, "w": 64, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 64, "h": 57 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0024.png", + "frame": { "x": 196, "y": 59, "w": 61, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 7, "w": 61, "h": 56 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0025.png", + "frame": { "x": 113, "y": 117, "w": 33, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 2, "w": 33, "h": 68 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0026.png", + "frame": { "x": 218, "y": 117, "w": 33, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 2, "w": 33, "h": 64 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0027.png", + "frame": { "x": 199, "y": 1, "w": 47, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 1, "w": 47, "h": 56 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0028.png", + "frame": { "x": 64, "y": 60, "w": 47, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 47, "h": 57 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "714.png", + "format": "I8", + "size": { "w": 258, "h": 186 }, + "scale": "1" + } } diff --git a/public/images/pokemon/714.png b/public/images/pokemon/714.png index c79f9b83b82..4572eada3f3 100644 Binary files a/public/images/pokemon/714.png and b/public/images/pokemon/714.png differ diff --git a/public/images/pokemon/715.png b/public/images/pokemon/715.png index e173bfe25ff..08d9c985776 100644 Binary files a/public/images/pokemon/715.png and b/public/images/pokemon/715.png differ diff --git a/public/images/pokemon/718-10.json b/public/images/pokemon/718-10.json index 479c069fe0a..ad273c9ea79 100644 --- a/public/images/pokemon/718-10.json +++ b/public/images/pokemon/718-10.json @@ -1,41 +1,686 @@ -{ - "textures": [ - { - "image": "718-10.png", - "format": "RGBA8888", - "size": { - "w": 66, - "h": 66 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 56, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 66 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 66 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:a1845dc28b51b657957628d4b4d7af94:87a4c3e6fcac562963f6331abb3d962c:82195cf2a6db620c5643b8162d6e8c5c$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 57, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 57, "h": 67 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 173, "y": 0, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 230, "y": 0, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 57, "y": 0, "w": 58, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 58, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 115, "y": 0, "w": 58, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 58, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 171, "y": 66, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 229, "y": 66, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 287, "y": 66, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 171, "y": 130, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 229, "y": 130, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 67, "w": 57, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 57, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 287, "y": 0, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 57, "y": 65, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 114, "y": 65, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 0, "y": 0, "w": 57, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 57, "h": 67 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 173, "y": 0, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 230, "y": 0, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 57, "y": 0, "w": 58, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 58, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 115, "y": 0, "w": 58, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 58, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 171, "y": 66, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 229, "y": 66, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 287, "y": 66, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 171, "y": 130, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 229, "y": 130, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 67, "w": 57, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 57, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 287, "y": 0, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 57, "y": 65, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 114, "y": 65, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 0, "y": 0, "w": 57, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 57, "h": 67 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 173, "y": 0, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 230, "y": 0, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 57, "y": 0, "w": 58, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 58, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 115, "y": 0, "w": 58, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 58, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 171, "y": 66, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 229, "y": 66, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 287, "y": 66, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 171, "y": 130, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 229, "y": 130, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 0, "y": 67, "w": 57, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 57, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 287, "y": 0, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 57, "y": 65, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 114, "y": 65, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 0, "w": 57, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 57, "h": 67 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 173, "y": 0, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 230, "y": 0, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 57, "y": 0, "w": 58, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 58, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 115, "y": 0, "w": 58, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 58, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 171, "y": 66, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 229, "y": 66, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 287, "y": 66, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 171, "y": 130, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 229, "y": 130, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 0, "y": 67, "w": 57, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 57, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 287, "y": 0, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 57, "y": 65, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 114, "y": 65, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 287, "y": 130, "w": 56, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 56, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 57, "y": 131, "w": 56, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 56, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 164, "y": 261, "w": 56, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 56, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 0, "y": 327, "w": 56, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 56, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 56, "y": 327, "w": 56, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 56, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 169, "y": 329, "w": 57, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 57, "h": 62 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 112, "y": 326, "w": 57, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 57, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 54, "y": 265, "w": 58, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 58, "h": 62 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 226, "y": 332, "w": 56, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 56, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 220, "y": 261, "w": 53, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 53, "h": 68 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 273, "y": 264, "w": 53, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 53, "h": 68 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 279, "y": 196, "w": 54, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 54, "h": 68 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 56, "y": 197, "w": 54, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 54, "h": 68 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 110, "y": 197, "w": 54, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 54, "h": 68 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 0, "y": 198, "w": 54, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 54, "h": 68 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 169, "y": 194, "w": 55, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 55, "h": 67 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 224, "y": 194, "w": 55, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 55, "h": 67 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 0, "y": 132, "w": 56, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 56, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 113, "y": 131, "w": 56, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 56, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "718-10.png", + "format": "I8", + "size": { "w": 345, "h": 395 }, + "scale": "1" + } } diff --git a/public/images/pokemon/718-10.png b/public/images/pokemon/718-10.png index a2acc542c68..4d15f78dd83 100644 Binary files a/public/images/pokemon/718-10.png and b/public/images/pokemon/718-10.png differ diff --git a/public/images/pokemon/718.json b/public/images/pokemon/718.json index b86c5362079..98053a226cb 100644 --- a/public/images/pokemon/718.json +++ b/public/images/pokemon/718.json @@ -1,41 +1,803 @@ -{ - "textures": [ - { - "image": "718.png", - "format": "RGBA8888", - "size": { - "w": 88, - "h": 88 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 72, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 72, - "h": 88 - }, - "frame": { - "x": 0, - "y": 0, - "w": 72, - "h": 88 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:c521b0d088429d6fd0d1d291823b7881:a063fa0268f5006b3587b06e3245db2a:7b4a06b06cbac24b3f39727b0238661b$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 294, "y": 438, "w": 72, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 72, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 442, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 71, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 437, "y": 441, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 71, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 145, "y": 441, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 71, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 366, "y": 440, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 71, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 223, "y": 267, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 73, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 296, "y": 350, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 73, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 384, "y": 177, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 459, "y": 177, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 452, "y": 265, "w": 74, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 74, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 76, "y": 178, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 233, "y": 90, "w": 75, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 75, "h": 89 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 151, "y": 178, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 0, "y": 179, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 75, "y": 266, "w": 74, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 74, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 369, "y": 352, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 73, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 294, "y": 438, "w": 72, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 72, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 442, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 71, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 437, "y": 441, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 71, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 145, "y": 441, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 71, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 366, "y": 440, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 71, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 223, "y": 267, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 73, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 296, "y": 350, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 73, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 384, "y": 177, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 459, "y": 177, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 452, "y": 265, "w": 74, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 74, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 76, "y": 178, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 233, "y": 90, "w": 75, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 75, "h": 89 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 151, "y": 178, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 0, "y": 179, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 75, "y": 266, "w": 74, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 74, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 369, "y": 352, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 73, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 294, "y": 438, "w": 72, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 72, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 0, "y": 442, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 71, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 437, "y": 441, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 71, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 145, "y": 441, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 71, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 366, "y": 440, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 71, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 223, "y": 267, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 73, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 296, "y": 350, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 73, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 384, "y": 177, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 459, "y": 177, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 452, "y": 265, "w": 74, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 74, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 76, "y": 178, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 233, "y": 90, "w": 75, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 75, "h": 89 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 151, "y": 178, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 0, "y": 179, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 75, "y": 266, "w": 74, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 74, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 369, "y": 352, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 73, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 294, "y": 438, "w": 72, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 72, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 0, "y": 442, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 71, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 437, "y": 441, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 71, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 145, "y": 441, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 71, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 366, "y": 440, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 71, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 223, "y": 267, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 73, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 296, "y": 350, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 73, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 384, "y": 177, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 459, "y": 177, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 452, "y": 265, "w": 74, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 74, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 76, "y": 178, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 233, "y": 90, "w": 75, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 75, "h": 89 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 151, "y": 178, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 0, "y": 179, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 75, "y": 266, "w": 74, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 74, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 369, "y": 352, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 73, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 222, "y": 355, "w": 72, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 72, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 73, "y": 354, "w": 72, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 72, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 149, "y": 353, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 73, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 442, "y": 353, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 73, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 149, "y": 266, "w": 74, "h": 87 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 74, "h": 87 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 377, "y": 265, "w": 75, "h": 87 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 75, "h": 87 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 308, "y": 177, "w": 76, "h": 87 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 76, "h": 87 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 76, "y": 91, "w": 76, "h": 87 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 76, "h": 87 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 301, "y": 264, "w": 76, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 76, "h": 86 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 0, "y": 267, "w": 74, "h": 87 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 74, "h": 87 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 0, "y": 90, "w": 76, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 76, "h": 89 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 391, "y": 88, "w": 77, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 77, "h": 89 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 79, "y": 0, "w": 78, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 78, "h": 91 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 468, "y": 88, "w": 77, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 77, "h": 89 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 157, "y": 0, "w": 78, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 90 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 313, "y": 0, "w": 78, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 78, "h": 89 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 0, "y": 0, "w": 79, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 79, "h": 90 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 391, "y": 0, "w": 78, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 78, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 235, "y": 0, "w": 78, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 1, "w": 78, "h": 90 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 469, "y": 0, "w": 78, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 78, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 313, "y": 89, "w": 77, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 77, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 157, "y": 90, "w": 76, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 76, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 226, "y": 179, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 0, "y": 354, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 73, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "718.png", + "format": "I8", + "size": { "w": 547, "h": 530 }, + "scale": "1" + } } diff --git a/public/images/pokemon/718.png b/public/images/pokemon/718.png index 0c65ebefb31..07319fd6de0 100644 Binary files a/public/images/pokemon/718.png and b/public/images/pokemon/718.png differ diff --git a/public/images/pokemon/719.json b/public/images/pokemon/719.json index 4503b576777..29716341ffd 100644 --- a/public/images/pokemon/719.json +++ b/public/images/pokemon/719.json @@ -1,41 +1,875 @@ -{ - "textures": [ - { - "image": "719.png", - "format": "RGBA8888", - "size": { - "w": 70, - "h": 70 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 70 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 70 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:2444999ec5c861d795baf2a948bfbf12:226dba2be6e002f00cb5559f02986b41:17a705bb924916761be2495822a53735$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 11, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 86, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 8, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 129, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 172, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 6, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 42, "y": 144, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 216, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 40, "y": 216, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 83, "y": 144, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 124, "y": 144, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 86, "y": 72, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 40, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 215, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 0, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 11, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 86, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 8, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 129, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 172, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 6, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 42, "y": 144, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 0, "y": 216, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 40, "y": 216, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 83, "y": 144, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 124, "y": 144, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 86, "y": 72, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 40, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 215, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 11, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 86, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 8, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 129, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 172, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 6, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 42, "y": 144, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 0, "y": 216, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 40, "y": 216, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 83, "y": 144, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 124, "y": 144, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 86, "y": 72, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 40, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 215, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 11, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 86, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 8, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 129, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 172, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 6, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 42, "y": 144, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 216, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 40, "y": 216, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 83, "y": 144, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 124, "y": 144, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 86, "y": 72, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 40, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 215, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 11, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 128, "y": 72, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 9, "w": 40, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 170, "y": 72, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 7, "w": 40, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 80, "y": 216, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 120, "y": 216, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 237, "y": 288, "w": 37, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 37, "h": 69 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 198, "y": 288, "w": 37, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 37, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 237, "y": 359, "w": 35, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 35, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 120, "y": 288, "w": 37, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 160, "y": 216, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 165, "y": 144, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 8, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 212, "y": 72, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 10, "w": 40, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 0, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 11, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 0, "y": 72, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 10, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 0, "y": 144, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 9, "w": 40, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 206, "y": 144, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 8, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 200, "y": 216, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 6, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 240, "y": 216, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 5, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 0, "y": 288, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 4, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 159, "y": 288, "w": 37, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 4, "w": 37, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 40, "y": 288, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 6, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 80, "y": 288, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 7, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 248, "y": 144, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 9, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 43, "y": 72, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 0, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 11, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 128, "y": 72, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 9, "w": 40, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 170, "y": 72, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 7, "w": 40, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 80, "y": 216, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 120, "y": 216, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 237, "y": 288, "w": 37, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 37, "h": 69 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 198, "y": 288, "w": 37, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 37, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 237, "y": 359, "w": 35, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 35, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 120, "y": 288, "w": 37, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 160, "y": 216, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 165, "y": 144, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 8, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 212, "y": 72, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 10, "w": 40, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 0, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 11, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 0, "y": 72, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 10, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 0, "y": 144, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 9, "w": 40, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 206, "y": 144, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 8, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 200, "y": 216, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 6, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 240, "y": 216, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 5, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 0, "y": 288, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 4, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 159, "y": 288, "w": 37, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 4, "w": 37, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 40, "y": 288, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 6, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 80, "y": 288, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 7, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 248, "y": 144, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 9, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 43, "y": 72, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "719.png", + "format": "I8", + "size": { "w": 287, "h": 429 }, + "scale": "1" + } } diff --git a/public/images/pokemon/719.png b/public/images/pokemon/719.png index 287bfb9fd27..536e999a3d6 100644 Binary files a/public/images/pokemon/719.png and b/public/images/pokemon/719.png differ diff --git a/public/images/pokemon/back/249.json b/public/images/pokemon/back/249.json index 52784b825f8..7f126e8c62c 100644 --- a/public/images/pokemon/back/249.json +++ b/public/images/pokemon/back/249.json @@ -1,2540 +1,686 @@ -{ - "textures": [ - { - "image": "249.png", - "format": "RGBA8888", - "size": { - "w": 610, - "h": 610 - }, - "scale": 1, - "frames": [ - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 36, - "w": 143, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 143, - "h": 64 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 36, - "w": 143, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 143, - "h": 64 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 36, - "w": 143, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 143, - "h": 64 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 36, - "w": 143, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 143, - "h": 64 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 36, - "w": 143, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 143, - "h": 64 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 36, - "w": 143, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 143, - "h": 64 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 35, - "w": 146, - "h": 65 - }, - "frame": { - "x": 143, - "y": 0, - "w": 146, - "h": 65 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 35, - "w": 146, - "h": 65 - }, - "frame": { - "x": 143, - "y": 0, - "w": 146, - "h": 65 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 35, - "w": 146, - "h": 65 - }, - "frame": { - "x": 143, - "y": 0, - "w": 146, - "h": 65 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 35, - "w": 146, - "h": 65 - }, - "frame": { - "x": 143, - "y": 0, - "w": 146, - "h": 65 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 35, - "w": 146, - "h": 65 - }, - "frame": { - "x": 143, - "y": 0, - "w": 146, - "h": 65 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 35, - "w": 146, - "h": 65 - }, - "frame": { - "x": 143, - "y": 0, - "w": 146, - "h": 65 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 10, - "y": 30, - "w": 132, - "h": 67 - }, - "frame": { - "x": 289, - "y": 0, - "w": 132, - "h": 67 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 10, - "y": 30, - "w": 132, - "h": 67 - }, - "frame": { - "x": 289, - "y": 0, - "w": 132, - "h": 67 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 10, - "y": 30, - "w": 132, - "h": 67 - }, - "frame": { - "x": 289, - "y": 0, - "w": 132, - "h": 67 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 10, - "y": 30, - "w": 132, - "h": 67 - }, - "frame": { - "x": 289, - "y": 0, - "w": 132, - "h": 67 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 10, - "y": 30, - "w": 132, - "h": 67 - }, - "frame": { - "x": 289, - "y": 0, - "w": 132, - "h": 67 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 10, - "y": 30, - "w": 132, - "h": 67 - }, - "frame": { - "x": 289, - "y": 0, - "w": 132, - "h": 67 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 28, - "w": 140, - "h": 68 - }, - "frame": { - "x": 421, - "y": 0, - "w": 140, - "h": 68 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 28, - "w": 140, - "h": 68 - }, - "frame": { - "x": 421, - "y": 0, - "w": 140, - "h": 68 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 28, - "w": 140, - "h": 68 - }, - "frame": { - "x": 421, - "y": 0, - "w": 140, - "h": 68 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 28, - "w": 140, - "h": 68 - }, - "frame": { - "x": 421, - "y": 0, - "w": 140, - "h": 68 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 28, - "w": 140, - "h": 68 - }, - "frame": { - "x": 421, - "y": 0, - "w": 140, - "h": 68 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 28, - "w": 140, - "h": 68 - }, - "frame": { - "x": 421, - "y": 0, - "w": 140, - "h": 68 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 2, - "y": 30, - "w": 138, - "h": 70 - }, - "frame": { - "x": 0, - "y": 64, - "w": 138, - "h": 70 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 2, - "y": 30, - "w": 138, - "h": 70 - }, - "frame": { - "x": 0, - "y": 64, - "w": 138, - "h": 70 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 2, - "y": 30, - "w": 138, - "h": 70 - }, - "frame": { - "x": 0, - "y": 64, - "w": 138, - "h": 70 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 2, - "y": 30, - "w": 138, - "h": 70 - }, - "frame": { - "x": 0, - "y": 64, - "w": 138, - "h": 70 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 2, - "y": 30, - "w": 138, - "h": 70 - }, - "frame": { - "x": 0, - "y": 64, - "w": 138, - "h": 70 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 2, - "y": 30, - "w": 138, - "h": 70 - }, - "frame": { - "x": 0, - "y": 64, - "w": 138, - "h": 70 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 30, - "w": 146, - "h": 70 - }, - "frame": { - "x": 138, - "y": 65, - "w": 146, - "h": 70 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 30, - "w": 146, - "h": 70 - }, - "frame": { - "x": 138, - "y": 65, - "w": 146, - "h": 70 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 30, - "w": 146, - "h": 70 - }, - "frame": { - "x": 138, - "y": 65, - "w": 146, - "h": 70 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 30, - "w": 146, - "h": 70 - }, - "frame": { - "x": 138, - "y": 65, - "w": 146, - "h": 70 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 30, - "w": 146, - "h": 70 - }, - "frame": { - "x": 138, - "y": 65, - "w": 146, - "h": 70 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 30, - "w": 146, - "h": 70 - }, - "frame": { - "x": 138, - "y": 65, - "w": 146, - "h": 70 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 10, - "y": 28, - "w": 130, - "h": 70 - }, - "frame": { - "x": 284, - "y": 67, - "w": 130, - "h": 70 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 10, - "y": 28, - "w": 130, - "h": 70 - }, - "frame": { - "x": 284, - "y": 67, - "w": 130, - "h": 70 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 10, - "y": 28, - "w": 130, - "h": 70 - }, - "frame": { - "x": 284, - "y": 67, - "w": 130, - "h": 70 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 10, - "y": 28, - "w": 130, - "h": 70 - }, - "frame": { - "x": 284, - "y": 67, - "w": 130, - "h": 70 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 10, - "y": 28, - "w": 130, - "h": 70 - }, - "frame": { - "x": 284, - "y": 67, - "w": 130, - "h": 70 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 10, - "y": 28, - "w": 130, - "h": 70 - }, - "frame": { - "x": 284, - "y": 67, - "w": 130, - "h": 70 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 1, - "y": 26, - "w": 145, - "h": 73 - }, - "frame": { - "x": 414, - "y": 68, - "w": 145, - "h": 73 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 1, - "y": 26, - "w": 145, - "h": 73 - }, - "frame": { - "x": 414, - "y": 68, - "w": 145, - "h": 73 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 1, - "y": 26, - "w": 145, - "h": 73 - }, - "frame": { - "x": 414, - "y": 68, - "w": 145, - "h": 73 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 1, - "y": 26, - "w": 145, - "h": 73 - }, - "frame": { - "x": 414, - "y": 68, - "w": 145, - "h": 73 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 1, - "y": 26, - "w": 145, - "h": 73 - }, - "frame": { - "x": 414, - "y": 68, - "w": 145, - "h": 73 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 1, - "y": 26, - "w": 145, - "h": 73 - }, - "frame": { - "x": 414, - "y": 68, - "w": 145, - "h": 73 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 7, - "y": 13, - "w": 124, - "h": 82 - }, - "frame": { - "x": 0, - "y": 134, - "w": 124, - "h": 82 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 7, - "y": 13, - "w": 124, - "h": 82 - }, - "frame": { - "x": 0, - "y": 134, - "w": 124, - "h": 82 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 7, - "y": 13, - "w": 124, - "h": 82 - }, - "frame": { - "x": 0, - "y": 134, - "w": 124, - "h": 82 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 7, - "y": 13, - "w": 124, - "h": 82 - }, - "frame": { - "x": 0, - "y": 134, - "w": 124, - "h": 82 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 7, - "y": 13, - "w": 124, - "h": 82 - }, - "frame": { - "x": 0, - "y": 134, - "w": 124, - "h": 82 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 7, - "y": 13, - "w": 124, - "h": 82 - }, - "frame": { - "x": 0, - "y": 134, - "w": 124, - "h": 82 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 17, - "y": 11, - "w": 106, - "h": 87 - }, - "frame": { - "x": 124, - "y": 135, - "w": 106, - "h": 87 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 17, - "y": 11, - "w": 106, - "h": 87 - }, - "frame": { - "x": 124, - "y": 135, - "w": 106, - "h": 87 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 17, - "y": 11, - "w": 106, - "h": 87 - }, - "frame": { - "x": 124, - "y": 135, - "w": 106, - "h": 87 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 17, - "y": 11, - "w": 106, - "h": 87 - }, - "frame": { - "x": 124, - "y": 135, - "w": 106, - "h": 87 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 17, - "y": 11, - "w": 106, - "h": 87 - }, - "frame": { - "x": 124, - "y": 135, - "w": 106, - "h": 87 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 17, - "y": 11, - "w": 106, - "h": 87 - }, - "frame": { - "x": 124, - "y": 135, - "w": 106, - "h": 87 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 25, - "y": 5, - "w": 99, - "h": 88 - }, - "frame": { - "x": 230, - "y": 137, - "w": 99, - "h": 88 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 23, - "y": 5, - "w": 99, - "h": 88 - }, - "frame": { - "x": 329, - "y": 141, - "w": 99, - "h": 88 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 20, - "y": 6, - "w": 98, - "h": 89 - }, - "frame": { - "x": 428, - "y": 141, - "w": 98, - "h": 89 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 20, - "y": 6, - "w": 98, - "h": 89 - }, - "frame": { - "x": 428, - "y": 141, - "w": 98, - "h": 89 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 20, - "y": 6, - "w": 98, - "h": 89 - }, - "frame": { - "x": 428, - "y": 141, - "w": 98, - "h": 89 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 20, - "y": 6, - "w": 98, - "h": 89 - }, - "frame": { - "x": 428, - "y": 141, - "w": 98, - "h": 89 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 20, - "y": 6, - "w": 98, - "h": 89 - }, - "frame": { - "x": 428, - "y": 141, - "w": 98, - "h": 89 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 20, - "y": 6, - "w": 98, - "h": 89 - }, - "frame": { - "x": 428, - "y": 141, - "w": 98, - "h": 89 - } - }, - { - "filename": "0115.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 26, - "y": 0, - "w": 84, - "h": 97 - }, - "frame": { - "x": 526, - "y": 141, - "w": 84, - "h": 97 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 27, - "y": 4, - "w": 96, - "h": 89 - }, - "frame": { - "x": 0, - "y": 216, - "w": 96, - "h": 89 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 25, - "y": 4, - "w": 96, - "h": 89 - }, - "frame": { - "x": 96, - "y": 222, - "w": 96, - "h": 89 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 20, - "y": 7, - "w": 98, - "h": 90 - }, - "frame": { - "x": 192, - "y": 225, - "w": 98, - "h": 90 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 20, - "y": 7, - "w": 98, - "h": 90 - }, - "frame": { - "x": 192, - "y": 225, - "w": 98, - "h": 90 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 20, - "y": 7, - "w": 98, - "h": 90 - }, - "frame": { - "x": 192, - "y": 225, - "w": 98, - "h": 90 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 20, - "y": 7, - "w": 98, - "h": 90 - }, - "frame": { - "x": 192, - "y": 225, - "w": 98, - "h": 90 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 20, - "y": 7, - "w": 98, - "h": 90 - }, - "frame": { - "x": 192, - "y": 225, - "w": 98, - "h": 90 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 20, - "y": 7, - "w": 98, - "h": 90 - }, - "frame": { - "x": 192, - "y": 225, - "w": 98, - "h": 90 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 20, - "y": 7, - "w": 98, - "h": 90 - }, - "frame": { - "x": 192, - "y": 225, - "w": 98, - "h": 90 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 20, - "y": 7, - "w": 98, - "h": 90 - }, - "frame": { - "x": 192, - "y": 225, - "w": 98, - "h": 90 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 24, - "y": 7, - "w": 95, - "h": 90 - }, - "frame": { - "x": 290, - "y": 229, - "w": 95, - "h": 90 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 24, - "y": 7, - "w": 95, - "h": 90 - }, - "frame": { - "x": 290, - "y": 229, - "w": 95, - "h": 90 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 23, - "y": 4, - "w": 95, - "h": 90 - }, - "frame": { - "x": 385, - "y": 230, - "w": 95, - "h": 90 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 22, - "y": 4, - "w": 95, - "h": 91 - }, - "frame": { - "x": 480, - "y": 238, - "w": 95, - "h": 91 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 22, - "y": 4, - "w": 95, - "h": 91 - }, - "frame": { - "x": 480, - "y": 238, - "w": 95, - "h": 91 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 22, - "y": 4, - "w": 95, - "h": 91 - }, - "frame": { - "x": 480, - "y": 238, - "w": 95, - "h": 91 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 22, - "y": 4, - "w": 95, - "h": 91 - }, - "frame": { - "x": 480, - "y": 238, - "w": 95, - "h": 91 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 22, - "y": 4, - "w": 95, - "h": 91 - }, - "frame": { - "x": 480, - "y": 238, - "w": 95, - "h": 91 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 22, - "y": 4, - "w": 95, - "h": 91 - }, - "frame": { - "x": 480, - "y": 238, - "w": 95, - "h": 91 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 22, - "y": 5, - "w": 95, - "h": 91 - }, - "frame": { - "x": 0, - "y": 305, - "w": 95, - "h": 91 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 22, - "y": 5, - "w": 95, - "h": 91 - }, - "frame": { - "x": 0, - "y": 305, - "w": 95, - "h": 91 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 22, - "y": 5, - "w": 95, - "h": 91 - }, - "frame": { - "x": 0, - "y": 305, - "w": 95, - "h": 91 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 22, - "y": 5, - "w": 95, - "h": 91 - }, - "frame": { - "x": 0, - "y": 305, - "w": 95, - "h": 91 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 22, - "y": 5, - "w": 95, - "h": 91 - }, - "frame": { - "x": 0, - "y": 305, - "w": 95, - "h": 91 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 22, - "y": 5, - "w": 95, - "h": 91 - }, - "frame": { - "x": 0, - "y": 305, - "w": 95, - "h": 91 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 23, - "y": 6, - "w": 95, - "h": 91 - }, - "frame": { - "x": 95, - "y": 311, - "w": 95, - "h": 91 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 32, - "y": 2, - "w": 92, - "h": 91 - }, - "frame": { - "x": 190, - "y": 315, - "w": 92, - "h": 91 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 32, - "y": 2, - "w": 92, - "h": 91 - }, - "frame": { - "x": 190, - "y": 315, - "w": 92, - "h": 91 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 16, - "y": 5, - "w": 101, - "h": 91 - }, - "frame": { - "x": 282, - "y": 319, - "w": 101, - "h": 91 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 23, - "y": 5, - "w": 94, - "h": 92 - }, - "frame": { - "x": 383, - "y": 320, - "w": 94, - "h": 92 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 16, - "y": 4, - "w": 100, - "h": 92 - }, - "frame": { - "x": 477, - "y": 329, - "w": 100, - "h": 92 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 23, - "y": 3, - "w": 94, - "h": 92 - }, - "frame": { - "x": 0, - "y": 396, - "w": 94, - "h": 92 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 29, - "y": 2, - "w": 91, - "h": 92 - }, - "frame": { - "x": 94, - "y": 402, - "w": 91, - "h": 92 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 29, - "y": 2, - "w": 91, - "h": 92 - }, - "frame": { - "x": 94, - "y": 402, - "w": 91, - "h": 92 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 24, - "y": 2, - "w": 92, - "h": 92 - }, - "frame": { - "x": 185, - "y": 406, - "w": 92, - "h": 92 - } - }, - { - "filename": "0120.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 22, - "y": 6, - "w": 96, - "h": 92 - }, - "frame": { - "x": 277, - "y": 410, - "w": 96, - "h": 92 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 23, - "y": 3, - "w": 92, - "h": 93 - }, - "frame": { - "x": 373, - "y": 412, - "w": 92, - "h": 93 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 23, - "y": 3, - "w": 92, - "h": 93 - }, - "frame": { - "x": 373, - "y": 412, - "w": 92, - "h": 93 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 23, - "y": 3, - "w": 92, - "h": 93 - }, - "frame": { - "x": 373, - "y": 412, - "w": 92, - "h": 93 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 23, - "y": 3, - "w": 92, - "h": 93 - }, - "frame": { - "x": 373, - "y": 412, - "w": 92, - "h": 93 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 23, - "y": 3, - "w": 92, - "h": 93 - }, - "frame": { - "x": 373, - "y": 412, - "w": 92, - "h": 93 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 23, - "y": 3, - "w": 92, - "h": 93 - }, - "frame": { - "x": 373, - "y": 412, - "w": 92, - "h": 93 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 23, - "y": 2, - "w": 92, - "h": 93 - }, - "frame": { - "x": 465, - "y": 421, - "w": 92, - "h": 93 - } - }, - { - "filename": "0119.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 23, - "y": 4, - "w": 93, - "h": 94 - }, - "frame": { - "x": 0, - "y": 488, - "w": 93, - "h": 94 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 24, - "y": 1, - "w": 90, - "h": 95 - }, - "frame": { - "x": 93, - "y": 494, - "w": 90, - "h": 95 - } - }, - { - "filename": "0112.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 24, - "y": 1, - "w": 90, - "h": 95 - }, - "frame": { - "x": 93, - "y": 494, - "w": 90, - "h": 95 - } - }, - { - "filename": "0118.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 22, - "y": 3, - "w": 93, - "h": 95 - }, - "frame": { - "x": 183, - "y": 498, - "w": 93, - "h": 95 - } - }, - { - "filename": "0113.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 24, - "y": 0, - "w": 86, - "h": 96 - }, - "frame": { - "x": 276, - "y": 502, - "w": 86, - "h": 96 - } - }, - { - "filename": "0114.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 24, - "y": 0, - "w": 86, - "h": 96 - }, - "frame": { - "x": 276, - "y": 502, - "w": 86, - "h": 96 - } - }, - { - "filename": "0116.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 23, - "y": 1, - "w": 90, - "h": 96 - }, - "frame": { - "x": 362, - "y": 505, - "w": 90, - "h": 96 - } - }, - { - "filename": "0117.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 24, - "y": 2, - "w": 90, - "h": 96 - }, - "frame": { - "x": 452, - "y": 514, - "w": 90, - "h": 96 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:d1fca3cca7f334c5072e6d9eac438f12:ad4656a8607db0b15f07d4c8860395b7:25c89a8ec37b43392b53a70993acdff3$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 284, "y": 81, "w": 96, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 11, "w": 96, "h": 88 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 690, "y": 66, "w": 103, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 14, "w": 103, "h": 86 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 554, "y": 0, "w": 136, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 33, "w": 136, "h": 69 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 143, "y": 69, "w": 141, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 40, "w": 141, "h": 63 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 409, "y": 0, "w": 145, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 38, "w": 145, "h": 65 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 143, "y": 0, "w": 144, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 33, "w": 144, "h": 69 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 0, "w": 143, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 30, "w": 143, "h": 71 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 409, "y": 65, "w": 131, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 32, "w": 131, "h": 68 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 540, "y": 69, "w": 134, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 33, "w": 134, "h": 66 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 690, "y": 0, "w": 139, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 32, "w": 139, "h": 66 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 287, "y": 0, "w": 122, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 16, "w": 122, "h": 81 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 380, "y": 133, "w": 96, "h": 87 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 10, "w": 96, "h": 87 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 573, "y": 135, "w": 92, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 92, "h": 90 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 653, "y": 242, "w": 90, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 7, "w": 90, "h": 90 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 665, "y": 152, "w": 92, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 8, "w": 92, "h": 90 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 284, "y": 81, "w": 96, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 11, "w": 96, "h": 88 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 690, "y": 66, "w": 103, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 14, "w": 103, "h": 86 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 554, "y": 0, "w": 136, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 33, "w": 136, "h": 69 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 143, "y": 69, "w": 141, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 40, "w": 141, "h": 63 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 409, "y": 0, "w": 145, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 38, "w": 145, "h": 65 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 143, "y": 0, "w": 144, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 33, "w": 144, "h": 69 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 0, "y": 0, "w": 143, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 30, "w": 143, "h": 71 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 409, "y": 65, "w": 131, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 32, "w": 131, "h": 68 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 540, "y": 69, "w": 134, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 33, "w": 134, "h": 66 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 690, "y": 0, "w": 139, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 32, "w": 139, "h": 66 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 287, "y": 0, "w": 122, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 16, "w": 122, "h": 81 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 380, "y": 133, "w": 96, "h": 87 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 10, "w": 96, "h": 87 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 573, "y": 135, "w": 92, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 92, "h": 90 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 653, "y": 242, "w": 90, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 7, "w": 90, "h": 90 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 665, "y": 152, "w": 92, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 8, "w": 92, "h": 90 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 284, "y": 81, "w": 96, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 11, "w": 96, "h": 88 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 690, "y": 66, "w": 103, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 14, "w": 103, "h": 86 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 554, "y": 0, "w": 136, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 33, "w": 136, "h": 69 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 143, "y": 69, "w": 141, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 40, "w": 141, "h": 63 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 409, "y": 0, "w": 145, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 38, "w": 145, "h": 65 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 143, "y": 0, "w": 144, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 33, "w": 144, "h": 69 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 0, "w": 143, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 30, "w": 143, "h": 71 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 409, "y": 65, "w": 131, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 32, "w": 131, "h": 68 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 540, "y": 69, "w": 134, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 33, "w": 134, "h": 66 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 690, "y": 0, "w": 139, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 32, "w": 139, "h": 66 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 287, "y": 0, "w": 122, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 16, "w": 122, "h": 81 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 380, "y": 133, "w": 96, "h": 87 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 10, "w": 96, "h": 87 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 573, "y": 135, "w": 92, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 92, "h": 90 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 653, "y": 242, "w": 90, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 7, "w": 90, "h": 90 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 665, "y": 152, "w": 92, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 8, "w": 92, "h": 90 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 284, "y": 81, "w": 96, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 11, "w": 96, "h": 88 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 80 + }, + { + "filename": "0047.png", + "frame": { "x": 0, "y": 161, "w": 92, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 9, "w": 92, "h": 90 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 20 + }, + { + "filename": "0048.png", + "frame": { "x": 374, "y": 220, "w": 93, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 10, "w": 93, "h": 89 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 70 + }, + { + "filename": "0049.png", + "frame": { "x": 832, "y": 275, "w": 89, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 8, "w": 89, "h": 91 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 30 + }, + { + "filename": "0050.png", + "frame": { "x": 282, "y": 169, "w": 92, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 9, "w": 92, "h": 90 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 50 + }, + { + "filename": "0051.png", + "frame": { "x": 191, "y": 132, "w": 91, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 8, "w": 91, "h": 91 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 50 + }, + { + "filename": "0052.png", + "frame": { "x": 0, "y": 71, "w": 98, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 8, "w": 98, "h": 90 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 30 + }, + { + "filename": "0053.png", + "frame": { "x": 829, "y": 0, "w": 97, "h": 92 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 6, "w": 97, "h": 92 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 70 + }, + { + "filename": "0054.png", + "frame": { "x": 92, "y": 222, "w": 90, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 6, "w": 90, "h": 91 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 20 + }, + { + "filename": "0055.png", + "frame": { "x": 926, "y": 0, "w": 89, "h": 92 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 89, "h": 92 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 80 + }, + { + "filename": "0056.png", + "frame": { "x": 90, "y": 313, "w": 88, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 5, "w": 88, "h": 91 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 80 + }, + { + "filename": "0057.png", + "frame": { "x": 0, "y": 251, "w": 90, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 6, "w": 90, "h": 90 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 20 + }, + { + "filename": "0058.png", + "frame": { "x": 743, "y": 271, "w": 89, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 33, "y": 4, "w": 89, "h": 91 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 70 + }, + { + "filename": "0059.png", + "frame": { "x": 98, "y": 132, "w": 93, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 31, "y": 5, "w": 93, "h": 90 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 30 + }, + { + "filename": "0060.png", + "frame": { "x": 182, "y": 223, "w": 93, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 7, "w": 93, "h": 88 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 793, "y": 92, "w": 97, "h": 87 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 8, "w": 97, "h": 87 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 476, "y": 135, "w": 97, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 9, "w": 97, "h": 86 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 30 + }, + { + "filename": "0063.png", + "frame": { "x": 560, "y": 225, "w": 93, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 7, "w": 93, "h": 88 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 70 + }, + { + "filename": "0064.png", + "frame": { "x": 467, "y": 221, "w": 93, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 93, "h": 89 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 20 + }, + { + "filename": "0065.png", + "frame": { "x": 275, "y": 259, "w": 89, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 5, "w": 89, "h": 91 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 80 + }, + { + "filename": "0066.png", + "frame": { "x": 921, "y": 275, "w": 87, "h": 93 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 4, "w": 87, "h": 93 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 80 + }, + { + "filename": "0067.png", + "frame": { "x": 536, "y": 313, "w": 83, "h": 95 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 2, "w": 83, "h": 95 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 20 + }, + { + "filename": "0068.png", + "frame": { "x": 182, "y": 311, "w": 84, "h": 96 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 1, "w": 84, "h": 96 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 70 + }, + { + "filename": "0069.png", + "frame": { "x": 0, "y": 341, "w": 80, "h": 97 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 0, "w": 80, "h": 97 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 30 + }, + { + "filename": "0070.png", + "frame": { "x": 619, "y": 332, "w": 81, "h": 96 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 2, "w": 81, "h": 96 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 50 + }, + { + "filename": "0071.png", + "frame": { "x": 364, "y": 309, "w": 86, "h": 94 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 4, "w": 86, "h": 94 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 50 + }, + { + "filename": "0072.png", + "frame": { "x": 450, "y": 310, "w": 86, "h": 94 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 5, "w": 86, "h": 94 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 30 + }, + { + "filename": "0073.png", + "frame": { "x": 757, "y": 179, "w": 90, "h": 92 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 90, "h": 92 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 70 + }, + { + "filename": "0074.png", + "frame": { "x": 847, "y": 183, "w": 90, "h": 92 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 7, "w": 90, "h": 92 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 20 + }, + { + "filename": "0075.png", + "frame": { "x": 890, "y": 92, "w": 92, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 8, "w": 92, "h": 91 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 80 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.9.2-x64", + "image": "249.png", + "format": "I8", + "size": { "w": 1015, "h": 438 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/249.png b/public/images/pokemon/back/249.png index e08ce361804..181c7076e5d 100644 Binary files a/public/images/pokemon/back/249.png and b/public/images/pokemon/back/249.png differ diff --git a/public/images/pokemon/back/3-gigantamax.png b/public/images/pokemon/back/3-gigantamax.png index a368c97741e..278cb58b765 100644 Binary files a/public/images/pokemon/back/3-gigantamax.png and b/public/images/pokemon/back/3-gigantamax.png differ diff --git a/public/images/pokemon/back/3-mega.png b/public/images/pokemon/back/3-mega.png index 0c8512cb91b..5f4986de090 100644 Binary files a/public/images/pokemon/back/3-mega.png and b/public/images/pokemon/back/3-mega.png differ diff --git a/public/images/pokemon/back/3.png b/public/images/pokemon/back/3.png index 4312bfbce2c..9f833c7d122 100644 Binary files a/public/images/pokemon/back/3.png and b/public/images/pokemon/back/3.png differ diff --git a/public/images/pokemon/back/477.png b/public/images/pokemon/back/477.png index 40142d042b9..02b662fbd74 100644 Binary files a/public/images/pokemon/back/477.png and b/public/images/pokemon/back/477.png differ diff --git a/public/images/pokemon/back/658.json b/public/images/pokemon/back/658.json index 050b63e3592..1d8893e2d5d 100644 --- a/public/images/pokemon/back/658.json +++ b/public/images/pokemon/back/658.json @@ -1,19 +1,19 @@ { "frames": [ { "filename": "0001.png", - "frame": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "frame": { "x": 0, "y": 0, "w": 77, "h": 65 }, "rotated": false, "trimmed": false, - "spriteSourceSize": { "x": 0, "y": 0, "w": 77, "h": 77 }, - "sourceSize": { "w": 77, "h": 77 }, + "spriteSourceSize": { "x": 0, "y": 0, "w": 77, "h": 65 }, + "sourceSize": { "w": 77, "h": 65 }, "duration": 100 } ], "meta": { "app": "https://www.aseprite.org/", - "version": "1.3.7-x64", + "version": "1.3.9.2-x64", "format": "I8", - "size": { "w": 77, "h": 77 }, + "size": { "w": 77, "h": 65 }, "scale": "1" } } diff --git a/public/images/pokemon/back/658.png b/public/images/pokemon/back/658.png index ea24d9a6336..be286b88666 100644 Binary files a/public/images/pokemon/back/658.png and b/public/images/pokemon/back/658.png differ diff --git a/public/images/pokemon/back/666-fancy.png b/public/images/pokemon/back/666-fancy.png index 35ed4317d8e..b56daf08a52 100644 Binary files a/public/images/pokemon/back/666-fancy.png and b/public/images/pokemon/back/666-fancy.png differ diff --git a/public/images/pokemon/back/666-high-plains.png b/public/images/pokemon/back/666-high-plains.png index 22f676d8f49..d6cca9c2413 100644 Binary files a/public/images/pokemon/back/666-high-plains.png and b/public/images/pokemon/back/666-high-plains.png differ diff --git a/public/images/pokemon/back/666-river.png b/public/images/pokemon/back/666-river.png index 0d7d7a65d1e..effabe7fa2d 100644 Binary files a/public/images/pokemon/back/666-river.png and b/public/images/pokemon/back/666-river.png differ diff --git a/public/images/pokemon/back/668-female.json b/public/images/pokemon/back/668-female.json deleted file mode 100644 index dc3fc99ba58..00000000000 --- a/public/images/pokemon/back/668-female.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "textures": [ - { - "image": "668-female.png", - "format": "RGBA8888", - "size": { - "w": 74, - "h": 74 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 74, - "h": 72 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 74, - "h": 72 - }, - "frame": { - "x": 0, - "y": 0, - "w": 74, - "h": 72 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:3b22b1fc8fabd22888048f909287acba:10bec1e42fb1d39868a624d00345818d:d99ed0e84a0695b54e479aa98271aba1$" - } -} diff --git a/public/images/pokemon/back/668-female.png b/public/images/pokemon/back/668-female.png deleted file mode 100644 index 6f28278630a..00000000000 Binary files a/public/images/pokemon/back/668-female.png and /dev/null differ diff --git a/public/images/pokemon/back/674.json b/public/images/pokemon/back/674.json index e280c324a0a..cc0ead50962 100644 --- a/public/images/pokemon/back/674.json +++ b/public/images/pokemon/back/674.json @@ -1,41 +1,506 @@ -{ - "textures": [ - { - "image": "674.png", - "format": "RGBA8888", - "size": { - "w": 42, - "h": 42 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 27, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 27, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 27, - "h": 42 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:1fb0fb4f4e63f6114c7490a9d4d536dc:9830bfa81d721fc889ca0580935f03e3:b823d10f1c9b4d501296982088ba63d6$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 58, "y": 40, "w": 27, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 27, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0002.png", + "frame": { "x": 85, "y": 41, "w": 27, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 27, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0003.png", + "frame": { "x": 27, "y": 80, "w": 27, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 27, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0004.png", + "frame": { "x": 81, "y": 82, "w": 27, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 27, "h": 39 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0005.png", + "frame": { "x": 27, "y": 80, "w": 27, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 27, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0006.png", + "frame": { "x": 85, "y": 41, "w": 27, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 27, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0007.png", + "frame": { "x": 58, "y": 40, "w": 27, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 27, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0008.png", + "frame": { "x": 85, "y": 41, "w": 27, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 27, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0009.png", + "frame": { "x": 27, "y": 80, "w": 27, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 27, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0010.png", + "frame": { "x": 81, "y": 82, "w": 27, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 27, "h": 39 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0011.png", + "frame": { "x": 27, "y": 80, "w": 27, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 27, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0012.png", + "frame": { "x": 85, "y": 41, "w": 27, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 27, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0013.png", + "frame": { "x": 58, "y": 40, "w": 27, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 27, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0014.png", + "frame": { "x": 85, "y": 41, "w": 27, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 27, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0015.png", + "frame": { "x": 27, "y": 80, "w": 27, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 27, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0016.png", + "frame": { "x": 81, "y": 82, "w": 27, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 27, "h": 39 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0017.png", + "frame": { "x": 27, "y": 80, "w": 27, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 27, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0018.png", + "frame": { "x": 85, "y": 41, "w": 27, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 27, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0019.png", + "frame": { "x": 58, "y": 40, "w": 27, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 27, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0020.png", + "frame": { "x": 85, "y": 41, "w": 27, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 27, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0021.png", + "frame": { "x": 27, "y": 80, "w": 27, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 27, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0022.png", + "frame": { "x": 81, "y": 82, "w": 27, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 27, "h": 39 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0023.png", + "frame": { "x": 27, "y": 80, "w": 27, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 27, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0024.png", + "frame": { "x": 85, "y": 41, "w": 27, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 27, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0025.png", + "frame": { "x": 58, "y": 40, "w": 27, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 27, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0026.png", + "frame": { "x": 85, "y": 41, "w": 27, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 27, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0027.png", + "frame": { "x": 27, "y": 80, "w": 27, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 27, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0028.png", + "frame": { "x": 81, "y": 82, "w": 27, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 27, "h": 39 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0029.png", + "frame": { "x": 27, "y": 80, "w": 27, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 27, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0030.png", + "frame": { "x": 85, "y": 41, "w": 27, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 27, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0031.png", + "frame": { "x": 58, "y": 40, "w": 27, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 27, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 42, "w": 27, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 27, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0033.png", + "frame": { "x": 54, "y": 82, "w": 27, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 27, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0034.png", + "frame": { "x": 0, "y": 83, "w": 27, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 27, "h": 39 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0035.png", + "frame": { "x": 54, "y": 82, "w": 27, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 27, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0036.png", + "frame": { "x": 87, "y": 0, "w": 28, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 28, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0038.png", + "frame": { "x": 29, "y": 0, "w": 29, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 29, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0039.png", + "frame": { "x": 58, "y": 0, "w": 29, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 29, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0040.png", + "frame": { "x": 29, "y": 41, "w": 29, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 29, "h": 39 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0041.png", + "frame": { "x": 58, "y": 0, "w": 29, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 29, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0042.png", + "frame": { "x": 29, "y": 0, "w": 29, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 29, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0044.png", + "frame": { "x": 29, "y": 0, "w": 29, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 29, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0045.png", + "frame": { "x": 58, "y": 0, "w": 29, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 29, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0046.png", + "frame": { "x": 29, "y": 41, "w": 29, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 29, "h": 39 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0047.png", + "frame": { "x": 58, "y": 0, "w": 29, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 29, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0048.png", + "frame": { "x": 29, "y": 0, "w": 29, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 29, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0050.png", + "frame": { "x": 87, "y": 0, "w": 28, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 28, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0051.png", + "frame": { "x": 54, "y": 82, "w": 27, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 27, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0052.png", + "frame": { "x": 81, "y": 82, "w": 27, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 27, "h": 39 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0053.png", + "frame": { "x": 27, "y": 80, "w": 27, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 27, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0054.png", + "frame": { "x": 85, "y": 41, "w": 27, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 27, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0055.png", + "frame": { "x": 58, "y": 40, "w": 27, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 27, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "674.png", + "format": "I8", + "size": { "w": 115, "h": 122 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/674.png b/public/images/pokemon/back/674.png index be77e6e1598..9a9d0ec59dd 100644 Binary files a/public/images/pokemon/back/674.png and b/public/images/pokemon/back/674.png differ diff --git a/public/images/pokemon/back/694.json b/public/images/pokemon/back/694.json index afdb992784d..76c88067e7e 100644 --- a/public/images/pokemon/back/694.json +++ b/public/images/pokemon/back/694.json @@ -1,41 +1,767 @@ -{ - "textures": [ - { - "image": "694.png", - "format": "RGBA8888", - "size": { - "w": 44, - "h": 44 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 44, - "h": 37 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 37 - }, - "frame": { - "x": 0, - "y": 0, - "w": 44, - "h": 37 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:b35211eb8a79aa76e67039dd27e0e5a6:1905f4c2a0828a1c7c274f51d78b7e21:b0990f9650cfe63b836cbed33f0b44d8$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 102, "y": 163, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 44, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 57, "y": 129, "w": 45, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 45, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 162, "y": 127, "w": 47, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 47, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 114, "y": 126, "w": 48, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 48, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 283, "y": 90, "w": 49, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 49, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 227, "y": 126, "w": 49, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 49, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 276, "y": 127, "w": 47, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 132, "w": 45, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 45, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 132, "y": 201, "w": 43, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 43, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 234, "y": 201, "w": 42, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 42, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 206, "w": 42, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 42, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 44, "y": 203, "w": 43, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 43, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 276, "y": 201, "w": 43, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 43, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 89, "y": 200, "w": 43, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 43, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 146, "y": 164, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 44, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 102, "y": 163, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 44, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 57, "y": 129, "w": 45, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 45, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 162, "y": 127, "w": 47, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 47, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 114, "y": 126, "w": 48, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 48, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 283, "y": 90, "w": 49, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 49, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 227, "y": 126, "w": 49, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 49, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 276, "y": 127, "w": 47, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 0, "y": 132, "w": 45, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 45, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 132, "y": 201, "w": 43, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 43, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 234, "y": 201, "w": 42, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 42, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 206, "w": 42, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 42, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 44, "y": 203, "w": 43, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 43, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 276, "y": 201, "w": 43, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 43, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 89, "y": 200, "w": 43, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 43, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 146, "y": 164, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 44, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 102, "y": 163, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 44, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 57, "y": 129, "w": 45, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 45, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 162, "y": 127, "w": 47, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 47, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 114, "y": 126, "w": 48, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 48, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 283, "y": 90, "w": 49, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 49, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 227, "y": 126, "w": 49, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 49, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 276, "y": 127, "w": 47, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 0, "y": 132, "w": 45, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 45, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 132, "y": 201, "w": 43, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 43, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 234, "y": 201, "w": 42, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 42, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 206, "w": 42, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 42, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 44, "y": 203, "w": 43, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 43, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 276, "y": 201, "w": 43, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 43, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 89, "y": 200, "w": 43, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 43, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 146, "y": 164, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 44, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 102, "y": 163, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 44, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 57, "y": 129, "w": 45, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 45, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 162, "y": 127, "w": 47, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 47, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 114, "y": 126, "w": 48, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 48, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 283, "y": 90, "w": 49, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 49, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 227, "y": 126, "w": 49, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 49, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 276, "y": 127, "w": 47, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 0, "y": 132, "w": 45, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 45, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 132, "y": 201, "w": 43, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 43, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 234, "y": 201, "w": 42, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 42, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 206, "w": 42, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 42, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 44, "y": 203, "w": 43, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 43, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 276, "y": 201, "w": 43, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 43, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 89, "y": 200, "w": 43, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 43, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 146, "y": 164, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 44, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 102, "y": 163, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 44, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 253, "y": 164, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 44, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 297, "y": 164, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 44, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 45, "y": 166, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 44, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 209, "y": 162, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 44, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 172, "y": 90, "w": 55, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 55, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 57, "y": 90, "w": 57, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 57, "h": 39 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 117, "y": 0, "w": 58, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 47 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 59, "y": 0, "w": 58, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 58, "h": 48 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 0, "y": 0, "w": 59, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 59, "h": 48 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 232, "y": 0, "w": 58, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 58, "h": 45 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 232, "y": 45, "w": 57, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 57, "h": 45 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 175, "y": 0, "w": 57, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 57, "h": 47 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 289, "y": 45, "w": 57, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 57, "h": 45 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 117, "y": 47, "w": 57, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 43 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 290, "y": 0, "w": 58, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 58, "h": 45 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 174, "y": 47, "w": 57, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 57, "h": 43 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 58, "y": 48, "w": 57, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 57, "h": 42 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 0, "y": 90, "w": 57, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 57, "h": 42 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 0, "y": 48, "w": 58, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 58, "h": 42 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 114, "y": 90, "w": 58, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 12, "w": 58, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 227, "y": 90, "w": 56, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 56, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 0, "y": 169, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 44, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 190, "y": 199, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 44, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "694.png", + "format": "I8", + "size": { "w": 348, "h": 242 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/694.png b/public/images/pokemon/back/694.png index 5c5b107960c..d5f2f5f9563 100644 Binary files a/public/images/pokemon/back/694.png and b/public/images/pokemon/back/694.png differ diff --git a/public/images/pokemon/back/698.json b/public/images/pokemon/back/698.json index 5cfdd360d26..0da697e1f4e 100644 --- a/public/images/pokemon/back/698.json +++ b/public/images/pokemon/back/698.json @@ -1,41 +1,1415 @@ -{ - "textures": [ - { - "image": "698.png", - "format": "RGBA8888", - "size": { - "w": 55, - "h": 55 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 37, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 55 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 55 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:18b6430a6c7f4e62e682eee0f5b03c01:4297c6c0129460df1d8cf73dd3393a43:198087d69fed44d4a642fa3ba5c077d6$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 107, "w": 35, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 35, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0004.png", + "frame": { "x": 0, "y": 107, "w": 35, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 35, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0005.png", + "frame": { "x": 139, "y": 111, "w": 33, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 33, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0006.png", + "frame": { "x": 139, "y": 111, "w": 33, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 33, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0007.png", + "frame": { "x": 68, "y": 112, "w": 31, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 31, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0008.png", + "frame": { "x": 68, "y": 112, "w": 31, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 31, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0009.png", + "frame": { "x": 99, "y": 113, "w": 31, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 31, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0010.png", + "frame": { "x": 99, "y": 113, "w": 31, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 31, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0011.png", + "frame": { "x": 68, "y": 112, "w": 31, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 31, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0012.png", + "frame": { "x": 68, "y": 112, "w": 31, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 31, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0013.png", + "frame": { "x": 139, "y": 111, "w": 33, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 33, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0014.png", + "frame": { "x": 139, "y": 111, "w": 33, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 33, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0015.png", + "frame": { "x": 0, "y": 107, "w": 35, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 35, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 107, "w": 35, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 35, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0019.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0020.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0021.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0022.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0023.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0024.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0025.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0026.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0027.png", + "frame": { "x": 89, "y": 0, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 41, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0028.png", + "frame": { "x": 89, "y": 0, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 41, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0029.png", + "frame": { "x": 45, "y": 0, "w": 44, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 44, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0030.png", + "frame": { "x": 45, "y": 0, "w": 44, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 44, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0031.png", + "frame": { "x": 0, "y": 0, "w": 45, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 45, "h": 52 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 0, "w": 45, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 45, "h": 52 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0033.png", + "frame": { "x": 45, "y": 0, "w": 44, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 44, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0034.png", + "frame": { "x": 45, "y": 0, "w": 44, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 44, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0035.png", + "frame": { "x": 89, "y": 0, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 41, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0036.png", + "frame": { "x": 89, "y": 0, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 41, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0037.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0038.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0039.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0040.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0042.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 107, "w": 35, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 35, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0044.png", + "frame": { "x": 0, "y": 107, "w": 35, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 35, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0045.png", + "frame": { "x": 139, "y": 111, "w": 33, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 33, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0046.png", + "frame": { "x": 139, "y": 111, "w": 33, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 33, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0047.png", + "frame": { "x": 68, "y": 112, "w": 31, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 31, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0048.png", + "frame": { "x": 68, "y": 112, "w": 31, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 31, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0049.png", + "frame": { "x": 99, "y": 113, "w": 31, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 31, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0050.png", + "frame": { "x": 99, "y": 113, "w": 31, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 31, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0051.png", + "frame": { "x": 68, "y": 112, "w": 31, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 31, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0052.png", + "frame": { "x": 68, "y": 112, "w": 31, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 31, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0053.png", + "frame": { "x": 139, "y": 111, "w": 33, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 33, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0054.png", + "frame": { "x": 139, "y": 111, "w": 33, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 33, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 107, "w": 35, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 35, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 107, "w": 35, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 35, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0057.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0058.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0059.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0060.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0063.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0064.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0065.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0066.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0067.png", + "frame": { "x": 89, "y": 0, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 41, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0068.png", + "frame": { "x": 89, "y": 0, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 41, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0069.png", + "frame": { "x": 45, "y": 0, "w": 44, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 44, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0070.png", + "frame": { "x": 45, "y": 0, "w": 44, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 44, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0071.png", + "frame": { "x": 0, "y": 0, "w": 45, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 45, "h": 52 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0072.png", + "frame": { "x": 0, "y": 0, "w": 45, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 45, "h": 52 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0073.png", + "frame": { "x": 45, "y": 0, "w": 44, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 44, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0074.png", + "frame": { "x": 45, "y": 0, "w": 44, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 44, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0075.png", + "frame": { "x": 89, "y": 0, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 41, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0076.png", + "frame": { "x": 89, "y": 0, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 41, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0077.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0078.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0079.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0080.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0081.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0082.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0083.png", + "frame": { "x": 0, "y": 107, "w": 35, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 35, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0084.png", + "frame": { "x": 0, "y": 107, "w": 35, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 35, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0085.png", + "frame": { "x": 139, "y": 111, "w": 33, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 33, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0086.png", + "frame": { "x": 139, "y": 111, "w": 33, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 33, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0087.png", + "frame": { "x": 68, "y": 112, "w": 31, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 31, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0088.png", + "frame": { "x": 68, "y": 112, "w": 31, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 31, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0089.png", + "frame": { "x": 99, "y": 113, "w": 31, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 31, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0090.png", + "frame": { "x": 99, "y": 113, "w": 31, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 31, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0091.png", + "frame": { "x": 68, "y": 112, "w": 31, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 31, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0092.png", + "frame": { "x": 68, "y": 112, "w": 31, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 31, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0093.png", + "frame": { "x": 139, "y": 111, "w": 33, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 33, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0094.png", + "frame": { "x": 139, "y": 111, "w": 33, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 33, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0095.png", + "frame": { "x": 0, "y": 107, "w": 35, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 35, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0096.png", + "frame": { "x": 0, "y": 107, "w": 35, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 35, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0097.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0098.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0099.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0100.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0101.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0102.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0103.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0104.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0105.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0106.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0107.png", + "frame": { "x": 89, "y": 0, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 41, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0108.png", + "frame": { "x": 89, "y": 0, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 41, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0109.png", + "frame": { "x": 45, "y": 0, "w": 44, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 44, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0110.png", + "frame": { "x": 45, "y": 0, "w": 44, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 44, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0111.png", + "frame": { "x": 0, "y": 0, "w": 45, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 45, "h": 52 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0112.png", + "frame": { "x": 0, "y": 0, "w": 45, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 45, "h": 52 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0113.png", + "frame": { "x": 45, "y": 0, "w": 44, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 44, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0114.png", + "frame": { "x": 45, "y": 0, "w": 44, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 44, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0115.png", + "frame": { "x": 89, "y": 0, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 41, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0116.png", + "frame": { "x": 89, "y": 0, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 41, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0117.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0118.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0119.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0120.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0121.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0122.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0123.png", + "frame": { "x": 139, "y": 55, "w": 35, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 35, "h": 56 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0124.png", + "frame": { "x": 139, "y": 55, "w": 35, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 35, "h": 56 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0125.png", + "frame": { "x": 35, "y": 111, "w": 33, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 33, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0126.png", + "frame": { "x": 35, "y": 111, "w": 33, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 33, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0127.png", + "frame": { "x": 37, "y": 53, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0128.png", + "frame": { "x": 37, "y": 53, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0129.png", + "frame": { "x": 71, "y": 54, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0130.png", + "frame": { "x": 71, "y": 54, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0131.png", + "frame": { "x": 105, "y": 55, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0132.png", + "frame": { "x": 105, "y": 55, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0133.png", + "frame": { "x": 37, "y": 53, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0134.png", + "frame": { "x": 37, "y": 53, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0135.png", + "frame": { "x": 71, "y": 54, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0136.png", + "frame": { "x": 71, "y": 54, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0137.png", + "frame": { "x": 105, "y": 55, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0138.png", + "frame": { "x": 105, "y": 55, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0139.png", + "frame": { "x": 37, "y": 53, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0140.png", + "frame": { "x": 37, "y": 53, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0141.png", + "frame": { "x": 71, "y": 54, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0142.png", + "frame": { "x": 71, "y": 54, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0143.png", + "frame": { "x": 105, "y": 55, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0144.png", + "frame": { "x": 105, "y": 55, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0145.png", + "frame": { "x": 37, "y": 53, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0146.png", + "frame": { "x": 37, "y": 53, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0147.png", + "frame": { "x": 71, "y": 54, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0148.png", + "frame": { "x": 71, "y": 54, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0149.png", + "frame": { "x": 105, "y": 55, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0150.png", + "frame": { "x": 105, "y": 55, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0151.png", + "frame": { "x": 35, "y": 111, "w": 33, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 33, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0152.png", + "frame": { "x": 35, "y": 111, "w": 33, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 33, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0153.png", + "frame": { "x": 139, "y": 55, "w": 35, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 35, "h": 56 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0154.png", + "frame": { "x": 139, "y": 55, "w": 35, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 35, "h": 56 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0155.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0156.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "698.png", + "format": "I8", + "size": { "w": 174, "h": 169 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/698.png b/public/images/pokemon/back/698.png index 7326005d6f1..cd49968a7cd 100644 Binary files a/public/images/pokemon/back/698.png and b/public/images/pokemon/back/698.png differ diff --git a/public/images/pokemon/back/703.json b/public/images/pokemon/back/703.json index 4afe5c3a14d..d6752e6f7ff 100644 --- a/public/images/pokemon/back/703.json +++ b/public/images/pokemon/back/703.json @@ -1,41 +1,569 @@ -{ - "textures": [ - { - "image": "703.png", - "format": "RGBA8888", - "size": { - "w": 38, - "h": 38 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 37, - "h": 38 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 38 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 38 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:32e6c2d8721f80aa2afd20f97c5e4cf1:2c61f7a426cd2d739241c87d6ab5ea99:721af8c322ff60159262e9b3017c784d$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 36, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 73, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 73, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 0, "y": 40, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 36, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 36, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 40, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 72, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0013.png", + "frame": { "x": 36, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0014.png", + "frame": { "x": 73, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0015.png", + "frame": { "x": 73, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 40, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0017.png", + "frame": { "x": 36, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0019.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0020.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0021.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0022.png", + "frame": { "x": 36, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0023.png", + "frame": { "x": 0, "y": 40, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0024.png", + "frame": { "x": 72, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0025.png", + "frame": { "x": 36, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0026.png", + "frame": { "x": 73, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0027.png", + "frame": { "x": 73, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0028.png", + "frame": { "x": 0, "y": 40, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0029.png", + "frame": { "x": 36, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0030.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0031.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0033.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0034.png", + "frame": { "x": 36, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0035.png", + "frame": { "x": 0, "y": 40, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0036.png", + "frame": { "x": 72, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0037.png", + "frame": { "x": 36, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0038.png", + "frame": { "x": 73, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0039.png", + "frame": { "x": 73, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0040.png", + "frame": { "x": 0, "y": 40, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0041.png", + "frame": { "x": 36, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0042.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0044.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0045.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0046.png", + "frame": { "x": 36, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0047.png", + "frame": { "x": 0, "y": 40, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0048.png", + "frame": { "x": 72, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0049.png", + "frame": { "x": 36, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0050.png", + "frame": { "x": 36, "y": 38, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0051.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0052.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0053.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0057.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0058.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0059.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0060.png", + "frame": { "x": 36, "y": 38, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0061.png", + "frame": { "x": 73, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0062.png", + "frame": { "x": 72, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "703.png", + "format": "I8", + "size": { "w": 110, "h": 117 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/703.png b/public/images/pokemon/back/703.png index 1f52ddd3afe..b5b35e07027 100644 Binary files a/public/images/pokemon/back/703.png and b/public/images/pokemon/back/703.png differ diff --git a/public/images/pokemon/back/707.json b/public/images/pokemon/back/707.json index cf372e6a60f..b92e1983efc 100644 --- a/public/images/pokemon/back/707.json +++ b/public/images/pokemon/back/707.json @@ -1,41 +1,1559 @@ -{ - "textures": [ - { - "image": "707.png", - "format": "RGBA8888", - "size": { - "w": 77, - "h": 77 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 77 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 77 - }, - "frame": { - "x": 0, - "y": 0, - "w": 43, - "h": 77 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:8e9f9a53c8e85bade8027fc978f717a4:3280efd867363be1c2e5a01411ad5bd5:8e96b9056ea81e44ced99c97f472a528$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 358, "w": 43, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 18, "w": 43, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 190, "y": 373, "w": 42, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 17, "w": 42, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 391, "y": 440, "w": 41, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 33, "y": 16, "w": 41, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 443, "y": 377, "w": 42, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 16, "w": 42, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 715, "y": 359, "w": 44, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 15, "w": 44, "h": 75 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 45, "y": 363, "w": 44, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 38, "y": 14, "w": 44, "h": 75 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 520, "y": 352, "w": 45, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 39, "y": 13, "w": 45, "h": 74 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 306, "y": 291, "w": 48, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 41, "y": 14, "w": 48, "h": 72 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 527, "y": 213, "w": 51, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 43, "y": 13, "w": 51, "h": 72 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 372, "y": 139, "w": 56, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 44, "y": 12, "w": 56, "h": 71 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 404, "y": 69, "w": 59, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 43, "y": 13, "w": 59, "h": 70 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 658, "y": 73, "w": 57, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 41, "y": 14, "w": 57, "h": 71 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 570, "y": 141, "w": 55, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 39, "y": 13, "w": 55, "h": 72 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 161, "y": 145, "w": 53, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 38, "y": 14, "w": 53, "h": 72 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 2, "y": 208, "w": 51, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 15, "w": 51, "h": 73 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 475, "y": 229, "w": 49, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 16, "w": 49, "h": 73 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 623, "y": 300, "w": 46, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 33, "y": 16, "w": 46, "h": 74 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 475, "y": 302, "w": 45, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 31, "y": 17, "w": 45, "h": 75 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 232, "y": 414, "w": 42, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 18, "w": 42, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 607, "y": 374, "w": 42, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 17, "w": 42, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 147, "y": 351, "w": 43, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 16, "w": 43, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 206, "y": 295, "w": 44, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 16, "w": 44, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 326, "y": 213, "w": 46, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 46, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 479, "y": 151, "w": 48, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 14, "w": 48, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 112, "y": 145, "w": 49, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 13, "w": 49, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 321, "y": 135, "w": 51, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 13, "w": 51, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 269, "y": 134, "w": 52, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 12, "w": 52, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 214, "y": 69, "w": 55, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 11, "w": 55, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 463, "y": 69, "w": 55, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 12, "w": 55, "h": 74 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 159, "y": 69, "w": 55, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 55, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 715, "y": 73, "w": 53, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 13, "w": 53, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 518, "y": 74, "w": 52, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 14, "w": 52, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 61, "y": 136, "w": 51, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 15, "w": 51, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 625, "y": 144, "w": 49, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 16, "w": 49, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 625, "y": 222, "w": 46, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 16, "w": 46, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 430, "y": 287, "w": 45, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 17, "w": 45, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 2, "y": 358, "w": 43, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 18, "w": 43, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 190, "y": 373, "w": 42, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 17, "w": 42, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 391, "y": 440, "w": 41, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 33, "y": 16, "w": 41, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 443, "y": 377, "w": 42, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 16, "w": 42, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 715, "y": 359, "w": 44, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 15, "w": 44, "h": 75 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 45, "y": 363, "w": 44, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 38, "y": 14, "w": 44, "h": 75 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 520, "y": 352, "w": 45, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 39, "y": 13, "w": 45, "h": 74 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 306, "y": 291, "w": 48, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 41, "y": 14, "w": 48, "h": 72 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 527, "y": 213, "w": 51, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 43, "y": 13, "w": 51, "h": 72 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 372, "y": 139, "w": 56, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 44, "y": 12, "w": 56, "h": 71 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 404, "y": 69, "w": 59, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 43, "y": 13, "w": 59, "h": 70 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 658, "y": 73, "w": 57, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 41, "y": 14, "w": 57, "h": 71 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 570, "y": 141, "w": 55, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 39, "y": 13, "w": 55, "h": 72 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 161, "y": 145, "w": 53, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 38, "y": 14, "w": 53, "h": 72 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 2, "y": 208, "w": 51, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 15, "w": 51, "h": 73 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 475, "y": 229, "w": 49, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 16, "w": 49, "h": 73 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 623, "y": 300, "w": 46, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 33, "y": 16, "w": 46, "h": 74 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 475, "y": 302, "w": 45, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 31, "y": 17, "w": 45, "h": 75 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 232, "y": 414, "w": 42, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 18, "w": 42, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 607, "y": 374, "w": 42, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 17, "w": 42, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 147, "y": 351, "w": 43, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 16, "w": 43, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 206, "y": 295, "w": 44, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 16, "w": 44, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 326, "y": 213, "w": 46, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 46, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 479, "y": 151, "w": 48, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 14, "w": 48, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 112, "y": 145, "w": 49, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 13, "w": 49, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 321, "y": 135, "w": 51, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 13, "w": 51, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 269, "y": 134, "w": 52, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 12, "w": 52, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 214, "y": 69, "w": 55, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 11, "w": 55, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 463, "y": 69, "w": 55, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 12, "w": 55, "h": 74 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 159, "y": 69, "w": 55, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 55, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 715, "y": 73, "w": 53, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 13, "w": 53, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 518, "y": 74, "w": 52, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 14, "w": 52, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 61, "y": 136, "w": 51, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 15, "w": 51, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 625, "y": 144, "w": 49, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 16, "w": 49, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 625, "y": 222, "w": 46, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 16, "w": 46, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 430, "y": 287, "w": 45, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 17, "w": 45, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 2, "y": 358, "w": 43, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 18, "w": 43, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 190, "y": 373, "w": 42, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 17, "w": 42, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 391, "y": 440, "w": 41, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 33, "y": 16, "w": 41, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 443, "y": 377, "w": 42, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 16, "w": 42, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 715, "y": 359, "w": 44, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 15, "w": 44, "h": 75 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 45, "y": 363, "w": 44, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 38, "y": 14, "w": 44, "h": 75 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 520, "y": 352, "w": 45, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 39, "y": 13, "w": 45, "h": 74 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 306, "y": 291, "w": 48, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 41, "y": 14, "w": 48, "h": 72 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 527, "y": 213, "w": 51, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 43, "y": 13, "w": 51, "h": 72 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 372, "y": 139, "w": 56, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 44, "y": 12, "w": 56, "h": 71 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 404, "y": 69, "w": 59, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 43, "y": 13, "w": 59, "h": 70 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 658, "y": 73, "w": 57, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 41, "y": 14, "w": 57, "h": 71 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 570, "y": 141, "w": 55, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 39, "y": 13, "w": 55, "h": 72 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 161, "y": 145, "w": 53, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 38, "y": 14, "w": 53, "h": 72 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 2, "y": 208, "w": 51, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 15, "w": 51, "h": 73 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 475, "y": 229, "w": 49, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 16, "w": 49, "h": 73 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 623, "y": 300, "w": 46, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 33, "y": 16, "w": 46, "h": 74 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 475, "y": 302, "w": 45, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 31, "y": 17, "w": 45, "h": 75 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 232, "y": 414, "w": 42, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 18, "w": 42, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 607, "y": 374, "w": 42, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 17, "w": 42, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 147, "y": 351, "w": 43, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 16, "w": 43, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 206, "y": 295, "w": 44, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 16, "w": 44, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 326, "y": 213, "w": 46, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 46, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 479, "y": 151, "w": 48, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 14, "w": 48, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 112, "y": 145, "w": 49, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 13, "w": 49, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 321, "y": 135, "w": 51, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 13, "w": 51, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 269, "y": 134, "w": 52, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 12, "w": 52, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 214, "y": 69, "w": 55, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 11, "w": 55, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 463, "y": 69, "w": 55, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 12, "w": 55, "h": 74 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 159, "y": 69, "w": 55, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 55, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 715, "y": 73, "w": 53, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 13, "w": 53, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 518, "y": 74, "w": 52, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 14, "w": 52, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 61, "y": 136, "w": 51, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 15, "w": 51, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 625, "y": 144, "w": 49, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 16, "w": 49, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0107.png", + "frame": { "x": 625, "y": 222, "w": 46, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 16, "w": 46, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0108.png", + "frame": { "x": 430, "y": 287, "w": 45, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 17, "w": 45, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0109.png", + "frame": { "x": 2, "y": 358, "w": 43, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 18, "w": 43, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0110.png", + "frame": { "x": 428, "y": 143, "w": 51, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 17, "w": 51, "h": 75 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0111.png", + "frame": { "x": 98, "y": 62, "w": 61, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 14, "w": 61, "h": 74 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0112.png", + "frame": { "x": 530, "y": 2, "w": 70, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 11, "w": 70, "h": 72 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0113.png", + "frame": { "x": 194, "y": 2, "w": 85, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 6, "w": 85, "h": 67 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0114.png", + "frame": { "x": 2, "y": 2, "w": 96, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 96, "h": 63 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0115.png", + "frame": { "x": 98, "y": 2, "w": 96, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 1, "w": 96, "h": 60 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0116.png", + "frame": { "x": 279, "y": 2, "w": 91, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 0, "w": 91, "h": 62 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0117.png", + "frame": { "x": 370, "y": 2, "w": 84, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 0, "w": 84, "h": 64 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0118.png", + "frame": { "x": 454, "y": 2, "w": 76, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 1, "w": 76, "h": 67 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0119.png", + "frame": { "x": 600, "y": 2, "w": 67, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 2, "w": 67, "h": 69 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0120.png", + "frame": { "x": 372, "y": 210, "w": 51, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 4, "w": 51, "h": 72 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0121.png", + "frame": { "x": 172, "y": 450, "w": 41, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 31, "y": 5, "w": 41, "h": 75 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0122.png", + "frame": { "x": 526, "y": 443, "w": 41, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 31, "y": 7, "w": 41, "h": 75 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0123.png", + "frame": { "x": 432, "y": 453, "w": 41, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 31, "y": 10, "w": 41, "h": 74 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0124.png", + "frame": { "x": 43, "y": 438, "w": 41, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 31, "y": 11, "w": 41, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0125.png", + "frame": { "x": 2, "y": 435, "w": 41, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 31, "y": 13, "w": 41, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0126.png", + "frame": { "x": 565, "y": 366, "w": 42, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 14, "w": 42, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0127.png", + "frame": { "x": 131, "y": 429, "w": 41, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 16, "w": 41, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0128.png", + "frame": { "x": 485, "y": 426, "w": 41, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 17, "w": 41, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0129.png", + "frame": { "x": 649, "y": 421, "w": 41, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 18, "w": 41, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0130.png", + "frame": { "x": 2, "y": 358, "w": 43, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 18, "w": 43, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0131.png", + "frame": { "x": 2, "y": 281, "w": 46, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 18, "w": 46, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0132.png", + "frame": { "x": 53, "y": 214, "w": 48, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 18, "w": 48, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0133.png", + "frame": { "x": 354, "y": 348, "w": 46, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 19, "w": 46, "h": 73 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0134.png", + "frame": { "x": 345, "y": 421, "w": 46, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 32, "y": 20, "w": 46, "h": 69 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0135.png", + "frame": { "x": 567, "y": 451, "w": 45, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 20, "w": 45, "h": 68 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0136.png", + "frame": { "x": 423, "y": 218, "w": 52, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 20, "w": 52, "h": 69 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0137.png", + "frame": { "x": 2, "y": 137, "w": 56, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 19, "w": 56, "h": 71 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0138.png", + "frame": { "x": 2, "y": 65, "w": 59, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 33, "y": 19, "w": 59, "h": 72 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0139.png", + "frame": { "x": 600, "y": 71, "w": 58, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 31, "y": 19, "w": 58, "h": 70 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0140.png", + "frame": { "x": 577, "y": 291, "w": 46, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 18, "w": 46, "h": 75 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0141.png", + "frame": { "x": 303, "y": 363, "w": 42, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 18, "w": 42, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0142.png", + "frame": { "x": 400, "y": 364, "w": 43, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 18, "w": 43, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0143.png", + "frame": { "x": 524, "y": 285, "w": 53, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 19, "w": 53, "h": 67 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0144.png", + "frame": { "x": 266, "y": 213, "w": 60, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 19, "w": 60, "h": 62 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0145.png", + "frame": { "x": 674, "y": 219, "w": 58, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 58, "h": 62 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0146.png", + "frame": { "x": 150, "y": 288, "w": 56, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 18, "w": 56, "h": 63 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0147.png", + "frame": { "x": 250, "y": 351, "w": 53, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 18, "w": 53, "h": 63 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0148.png", + "frame": { "x": 674, "y": 149, "w": 54, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 18, "w": 54, "h": 70 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0149.png", + "frame": { "x": 214, "y": 145, "w": 52, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 19, "w": 52, "h": 73 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0150.png", + "frame": { "x": 48, "y": 290, "w": 48, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 19, "w": 48, "h": 73 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0151.png", + "frame": { "x": 161, "y": 217, "w": 51, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 19, "w": 51, "h": 71 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0152.png", + "frame": { "x": 343, "y": 66, "w": 61, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 20, "w": 61, "h": 69 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0153.png", + "frame": { "x": 279, "y": 64, "w": 64, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 20, "w": 64, "h": 70 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0154.png", + "frame": { "x": 667, "y": 2, "w": 64, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 34, "y": 19, "w": 64, "h": 71 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0155.png", + "frame": { "x": 101, "y": 223, "w": 49, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 31, "y": 18, "w": 49, "h": 73 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0156.png", + "frame": { "x": 89, "y": 363, "w": 42, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 18, "w": 42, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0157.png", + "frame": { "x": 671, "y": 281, "w": 53, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 19, "w": 53, "h": 67 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0158.png", + "frame": { "x": 274, "y": 441, "w": 62, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 62, "h": 50 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0159.png", + "frame": { "x": 275, "y": 491, "w": 62, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 22, "w": 62, "h": 43 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0160.png", + "frame": { "x": 674, "y": 505, "w": 59, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 23, "w": 59, "h": 42 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0161.png", + "frame": { "x": 612, "y": 498, "w": 62, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 22, "w": 62, "h": 43 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0162.png", + "frame": { "x": 213, "y": 491, "w": 62, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 22, "w": 62, "h": 49 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0163.png", + "frame": { "x": 372, "y": 287, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 21, "w": 58, "h": 61 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0164.png", + "frame": { "x": 96, "y": 296, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 20, "w": 51, "h": 67 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0165.png", + "frame": { "x": 84, "y": 441, "w": 45, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 20, "w": 45, "h": 69 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0166.png", + "frame": { "x": 728, "y": 149, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 19, "w": 42, "h": 70 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0167.png", + "frame": { "x": 690, "y": 434, "w": 44, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 19, "w": 44, "h": 71 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0168.png", + "frame": { "x": 669, "y": 348, "w": 46, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 19, "w": 46, "h": 73 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0169.png", + "frame": { "x": 259, "y": 275, "w": 47, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 18, "w": 47, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0170.png", + "frame": { "x": 212, "y": 218, "w": 47, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 18, "w": 47, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0171.png", + "frame": { "x": 578, "y": 213, "w": 47, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 18, "w": 47, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0172.png", + "frame": { "x": 724, "y": 281, "w": 45, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 18, "w": 45, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "707.png", + "format": "I8", + "size": { "w": 772, "h": 549 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/707.png b/public/images/pokemon/back/707.png index 78aa7077f90..83ca7298f45 100644 Binary files a/public/images/pokemon/back/707.png and b/public/images/pokemon/back/707.png differ diff --git a/public/images/pokemon/back/708.json b/public/images/pokemon/back/708.json index 33edc5748bd..22aa1885edb 100644 --- a/public/images/pokemon/back/708.json +++ b/public/images/pokemon/back/708.json @@ -1,41 +1,1091 @@ -{ - "textures": [ - { - "image": "708.png", - "format": "RGBA8888", - "size": { - "w": 43, - "h": 43 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 43, - "h": 40 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:baaaa3a73da00bbc954269f5f5228420:171d77a039e525f9a3a332d9e2d5d82c:796c82c5076b122f2663381836c65843$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 132, "y": 83, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 132, "y": 42, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 44, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 176, "y": 83, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 7, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 218, "y": 206, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 9, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 262, "y": 206, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 9, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 44, "y": 207, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 8, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 131, "y": 247, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 6, "w": 42, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 208, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 4, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 0, "y": 85, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 1, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 130, "y": 124, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 0, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 86, "y": 84, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 0, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 174, "y": 124, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 0, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 218, "y": 124, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 2, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 88, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 132, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 6, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 43, "w": 42, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 7, "w": 42, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 43, "y": 43, "w": 42, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 8, "w": 42, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 132, "y": 206, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 9, "w": 42, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 0, "y": 0, "w": 43, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 43, "h": 42 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 44, "y": 0, "w": 43, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 43, "h": 42 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 264, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 88, "y": 42, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 176, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 220, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 44, "y": 125, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 132, "y": 83, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 132, "y": 42, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 44, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 176, "y": 83, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 7, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 218, "y": 206, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 9, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 262, "y": 206, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 9, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 44, "y": 207, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 8, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 131, "y": 247, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 6, "w": 42, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 0, "y": 208, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 4, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 0, "y": 85, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 1, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 130, "y": 124, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 0, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 86, "y": 84, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 0, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 174, "y": 124, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 0, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 218, "y": 124, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 2, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 88, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 132, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 6, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 43, "w": 42, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 7, "w": 42, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 43, "y": 43, "w": 42, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 8, "w": 42, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 132, "y": 206, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 9, "w": 42, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 0, "y": 0, "w": 43, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 43, "h": 42 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 44, "y": 0, "w": 43, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 43, "h": 42 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 264, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 88, "y": 42, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 176, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 220, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 44, "y": 125, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 132, "y": 83, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 132, "y": 42, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 44, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 176, "y": 83, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 7, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 218, "y": 206, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 9, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 262, "y": 206, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 9, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 44, "y": 207, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 8, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 131, "y": 247, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 6, "w": 42, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 0, "y": 208, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 4, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 0, "y": 85, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 1, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 130, "y": 124, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 0, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 86, "y": 84, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 0, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 174, "y": 124, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 0, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 218, "y": 124, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 2, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 88, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 132, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 6, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 0, "y": 43, "w": 42, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 7, "w": 42, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 43, "y": 43, "w": 42, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 8, "w": 42, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 132, "y": 206, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 9, "w": 42, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 0, "y": 0, "w": 43, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 43, "h": 42 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 44, "y": 0, "w": 43, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 43, "h": 42 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 264, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 88, "y": 42, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 176, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 220, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 44, "y": 125, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 132, "y": 83, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 132, "y": 42, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 44, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 176, "y": 83, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 7, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 218, "y": 206, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 9, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 262, "y": 206, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 9, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 44, "y": 207, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 8, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 131, "y": 247, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 6, "w": 42, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 0, "y": 208, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 4, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 0, "y": 85, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 1, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 130, "y": 124, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 0, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 86, "y": 84, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 0, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 174, "y": 124, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 0, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 218, "y": 124, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 2, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 88, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 132, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 6, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 0, "y": 43, "w": 42, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 7, "w": 42, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 43, "y": 43, "w": 42, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 8, "w": 42, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 132, "y": 206, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 9, "w": 42, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 0, "y": 0, "w": 43, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 43, "h": 42 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 44, "y": 0, "w": 43, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 43, "h": 42 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 264, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 88, "y": 42, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 176, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 220, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 44, "y": 125, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 132, "y": 83, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 0, "y": 126, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 6, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 88, "y": 165, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 8, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 175, "y": 206, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 10, "w": 42, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 88, "y": 247, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 13, "w": 42, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 132, "y": 165, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 14, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0107.png", + "frame": { "x": 176, "y": 165, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 15, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0108.png", + "frame": { "x": 220, "y": 165, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 17, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0109.png", + "frame": { "x": 264, "y": 165, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 19, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0110.png", + "frame": { "x": 262, "y": 124, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 21, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0111.png", + "frame": { "x": 44, "y": 166, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 23, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0112.png", + "frame": { "x": 0, "y": 167, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 21, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0113.png", + "frame": { "x": 88, "y": 206, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 20, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0114.png", + "frame": { "x": 220, "y": 83, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0115.png", + "frame": { "x": 44, "y": 247, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 16, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0116.png", + "frame": { "x": 218, "y": 246, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 15, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0117.png", + "frame": { "x": 262, "y": 246, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 13, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0118.png", + "frame": { "x": 177, "y": 42, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 10, "w": 44, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0119.png", + "frame": { "x": 264, "y": 83, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 8, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0120.png", + "frame": { "x": 222, "y": 42, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 6, "w": 44, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "708.png", + "format": "I8", + "size": { "w": 307, "h": 286 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/708.png b/public/images/pokemon/back/708.png index d6ba8dd838c..9e094aa7122 100644 Binary files a/public/images/pokemon/back/708.png and b/public/images/pokemon/back/708.png differ diff --git a/public/images/pokemon/back/714.json b/public/images/pokemon/back/714.json index e4e3740603e..abcb8902edd 100644 --- a/public/images/pokemon/back/714.json +++ b/public/images/pokemon/back/714.json @@ -1,41 +1,263 @@ -{ - "textures": [ - { - "image": "714.png", - "format": "RGBA8888", - "size": { - "w": 63, - "h": 63 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 63, - "h": 57 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 63, - "h": 57 - }, - "frame": { - "x": 0, - "y": 0, - "w": 63, - "h": 57 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:8ffbc9c4153869b318391be0e5f3743c:6e53f3ebf638d13b0d9b325c9e1c6198:1a07d46e710b0568ec824f54fbc4fe6a$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 1, "y": 61, "w": 63, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 63, "h": 57 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0002.png", + "frame": { "x": 66, "y": 61, "w": 63, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 63, "h": 57 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0003.png", + "frame": { "x": 198, "y": 1, "w": 64, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 8, "w": 64, "h": 57 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0004.png", + "frame": { "x": 124, "y": 120, "w": 34, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 34, "h": 65 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0005.png", + "frame": { "x": 1, "y": 178, "w": 34, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 3, "w": 34, "h": 60 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0006.png", + "frame": { "x": 264, "y": 61, "w": 47, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 1, "w": 47, "h": 57 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0007.png", + "frame": { "x": 196, "y": 119, "w": 47, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 47, "h": 57 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0008.png", + "frame": { "x": 1, "y": 61, "w": 63, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 63, "h": 57 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0009.png", + "frame": { "x": 131, "y": 61, "w": 63, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 57 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0010.png", + "frame": { "x": 198, "y": 60, "w": 64, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 64, "h": 57 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0011.png", + "frame": { "x": 160, "y": 120, "w": 34, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 3, "w": 34, "h": 65 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0012.png", + "frame": { "x": 196, "y": 178, "w": 34, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 3, "w": 34, "h": 60 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0013.png", + "frame": { "x": 1, "y": 120, "w": 47, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 47, "h": 56 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0014.png", + "frame": { "x": 196, "y": 119, "w": 47, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 47, "h": 57 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0015.png", + "frame": { "x": 1, "y": 61, "w": 63, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 63, "h": 57 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0016.png", + "frame": { "x": 66, "y": 61, "w": 63, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 63, "h": 57 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0017.png", + "frame": { "x": 1, "y": 1, "w": 64, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 7, "w": 64, "h": 58 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0018.png", + "frame": { "x": 50, "y": 120, "w": 35, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 2, "w": 35, "h": 66 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0019.png", + "frame": { "x": 245, "y": 120, "w": 35, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 2, "w": 35, "h": 61 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0020.png", + "frame": { "x": 264, "y": 1, "w": 47, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 0, "w": 47, "h": 58 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0021.png", + "frame": { "x": 196, "y": 119, "w": 47, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 47, "h": 57 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0022.png", + "frame": { "x": 1, "y": 61, "w": 63, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 63, "h": 57 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0023.png", + "frame": { "x": 133, "y": 1, "w": 63, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 63, "h": 58 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0024.png", + "frame": { "x": 67, "y": 1, "w": 64, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 64, "h": 58 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0025.png", + "frame": { "x": 87, "y": 120, "w": 35, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 35, "h": 66 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0026.png", + "frame": { "x": 282, "y": 120, "w": 34, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 2, "w": 34, "h": 61 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0027.png", + "frame": { "x": 1, "y": 120, "w": 47, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 47, "h": 56 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0028.png", + "frame": { "x": 196, "y": 119, "w": 47, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 47, "h": 57 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "714.png", + "format": "I8", + "size": { "w": 317, "h": 239 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/714.png b/public/images/pokemon/back/714.png index b9724fe6a63..afe2bce45a4 100644 Binary files a/public/images/pokemon/back/714.png and b/public/images/pokemon/back/714.png differ diff --git a/public/images/pokemon/back/715.png b/public/images/pokemon/back/715.png index edcb84dbd2a..624780ff0c6 100644 Binary files a/public/images/pokemon/back/715.png and b/public/images/pokemon/back/715.png differ diff --git a/public/images/pokemon/back/718-10.json b/public/images/pokemon/back/718-10.json index 74c29a2514f..75053d61900 100644 --- a/public/images/pokemon/back/718-10.json +++ b/public/images/pokemon/back/718-10.json @@ -1,41 +1,686 @@ -{ - "textures": [ - { - "image": "718-10.png", - "format": "RGBA8888", - "size": { - "w": 65, - "h": 65 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 59, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 59, - "h": 65 - }, - "frame": { - "x": 0, - "y": 0, - "w": 59, - "h": 65 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:e9f4b2c69d996349a8e35598e7ddec9c:06067c7cf2cde81fd4d1f42fe319185e:82195cf2a6db620c5643b8162d6e8c5c$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 120, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 179, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 0, "w": 60, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 60, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 293, "y": 128, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 60, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 131, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 60, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 120, "y": 0, "w": 61, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 61, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 181, "y": 0, "w": 61, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 61, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 242, "y": 0, "w": 61, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 61, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 303, "y": 0, "w": 61, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 61, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 232, "y": 190, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 60, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 292, "y": 191, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 60, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 60, "y": 0, "w": 60, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 60, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 238, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 297, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 120, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 179, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 0, "w": 60, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 60, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 293, "y": 128, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 60, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 0, "y": 131, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 60, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 120, "y": 0, "w": 61, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 61, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 181, "y": 0, "w": 61, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 61, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 242, "y": 0, "w": 61, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 61, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 303, "y": 0, "w": 61, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 61, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 232, "y": 190, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 60, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 292, "y": 191, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 60, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 60, "y": 0, "w": 60, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 60, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 238, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 297, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 120, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 179, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 0, "y": 0, "w": 60, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 60, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 293, "y": 128, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 60, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 0, "y": 131, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 60, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 120, "y": 0, "w": 61, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 61, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 181, "y": 0, "w": 61, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 61, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 242, "y": 0, "w": 61, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 61, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 303, "y": 0, "w": 61, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 61, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 232, "y": 190, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 60, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 292, "y": 191, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 60, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 60, "y": 0, "w": 60, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 60, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 238, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 297, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 120, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 179, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 0, "y": 0, "w": 60, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 60, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 293, "y": 128, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 60, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 0, "y": 131, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 60, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 120, "y": 0, "w": 61, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 61, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 181, "y": 0, "w": 61, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 61, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 242, "y": 0, "w": 61, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 61, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 303, "y": 0, "w": 61, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 61, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 232, "y": 190, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 60, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 292, "y": 191, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 60, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 60, "y": 0, "w": 60, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 60, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 238, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 297, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 120, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 0, "y": 194, "w": 59, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 59, "h": 64 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 59, "y": 194, "w": 59, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 59, "h": 64 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 56, "y": 319, "w": 59, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 59, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 117, "y": 259, "w": 60, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 60, "h": 62 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 177, "y": 320, "w": 60, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 60, "h": 61 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 232, "y": 128, "w": 61, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 61, "h": 62 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 56, "y": 258, "w": 61, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 61, "h": 61 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 118, "y": 195, "w": 59, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 59, "h": 64 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 115, "y": 321, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 55, "h": 66 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 237, "y": 321, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 55, "h": 66 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 234, "y": 253, "w": 56, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 56, "h": 67 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 290, "y": 254, "w": 56, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 56, "h": 67 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 0, "y": 258, "w": 56, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 56, "h": 67 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 175, "y": 128, "w": 57, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 57, "h": 67 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 177, "y": 253, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 57, "h": 66 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 59, "y": 65, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 66 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 117, "y": 128, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 66 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 0, "y": 65, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "718-10.png", + "format": "I8", + "size": { "w": 364, "h": 387 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/718-10.png b/public/images/pokemon/back/718-10.png index 351da7fa3b3..2f3b211e9a6 100644 Binary files a/public/images/pokemon/back/718-10.png and b/public/images/pokemon/back/718-10.png differ diff --git a/public/images/pokemon/back/718.json b/public/images/pokemon/back/718.json index ef727edcb5c..1a835e26b08 100644 --- a/public/images/pokemon/back/718.json +++ b/public/images/pokemon/back/718.json @@ -1,41 +1,803 @@ -{ - "textures": [ - { - "image": "718.png", - "format": "RGBA8888", - "size": { - "w": 88, - "h": 88 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 72, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 72, - "h": 88 - }, - "frame": { - "x": 0, - "y": 0, - "w": 72, - "h": 88 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:3aa5b45708c79b806af72f343f73edbc:0b68b84d5671a020b28cd5a19650bf44:7b4a06b06cbac24b3f39727b0238661b$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 224, "y": 443, "w": 72, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 72, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 148, "y": 445, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 71, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 445, "y": 445, "w": 70, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 70, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 72, "y": 446, "w": 70, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 70, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 373, "y": 360, "w": 72, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 72, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 226, "y": 355, "w": 74, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 74, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 184, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 75, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 150, "y": 269, "w": 76, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 76, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 304, "y": 269, "w": 76, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 76, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 459, "y": 269, "w": 76, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 76, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 308, "y": 180, "w": 76, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 76, "h": 89 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 462, "y": 180, "w": 76, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 76, "h": 89 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 386, "y": 91, "w": 76, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 76, "h": 90 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 75, "y": 270, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 75, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 150, "y": 357, "w": 74, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 74, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 75, "y": 358, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 73, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 224, "y": 443, "w": 72, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 72, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 148, "y": 445, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 71, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 445, "y": 445, "w": 70, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 70, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 72, "y": 446, "w": 70, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 70, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 373, "y": 360, "w": 72, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 72, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 226, "y": 355, "w": 74, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 74, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 0, "y": 184, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 75, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 150, "y": 269, "w": 76, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 76, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 304, "y": 269, "w": 76, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 76, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 459, "y": 269, "w": 76, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 76, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 308, "y": 180, "w": 76, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 76, "h": 89 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 462, "y": 180, "w": 76, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 76, "h": 89 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 386, "y": 91, "w": 76, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 76, "h": 90 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 75, "y": 270, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 75, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 150, "y": 357, "w": 74, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 74, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 75, "y": 358, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 73, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 224, "y": 443, "w": 72, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 72, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 148, "y": 445, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 71, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 445, "y": 445, "w": 70, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 70, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 72, "y": 446, "w": 70, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 70, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 373, "y": 360, "w": 72, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 72, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 226, "y": 355, "w": 74, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 74, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 0, "y": 184, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 75, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 150, "y": 269, "w": 76, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 76, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 304, "y": 269, "w": 76, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 76, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 459, "y": 269, "w": 76, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 76, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 308, "y": 180, "w": 76, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 76, "h": 89 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 462, "y": 180, "w": 76, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 76, "h": 89 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 386, "y": 91, "w": 76, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 76, "h": 90 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 75, "y": 270, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 75, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 150, "y": 357, "w": 74, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 74, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 75, "y": 358, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 73, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 224, "y": 443, "w": 72, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 72, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 148, "y": 445, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 71, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 445, "y": 445, "w": 70, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 70, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 72, "y": 446, "w": 70, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 70, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 373, "y": 360, "w": 72, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 72, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 226, "y": 355, "w": 74, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 74, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 184, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 75, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 150, "y": 269, "w": 76, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 76, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 304, "y": 269, "w": 76, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 76, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 459, "y": 269, "w": 76, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 76, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 308, "y": 180, "w": 76, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 76, "h": 89 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 462, "y": 180, "w": 76, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 76, "h": 89 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 386, "y": 91, "w": 76, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 76, "h": 90 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 75, "y": 270, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 75, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 150, "y": 357, "w": 74, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 74, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 75, "y": 358, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 73, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 224, "y": 443, "w": 72, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 72, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 0, "y": 359, "w": 72, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 72, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 300, "y": 357, "w": 73, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 73, "h": 89 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 380, "y": 271, "w": 74, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 74, "h": 89 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 384, "y": 181, "w": 75, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 75, "h": 90 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 155, "y": 92, "w": 76, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 76, "h": 90 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 309, "y": 91, "w": 77, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 77, "h": 89 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 227, "y": 268, "w": 77, "h": 87 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 77, "h": 87 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 150, "y": 182, "w": 77, "h": 87 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 77, "h": 87 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 0, "y": 272, "w": 75, "h": 87 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 75, "h": 87 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 310, "y": 0, "w": 77, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 77, "h": 91 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 387, "y": 0, "w": 77, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 77, "h": 91 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 155, "y": 0, "w": 77, "h": 92 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 77, "h": 92 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 77, "y": 0, "w": 78, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 78, "h": 91 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 0, "y": 0, "w": 77, "h": 93 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 77, "h": 93 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 231, "y": 180, "w": 77, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 77, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 232, "y": 0, "w": 78, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 78, "h": 90 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 77, "y": 91, "w": 78, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 78, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 464, "y": 0, "w": 77, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 77, "h": 90 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 232, "y": 90, "w": 77, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 77, "h": 90 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 464, "y": 90, "w": 77, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 77, "h": 90 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 0, "y": 93, "w": 75, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 75, "h": 91 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 75, "y": 179, "w": 75, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 75, "h": 91 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 454, "y": 357, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 73, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "718.png", + "format": "I8", + "size": { "w": 541, "h": 534 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/718.png b/public/images/pokemon/back/718.png index 8e3966b1f79..ce48ca205b4 100644 Binary files a/public/images/pokemon/back/718.png and b/public/images/pokemon/back/718.png differ diff --git a/public/images/pokemon/back/719.json b/public/images/pokemon/back/719.json index ea7fd0f3213..440e23718de 100644 --- a/public/images/pokemon/back/719.json +++ b/public/images/pokemon/back/719.json @@ -1,41 +1,875 @@ -{ - "textures": [ - { - "image": "719.png", - "format": "RGBA8888", - "size": { - "w": 70, - "h": 70 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 42, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 42, - "h": 70 - }, - "frame": { - "x": 0, - "y": 0, - "w": 42, - "h": 70 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:fd235f556d7919416a78362d72f6badd:d250eac977fb7684257a27d4f4c11bea:17a705bb924916761be2495822a53735$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 44, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 88, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 132, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 176, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 144, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 42, "y": 216, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 83, "y": 216, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 42, "y": 144, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 5, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 84, "y": 144, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 6, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 131, "y": 72, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 41, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 220, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 44, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 88, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 132, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 176, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 144, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 42, "y": 216, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 83, "y": 216, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 42, "y": 144, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 5, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 84, "y": 144, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 6, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 131, "y": 72, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 41, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 220, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 44, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 88, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 132, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 176, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 0, "y": 144, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 42, "y": 216, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 83, "y": 216, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 42, "y": 144, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 5, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 84, "y": 144, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 6, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 131, "y": 72, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 41, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 220, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 44, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 88, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 132, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 176, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 0, "y": 144, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 42, "y": 216, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 83, "y": 216, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 42, "y": 144, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 5, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 84, "y": 144, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 6, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 131, "y": 72, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 41, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 220, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 0, "y": 72, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 8, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 126, "y": 144, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 7, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 168, "y": 144, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 5, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 124, "y": 216, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 206, "y": 216, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 2, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 162, "y": 359, "w": 37, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 0, "w": 37, "h": 69 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 202, "y": 288, "w": 37, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 1, "w": 37, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 82, "y": 288, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 3, "w": 38, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 165, "y": 216, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 5, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 210, "y": 144, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 7, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 217, "y": 72, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 9, "w": 41, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 44, "y": 72, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 8, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 88, "y": 72, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 7, "w": 41, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 252, "y": 144, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 247, "y": 216, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 0, "y": 288, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 162, "y": 288, "w": 38, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 38, "h": 69 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 241, "y": 288, "w": 37, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 37, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 122, "y": 288, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 38, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 41, "y": 288, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 0, "y": 216, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 8, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 174, "y": 72, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 41, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 0, "y": 72, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 8, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 126, "y": 144, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 7, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 168, "y": 144, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 5, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 124, "y": 216, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 206, "y": 216, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 2, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 162, "y": 359, "w": 37, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 0, "w": 37, "h": 69 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 202, "y": 288, "w": 37, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 1, "w": 37, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 82, "y": 288, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 3, "w": 38, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 165, "y": 216, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 5, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 210, "y": 144, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 7, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 217, "y": 72, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 9, "w": 41, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 44, "y": 72, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 8, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 88, "y": 72, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 7, "w": 41, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 252, "y": 144, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 247, "y": 216, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 0, "y": 288, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 162, "y": 288, "w": 38, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 38, "h": 69 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 241, "y": 288, "w": 37, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 37, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 122, "y": 288, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 38, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 41, "y": 288, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 0, "y": 216, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 8, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 174, "y": 72, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 41, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "719.png", + "format": "I8", + "size": { "w": 292, "h": 428 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/719.png b/public/images/pokemon/back/719.png index 14ff62742f7..1c275f3241d 100644 Binary files a/public/images/pokemon/back/719.png and b/public/images/pokemon/back/719.png differ diff --git a/public/images/pokemon/back/881.png b/public/images/pokemon/back/881.png index 2f77327cfd0..60ab60a9aa1 100644 Binary files a/public/images/pokemon/back/881.png and b/public/images/pokemon/back/881.png differ diff --git a/public/images/pokemon/back/987.png b/public/images/pokemon/back/987.png index 64a47fbf0ea..ab4e628de28 100644 Binary files a/public/images/pokemon/back/987.png and b/public/images/pokemon/back/987.png differ diff --git a/public/images/pokemon/back/female/3.png b/public/images/pokemon/back/female/3.png index 0fdbf4e9be2..ef103db8ce0 100644 Binary files a/public/images/pokemon/back/female/3.png and b/public/images/pokemon/back/female/3.png differ diff --git a/public/images/pokemon/back/shiny/249.json b/public/images/pokemon/back/shiny/249.json index 7512f163c15..7f126e8c62c 100644 --- a/public/images/pokemon/back/shiny/249.json +++ b/public/images/pokemon/back/shiny/249.json @@ -1,2540 +1,686 @@ -{ - "textures": [ - { - "image": "249.png", - "format": "RGBA8888", - "size": { - "w": 610, - "h": 610 - }, - "scale": 1, - "frames": [ - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 36, - "w": 143, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 143, - "h": 64 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 36, - "w": 143, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 143, - "h": 64 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 36, - "w": 143, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 143, - "h": 64 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 36, - "w": 143, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 143, - "h": 64 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 36, - "w": 143, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 143, - "h": 64 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 36, - "w": 143, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 143, - "h": 64 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 35, - "w": 146, - "h": 65 - }, - "frame": { - "x": 143, - "y": 0, - "w": 146, - "h": 65 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 35, - "w": 146, - "h": 65 - }, - "frame": { - "x": 143, - "y": 0, - "w": 146, - "h": 65 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 35, - "w": 146, - "h": 65 - }, - "frame": { - "x": 143, - "y": 0, - "w": 146, - "h": 65 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 35, - "w": 146, - "h": 65 - }, - "frame": { - "x": 143, - "y": 0, - "w": 146, - "h": 65 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 35, - "w": 146, - "h": 65 - }, - "frame": { - "x": 143, - "y": 0, - "w": 146, - "h": 65 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 35, - "w": 146, - "h": 65 - }, - "frame": { - "x": 143, - "y": 0, - "w": 146, - "h": 65 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 10, - "y": 30, - "w": 132, - "h": 67 - }, - "frame": { - "x": 289, - "y": 0, - "w": 132, - "h": 67 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 10, - "y": 30, - "w": 132, - "h": 67 - }, - "frame": { - "x": 289, - "y": 0, - "w": 132, - "h": 67 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 10, - "y": 30, - "w": 132, - "h": 67 - }, - "frame": { - "x": 289, - "y": 0, - "w": 132, - "h": 67 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 10, - "y": 30, - "w": 132, - "h": 67 - }, - "frame": { - "x": 289, - "y": 0, - "w": 132, - "h": 67 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 10, - "y": 30, - "w": 132, - "h": 67 - }, - "frame": { - "x": 289, - "y": 0, - "w": 132, - "h": 67 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 10, - "y": 30, - "w": 132, - "h": 67 - }, - "frame": { - "x": 289, - "y": 0, - "w": 132, - "h": 67 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 28, - "w": 140, - "h": 68 - }, - "frame": { - "x": 421, - "y": 0, - "w": 140, - "h": 68 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 28, - "w": 140, - "h": 68 - }, - "frame": { - "x": 421, - "y": 0, - "w": 140, - "h": 68 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 28, - "w": 140, - "h": 68 - }, - "frame": { - "x": 421, - "y": 0, - "w": 140, - "h": 68 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 28, - "w": 140, - "h": 68 - }, - "frame": { - "x": 421, - "y": 0, - "w": 140, - "h": 68 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 28, - "w": 140, - "h": 68 - }, - "frame": { - "x": 421, - "y": 0, - "w": 140, - "h": 68 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 28, - "w": 140, - "h": 68 - }, - "frame": { - "x": 421, - "y": 0, - "w": 140, - "h": 68 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 2, - "y": 30, - "w": 138, - "h": 70 - }, - "frame": { - "x": 0, - "y": 64, - "w": 138, - "h": 70 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 2, - "y": 30, - "w": 138, - "h": 70 - }, - "frame": { - "x": 0, - "y": 64, - "w": 138, - "h": 70 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 2, - "y": 30, - "w": 138, - "h": 70 - }, - "frame": { - "x": 0, - "y": 64, - "w": 138, - "h": 70 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 2, - "y": 30, - "w": 138, - "h": 70 - }, - "frame": { - "x": 0, - "y": 64, - "w": 138, - "h": 70 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 2, - "y": 30, - "w": 138, - "h": 70 - }, - "frame": { - "x": 0, - "y": 64, - "w": 138, - "h": 70 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 2, - "y": 30, - "w": 138, - "h": 70 - }, - "frame": { - "x": 0, - "y": 64, - "w": 138, - "h": 70 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 30, - "w": 146, - "h": 70 - }, - "frame": { - "x": 138, - "y": 65, - "w": 146, - "h": 70 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 30, - "w": 146, - "h": 70 - }, - "frame": { - "x": 138, - "y": 65, - "w": 146, - "h": 70 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 30, - "w": 146, - "h": 70 - }, - "frame": { - "x": 138, - "y": 65, - "w": 146, - "h": 70 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 30, - "w": 146, - "h": 70 - }, - "frame": { - "x": 138, - "y": 65, - "w": 146, - "h": 70 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 30, - "w": 146, - "h": 70 - }, - "frame": { - "x": 138, - "y": 65, - "w": 146, - "h": 70 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 0, - "y": 30, - "w": 146, - "h": 70 - }, - "frame": { - "x": 138, - "y": 65, - "w": 146, - "h": 70 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 10, - "y": 28, - "w": 130, - "h": 70 - }, - "frame": { - "x": 284, - "y": 67, - "w": 130, - "h": 70 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 10, - "y": 28, - "w": 130, - "h": 70 - }, - "frame": { - "x": 284, - "y": 67, - "w": 130, - "h": 70 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 10, - "y": 28, - "w": 130, - "h": 70 - }, - "frame": { - "x": 284, - "y": 67, - "w": 130, - "h": 70 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 10, - "y": 28, - "w": 130, - "h": 70 - }, - "frame": { - "x": 284, - "y": 67, - "w": 130, - "h": 70 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 10, - "y": 28, - "w": 130, - "h": 70 - }, - "frame": { - "x": 284, - "y": 67, - "w": 130, - "h": 70 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 10, - "y": 28, - "w": 130, - "h": 70 - }, - "frame": { - "x": 284, - "y": 67, - "w": 130, - "h": 70 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 1, - "y": 26, - "w": 145, - "h": 73 - }, - "frame": { - "x": 414, - "y": 68, - "w": 145, - "h": 73 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 1, - "y": 26, - "w": 145, - "h": 73 - }, - "frame": { - "x": 414, - "y": 68, - "w": 145, - "h": 73 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 1, - "y": 26, - "w": 145, - "h": 73 - }, - "frame": { - "x": 414, - "y": 68, - "w": 145, - "h": 73 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 1, - "y": 26, - "w": 145, - "h": 73 - }, - "frame": { - "x": 414, - "y": 68, - "w": 145, - "h": 73 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 1, - "y": 26, - "w": 145, - "h": 73 - }, - "frame": { - "x": 414, - "y": 68, - "w": 145, - "h": 73 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 1, - "y": 26, - "w": 145, - "h": 73 - }, - "frame": { - "x": 414, - "y": 68, - "w": 145, - "h": 73 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 7, - "y": 13, - "w": 124, - "h": 82 - }, - "frame": { - "x": 0, - "y": 134, - "w": 124, - "h": 82 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 7, - "y": 13, - "w": 124, - "h": 82 - }, - "frame": { - "x": 0, - "y": 134, - "w": 124, - "h": 82 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 7, - "y": 13, - "w": 124, - "h": 82 - }, - "frame": { - "x": 0, - "y": 134, - "w": 124, - "h": 82 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 7, - "y": 13, - "w": 124, - "h": 82 - }, - "frame": { - "x": 0, - "y": 134, - "w": 124, - "h": 82 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 7, - "y": 13, - "w": 124, - "h": 82 - }, - "frame": { - "x": 0, - "y": 134, - "w": 124, - "h": 82 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 7, - "y": 13, - "w": 124, - "h": 82 - }, - "frame": { - "x": 0, - "y": 134, - "w": 124, - "h": 82 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 17, - "y": 11, - "w": 106, - "h": 87 - }, - "frame": { - "x": 124, - "y": 135, - "w": 106, - "h": 87 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 17, - "y": 11, - "w": 106, - "h": 87 - }, - "frame": { - "x": 124, - "y": 135, - "w": 106, - "h": 87 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 17, - "y": 11, - "w": 106, - "h": 87 - }, - "frame": { - "x": 124, - "y": 135, - "w": 106, - "h": 87 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 17, - "y": 11, - "w": 106, - "h": 87 - }, - "frame": { - "x": 124, - "y": 135, - "w": 106, - "h": 87 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 17, - "y": 11, - "w": 106, - "h": 87 - }, - "frame": { - "x": 124, - "y": 135, - "w": 106, - "h": 87 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 17, - "y": 11, - "w": 106, - "h": 87 - }, - "frame": { - "x": 124, - "y": 135, - "w": 106, - "h": 87 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 25, - "y": 5, - "w": 99, - "h": 88 - }, - "frame": { - "x": 230, - "y": 137, - "w": 99, - "h": 88 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 23, - "y": 5, - "w": 99, - "h": 88 - }, - "frame": { - "x": 329, - "y": 141, - "w": 99, - "h": 88 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 20, - "y": 6, - "w": 98, - "h": 89 - }, - "frame": { - "x": 428, - "y": 141, - "w": 98, - "h": 89 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 20, - "y": 6, - "w": 98, - "h": 89 - }, - "frame": { - "x": 428, - "y": 141, - "w": 98, - "h": 89 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 20, - "y": 6, - "w": 98, - "h": 89 - }, - "frame": { - "x": 428, - "y": 141, - "w": 98, - "h": 89 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 20, - "y": 6, - "w": 98, - "h": 89 - }, - "frame": { - "x": 428, - "y": 141, - "w": 98, - "h": 89 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 20, - "y": 6, - "w": 98, - "h": 89 - }, - "frame": { - "x": 428, - "y": 141, - "w": 98, - "h": 89 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 20, - "y": 6, - "w": 98, - "h": 89 - }, - "frame": { - "x": 428, - "y": 141, - "w": 98, - "h": 89 - } - }, - { - "filename": "0115.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 26, - "y": 0, - "w": 84, - "h": 97 - }, - "frame": { - "x": 526, - "y": 141, - "w": 84, - "h": 97 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 27, - "y": 4, - "w": 96, - "h": 89 - }, - "frame": { - "x": 0, - "y": 216, - "w": 96, - "h": 89 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 25, - "y": 4, - "w": 96, - "h": 89 - }, - "frame": { - "x": 96, - "y": 222, - "w": 96, - "h": 89 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 20, - "y": 7, - "w": 98, - "h": 90 - }, - "frame": { - "x": 192, - "y": 225, - "w": 98, - "h": 90 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 20, - "y": 7, - "w": 98, - "h": 90 - }, - "frame": { - "x": 192, - "y": 225, - "w": 98, - "h": 90 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 20, - "y": 7, - "w": 98, - "h": 90 - }, - "frame": { - "x": 192, - "y": 225, - "w": 98, - "h": 90 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 20, - "y": 7, - "w": 98, - "h": 90 - }, - "frame": { - "x": 192, - "y": 225, - "w": 98, - "h": 90 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 20, - "y": 7, - "w": 98, - "h": 90 - }, - "frame": { - "x": 192, - "y": 225, - "w": 98, - "h": 90 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 20, - "y": 7, - "w": 98, - "h": 90 - }, - "frame": { - "x": 192, - "y": 225, - "w": 98, - "h": 90 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 20, - "y": 7, - "w": 98, - "h": 90 - }, - "frame": { - "x": 192, - "y": 225, - "w": 98, - "h": 90 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 20, - "y": 7, - "w": 98, - "h": 90 - }, - "frame": { - "x": 192, - "y": 225, - "w": 98, - "h": 90 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 24, - "y": 7, - "w": 95, - "h": 90 - }, - "frame": { - "x": 290, - "y": 229, - "w": 95, - "h": 90 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 24, - "y": 7, - "w": 95, - "h": 90 - }, - "frame": { - "x": 290, - "y": 229, - "w": 95, - "h": 90 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 23, - "y": 4, - "w": 95, - "h": 90 - }, - "frame": { - "x": 385, - "y": 230, - "w": 95, - "h": 90 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 22, - "y": 4, - "w": 95, - "h": 91 - }, - "frame": { - "x": 480, - "y": 238, - "w": 95, - "h": 91 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 22, - "y": 4, - "w": 95, - "h": 91 - }, - "frame": { - "x": 480, - "y": 238, - "w": 95, - "h": 91 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 22, - "y": 4, - "w": 95, - "h": 91 - }, - "frame": { - "x": 480, - "y": 238, - "w": 95, - "h": 91 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 22, - "y": 4, - "w": 95, - "h": 91 - }, - "frame": { - "x": 480, - "y": 238, - "w": 95, - "h": 91 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 22, - "y": 4, - "w": 95, - "h": 91 - }, - "frame": { - "x": 480, - "y": 238, - "w": 95, - "h": 91 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 22, - "y": 4, - "w": 95, - "h": 91 - }, - "frame": { - "x": 480, - "y": 238, - "w": 95, - "h": 91 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 22, - "y": 5, - "w": 95, - "h": 91 - }, - "frame": { - "x": 0, - "y": 305, - "w": 95, - "h": 91 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 22, - "y": 5, - "w": 95, - "h": 91 - }, - "frame": { - "x": 0, - "y": 305, - "w": 95, - "h": 91 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 22, - "y": 5, - "w": 95, - "h": 91 - }, - "frame": { - "x": 0, - "y": 305, - "w": 95, - "h": 91 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 22, - "y": 5, - "w": 95, - "h": 91 - }, - "frame": { - "x": 0, - "y": 305, - "w": 95, - "h": 91 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 22, - "y": 5, - "w": 95, - "h": 91 - }, - "frame": { - "x": 0, - "y": 305, - "w": 95, - "h": 91 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 22, - "y": 5, - "w": 95, - "h": 91 - }, - "frame": { - "x": 0, - "y": 305, - "w": 95, - "h": 91 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 23, - "y": 6, - "w": 95, - "h": 91 - }, - "frame": { - "x": 95, - "y": 311, - "w": 95, - "h": 91 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 32, - "y": 2, - "w": 92, - "h": 91 - }, - "frame": { - "x": 190, - "y": 315, - "w": 92, - "h": 91 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 32, - "y": 2, - "w": 92, - "h": 91 - }, - "frame": { - "x": 190, - "y": 315, - "w": 92, - "h": 91 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 16, - "y": 5, - "w": 101, - "h": 91 - }, - "frame": { - "x": 282, - "y": 319, - "w": 101, - "h": 91 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 23, - "y": 5, - "w": 94, - "h": 92 - }, - "frame": { - "x": 383, - "y": 320, - "w": 94, - "h": 92 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 16, - "y": 4, - "w": 100, - "h": 92 - }, - "frame": { - "x": 477, - "y": 329, - "w": 100, - "h": 92 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 23, - "y": 3, - "w": 94, - "h": 92 - }, - "frame": { - "x": 0, - "y": 396, - "w": 94, - "h": 92 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 29, - "y": 2, - "w": 91, - "h": 92 - }, - "frame": { - "x": 94, - "y": 402, - "w": 91, - "h": 92 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 29, - "y": 2, - "w": 91, - "h": 92 - }, - "frame": { - "x": 94, - "y": 402, - "w": 91, - "h": 92 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 24, - "y": 2, - "w": 92, - "h": 92 - }, - "frame": { - "x": 185, - "y": 406, - "w": 92, - "h": 92 - } - }, - { - "filename": "0120.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 22, - "y": 6, - "w": 96, - "h": 92 - }, - "frame": { - "x": 277, - "y": 410, - "w": 96, - "h": 92 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 23, - "y": 3, - "w": 92, - "h": 93 - }, - "frame": { - "x": 373, - "y": 412, - "w": 92, - "h": 93 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 23, - "y": 3, - "w": 92, - "h": 93 - }, - "frame": { - "x": 373, - "y": 412, - "w": 92, - "h": 93 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 23, - "y": 3, - "w": 92, - "h": 93 - }, - "frame": { - "x": 373, - "y": 412, - "w": 92, - "h": 93 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 23, - "y": 3, - "w": 92, - "h": 93 - }, - "frame": { - "x": 373, - "y": 412, - "w": 92, - "h": 93 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 23, - "y": 3, - "w": 92, - "h": 93 - }, - "frame": { - "x": 373, - "y": 412, - "w": 92, - "h": 93 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 23, - "y": 3, - "w": 92, - "h": 93 - }, - "frame": { - "x": 373, - "y": 412, - "w": 92, - "h": 93 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 23, - "y": 2, - "w": 92, - "h": 93 - }, - "frame": { - "x": 465, - "y": 421, - "w": 92, - "h": 93 - } - }, - { - "filename": "0119.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 23, - "y": 4, - "w": 93, - "h": 94 - }, - "frame": { - "x": 0, - "y": 488, - "w": 93, - "h": 94 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 24, - "y": 1, - "w": 90, - "h": 95 - }, - "frame": { - "x": 93, - "y": 494, - "w": 90, - "h": 95 - } - }, - { - "filename": "0112.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 24, - "y": 1, - "w": 90, - "h": 95 - }, - "frame": { - "x": 93, - "y": 494, - "w": 90, - "h": 95 - } - }, - { - "filename": "0118.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 22, - "y": 3, - "w": 93, - "h": 95 - }, - "frame": { - "x": 183, - "y": 498, - "w": 93, - "h": 95 - } - }, - { - "filename": "0113.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 24, - "y": 0, - "w": 86, - "h": 96 - }, - "frame": { - "x": 276, - "y": 502, - "w": 86, - "h": 96 - } - }, - { - "filename": "0114.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 24, - "y": 0, - "w": 86, - "h": 96 - }, - "frame": { - "x": 276, - "y": 502, - "w": 86, - "h": 96 - } - }, - { - "filename": "0116.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 23, - "y": 1, - "w": 90, - "h": 96 - }, - "frame": { - "x": 362, - "y": 505, - "w": 90, - "h": 96 - } - }, - { - "filename": "0117.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 146, - "h": 100 - }, - "spriteSourceSize": { - "x": 24, - "y": 2, - "w": 90, - "h": 96 - }, - "frame": { - "x": 452, - "y": 514, - "w": 90, - "h": 96 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:d7da4020739cd4d93722302e0d6f99c6:d519731f31735f11bbba940400858c46:25c89a8ec37b43392b53a70993acdff3$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 284, "y": 81, "w": 96, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 11, "w": 96, "h": 88 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 690, "y": 66, "w": 103, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 14, "w": 103, "h": 86 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 554, "y": 0, "w": 136, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 33, "w": 136, "h": 69 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 143, "y": 69, "w": 141, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 40, "w": 141, "h": 63 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 409, "y": 0, "w": 145, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 38, "w": 145, "h": 65 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 143, "y": 0, "w": 144, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 33, "w": 144, "h": 69 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 0, "w": 143, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 30, "w": 143, "h": 71 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 409, "y": 65, "w": 131, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 32, "w": 131, "h": 68 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 540, "y": 69, "w": 134, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 33, "w": 134, "h": 66 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 690, "y": 0, "w": 139, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 32, "w": 139, "h": 66 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 287, "y": 0, "w": 122, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 16, "w": 122, "h": 81 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 380, "y": 133, "w": 96, "h": 87 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 10, "w": 96, "h": 87 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 573, "y": 135, "w": 92, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 92, "h": 90 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 653, "y": 242, "w": 90, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 7, "w": 90, "h": 90 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 665, "y": 152, "w": 92, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 8, "w": 92, "h": 90 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 284, "y": 81, "w": 96, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 11, "w": 96, "h": 88 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 690, "y": 66, "w": 103, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 14, "w": 103, "h": 86 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 554, "y": 0, "w": 136, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 33, "w": 136, "h": 69 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 143, "y": 69, "w": 141, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 40, "w": 141, "h": 63 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 409, "y": 0, "w": 145, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 38, "w": 145, "h": 65 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 143, "y": 0, "w": 144, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 33, "w": 144, "h": 69 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 0, "y": 0, "w": 143, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 30, "w": 143, "h": 71 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 409, "y": 65, "w": 131, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 32, "w": 131, "h": 68 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 540, "y": 69, "w": 134, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 33, "w": 134, "h": 66 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 690, "y": 0, "w": 139, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 32, "w": 139, "h": 66 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 287, "y": 0, "w": 122, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 16, "w": 122, "h": 81 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 380, "y": 133, "w": 96, "h": 87 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 10, "w": 96, "h": 87 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 573, "y": 135, "w": 92, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 92, "h": 90 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 653, "y": 242, "w": 90, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 7, "w": 90, "h": 90 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 665, "y": 152, "w": 92, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 8, "w": 92, "h": 90 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 284, "y": 81, "w": 96, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 11, "w": 96, "h": 88 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 690, "y": 66, "w": 103, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 14, "w": 103, "h": 86 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 554, "y": 0, "w": 136, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 33, "w": 136, "h": 69 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 143, "y": 69, "w": 141, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 40, "w": 141, "h": 63 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 409, "y": 0, "w": 145, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 38, "w": 145, "h": 65 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 143, "y": 0, "w": 144, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 33, "w": 144, "h": 69 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 0, "w": 143, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 30, "w": 143, "h": 71 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 409, "y": 65, "w": 131, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 32, "w": 131, "h": 68 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 540, "y": 69, "w": 134, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 33, "w": 134, "h": 66 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 690, "y": 0, "w": 139, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 32, "w": 139, "h": 66 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 287, "y": 0, "w": 122, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 16, "w": 122, "h": 81 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 380, "y": 133, "w": 96, "h": 87 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 10, "w": 96, "h": 87 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 573, "y": 135, "w": 92, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 92, "h": 90 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 653, "y": 242, "w": 90, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 7, "w": 90, "h": 90 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 665, "y": 152, "w": 92, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 8, "w": 92, "h": 90 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 284, "y": 81, "w": 96, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 11, "w": 96, "h": 88 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 80 + }, + { + "filename": "0047.png", + "frame": { "x": 0, "y": 161, "w": 92, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 9, "w": 92, "h": 90 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 20 + }, + { + "filename": "0048.png", + "frame": { "x": 374, "y": 220, "w": 93, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 10, "w": 93, "h": 89 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 70 + }, + { + "filename": "0049.png", + "frame": { "x": 832, "y": 275, "w": 89, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 8, "w": 89, "h": 91 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 30 + }, + { + "filename": "0050.png", + "frame": { "x": 282, "y": 169, "w": 92, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 9, "w": 92, "h": 90 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 50 + }, + { + "filename": "0051.png", + "frame": { "x": 191, "y": 132, "w": 91, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 8, "w": 91, "h": 91 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 50 + }, + { + "filename": "0052.png", + "frame": { "x": 0, "y": 71, "w": 98, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 8, "w": 98, "h": 90 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 30 + }, + { + "filename": "0053.png", + "frame": { "x": 829, "y": 0, "w": 97, "h": 92 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 6, "w": 97, "h": 92 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 70 + }, + { + "filename": "0054.png", + "frame": { "x": 92, "y": 222, "w": 90, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 6, "w": 90, "h": 91 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 20 + }, + { + "filename": "0055.png", + "frame": { "x": 926, "y": 0, "w": 89, "h": 92 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 89, "h": 92 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 80 + }, + { + "filename": "0056.png", + "frame": { "x": 90, "y": 313, "w": 88, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 5, "w": 88, "h": 91 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 80 + }, + { + "filename": "0057.png", + "frame": { "x": 0, "y": 251, "w": 90, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 6, "w": 90, "h": 90 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 20 + }, + { + "filename": "0058.png", + "frame": { "x": 743, "y": 271, "w": 89, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 33, "y": 4, "w": 89, "h": 91 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 70 + }, + { + "filename": "0059.png", + "frame": { "x": 98, "y": 132, "w": 93, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 31, "y": 5, "w": 93, "h": 90 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 30 + }, + { + "filename": "0060.png", + "frame": { "x": 182, "y": 223, "w": 93, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 7, "w": 93, "h": 88 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 793, "y": 92, "w": 97, "h": 87 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 8, "w": 97, "h": 87 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 476, "y": 135, "w": 97, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 9, "w": 97, "h": 86 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 30 + }, + { + "filename": "0063.png", + "frame": { "x": 560, "y": 225, "w": 93, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 7, "w": 93, "h": 88 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 70 + }, + { + "filename": "0064.png", + "frame": { "x": 467, "y": 221, "w": 93, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 93, "h": 89 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 20 + }, + { + "filename": "0065.png", + "frame": { "x": 275, "y": 259, "w": 89, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 5, "w": 89, "h": 91 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 80 + }, + { + "filename": "0066.png", + "frame": { "x": 921, "y": 275, "w": 87, "h": 93 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 4, "w": 87, "h": 93 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 80 + }, + { + "filename": "0067.png", + "frame": { "x": 536, "y": 313, "w": 83, "h": 95 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 2, "w": 83, "h": 95 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 20 + }, + { + "filename": "0068.png", + "frame": { "x": 182, "y": 311, "w": 84, "h": 96 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 1, "w": 84, "h": 96 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 70 + }, + { + "filename": "0069.png", + "frame": { "x": 0, "y": 341, "w": 80, "h": 97 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 0, "w": 80, "h": 97 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 30 + }, + { + "filename": "0070.png", + "frame": { "x": 619, "y": 332, "w": 81, "h": 96 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 2, "w": 81, "h": 96 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 50 + }, + { + "filename": "0071.png", + "frame": { "x": 364, "y": 309, "w": 86, "h": 94 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 4, "w": 86, "h": 94 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 50 + }, + { + "filename": "0072.png", + "frame": { "x": 450, "y": 310, "w": 86, "h": 94 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 5, "w": 86, "h": 94 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 30 + }, + { + "filename": "0073.png", + "frame": { "x": 757, "y": 179, "w": 90, "h": 92 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 90, "h": 92 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 70 + }, + { + "filename": "0074.png", + "frame": { "x": 847, "y": 183, "w": 90, "h": 92 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 7, "w": 90, "h": 92 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 20 + }, + { + "filename": "0075.png", + "frame": { "x": 890, "y": 92, "w": 92, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 8, "w": 92, "h": 91 }, + "sourceSize": { "w": 146, "h": 103 }, + "duration": 80 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.9.2-x64", + "image": "249.png", + "format": "I8", + "size": { "w": 1015, "h": 438 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/shiny/249.png b/public/images/pokemon/back/shiny/249.png index bf37f724613..066a38999e0 100644 Binary files a/public/images/pokemon/back/shiny/249.png and b/public/images/pokemon/back/shiny/249.png differ diff --git a/public/images/pokemon/back/shiny/3-gigantamax.png b/public/images/pokemon/back/shiny/3-gigantamax.png index e3402e164a6..24b79e4211e 100644 Binary files a/public/images/pokemon/back/shiny/3-gigantamax.png and b/public/images/pokemon/back/shiny/3-gigantamax.png differ diff --git a/public/images/pokemon/back/shiny/3.png b/public/images/pokemon/back/shiny/3.png index a80c363723b..890fce10821 100644 Binary files a/public/images/pokemon/back/shiny/3.png and b/public/images/pokemon/back/shiny/3.png differ diff --git a/public/images/pokemon/back/shiny/477.png b/public/images/pokemon/back/shiny/477.png index 45879a61d11..e7630e58e07 100644 Binary files a/public/images/pokemon/back/shiny/477.png and b/public/images/pokemon/back/shiny/477.png differ diff --git a/public/images/pokemon/back/shiny/658.json b/public/images/pokemon/back/shiny/658.json index 050b63e3592..867e1d2d3d2 100644 --- a/public/images/pokemon/back/shiny/658.json +++ b/public/images/pokemon/back/shiny/658.json @@ -1,11 +1,11 @@ { "frames": [ { "filename": "0001.png", - "frame": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "frame": { "x": 0, "y": 0, "w": 77, "h": 65 }, "rotated": false, "trimmed": false, - "spriteSourceSize": { "x": 0, "y": 0, "w": 77, "h": 77 }, - "sourceSize": { "w": 77, "h": 77 }, + "spriteSourceSize": { "x": 0, "y": 0, "w": 77, "h": 65 }, + "sourceSize": { "w": 77, "h": 65 }, "duration": 100 } ], @@ -13,7 +13,7 @@ "app": "https://www.aseprite.org/", "version": "1.3.7-x64", "format": "I8", - "size": { "w": 77, "h": 77 }, + "size": { "w": 77, "h": 65 }, "scale": "1" } } diff --git a/public/images/pokemon/back/shiny/658.png b/public/images/pokemon/back/shiny/658.png index 21519b6a145..239aaafb6ce 100644 Binary files a/public/images/pokemon/back/shiny/658.png and b/public/images/pokemon/back/shiny/658.png differ diff --git a/public/images/pokemon/back/shiny/668-female.png b/public/images/pokemon/back/shiny/668-female.png deleted file mode 100644 index caf8bed99ac..00000000000 Binary files a/public/images/pokemon/back/shiny/668-female.png and /dev/null differ diff --git a/public/images/pokemon/back/shiny/674.json b/public/images/pokemon/back/shiny/674.json index eac9372c5d4..cc0ead50962 100644 --- a/public/images/pokemon/back/shiny/674.json +++ b/public/images/pokemon/back/shiny/674.json @@ -1,41 +1,506 @@ -{ - "textures": [ - { - "image": "674.png", - "format": "RGBA8888", - "size": { - "w": 42, - "h": 42 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 27, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 27, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 27, - "h": 42 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:efc4d9ff714ef5249d5ea29e541766f9:c21489bea9a10b1521844e4efb4735d5:b823d10f1c9b4d501296982088ba63d6$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 58, "y": 40, "w": 27, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 27, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0002.png", + "frame": { "x": 85, "y": 41, "w": 27, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 27, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0003.png", + "frame": { "x": 27, "y": 80, "w": 27, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 27, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0004.png", + "frame": { "x": 81, "y": 82, "w": 27, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 27, "h": 39 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0005.png", + "frame": { "x": 27, "y": 80, "w": 27, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 27, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0006.png", + "frame": { "x": 85, "y": 41, "w": 27, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 27, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0007.png", + "frame": { "x": 58, "y": 40, "w": 27, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 27, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0008.png", + "frame": { "x": 85, "y": 41, "w": 27, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 27, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0009.png", + "frame": { "x": 27, "y": 80, "w": 27, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 27, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0010.png", + "frame": { "x": 81, "y": 82, "w": 27, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 27, "h": 39 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0011.png", + "frame": { "x": 27, "y": 80, "w": 27, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 27, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0012.png", + "frame": { "x": 85, "y": 41, "w": 27, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 27, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0013.png", + "frame": { "x": 58, "y": 40, "w": 27, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 27, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0014.png", + "frame": { "x": 85, "y": 41, "w": 27, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 27, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0015.png", + "frame": { "x": 27, "y": 80, "w": 27, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 27, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0016.png", + "frame": { "x": 81, "y": 82, "w": 27, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 27, "h": 39 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0017.png", + "frame": { "x": 27, "y": 80, "w": 27, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 27, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0018.png", + "frame": { "x": 85, "y": 41, "w": 27, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 27, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0019.png", + "frame": { "x": 58, "y": 40, "w": 27, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 27, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0020.png", + "frame": { "x": 85, "y": 41, "w": 27, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 27, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0021.png", + "frame": { "x": 27, "y": 80, "w": 27, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 27, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0022.png", + "frame": { "x": 81, "y": 82, "w": 27, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 27, "h": 39 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0023.png", + "frame": { "x": 27, "y": 80, "w": 27, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 27, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0024.png", + "frame": { "x": 85, "y": 41, "w": 27, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 27, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0025.png", + "frame": { "x": 58, "y": 40, "w": 27, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 27, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0026.png", + "frame": { "x": 85, "y": 41, "w": 27, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 27, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0027.png", + "frame": { "x": 27, "y": 80, "w": 27, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 27, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0028.png", + "frame": { "x": 81, "y": 82, "w": 27, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 27, "h": 39 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0029.png", + "frame": { "x": 27, "y": 80, "w": 27, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 27, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0030.png", + "frame": { "x": 85, "y": 41, "w": 27, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 27, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0031.png", + "frame": { "x": 58, "y": 40, "w": 27, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 27, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 42, "w": 27, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 27, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0033.png", + "frame": { "x": 54, "y": 82, "w": 27, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 27, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0034.png", + "frame": { "x": 0, "y": 83, "w": 27, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 27, "h": 39 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0035.png", + "frame": { "x": 54, "y": 82, "w": 27, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 27, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0036.png", + "frame": { "x": 87, "y": 0, "w": 28, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 28, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0038.png", + "frame": { "x": 29, "y": 0, "w": 29, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 29, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0039.png", + "frame": { "x": 58, "y": 0, "w": 29, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 29, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0040.png", + "frame": { "x": 29, "y": 41, "w": 29, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 29, "h": 39 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0041.png", + "frame": { "x": 58, "y": 0, "w": 29, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 29, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0042.png", + "frame": { "x": 29, "y": 0, "w": 29, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 29, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0044.png", + "frame": { "x": 29, "y": 0, "w": 29, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 29, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0045.png", + "frame": { "x": 58, "y": 0, "w": 29, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 29, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0046.png", + "frame": { "x": 29, "y": 41, "w": 29, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 29, "h": 39 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0047.png", + "frame": { "x": 58, "y": 0, "w": 29, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 29, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0048.png", + "frame": { "x": 29, "y": 0, "w": 29, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 29, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0050.png", + "frame": { "x": 87, "y": 0, "w": 28, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 28, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0051.png", + "frame": { "x": 54, "y": 82, "w": 27, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 27, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0052.png", + "frame": { "x": 81, "y": 82, "w": 27, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 27, "h": 39 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0053.png", + "frame": { "x": 27, "y": 80, "w": 27, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 27, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0054.png", + "frame": { "x": 85, "y": 41, "w": 27, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 27, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0055.png", + "frame": { "x": 58, "y": 40, "w": 27, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 27, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "674.png", + "format": "I8", + "size": { "w": 115, "h": 122 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/shiny/674.png b/public/images/pokemon/back/shiny/674.png index 96734feb3f7..4617b03c6eb 100644 Binary files a/public/images/pokemon/back/shiny/674.png and b/public/images/pokemon/back/shiny/674.png differ diff --git a/public/images/pokemon/back/shiny/694.json b/public/images/pokemon/back/shiny/694.json index ae617f4876f..76c88067e7e 100644 --- a/public/images/pokemon/back/shiny/694.json +++ b/public/images/pokemon/back/shiny/694.json @@ -1,41 +1,767 @@ -{ - "textures": [ - { - "image": "694.png", - "format": "RGBA8888", - "size": { - "w": 44, - "h": 44 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 44, - "h": 37 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 37 - }, - "frame": { - "x": 0, - "y": 0, - "w": 44, - "h": 37 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:136b476d55eb513322e6355dbd903c97:982afbb162c554e6193d6fe06bccb61d:b0990f9650cfe63b836cbed33f0b44d8$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 102, "y": 163, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 44, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 57, "y": 129, "w": 45, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 45, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 162, "y": 127, "w": 47, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 47, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 114, "y": 126, "w": 48, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 48, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 283, "y": 90, "w": 49, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 49, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 227, "y": 126, "w": 49, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 49, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 276, "y": 127, "w": 47, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 132, "w": 45, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 45, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 132, "y": 201, "w": 43, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 43, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 234, "y": 201, "w": 42, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 42, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 206, "w": 42, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 42, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 44, "y": 203, "w": 43, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 43, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 276, "y": 201, "w": 43, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 43, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 89, "y": 200, "w": 43, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 43, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 146, "y": 164, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 44, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 102, "y": 163, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 44, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 57, "y": 129, "w": 45, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 45, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 162, "y": 127, "w": 47, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 47, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 114, "y": 126, "w": 48, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 48, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 283, "y": 90, "w": 49, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 49, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 227, "y": 126, "w": 49, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 49, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 276, "y": 127, "w": 47, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 0, "y": 132, "w": 45, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 45, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 132, "y": 201, "w": 43, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 43, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 234, "y": 201, "w": 42, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 42, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 206, "w": 42, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 42, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 44, "y": 203, "w": 43, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 43, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 276, "y": 201, "w": 43, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 43, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 89, "y": 200, "w": 43, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 43, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 146, "y": 164, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 44, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 102, "y": 163, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 44, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 57, "y": 129, "w": 45, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 45, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 162, "y": 127, "w": 47, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 47, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 114, "y": 126, "w": 48, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 48, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 283, "y": 90, "w": 49, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 49, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 227, "y": 126, "w": 49, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 49, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 276, "y": 127, "w": 47, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 0, "y": 132, "w": 45, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 45, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 132, "y": 201, "w": 43, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 43, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 234, "y": 201, "w": 42, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 42, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 206, "w": 42, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 42, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 44, "y": 203, "w": 43, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 43, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 276, "y": 201, "w": 43, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 43, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 89, "y": 200, "w": 43, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 43, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 146, "y": 164, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 44, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 102, "y": 163, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 44, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 57, "y": 129, "w": 45, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 45, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 162, "y": 127, "w": 47, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 47, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 114, "y": 126, "w": 48, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 48, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 283, "y": 90, "w": 49, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 49, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 227, "y": 126, "w": 49, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 49, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 276, "y": 127, "w": 47, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 0, "y": 132, "w": 45, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 45, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 132, "y": 201, "w": 43, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 43, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 234, "y": 201, "w": 42, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 42, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 206, "w": 42, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 42, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 44, "y": 203, "w": 43, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 43, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 276, "y": 201, "w": 43, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 43, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 89, "y": 200, "w": 43, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 43, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 146, "y": 164, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 44, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 102, "y": 163, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 44, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 253, "y": 164, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 44, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 297, "y": 164, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 44, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 45, "y": 166, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 44, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 209, "y": 162, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 44, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 172, "y": 90, "w": 55, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 55, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 57, "y": 90, "w": 57, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 57, "h": 39 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 117, "y": 0, "w": 58, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 47 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 59, "y": 0, "w": 58, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 58, "h": 48 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 0, "y": 0, "w": 59, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 59, "h": 48 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 232, "y": 0, "w": 58, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 58, "h": 45 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 232, "y": 45, "w": 57, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 57, "h": 45 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 175, "y": 0, "w": 57, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 57, "h": 47 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 289, "y": 45, "w": 57, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 57, "h": 45 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 117, "y": 47, "w": 57, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 43 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 290, "y": 0, "w": 58, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 58, "h": 45 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 174, "y": 47, "w": 57, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 57, "h": 43 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 58, "y": 48, "w": 57, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 57, "h": 42 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 0, "y": 90, "w": 57, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 57, "h": 42 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 0, "y": 48, "w": 58, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 58, "h": 42 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 114, "y": 90, "w": 58, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 12, "w": 58, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 227, "y": 90, "w": 56, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 56, "h": 36 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 0, "y": 169, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 44, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 190, "y": 199, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 44, "h": 37 }, + "sourceSize": { "w": 61, "h": 48 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "694.png", + "format": "I8", + "size": { "w": 348, "h": 242 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/shiny/694.png b/public/images/pokemon/back/shiny/694.png index 1c6444e450a..b4d451678ef 100644 Binary files a/public/images/pokemon/back/shiny/694.png and b/public/images/pokemon/back/shiny/694.png differ diff --git a/public/images/pokemon/back/shiny/698.json b/public/images/pokemon/back/shiny/698.json index fba1db6d11d..0da697e1f4e 100644 --- a/public/images/pokemon/back/shiny/698.json +++ b/public/images/pokemon/back/shiny/698.json @@ -1,41 +1,1415 @@ -{ - "textures": [ - { - "image": "698.png", - "format": "RGBA8888", - "size": { - "w": 55, - "h": 55 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 37, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 55 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 55 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:2d3467f0abbe6bec820c8196bd88983a:3a8331cf2af48202898ef3b9681f4110:198087d69fed44d4a642fa3ba5c077d6$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 107, "w": 35, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 35, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0004.png", + "frame": { "x": 0, "y": 107, "w": 35, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 35, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0005.png", + "frame": { "x": 139, "y": 111, "w": 33, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 33, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0006.png", + "frame": { "x": 139, "y": 111, "w": 33, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 33, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0007.png", + "frame": { "x": 68, "y": 112, "w": 31, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 31, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0008.png", + "frame": { "x": 68, "y": 112, "w": 31, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 31, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0009.png", + "frame": { "x": 99, "y": 113, "w": 31, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 31, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0010.png", + "frame": { "x": 99, "y": 113, "w": 31, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 31, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0011.png", + "frame": { "x": 68, "y": 112, "w": 31, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 31, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0012.png", + "frame": { "x": 68, "y": 112, "w": 31, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 31, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0013.png", + "frame": { "x": 139, "y": 111, "w": 33, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 33, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0014.png", + "frame": { "x": 139, "y": 111, "w": 33, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 33, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0015.png", + "frame": { "x": 0, "y": 107, "w": 35, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 35, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 107, "w": 35, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 35, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0019.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0020.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0021.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0022.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0023.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0024.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0025.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0026.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0027.png", + "frame": { "x": 89, "y": 0, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 41, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0028.png", + "frame": { "x": 89, "y": 0, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 41, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0029.png", + "frame": { "x": 45, "y": 0, "w": 44, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 44, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0030.png", + "frame": { "x": 45, "y": 0, "w": 44, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 44, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0031.png", + "frame": { "x": 0, "y": 0, "w": 45, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 45, "h": 52 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 0, "w": 45, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 45, "h": 52 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0033.png", + "frame": { "x": 45, "y": 0, "w": 44, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 44, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0034.png", + "frame": { "x": 45, "y": 0, "w": 44, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 44, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0035.png", + "frame": { "x": 89, "y": 0, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 41, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0036.png", + "frame": { "x": 89, "y": 0, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 41, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0037.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0038.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0039.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0040.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0042.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 107, "w": 35, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 35, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0044.png", + "frame": { "x": 0, "y": 107, "w": 35, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 35, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0045.png", + "frame": { "x": 139, "y": 111, "w": 33, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 33, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0046.png", + "frame": { "x": 139, "y": 111, "w": 33, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 33, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0047.png", + "frame": { "x": 68, "y": 112, "w": 31, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 31, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0048.png", + "frame": { "x": 68, "y": 112, "w": 31, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 31, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0049.png", + "frame": { "x": 99, "y": 113, "w": 31, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 31, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0050.png", + "frame": { "x": 99, "y": 113, "w": 31, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 31, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0051.png", + "frame": { "x": 68, "y": 112, "w": 31, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 31, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0052.png", + "frame": { "x": 68, "y": 112, "w": 31, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 31, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0053.png", + "frame": { "x": 139, "y": 111, "w": 33, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 33, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0054.png", + "frame": { "x": 139, "y": 111, "w": 33, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 33, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 107, "w": 35, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 35, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 107, "w": 35, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 35, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0057.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0058.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0059.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0060.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0063.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0064.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0065.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0066.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0067.png", + "frame": { "x": 89, "y": 0, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 41, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0068.png", + "frame": { "x": 89, "y": 0, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 41, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0069.png", + "frame": { "x": 45, "y": 0, "w": 44, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 44, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0070.png", + "frame": { "x": 45, "y": 0, "w": 44, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 44, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0071.png", + "frame": { "x": 0, "y": 0, "w": 45, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 45, "h": 52 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0072.png", + "frame": { "x": 0, "y": 0, "w": 45, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 45, "h": 52 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0073.png", + "frame": { "x": 45, "y": 0, "w": 44, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 44, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0074.png", + "frame": { "x": 45, "y": 0, "w": 44, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 44, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0075.png", + "frame": { "x": 89, "y": 0, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 41, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0076.png", + "frame": { "x": 89, "y": 0, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 41, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0077.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0078.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0079.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0080.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0081.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0082.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0083.png", + "frame": { "x": 0, "y": 107, "w": 35, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 35, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0084.png", + "frame": { "x": 0, "y": 107, "w": 35, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 35, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0085.png", + "frame": { "x": 139, "y": 111, "w": 33, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 33, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0086.png", + "frame": { "x": 139, "y": 111, "w": 33, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 33, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0087.png", + "frame": { "x": 68, "y": 112, "w": 31, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 31, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0088.png", + "frame": { "x": 68, "y": 112, "w": 31, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 31, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0089.png", + "frame": { "x": 99, "y": 113, "w": 31, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 31, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0090.png", + "frame": { "x": 99, "y": 113, "w": 31, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 31, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0091.png", + "frame": { "x": 68, "y": 112, "w": 31, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 31, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0092.png", + "frame": { "x": 68, "y": 112, "w": 31, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 31, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0093.png", + "frame": { "x": 139, "y": 111, "w": 33, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 33, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0094.png", + "frame": { "x": 139, "y": 111, "w": 33, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 33, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0095.png", + "frame": { "x": 0, "y": 107, "w": 35, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 35, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0096.png", + "frame": { "x": 0, "y": 107, "w": 35, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 35, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0097.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0098.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0099.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0100.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0101.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0102.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0103.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0104.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0105.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0106.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0107.png", + "frame": { "x": 89, "y": 0, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 41, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0108.png", + "frame": { "x": 89, "y": 0, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 41, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0109.png", + "frame": { "x": 45, "y": 0, "w": 44, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 44, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0110.png", + "frame": { "x": 45, "y": 0, "w": 44, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 44, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0111.png", + "frame": { "x": 0, "y": 0, "w": 45, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 45, "h": 52 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0112.png", + "frame": { "x": 0, "y": 0, "w": 45, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 45, "h": 52 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0113.png", + "frame": { "x": 45, "y": 0, "w": 44, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 44, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0114.png", + "frame": { "x": 45, "y": 0, "w": 44, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 44, "h": 53 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0115.png", + "frame": { "x": 89, "y": 0, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 41, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0116.png", + "frame": { "x": 89, "y": 0, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 41, "h": 54 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0117.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0118.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0119.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0120.png", + "frame": { "x": 130, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 39, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0121.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0122.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0123.png", + "frame": { "x": 139, "y": 55, "w": 35, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 35, "h": 56 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0124.png", + "frame": { "x": 139, "y": 55, "w": 35, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 35, "h": 56 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0125.png", + "frame": { "x": 35, "y": 111, "w": 33, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 33, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0126.png", + "frame": { "x": 35, "y": 111, "w": 33, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 33, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0127.png", + "frame": { "x": 37, "y": 53, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0128.png", + "frame": { "x": 37, "y": 53, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0129.png", + "frame": { "x": 71, "y": 54, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0130.png", + "frame": { "x": 71, "y": 54, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0131.png", + "frame": { "x": 105, "y": 55, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0132.png", + "frame": { "x": 105, "y": 55, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0133.png", + "frame": { "x": 37, "y": 53, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0134.png", + "frame": { "x": 37, "y": 53, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0135.png", + "frame": { "x": 71, "y": 54, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0136.png", + "frame": { "x": 71, "y": 54, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0137.png", + "frame": { "x": 105, "y": 55, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0138.png", + "frame": { "x": 105, "y": 55, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0139.png", + "frame": { "x": 37, "y": 53, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0140.png", + "frame": { "x": 37, "y": 53, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0141.png", + "frame": { "x": 71, "y": 54, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0142.png", + "frame": { "x": 71, "y": 54, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0143.png", + "frame": { "x": 105, "y": 55, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0144.png", + "frame": { "x": 105, "y": 55, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0145.png", + "frame": { "x": 37, "y": 53, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0146.png", + "frame": { "x": 37, "y": 53, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0147.png", + "frame": { "x": 71, "y": 54, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0148.png", + "frame": { "x": 71, "y": 54, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0149.png", + "frame": { "x": 105, "y": 55, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0150.png", + "frame": { "x": 105, "y": 55, "w": 34, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 34, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0151.png", + "frame": { "x": 35, "y": 111, "w": 33, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 33, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0152.png", + "frame": { "x": 35, "y": 111, "w": 33, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 33, "h": 58 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0153.png", + "frame": { "x": 139, "y": 55, "w": 35, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 35, "h": 56 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0154.png", + "frame": { "x": 139, "y": 55, "w": 35, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 35, "h": 56 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0155.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + }, + { + "filename": "0156.png", + "frame": { "x": 0, "y": 52, "w": 37, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 55 }, + "sourceSize": { "w": 45, "h": 58 }, + "duration": 50 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "698.png", + "format": "I8", + "size": { "w": 174, "h": 169 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/shiny/698.png b/public/images/pokemon/back/shiny/698.png index 3daad1fd4ab..bc96912bd46 100644 Binary files a/public/images/pokemon/back/shiny/698.png and b/public/images/pokemon/back/shiny/698.png differ diff --git a/public/images/pokemon/back/shiny/703.json b/public/images/pokemon/back/shiny/703.json index ee6074b20ca..d6752e6f7ff 100644 --- a/public/images/pokemon/back/shiny/703.json +++ b/public/images/pokemon/back/shiny/703.json @@ -1,41 +1,569 @@ -{ - "textures": [ - { - "image": "703.png", - "format": "RGBA8888", - "size": { - "w": 38, - "h": 38 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 37, - "h": 38 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 38 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 38 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:d9d865fef42b5a28e45d32fccd741f98:96057dceb7fdf650f54901c6be0f386f:721af8c322ff60159262e9b3017c784d$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 36, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 73, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 73, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 0, "y": 40, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 36, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 36, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 40, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 72, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0013.png", + "frame": { "x": 36, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0014.png", + "frame": { "x": 73, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0015.png", + "frame": { "x": 73, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 40, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0017.png", + "frame": { "x": 36, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0019.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0020.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0021.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0022.png", + "frame": { "x": 36, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0023.png", + "frame": { "x": 0, "y": 40, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0024.png", + "frame": { "x": 72, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0025.png", + "frame": { "x": 36, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0026.png", + "frame": { "x": 73, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0027.png", + "frame": { "x": 73, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0028.png", + "frame": { "x": 0, "y": 40, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0029.png", + "frame": { "x": 36, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0030.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0031.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0033.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0034.png", + "frame": { "x": 36, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0035.png", + "frame": { "x": 0, "y": 40, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0036.png", + "frame": { "x": 72, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0037.png", + "frame": { "x": 36, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0038.png", + "frame": { "x": 73, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0039.png", + "frame": { "x": 73, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0040.png", + "frame": { "x": 0, "y": 40, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0041.png", + "frame": { "x": 36, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0042.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0044.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0045.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0046.png", + "frame": { "x": 36, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0047.png", + "frame": { "x": 0, "y": 40, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0048.png", + "frame": { "x": 72, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0049.png", + "frame": { "x": 36, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0050.png", + "frame": { "x": 36, "y": 38, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0051.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0052.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0053.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0057.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0058.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0059.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0060.png", + "frame": { "x": 36, "y": 38, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0061.png", + "frame": { "x": 73, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0062.png", + "frame": { "x": 72, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "703.png", + "format": "I8", + "size": { "w": 110, "h": 117 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/shiny/703.png b/public/images/pokemon/back/shiny/703.png index ea22e4ad5d4..635d930e674 100644 Binary files a/public/images/pokemon/back/shiny/703.png and b/public/images/pokemon/back/shiny/703.png differ diff --git a/public/images/pokemon/back/shiny/707.json b/public/images/pokemon/back/shiny/707.json index 8151fd60f08..b92e1983efc 100644 --- a/public/images/pokemon/back/shiny/707.json +++ b/public/images/pokemon/back/shiny/707.json @@ -1,41 +1,1559 @@ -{ - "textures": [ - { - "image": "707.png", - "format": "RGBA8888", - "size": { - "w": 77, - "h": 77 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 77 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 77 - }, - "frame": { - "x": 0, - "y": 0, - "w": 43, - "h": 77 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:c2d2cb3b868498a2b93c8233ad35af4a:09ee133b9c655c6135da1abf1c9b6ddf:8e96b9056ea81e44ced99c97f472a528$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 358, "w": 43, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 18, "w": 43, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 190, "y": 373, "w": 42, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 17, "w": 42, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 391, "y": 440, "w": 41, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 33, "y": 16, "w": 41, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 443, "y": 377, "w": 42, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 16, "w": 42, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 715, "y": 359, "w": 44, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 15, "w": 44, "h": 75 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 45, "y": 363, "w": 44, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 38, "y": 14, "w": 44, "h": 75 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 520, "y": 352, "w": 45, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 39, "y": 13, "w": 45, "h": 74 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 306, "y": 291, "w": 48, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 41, "y": 14, "w": 48, "h": 72 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 527, "y": 213, "w": 51, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 43, "y": 13, "w": 51, "h": 72 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 372, "y": 139, "w": 56, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 44, "y": 12, "w": 56, "h": 71 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 404, "y": 69, "w": 59, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 43, "y": 13, "w": 59, "h": 70 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 658, "y": 73, "w": 57, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 41, "y": 14, "w": 57, "h": 71 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 570, "y": 141, "w": 55, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 39, "y": 13, "w": 55, "h": 72 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 161, "y": 145, "w": 53, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 38, "y": 14, "w": 53, "h": 72 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 2, "y": 208, "w": 51, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 15, "w": 51, "h": 73 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 475, "y": 229, "w": 49, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 16, "w": 49, "h": 73 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 623, "y": 300, "w": 46, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 33, "y": 16, "w": 46, "h": 74 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 475, "y": 302, "w": 45, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 31, "y": 17, "w": 45, "h": 75 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 232, "y": 414, "w": 42, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 18, "w": 42, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 607, "y": 374, "w": 42, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 17, "w": 42, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 147, "y": 351, "w": 43, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 16, "w": 43, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 206, "y": 295, "w": 44, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 16, "w": 44, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 326, "y": 213, "w": 46, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 46, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 479, "y": 151, "w": 48, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 14, "w": 48, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 112, "y": 145, "w": 49, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 13, "w": 49, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 321, "y": 135, "w": 51, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 13, "w": 51, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 269, "y": 134, "w": 52, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 12, "w": 52, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 214, "y": 69, "w": 55, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 11, "w": 55, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 463, "y": 69, "w": 55, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 12, "w": 55, "h": 74 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 159, "y": 69, "w": 55, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 55, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 715, "y": 73, "w": 53, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 13, "w": 53, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 518, "y": 74, "w": 52, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 14, "w": 52, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 61, "y": 136, "w": 51, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 15, "w": 51, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 625, "y": 144, "w": 49, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 16, "w": 49, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 625, "y": 222, "w": 46, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 16, "w": 46, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 430, "y": 287, "w": 45, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 17, "w": 45, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 2, "y": 358, "w": 43, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 18, "w": 43, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 190, "y": 373, "w": 42, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 17, "w": 42, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 391, "y": 440, "w": 41, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 33, "y": 16, "w": 41, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 443, "y": 377, "w": 42, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 16, "w": 42, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 715, "y": 359, "w": 44, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 15, "w": 44, "h": 75 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 45, "y": 363, "w": 44, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 38, "y": 14, "w": 44, "h": 75 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 520, "y": 352, "w": 45, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 39, "y": 13, "w": 45, "h": 74 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 306, "y": 291, "w": 48, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 41, "y": 14, "w": 48, "h": 72 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 527, "y": 213, "w": 51, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 43, "y": 13, "w": 51, "h": 72 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 372, "y": 139, "w": 56, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 44, "y": 12, "w": 56, "h": 71 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 404, "y": 69, "w": 59, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 43, "y": 13, "w": 59, "h": 70 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 658, "y": 73, "w": 57, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 41, "y": 14, "w": 57, "h": 71 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 570, "y": 141, "w": 55, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 39, "y": 13, "w": 55, "h": 72 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 161, "y": 145, "w": 53, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 38, "y": 14, "w": 53, "h": 72 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 2, "y": 208, "w": 51, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 15, "w": 51, "h": 73 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 475, "y": 229, "w": 49, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 16, "w": 49, "h": 73 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 623, "y": 300, "w": 46, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 33, "y": 16, "w": 46, "h": 74 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 475, "y": 302, "w": 45, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 31, "y": 17, "w": 45, "h": 75 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 232, "y": 414, "w": 42, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 18, "w": 42, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 607, "y": 374, "w": 42, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 17, "w": 42, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 147, "y": 351, "w": 43, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 16, "w": 43, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 206, "y": 295, "w": 44, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 16, "w": 44, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 326, "y": 213, "w": 46, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 46, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 479, "y": 151, "w": 48, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 14, "w": 48, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 112, "y": 145, "w": 49, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 13, "w": 49, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 321, "y": 135, "w": 51, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 13, "w": 51, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 269, "y": 134, "w": 52, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 12, "w": 52, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 214, "y": 69, "w": 55, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 11, "w": 55, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 463, "y": 69, "w": 55, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 12, "w": 55, "h": 74 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 159, "y": 69, "w": 55, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 55, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 715, "y": 73, "w": 53, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 13, "w": 53, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 518, "y": 74, "w": 52, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 14, "w": 52, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 61, "y": 136, "w": 51, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 15, "w": 51, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 625, "y": 144, "w": 49, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 16, "w": 49, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 625, "y": 222, "w": 46, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 16, "w": 46, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 430, "y": 287, "w": 45, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 17, "w": 45, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 2, "y": 358, "w": 43, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 18, "w": 43, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 190, "y": 373, "w": 42, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 17, "w": 42, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 391, "y": 440, "w": 41, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 33, "y": 16, "w": 41, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 443, "y": 377, "w": 42, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 16, "w": 42, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 715, "y": 359, "w": 44, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 15, "w": 44, "h": 75 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 45, "y": 363, "w": 44, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 38, "y": 14, "w": 44, "h": 75 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 520, "y": 352, "w": 45, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 39, "y": 13, "w": 45, "h": 74 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 306, "y": 291, "w": 48, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 41, "y": 14, "w": 48, "h": 72 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 527, "y": 213, "w": 51, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 43, "y": 13, "w": 51, "h": 72 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 372, "y": 139, "w": 56, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 44, "y": 12, "w": 56, "h": 71 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 404, "y": 69, "w": 59, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 43, "y": 13, "w": 59, "h": 70 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 658, "y": 73, "w": 57, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 41, "y": 14, "w": 57, "h": 71 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 570, "y": 141, "w": 55, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 39, "y": 13, "w": 55, "h": 72 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 161, "y": 145, "w": 53, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 38, "y": 14, "w": 53, "h": 72 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 2, "y": 208, "w": 51, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 15, "w": 51, "h": 73 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 475, "y": 229, "w": 49, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 16, "w": 49, "h": 73 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 623, "y": 300, "w": 46, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 33, "y": 16, "w": 46, "h": 74 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 475, "y": 302, "w": 45, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 31, "y": 17, "w": 45, "h": 75 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 232, "y": 414, "w": 42, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 18, "w": 42, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 607, "y": 374, "w": 42, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 17, "w": 42, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 147, "y": 351, "w": 43, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 16, "w": 43, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 206, "y": 295, "w": 44, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 16, "w": 44, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 326, "y": 213, "w": 46, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 46, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 479, "y": 151, "w": 48, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 14, "w": 48, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 112, "y": 145, "w": 49, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 13, "w": 49, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 321, "y": 135, "w": 51, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 13, "w": 51, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 269, "y": 134, "w": 52, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 12, "w": 52, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 214, "y": 69, "w": 55, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 11, "w": 55, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 463, "y": 69, "w": 55, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 12, "w": 55, "h": 74 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 159, "y": 69, "w": 55, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 55, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 715, "y": 73, "w": 53, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 13, "w": 53, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 518, "y": 74, "w": 52, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 14, "w": 52, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 61, "y": 136, "w": 51, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 15, "w": 51, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 625, "y": 144, "w": 49, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 16, "w": 49, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0107.png", + "frame": { "x": 625, "y": 222, "w": 46, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 16, "w": 46, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0108.png", + "frame": { "x": 430, "y": 287, "w": 45, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 17, "w": 45, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0109.png", + "frame": { "x": 2, "y": 358, "w": 43, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 18, "w": 43, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0110.png", + "frame": { "x": 428, "y": 143, "w": 51, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 17, "w": 51, "h": 75 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0111.png", + "frame": { "x": 98, "y": 62, "w": 61, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 14, "w": 61, "h": 74 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0112.png", + "frame": { "x": 530, "y": 2, "w": 70, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 11, "w": 70, "h": 72 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0113.png", + "frame": { "x": 194, "y": 2, "w": 85, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 6, "w": 85, "h": 67 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0114.png", + "frame": { "x": 2, "y": 2, "w": 96, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 96, "h": 63 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0115.png", + "frame": { "x": 98, "y": 2, "w": 96, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 1, "w": 96, "h": 60 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0116.png", + "frame": { "x": 279, "y": 2, "w": 91, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 0, "w": 91, "h": 62 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0117.png", + "frame": { "x": 370, "y": 2, "w": 84, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 0, "w": 84, "h": 64 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0118.png", + "frame": { "x": 454, "y": 2, "w": 76, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 1, "w": 76, "h": 67 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0119.png", + "frame": { "x": 600, "y": 2, "w": 67, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 2, "w": 67, "h": 69 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0120.png", + "frame": { "x": 372, "y": 210, "w": 51, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 4, "w": 51, "h": 72 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0121.png", + "frame": { "x": 172, "y": 450, "w": 41, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 31, "y": 5, "w": 41, "h": 75 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0122.png", + "frame": { "x": 526, "y": 443, "w": 41, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 31, "y": 7, "w": 41, "h": 75 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0123.png", + "frame": { "x": 432, "y": 453, "w": 41, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 31, "y": 10, "w": 41, "h": 74 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0124.png", + "frame": { "x": 43, "y": 438, "w": 41, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 31, "y": 11, "w": 41, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0125.png", + "frame": { "x": 2, "y": 435, "w": 41, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 31, "y": 13, "w": 41, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0126.png", + "frame": { "x": 565, "y": 366, "w": 42, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 14, "w": 42, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0127.png", + "frame": { "x": 131, "y": 429, "w": 41, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 16, "w": 41, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0128.png", + "frame": { "x": 485, "y": 426, "w": 41, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 17, "w": 41, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0129.png", + "frame": { "x": 649, "y": 421, "w": 41, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 18, "w": 41, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0130.png", + "frame": { "x": 2, "y": 358, "w": 43, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 18, "w": 43, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0131.png", + "frame": { "x": 2, "y": 281, "w": 46, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 18, "w": 46, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0132.png", + "frame": { "x": 53, "y": 214, "w": 48, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 18, "w": 48, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0133.png", + "frame": { "x": 354, "y": 348, "w": 46, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 19, "w": 46, "h": 73 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0134.png", + "frame": { "x": 345, "y": 421, "w": 46, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 32, "y": 20, "w": 46, "h": 69 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0135.png", + "frame": { "x": 567, "y": 451, "w": 45, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 20, "w": 45, "h": 68 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0136.png", + "frame": { "x": 423, "y": 218, "w": 52, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 20, "w": 52, "h": 69 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0137.png", + "frame": { "x": 2, "y": 137, "w": 56, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 19, "w": 56, "h": 71 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0138.png", + "frame": { "x": 2, "y": 65, "w": 59, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 33, "y": 19, "w": 59, "h": 72 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0139.png", + "frame": { "x": 600, "y": 71, "w": 58, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 31, "y": 19, "w": 58, "h": 70 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0140.png", + "frame": { "x": 577, "y": 291, "w": 46, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 18, "w": 46, "h": 75 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0141.png", + "frame": { "x": 303, "y": 363, "w": 42, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 18, "w": 42, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0142.png", + "frame": { "x": 400, "y": 364, "w": 43, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 18, "w": 43, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0143.png", + "frame": { "x": 524, "y": 285, "w": 53, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 19, "w": 53, "h": 67 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0144.png", + "frame": { "x": 266, "y": 213, "w": 60, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 19, "w": 60, "h": 62 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0145.png", + "frame": { "x": 674, "y": 219, "w": 58, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 58, "h": 62 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0146.png", + "frame": { "x": 150, "y": 288, "w": 56, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 18, "w": 56, "h": 63 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0147.png", + "frame": { "x": 250, "y": 351, "w": 53, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 18, "w": 53, "h": 63 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0148.png", + "frame": { "x": 674, "y": 149, "w": 54, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 18, "w": 54, "h": 70 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0149.png", + "frame": { "x": 214, "y": 145, "w": 52, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 19, "w": 52, "h": 73 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0150.png", + "frame": { "x": 48, "y": 290, "w": 48, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 19, "w": 48, "h": 73 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0151.png", + "frame": { "x": 161, "y": 217, "w": 51, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 19, "w": 51, "h": 71 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0152.png", + "frame": { "x": 343, "y": 66, "w": 61, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 20, "w": 61, "h": 69 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0153.png", + "frame": { "x": 279, "y": 64, "w": 64, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 20, "w": 64, "h": 70 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0154.png", + "frame": { "x": 667, "y": 2, "w": 64, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 34, "y": 19, "w": 64, "h": 71 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0155.png", + "frame": { "x": 101, "y": 223, "w": 49, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 31, "y": 18, "w": 49, "h": 73 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0156.png", + "frame": { "x": 89, "y": 363, "w": 42, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 18, "w": 42, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0157.png", + "frame": { "x": 671, "y": 281, "w": 53, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 19, "w": 53, "h": 67 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0158.png", + "frame": { "x": 274, "y": 441, "w": 62, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 62, "h": 50 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0159.png", + "frame": { "x": 275, "y": 491, "w": 62, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 22, "w": 62, "h": 43 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0160.png", + "frame": { "x": 674, "y": 505, "w": 59, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 23, "w": 59, "h": 42 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0161.png", + "frame": { "x": 612, "y": 498, "w": 62, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 22, "w": 62, "h": 43 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0162.png", + "frame": { "x": 213, "y": 491, "w": 62, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 22, "w": 62, "h": 49 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0163.png", + "frame": { "x": 372, "y": 287, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 21, "w": 58, "h": 61 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0164.png", + "frame": { "x": 96, "y": 296, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 20, "w": 51, "h": 67 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0165.png", + "frame": { "x": 84, "y": 441, "w": 45, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 20, "w": 45, "h": 69 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0166.png", + "frame": { "x": 728, "y": 149, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 19, "w": 42, "h": 70 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0167.png", + "frame": { "x": 690, "y": 434, "w": 44, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 19, "w": 44, "h": 71 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0168.png", + "frame": { "x": 669, "y": 348, "w": 46, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 19, "w": 46, "h": 73 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0169.png", + "frame": { "x": 259, "y": 275, "w": 47, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 18, "w": 47, "h": 76 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0170.png", + "frame": { "x": 212, "y": 218, "w": 47, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 18, "w": 47, "h": 77 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0171.png", + "frame": { "x": 578, "y": 213, "w": 47, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 18, "w": 47, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + }, + { + "filename": "0172.png", + "frame": { "x": 724, "y": 281, "w": 45, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 18, "w": 45, "h": 78 }, + "sourceSize": { "w": 108, "h": 96 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "707.png", + "format": "I8", + "size": { "w": 772, "h": 549 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/shiny/707.png b/public/images/pokemon/back/shiny/707.png index da84624a35c..8d7e5922091 100644 Binary files a/public/images/pokemon/back/shiny/707.png and b/public/images/pokemon/back/shiny/707.png differ diff --git a/public/images/pokemon/back/shiny/708.json b/public/images/pokemon/back/shiny/708.json index 1433d1f3954..22aa1885edb 100644 --- a/public/images/pokemon/back/shiny/708.json +++ b/public/images/pokemon/back/shiny/708.json @@ -1,41 +1,1091 @@ -{ - "textures": [ - { - "image": "708.png", - "format": "RGBA8888", - "size": { - "w": 43, - "h": 43 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 43, - "h": 40 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:ab46d1202eb640c4a791f5c8d9bd36ec:04314281a1a95837e11d92d38c448507:796c82c5076b122f2663381836c65843$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 132, "y": 83, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 132, "y": 42, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 44, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 176, "y": 83, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 7, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 218, "y": 206, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 9, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 262, "y": 206, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 9, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 44, "y": 207, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 8, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 131, "y": 247, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 6, "w": 42, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 208, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 4, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 0, "y": 85, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 1, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 130, "y": 124, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 0, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 86, "y": 84, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 0, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 174, "y": 124, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 0, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 218, "y": 124, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 2, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 88, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 132, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 6, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 43, "w": 42, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 7, "w": 42, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 43, "y": 43, "w": 42, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 8, "w": 42, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 132, "y": 206, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 9, "w": 42, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 0, "y": 0, "w": 43, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 43, "h": 42 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 44, "y": 0, "w": 43, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 43, "h": 42 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 264, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 88, "y": 42, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 176, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 220, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 44, "y": 125, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 132, "y": 83, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 132, "y": 42, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 44, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 176, "y": 83, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 7, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 218, "y": 206, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 9, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 262, "y": 206, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 9, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 44, "y": 207, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 8, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 131, "y": 247, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 6, "w": 42, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 0, "y": 208, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 4, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 0, "y": 85, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 1, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 130, "y": 124, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 0, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 86, "y": 84, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 0, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 174, "y": 124, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 0, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 218, "y": 124, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 2, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 88, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 132, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 6, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 43, "w": 42, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 7, "w": 42, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 43, "y": 43, "w": 42, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 8, "w": 42, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 132, "y": 206, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 9, "w": 42, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 0, "y": 0, "w": 43, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 43, "h": 42 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 44, "y": 0, "w": 43, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 43, "h": 42 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 264, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 88, "y": 42, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 176, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 220, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 44, "y": 125, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 132, "y": 83, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 132, "y": 42, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 44, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 176, "y": 83, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 7, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 218, "y": 206, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 9, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 262, "y": 206, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 9, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 44, "y": 207, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 8, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 131, "y": 247, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 6, "w": 42, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 0, "y": 208, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 4, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 0, "y": 85, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 1, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 130, "y": 124, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 0, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 86, "y": 84, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 0, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 174, "y": 124, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 0, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 218, "y": 124, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 2, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 88, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 132, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 6, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 0, "y": 43, "w": 42, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 7, "w": 42, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 43, "y": 43, "w": 42, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 8, "w": 42, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 132, "y": 206, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 9, "w": 42, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 0, "y": 0, "w": 43, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 43, "h": 42 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 44, "y": 0, "w": 43, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 43, "h": 42 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 264, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 88, "y": 42, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 176, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 220, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 44, "y": 125, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 132, "y": 83, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 132, "y": 42, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 44, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 176, "y": 83, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 7, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 218, "y": 206, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 9, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 262, "y": 206, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 9, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 44, "y": 207, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 8, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 131, "y": 247, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 6, "w": 42, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 0, "y": 208, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 4, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 0, "y": 85, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 1, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 130, "y": 124, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 0, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 86, "y": 84, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 0, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 174, "y": 124, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 0, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 218, "y": 124, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 2, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 88, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 132, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 6, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 0, "y": 43, "w": 42, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 7, "w": 42, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 43, "y": 43, "w": 42, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 8, "w": 42, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 132, "y": 206, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 9, "w": 42, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 0, "y": 0, "w": 43, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 43, "h": 42 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 44, "y": 0, "w": 43, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 43, "h": 42 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 264, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 88, "y": 42, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 176, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 220, "y": 0, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 43, "h": 41 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 44, "y": 125, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 132, "y": 83, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 0, "y": 126, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 6, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 88, "y": 165, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 8, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 175, "y": 206, "w": 42, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 10, "w": 42, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 88, "y": 247, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 13, "w": 42, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 132, "y": 165, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 14, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0107.png", + "frame": { "x": 176, "y": 165, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 15, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0108.png", + "frame": { "x": 220, "y": 165, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 17, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0109.png", + "frame": { "x": 264, "y": 165, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 19, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0110.png", + "frame": { "x": 262, "y": 124, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 21, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0111.png", + "frame": { "x": 44, "y": 166, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 23, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0112.png", + "frame": { "x": 0, "y": 167, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 21, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0113.png", + "frame": { "x": 88, "y": 206, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 20, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0114.png", + "frame": { "x": 220, "y": 83, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0115.png", + "frame": { "x": 44, "y": 247, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 16, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0116.png", + "frame": { "x": 218, "y": 246, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 15, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0117.png", + "frame": { "x": 262, "y": 246, "w": 43, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 13, "w": 43, "h": 39 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0118.png", + "frame": { "x": 177, "y": 42, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 10, "w": 44, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0119.png", + "frame": { "x": 264, "y": 83, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 8, "w": 43, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + }, + { + "filename": "0120.png", + "frame": { "x": 222, "y": 42, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 6, "w": 44, "h": 40 }, + "sourceSize": { "w": 67, "h": 63 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "708.png", + "format": "I8", + "size": { "w": 307, "h": 286 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/shiny/708.png b/public/images/pokemon/back/shiny/708.png index 51462cccc15..8a9ff2cb9ee 100644 Binary files a/public/images/pokemon/back/shiny/708.png and b/public/images/pokemon/back/shiny/708.png differ diff --git a/public/images/pokemon/back/shiny/714.json b/public/images/pokemon/back/shiny/714.json index 135bc02dbd5..abcb8902edd 100644 --- a/public/images/pokemon/back/shiny/714.json +++ b/public/images/pokemon/back/shiny/714.json @@ -1,41 +1,263 @@ -{ - "textures": [ - { - "image": "714.png", - "format": "RGBA8888", - "size": { - "w": 63, - "h": 63 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 63, - "h": 57 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 63, - "h": 57 - }, - "frame": { - "x": 0, - "y": 0, - "w": 63, - "h": 57 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:11292bc220f23110a419628bee722abd:b42c1c416a6792bd1666ba41005a2f4d:1a07d46e710b0568ec824f54fbc4fe6a$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 1, "y": 61, "w": 63, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 63, "h": 57 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0002.png", + "frame": { "x": 66, "y": 61, "w": 63, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 63, "h": 57 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0003.png", + "frame": { "x": 198, "y": 1, "w": 64, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 8, "w": 64, "h": 57 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0004.png", + "frame": { "x": 124, "y": 120, "w": 34, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 34, "h": 65 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0005.png", + "frame": { "x": 1, "y": 178, "w": 34, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 3, "w": 34, "h": 60 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0006.png", + "frame": { "x": 264, "y": 61, "w": 47, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 1, "w": 47, "h": 57 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0007.png", + "frame": { "x": 196, "y": 119, "w": 47, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 47, "h": 57 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0008.png", + "frame": { "x": 1, "y": 61, "w": 63, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 63, "h": 57 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0009.png", + "frame": { "x": 131, "y": 61, "w": 63, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 57 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0010.png", + "frame": { "x": 198, "y": 60, "w": 64, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 64, "h": 57 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0011.png", + "frame": { "x": 160, "y": 120, "w": 34, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 3, "w": 34, "h": 65 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0012.png", + "frame": { "x": 196, "y": 178, "w": 34, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 3, "w": 34, "h": 60 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0013.png", + "frame": { "x": 1, "y": 120, "w": 47, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 47, "h": 56 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0014.png", + "frame": { "x": 196, "y": 119, "w": 47, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 47, "h": 57 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0015.png", + "frame": { "x": 1, "y": 61, "w": 63, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 63, "h": 57 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0016.png", + "frame": { "x": 66, "y": 61, "w": 63, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 63, "h": 57 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0017.png", + "frame": { "x": 1, "y": 1, "w": 64, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 7, "w": 64, "h": 58 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0018.png", + "frame": { "x": 50, "y": 120, "w": 35, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 2, "w": 35, "h": 66 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0019.png", + "frame": { "x": 245, "y": 120, "w": 35, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 2, "w": 35, "h": 61 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0020.png", + "frame": { "x": 264, "y": 1, "w": 47, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 0, "w": 47, "h": 58 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0021.png", + "frame": { "x": 196, "y": 119, "w": 47, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 47, "h": 57 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0022.png", + "frame": { "x": 1, "y": 61, "w": 63, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 63, "h": 57 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0023.png", + "frame": { "x": 133, "y": 1, "w": 63, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 63, "h": 58 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0024.png", + "frame": { "x": 67, "y": 1, "w": 64, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 64, "h": 58 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0025.png", + "frame": { "x": 87, "y": 120, "w": 35, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 35, "h": 66 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0026.png", + "frame": { "x": 282, "y": 120, "w": 34, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 2, "w": 34, "h": 61 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0027.png", + "frame": { "x": 1, "y": 120, "w": 47, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 47, "h": 56 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + }, + { + "filename": "0028.png", + "frame": { "x": 196, "y": 119, "w": 47, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 47, "h": 57 }, + "sourceSize": { "w": 68, "h": 68 }, + "duration": 50 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "714.png", + "format": "I8", + "size": { "w": 317, "h": 239 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/shiny/714.png b/public/images/pokemon/back/shiny/714.png index 65433cec665..e1e5d5dbec7 100644 Binary files a/public/images/pokemon/back/shiny/714.png and b/public/images/pokemon/back/shiny/714.png differ diff --git a/public/images/pokemon/back/shiny/718-10.json b/public/images/pokemon/back/shiny/718-10.json index 032783b5555..75053d61900 100644 --- a/public/images/pokemon/back/shiny/718-10.json +++ b/public/images/pokemon/back/shiny/718-10.json @@ -1,41 +1,686 @@ -{ - "textures": [ - { - "image": "718-10.png", - "format": "RGBA8888", - "size": { - "w": 65, - "h": 65 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 59, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 59, - "h": 65 - }, - "frame": { - "x": 0, - "y": 0, - "w": 59, - "h": 65 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:c99dd53bf67561425f9faac1002806d0:277725239a09766c1d58b4a0f8c45775:82195cf2a6db620c5643b8162d6e8c5c$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 120, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 179, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 0, "w": 60, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 60, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 293, "y": 128, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 60, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 131, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 60, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 120, "y": 0, "w": 61, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 61, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 181, "y": 0, "w": 61, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 61, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 242, "y": 0, "w": 61, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 61, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 303, "y": 0, "w": 61, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 61, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 232, "y": 190, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 60, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 292, "y": 191, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 60, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 60, "y": 0, "w": 60, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 60, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 238, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 297, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 120, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 179, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 0, "w": 60, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 60, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 293, "y": 128, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 60, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 0, "y": 131, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 60, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 120, "y": 0, "w": 61, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 61, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 181, "y": 0, "w": 61, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 61, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 242, "y": 0, "w": 61, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 61, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 303, "y": 0, "w": 61, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 61, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 232, "y": 190, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 60, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 292, "y": 191, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 60, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 60, "y": 0, "w": 60, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 60, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 238, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 297, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 120, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 179, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 0, "y": 0, "w": 60, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 60, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 293, "y": 128, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 60, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 0, "y": 131, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 60, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 120, "y": 0, "w": 61, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 61, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 181, "y": 0, "w": 61, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 61, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 242, "y": 0, "w": 61, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 61, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 303, "y": 0, "w": 61, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 61, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 232, "y": 190, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 60, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 292, "y": 191, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 60, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 60, "y": 0, "w": 60, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 60, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 238, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 297, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 120, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 179, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 0, "y": 0, "w": 60, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 60, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 293, "y": 128, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 60, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 0, "y": 131, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 60, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 120, "y": 0, "w": 61, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 61, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 181, "y": 0, "w": 61, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 61, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 242, "y": 0, "w": 61, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 61, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 303, "y": 0, "w": 61, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 61, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 232, "y": 190, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 60, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 292, "y": 191, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 60, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 60, "y": 0, "w": 60, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 60, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 238, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 297, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 120, "y": 63, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 0, "y": 194, "w": 59, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 59, "h": 64 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 59, "y": 194, "w": 59, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 59, "h": 64 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 56, "y": 319, "w": 59, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 59, "h": 63 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 117, "y": 259, "w": 60, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 60, "h": 62 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 177, "y": 320, "w": 60, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 60, "h": 61 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 232, "y": 128, "w": 61, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 61, "h": 62 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 56, "y": 258, "w": 61, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 61, "h": 61 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 118, "y": 195, "w": 59, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 59, "h": 64 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 115, "y": 321, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 55, "h": 66 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 237, "y": 321, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 55, "h": 66 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 234, "y": 253, "w": 56, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 56, "h": 67 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 290, "y": 254, "w": 56, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 56, "h": 67 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 0, "y": 258, "w": 56, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 56, "h": 67 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 175, "y": 128, "w": 57, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 57, "h": 67 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 177, "y": 253, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 57, "h": 66 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 59, "y": 65, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 66 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 117, "y": 128, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 66 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 0, "y": 65, "w": 59, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 65 }, + "sourceSize": { "w": 64, "h": 67 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "718-10.png", + "format": "I8", + "size": { "w": 364, "h": 387 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/shiny/718-10.png b/public/images/pokemon/back/shiny/718-10.png index 0479543fc7a..7998912c001 100644 Binary files a/public/images/pokemon/back/shiny/718-10.png and b/public/images/pokemon/back/shiny/718-10.png differ diff --git a/public/images/pokemon/back/shiny/718.json b/public/images/pokemon/back/shiny/718.json index 4badc82d015..1a835e26b08 100644 --- a/public/images/pokemon/back/shiny/718.json +++ b/public/images/pokemon/back/shiny/718.json @@ -1,41 +1,803 @@ -{ - "textures": [ - { - "image": "718.png", - "format": "RGBA8888", - "size": { - "w": 88, - "h": 88 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 72, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 72, - "h": 88 - }, - "frame": { - "x": 0, - "y": 0, - "w": 72, - "h": 88 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:f2bba9e481cf6dfcc460f398fd1af964:386098c871ad5fe384af5f85559e7551:7b4a06b06cbac24b3f39727b0238661b$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 224, "y": 443, "w": 72, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 72, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 148, "y": 445, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 71, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 445, "y": 445, "w": 70, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 70, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 72, "y": 446, "w": 70, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 70, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 373, "y": 360, "w": 72, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 72, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 226, "y": 355, "w": 74, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 74, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 184, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 75, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 150, "y": 269, "w": 76, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 76, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 304, "y": 269, "w": 76, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 76, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 459, "y": 269, "w": 76, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 76, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 308, "y": 180, "w": 76, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 76, "h": 89 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 462, "y": 180, "w": 76, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 76, "h": 89 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 386, "y": 91, "w": 76, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 76, "h": 90 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 75, "y": 270, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 75, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 150, "y": 357, "w": 74, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 74, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 75, "y": 358, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 73, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 224, "y": 443, "w": 72, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 72, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 148, "y": 445, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 71, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 445, "y": 445, "w": 70, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 70, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 72, "y": 446, "w": 70, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 70, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 373, "y": 360, "w": 72, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 72, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 226, "y": 355, "w": 74, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 74, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 0, "y": 184, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 75, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 150, "y": 269, "w": 76, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 76, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 304, "y": 269, "w": 76, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 76, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 459, "y": 269, "w": 76, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 76, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 308, "y": 180, "w": 76, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 76, "h": 89 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 462, "y": 180, "w": 76, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 76, "h": 89 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 386, "y": 91, "w": 76, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 76, "h": 90 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 75, "y": 270, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 75, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 150, "y": 357, "w": 74, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 74, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 75, "y": 358, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 73, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 224, "y": 443, "w": 72, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 72, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 148, "y": 445, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 71, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 445, "y": 445, "w": 70, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 70, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 72, "y": 446, "w": 70, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 70, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 373, "y": 360, "w": 72, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 72, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 226, "y": 355, "w": 74, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 74, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 0, "y": 184, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 75, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 150, "y": 269, "w": 76, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 76, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 304, "y": 269, "w": 76, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 76, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 459, "y": 269, "w": 76, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 76, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 308, "y": 180, "w": 76, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 76, "h": 89 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 462, "y": 180, "w": 76, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 76, "h": 89 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 386, "y": 91, "w": 76, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 76, "h": 90 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 75, "y": 270, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 75, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 150, "y": 357, "w": 74, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 74, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 75, "y": 358, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 73, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 224, "y": 443, "w": 72, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 72, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 148, "y": 445, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 71, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 445, "y": 445, "w": 70, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 70, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 72, "y": 446, "w": 70, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 70, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 373, "y": 360, "w": 72, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 72, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 226, "y": 355, "w": 74, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 74, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 184, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 75, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 150, "y": 269, "w": 76, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 76, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 304, "y": 269, "w": 76, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 76, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 459, "y": 269, "w": 76, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 76, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 308, "y": 180, "w": 76, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 76, "h": 89 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 462, "y": 180, "w": 76, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 76, "h": 89 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 386, "y": 91, "w": 76, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 76, "h": 90 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 75, "y": 270, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 75, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 150, "y": 357, "w": 74, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 74, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 75, "y": 358, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 73, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 224, "y": 443, "w": 72, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 72, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 0, "y": 359, "w": 72, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 72, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 300, "y": 357, "w": 73, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 73, "h": 89 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 380, "y": 271, "w": 74, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 74, "h": 89 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 384, "y": 181, "w": 75, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 75, "h": 90 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 155, "y": 92, "w": 76, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 76, "h": 90 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 309, "y": 91, "w": 77, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 77, "h": 89 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 227, "y": 268, "w": 77, "h": 87 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 77, "h": 87 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 150, "y": 182, "w": 77, "h": 87 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 77, "h": 87 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 0, "y": 272, "w": 75, "h": 87 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 75, "h": 87 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 310, "y": 0, "w": 77, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 77, "h": 91 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 387, "y": 0, "w": 77, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 77, "h": 91 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 155, "y": 0, "w": 77, "h": 92 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 77, "h": 92 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 77, "y": 0, "w": 78, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 78, "h": 91 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 0, "y": 0, "w": 77, "h": 93 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 77, "h": 93 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 231, "y": 180, "w": 77, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 77, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 232, "y": 0, "w": 78, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 78, "h": 90 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 77, "y": 91, "w": 78, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 78, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 464, "y": 0, "w": 77, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 77, "h": 90 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 232, "y": 90, "w": 77, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 77, "h": 90 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 464, "y": 90, "w": 77, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 77, "h": 90 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 0, "y": 93, "w": 75, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 75, "h": 91 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 75, "y": 179, "w": 75, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 75, "h": 91 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 454, "y": 357, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 73, "h": 88 }, + "sourceSize": { "w": 87, "h": 93 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "718.png", + "format": "I8", + "size": { "w": 541, "h": 534 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/shiny/718.png b/public/images/pokemon/back/shiny/718.png index 4492fbd3b22..bb8d4179347 100644 Binary files a/public/images/pokemon/back/shiny/718.png and b/public/images/pokemon/back/shiny/718.png differ diff --git a/public/images/pokemon/back/shiny/719.json b/public/images/pokemon/back/shiny/719.json index 8cb7bee25c3..f7fa0ccb512 100644 --- a/public/images/pokemon/back/shiny/719.json +++ b/public/images/pokemon/back/shiny/719.json @@ -1,41 +1,875 @@ -{ - "textures": [ - { - "image": "719.png", - "format": "RGBA8888", - "size": { - "w": 65, - "h": 65 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 65 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 65 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:0340084a126284b9d4aa16b7bbdc9616:f699a390d9b5db64f5f03e684cf77f66:17a705bb924916761be2495822a53735$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 42, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 84, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 126, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 168, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 140, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 80, "y": 210, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 119, "y": 210, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 40, "y": 140, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 5, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 80, "y": 140, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 6, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 125, "y": 70, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 41, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 210, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 42, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 84, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 126, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 168, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 140, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 80, "y": 210, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 119, "y": 210, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 40, "y": 140, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 5, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 80, "y": 140, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 6, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 125, "y": 70, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 41, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 210, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 42, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 84, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 126, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 168, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 0, "y": 140, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 80, "y": 210, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 119, "y": 210, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 40, "y": 140, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 5, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 80, "y": 140, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 6, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 125, "y": 70, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 41, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 210, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 42, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 84, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 126, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 168, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 0, "y": 140, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 80, "y": 210, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 119, "y": 210, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 40, "y": 140, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 5, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 80, "y": 140, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 6, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 125, "y": 70, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 41, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 210, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 0, "y": 70, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 8, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 120, "y": 140, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 7, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 160, "y": 140, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 5, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 158, "y": 210, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 280, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 2, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 112, "y": 350, "w": 37, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 0, "w": 37, "h": 69 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 38, "y": 350, "w": 37, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 1, "w": 37, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 156, "y": 280, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 3, "w": 38, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 197, "y": 210, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 5, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 200, "y": 140, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 7, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 207, "y": 70, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 9, "w": 41, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 42, "y": 70, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 8, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 84, "y": 70, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 7, "w": 41, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 0, "y": 210, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 39, "y": 280, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 78, "y": 280, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 0, "y": 350, "w": 38, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 38, "h": 69 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 75, "y": 350, "w": 37, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 37, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 194, "y": 280, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 38, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 117, "y": 280, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 40, "y": 210, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 8, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 166, "y": 70, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 41, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 0, "y": 70, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 8, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 120, "y": 140, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 7, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 160, "y": 140, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 5, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 158, "y": 210, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 0, "y": 280, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 2, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 112, "y": 350, "w": 37, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 0, "w": 37, "h": 69 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 38, "y": 350, "w": 37, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 1, "w": 37, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 156, "y": 280, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 3, "w": 38, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 197, "y": 210, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 5, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 200, "y": 140, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 7, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 207, "y": 70, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 9, "w": 41, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 42, "y": 70, "w": 42, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 8, "w": 42, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 84, "y": 70, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 7, "w": 41, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 0, "y": 210, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 39, "y": 280, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 78, "y": 280, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 0, "y": 350, "w": 38, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 38, "h": 69 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 75, "y": 350, "w": 37, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 37, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 194, "y": 280, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 38, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 117, "y": 280, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 39, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 40, "y": 210, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 8, "w": 40, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 166, "y": 70, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 41, "h": 70 }, + "sourceSize": { "w": 61, "h": 80 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "719.png", + "format": "I8", + "size": { "w": 252, "h": 420 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/shiny/719.png b/public/images/pokemon/back/shiny/719.png index a0b34f5bcca..6e76d35bc93 100644 Binary files a/public/images/pokemon/back/shiny/719.png and b/public/images/pokemon/back/shiny/719.png differ diff --git a/public/images/pokemon/back/shiny/881.png b/public/images/pokemon/back/shiny/881.png index 3686b34dd99..4dc11742548 100644 Binary files a/public/images/pokemon/back/shiny/881.png and b/public/images/pokemon/back/shiny/881.png differ diff --git a/public/images/pokemon/back/shiny/987.png b/public/images/pokemon/back/shiny/987.png index 8022d2f900a..8c4c0c8b62a 100644 Binary files a/public/images/pokemon/back/shiny/987.png and b/public/images/pokemon/back/shiny/987.png differ diff --git a/public/images/pokemon/back/shiny/female/3.png b/public/images/pokemon/back/shiny/female/3.png index 706a6c33f14..dff72d5b6e5 100644 Binary files a/public/images/pokemon/back/shiny/female/3.png and b/public/images/pokemon/back/shiny/female/3.png differ diff --git a/public/images/pokemon/exp/248-mega.json b/public/images/pokemon/exp/248-mega.json index 42e7e9f7d6d..2c9370cbeee 100644 --- a/public/images/pokemon/exp/248-mega.json +++ b/public/images/pokemon/exp/248-mega.json @@ -1,272 +1,929 @@ -{ - "textures": [ - { - "image": "248-mega.png", - "format": "RGBA8888", - "size": { - "w": 271, - "h": 271 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 91, - "h": 85 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 91, - "h": 85 - }, - "frame": { - "x": 0, - "y": 0, - "w": 91, - "h": 85 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 91, - "h": 85 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 91, - "h": 85 - }, - "frame": { - "x": 0, - "y": 0, - "w": 91, - "h": 85 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 91, - "h": 85 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 91, - "h": 85 - }, - "frame": { - "x": 91, - "y": 0, - "w": 91, - "h": 85 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 91, - "h": 85 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 91, - "h": 85 - }, - "frame": { - "x": 91, - "y": 0, - "w": 91, - "h": 85 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 91, - "h": 85 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 91, - "h": 85 - }, - "frame": { - "x": 0, - "y": 85, - "w": 91, - "h": 85 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 91, - "h": 85 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 91, - "h": 85 - }, - "frame": { - "x": 0, - "y": 85, - "w": 91, - "h": 85 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 91, - "h": 85 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 91, - "h": 85 - }, - "frame": { - "x": 0, - "y": 170, - "w": 91, - "h": 85 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 91, - "h": 85 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 91, - "h": 85 - }, - "frame": { - "x": 0, - "y": 170, - "w": 91, - "h": 85 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 85 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 90, - "h": 85 - }, - "frame": { - "x": 91, - "y": 85, - "w": 90, - "h": 85 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 85 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 90, - "h": 85 - }, - "frame": { - "x": 91, - "y": 85, - "w": 90, - "h": 85 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 85 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 90, - "h": 85 - }, - "frame": { - "x": 181, - "y": 85, - "w": 90, - "h": 85 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 85 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 90, - "h": 84 - }, - "frame": { - "x": 91, - "y": 170, - "w": 90, - "h": 84 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:cde8b160e19f5e22098d0c8712fe3e26:5bade20a2d91d5c0e3de833bedccd3cb:90df97eb431b7162252516cb937a0b9e$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 467, "y": 175, "w": 90, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 90, "h": 84 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 559, "y": 175, "w": 90, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 90, "h": 84 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 184, "y": 176, "w": 91, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 91, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 184, "y": 261, "w": 92, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 92, "h": 82 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 374, "y": 261, "w": 92, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 92, "h": 82 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 182, "y": 430, "w": 90, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 90, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 549, "y": 430, "w": 90, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 90, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 89, "y": 513, "w": 88, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 88, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 182, "y": 512, "w": 89, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 89, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 273, "y": 513, "w": 87, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 87, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 456, "y": 433, "w": 89, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 89, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 547, "y": 512, "w": 88, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 88, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 274, "y": 431, "w": 89, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 89, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 91, "y": 430, "w": 89, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 89, "h": 81 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 275, "y": 348, "w": 90, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 90, "h": 81 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 91, "y": 347, "w": 90, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 90, "h": 81 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 369, "y": 345, "w": 90, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 90, "h": 82 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 561, "y": 261, "w": 90, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 90, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 0, "y": 262, "w": 90, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 90, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 467, "y": 175, "w": 90, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 90, "h": 84 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 559, "y": 175, "w": 90, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 90, "h": 84 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 184, "y": 176, "w": 91, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 91, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 184, "y": 261, "w": 92, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 92, "h": 82 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 374, "y": 261, "w": 92, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 92, "h": 82 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 182, "y": 430, "w": 90, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 90, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 549, "y": 430, "w": 90, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 90, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 89, "y": 513, "w": 88, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 88, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 182, "y": 512, "w": 89, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 89, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 273, "y": 513, "w": 87, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 87, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 456, "y": 433, "w": 89, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 89, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 547, "y": 512, "w": 88, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 88, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 274, "y": 431, "w": 89, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 89, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 91, "y": 430, "w": 89, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 89, "h": 81 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 275, "y": 348, "w": 90, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 90, "h": 81 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 91, "y": 347, "w": 90, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 90, "h": 81 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 369, "y": 345, "w": 90, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 90, "h": 82 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 561, "y": 261, "w": 90, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 90, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 0, "y": 262, "w": 90, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 90, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 467, "y": 175, "w": 90, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 90, "h": 84 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 559, "y": 175, "w": 90, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 90, "h": 84 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 184, "y": 176, "w": 91, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 91, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 184, "y": 261, "w": 92, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 92, "h": 82 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 374, "y": 261, "w": 92, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 92, "h": 82 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 182, "y": 430, "w": 90, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 90, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 549, "y": 430, "w": 90, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 90, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 89, "y": 513, "w": 88, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 88, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 182, "y": 512, "w": 89, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 89, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 273, "y": 513, "w": 87, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 87, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 456, "y": 433, "w": 89, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 89, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 547, "y": 512, "w": 88, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 88, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 274, "y": 431, "w": 89, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 89, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 91, "y": 430, "w": 89, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 89, "h": 81 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 275, "y": 348, "w": 90, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 90, "h": 81 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 91, "y": 347, "w": 90, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 90, "h": 81 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 369, "y": 345, "w": 90, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 90, "h": 82 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 561, "y": 261, "w": 90, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 90, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 0, "y": 262, "w": 90, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 90, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 467, "y": 175, "w": 90, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 90, "h": 84 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 559, "y": 175, "w": 90, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 90, "h": 84 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 184, "y": 176, "w": 91, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 91, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 184, "y": 261, "w": 92, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 92, "h": 82 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 374, "y": 261, "w": 92, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 92, "h": 82 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 182, "y": 430, "w": 90, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 90, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 549, "y": 430, "w": 90, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 90, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 89, "y": 513, "w": 88, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 88, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 182, "y": 512, "w": 89, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 89, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 273, "y": 513, "w": 87, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 87, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 456, "y": 433, "w": 89, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 89, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 547, "y": 512, "w": 88, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 88, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 274, "y": 431, "w": 89, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 89, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 91, "y": 430, "w": 89, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 89, "h": 81 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 275, "y": 348, "w": 90, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 90, "h": 81 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 91, "y": 347, "w": 90, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 90, "h": 81 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 369, "y": 345, "w": 90, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 90, "h": 82 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 561, "y": 261, "w": 90, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 90, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 0, "y": 262, "w": 90, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 90, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 467, "y": 175, "w": 90, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 90, "h": 84 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 0, "y": 176, "w": 90, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 90, "h": 84 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 92, "y": 176, "w": 90, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 90, "h": 84 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 92, "y": 262, "w": 90, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 90, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 184, "y": 345, "w": 89, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 89, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 278, "y": 263, "w": 89, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 89, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 468, "y": 261, "w": 90, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 90, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 549, "y": 346, "w": 89, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 89, "h": 82 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 0, "y": 347, "w": 89, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 89, "h": 82 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 0, "y": 431, "w": 87, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 87, "h": 82 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 367, "y": 429, "w": 87, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 87, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 461, "y": 346, "w": 86, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 86, "h": 85 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 283, "y": 175, "w": 89, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 89, "h": 86 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 189, "y": 88, "w": 92, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 92, "h": 86 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 0, "y": 0, "w": 93, "h": 87 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 93, "h": 87 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 380, "y": 0, "w": 92, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 92, "h": 86 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 95, "y": 88, "w": 92, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 92, "h": 86 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 474, "y": 0, "w": 92, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 92, "h": 86 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 190, "y": 0, "w": 93, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 93, "h": 86 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 95, "y": 0, "w": 93, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 93, "h": 86 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 285, "y": 0, "w": 93, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 93, "h": 86 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 378, "y": 88, "w": 93, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 93, "h": 85 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 283, "y": 88, "w": 93, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 93, "h": 85 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 473, "y": 88, "w": 93, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 93, "h": 85 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 0, "y": 89, "w": 93, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 93, "h": 85 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 374, "y": 175, "w": 91, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 91, "h": 84 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "248-mega.png", + "format": "I8", + "size": { "w": 651, "h": 593 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/248-mega.png b/public/images/pokemon/exp/248-mega.png index b7563738d3d..167b88b09e5 100644 Binary files a/public/images/pokemon/exp/248-mega.png and b/public/images/pokemon/exp/248-mega.png differ diff --git a/public/images/pokemon/exp/362-mega.json b/public/images/pokemon/exp/362-mega.json index 05497f4ce7e..c69ecfb1903 100644 --- a/public/images/pokemon/exp/362-mega.json +++ b/public/images/pokemon/exp/362-mega.json @@ -1,272 +1,551 @@ -{ - "textures": [ - { - "image": "362-mega.png", - "format": "RGBA8888", - "size": { - "w": 174, - "h": 174 - }, - "scale": 1, - "frames": [ - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 58, - "h": 72 - }, - "frame": { - "x": 0, - "y": 0, - "w": 58, - "h": 72 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 58, - "h": 72 - }, - "frame": { - "x": 0, - "y": 0, - "w": 58, - "h": 72 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 58, - "h": 72 - }, - "frame": { - "x": 0, - "y": 0, - "w": 58, - "h": 72 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 58, - "h": 72 - }, - "frame": { - "x": 0, - "y": 0, - "w": 58, - "h": 72 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 58, - "h": 71 - }, - "frame": { - "x": 0, - "y": 72, - "w": 58, - "h": 71 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 58, - "h": 71 - }, - "frame": { - "x": 0, - "y": 72, - "w": 58, - "h": 71 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 58, - "h": 71 - }, - "frame": { - "x": 0, - "y": 72, - "w": 58, - "h": 71 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 58, - "h": 71 - }, - "frame": { - "x": 58, - "y": 0, - "w": 58, - "h": 71 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 58, - "h": 71 - }, - "frame": { - "x": 58, - "y": 0, - "w": 58, - "h": 71 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 58, - "h": 71 - }, - "frame": { - "x": 116, - "y": 0, - "w": 58, - "h": 71 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 58, - "h": 70 - }, - "frame": { - "x": 58, - "y": 71, - "w": 58, - "h": 70 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 58, - "h": 70 - }, - "frame": { - "x": 58, - "y": 71, - "w": 58, - "h": 70 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:06afd89cf806f88f8f27098b432ad2cd:96be21e5293fd792149dc4962c63b26d:8a7271a5423838c97ddeb1e6dc343255$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 11, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 14, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 16, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 18, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 15, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 13, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 11, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 14, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 16, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 18, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 15, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 13, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 11, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 14, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 16, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 18, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 15, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 13, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 0, "y": 0, "w": 62, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 62, "h": 67 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 0, "y": 69, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 55, "h": 65 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 0, "w": 62, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 62, "h": 67 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 0, "y": 69, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 55, "h": 65 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 0, "y": 0, "w": 62, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 62, "h": 67 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 0, "y": 69, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 55, "h": 65 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 0, "y": 0, "w": 62, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 62, "h": 67 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 69, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 55, "h": 65 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 0, "w": 62, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 62, "h": 67 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 69, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 55, "h": 65 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 0, "y": 0, "w": 62, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 62, "h": 67 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 0, "y": 69, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 55, "h": 65 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "362-mega.png", + "format": "I8", + "size": { "w": 122, "h": 134 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/362-mega.png b/public/images/pokemon/exp/362-mega.png index 76464e38a4c..be87d172e8e 100644 Binary files a/public/images/pokemon/exp/362-mega.png and b/public/images/pokemon/exp/362-mega.png differ diff --git a/public/images/pokemon/exp/651.json b/public/images/pokemon/exp/651.json index 5db25b75d8e..20bdccd5bd4 100644 --- a/public/images/pokemon/exp/651.json +++ b/public/images/pokemon/exp/651.json @@ -1,188 +1,713 @@ -{ - "textures": [ - { - "image": "651.png", - "format": "RGBA8888", - "size": { - "w": 116, - "h": 116 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 58, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 58, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 58, - "h": 53 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 58, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 58, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 58, - "h": 53 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 58, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 58, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 58, - "h": 53 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 58, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 58, - "h": 53 - }, - "frame": { - "x": 58, - "y": 0, - "w": 58, - "h": 53 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 58, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 58, - "h": 53 - }, - "frame": { - "x": 58, - "y": 0, - "w": 58, - "h": 53 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 58, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 58, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 58, - "h": 53 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 58, - "h": 52 - }, - "frame": { - "x": 58, - "y": 53, - "w": 58, - "h": 52 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 58, - "h": 52 - }, - "frame": { - "x": 58, - "y": 53, - "w": 58, - "h": 52 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:d110ead01ff70d3da8dfb432dfe00ac0:207046ea51a1627a342c2b30f969868e:a93e5fa02e10bf11e3ed8bf6571835ca$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 119, "y": 49, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 175, "y": 49, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 355, "y": 49, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 278, "y": 101, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 110, "y": 151, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 56, "y": 101, "w": 53, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 53, "h": 51 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 165, "y": 151, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 333, "y": 151, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 287, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 112, "y": 100, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 168, "y": 100, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 152, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 278, "y": 152, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 56, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 231, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 224, "y": 101, "w": 53, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 53, "h": 51 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 343, "y": 100, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 55, "y": 153, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 220, "y": 153, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 119, "y": 49, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 175, "y": 49, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 355, "y": 49, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 278, "y": 101, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 110, "y": 151, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 56, "y": 101, "w": 53, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 53, "h": 51 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 165, "y": 151, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 333, "y": 151, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 287, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 112, "y": 100, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 168, "y": 100, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 152, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 278, "y": 152, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 56, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 231, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 224, "y": 101, "w": 53, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 53, "h": 51 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 343, "y": 100, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 0, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 55, "y": 153, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 220, "y": 153, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 119, "y": 49, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 175, "y": 49, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 355, "y": 49, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 278, "y": 101, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 110, "y": 151, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 56, "y": 101, "w": 53, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 53, "h": 51 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 165, "y": 151, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 333, "y": 151, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 287, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 112, "y": 100, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 168, "y": 100, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 0, "y": 152, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 278, "y": 152, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 56, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 231, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 224, "y": 101, "w": 53, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 53, "h": 51 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 343, "y": 100, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 0, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 55, "y": 153, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 220, "y": 153, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 119, "y": 49, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 239, "y": 0, "w": 57, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 49 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 60, "y": 0, "w": 58, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 58, "h": 49 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 355, "y": 0, "w": 58, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 58, "h": 48 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 0, "y": 0, "w": 59, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 59, "h": 49 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 119, "y": 0, "w": 59, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 59, "h": 48 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 179, "y": 0, "w": 59, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 59, "h": 48 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 297, "y": 0, "w": 57, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 49 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 0, "y": 101, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 0, "y": 203, "w": 53, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 53, "h": 49 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 329, "y": 252, "w": 51, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 51, "h": 47 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 109, "y": 252, "w": 51, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 51, "h": 48 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 219, "y": 204, "w": 52, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 52, "h": 49 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 166, "y": 202, "w": 52, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 52, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 275, "y": 203, "w": 53, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 53, "h": 49 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 54, "y": 204, "w": 54, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 54, "h": 48 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 333, "y": 202, "w": 54, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 54, "h": 49 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 110, "y": 202, "w": 55, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 55, "h": 49 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "651.png", + "format": "I8", + "size": { "w": 413, "h": 300 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/651.png b/public/images/pokemon/exp/651.png index 42a1af8184d..633a3cc0c75 100644 Binary files a/public/images/pokemon/exp/651.png and b/public/images/pokemon/exp/651.png differ diff --git a/public/images/pokemon/exp/653.json b/public/images/pokemon/exp/653.json index 19654fbb3cb..a08242f32cf 100644 --- a/public/images/pokemon/exp/653.json +++ b/public/images/pokemon/exp/653.json @@ -1,1553 +1,947 @@ -{ - "textures": [ - { - "image": "653.png", - "format": "RGBA8888", - "size": { - "w": 180, - "h": 180 - }, - "scale": 1, - "frames": [ - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 47, - "h": 45 - }, - "frame": { - "x": 0, - "y": 0, - "w": 47, - "h": 45 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 47, - "h": 45 - }, - "frame": { - "x": 0, - "y": 0, - "w": 47, - "h": 45 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 47, - "h": 45 - }, - "frame": { - "x": 0, - "y": 0, - "w": 47, - "h": 45 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 47, - "h": 45 - }, - "frame": { - "x": 0, - "y": 0, - "w": 47, - "h": 45 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 47, - "h": 45 - }, - "frame": { - "x": 0, - "y": 0, - "w": 47, - "h": 45 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 47, - "h": 45 - }, - "frame": { - "x": 0, - "y": 0, - "w": 47, - "h": 45 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 47, - "h": 45 - }, - "frame": { - "x": 47, - "y": 0, - "w": 47, - "h": 45 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 47, - "h": 45 - }, - "frame": { - "x": 47, - "y": 0, - "w": 47, - "h": 45 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 47, - "h": 45 - }, - "frame": { - "x": 47, - "y": 0, - "w": 47, - "h": 45 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 47, - "h": 45 - }, - "frame": { - "x": 47, - "y": 0, - "w": 47, - "h": 45 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 47, - "h": 45 - }, - "frame": { - "x": 47, - "y": 0, - "w": 47, - "h": 45 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 47, - "h": 45 - }, - "frame": { - "x": 47, - "y": 0, - "w": 47, - "h": 45 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 43, - "h": 49 - }, - "frame": { - "x": 94, - "y": 0, - "w": 43, - "h": 49 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 43, - "h": 49 - }, - "frame": { - "x": 94, - "y": 0, - "w": 43, - "h": 49 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 43, - "h": 49 - }, - "frame": { - "x": 94, - "y": 0, - "w": 43, - "h": 49 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 43, - "h": 49 - }, - "frame": { - "x": 94, - "y": 0, - "w": 43, - "h": 49 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 43, - "h": 49 - }, - "frame": { - "x": 94, - "y": 0, - "w": 43, - "h": 49 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 43, - "h": 49 - }, - "frame": { - "x": 94, - "y": 0, - "w": 43, - "h": 49 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 43, - "h": 49 - }, - "frame": { - "x": 94, - "y": 0, - "w": 43, - "h": 49 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 43, - "h": 49 - }, - "frame": { - "x": 94, - "y": 0, - "w": 43, - "h": 49 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 43, - "h": 49 - }, - "frame": { - "x": 94, - "y": 0, - "w": 43, - "h": 49 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 43, - "h": 49 - }, - "frame": { - "x": 94, - "y": 0, - "w": 43, - "h": 49 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 43, - "h": 49 - }, - "frame": { - "x": 94, - "y": 0, - "w": 43, - "h": 49 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 43, - "h": 49 - }, - "frame": { - "x": 94, - "y": 0, - "w": 43, - "h": 49 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 137, - "y": 0, - "w": 42, - "h": 49 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 137, - "y": 0, - "w": 42, - "h": 49 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 137, - "y": 0, - "w": 42, - "h": 49 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 137, - "y": 0, - "w": 42, - "h": 49 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 137, - "y": 0, - "w": 42, - "h": 49 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 137, - "y": 0, - "w": 42, - "h": 49 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 47, - "h": 44 - }, - "frame": { - "x": 0, - "y": 45, - "w": 47, - "h": 44 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 47, - "h": 44 - }, - "frame": { - "x": 0, - "y": 45, - "w": 47, - "h": 44 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 47, - "h": 44 - }, - "frame": { - "x": 0, - "y": 45, - "w": 47, - "h": 44 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 47, - "h": 44 - }, - "frame": { - "x": 0, - "y": 45, - "w": 47, - "h": 44 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 47, - "h": 44 - }, - "frame": { - "x": 0, - "y": 45, - "w": 47, - "h": 44 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 47, - "h": 44 - }, - "frame": { - "x": 0, - "y": 45, - "w": 47, - "h": 44 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 44, - "h": 47 - }, - "frame": { - "x": 47, - "y": 45, - "w": 44, - "h": 47 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 44, - "h": 47 - }, - "frame": { - "x": 47, - "y": 45, - "w": 44, - "h": 47 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 44, - "h": 47 - }, - "frame": { - "x": 47, - "y": 45, - "w": 44, - "h": 47 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 44, - "h": 47 - }, - "frame": { - "x": 47, - "y": 45, - "w": 44, - "h": 47 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 44, - "h": 47 - }, - "frame": { - "x": 47, - "y": 45, - "w": 44, - "h": 47 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 44, - "h": 47 - }, - "frame": { - "x": 47, - "y": 45, - "w": 44, - "h": 47 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 0, - "y": 89, - "w": 42, - "h": 49 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 0, - "y": 89, - "w": 42, - "h": 49 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 0, - "y": 89, - "w": 42, - "h": 49 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 0, - "y": 89, - "w": 42, - "h": 49 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 0, - "y": 89, - "w": 42, - "h": 49 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 0, - "y": 89, - "w": 42, - "h": 49 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 47, - "h": 42 - }, - "frame": { - "x": 0, - "y": 138, - "w": 47, - "h": 42 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 47, - "h": 42 - }, - "frame": { - "x": 0, - "y": 138, - "w": 47, - "h": 42 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 47, - "h": 42 - }, - "frame": { - "x": 0, - "y": 138, - "w": 47, - "h": 42 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 47, - "h": 42 - }, - "frame": { - "x": 0, - "y": 138, - "w": 47, - "h": 42 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 47, - "h": 42 - }, - "frame": { - "x": 0, - "y": 138, - "w": 47, - "h": 42 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 47, - "h": 42 - }, - "frame": { - "x": 0, - "y": 138, - "w": 47, - "h": 42 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 46, - "h": 44 - }, - "frame": { - "x": 42, - "y": 92, - "w": 46, - "h": 44 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 46, - "h": 44 - }, - "frame": { - "x": 42, - "y": 92, - "w": 46, - "h": 44 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 46, - "h": 44 - }, - "frame": { - "x": 42, - "y": 92, - "w": 46, - "h": 44 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 46, - "h": 44 - }, - "frame": { - "x": 42, - "y": 92, - "w": 46, - "h": 44 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 46, - "h": 44 - }, - "frame": { - "x": 42, - "y": 92, - "w": 46, - "h": 44 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 47, - "h": 42 - }, - "frame": { - "x": 47, - "y": 136, - "w": 47, - "h": 42 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 91, - "y": 49, - "w": 42, - "h": 49 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 91, - "y": 49, - "w": 42, - "h": 49 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 91, - "y": 49, - "w": 42, - "h": 49 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 91, - "y": 49, - "w": 42, - "h": 49 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 91, - "y": 49, - "w": 42, - "h": 49 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 91, - "y": 49, - "w": 42, - "h": 49 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 133, - "y": 49, - "w": 42, - "h": 49 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 133, - "y": 49, - "w": 42, - "h": 49 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 43, - "h": 47 - }, - "frame": { - "x": 94, - "y": 98, - "w": 43, - "h": 47 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 43, - "h": 47 - }, - "frame": { - "x": 94, - "y": 98, - "w": 43, - "h": 47 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 43, - "h": 46 - }, - "frame": { - "x": 137, - "y": 98, - "w": 43, - "h": 46 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 43, - "h": 46 - }, - "frame": { - "x": 137, - "y": 98, - "w": 43, - "h": 46 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 43, - "h": 46 - }, - "frame": { - "x": 137, - "y": 98, - "w": 43, - "h": 46 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:3f19f65b0cc7eac6c736e7e4bd91d830:87ecb6f1ef5612019ef73bbf8249079d:a7be961d0230f568aff23d95e7ff0036$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0002.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0003.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0004.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0005.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0008.png", + "frame": { "x": 41, "y": 130, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 42, "h": 39 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0009.png", + "frame": { "x": 41, "y": 130, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 42, "h": 39 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0012.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0013.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0014.png", + "frame": { "x": 80, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0015.png", + "frame": { "x": 80, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0016.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0017.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0018.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0019.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0020.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0021.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0022.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0023.png", + "frame": { "x": 41, "y": 130, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 42, "h": 39 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0024.png", + "frame": { "x": 41, "y": 130, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 42, "h": 39 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0027.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0028.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0029.png", + "frame": { "x": 80, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0030.png", + "frame": { "x": 80, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0031.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0032.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0033.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0034.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0035.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0038.png", + "frame": { "x": 41, "y": 130, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 42, "h": 39 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0039.png", + "frame": { "x": 41, "y": 130, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 42, "h": 39 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0040.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0042.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0043.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0044.png", + "frame": { "x": 80, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0045.png", + "frame": { "x": 80, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0046.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0047.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0048.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0049.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0050.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0051.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0052.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0053.png", + "frame": { "x": 41, "y": 130, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 42, "h": 39 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0054.png", + "frame": { "x": 41, "y": 130, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 42, "h": 39 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0057.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0058.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0059.png", + "frame": { "x": 80, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0060.png", + "frame": { "x": 80, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0063.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0064.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0065.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0066.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0067.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0068.png", + "frame": { "x": 41, "y": 130, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 42, "h": 39 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0069.png", + "frame": { "x": 41, "y": 130, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 42, "h": 39 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0070.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0071.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0072.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0073.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0074.png", + "frame": { "x": 80, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0075.png", + "frame": { "x": 80, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0076.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0077.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0078.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0079.png", + "frame": { "x": 120, "y": 88, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 38, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0080.png", + "frame": { "x": 120, "y": 88, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 38, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0081.png", + "frame": { "x": 0, "y": 45, "w": 40, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 40, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0082.png", + "frame": { "x": 0, "y": 45, "w": 40, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 40, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0083.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 45 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0084.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 45 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0085.png", + "frame": { "x": 42, "y": 0, "w": 42, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 42, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0086.png", + "frame": { "x": 42, "y": 0, "w": 42, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 42, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0087.png", + "frame": { "x": 42, "y": 0, "w": 42, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 42, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0088.png", + "frame": { "x": 42, "y": 44, "w": 41, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 41, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0089.png", + "frame": { "x": 42, "y": 44, "w": 41, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 41, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0090.png", + "frame": { "x": 84, "y": 0, "w": 42, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 42, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0091.png", + "frame": { "x": 84, "y": 0, "w": 42, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 42, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0092.png", + "frame": { "x": 83, "y": 44, "w": 41, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 41, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0093.png", + "frame": { "x": 83, "y": 44, "w": 41, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 41, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0094.png", + "frame": { "x": 84, "y": 0, "w": 42, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 42, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0095.png", + "frame": { "x": 124, "y": 44, "w": 41, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 41, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0096.png", + "frame": { "x": 124, "y": 44, "w": 41, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 41, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0097.png", + "frame": { "x": 126, "y": 0, "w": 42, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 42, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0098.png", + "frame": { "x": 126, "y": 0, "w": 42, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 42, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0099.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 45 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0100.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 45 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0101.png", + "frame": { "x": 0, "y": 45, "w": 40, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 40, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0102.png", + "frame": { "x": 0, "y": 45, "w": 40, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 40, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0103.png", + "frame": { "x": 120, "y": 88, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 38, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0104.png", + "frame": { "x": 120, "y": 88, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 38, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "653.png", + "format": "I8", + "size": { "w": 168, "h": 175 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/653.png b/public/images/pokemon/exp/653.png index cf42c8754bc..66e359173aa 100644 Binary files a/public/images/pokemon/exp/653.png and b/public/images/pokemon/exp/653.png differ diff --git a/public/images/pokemon/exp/654.json b/public/images/pokemon/exp/654.json index a7f07f56864..74019f665ec 100644 --- a/public/images/pokemon/exp/654.json +++ b/public/images/pokemon/exp/654.json @@ -1,818 +1,695 @@ -{ - "textures": [ - { - "image": "654.png", - "format": "RGBA8888", - "size": { - "w": 390, - "h": 390 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 47, - "h": 81 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 81 - }, - "frame": { - "x": 0, - "y": 81, - "w": 47, - "h": 81 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 47, - "h": 81 - }, - "frame": { - "x": 0, - "y": 162, - "w": 47, - "h": 81 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 47, - "h": 80 - }, - "frame": { - "x": 0, - "y": 243, - "w": 47, - "h": 80 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 81 - }, - "frame": { - "x": 47, - "y": 0, - "w": 46, - "h": 81 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 81 - }, - "frame": { - "x": 47, - "y": 81, - "w": 46, - "h": 81 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 81 - }, - "frame": { - "x": 47, - "y": 162, - "w": 46, - "h": 81 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 46, - "h": 80 - }, - "frame": { - "x": 47, - "y": 243, - "w": 46, - "h": 80 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 46, - "h": 79 - }, - "frame": { - "x": 93, - "y": 0, - "w": 46, - "h": 79 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 46, - "h": 79 - }, - "frame": { - "x": 93, - "y": 79, - "w": 46, - "h": 79 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 46, - "h": 79 - }, - "frame": { - "x": 93, - "y": 158, - "w": 46, - "h": 79 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 46, - "h": 79 - }, - "frame": { - "x": 93, - "y": 237, - "w": 46, - "h": 79 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 8, - "y": 7, - "w": 46, - "h": 74 - }, - "frame": { - "x": 93, - "y": 316, - "w": 46, - "h": 74 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 46, - "h": 79 - }, - "frame": { - "x": 139, - "y": 0, - "w": 46, - "h": 79 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 80 - }, - "frame": { - "x": 139, - "y": 79, - "w": 45, - "h": 80 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 80 - }, - "frame": { - "x": 139, - "y": 159, - "w": 45, - "h": 80 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 46, - "h": 78 - }, - "frame": { - "x": 139, - "y": 239, - "w": 46, - "h": 78 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 46, - "h": 73 - }, - "frame": { - "x": 139, - "y": 317, - "w": 46, - "h": 73 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 45, - "h": 79 - }, - "frame": { - "x": 184, - "y": 79, - "w": 45, - "h": 79 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 45, - "h": 79 - }, - "frame": { - "x": 185, - "y": 0, - "w": 45, - "h": 79 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 45, - "h": 79 - }, - "frame": { - "x": 184, - "y": 158, - "w": 45, - "h": 79 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 45, - "h": 79 - }, - "frame": { - "x": 185, - "y": 237, - "w": 45, - "h": 79 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 8, - "y": 7, - "w": 46, - "h": 74 - }, - "frame": { - "x": 185, - "y": 316, - "w": 46, - "h": 74 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 45, - "h": 79 - }, - "frame": { - "x": 229, - "y": 79, - "w": 45, - "h": 79 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 45, - "h": 79 - }, - "frame": { - "x": 230, - "y": 0, - "w": 45, - "h": 79 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 45, - "h": 79 - }, - "frame": { - "x": 229, - "y": 158, - "w": 45, - "h": 79 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 45, - "h": 79 - }, - "frame": { - "x": 230, - "y": 237, - "w": 45, - "h": 79 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 46, - "h": 73 - }, - "frame": { - "x": 231, - "y": 316, - "w": 46, - "h": 73 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 46, - "h": 77 - }, - "frame": { - "x": 274, - "y": 79, - "w": 46, - "h": 77 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 47, - "h": 75 - }, - "frame": { - "x": 275, - "y": 0, - "w": 47, - "h": 75 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 45, - "h": 78 - }, - "frame": { - "x": 274, - "y": 156, - "w": 45, - "h": 78 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 45, - "h": 78 - }, - "frame": { - "x": 275, - "y": 234, - "w": 45, - "h": 78 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 46, - "h": 76 - }, - "frame": { - "x": 319, - "y": 156, - "w": 46, - "h": 76 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 45, - "h": 77 - }, - "frame": { - "x": 320, - "y": 75, - "w": 45, - "h": 77 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 46, - "h": 75 - }, - "frame": { - "x": 322, - "y": 0, - "w": 46, - "h": 75 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 46, - "h": 75 - }, - "frame": { - "x": 277, - "y": 312, - "w": 46, - "h": 75 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 45, - "h": 76 - }, - "frame": { - "x": 320, - "y": 232, - "w": 45, - "h": 76 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 45, - "h": 76 - }, - "frame": { - "x": 323, - "y": 308, - "w": 45, - "h": 76 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:6cb9cd08a225d9ce5a32640f2a1a4760:ab52583219972dae47f87bdaf152d0c0:1977f50e1ab8a3304ceeb59ee1aa2ba9$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 102, "y": 326, "w": 50, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 50, "h": 67 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 107, "y": 261, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 196, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 282, "y": 0, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 117, "y": 0, "w": 56, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 56, "h": 66 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 60, "y": 0, "w": 57, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 57, "h": 68 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 229, "y": 0, "w": 53, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 53, "h": 69 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 261, "w": 51, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 1, "w": 51, "h": 68 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 102, "y": 326, "w": 50, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 50, "h": 67 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 160, "y": 261, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 110, "y": 196, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 65, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 117, "y": 0, "w": 56, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 56, "h": 66 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 60, "y": 0, "w": 57, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 57, "h": 68 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 229, "y": 0, "w": 53, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 53, "h": 69 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 261, "w": 51, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 1, "w": 51, "h": 68 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 102, "y": 326, "w": 50, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 50, "h": 67 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 107, "y": 261, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 0, "y": 196, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 282, "y": 0, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 117, "y": 0, "w": 56, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 56, "h": 66 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 60, "y": 0, "w": 57, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 57, "h": 68 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 229, "y": 0, "w": 53, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 53, "h": 69 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 0, "y": 261, "w": 51, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 1, "w": 51, "h": 68 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 102, "y": 326, "w": 50, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 50, "h": 67 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 160, "y": 261, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 110, "y": 196, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 0, "y": 65, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 117, "y": 0, "w": 56, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 56, "h": 66 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 60, "y": 0, "w": 57, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 57, "h": 68 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 229, "y": 0, "w": 53, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 53, "h": 69 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 261, "w": 51, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 1, "w": 51, "h": 68 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 102, "y": 326, "w": 50, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 50, "h": 67 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 107, "y": 261, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 0, "y": 196, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 282, "y": 0, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 117, "y": 0, "w": 56, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 56, "h": 66 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 60, "y": 0, "w": 57, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 57, "h": 68 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 229, "y": 0, "w": 53, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 53, "h": 69 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 0, "y": 261, "w": 51, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 1, "w": 51, "h": 68 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 102, "y": 326, "w": 50, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 50, "h": 67 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 160, "y": 261, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 110, "y": 196, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 0, "y": 65, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 117, "y": 0, "w": 56, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 56, "h": 66 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 60, "y": 0, "w": 57, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 57, "h": 68 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 229, "y": 0, "w": 53, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 53, "h": 69 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 0, "y": 261, "w": 51, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 1, "w": 51, "h": 68 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 152, "y": 326, "w": 50, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 50, "h": 67 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 164, "y": 196, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 117, "y": 66, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 172, "y": 66, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 213, "y": 265, "w": 51, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 66 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 282, "y": 66, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 173, "y": 0, "w": 56, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 56, "h": 66 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 0, "w": 60, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 60, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 55, "y": 68, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 227, "y": 69, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 275, "y": 196, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 55, "y": 68, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 227, "y": 69, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 275, "y": 196, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 55, "y": 68, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 227, "y": 69, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 275, "y": 196, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 55, "y": 68, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 0, "y": 131, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 110, "y": 131, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 165, "y": 131, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 282, "y": 131, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 55, "y": 133, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 220, "y": 134, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 54, "y": 198, "w": 53, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 53, "h": 66 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 218, "y": 199, "w": 53, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 53, "h": 66 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 271, "y": 261, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 51, "h": 67 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 51, "y": 264, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 51, "h": 67 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "654.png", + "format": "I8", + "size": { "w": 337, "h": 393 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/654.png b/public/images/pokemon/exp/654.png index 31d16e68e48..b1101648416 100644 Binary files a/public/images/pokemon/exp/654.png and b/public/images/pokemon/exp/654.png differ diff --git a/public/images/pokemon/exp/656.json b/public/images/pokemon/exp/656.json index 71ebaea1efb..3c2051bfe3a 100644 --- a/public/images/pokemon/exp/656.json +++ b/public/images/pokemon/exp/656.json @@ -1,671 +1,713 @@ -{ - "textures": [ - { - "image": "656.png", - "format": "RGBA8888", - "size": { - "w": 96, - "h": 96 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 32, - "h": 34 - }, - "frame": { - "x": 64, - "y": 0, - "w": 32, - "h": 34 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 32, - "h": 34 - }, - "frame": { - "x": 64, - "y": 0, - "w": 32, - "h": 34 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 32, - "h": 34 - }, - "frame": { - "x": 64, - "y": 0, - "w": 32, - "h": 34 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 32, - "h": 34 - }, - "frame": { - "x": 64, - "y": 0, - "w": 32, - "h": 34 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 32, - "h": 34 - }, - "frame": { - "x": 64, - "y": 34, - "w": 32, - "h": 34 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 32, - "h": 34 - }, - "frame": { - "x": 64, - "y": 34, - "w": 32, - "h": 34 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 32, - "h": 34 - }, - "frame": { - "x": 64, - "y": 34, - "w": 32, - "h": 34 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 32, - "h": 34 - }, - "frame": { - "x": 64, - "y": 34, - "w": 32, - "h": 34 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:5f39528f34681b7e85d5ea8d96776a2d:75313d84bbb64652e1825fbfbea72872:9c4d208e6c2f857bfb0b23b8eea3326c$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 129, "y": 42, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 194, "y": 1, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 194, "y": 38, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 172, "y": 112, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 32, "h": 34 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 207, "y": 112, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 32, "h": 34 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 195, "y": 148, "w": 32, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 32, "h": 33 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 195, "y": 183, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 32, "h": 32 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 163, "y": 75, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 197, "y": 75, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 98, "y": 116, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 34 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 1, "y": 81, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 129, "y": 42, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 194, "y": 1, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 194, "y": 38, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 172, "y": 112, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 32, "h": 34 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 207, "y": 112, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 32, "h": 34 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 195, "y": 148, "w": 32, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 32, "h": 33 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 195, "y": 183, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 32, "h": 32 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 163, "y": 75, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 197, "y": 75, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 1, "y": 118, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 34 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 1, "y": 81, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 129, "y": 42, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 194, "y": 1, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 194, "y": 38, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 172, "y": 112, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 32, "h": 34 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 207, "y": 112, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 32, "h": 34 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 195, "y": 148, "w": 32, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 32, "h": 33 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 195, "y": 183, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 32, "h": 32 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 163, "y": 75, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 197, "y": 75, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 1, "y": 118, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 34 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 1, "y": 81, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 129, "y": 42, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 194, "y": 1, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 194, "y": 38, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 172, "y": 112, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 32, "h": 34 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 207, "y": 112, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 32, "h": 34 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 195, "y": 148, "w": 32, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 32, "h": 33 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 195, "y": 183, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 32, "h": 32 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 163, "y": 75, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 197, "y": 75, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 1, "y": 118, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 34 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 1, "y": 81, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 129, "y": 42, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 194, "y": 1, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 194, "y": 38, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 172, "y": 112, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 32, "h": 34 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 207, "y": 112, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 32, "h": 34 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 195, "y": 148, "w": 32, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 32, "h": 33 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 195, "y": 183, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 32, "h": 32 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 163, "y": 75, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 197, "y": 75, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 1, "y": 118, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 34 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 1, "y": 81, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 129, "y": 42, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 200 + }, + { + "filename": "0057.png", + "frame": { "x": 129, "y": 1, "w": 31, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 31, "h": 38 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 1, "y": 1, "w": 30, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 30, "h": 41 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 33, "y": 1, "w": 30, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 30, "h": 41 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 50 + }, + { + "filename": "0060.png", + "frame": { "x": 65, "y": 1, "w": 30, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 30, "h": 41 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 97, "y": 1, "w": 30, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 30, "h": 40 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 162, "y": 1, "w": 30, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 30, "h": 39 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 67, "y": 81, "w": 29, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 29, "h": 38 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 50 + }, + { + "filename": "0064.png", + "frame": { "x": 164, "y": 148, "w": 29, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 29, "h": 37 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 50 + }, + { + "filename": "0065.png", + "frame": { "x": 35, "y": 81, "w": 30, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 30, "h": 37 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 50 + }, + { + "filename": "0066.png", + "frame": { "x": 69, "y": 152, "w": 33, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 14, "w": 33, "h": 32 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 50 + }, + { + "filename": "0067.png", + "frame": { "x": 104, "y": 185, "w": 34, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 16, "w": 34, "h": 30 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 50 + }, + { + "filename": "0068.png", + "frame": { "x": 68, "y": 186, "w": 34, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 17, "w": 34, "h": 29 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 50 + }, + { + "filename": "0069.png", + "frame": { "x": 1, "y": 157, "w": 33, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 14, "w": 33, "h": 32 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 137, "y": 112, "w": 33, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 13, "w": 33, "h": 33 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 750 + }, + { + "filename": "0071.png", + "frame": { "x": 1, "y": 44, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 132, "y": 147, "w": 30, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 30, "h": 36 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 36, "y": 157, "w": 30, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 30, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 35, "y": 121, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 32, "h": 34 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 35, "y": 44, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 69, "y": 44, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 103, "y": 79, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 129, "y": 42, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "656.png", + "format": "I8", + "size": { "w": 240, "h": 216 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/656.png b/public/images/pokemon/exp/656.png index 7afec8b08ee..cc85a92ecbb 100644 Binary files a/public/images/pokemon/exp/656.png and b/public/images/pokemon/exp/656.png differ diff --git a/public/images/pokemon/exp/658-ash.png b/public/images/pokemon/exp/658-ash.png index 6bb84f3e4fd..ced4cbcec71 100644 Binary files a/public/images/pokemon/exp/658-ash.png and b/public/images/pokemon/exp/658-ash.png differ diff --git a/public/images/pokemon/exp/661.json b/public/images/pokemon/exp/661.json index f01755ccdc0..74bcbcb06a0 100644 --- a/public/images/pokemon/exp/661.json +++ b/public/images/pokemon/exp/661.json @@ -1,356 +1,397 @@ -{ - "textures": [ - { - "image": "661.png", - "format": "RGBA8888", - "size": { - "w": 70, - "h": 70 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 32, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 32, - "y": 35, - "w": 32, - "h": 35 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:7dcd93b1058cdbc2640b9885ceb2e854:a2e65850e27a715b371214cfcc8954f8:186d621a544ea0e0e2e0bd57975a29b1$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 38, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0002.png", + "frame": { "x": 32, "y": 113, "w": 31, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 31, "h": 39 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0003.png", + "frame": { "x": 34, "y": 36, "w": 32, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 32, "h": 39 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0004.png", + "frame": { "x": 0, "y": 0, "w": 34, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 34, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0005.png", + "frame": { "x": 32, "y": 75, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 38, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 114, "w": 31, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 31, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 76, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0009.png", + "frame": { "x": 69, "y": 0, "w": 34, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 34, "h": 37 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0010.png", + "frame": { "x": 64, "y": 76, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 38, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0012.png", + "frame": { "x": 32, "y": 113, "w": 31, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 31, "h": 39 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0013.png", + "frame": { "x": 34, "y": 36, "w": 32, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 32, "h": 39 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0014.png", + "frame": { "x": 0, "y": 0, "w": 34, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 34, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0015.png", + "frame": { "x": 32, "y": 75, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 38, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 114, "w": 31, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 31, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 76, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0019.png", + "frame": { "x": 69, "y": 0, "w": 34, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 34, "h": 37 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0020.png", + "frame": { "x": 64, "y": 76, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0021.png", + "frame": { "x": 0, "y": 38, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0022.png", + "frame": { "x": 32, "y": 113, "w": 31, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 31, "h": 39 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0023.png", + "frame": { "x": 34, "y": 36, "w": 32, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 32, "h": 39 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0024.png", + "frame": { "x": 0, "y": 0, "w": 34, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 34, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0025.png", + "frame": { "x": 32, "y": 75, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 38, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 114, "w": 31, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 31, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0028.png", + "frame": { "x": 0, "y": 76, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0029.png", + "frame": { "x": 69, "y": 0, "w": 34, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 34, "h": 37 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0030.png", + "frame": { "x": 64, "y": 76, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0031.png", + "frame": { "x": 0, "y": 38, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0032.png", + "frame": { "x": 66, "y": 37, "w": 32, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 32, "h": 39 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0033.png", + "frame": { "x": 66, "y": 37, "w": 32, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 32, "h": 39 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0034.png", + "frame": { "x": 96, "y": 76, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0035.png", + "frame": { "x": 103, "y": 0, "w": 34, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 34, "h": 37 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0036.png", + "frame": { "x": 34, "y": 0, "w": 35, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 35, "h": 36 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0037.png", + "frame": { "x": 103, "y": 0, "w": 34, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 34, "h": 37 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0038.png", + "frame": { "x": 34, "y": 0, "w": 35, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 35, "h": 36 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0039.png", + "frame": { "x": 103, "y": 0, "w": 34, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 34, "h": 37 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0040.png", + "frame": { "x": 34, "y": 0, "w": 35, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 35, "h": 36 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0041.png", + "frame": { "x": 103, "y": 0, "w": 34, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 34, "h": 37 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0042.png", + "frame": { "x": 98, "y": 37, "w": 32, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 32, "h": 39 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0043.png", + "frame": { "x": 66, "y": 37, "w": 32, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 32, "h": 39 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "format": "I8", + "size": { "w": 137, "h": 152 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/661.png b/public/images/pokemon/exp/661.png index 52e31c9ec73..ebc25efa895 100644 Binary files a/public/images/pokemon/exp/661.png and b/public/images/pokemon/exp/661.png differ diff --git a/public/images/pokemon/exp/662.json b/public/images/pokemon/exp/662.json index a5fb9d1a87c..3600bbcd38d 100644 --- a/public/images/pokemon/exp/662.json +++ b/public/images/pokemon/exp/662.json @@ -1,776 +1,254 @@ -{ - "textures": [ - { - "image": "662.png", - "format": "RGBA8888", - "size": { - "w": 167, - "h": 167 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 56, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 56, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 56, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 56, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 56, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 56, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 56, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 56, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 56, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 56, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 56, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 56, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 56, - "h": 52 - }, - "frame": { - "x": 56, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 56, - "h": 52 - }, - "frame": { - "x": 56, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 56, - "h": 52 - }, - "frame": { - "x": 56, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 56, - "h": 52 - }, - "frame": { - "x": 56, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 1, - "y": 16, - "w": 55, - "h": 37 - }, - "frame": { - "x": 112, - "y": 0, - "w": 55, - "h": 37 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 1, - "y": 16, - "w": 55, - "h": 37 - }, - "frame": { - "x": 112, - "y": 0, - "w": 55, - "h": 37 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 1, - "y": 16, - "w": 55, - "h": 37 - }, - "frame": { - "x": 112, - "y": 0, - "w": 55, - "h": 37 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 1, - "y": 16, - "w": 55, - "h": 37 - }, - "frame": { - "x": 112, - "y": 0, - "w": 55, - "h": 37 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 51 - }, - "frame": { - "x": 0, - "y": 52, - "w": 56, - "h": 51 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 51 - }, - "frame": { - "x": 0, - "y": 52, - "w": 56, - "h": 51 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 51 - }, - "frame": { - "x": 0, - "y": 52, - "w": 56, - "h": 51 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 51 - }, - "frame": { - "x": 0, - "y": 52, - "w": 56, - "h": 51 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 50 - }, - "frame": { - "x": 0, - "y": 103, - "w": 56, - "h": 50 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 50 - }, - "frame": { - "x": 0, - "y": 103, - "w": 56, - "h": 50 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 50 - }, - "frame": { - "x": 0, - "y": 103, - "w": 56, - "h": 50 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 50 - }, - "frame": { - "x": 0, - "y": 103, - "w": 56, - "h": 50 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 56, - "h": 44 - }, - "frame": { - "x": 56, - "y": 52, - "w": 56, - "h": 44 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 56, - "h": 44 - }, - "frame": { - "x": 56, - "y": 52, - "w": 56, - "h": 44 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 56, - "h": 44 - }, - "frame": { - "x": 56, - "y": 96, - "w": 56, - "h": 44 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 56, - "h": 44 - }, - "frame": { - "x": 56, - "y": 96, - "w": 56, - "h": 44 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:fdd7a1bbdeb9b06a84c6e230eaa36b6e:73c8c872230bd4fc874bce8a02ada9b0:e3da2dd0277c18bcc713dc6dd2460c87$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 221, "y": 131, "w": 57, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 17, "w": 57, "h": 61 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 113, "y": 70, "w": 56, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 19, "w": 56, "h": 63 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 335, "y": 136, "w": 49, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 36, "w": 49, "h": 50 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 105, "y": 197, "w": 63, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 33, "w": 63, "h": 51 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 1, "y": 1, "w": 59, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 16, "w": 59, "h": 66 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 119, "y": 1, "w": 56, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 11, "w": 56, "h": 68 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 233, "y": 1, "w": 54, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 7, "w": 54, "h": 70 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 176, "y": 1, "w": 56, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 13, "w": 56, "h": 68 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 288, "y": 1, "w": 59, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 20, "w": 59, "h": 64 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 338, "y": 187, "w": 47, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 30, "w": 47, "h": 48 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 66, "y": 249, "w": 62, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 26, "w": 62, "h": 49 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 1, "y": 68, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 6, "w": 58, "h": 64 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 169, "y": 141, "w": 47, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 17, "w": 47, "h": 49 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 275, "y": 198, "w": 62, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 12, "w": 62, "h": 50 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 61, "y": 1, "w": 57, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 57, "h": 67 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 288, "y": 66, "w": 54, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 54, "h": 69 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 60, "y": 69, "w": 52, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 5, "w": 52, "h": 71 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 170, "y": 70, "w": 50, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 50, "h": 70 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 1, "y": 133, "w": 49, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 13, "w": 49, "h": 70 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 275, "y": 249, "w": 56, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 30, "w": 56, "h": 49 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 1, "y": 205, "w": 64, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 27, "w": 64, "h": 48 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 221, "y": 72, "w": 60, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 13, "w": 60, "h": 58 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 113, "y": 134, "w": 55, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 7, "w": 55, "h": 62 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 223, "y": 193, "w": 51, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 3, "w": 51, "h": 64 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 51, "y": 141, "w": 53, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 7, "w": 53, "h": 63 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 169, "y": 193, "w": 53, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 10, "w": 53, "h": 63 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 279, "y": 136, "w": 55, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 14, "w": 55, "h": 61 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "662.png", + "format": "I8", + "size": { "w": 386, "h": 299 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/662.png b/public/images/pokemon/exp/662.png index e47863f724b..be3e0170e73 100644 Binary files a/public/images/pokemon/exp/662.png and b/public/images/pokemon/exp/662.png differ diff --git a/public/images/pokemon/exp/663.json b/public/images/pokemon/exp/663.json index 7d61c15fd97..8c4ef182132 100644 --- a/public/images/pokemon/exp/663.json +++ b/public/images/pokemon/exp/663.json @@ -1,1700 +1,731 @@ -{ - "textures": [ - { - "image": "663.png", - "format": "RGBA8888", - "size": { - "w": 295, - "h": 295 - }, - "scale": 1, - "frames": [ - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 0, - "y": 27, - "w": 121, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 121, - "h": 58 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 0, - "y": 27, - "w": 121, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 121, - "h": 58 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 0, - "y": 27, - "w": 121, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 121, - "h": 58 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 0, - "y": 27, - "w": 121, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 121, - "h": 58 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 0, - "y": 27, - "w": 121, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 121, - "h": 58 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 0, - "y": 27, - "w": 121, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 121, - "h": 58 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 2, - "y": 27, - "w": 116, - "h": 64 - }, - "frame": { - "x": 121, - "y": 0, - "w": 116, - "h": 64 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 2, - "y": 27, - "w": 116, - "h": 64 - }, - "frame": { - "x": 121, - "y": 0, - "w": 116, - "h": 64 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 2, - "y": 27, - "w": 116, - "h": 64 - }, - "frame": { - "x": 121, - "y": 0, - "w": 116, - "h": 64 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 2, - "y": 27, - "w": 116, - "h": 64 - }, - "frame": { - "x": 121, - "y": 0, - "w": 116, - "h": 64 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 2, - "y": 27, - "w": 116, - "h": 64 - }, - "frame": { - "x": 121, - "y": 0, - "w": 116, - "h": 64 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 2, - "y": 27, - "w": 116, - "h": 64 - }, - "frame": { - "x": 121, - "y": 0, - "w": 116, - "h": 64 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 2, - "y": 27, - "w": 116, - "h": 64 - }, - "frame": { - "x": 121, - "y": 0, - "w": 116, - "h": 64 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 2, - "y": 27, - "w": 116, - "h": 64 - }, - "frame": { - "x": 121, - "y": 0, - "w": 116, - "h": 64 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 2, - "y": 27, - "w": 116, - "h": 64 - }, - "frame": { - "x": 121, - "y": 0, - "w": 116, - "h": 64 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 2, - "y": 27, - "w": 116, - "h": 64 - }, - "frame": { - "x": 121, - "y": 0, - "w": 116, - "h": 64 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 108, - "h": 88 - }, - "frame": { - "x": 0, - "y": 58, - "w": 108, - "h": 88 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 108, - "h": 88 - }, - "frame": { - "x": 0, - "y": 58, - "w": 108, - "h": 88 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 108, - "h": 88 - }, - "frame": { - "x": 0, - "y": 58, - "w": 108, - "h": 88 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 108, - "h": 88 - }, - "frame": { - "x": 0, - "y": 58, - "w": 108, - "h": 88 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 108, - "h": 88 - }, - "frame": { - "x": 0, - "y": 58, - "w": 108, - "h": 88 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 108, - "h": 88 - }, - "frame": { - "x": 0, - "y": 58, - "w": 108, - "h": 88 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 19, - "y": 0, - "w": 87, - "h": 92 - }, - "frame": { - "x": 0, - "y": 146, - "w": 87, - "h": 92 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 19, - "y": 0, - "w": 87, - "h": 92 - }, - "frame": { - "x": 0, - "y": 146, - "w": 87, - "h": 92 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 19, - "y": 0, - "w": 87, - "h": 92 - }, - "frame": { - "x": 0, - "y": 146, - "w": 87, - "h": 92 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 19, - "y": 0, - "w": 87, - "h": 92 - }, - "frame": { - "x": 0, - "y": 146, - "w": 87, - "h": 92 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 19, - "y": 0, - "w": 87, - "h": 92 - }, - "frame": { - "x": 0, - "y": 146, - "w": 87, - "h": 92 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 19, - "y": 0, - "w": 87, - "h": 92 - }, - "frame": { - "x": 0, - "y": 146, - "w": 87, - "h": 92 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 19, - "y": 0, - "w": 87, - "h": 92 - }, - "frame": { - "x": 0, - "y": 146, - "w": 87, - "h": 92 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 19, - "y": 0, - "w": 87, - "h": 92 - }, - "frame": { - "x": 0, - "y": 146, - "w": 87, - "h": 92 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 19, - "y": 0, - "w": 87, - "h": 92 - }, - "frame": { - "x": 0, - "y": 146, - "w": 87, - "h": 92 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 19, - "y": 0, - "w": 87, - "h": 92 - }, - "frame": { - "x": 0, - "y": 146, - "w": 87, - "h": 92 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 92, - "h": 91 - }, - "frame": { - "x": 87, - "y": 146, - "w": 92, - "h": 91 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 92, - "h": 91 - }, - "frame": { - "x": 87, - "y": 146, - "w": 92, - "h": 91 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 92, - "h": 91 - }, - "frame": { - "x": 87, - "y": 146, - "w": 92, - "h": 91 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 92, - "h": 91 - }, - "frame": { - "x": 87, - "y": 146, - "w": 92, - "h": 91 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 92, - "h": 91 - }, - "frame": { - "x": 87, - "y": 146, - "w": 92, - "h": 91 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 92, - "h": 91 - }, - "frame": { - "x": 87, - "y": 146, - "w": 92, - "h": 91 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 92, - "h": 91 - }, - "frame": { - "x": 87, - "y": 146, - "w": 92, - "h": 91 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 92, - "h": 91 - }, - "frame": { - "x": 87, - "y": 146, - "w": 92, - "h": 91 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 92, - "h": 91 - }, - "frame": { - "x": 87, - "y": 146, - "w": 92, - "h": 91 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 92, - "h": 91 - }, - "frame": { - "x": 87, - "y": 146, - "w": 92, - "h": 91 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 92, - "h": 91 - }, - "frame": { - "x": 87, - "y": 146, - "w": 92, - "h": 91 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 92, - "h": 91 - }, - "frame": { - "x": 87, - "y": 146, - "w": 92, - "h": 91 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 9, - "y": 33, - "w": 99, - "h": 58 - }, - "frame": { - "x": 87, - "y": 237, - "w": 99, - "h": 58 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 9, - "y": 33, - "w": 99, - "h": 58 - }, - "frame": { - "x": 87, - "y": 237, - "w": 99, - "h": 58 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 9, - "y": 33, - "w": 99, - "h": 58 - }, - "frame": { - "x": 87, - "y": 237, - "w": 99, - "h": 58 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 9, - "y": 33, - "w": 99, - "h": 58 - }, - "frame": { - "x": 87, - "y": 237, - "w": 99, - "h": 58 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 9, - "y": 33, - "w": 99, - "h": 58 - }, - "frame": { - "x": 87, - "y": 237, - "w": 99, - "h": 58 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 9, - "y": 33, - "w": 99, - "h": 58 - }, - "frame": { - "x": 87, - "y": 237, - "w": 99, - "h": 58 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 9, - "y": 33, - "w": 99, - "h": 58 - }, - "frame": { - "x": 87, - "y": 237, - "w": 99, - "h": 58 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 9, - "y": 33, - "w": 99, - "h": 58 - }, - "frame": { - "x": 87, - "y": 237, - "w": 99, - "h": 58 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 9, - "y": 33, - "w": 99, - "h": 58 - }, - "frame": { - "x": 87, - "y": 237, - "w": 99, - "h": 58 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 9, - "y": 33, - "w": 99, - "h": 58 - }, - "frame": { - "x": 87, - "y": 237, - "w": 99, - "h": 58 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 8, - "y": 13, - "w": 104, - "h": 76 - }, - "frame": { - "x": 186, - "y": 64, - "w": 104, - "h": 76 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 8, - "y": 13, - "w": 104, - "h": 76 - }, - "frame": { - "x": 186, - "y": 64, - "w": 104, - "h": 76 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 8, - "y": 13, - "w": 104, - "h": 76 - }, - "frame": { - "x": 186, - "y": 64, - "w": 104, - "h": 76 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 8, - "y": 13, - "w": 104, - "h": 76 - }, - "frame": { - "x": 186, - "y": 64, - "w": 104, - "h": 76 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 8, - "y": 13, - "w": 104, - "h": 76 - }, - "frame": { - "x": 186, - "y": 64, - "w": 104, - "h": 76 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 8, - "y": 13, - "w": 104, - "h": 76 - }, - "frame": { - "x": 186, - "y": 64, - "w": 104, - "h": 76 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 8, - "y": 13, - "w": 104, - "h": 76 - }, - "frame": { - "x": 186, - "y": 64, - "w": 104, - "h": 76 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 8, - "y": 13, - "w": 104, - "h": 76 - }, - "frame": { - "x": 186, - "y": 64, - "w": 104, - "h": 76 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 8, - "y": 13, - "w": 104, - "h": 76 - }, - "frame": { - "x": 186, - "y": 64, - "w": 104, - "h": 76 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 8, - "y": 13, - "w": 104, - "h": 76 - }, - "frame": { - "x": 186, - "y": 64, - "w": 104, - "h": 76 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 7, - "y": 29, - "w": 103, - "h": 64 - }, - "frame": { - "x": 186, - "y": 140, - "w": 103, - "h": 64 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 7, - "y": 29, - "w": 103, - "h": 64 - }, - "frame": { - "x": 186, - "y": 140, - "w": 103, - "h": 64 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 7, - "y": 29, - "w": 103, - "h": 64 - }, - "frame": { - "x": 186, - "y": 140, - "w": 103, - "h": 64 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 7, - "y": 29, - "w": 103, - "h": 64 - }, - "frame": { - "x": 186, - "y": 140, - "w": 103, - "h": 64 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 7, - "y": 29, - "w": 103, - "h": 64 - }, - "frame": { - "x": 186, - "y": 140, - "w": 103, - "h": 64 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 7, - "y": 29, - "w": 103, - "h": 64 - }, - "frame": { - "x": 186, - "y": 140, - "w": 103, - "h": 64 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 16, - "y": 3, - "w": 95, - "h": 87 - }, - "frame": { - "x": 186, - "y": 204, - "w": 95, - "h": 87 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 16, - "y": 3, - "w": 95, - "h": 87 - }, - "frame": { - "x": 186, - "y": 204, - "w": 95, - "h": 87 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 16, - "y": 3, - "w": 95, - "h": 87 - }, - "frame": { - "x": 186, - "y": 204, - "w": 95, - "h": 87 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 16, - "y": 3, - "w": 95, - "h": 87 - }, - "frame": { - "x": 186, - "y": 204, - "w": 95, - "h": 87 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 16, - "y": 3, - "w": 95, - "h": 87 - }, - "frame": { - "x": 186, - "y": 204, - "w": 95, - "h": 87 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 16, - "y": 3, - "w": 95, - "h": 87 - }, - "frame": { - "x": 186, - "y": 204, - "w": 95, - "h": 87 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 16, - "y": 3, - "w": 95, - "h": 87 - }, - "frame": { - "x": 186, - "y": 204, - "w": 95, - "h": 87 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 16, - "y": 3, - "w": 95, - "h": 87 - }, - "frame": { - "x": 186, - "y": 204, - "w": 95, - "h": 87 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 16, - "y": 3, - "w": 95, - "h": 87 - }, - "frame": { - "x": 186, - "y": 204, - "w": 95, - "h": 87 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 16, - "y": 3, - "w": 95, - "h": 87 - }, - "frame": { - "x": 186, - "y": 204, - "w": 95, - "h": 87 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:df66b59e88a0e2316e65cc2931e2d45a:38fe3e789df33d7d1b51b40128b5adaa:3790d8d72a704a789cc594688d98802e$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 107, "y": 0, "w": 90, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0002.png", + "frame": { "x": 198, "y": 0, "w": 93, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 6, "w": 93, "h": 85 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0003.png", + "frame": { "x": 378, "y": 0, "w": 102, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 16, "w": 102, "h": 74 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0004.png", + "frame": { "x": 115, "y": 90, "w": 121, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 30, "w": 121, "h": 56 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 90, "w": 114, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 30, "w": 114, "h": 62 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0006.png", + "frame": { "x": 378, "y": 75, "w": 101, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 32, "w": 101, "h": 63 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0007.png", + "frame": { "x": 237, "y": 92, "w": 97, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 36, "w": 97, "h": 56 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 0, "w": 106, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 106, "h": 86 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0009.png", + "frame": { "x": 107, "y": 0, "w": 90, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0010.png", + "frame": { "x": 292, "y": 0, "w": 85, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 2, "w": 85, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 107, "y": 0, "w": 90, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0012.png", + "frame": { "x": 198, "y": 0, "w": 93, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 6, "w": 93, "h": 85 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0013.png", + "frame": { "x": 378, "y": 0, "w": 102, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 16, "w": 102, "h": 74 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0014.png", + "frame": { "x": 115, "y": 90, "w": 121, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 30, "w": 121, "h": 56 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0015.png", + "frame": { "x": 0, "y": 90, "w": 114, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 30, "w": 114, "h": 62 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0016.png", + "frame": { "x": 378, "y": 75, "w": 101, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 32, "w": 101, "h": 63 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0017.png", + "frame": { "x": 237, "y": 92, "w": 97, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 36, "w": 97, "h": 56 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 0, "w": 106, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 106, "h": 86 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0019.png", + "frame": { "x": 107, "y": 0, "w": 90, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0020.png", + "frame": { "x": 292, "y": 0, "w": 85, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 2, "w": 85, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 107, "y": 0, "w": 90, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0022.png", + "frame": { "x": 198, "y": 0, "w": 93, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 6, "w": 93, "h": 85 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0023.png", + "frame": { "x": 378, "y": 0, "w": 102, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 16, "w": 102, "h": 74 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0024.png", + "frame": { "x": 115, "y": 90, "w": 121, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 30, "w": 121, "h": 56 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 90, "w": 114, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 30, "w": 114, "h": 62 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0026.png", + "frame": { "x": 378, "y": 75, "w": 101, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 32, "w": 101, "h": 63 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0027.png", + "frame": { "x": 237, "y": 92, "w": 97, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 36, "w": 97, "h": 56 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0028.png", + "frame": { "x": 0, "y": 0, "w": 106, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 106, "h": 86 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0029.png", + "frame": { "x": 107, "y": 0, "w": 90, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0030.png", + "frame": { "x": 292, "y": 0, "w": 85, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 2, "w": 85, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 107, "y": 0, "w": 90, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0032.png", + "frame": { "x": 198, "y": 0, "w": 93, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 6, "w": 93, "h": 85 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0033.png", + "frame": { "x": 378, "y": 0, "w": 102, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 16, "w": 102, "h": 74 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0034.png", + "frame": { "x": 115, "y": 90, "w": 121, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 30, "w": 121, "h": 56 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0035.png", + "frame": { "x": 0, "y": 90, "w": 114, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 30, "w": 114, "h": 62 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0036.png", + "frame": { "x": 378, "y": 75, "w": 101, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 32, "w": 101, "h": 63 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0037.png", + "frame": { "x": 237, "y": 92, "w": 97, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 36, "w": 97, "h": 56 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0038.png", + "frame": { "x": 0, "y": 0, "w": 106, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 106, "h": 86 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0039.png", + "frame": { "x": 107, "y": 0, "w": 90, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0040.png", + "frame": { "x": 292, "y": 0, "w": 85, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 2, "w": 85, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 107, "y": 0, "w": 90, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0042.png", + "frame": { "x": 198, "y": 0, "w": 93, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 6, "w": 93, "h": 85 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0043.png", + "frame": { "x": 378, "y": 0, "w": 102, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 16, "w": 102, "h": 74 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0044.png", + "frame": { "x": 115, "y": 90, "w": 121, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 30, "w": 121, "h": 56 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0045.png", + "frame": { "x": 0, "y": 90, "w": 114, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 30, "w": 114, "h": 62 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0046.png", + "frame": { "x": 378, "y": 75, "w": 101, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 32, "w": 101, "h": 63 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0047.png", + "frame": { "x": 237, "y": 92, "w": 97, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 36, "w": 97, "h": 56 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0048.png", + "frame": { "x": 0, "y": 0, "w": 106, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 106, "h": 86 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0049.png", + "frame": { "x": 107, "y": 0, "w": 90, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0050.png", + "frame": { "x": 292, "y": 0, "w": 85, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 2, "w": 85, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 107, "y": 0, "w": 90, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0052.png", + "frame": { "x": 198, "y": 0, "w": 93, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 6, "w": 93, "h": 85 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0053.png", + "frame": { "x": 378, "y": 0, "w": 102, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 16, "w": 102, "h": 74 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0054.png", + "frame": { "x": 115, "y": 90, "w": 121, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 30, "w": 121, "h": 56 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 90, "w": 114, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 30, "w": 114, "h": 62 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0056.png", + "frame": { "x": 378, "y": 75, "w": 101, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 32, "w": 101, "h": 63 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0057.png", + "frame": { "x": 237, "y": 92, "w": 97, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 36, "w": 97, "h": 56 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0058.png", + "frame": { "x": 0, "y": 0, "w": 106, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 106, "h": 86 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0059.png", + "frame": { "x": 107, "y": 0, "w": 90, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0060.png", + "frame": { "x": 292, "y": 0, "w": 85, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 2, "w": 85, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 198, "y": 0, "w": 93, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 6, "w": 93, "h": 85 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0062.png", + "frame": { "x": 378, "y": 0, "w": 102, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 16, "w": 102, "h": 74 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0063.png", + "frame": { "x": 0, "y": 90, "w": 114, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 30, "w": 114, "h": 62 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0064.png", + "frame": { "x": 237, "y": 92, "w": 97, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 36, "w": 97, "h": 56 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0065.png", + "frame": { "x": 292, "y": 0, "w": 85, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 2, "w": 85, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0066.png", + "frame": { "x": 198, "y": 0, "w": 93, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 6, "w": 93, "h": 85 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0067.png", + "frame": { "x": 378, "y": 0, "w": 102, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 16, "w": 102, "h": 74 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0068.png", + "frame": { "x": 0, "y": 90, "w": 114, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 30, "w": 114, "h": 62 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0069.png", + "frame": { "x": 237, "y": 92, "w": 97, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 36, "w": 97, "h": 56 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0070.png", + "frame": { "x": 292, "y": 0, "w": 85, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 2, "w": 85, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0071.png", + "frame": { "x": 198, "y": 0, "w": 93, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 6, "w": 93, "h": 85 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0072.png", + "frame": { "x": 378, "y": 0, "w": 102, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 16, "w": 102, "h": 74 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0073.png", + "frame": { "x": 0, "y": 90, "w": 114, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 30, "w": 114, "h": 62 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0074.png", + "frame": { "x": 237, "y": 92, "w": 97, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 36, "w": 97, "h": 56 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0075.png", + "frame": { "x": 292, "y": 0, "w": 85, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 2, "w": 85, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0076.png", + "frame": { "x": 198, "y": 0, "w": 93, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 6, "w": 93, "h": 85 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0077.png", + "frame": { "x": 378, "y": 0, "w": 102, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 16, "w": 102, "h": 74 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0078.png", + "frame": { "x": 0, "y": 90, "w": 114, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 30, "w": 114, "h": 62 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0079.png", + "frame": { "x": 237, "y": 92, "w": 97, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 36, "w": 97, "h": 56 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0080.png", + "frame": { "x": 292, "y": 0, "w": 85, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 2, "w": 85, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "663.png", + "format": "I8", + "size": { "w": 480, "h": 152 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/663.png b/public/images/pokemon/exp/663.png index e3f83f2594b..394cec2e0ee 100644 Binary files a/public/images/pokemon/exp/663.png and b/public/images/pokemon/exp/663.png differ diff --git a/public/images/pokemon/exp/664.json b/public/images/pokemon/exp/664.json index b44e028830f..5036fe74b0b 100644 --- a/public/images/pokemon/exp/664.json +++ b/public/images/pokemon/exp/664.json @@ -1,188 +1,110 @@ -{ - "textures": [ - { - "image": "664.png", - "format": "RGBA8888", - "size": { - "w": 84, - "h": 84 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 25, - "h": 43 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 25, - "h": 43 - }, - "frame": { - "x": 0, - "y": 0, - "w": 25, - "h": 43 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 25, - "h": 43 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 25, - "h": 43 - }, - "frame": { - "x": 0, - "y": 0, - "w": 25, - "h": 43 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 25, - "h": 43 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 25, - "h": 43 - }, - "frame": { - "x": 0, - "y": 0, - "w": 25, - "h": 43 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 25, - "h": 43 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 25, - "h": 41 - }, - "frame": { - "x": 0, - "y": 43, - "w": 25, - "h": 41 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 25, - "h": 43 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 25, - "h": 41 - }, - "frame": { - "x": 0, - "y": 43, - "w": 25, - "h": 41 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 25, - "h": 43 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 25, - "h": 43 - }, - "frame": { - "x": 25, - "y": 0, - "w": 25, - "h": 43 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 25, - "h": 43 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 25, - "h": 43 - }, - "frame": { - "x": 25, - "y": 0, - "w": 25, - "h": 43 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 25, - "h": 43 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 25, - "h": 43 - }, - "frame": { - "x": 50, - "y": 0, - "w": 25, - "h": 43 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:463885b13604daf56d9395607b6a199b:02b6779c8edc4d65f396242ab67065d7:596e7d5b15b1bf041c4d7f6707c8ff49$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 46, "w": 26, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 26, "h": 46 }, + "sourceSize": { "w": 28, "h": 46 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 83, "y": 46, "w": 26, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 26, "h": 45 }, + "sourceSize": { "w": 28, "h": 46 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 26, "y": 90, "w": 26, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 26, "h": 45 }, + "sourceSize": { "w": 28, "h": 46 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 52, "y": 91, "w": 26, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 26, "h": 45 }, + "sourceSize": { "w": 28, "h": 46 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 26, "y": 46, "w": 27, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 27, "h": 44 }, + "sourceSize": { "w": 28, "h": 46 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 78, "y": 91, "w": 26, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 26, "h": 44 }, + "sourceSize": { "w": 28, "h": 46 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 56, "y": 0, "w": 28, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 28, "h": 45 }, + "sourceSize": { "w": 28, "h": 46 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 0, "w": 28, "h": 46 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 28, "h": 46 }, + "sourceSize": { "w": 28, "h": 46 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 28, "y": 0, "w": 28, "h": 46 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 28, "h": 46 }, + "sourceSize": { "w": 28, "h": 46 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 84, "y": 0, "w": 27, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 27, "h": 46 }, + "sourceSize": { "w": 28, "h": 46 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 56, "y": 45, "w": 27, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 27, "h": 46 }, + "sourceSize": { "w": 28, "h": 46 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "664.png", + "format": "I8", + "size": { "w": 111, "h": 136 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/664.png b/public/images/pokemon/exp/664.png index 5f7ee7f426e..d626085b5a1 100644 Binary files a/public/images/pokemon/exp/664.png and b/public/images/pokemon/exp/664.png differ diff --git a/public/images/pokemon/exp/665.json b/public/images/pokemon/exp/665.json index 69d1dfa05e2..a06b1d10ad0 100644 --- a/public/images/pokemon/exp/665.json +++ b/public/images/pokemon/exp/665.json @@ -1,188 +1,596 @@ -{ - "textures": [ - { - "image": "665.png", - "format": "RGBA8888", - "size": { - "w": 76, - "h": 76 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 36 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 36 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 36 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 36 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 36 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 36 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 36 - }, - "frame": { - "x": 38, - "y": 0, - "w": 38, - "h": 36 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 36 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 36 - }, - "frame": { - "x": 0, - "y": 36, - "w": 36, - "h": 36 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 36 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 36 - }, - "frame": { - "x": 0, - "y": 36, - "w": 36, - "h": 36 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 38, - "h": 35 - }, - "frame": { - "x": 36, - "y": 36, - "w": 38, - "h": 35 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 38, - "h": 35 - }, - "frame": { - "x": 36, - "y": 36, - "w": 38, - "h": 35 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:359a2e5553846e1cd19ec4ff9a207cd7:96f598328847d5f090f229788215db91:a72e6c94514c750d7462eab6b08ee591$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 36, "y": 76, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 4, "w": 34, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 79, "y": 73, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 5, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 0, "y": 76, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 5, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 115, "y": 103, "w": 36, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 6, "w": 36, "h": 32 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 151, "y": 103, "w": 36, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 7, "w": 36, "h": 31 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 115, "y": 103, "w": 36, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 6, "w": 36, "h": 32 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 76, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 5, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 79, "y": 73, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 5, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 36, "y": 76, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 4, "w": 34, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 36, "y": 76, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 4, "w": 34, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 79, "y": 73, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 5, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 76, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 5, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 115, "y": 103, "w": 36, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 6, "w": 36, "h": 32 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 151, "y": 103, "w": 36, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 7, "w": 36, "h": 31 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 115, "y": 103, "w": 36, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 6, "w": 36, "h": 32 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 0, "y": 76, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 5, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 79, "y": 73, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 5, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 36, "y": 76, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 4, "w": 34, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 36, "y": 76, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 4, "w": 34, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 79, "y": 73, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 5, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 76, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 5, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 115, "y": 103, "w": 36, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 6, "w": 36, "h": 32 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 151, "y": 103, "w": 36, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 7, "w": 36, "h": 31 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 115, "y": 103, "w": 36, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 6, "w": 36, "h": 32 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 76, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 5, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 79, "y": 73, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 5, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 36, "y": 76, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 4, "w": 34, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 159, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 193, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 159, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 40, "y": 41, "w": 39, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 3, "w": 39, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 80, "y": 38, "w": 45, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 3, "w": 45, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 227, "y": 34, "w": 63, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 63, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 80, "y": 0, "w": 74, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 74, "h": 38 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 154, "y": 0, "w": 81, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 81, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 235, "y": 0, "w": 81, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 81, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 0, "w": 80, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 80, "h": 41 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 154, "y": 34, "w": 73, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 4, "w": 73, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 316, "y": 0, "w": 73, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 4, "w": 73, "h": 37 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 290, "y": 37, "w": 53, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 4, "w": 53, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 343, "y": 37, "w": 46, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 3, "w": 46, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 0, "y": 41, "w": 40, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 3, "w": 40, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 227, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 261, "y": 71, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 295, "y": 71, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 329, "y": 72, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 363, "y": 72, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "665.png", + "format": "I8", + "size": { "w": 397, "h": 135 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/665.png b/public/images/pokemon/exp/665.png index 05b0370d0c6..88dc208300f 100644 Binary files a/public/images/pokemon/exp/665.png and b/public/images/pokemon/exp/665.png differ diff --git a/public/images/pokemon/exp/666-fancy.png b/public/images/pokemon/exp/666-fancy.png index 6c23274c5e0..92da507a61f 100644 Binary files a/public/images/pokemon/exp/666-fancy.png and b/public/images/pokemon/exp/666-fancy.png differ diff --git a/public/images/pokemon/exp/666-high-plains.png b/public/images/pokemon/exp/666-high-plains.png index 9d6527bf091..a34b2fd8254 100644 Binary files a/public/images/pokemon/exp/666-high-plains.png and b/public/images/pokemon/exp/666-high-plains.png differ diff --git a/public/images/pokemon/exp/666-meadow.json b/public/images/pokemon/exp/666-meadow.json index ee4f6d31bc0..77158992e59 100644 --- a/public/images/pokemon/exp/666-meadow.json +++ b/public/images/pokemon/exp/666-meadow.json @@ -1,314 +1,551 @@ -{ - "textures": [ - { - "image": "666-meadow.png", - "format": "RGBA8888", - "size": { - "w": 243, - "h": 243 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 93 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 84, - "h": 88 - }, - "frame": { - "x": 0, - "y": 0, - "w": 84, - "h": 88 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 93 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 77, - "h": 89 - }, - "frame": { - "x": 0, - "y": 88, - "w": 77, - "h": 89 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 93 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 77, - "h": 89 - }, - "frame": { - "x": 0, - "y": 88, - "w": 77, - "h": 89 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 93 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 69, - "h": 89 - }, - "frame": { - "x": 77, - "y": 88, - "w": 69, - "h": 89 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 93 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 69, - "h": 89 - }, - "frame": { - "x": 77, - "y": 88, - "w": 69, - "h": 89 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 93 - }, - "spriteSourceSize": { - "x": 10, - "y": 3, - "w": 62, - "h": 87 - }, - "frame": { - "x": 84, - "y": 0, - "w": 62, - "h": 87 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 93 - }, - "spriteSourceSize": { - "x": 10, - "y": 3, - "w": 62, - "h": 87 - }, - "frame": { - "x": 84, - "y": 0, - "w": 62, - "h": 87 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 93 - }, - "spriteSourceSize": { - "x": 13, - "y": 2, - "w": 56, - "h": 86 - }, - "frame": { - "x": 146, - "y": 0, - "w": 56, - "h": 86 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 93 - }, - "spriteSourceSize": { - "x": 13, - "y": 2, - "w": 56, - "h": 86 - }, - "frame": { - "x": 146, - "y": 0, - "w": 56, - "h": 86 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 93 - }, - "spriteSourceSize": { - "x": 19, - "y": 0, - "w": 41, - "h": 85 - }, - "frame": { - "x": 202, - "y": 0, - "w": 41, - "h": 85 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 93 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 51, - "h": 86 - }, - "frame": { - "x": 146, - "y": 86, - "w": 51, - "h": 86 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 93 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 51, - "h": 86 - }, - "frame": { - "x": 146, - "y": 86, - "w": 51, - "h": 86 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 93 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 46, - "h": 86 - }, - "frame": { - "x": 197, - "y": 86, - "w": 46, - "h": 86 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 93 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 46, - "h": 86 - }, - "frame": { - "x": 197, - "y": 86, - "w": 46, - "h": 86 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:223ce33721ef8da9ff40286099c20de4:b82acd304c2a8b8cebeda2043a3e1f96:f8ac4807b4d6eef2256fa1b93e0f89ba$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 14, "w": 67, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 347, "y": 2, "w": 49, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 15, "w": 49, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 16, "w": 67, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 347, "y": 71, "w": 49, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 17, "w": 49, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 18, "w": 67, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 347, "y": 140, "w": 49, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 20, "w": 49, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 209, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 21, "w": 67, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 347, "y": 140, "w": 49, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 20, "w": 49, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 18, "w": 67, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 347, "y": 71, "w": 49, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 17, "w": 49, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 16, "w": 67, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 347, "y": 2, "w": 49, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 15, "w": 49, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0013.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 14, "w": 67, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0014.png", + "frame": { "x": 347, "y": 2, "w": 49, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 15, "w": 49, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0015.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 16, "w": 67, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0016.png", + "frame": { "x": 347, "y": 71, "w": 49, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 17, "w": 49, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0017.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 18, "w": 67, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0018.png", + "frame": { "x": 347, "y": 140, "w": 49, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 20, "w": 49, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0019.png", + "frame": { "x": 209, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 21, "w": 67, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0020.png", + "frame": { "x": 347, "y": 140, "w": 49, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 20, "w": 49, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0021.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 18, "w": 67, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0022.png", + "frame": { "x": 347, "y": 71, "w": 49, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 17, "w": 49, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0023.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 16, "w": 67, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0024.png", + "frame": { "x": 347, "y": 2, "w": 49, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 15, "w": 49, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0025.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 14, "w": 67, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0026.png", + "frame": { "x": 347, "y": 2, "w": 49, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 15, "w": 49, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0027.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 16, "w": 67, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0028.png", + "frame": { "x": 347, "y": 71, "w": 49, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 17, "w": 49, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0029.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 18, "w": 67, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0030.png", + "frame": { "x": 347, "y": 140, "w": 49, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 20, "w": 49, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0031.png", + "frame": { "x": 209, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 21, "w": 67, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0032.png", + "frame": { "x": 347, "y": 140, "w": 49, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 20, "w": 49, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0033.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 18, "w": 67, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0034.png", + "frame": { "x": 347, "y": 71, "w": 49, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 17, "w": 49, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0035.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 16, "w": 67, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0036.png", + "frame": { "x": 347, "y": 2, "w": 49, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 15, "w": 49, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0037.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 14, "w": 67, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0038.png", + "frame": { "x": 2, "y": 209, "w": 49, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 15, "w": 49, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0039.png", + "frame": { "x": 278, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 16, "w": 67, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0040.png", + "frame": { "x": 53, "y": 209, "w": 49, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 17, "w": 49, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0041.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 18, "w": 67, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0042.png", + "frame": { "x": 104, "y": 209, "w": 49, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 19, "w": 49, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0043.png", + "frame": { "x": 71, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 20, "w": 67, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0044.png", + "frame": { "x": 155, "y": 209, "w": 49, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 19, "w": 49, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0045.png", + "frame": { "x": 140, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 18, "w": 67, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0046.png", + "frame": { "x": 206, "y": 209, "w": 49, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 17, "w": 49, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0047.png", + "frame": { "x": 209, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 16, "w": 67, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0048.png", + "frame": { "x": 257, "y": 209, "w": 49, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 15, "w": 49, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0049.png", + "frame": { "x": 278, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 14, "w": 67, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0050.png", + "frame": { "x": 308, "y": 209, "w": 49, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 15, "w": 49, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0051.png", + "frame": { "x": 2, "y": 140, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 16, "w": 67, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0052.png", + "frame": { "x": 53, "y": 209, "w": 49, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 17, "w": 49, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0053.png", + "frame": { "x": 71, "y": 140, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 18, "w": 67, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0054.png", + "frame": { "x": 104, "y": 209, "w": 49, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 19, "w": 49, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0055.png", + "frame": { "x": 140, "y": 140, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 20, "w": 67, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0056.png", + "frame": { "x": 2, "y": 278, "w": 49, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 19, "w": 49, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0057.png", + "frame": { "x": 209, "y": 140, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 18, "w": 67, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0058.png", + "frame": { "x": 53, "y": 278, "w": 49, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 17, "w": 49, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0059.png", + "frame": { "x": 278, "y": 140, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 16, "w": 67, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0060.png", + "frame": { "x": 104, "y": 278, "w": 49, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 15, "w": 49, "h": 67 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-meadow.png", + "format": "I8", + "size": { "w": 398, "h": 347 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/666-meadow.png b/public/images/pokemon/exp/666-meadow.png index 3f9f758ad1f..6912a8d8174 100644 Binary files a/public/images/pokemon/exp/666-meadow.png and b/public/images/pokemon/exp/666-meadow.png differ diff --git a/public/images/pokemon/exp/666-poke-ball.png b/public/images/pokemon/exp/666-poke-ball.png index e33fe6e8c5a..58cae8e2aaa 100644 Binary files a/public/images/pokemon/exp/666-poke-ball.png and b/public/images/pokemon/exp/666-poke-ball.png differ diff --git a/public/images/pokemon/exp/666-river.png b/public/images/pokemon/exp/666-river.png index 1e908ff89b6..433b2c39254 100644 Binary files a/public/images/pokemon/exp/666-river.png and b/public/images/pokemon/exp/666-river.png differ diff --git a/public/images/pokemon/exp/667.json b/public/images/pokemon/exp/667.json index 3667bc80aa0..3fba95afcf9 100644 --- a/public/images/pokemon/exp/667.json +++ b/public/images/pokemon/exp/667.json @@ -1,272 +1,659 @@ -{ - "textures": [ - { - "image": "667.png", - "format": "RGBA8888", - "size": { - "w": 160, - "h": 160 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 40, - "h": 46 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 40, - "h": 46 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 46 - }, - "frame": { - "x": 0, - "y": 46, - "w": 40, - "h": 46 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 46 - }, - "frame": { - "x": 0, - "y": 92, - "w": 40, - "h": 46 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 46 - }, - "frame": { - "x": 40, - "y": 0, - "w": 40, - "h": 46 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 46 - }, - "frame": { - "x": 80, - "y": 0, - "w": 40, - "h": 46 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 40, - "h": 45 - }, - "frame": { - "x": 120, - "y": 0, - "w": 40, - "h": 45 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 40, - "h": 45 - }, - "frame": { - "x": 120, - "y": 0, - "w": 40, - "h": 45 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 40, - "h": 45 - }, - "frame": { - "x": 120, - "y": 45, - "w": 40, - "h": 45 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 40, - "h": 45 - }, - "frame": { - "x": 40, - "y": 90, - "w": 40, - "h": 45 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 40, - "h": 44 - }, - "frame": { - "x": 40, - "y": 46, - "w": 40, - "h": 44 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 40, - "h": 44 - }, - "frame": { - "x": 80, - "y": 46, - "w": 40, - "h": 44 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:0c78c1973ebb266716d5a3a4557bca98:3ab4a906b1847f4048e828e5410eae40:02171d511e760c8a3e1b623ad6bf93f5$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 127, "y": 48, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 50, "w": 39, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 39, "h": 46 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 40, "y": 50, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 39, "h": 45 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 120, "y": 96, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 38, "h": 44 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 80, "y": 96, "w": 39, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 39, "h": 44 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 40, "y": 96, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 39, "h": 45 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 85, "y": 49, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 40, "h": 46 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 127, "y": 48, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 50, "w": 39, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 39, "h": 46 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0013.png", + "frame": { "x": 40, "y": 50, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 39, "h": 45 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0014.png", + "frame": { "x": 120, "y": 96, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 38, "h": 44 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0015.png", + "frame": { "x": 80, "y": 96, "w": 39, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 39, "h": 44 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0016.png", + "frame": { "x": 40, "y": 96, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 39, "h": 45 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0017.png", + "frame": { "x": 85, "y": 49, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 40, "h": 46 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0018.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0019.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0020.png", + "frame": { "x": 127, "y": 48, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0021.png", + "frame": { "x": 0, "y": 50, "w": 39, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 39, "h": 46 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0022.png", + "frame": { "x": 40, "y": 50, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 39, "h": 45 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0023.png", + "frame": { "x": 120, "y": 96, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 38, "h": 44 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0024.png", + "frame": { "x": 80, "y": 96, "w": 39, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 39, "h": 44 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0025.png", + "frame": { "x": 40, "y": 96, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 39, "h": 45 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0026.png", + "frame": { "x": 85, "y": 49, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 40, "h": 46 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0027.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0028.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0029.png", + "frame": { "x": 127, "y": 48, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0030.png", + "frame": { "x": 0, "y": 50, "w": 39, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 39, "h": 46 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0031.png", + "frame": { "x": 40, "y": 50, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 39, "h": 45 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0032.png", + "frame": { "x": 120, "y": 96, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 38, "h": 44 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0033.png", + "frame": { "x": 80, "y": 96, "w": 39, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 39, "h": 44 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0034.png", + "frame": { "x": 40, "y": 96, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 39, "h": 45 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0035.png", + "frame": { "x": 85, "y": 49, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 40, "h": 46 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0036.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0037.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0038.png", + "frame": { "x": 127, "y": 48, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0039.png", + "frame": { "x": 0, "y": 50, "w": 39, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 39, "h": 46 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0040.png", + "frame": { "x": 40, "y": 50, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 39, "h": 45 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0041.png", + "frame": { "x": 120, "y": 96, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 38, "h": 44 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0042.png", + "frame": { "x": 80, "y": 96, "w": 39, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 39, "h": 44 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0043.png", + "frame": { "x": 40, "y": 96, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 39, "h": 45 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0044.png", + "frame": { "x": 85, "y": 49, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 40, "h": 46 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0045.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0046.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0047.png", + "frame": { "x": 127, "y": 48, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0048.png", + "frame": { "x": 0, "y": 50, "w": 39, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 39, "h": 46 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0049.png", + "frame": { "x": 40, "y": 50, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 39, "h": 45 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0050.png", + "frame": { "x": 120, "y": 96, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 38, "h": 44 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0051.png", + "frame": { "x": 80, "y": 96, "w": 39, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 39, "h": 44 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0052.png", + "frame": { "x": 40, "y": 96, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 39, "h": 45 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0053.png", + "frame": { "x": 85, "y": 49, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 40, "h": 46 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0054.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0055.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0056.png", + "frame": { "x": 85, "y": 0, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 41, "h": 48 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0057.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 49 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 49 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0058.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 41, "h": 49 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0059.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 49 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 49 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0060.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 41, "h": 49 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0061.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 49 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 49 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0062.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 41, "h": 49 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0063.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 49 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 49 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0064.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 41, "h": 49 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0065.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 49 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 49 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0066.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 41, "h": 49 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0067.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 49 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 49 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0068.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 41, "h": 49 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0069.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 49 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 49 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0070.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 41, "h": 49 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0071.png", + "frame": { "x": 85, "y": 0, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 41, "h": 48 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0072.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "667.png", + "format": "I8", + "size": { "w": 167, "h": 141 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/667.png b/public/images/pokemon/exp/667.png index 21bbfcc0d68..3ae931300c5 100644 Binary files a/public/images/pokemon/exp/667.png and b/public/images/pokemon/exp/667.png differ diff --git a/public/images/pokemon/exp/668.json b/public/images/pokemon/exp/668.json index 083fdcfb598..63671a548a2 100644 --- a/public/images/pokemon/exp/668.json +++ b/public/images/pokemon/exp/668.json @@ -1,272 +1,821 @@ -{ - "textures": [ - { - "image": "668.png", - "format": "RGBA8888", - "size": { - "w": 205, - "h": 205 - }, - "scale": 1, - "frames": [ - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 70, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 70, - "h": 68 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 70, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 70, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 70, - "h": 69 - }, - "frame": { - "x": 70, - "y": 0, - "w": 70, - "h": 69 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 70, - "h": 69 - }, - "frame": { - "x": 70, - "y": 0, - "w": 70, - "h": 69 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 70, - "h": 69 - }, - "frame": { - "x": 70, - "y": 0, - "w": 70, - "h": 69 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 70, - "h": 69 - }, - "frame": { - "x": 70, - "y": 0, - "w": 70, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 70 - }, - "frame": { - "x": 0, - "y": 68, - "w": 67, - "h": 70 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 70 - }, - "frame": { - "x": 0, - "y": 68, - "w": 67, - "h": 70 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 69, - "h": 70 - }, - "frame": { - "x": 67, - "y": 69, - "w": 69, - "h": 70 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 69, - "h": 70 - }, - "frame": { - "x": 67, - "y": 69, - "w": 69, - "h": 70 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 69, - "h": 70 - }, - "frame": { - "x": 67, - "y": 69, - "w": 69, - "h": 70 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 69, - "h": 70 - }, - "frame": { - "x": 136, - "y": 69, - "w": 69, - "h": 70 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:a0374d38386b4719d8b0a8fcc11d003d:7a4ba7ff9050ba3dee8c8340200f12c2:947bf84d1af493c62e2cef45bb6c19ad$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 67, "y": 222, "w": 70, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 70, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 295, "w": 68, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 68, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 414, "y": 297, "w": 67, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 67, "h": 72 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 196, "y": 367, "w": 65, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 65, "h": 71 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 414, "y": 369, "w": 62, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 62, "h": 72 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 320, "y": 372, "w": 60, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 60, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 380, "y": 441, "w": 58, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 58, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 196, "y": 438, "w": 58, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 61, "y": 370, "w": 60, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 60, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 350, "y": 296, "w": 64, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 64, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 151, "w": 67, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 67, "h": 77 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 283, "y": 149, "w": 68, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 68, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 434, "y": 149, "w": 68, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 68, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 214, "y": 149, "w": 69, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 69, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 282, "y": 225, "w": 68, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 68, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 67, "y": 222, "w": 70, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 70, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 295, "w": 68, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 68, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 414, "y": 297, "w": 67, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 67, "h": 72 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 196, "y": 367, "w": 65, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 65, "h": 71 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 414, "y": 369, "w": 62, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 62, "h": 72 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 320, "y": 372, "w": 60, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 60, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 380, "y": 441, "w": 58, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 58, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 196, "y": 438, "w": 58, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 61, "y": 370, "w": 60, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 60, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 350, "y": 296, "w": 64, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 64, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 151, "w": 67, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 67, "h": 77 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 283, "y": 149, "w": 68, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 68, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 434, "y": 149, "w": 68, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 68, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 214, "y": 149, "w": 69, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 69, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 282, "y": 225, "w": 68, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 68, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 67, "y": 222, "w": 70, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 70, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 295, "w": 68, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 68, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 414, "y": 297, "w": 67, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 67, "h": 72 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 196, "y": 367, "w": 65, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 65, "h": 71 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 414, "y": 369, "w": 62, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 62, "h": 72 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 320, "y": 372, "w": 60, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 60, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 380, "y": 441, "w": 58, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 58, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 196, "y": 438, "w": 58, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 61, "y": 370, "w": 60, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 60, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 350, "y": 296, "w": 64, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 64, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 151, "w": 67, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 67, "h": 77 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 283, "y": 149, "w": 68, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 68, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 434, "y": 149, "w": 68, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 68, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 214, "y": 149, "w": 69, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 69, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 282, "y": 225, "w": 68, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 68, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 67, "y": 222, "w": 70, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 70, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 0, "y": 295, "w": 68, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 68, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 414, "y": 297, "w": 67, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 67, "h": 72 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 196, "y": 367, "w": 65, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 65, "h": 71 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 414, "y": 369, "w": 62, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 62, "h": 72 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 320, "y": 372, "w": 60, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 60, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 380, "y": 441, "w": 58, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 58, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 196, "y": 438, "w": 58, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 61, "y": 370, "w": 60, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 60, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 350, "y": 296, "w": 64, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 64, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 151, "w": 67, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 67, "h": 77 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 283, "y": 149, "w": 68, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 68, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 434, "y": 149, "w": 68, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 68, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 214, "y": 149, "w": 69, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 69, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 282, "y": 225, "w": 68, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 68, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 351, "y": 151, "w": 70, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 70, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 142, "y": 221, "w": 70, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 70, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 351, "y": 224, "w": 70, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 70, "h": 72 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 421, "y": 225, "w": 69, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 69, "h": 72 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 205, "y": 296, "w": 69, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 69, "h": 71 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 212, "y": 224, "w": 70, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 70, "h": 72 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 137, "y": 294, "w": 68, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 68, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 274, "y": 299, "w": 64, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 64, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 0, "y": 368, "w": 61, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 61, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 0, "y": 442, "w": 55, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 55, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 438, "y": 441, "w": 55, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 55, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 261, "y": 372, "w": 59, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 134, "y": 367, "w": 62, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 62, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 68, "y": 295, "w": 66, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 66, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 365, "y": 75, "w": 69, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 69, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 0, "y": 75, "w": 71, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 71, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 442, "y": 74, "w": 72, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 72, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 221, "y": 74, "w": 72, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 72, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 369, "y": 0, "w": 73, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 73, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 296, "y": 0, "w": 73, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 73, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 74, "y": 0, "w": 74, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 74, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 0, "y": 0, "w": 74, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 74, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 148, "y": 0, "w": 74, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 74, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 148, "y": 74, "w": 73, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 73, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 222, "y": 0, "w": 74, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 74, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 442, "y": 0, "w": 73, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 73, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 293, "y": 75, "w": 72, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 72, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 71, "y": 75, "w": 72, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 72, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 71, "y": 149, "w": 71, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 71, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 143, "y": 148, "w": 71, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 71, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "668.png", + "format": "I8", + "size": { "w": 515, "h": 516 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/668.png b/public/images/pokemon/exp/668.png index 36acb70a20f..85be1a55032 100644 Binary files a/public/images/pokemon/exp/668.png and b/public/images/pokemon/exp/668.png differ diff --git a/public/images/pokemon/exp/672.json b/public/images/pokemon/exp/672.json index 7062ea01ab3..f337bef7d29 100644 --- a/public/images/pokemon/exp/672.json +++ b/public/images/pokemon/exp/672.json @@ -1,965 +1,479 @@ -{ - "textures": [ - { - "image": "672.png", - "format": "RGBA8888", - "size": { - "w": 250, - "h": 250 - }, - "scale": 1, - "frames": [ - { - "filename": "0033.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 42 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 42 - }, - "frame": { - "x": 38, - "y": 0, - "w": 38, - "h": 42 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 42 - }, - "frame": { - "x": 76, - "y": 0, - "w": 38, - "h": 42 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 42 - }, - "frame": { - "x": 114, - "y": 0, - "w": 38, - "h": 42 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 42 - }, - "frame": { - "x": 152, - "y": 0, - "w": 38, - "h": 42 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 42 - }, - "frame": { - "x": 190, - "y": 0, - "w": 38, - "h": 42 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 42 - }, - "frame": { - "x": 0, - "y": 42, - "w": 38, - "h": 42 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 42 - }, - "frame": { - "x": 38, - "y": 42, - "w": 38, - "h": 42 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 42 - }, - "frame": { - "x": 76, - "y": 42, - "w": 38, - "h": 42 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 42 - }, - "frame": { - "x": 114, - "y": 42, - "w": 37, - "h": 42 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 42 - }, - "frame": { - "x": 151, - "y": 42, - "w": 37, - "h": 42 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 42 - }, - "frame": { - "x": 188, - "y": 42, - "w": 37, - "h": 42 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 37, - "h": 42 - }, - "frame": { - "x": 0, - "y": 84, - "w": 37, - "h": 42 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 37, - "y": 84, - "w": 36, - "h": 42 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 37, - "y": 84, - "w": 36, - "h": 42 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 37, - "y": 84, - "w": 36, - "h": 42 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 37, - "y": 84, - "w": 36, - "h": 42 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 37, - "y": 84, - "w": 36, - "h": 42 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 37, - "y": 84, - "w": 36, - "h": 42 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 37, - "y": 84, - "w": 36, - "h": 42 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 73, - "y": 84, - "w": 36, - "h": 42 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 73, - "y": 84, - "w": 36, - "h": 42 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 73, - "y": 84, - "w": 36, - "h": 42 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 109, - "y": 84, - "w": 36, - "h": 42 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 109, - "y": 84, - "w": 36, - "h": 42 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 145, - "y": 84, - "w": 36, - "h": 42 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 181, - "y": 84, - "w": 36, - "h": 42 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 0, - "y": 126, - "w": 36, - "h": 42 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 36, - "y": 126, - "w": 36, - "h": 42 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 72, - "y": 126, - "w": 36, - "h": 42 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 108, - "y": 126, - "w": 36, - "h": 42 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 144, - "y": 126, - "w": 36, - "h": 42 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 180, - "y": 126, - "w": 36, - "h": 42 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 36, - "h": 41 - }, - "frame": { - "x": 0, - "y": 168, - "w": 36, - "h": 41 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 36, - "h": 41 - }, - "frame": { - "x": 0, - "y": 168, - "w": 36, - "h": 41 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 36, - "h": 41 - }, - "frame": { - "x": 36, - "y": 168, - "w": 36, - "h": 41 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 36, - "h": 41 - }, - "frame": { - "x": 72, - "y": 168, - "w": 36, - "h": 41 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 36, - "h": 41 - }, - "frame": { - "x": 108, - "y": 168, - "w": 36, - "h": 41 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 36, - "h": 41 - }, - "frame": { - "x": 108, - "y": 168, - "w": 36, - "h": 41 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 36, - "h": 41 - }, - "frame": { - "x": 144, - "y": 168, - "w": 36, - "h": 41 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 35, - "h": 42 - }, - "frame": { - "x": 180, - "y": 168, - "w": 35, - "h": 42 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 35, - "h": 42 - }, - "frame": { - "x": 180, - "y": 168, - "w": 35, - "h": 42 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 35, - "h": 42 - }, - "frame": { - "x": 215, - "y": 168, - "w": 35, - "h": 42 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 36, - "h": 41 - }, - "frame": { - "x": 0, - "y": 209, - "w": 36, - "h": 41 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 36, - "h": 41 - }, - "frame": { - "x": 36, - "y": 209, - "w": 36, - "h": 41 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:38e639fec858918eeed4df6a97e5793c:1f05d1f362d84566f20c17270128fcef:2e4767b7cd134fc0ab1bb6e9eee82bc7$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 127, "y": 50, "w": 42, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 42, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 43, "y": 53, "w": 43, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 43, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 124, "y": 148, "w": 43, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 43, "h": 45 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 102, "w": 42, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 42, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 127, "y": 99, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 41, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 128, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 127, "y": 50, "w": 42, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 42, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 43, "y": 53, "w": 43, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 43, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 124, "y": 148, "w": 43, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 43, "h": 45 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 102, "w": 42, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 42, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 127, "y": 99, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 41, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 128, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 127, "y": 50, "w": 42, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 42, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 43, "y": 53, "w": 43, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 43, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 124, "y": 148, "w": 43, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 43, "h": 45 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 102, "w": 42, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 42, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 127, "y": 99, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 41, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 128, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 127, "y": 50, "w": 42, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 42, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 43, "y": 53, "w": 43, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 43, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 124, "y": 148, "w": 43, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 43, "h": 45 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 102, "w": 42, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 42, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 127, "y": 99, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 41, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 128, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 43, "y": 0, "w": 43, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 43, "h": 53 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 0, "w": 43, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 43, "h": 54 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 42, "y": 100, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 41, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 86, "y": 50, "w": 41, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 41, "h": 51 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 43, "y": 0, "w": 43, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 43, "h": 53 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 0, "w": 43, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 43, "h": 54 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 83, "y": 101, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 41, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 86, "y": 50, "w": 41, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 41, "h": 51 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "672.png", + "format": "I8", + "size": { "w": 170, "h": 193 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/672.png b/public/images/pokemon/exp/672.png index 1af5c35d308..1c261d8d51a 100644 Binary files a/public/images/pokemon/exp/672.png and b/public/images/pokemon/exp/672.png differ diff --git a/public/images/pokemon/exp/674.json b/public/images/pokemon/exp/674.json deleted file mode 100644 index ab275feb366..00000000000 --- a/public/images/pokemon/exp/674.json +++ /dev/null @@ -1,524 +0,0 @@ -{ - "textures": [ - { - "image": "674.png", - "format": "RGBA8888", - "size": { - "w": 90, - "h": 90 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 30, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 40 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 30, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 40 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 30, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 40 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 30, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 40 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 30, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 40 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 30, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 40 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 30, - "h": 39 - }, - "frame": { - "x": 0, - "y": 40, - "w": 30, - "h": 39 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 30, - "h": 39 - }, - "frame": { - "x": 0, - "y": 40, - "w": 30, - "h": 39 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 30, - "h": 39 - }, - "frame": { - "x": 0, - "y": 40, - "w": 30, - "h": 39 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 30, - "h": 39 - }, - "frame": { - "x": 0, - "y": 40, - "w": 30, - "h": 39 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 30, - "h": 39 - }, - "frame": { - "x": 0, - "y": 40, - "w": 30, - "h": 39 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 30, - "h": 39 - }, - "frame": { - "x": 0, - "y": 40, - "w": 30, - "h": 39 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 30, - "h": 39 - }, - "frame": { - "x": 0, - "y": 40, - "w": 30, - "h": 39 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 30, - "h": 39 - }, - "frame": { - "x": 0, - "y": 40, - "w": 30, - "h": 39 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 30, - "h": 39 - }, - "frame": { - "x": 0, - "y": 40, - "w": 30, - "h": 39 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 30, - "h": 39 - }, - "frame": { - "x": 0, - "y": 40, - "w": 30, - "h": 39 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 30, - "h": 39 - }, - "frame": { - "x": 30, - "y": 0, - "w": 30, - "h": 39 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 30, - "h": 39 - }, - "frame": { - "x": 30, - "y": 0, - "w": 30, - "h": 39 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 30, - "h": 37 - }, - "frame": { - "x": 60, - "y": 0, - "w": 30, - "h": 37 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 30, - "h": 37 - }, - "frame": { - "x": 60, - "y": 0, - "w": 30, - "h": 37 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 30, - "h": 37 - }, - "frame": { - "x": 60, - "y": 0, - "w": 30, - "h": 37 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 30, - "h": 37 - }, - "frame": { - "x": 60, - "y": 0, - "w": 30, - "h": 37 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 30, - "h": 37 - }, - "frame": { - "x": 60, - "y": 37, - "w": 30, - "h": 37 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 30, - "h": 37 - }, - "frame": { - "x": 60, - "y": 37, - "w": 30, - "h": 37 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:8a56731ba1ddcc58654c5fd4c09d4b6c:7feee6e8d94135fbc956d541853811cb:b823d10f1c9b4d501296982088ba63d6$" - } -} diff --git a/public/images/pokemon/exp/674.png b/public/images/pokemon/exp/674.png deleted file mode 100644 index 68fd635ed4f..00000000000 Binary files a/public/images/pokemon/exp/674.png and /dev/null differ diff --git a/public/images/pokemon/exp/692.json b/public/images/pokemon/exp/692.json index 935f67c3daa..86b535260ae 100644 --- a/public/images/pokemon/exp/692.json +++ b/public/images/pokemon/exp/692.json @@ -1,356 +1,794 @@ -{ - "textures": [ - { - "image": "692.png", - "format": "RGBA8888", - "size": { - "w": 162, - "h": 162 - }, - "scale": 1, - "frames": [ - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 60, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 60, - "h": 41 - }, - "frame": { - "x": 0, - "y": 0, - "w": 60, - "h": 41 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 60, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 60, - "h": 41 - }, - "frame": { - "x": 0, - "y": 0, - "w": 60, - "h": 41 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 60, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 60, - "h": 41 - }, - "frame": { - "x": 60, - "y": 0, - "w": 60, - "h": 41 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 60, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 60, - "h": 41 - }, - "frame": { - "x": 60, - "y": 0, - "w": 60, - "h": 41 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 60, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 60, - "h": 41 - }, - "frame": { - "x": 0, - "y": 41, - "w": 60, - "h": 41 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 60, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 60, - "h": 41 - }, - "frame": { - "x": 0, - "y": 41, - "w": 60, - "h": 41 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 60, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 60, - "h": 41 - }, - "frame": { - "x": 0, - "y": 82, - "w": 60, - "h": 41 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 60, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 60, - "h": 41 - }, - "frame": { - "x": 0, - "y": 82, - "w": 60, - "h": 41 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 60, - "h": 39 - }, - "frame": { - "x": 0, - "y": 123, - "w": 60, - "h": 39 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 60, - "h": 39 - }, - "frame": { - "x": 0, - "y": 123, - "w": 60, - "h": 39 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 60, - "h": 39 - }, - "frame": { - "x": 60, - "y": 41, - "w": 60, - "h": 39 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 60, - "h": 39 - }, - "frame": { - "x": 60, - "y": 41, - "w": 60, - "h": 39 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 60, - "h": 39 - }, - "frame": { - "x": 60, - "y": 41, - "w": 60, - "h": 39 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 60, - "h": 39 - }, - "frame": { - "x": 60, - "y": 41, - "w": 60, - "h": 39 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 41 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 59, - "h": 41 - }, - "frame": { - "x": 60, - "y": 80, - "w": 59, - "h": 41 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 41 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 59, - "h": 41 - }, - "frame": { - "x": 60, - "y": 121, - "w": 59, - "h": 41 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:770fa5fad1cc8a443ce0a20fecd29c87:eb7f111f1bbee8cd3438d375d4fb00f7:2880def858c84cd859bedf13b0b49a33$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0002.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0003.png", + "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0004.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0005.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0006.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0007.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0008.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0009.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0010.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0011.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0012.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0013.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0014.png", + "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0015.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0016.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0017.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0018.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0019.png", + "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0020.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0021.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0022.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0023.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0024.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0025.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0026.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0027.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0028.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0029.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0030.png", + "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0031.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0032.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0033.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0034.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0035.png", + "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0036.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0037.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0038.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0039.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0040.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0041.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0042.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0043.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0044.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0045.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0046.png", + "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0047.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0048.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0049.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0050.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0051.png", + "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0052.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0053.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0054.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0055.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0056.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0057.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0058.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0059.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0060.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0063.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0064.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0065.png", + "frame": { "x": 178, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0066.png", + "frame": { "x": 178, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0067.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0068.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0069.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0070.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0071.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0072.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0073.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0074.png", + "frame": { "x": 1, "y": 71, "w": 57, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 57, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0075.png", + "frame": { "x": 1, "y": 71, "w": 57, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 57, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0076.png", + "frame": { "x": 117, "y": 72, "w": 59, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0077.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0078.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0079.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0080.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0081.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0082.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0083.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0084.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0085.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0086.png", + "frame": { "x": 178, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0087.png", + "frame": { "x": 178, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "692.png", + "format": "I8", + "size": { "w": 239, "h": 106 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/692.png b/public/images/pokemon/exp/692.png index 976faaf76a4..1e42cbf47fa 100644 Binary files a/public/images/pokemon/exp/692.png and b/public/images/pokemon/exp/692.png differ diff --git a/public/images/pokemon/exp/693.json b/public/images/pokemon/exp/693.json index b5b81735f10..c8f7763de1d 100644 --- a/public/images/pokemon/exp/693.json +++ b/public/images/pokemon/exp/693.json @@ -1,272 +1,902 @@ -{ - "textures": [ - { - "image": "693.png", - "format": "RGBA8888", - "size": { - "w": 259, - "h": 259 - }, - "scale": 1, - "frames": [ - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 86, - "h": 89 - }, - "frame": { - "x": 0, - "y": 0, - "w": 86, - "h": 89 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 86, - "h": 89 - }, - "frame": { - "x": 0, - "y": 0, - "w": 86, - "h": 89 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 89 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 85, - "h": 89 - }, - "frame": { - "x": 0, - "y": 89, - "w": 85, - "h": 89 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 89 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 85, - "h": 89 - }, - "frame": { - "x": 0, - "y": 89, - "w": 85, - "h": 89 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 85, - "h": 89 - }, - "frame": { - "x": 86, - "y": 0, - "w": 85, - "h": 89 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 85, - "h": 89 - }, - "frame": { - "x": 86, - "y": 0, - "w": 85, - "h": 89 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 85, - "h": 89 - }, - "frame": { - "x": 85, - "y": 89, - "w": 85, - "h": 89 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 85, - "h": 88 - }, - "frame": { - "x": 171, - "y": 0, - "w": 85, - "h": 88 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 85, - "h": 88 - }, - "frame": { - "x": 171, - "y": 0, - "w": 85, - "h": 88 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 89 - }, - "spriteSourceSize": { - "x": 1, - "y": 8, - "w": 91, - "h": 80 - }, - "frame": { - "x": 0, - "y": 178, - "w": 91, - "h": 80 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 89 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 89, - "h": 83 - }, - "frame": { - "x": 170, - "y": 89, - "w": 89, - "h": 83 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 89 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 89, - "h": 83 - }, - "frame": { - "x": 170, - "y": 89, - "w": 89, - "h": 83 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:8606ef5d207ca2100dda49cb1d79599e:d3c4f159e863b497f7925b3a24df9e4b:9c1f9147e693c05eb4655590e9099679$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 416, "y": 214, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 91, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 405, "y": 145, "w": 103, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 207, "y": 344, "w": 105, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 17, "w": 105, "h": 62 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 507, "y": 285, "w": 105, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 18, "w": 105, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 412, "y": 1, "w": 104, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 104, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 1, "y": 145, "w": 99, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 14, "w": 99, "h": 72 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 1, "y": 76, "w": 105, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 105, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 507, "y": 219, "w": 104, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 24, "w": 104, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 1, "y": 283, "w": 102, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 23, "w": 102, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 207, "y": 1, "w": 99, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 99, "h": 77 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 517, "y": 74, "w": 93, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 93, "h": 78 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 106, "y": 78, "w": 102, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 12, "w": 102, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 421, "y": 348, "w": 102, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 102, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 312, "y": 354, "w": 100, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 100, "h": 61 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 416, "y": 214, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 91, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 405, "y": 145, "w": 103, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 207, "y": 344, "w": 105, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 17, "w": 105, "h": 62 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 507, "y": 285, "w": 105, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 18, "w": 105, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 412, "y": 1, "w": 104, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 104, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 1, "y": 145, "w": 99, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 14, "w": 99, "h": 72 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 1, "y": 76, "w": 105, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 105, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 507, "y": 219, "w": 104, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 24, "w": 104, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 1, "y": 283, "w": 102, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 23, "w": 102, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 207, "y": 1, "w": 99, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 99, "h": 77 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 517, "y": 74, "w": 93, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 93, "h": 78 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 106, "y": 78, "w": 102, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 12, "w": 102, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 421, "y": 348, "w": 102, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 102, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 312, "y": 354, "w": 100, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 100, "h": 61 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 416, "y": 214, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 91, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 405, "y": 145, "w": 103, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 207, "y": 344, "w": 105, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 17, "w": 105, "h": 62 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 507, "y": 285, "w": 105, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 18, "w": 105, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 412, "y": 1, "w": 104, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 104, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 1, "y": 145, "w": 99, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 14, "w": 99, "h": 72 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 1, "y": 76, "w": 105, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 105, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 507, "y": 219, "w": 104, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 24, "w": 104, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 1, "y": 283, "w": 102, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 23, "w": 102, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 207, "y": 1, "w": 99, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 99, "h": 77 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 517, "y": 74, "w": 93, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 93, "h": 78 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 106, "y": 78, "w": 102, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 12, "w": 102, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 421, "y": 348, "w": 102, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 102, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 312, "y": 354, "w": 100, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 100, "h": 61 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 416, "y": 214, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 91, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 405, "y": 145, "w": 103, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 207, "y": 344, "w": 105, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 17, "w": 105, "h": 62 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 507, "y": 285, "w": 105, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 18, "w": 105, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 412, "y": 1, "w": 104, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 104, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 1, "y": 145, "w": 99, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 14, "w": 99, "h": 72 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 1, "y": 76, "w": 105, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 105, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 507, "y": 219, "w": 104, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 24, "w": 104, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 1, "y": 283, "w": 102, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 23, "w": 102, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 207, "y": 1, "w": 99, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 99, "h": 77 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 517, "y": 74, "w": 93, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 93, "h": 78 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 106, "y": 78, "w": 102, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 12, "w": 102, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 421, "y": 348, "w": 102, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 102, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 312, "y": 354, "w": 100, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 100, "h": 61 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 416, "y": 214, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 91, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 405, "y": 145, "w": 103, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 207, "y": 344, "w": 105, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 17, "w": 105, "h": 62 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 507, "y": 285, "w": 105, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 18, "w": 105, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 412, "y": 1, "w": 104, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 104, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 1, "y": 145, "w": 99, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 14, "w": 99, "h": 72 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 1, "y": 76, "w": 105, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 105, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 507, "y": 219, "w": 104, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 24, "w": 104, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 1, "y": 283, "w": 102, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 23, "w": 102, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 207, "y": 1, "w": 99, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 99, "h": 77 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 517, "y": 74, "w": 93, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 93, "h": 78 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 106, "y": 78, "w": 102, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 12, "w": 102, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 421, "y": 348, "w": 102, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 102, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 312, "y": 354, "w": 100, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 100, "h": 61 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 303, "y": 140, "w": 102, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 5, "w": 102, "h": 70 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 523, "y": 348, "w": 102, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 11, "w": 102, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 318, "y": 290, "w": 103, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 7, "w": 103, "h": 64 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 105, "y": 1, "w": 102, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 0, "w": 102, "h": 75 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 306, "y": 72, "w": 108, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 108, "h": 68 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 108, "y": 276, "w": 105, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 14, "w": 105, "h": 65 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 1, "y": 1, "w": 104, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 104, "h": 74 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 203, "y": 210, "w": 106, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 13, "w": 106, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 508, "y": 152, "w": 106, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 106, "h": 67 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 414, "y": 74, "w": 103, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 8, "w": 103, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 306, "y": 72, "w": 108, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 108, "h": 68 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 108, "y": 276, "w": 105, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 14, "w": 105, "h": 65 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 1, "y": 1, "w": 104, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 104, "h": 74 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 203, "y": 210, "w": 106, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 13, "w": 106, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 309, "y": 214, "w": 107, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 14, "w": 107, "h": 65 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 306, "y": 1, "w": 106, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 9, "w": 106, "h": 70 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 1, "y": 218, "w": 107, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 14, "w": 107, "h": 65 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 213, "y": 279, "w": 105, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 105, "h": 65 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 103, "y": 341, "w": 104, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 104, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 516, "y": 1, "w": 101, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 5, "w": 101, "h": 73 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 100, "y": 149, "w": 103, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 1, "y": 349, "w": 102, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 16, "w": 102, "h": 62 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 103, "y": 404, "w": 100, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 16, "w": 100, "h": 61 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "693.png", + "format": "I8", + "size": { "w": 626, "h": 466 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/693.png b/public/images/pokemon/exp/693.png index 538f2f11f73..2e8f1ccd05c 100644 Binary files a/public/images/pokemon/exp/693.png and b/public/images/pokemon/exp/693.png differ diff --git a/public/images/pokemon/exp/694.json b/public/images/pokemon/exp/694.json deleted file mode 100644 index 12cc0369cc2..00000000000 --- a/public/images/pokemon/exp/694.json +++ /dev/null @@ -1,272 +0,0 @@ -{ - "textures": [ - { - "image": "694.png", - "format": "RGBA8888", - "size": { - "w": 140, - "h": 140 - }, - "scale": 1, - "frames": [ - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 37 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 44, - "h": 34 - }, - "frame": { - "x": 0, - "y": 0, - "w": 44, - "h": 34 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 37 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 43, - "h": 34 - }, - "frame": { - "x": 0, - "y": 34, - "w": 43, - "h": 34 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 37 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 43, - "h": 34 - }, - "frame": { - "x": 44, - "y": 0, - "w": 43, - "h": 34 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 37 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 41, - "h": 35 - }, - "frame": { - "x": 0, - "y": 68, - "w": 41, - "h": 35 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 37 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 36, - "h": 37 - }, - "frame": { - "x": 0, - "y": 103, - "w": 36, - "h": 37 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 37 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 36, - "h": 37 - }, - "frame": { - "x": 0, - "y": 103, - "w": 36, - "h": 37 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 37 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 34, - "h": 37 - }, - "frame": { - "x": 36, - "y": 103, - "w": 34, - "h": 37 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 37 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 41, - "h": 35 - }, - "frame": { - "x": 87, - "y": 0, - "w": 41, - "h": 35 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 37 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 39, - "h": 36 - }, - "frame": { - "x": 43, - "y": 34, - "w": 39, - "h": 36 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 37 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 39, - "h": 36 - }, - "frame": { - "x": 82, - "y": 35, - "w": 39, - "h": 36 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 37 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 33, - "h": 37 - }, - "frame": { - "x": 70, - "y": 71, - "w": 33, - "h": 37 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 37 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 31, - "h": 37 - }, - "frame": { - "x": 103, - "y": 71, - "w": 31, - "h": 37 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:c6f790c1c7c7e284eb98dfeaad75e635:7e95f5e91c561cc43d0e8ef8188f18b3:b0990f9650cfe63b836cbed33f0b44d8$" - } -} diff --git a/public/images/pokemon/exp/694.png b/public/images/pokemon/exp/694.png deleted file mode 100644 index 671d9517e4c..00000000000 Binary files a/public/images/pokemon/exp/694.png and /dev/null differ diff --git a/public/images/pokemon/exp/696.json b/public/images/pokemon/exp/696.json index 3bc9dae1999..f95124e3f31 100644 --- a/public/images/pokemon/exp/696.json +++ b/public/images/pokemon/exp/696.json @@ -1,692 +1,1054 @@ -{ - "textures": [ - { - "image": "696.png", - "format": "RGBA8888", - "size": { - "w": 135, - "h": 135 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 53, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 53, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 53, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 53, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 53, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 53, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 53, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 53, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 53, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 53, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 0, - "y": 46, - "w": 53, - "h": 46 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 0, - "y": 46, - "w": 53, - "h": 46 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 53, - "h": 43 - }, - "frame": { - "x": 0, - "y": 92, - "w": 53, - "h": 43 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 53, - "h": 43 - }, - "frame": { - "x": 0, - "y": 92, - "w": 53, - "h": 43 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 53, - "h": 45 - }, - "frame": { - "x": 53, - "y": 46, - "w": 53, - "h": 45 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 53, - "h": 45 - }, - "frame": { - "x": 53, - "y": 46, - "w": 53, - "h": 45 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 53, - "h": 45 - }, - "frame": { - "x": 53, - "y": 46, - "w": 53, - "h": 45 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 53, - "h": 45 - }, - "frame": { - "x": 53, - "y": 46, - "w": 53, - "h": 45 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 53, - "h": 45 - }, - "frame": { - "x": 53, - "y": 46, - "w": 53, - "h": 45 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 53, - "h": 45 - }, - "frame": { - "x": 53, - "y": 46, - "w": 53, - "h": 45 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 53, - "h": 45 - }, - "frame": { - "x": 53, - "y": 46, - "w": 53, - "h": 45 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 53, - "h": 45 - }, - "frame": { - "x": 53, - "y": 46, - "w": 53, - "h": 45 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 44 - }, - "frame": { - "x": 53, - "y": 91, - "w": 53, - "h": 44 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 44 - }, - "frame": { - "x": 53, - "y": 91, - "w": 53, - "h": 44 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 44 - }, - "frame": { - "x": 53, - "y": 91, - "w": 53, - "h": 44 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 44 - }, - "frame": { - "x": 53, - "y": 91, - "w": 53, - "h": 44 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:f6c90e8287d3ce2aa68c9fef98f6e12f:24cf84ba4764bd88b4e751ca1911a8d5:58b7763fb9abdd043e9bfa400cfafdef$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0002.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0003.png", + "frame": { "x": 114, "y": 0, "w": 57, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 57, "h": 47 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0004.png", + "frame": { "x": 114, "y": 0, "w": 57, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 57, "h": 47 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0005.png", + "frame": { "x": 57, "y": 0, "w": 57, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 57, "h": 48 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0006.png", + "frame": { "x": 57, "y": 0, "w": 57, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 57, "h": 48 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 0, "w": 57, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 57, "h": 50 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 0, "w": 57, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 57, "h": 50 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0009.png", + "frame": { "x": 114, "y": 0, "w": 57, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 57, "h": 47 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0010.png", + "frame": { "x": 113, "y": 93, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 57, "h": 44 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0011.png", + "frame": { "x": 170, "y": 92, "w": 57, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 57, "h": 45 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0012.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0013.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0014.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0015.png", + "frame": { "x": 56, "y": 94, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 57, "h": 44 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0016.png", + "frame": { "x": 56, "y": 94, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 57, "h": 44 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0017.png", + "frame": { "x": 113, "y": 137, "w": 58, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 58, "h": 42 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0018.png", + "frame": { "x": 113, "y": 137, "w": 58, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 58, "h": 42 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0019.png", + "frame": { "x": 0, "y": 138, "w": 58, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 58, "h": 40 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0020.png", + "frame": { "x": 0, "y": 138, "w": 58, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 58, "h": 40 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0021.png", + "frame": { "x": 56, "y": 94, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 57, "h": 44 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0022.png", + "frame": { "x": 113, "y": 93, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 57, "h": 44 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0023.png", + "frame": { "x": 170, "y": 92, "w": 57, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 57, "h": 45 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0024.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0025.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0026.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0027.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0028.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0029.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0030.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0031.png", + "frame": { "x": 114, "y": 0, "w": 57, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 57, "h": 47 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0032.png", + "frame": { "x": 114, "y": 0, "w": 57, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 57, "h": 47 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0033.png", + "frame": { "x": 57, "y": 0, "w": 57, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 57, "h": 48 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0034.png", + "frame": { "x": 57, "y": 0, "w": 57, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 57, "h": 48 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0035.png", + "frame": { "x": 0, "y": 0, "w": 57, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 57, "h": 50 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 0, "w": 57, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 57, "h": 50 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0037.png", + "frame": { "x": 114, "y": 0, "w": 57, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 57, "h": 47 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0038.png", + "frame": { "x": 113, "y": 93, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 57, "h": 44 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0039.png", + "frame": { "x": 170, "y": 92, "w": 57, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 57, "h": 45 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0040.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0041.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0042.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0043.png", + "frame": { "x": 56, "y": 94, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 57, "h": 44 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0044.png", + "frame": { "x": 56, "y": 94, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 57, "h": 44 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0045.png", + "frame": { "x": 113, "y": 137, "w": 58, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 58, "h": 42 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0046.png", + "frame": { "x": 113, "y": 137, "w": 58, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 58, "h": 42 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0047.png", + "frame": { "x": 0, "y": 138, "w": 58, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 58, "h": 40 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0048.png", + "frame": { "x": 0, "y": 138, "w": 58, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 58, "h": 40 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0049.png", + "frame": { "x": 56, "y": 94, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 57, "h": 44 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0050.png", + "frame": { "x": 113, "y": 93, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 57, "h": 44 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0051.png", + "frame": { "x": 170, "y": 92, "w": 57, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 57, "h": 45 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0052.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0053.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0054.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0055.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0056.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0057.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0058.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0059.png", + "frame": { "x": 114, "y": 0, "w": 57, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 57, "h": 47 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0060.png", + "frame": { "x": 114, "y": 0, "w": 57, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 57, "h": 47 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 57, "y": 0, "w": 57, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 57, "h": 48 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 57, "y": 0, "w": 57, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 57, "h": 48 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0063.png", + "frame": { "x": 0, "y": 0, "w": 57, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 57, "h": 50 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0064.png", + "frame": { "x": 0, "y": 0, "w": 57, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 57, "h": 50 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0065.png", + "frame": { "x": 114, "y": 0, "w": 57, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 57, "h": 47 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0066.png", + "frame": { "x": 113, "y": 93, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 57, "h": 44 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0067.png", + "frame": { "x": 170, "y": 92, "w": 57, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 57, "h": 45 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0068.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0069.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0070.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0071.png", + "frame": { "x": 56, "y": 94, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 57, "h": 44 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0072.png", + "frame": { "x": 56, "y": 94, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 57, "h": 44 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0073.png", + "frame": { "x": 113, "y": 137, "w": 58, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 58, "h": 42 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0074.png", + "frame": { "x": 113, "y": 137, "w": 58, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 58, "h": 42 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0075.png", + "frame": { "x": 0, "y": 138, "w": 58, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 58, "h": 40 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0076.png", + "frame": { "x": 0, "y": 138, "w": 58, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 58, "h": 40 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0077.png", + "frame": { "x": 56, "y": 94, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 57, "h": 44 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0078.png", + "frame": { "x": 113, "y": 93, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 57, "h": 44 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0079.png", + "frame": { "x": 170, "y": 92, "w": 57, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 57, "h": 45 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0080.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0081.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0082.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0083.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0084.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0085.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0086.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0087.png", + "frame": { "x": 227, "y": 92, "w": 55, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 55, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0088.png", + "frame": { "x": 227, "y": 92, "w": 55, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 55, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0089.png", + "frame": { "x": 228, "y": 46, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 56, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0090.png", + "frame": { "x": 228, "y": 46, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 56, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0091.png", + "frame": { "x": 114, "y": 47, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 56, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0092.png", + "frame": { "x": 114, "y": 47, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 56, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0093.png", + "frame": { "x": 171, "y": 0, "w": 58, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 58, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0094.png", + "frame": { "x": 171, "y": 0, "w": 58, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 58, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0095.png", + "frame": { "x": 171, "y": 46, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0096.png", + "frame": { "x": 57, "y": 48, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 56, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0097.png", + "frame": { "x": 57, "y": 48, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 56, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0098.png", + "frame": { "x": 0, "y": 50, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 56, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0099.png", + "frame": { "x": 0, "y": 50, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 56, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0100.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0101.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0102.png", + "frame": { "x": 227, "y": 92, "w": 55, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 55, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0103.png", + "frame": { "x": 227, "y": 92, "w": 55, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 55, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0104.png", + "frame": { "x": 228, "y": 46, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 56, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0105.png", + "frame": { "x": 228, "y": 46, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 56, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0106.png", + "frame": { "x": 114, "y": 47, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 56, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0107.png", + "frame": { "x": 114, "y": 47, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 56, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0108.png", + "frame": { "x": 171, "y": 0, "w": 58, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 58, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0109.png", + "frame": { "x": 171, "y": 0, "w": 58, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 58, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0110.png", + "frame": { "x": 171, "y": 46, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0111.png", + "frame": { "x": 57, "y": 48, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 56, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0112.png", + "frame": { "x": 57, "y": 48, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 56, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0113.png", + "frame": { "x": 0, "y": 50, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 56, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0114.png", + "frame": { "x": 0, "y": 50, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 56, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0115.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0116.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "format": "I8", + "size": { "w": 286, "h": 179 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/696.png b/public/images/pokemon/exp/696.png index 8dd6b2cf6c7..7892c40e52b 100644 Binary files a/public/images/pokemon/exp/696.png and b/public/images/pokemon/exp/696.png differ diff --git a/public/images/pokemon/exp/697.json b/public/images/pokemon/exp/697.json index 9120976bb53..c56de41946c 100644 --- a/public/images/pokemon/exp/697.json +++ b/public/images/pokemon/exp/697.json @@ -1,1175 +1,983 @@ -{ - "textures": [ - { - "image": "697.png", - "format": "RGBA8888", - "size": { - "w": 378, - "h": 378 - }, - "scale": 1, - "frames": [ - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 76, - "h": 76 - }, - "frame": { - "x": 0, - "y": 0, - "w": 76, - "h": 76 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 76, - "h": 76 - }, - "frame": { - "x": 0, - "y": 0, - "w": 76, - "h": 76 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 76, - "h": 76 - }, - "frame": { - "x": 0, - "y": 0, - "w": 76, - "h": 76 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 76, - "h": 76 - }, - "frame": { - "x": 0, - "y": 0, - "w": 76, - "h": 76 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 76, - "h": 76 - }, - "frame": { - "x": 0, - "y": 76, - "w": 76, - "h": 76 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 76, - "h": 76 - }, - "frame": { - "x": 0, - "y": 76, - "w": 76, - "h": 76 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 76, - "h": 76 - }, - "frame": { - "x": 0, - "y": 76, - "w": 76, - "h": 76 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 76, - "h": 76 - }, - "frame": { - "x": 0, - "y": 76, - "w": 76, - "h": 76 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 76, - "h": 75 - }, - "frame": { - "x": 76, - "y": 0, - "w": 76, - "h": 75 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 76, - "h": 75 - }, - "frame": { - "x": 76, - "y": 0, - "w": 76, - "h": 75 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 76, - "h": 75 - }, - "frame": { - "x": 76, - "y": 0, - "w": 76, - "h": 75 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 76, - "h": 75 - }, - "frame": { - "x": 76, - "y": 0, - "w": 76, - "h": 75 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 75, - "h": 75 - }, - "frame": { - "x": 0, - "y": 152, - "w": 75, - "h": 75 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 75, - "h": 75 - }, - "frame": { - "x": 0, - "y": 152, - "w": 75, - "h": 75 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 75, - "h": 75 - }, - "frame": { - "x": 0, - "y": 152, - "w": 75, - "h": 75 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 75, - "h": 75 - }, - "frame": { - "x": 0, - "y": 152, - "w": 75, - "h": 75 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 76, - "h": 74 - }, - "frame": { - "x": 76, - "y": 75, - "w": 76, - "h": 74 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 75, - "h": 75 - }, - "frame": { - "x": 152, - "y": 0, - "w": 75, - "h": 75 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 76, - "h": 74 - }, - "frame": { - "x": 227, - "y": 0, - "w": 76, - "h": 74 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 74, - "h": 75 - }, - "frame": { - "x": 0, - "y": 227, - "w": 74, - "h": 75 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 74, - "h": 75 - }, - "frame": { - "x": 0, - "y": 227, - "w": 74, - "h": 75 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 74, - "h": 75 - }, - "frame": { - "x": 0, - "y": 227, - "w": 74, - "h": 75 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 74, - "h": 75 - }, - "frame": { - "x": 0, - "y": 227, - "w": 74, - "h": 75 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 69, - "h": 76 - }, - "frame": { - "x": 0, - "y": 302, - "w": 69, - "h": 76 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 69, - "h": 76 - }, - "frame": { - "x": 0, - "y": 302, - "w": 69, - "h": 76 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 74, - "h": 74 - }, - "frame": { - "x": 152, - "y": 75, - "w": 74, - "h": 74 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 74, - "h": 74 - }, - "frame": { - "x": 152, - "y": 75, - "w": 74, - "h": 74 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 74, - "h": 74 - }, - "frame": { - "x": 152, - "y": 75, - "w": 74, - "h": 74 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 74, - "h": 74 - }, - "frame": { - "x": 152, - "y": 75, - "w": 74, - "h": 74 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 74, - "h": 74 - }, - "frame": { - "x": 303, - "y": 0, - "w": 74, - "h": 74 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 74, - "h": 74 - }, - "frame": { - "x": 303, - "y": 0, - "w": 74, - "h": 74 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 72, - "h": 75 - }, - "frame": { - "x": 69, - "y": 302, - "w": 72, - "h": 75 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 72, - "h": 75 - }, - "frame": { - "x": 69, - "y": 302, - "w": 72, - "h": 75 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 72, - "h": 75 - }, - "frame": { - "x": 69, - "y": 302, - "w": 72, - "h": 75 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 72, - "h": 75 - }, - "frame": { - "x": 69, - "y": 302, - "w": 72, - "h": 75 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 71, - "h": 75 - }, - "frame": { - "x": 74, - "y": 227, - "w": 71, - "h": 75 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 71, - "h": 75 - }, - "frame": { - "x": 74, - "y": 227, - "w": 71, - "h": 75 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 71, - "h": 75 - }, - "frame": { - "x": 74, - "y": 227, - "w": 71, - "h": 75 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 71, - "h": 75 - }, - "frame": { - "x": 74, - "y": 227, - "w": 71, - "h": 75 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 73, - "h": 75 - }, - "frame": { - "x": 75, - "y": 152, - "w": 73, - "h": 75 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 73, - "h": 75 - }, - "frame": { - "x": 75, - "y": 152, - "w": 73, - "h": 75 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 73, - "h": 75 - }, - "frame": { - "x": 75, - "y": 152, - "w": 73, - "h": 75 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 73, - "h": 75 - }, - "frame": { - "x": 75, - "y": 152, - "w": 73, - "h": 75 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 74, - "h": 75 - }, - "frame": { - "x": 148, - "y": 149, - "w": 74, - "h": 75 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 74, - "h": 75 - }, - "frame": { - "x": 148, - "y": 149, - "w": 74, - "h": 75 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 67, - "h": 77 - }, - "frame": { - "x": 222, - "y": 149, - "w": 67, - "h": 77 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 72, - "h": 75 - }, - "frame": { - "x": 227, - "y": 74, - "w": 72, - "h": 75 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 67, - "h": 77 - }, - "frame": { - "x": 299, - "y": 74, - "w": 67, - "h": 77 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 65, - "h": 78 - }, - "frame": { - "x": 289, - "y": 151, - "w": 65, - "h": 78 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 65, - "h": 78 - }, - "frame": { - "x": 289, - "y": 151, - "w": 65, - "h": 78 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 63, - "h": 79 - }, - "frame": { - "x": 145, - "y": 227, - "w": 63, - "h": 79 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 63, - "h": 79 - }, - "frame": { - "x": 145, - "y": 227, - "w": 63, - "h": 79 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 61, - "h": 79 - }, - "frame": { - "x": 208, - "y": 226, - "w": 61, - "h": 79 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 61, - "h": 79 - }, - "frame": { - "x": 208, - "y": 226, - "w": 61, - "h": 79 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 60, - "h": 79 - }, - "frame": { - "x": 269, - "y": 229, - "w": 60, - "h": 79 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:768a260ef504838ad6b945525f4ed05f:3b115b0ef560b516c93f6aa5f1423cd9:f4fdd87d2fc1483d8e0a185c2654e3d9$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 384, "y": 77, "w": 92, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 92, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 476, "y": 77, "w": 92, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 92, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 661, "y": 232, "w": 91, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 91, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 281, "y": 312, "w": 91, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 91, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 556, "y": 462, "w": 91, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 5, "w": 91, "h": 77 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 181, "y": 462, "w": 90, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 90, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 88, "y": 464, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 540, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 90, "y": 540, "w": 89, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 7, "w": 89, "h": 75 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 179, "y": 540, "w": 89, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 7, "w": 89, "h": 75 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 647, "y": 468, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 271, "y": 470, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 536, "y": 539, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 90, "y": 386, "w": 91, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 91, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 366, "y": 234, "w": 92, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 92, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 275, "y": 233, "w": 91, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 91, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 384, "y": 77, "w": 92, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 92, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 476, "y": 77, "w": 92, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 92, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 661, "y": 232, "w": 91, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 91, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 281, "y": 312, "w": 91, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 91, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 556, "y": 462, "w": 91, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 5, "w": 91, "h": 77 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 181, "y": 462, "w": 90, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 90, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 88, "y": 464, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 0, "y": 540, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 90, "y": 540, "w": 89, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 7, "w": 89, "h": 75 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 179, "y": 540, "w": 89, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 7, "w": 89, "h": 75 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 647, "y": 468, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 271, "y": 470, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 536, "y": 539, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 90, "y": 386, "w": 91, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 91, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 366, "y": 234, "w": 92, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 92, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 275, "y": 233, "w": 91, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 91, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 384, "y": 77, "w": 92, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 92, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 476, "y": 77, "w": 92, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 92, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 661, "y": 232, "w": 91, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 91, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 281, "y": 312, "w": 91, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 91, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 556, "y": 462, "w": 91, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 5, "w": 91, "h": 77 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 181, "y": 462, "w": 90, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 90, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 88, "y": 464, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 0, "y": 540, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 90, "y": 540, "w": 89, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 7, "w": 89, "h": 75 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 179, "y": 540, "w": 89, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 7, "w": 89, "h": 75 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 647, "y": 468, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 271, "y": 470, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 536, "y": 539, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 90, "y": 386, "w": 91, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 91, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 366, "y": 234, "w": 92, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 92, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 275, "y": 233, "w": 91, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 91, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 384, "y": 77, "w": 92, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 92, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 476, "y": 77, "w": 92, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 92, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 661, "y": 232, "w": 91, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 91, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 281, "y": 312, "w": 91, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 91, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 556, "y": 462, "w": 91, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 5, "w": 91, "h": 77 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 181, "y": 462, "w": 90, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 90, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 88, "y": 464, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 540, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 90, "y": 540, "w": 89, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 7, "w": 89, "h": 75 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 179, "y": 540, "w": 89, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 7, "w": 89, "h": 75 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 647, "y": 468, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 271, "y": 470, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 536, "y": 539, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 90, "y": 386, "w": 91, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 91, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 366, "y": 234, "w": 92, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 92, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 275, "y": 233, "w": 91, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 91, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 0, "y": 78, "w": 92, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 92, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 184, "y": 231, "w": 91, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 91, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 94, "y": 157, "w": 90, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 90, "h": 80 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 0, "y": 391, "w": 88, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 88, "h": 80 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 275, "y": 390, "w": 88, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 88, "h": 80 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 363, "y": 463, "w": 86, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 1, "w": 86, "h": 81 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 649, "y": 386, "w": 86, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 86, "h": 82 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 449, "y": 463, "w": 87, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 87, "h": 80 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 0, "y": 312, "w": 90, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 90, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 372, "y": 386, "w": 92, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 5, "w": 92, "h": 77 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 566, "y": 233, "w": 92, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 92, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 566, "y": 233, "w": 92, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 92, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 92, "y": 78, "w": 92, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 92, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 473, "y": 156, "w": 93, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 93, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 556, "y": 386, "w": 93, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 93, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 181, "y": 387, "w": 94, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 94, "h": 75 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 648, "y": 311, "w": 95, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 95, "h": 75 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 186, "y": 312, "w": 95, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 95, "h": 75 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 661, "y": 157, "w": 96, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 96, "h": 75 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 458, "y": 311, "w": 95, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 95, "h": 75 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 669, "y": 0, "w": 93, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 93, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 464, "y": 386, "w": 92, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 5, "w": 92, "h": 77 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 0, "y": 234, "w": 92, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 92, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 0, "y": 234, "w": 92, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 92, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 384, "y": 77, "w": 92, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 92, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 568, "y": 79, "w": 93, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 93, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 661, "y": 79, "w": 93, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 93, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 289, "y": 0, "w": 95, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 95, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 0, "y": 0, "w": 96, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 96, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 96, "y": 0, "w": 96, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 96, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 192, "y": 0, "w": 97, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 97, "h": 77 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 480, "y": 0, "w": 96, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 96, "h": 77 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 384, "y": 0, "w": 96, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 96, "h": 77 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 192, "y": 77, "w": 96, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 96, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 566, "y": 157, "w": 95, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 95, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 553, "y": 311, "w": 95, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 95, "h": 75 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 277, "y": 157, "w": 95, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 95, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 92, "y": 310, "w": 94, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 94, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 0, "y": 157, "w": 94, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 94, "h": 77 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 458, "y": 234, "w": 93, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 93, "h": 77 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 184, "y": 153, "w": 93, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 93, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 380, "y": 156, "w": 93, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 93, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0107.png", + "frame": { "x": 576, "y": 0, "w": 93, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 93, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0108.png", + "frame": { "x": 288, "y": 78, "w": 92, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 92, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "697.png", + "format": "I8", + "size": { "w": 762, "h": 616 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/697.png b/public/images/pokemon/exp/697.png index 136007c2892..808dd14eabd 100644 Binary files a/public/images/pokemon/exp/697.png and b/public/images/pokemon/exp/697.png differ diff --git a/public/images/pokemon/exp/698.json b/public/images/pokemon/exp/698.json deleted file mode 100644 index e0096ec0ecf..00000000000 --- a/public/images/pokemon/exp/698.json +++ /dev/null @@ -1,3296 +0,0 @@ -{ - "textures": [ - { - "image": "698.png", - "format": "RGBA8888", - "size": { - "w": 175, - "h": 175 - }, - "scale": 1, - "frames": [ - { - "filename": "0125.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0126.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0151.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0152.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0127.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 0, - "y": 60, - "w": 32, - "h": 60 - } - }, - { - "filename": "0128.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 0, - "y": 60, - "w": 32, - "h": 60 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 55 - }, - "frame": { - "x": 0, - "y": 120, - "w": 38, - "h": 55 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 55 - }, - "frame": { - "x": 0, - "y": 120, - "w": 38, - "h": 55 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 55 - }, - "frame": { - "x": 0, - "y": 120, - "w": 38, - "h": 55 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 55 - }, - "frame": { - "x": 0, - "y": 120, - "w": 38, - "h": 55 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 55 - }, - "frame": { - "x": 0, - "y": 120, - "w": 38, - "h": 55 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 55 - }, - "frame": { - "x": 0, - "y": 120, - "w": 38, - "h": 55 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 55 - }, - "frame": { - "x": 0, - "y": 120, - "w": 38, - "h": 55 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 55 - }, - "frame": { - "x": 0, - "y": 120, - "w": 38, - "h": 55 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 55 - }, - "frame": { - "x": 0, - "y": 120, - "w": 38, - "h": 55 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 55 - }, - "frame": { - "x": 0, - "y": 120, - "w": 38, - "h": 55 - } - }, - { - "filename": "0112.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 55 - }, - "frame": { - "x": 0, - "y": 120, - "w": 38, - "h": 55 - } - }, - { - "filename": "0113.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 55 - }, - "frame": { - "x": 0, - "y": 120, - "w": 38, - "h": 55 - } - }, - { - "filename": "0129.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0130.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0135.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0136.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0141.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0142.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0147.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0148.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0131.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 32, - "y": 60, - "w": 32, - "h": 60 - } - }, - { - "filename": "0132.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 32, - "y": 60, - "w": 32, - "h": 60 - } - }, - { - "filename": "0137.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 32, - "y": 60, - "w": 32, - "h": 60 - } - }, - { - "filename": "0138.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 32, - "y": 60, - "w": 32, - "h": 60 - } - }, - { - "filename": "0143.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 32, - "y": 60, - "w": 32, - "h": 60 - } - }, - { - "filename": "0144.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 32, - "y": 60, - "w": 32, - "h": 60 - } - }, - { - "filename": "0149.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 32, - "y": 60, - "w": 32, - "h": 60 - } - }, - { - "filename": "0150.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 32, - "y": 60, - "w": 32, - "h": 60 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 29, - "h": 55 - }, - "frame": { - "x": 38, - "y": 120, - "w": 29, - "h": 55 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 29, - "h": 55 - }, - "frame": { - "x": 38, - "y": 120, - "w": 29, - "h": 55 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 29, - "h": 55 - }, - "frame": { - "x": 38, - "y": 120, - "w": 29, - "h": 55 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 29, - "h": 55 - }, - "frame": { - "x": 38, - "y": 120, - "w": 29, - "h": 55 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 29, - "h": 55 - }, - "frame": { - "x": 38, - "y": 120, - "w": 29, - "h": 55 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 29, - "h": 55 - }, - "frame": { - "x": 38, - "y": 120, - "w": 29, - "h": 55 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 29, - "h": 55 - }, - "frame": { - "x": 38, - "y": 120, - "w": 29, - "h": 55 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 29, - "h": 55 - }, - "frame": { - "x": 38, - "y": 120, - "w": 29, - "h": 55 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 29, - "h": 55 - }, - "frame": { - "x": 38, - "y": 120, - "w": 29, - "h": 55 - } - }, - { - "filename": "0133.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 64, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0134.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 64, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0139.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 64, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0140.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 64, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0145.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 64, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0146.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 64, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0123.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 32, - "h": 59 - }, - "frame": { - "x": 64, - "y": 60, - "w": 32, - "h": 59 - } - }, - { - "filename": "0124.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 32, - "h": 59 - }, - "frame": { - "x": 64, - "y": 60, - "w": 32, - "h": 59 - } - }, - { - "filename": "0153.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 32, - "h": 59 - }, - "frame": { - "x": 64, - "y": 60, - "w": 32, - "h": 59 - } - }, - { - "filename": "0154.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 32, - "h": 59 - }, - "frame": { - "x": 64, - "y": 60, - "w": 32, - "h": 59 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 37, - "h": 56 - }, - "frame": { - "x": 67, - "y": 119, - "w": 37, - "h": 56 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 37, - "h": 56 - }, - "frame": { - "x": 67, - "y": 119, - "w": 37, - "h": 56 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 37, - "h": 56 - }, - "frame": { - "x": 67, - "y": 119, - "w": 37, - "h": 56 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 37, - "h": 56 - }, - "frame": { - "x": 67, - "y": 119, - "w": 37, - "h": 56 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 37, - "h": 56 - }, - "frame": { - "x": 67, - "y": 119, - "w": 37, - "h": 56 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 37, - "h": 56 - }, - "frame": { - "x": 67, - "y": 119, - "w": 37, - "h": 56 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 37, - "h": 56 - }, - "frame": { - "x": 67, - "y": 119, - "w": 37, - "h": 56 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 37, - "h": 56 - }, - "frame": { - "x": 67, - "y": 119, - "w": 37, - "h": 56 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 37, - "h": 56 - }, - "frame": { - "x": 67, - "y": 119, - "w": 37, - "h": 56 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 37, - "h": 56 - }, - "frame": { - "x": 67, - "y": 119, - "w": 37, - "h": 56 - } - }, - { - "filename": "0114.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 37, - "h": 56 - }, - "frame": { - "x": 67, - "y": 119, - "w": 37, - "h": 56 - } - }, - { - "filename": "0115.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 37, - "h": 56 - }, - "frame": { - "x": 67, - "y": 119, - "w": 37, - "h": 56 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 38, - "h": 54 - }, - "frame": { - "x": 104, - "y": 0, - "w": 38, - "h": 54 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 38, - "h": 54 - }, - "frame": { - "x": 104, - "y": 0, - "w": 38, - "h": 54 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 38, - "h": 54 - }, - "frame": { - "x": 104, - "y": 0, - "w": 38, - "h": 54 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 38, - "h": 54 - }, - "frame": { - "x": 104, - "y": 0, - "w": 38, - "h": 54 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 38, - "h": 54 - }, - "frame": { - "x": 104, - "y": 0, - "w": 38, - "h": 54 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 38, - "h": 54 - }, - "frame": { - "x": 104, - "y": 0, - "w": 38, - "h": 54 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 38, - "h": 54 - }, - "frame": { - "x": 104, - "y": 0, - "w": 38, - "h": 54 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 38, - "h": 54 - }, - "frame": { - "x": 104, - "y": 0, - "w": 38, - "h": 54 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 38, - "h": 54 - }, - "frame": { - "x": 104, - "y": 0, - "w": 38, - "h": 54 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 33, - "h": 58 - }, - "frame": { - "x": 142, - "y": 0, - "w": 33, - "h": 58 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 33, - "h": 58 - }, - "frame": { - "x": 142, - "y": 0, - "w": 33, - "h": 58 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 33, - "h": 58 - }, - "frame": { - "x": 142, - "y": 0, - "w": 33, - "h": 58 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 33, - "h": 58 - }, - "frame": { - "x": 142, - "y": 0, - "w": 33, - "h": 58 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 33, - "h": 58 - }, - "frame": { - "x": 142, - "y": 0, - "w": 33, - "h": 58 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 33, - "h": 58 - }, - "frame": { - "x": 142, - "y": 0, - "w": 33, - "h": 58 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 33, - "h": 58 - }, - "frame": { - "x": 142, - "y": 0, - "w": 33, - "h": 58 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 33, - "h": 58 - }, - "frame": { - "x": 142, - "y": 0, - "w": 33, - "h": 58 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 33, - "h": 58 - }, - "frame": { - "x": 142, - "y": 0, - "w": 33, - "h": 58 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 33, - "h": 58 - }, - "frame": { - "x": 142, - "y": 0, - "w": 33, - "h": 58 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 33, - "h": 58 - }, - "frame": { - "x": 142, - "y": 0, - "w": 33, - "h": 58 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 33, - "h": 58 - }, - "frame": { - "x": 142, - "y": 0, - "w": 33, - "h": 58 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 36, - "h": 57 - }, - "frame": { - "x": 104, - "y": 54, - "w": 36, - "h": 57 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 36, - "h": 57 - }, - "frame": { - "x": 104, - "y": 54, - "w": 36, - "h": 57 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 36, - "h": 57 - }, - "frame": { - "x": 104, - "y": 54, - "w": 36, - "h": 57 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 36, - "h": 57 - }, - "frame": { - "x": 104, - "y": 54, - "w": 36, - "h": 57 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 36, - "h": 57 - }, - "frame": { - "x": 104, - "y": 54, - "w": 36, - "h": 57 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 36, - "h": 57 - }, - "frame": { - "x": 104, - "y": 54, - "w": 36, - "h": 57 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 36, - "h": 57 - }, - "frame": { - "x": 104, - "y": 54, - "w": 36, - "h": 57 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 36, - "h": 57 - }, - "frame": { - "x": 104, - "y": 54, - "w": 36, - "h": 57 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 36, - "h": 57 - }, - "frame": { - "x": 104, - "y": 54, - "w": 36, - "h": 57 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 36, - "h": 57 - }, - "frame": { - "x": 104, - "y": 54, - "w": 36, - "h": 57 - } - }, - { - "filename": "0116.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 36, - "h": 57 - }, - "frame": { - "x": 104, - "y": 54, - "w": 36, - "h": 57 - } - }, - { - "filename": "0117.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 36, - "h": 57 - }, - "frame": { - "x": 104, - "y": 54, - "w": 36, - "h": 57 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0118.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0119.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0120.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0121.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0122.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0155.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0156.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 31, - "h": 57 - }, - "frame": { - "x": 104, - "y": 116, - "w": 31, - "h": 57 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 31, - "h": 57 - }, - "frame": { - "x": 104, - "y": 116, - "w": 31, - "h": 57 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 31, - "h": 57 - }, - "frame": { - "x": 104, - "y": 116, - "w": 31, - "h": 57 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 31, - "h": 57 - }, - "frame": { - "x": 104, - "y": 116, - "w": 31, - "h": 57 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 31, - "h": 57 - }, - "frame": { - "x": 104, - "y": 116, - "w": 31, - "h": 57 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 31, - "h": 57 - }, - "frame": { - "x": 104, - "y": 116, - "w": 31, - "h": 57 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 31, - "h": 57 - }, - "frame": { - "x": 104, - "y": 116, - "w": 31, - "h": 57 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 31, - "h": 57 - }, - "frame": { - "x": 104, - "y": 116, - "w": 31, - "h": 57 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 31, - "h": 57 - }, - "frame": { - "x": 104, - "y": 116, - "w": 31, - "h": 57 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 31, - "h": 57 - }, - "frame": { - "x": 104, - "y": 116, - "w": 31, - "h": 57 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 31, - "h": 57 - }, - "frame": { - "x": 104, - "y": 116, - "w": 31, - "h": 57 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 31, - "h": 57 - }, - "frame": { - "x": 104, - "y": 116, - "w": 31, - "h": 57 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 30, - "h": 56 - }, - "frame": { - "x": 135, - "y": 116, - "w": 30, - "h": 56 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 30, - "h": 56 - }, - "frame": { - "x": 135, - "y": 116, - "w": 30, - "h": 56 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 30, - "h": 56 - }, - "frame": { - "x": 135, - "y": 116, - "w": 30, - "h": 56 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 30, - "h": 56 - }, - "frame": { - "x": 135, - "y": 116, - "w": 30, - "h": 56 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 30, - "h": 56 - }, - "frame": { - "x": 135, - "y": 116, - "w": 30, - "h": 56 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 30, - "h": 56 - }, - "frame": { - "x": 135, - "y": 116, - "w": 30, - "h": 56 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 30, - "h": 56 - }, - "frame": { - "x": 135, - "y": 116, - "w": 30, - "h": 56 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 30, - "h": 56 - }, - "frame": { - "x": 135, - "y": 116, - "w": 30, - "h": 56 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 30, - "h": 56 - }, - "frame": { - "x": 135, - "y": 116, - "w": 30, - "h": 56 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 30, - "h": 56 - }, - "frame": { - "x": 135, - "y": 116, - "w": 30, - "h": 56 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 30, - "h": 56 - }, - "frame": { - "x": 135, - "y": 116, - "w": 30, - "h": 56 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 30, - "h": 56 - }, - "frame": { - "x": 135, - "y": 116, - "w": 30, - "h": 56 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:2dce35b74cbe50cf08e71af3768cef4c:e4d5ff1dbd47865af99315586fe42981:198087d69fed44d4a642fa3ba5c077d6$" - } -} diff --git a/public/images/pokemon/exp/698.png b/public/images/pokemon/exp/698.png deleted file mode 100644 index 6d8ca555881..00000000000 Binary files a/public/images/pokemon/exp/698.png and /dev/null differ diff --git a/public/images/pokemon/exp/700.json b/public/images/pokemon/exp/700.json index fbcefcf3561..2ed26d79228 100644 --- a/public/images/pokemon/exp/700.json +++ b/public/images/pokemon/exp/700.json @@ -1,1070 +1,587 @@ -{ - "textures": [ - { - "image": "700.png", - "format": "RGBA8888", - "size": { - "w": 233, - "h": 233 - }, - "scale": 1, - "frames": [ - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 53, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 53, - "h": 58 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 53, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 53, - "h": 58 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 53, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 53, - "h": 58 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 53, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 53, - "h": 58 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 52, - "h": 58 - }, - "frame": { - "x": 0, - "y": 58, - "w": 52, - "h": 58 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 52, - "h": 58 - }, - "frame": { - "x": 0, - "y": 58, - "w": 52, - "h": 58 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 52, - "h": 58 - }, - "frame": { - "x": 0, - "y": 58, - "w": 52, - "h": 58 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 52, - "h": 58 - }, - "frame": { - "x": 0, - "y": 58, - "w": 52, - "h": 58 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 52, - "h": 58 - }, - "frame": { - "x": 53, - "y": 0, - "w": 52, - "h": 58 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 52, - "h": 58 - }, - "frame": { - "x": 53, - "y": 0, - "w": 52, - "h": 58 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 52, - "h": 58 - }, - "frame": { - "x": 53, - "y": 0, - "w": 52, - "h": 58 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 52, - "h": 58 - }, - "frame": { - "x": 53, - "y": 0, - "w": 52, - "h": 58 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 51, - "h": 59 - }, - "frame": { - "x": 0, - "y": 116, - "w": 51, - "h": 59 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 51, - "h": 59 - }, - "frame": { - "x": 0, - "y": 116, - "w": 51, - "h": 59 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 51, - "h": 59 - }, - "frame": { - "x": 0, - "y": 116, - "w": 51, - "h": 59 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 51, - "h": 59 - }, - "frame": { - "x": 0, - "y": 116, - "w": 51, - "h": 59 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 45, - "h": 58 - }, - "frame": { - "x": 0, - "y": 175, - "w": 45, - "h": 58 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 45, - "h": 58 - }, - "frame": { - "x": 0, - "y": 175, - "w": 45, - "h": 58 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 52, - "y": 58, - "w": 50, - "h": 59 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 52, - "y": 58, - "w": 50, - "h": 59 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 52, - "y": 58, - "w": 50, - "h": 59 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 52, - "y": 58, - "w": 50, - "h": 59 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 52, - "y": 58, - "w": 50, - "h": 59 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 52, - "y": 58, - "w": 50, - "h": 59 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 105, - "y": 0, - "w": 50, - "h": 59 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 105, - "y": 0, - "w": 50, - "h": 59 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 105, - "y": 0, - "w": 50, - "h": 59 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 105, - "y": 0, - "w": 50, - "h": 59 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 155, - "y": 0, - "w": 50, - "h": 59 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 155, - "y": 0, - "w": 50, - "h": 59 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 155, - "y": 0, - "w": 50, - "h": 59 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 155, - "y": 0, - "w": 50, - "h": 59 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 51, - "y": 117, - "w": 50, - "h": 59 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 51, - "y": 117, - "w": 50, - "h": 59 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 51, - "y": 117, - "w": 50, - "h": 59 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 51, - "y": 117, - "w": 50, - "h": 59 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 42, - "h": 57 - }, - "frame": { - "x": 45, - "y": 176, - "w": 42, - "h": 57 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 102, - "y": 59, - "w": 50, - "h": 59 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 102, - "y": 59, - "w": 50, - "h": 59 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 102, - "y": 59, - "w": 50, - "h": 59 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 102, - "y": 59, - "w": 50, - "h": 59 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 152, - "y": 59, - "w": 50, - "h": 59 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 152, - "y": 59, - "w": 50, - "h": 59 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 152, - "y": 59, - "w": 50, - "h": 59 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 152, - "y": 59, - "w": 50, - "h": 59 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 101, - "y": 118, - "w": 50, - "h": 59 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 49, - "h": 59 - }, - "frame": { - "x": 151, - "y": 118, - "w": 49, - "h": 59 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 49, - "h": 59 - }, - "frame": { - "x": 151, - "y": 118, - "w": 49, - "h": 59 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 49, - "h": 59 - }, - "frame": { - "x": 151, - "y": 118, - "w": 49, - "h": 59 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 49, - "h": 59 - }, - "frame": { - "x": 151, - "y": 118, - "w": 49, - "h": 59 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:8ebe248133b590a1727583e2ee69cc50:c2481ba04831dcd949e63454034488e2:2e4bf5ef1f19e475073f7da10c60b540$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 180, "y": 183, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 43, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 136, "y": 238, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 43, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 44, "y": 181, "w": 44, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 44, "h": 57 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 88, "y": 239, "w": 44, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 44, "h": 56 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 180, "y": 242, "w": 43, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 43, "h": 56 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 93, "y": 119, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 45, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 99, "y": 60, "w": 46, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 46, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 139, "y": 119, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 45, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 180, "y": 183, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 43, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 136, "y": 238, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 43, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 44, "y": 181, "w": 44, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 44, "h": 57 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 88, "y": 239, "w": 44, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 44, "h": 56 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 180, "y": 242, "w": 43, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 43, "h": 56 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 0, "y": 120, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 45, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 146, "y": 60, "w": 46, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 46, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 46, "y": 122, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 45, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 180, "y": 183, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 43, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 136, "y": 238, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 43, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 44, "y": 181, "w": 44, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 44, "h": 57 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 88, "y": 239, "w": 44, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 44, "h": 56 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 180, "y": 242, "w": 43, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 43, "h": 56 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 93, "y": 119, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 45, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 99, "y": 60, "w": 46, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 46, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 139, "y": 119, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 45, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 180, "y": 183, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 43, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 136, "y": 238, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 43, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 44, "y": 181, "w": 44, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 44, "h": 57 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 88, "y": 239, "w": 44, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 44, "h": 56 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 180, "y": 242, "w": 43, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 43, "h": 56 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 0, "y": 120, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 45, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 146, "y": 60, "w": 46, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 46, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 46, "y": 122, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 45, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 180, "y": 183, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 43, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 136, "y": 238, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 43, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 44, "y": 181, "w": 44, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 44, "h": 57 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 88, "y": 239, "w": 44, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 44, "h": 56 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 180, "y": 242, "w": 43, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 43, "h": 56 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 93, "y": 119, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 45, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 99, "y": 60, "w": 46, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 46, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 139, "y": 119, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 45, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 180, "y": 183, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 43, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 136, "y": 238, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 43, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 44, "y": 181, "w": 44, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 44, "h": 57 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 88, "y": 239, "w": 44, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 44, "h": 56 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 180, "y": 242, "w": 43, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 43, "h": 56 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 0, "y": 120, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 45, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 146, "y": 60, "w": 46, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 46, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 46, "y": 122, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 45, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 239, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 43, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 193, "y": 60, "w": 43, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 43, "h": 62 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 99, "y": 0, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 47, "h": 59 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 147, "y": 0, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 47, "h": 59 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 0, "y": 0, "w": 51, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 51, "h": 59 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 60, "w": 46, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 46, "h": 59 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 92, "y": 178, "w": 43, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 43, "h": 60 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 195, "y": 0, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 47, "h": 59 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 52, "y": 0, "w": 46, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 46, "h": 61 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 136, "y": 178, "w": 43, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 43, "h": 59 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 195, "y": 0, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 47, "h": 59 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 52, "y": 0, "w": 46, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 46, "h": 61 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 0, "y": 179, "w": 43, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 43, "h": 59 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 185, "y": 123, "w": 44, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 44, "h": 59 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 47, "y": 62, "w": 45, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 45, "h": 59 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 44, "y": 239, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 43, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "700.png", + "format": "I8", + "size": { "w": 242, "h": 298 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/700.png b/public/images/pokemon/exp/700.png index 997328d323d..4d3e64fab03 100644 Binary files a/public/images/pokemon/exp/700.png and b/public/images/pokemon/exp/700.png differ diff --git a/public/images/pokemon/exp/702.json b/public/images/pokemon/exp/702.json index bf5cfbccec0..0ab95b58c7a 100644 --- a/public/images/pokemon/exp/702.json +++ b/public/images/pokemon/exp/702.json @@ -1,671 +1,443 @@ -{ - "textures": [ - { - "image": "702.png", - "format": "RGBA8888", - "size": { - "w": 138, - "h": 138 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 36 - }, - "frame": { - "x": 0, - "y": 0, - "w": 48, - "h": 36 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 36 - }, - "frame": { - "x": 0, - "y": 0, - "w": 48, - "h": 36 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 36 - }, - "frame": { - "x": 0, - "y": 0, - "w": 48, - "h": 36 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 36 - }, - "frame": { - "x": 0, - "y": 0, - "w": 48, - "h": 36 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 36 - }, - "frame": { - "x": 0, - "y": 0, - "w": 48, - "h": 36 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 36 - }, - "frame": { - "x": 0, - "y": 0, - "w": 48, - "h": 36 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 36 - }, - "frame": { - "x": 48, - "y": 0, - "w": 48, - "h": 36 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 36 - }, - "frame": { - "x": 48, - "y": 0, - "w": 48, - "h": 36 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 36 - }, - "frame": { - "x": 0, - "y": 36, - "w": 47, - "h": 36 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 36 - }, - "frame": { - "x": 0, - "y": 36, - "w": 47, - "h": 36 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 36 - }, - "frame": { - "x": 0, - "y": 36, - "w": 47, - "h": 36 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 36 - }, - "frame": { - "x": 0, - "y": 36, - "w": 47, - "h": 36 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 36 - }, - "frame": { - "x": 0, - "y": 36, - "w": 47, - "h": 36 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 36 - }, - "frame": { - "x": 0, - "y": 36, - "w": 47, - "h": 36 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 45, - "h": 36 - }, - "frame": { - "x": 0, - "y": 72, - "w": 45, - "h": 36 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 45, - "h": 36 - }, - "frame": { - "x": 0, - "y": 72, - "w": 45, - "h": 36 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 35 - }, - "frame": { - "x": 45, - "y": 72, - "w": 48, - "h": 35 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 35 - }, - "frame": { - "x": 45, - "y": 72, - "w": 48, - "h": 35 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 35 - }, - "frame": { - "x": 45, - "y": 72, - "w": 48, - "h": 35 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 35 - }, - "frame": { - "x": 45, - "y": 72, - "w": 48, - "h": 35 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 35 - }, - "frame": { - "x": 45, - "y": 72, - "w": 48, - "h": 35 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 35 - }, - "frame": { - "x": 45, - "y": 72, - "w": 48, - "h": 35 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 44, - "h": 35 - }, - "frame": { - "x": 47, - "y": 36, - "w": 44, - "h": 35 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 44, - "h": 35 - }, - "frame": { - "x": 47, - "y": 36, - "w": 44, - "h": 35 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 44, - "h": 35 - }, - "frame": { - "x": 47, - "y": 36, - "w": 44, - "h": 35 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 47, - "h": 33 - }, - "frame": { - "x": 91, - "y": 36, - "w": 47, - "h": 33 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 47, - "h": 33 - }, - "frame": { - "x": 91, - "y": 36, - "w": 47, - "h": 33 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 47, - "h": 33 - }, - "frame": { - "x": 91, - "y": 36, - "w": 47, - "h": 33 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 44, - "h": 35 - }, - "frame": { - "x": 93, - "y": 69, - "w": 44, - "h": 35 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 44, - "h": 35 - }, - "frame": { - "x": 93, - "y": 69, - "w": 44, - "h": 35 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 44, - "h": 35 - }, - "frame": { - "x": 93, - "y": 69, - "w": 44, - "h": 35 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:be64539a559c97720b84c9b5cd8151b7:e7db40381441319d37a93d8698db35c7:ba8fdab405d5efab99c4aa1084328e6b$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 144, "y": 0, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 0, "w": 47, "h": 36 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 47, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 37, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 0, "y": 111, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 47, "y": 111, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 47, "y": 37, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 94, "y": 37, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 141, "y": 74, "w": 45, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 45, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 144, "y": 0, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 0, "w": 47, "h": 36 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 47, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 37, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 111, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0013.png", + "frame": { "x": 47, "y": 111, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0014.png", + "frame": { "x": 47, "y": 37, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0015.png", + "frame": { "x": 94, "y": 37, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0016.png", + "frame": { "x": 141, "y": 74, "w": 45, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 45, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0017.png", + "frame": { "x": 144, "y": 0, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 0, "w": 47, "h": 36 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 47, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0019.png", + "frame": { "x": 0, "y": 37, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0020.png", + "frame": { "x": 0, "y": 111, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0021.png", + "frame": { "x": 47, "y": 111, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0022.png", + "frame": { "x": 47, "y": 37, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0023.png", + "frame": { "x": 94, "y": 37, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0024.png", + "frame": { "x": 141, "y": 74, "w": 45, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 45, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0025.png", + "frame": { "x": 144, "y": 0, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 0, "w": 47, "h": 36 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 47, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 37, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0028.png", + "frame": { "x": 0, "y": 111, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0029.png", + "frame": { "x": 47, "y": 111, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0030.png", + "frame": { "x": 47, "y": 37, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0031.png", + "frame": { "x": 94, "y": 37, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0032.png", + "frame": { "x": 141, "y": 74, "w": 45, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 45, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0033.png", + "frame": { "x": 144, "y": 0, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0034.png", + "frame": { "x": 0, "y": 0, "w": 47, "h": 36 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 47, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0035.png", + "frame": { "x": 0, "y": 37, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0036.png", + "frame": { "x": 94, "y": 111, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0037.png", + "frame": { "x": 141, "y": 111, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0038.png", + "frame": { "x": 141, "y": 37, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0039.png", + "frame": { "x": 188, "y": 37, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0040.png", + "frame": { "x": 144, "y": 0, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0041.png", + "frame": { "x": 48, "y": 0, "w": 47, "h": 36 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 47, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0042.png", + "frame": { "x": 0, "y": 74, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0043.png", + "frame": { "x": 188, "y": 111, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0044.png", + "frame": { "x": 0, "y": 145, "w": 45, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 45, "h": 33 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0045.png", + "frame": { "x": 96, "y": 0, "w": 47, "h": 36 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 47, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0046.png", + "frame": { "x": 47, "y": 74, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0047.png", + "frame": { "x": 94, "y": 74, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0048.png", + "frame": { "x": 187, "y": 74, "w": 45, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 45, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "702.png", + "format": "I8", + "size": { "w": 234, "h": 178 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/702.png b/public/images/pokemon/exp/702.png index 9d042fd8293..1f1bd6b524f 100644 Binary files a/public/images/pokemon/exp/702.png and b/public/images/pokemon/exp/702.png differ diff --git a/public/images/pokemon/exp/703.json b/public/images/pokemon/exp/703.json deleted file mode 100644 index 75e52fdc904..00000000000 --- a/public/images/pokemon/exp/703.json +++ /dev/null @@ -1,356 +0,0 @@ -{ - "textures": [ - { - "image": "703.png", - "format": "RGBA8888", - "size": { - "w": 120, - "h": 120 - }, - "scale": 1, - "frames": [ - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 41 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 41 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 37, - "h": 41 - }, - "frame": { - "x": 0, - "y": 41, - "w": 37, - "h": 41 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 37, - "h": 41 - }, - "frame": { - "x": 0, - "y": 41, - "w": 37, - "h": 41 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 37, - "h": 40 - }, - "frame": { - "x": 37, - "y": 0, - "w": 37, - "h": 40 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 37, - "h": 40 - }, - "frame": { - "x": 37, - "y": 0, - "w": 37, - "h": 40 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 37, - "h": 40 - }, - "frame": { - "x": 37, - "y": 0, - "w": 37, - "h": 40 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 37, - "h": 40 - }, - "frame": { - "x": 37, - "y": 0, - "w": 37, - "h": 40 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 37, - "h": 40 - }, - "frame": { - "x": 37, - "y": 0, - "w": 37, - "h": 40 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 37, - "h": 40 - }, - "frame": { - "x": 37, - "y": 0, - "w": 37, - "h": 40 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 37, - "h": 40 - }, - "frame": { - "x": 37, - "y": 0, - "w": 37, - "h": 40 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 37, - "h": 40 - }, - "frame": { - "x": 74, - "y": 0, - "w": 37, - "h": 40 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 51 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 35, - "h": 41 - }, - "frame": { - "x": 37, - "y": 40, - "w": 35, - "h": 41 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 51 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 35, - "h": 41 - }, - "frame": { - "x": 37, - "y": 40, - "w": 35, - "h": 41 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 51 - }, - "spriteSourceSize": { - "x": 1, - "y": 12, - "w": 35, - "h": 39 - }, - "frame": { - "x": 37, - "y": 81, - "w": 35, - "h": 39 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 40 - }, - "frame": { - "x": 72, - "y": 40, - "w": 37, - "h": 40 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 51 - }, - "spriteSourceSize": { - "x": 1, - "y": 7, - "w": 35, - "h": 40 - }, - "frame": { - "x": 72, - "y": 80, - "w": 35, - "h": 40 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:01a847d167639aeeb160ddd9a360a558:5e33077f4810fe91d17064ff7dd6bf4d:721af8c322ff60159262e9b3017c784d$" - } -} diff --git a/public/images/pokemon/exp/703.png b/public/images/pokemon/exp/703.png deleted file mode 100644 index 5a0c63154ef..00000000000 Binary files a/public/images/pokemon/exp/703.png and /dev/null differ diff --git a/public/images/pokemon/exp/704.json b/public/images/pokemon/exp/704.json index 440a41ebbc5..8b429c0639e 100644 --- a/public/images/pokemon/exp/704.json +++ b/public/images/pokemon/exp/704.json @@ -1,1784 +1,371 @@ -{ - "textures": [ - { - "image": "704.png", - "format": "RGBA8888", - "size": { - "w": 288, - "h": 288 - }, - "scale": 1, - "frames": [ - { - "filename": "0040.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 0, - "y": 48, - "w": 43, - "h": 48 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 0, - "y": 48, - "w": 43, - "h": 48 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 0, - "y": 96, - "w": 43, - "h": 48 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 0, - "y": 96, - "w": 43, - "h": 48 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 43, - "h": 47 - }, - "frame": { - "x": 0, - "y": 144, - "w": 43, - "h": 47 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 43, - "h": 47 - }, - "frame": { - "x": 0, - "y": 144, - "w": 43, - "h": 47 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 46 - }, - "frame": { - "x": 0, - "y": 191, - "w": 41, - "h": 46 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 46 - }, - "frame": { - "x": 0, - "y": 191, - "w": 41, - "h": 46 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 39, - "h": 45 - }, - "frame": { - "x": 0, - "y": 237, - "w": 39, - "h": 45 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 39, - "h": 45 - }, - "frame": { - "x": 0, - "y": 237, - "w": 39, - "h": 45 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 41, - "h": 44 - }, - "frame": { - "x": 39, - "y": 237, - "w": 41, - "h": 44 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 41, - "h": 44 - }, - "frame": { - "x": 39, - "y": 237, - "w": 41, - "h": 44 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 41, - "h": 44 - }, - "frame": { - "x": 39, - "y": 237, - "w": 41, - "h": 44 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 41, - "h": 44 - }, - "frame": { - "x": 39, - "y": 237, - "w": 41, - "h": 44 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 41, - "h": 44 - }, - "frame": { - "x": 41, - "y": 191, - "w": 41, - "h": 44 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 41, - "h": 44 - }, - "frame": { - "x": 41, - "y": 191, - "w": 41, - "h": 44 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 41, - "h": 44 - }, - "frame": { - "x": 80, - "y": 235, - "w": 41, - "h": 44 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 42, - "h": 43 - }, - "frame": { - "x": 121, - "y": 0, - "w": 42, - "h": 43 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 42, - "h": 43 - }, - "frame": { - "x": 121, - "y": 0, - "w": 42, - "h": 43 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 39, - "h": 44 - }, - "frame": { - "x": 82, - "y": 0, - "w": 39, - "h": 44 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 39, - "h": 44 - }, - "frame": { - "x": 82, - "y": 0, - "w": 39, - "h": 44 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 39, - "h": 44 - }, - "frame": { - "x": 82, - "y": 0, - "w": 39, - "h": 44 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 39, - "h": 44 - }, - "frame": { - "x": 43, - "y": 0, - "w": 39, - "h": 44 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 42, - "h": 43 - }, - "frame": { - "x": 163, - "y": 0, - "w": 42, - "h": 43 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 42, - "h": 43 - }, - "frame": { - "x": 163, - "y": 0, - "w": 42, - "h": 43 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 42, - "h": 43 - }, - "frame": { - "x": 163, - "y": 0, - "w": 42, - "h": 43 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 42, - "h": 43 - }, - "frame": { - "x": 163, - "y": 0, - "w": 42, - "h": 43 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 42, - "h": 43 - }, - "frame": { - "x": 163, - "y": 0, - "w": 42, - "h": 43 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 42, - "h": 43 - }, - "frame": { - "x": 205, - "y": 0, - "w": 42, - "h": 43 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 41, - "h": 44 - }, - "frame": { - "x": 247, - "y": 0, - "w": 41, - "h": 44 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 42, - "h": 42 - }, - "frame": { - "x": 121, - "y": 43, - "w": 42, - "h": 42 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 42, - "h": 42 - }, - "frame": { - "x": 121, - "y": 43, - "w": 42, - "h": 42 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 42, - "h": 42 - }, - "frame": { - "x": 121, - "y": 43, - "w": 42, - "h": 42 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 42, - "h": 42 - }, - "frame": { - "x": 121, - "y": 43, - "w": 42, - "h": 42 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 42, - "h": 42 - }, - "frame": { - "x": 121, - "y": 43, - "w": 42, - "h": 42 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 42, - "h": 42 - }, - "frame": { - "x": 121, - "y": 43, - "w": 42, - "h": 42 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 42, - "h": 42 - }, - "frame": { - "x": 121, - "y": 43, - "w": 42, - "h": 42 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 39, - "h": 44 - }, - "frame": { - "x": 82, - "y": 44, - "w": 39, - "h": 44 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 39, - "h": 44 - }, - "frame": { - "x": 82, - "y": 44, - "w": 39, - "h": 44 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 39, - "h": 44 - }, - "frame": { - "x": 43, - "y": 44, - "w": 39, - "h": 44 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 39, - "h": 44 - }, - "frame": { - "x": 43, - "y": 44, - "w": 39, - "h": 44 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 42, - "h": 42 - }, - "frame": { - "x": 163, - "y": 43, - "w": 42, - "h": 42 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 42, - "h": 41 - }, - "frame": { - "x": 205, - "y": 43, - "w": 42, - "h": 41 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 42, - "h": 41 - }, - "frame": { - "x": 205, - "y": 43, - "w": 42, - "h": 41 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 42, - "h": 41 - }, - "frame": { - "x": 205, - "y": 43, - "w": 42, - "h": 41 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 42, - "h": 41 - }, - "frame": { - "x": 205, - "y": 43, - "w": 42, - "h": 41 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 42, - "h": 41 - }, - "frame": { - "x": 205, - "y": 43, - "w": 42, - "h": 41 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 42, - "h": 41 - }, - "frame": { - "x": 205, - "y": 43, - "w": 42, - "h": 41 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 42, - "h": 41 - }, - "frame": { - "x": 205, - "y": 43, - "w": 42, - "h": 41 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 42, - "h": 41 - }, - "frame": { - "x": 205, - "y": 43, - "w": 42, - "h": 41 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 38, - "h": 44 - }, - "frame": { - "x": 247, - "y": 44, - "w": 38, - "h": 44 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 42, - "h": 40 - }, - "frame": { - "x": 205, - "y": 84, - "w": 42, - "h": 40 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 42, - "h": 40 - }, - "frame": { - "x": 205, - "y": 84, - "w": 42, - "h": 40 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 42, - "h": 40 - }, - "frame": { - "x": 205, - "y": 84, - "w": 42, - "h": 40 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 38, - "h": 44 - }, - "frame": { - "x": 247, - "y": 88, - "w": 38, - "h": 44 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 38, - "h": 44 - }, - "frame": { - "x": 247, - "y": 88, - "w": 38, - "h": 44 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 38, - "h": 44 - }, - "frame": { - "x": 43, - "y": 132, - "w": 38, - "h": 44 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 38, - "h": 44 - }, - "frame": { - "x": 43, - "y": 88, - "w": 38, - "h": 44 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 38, - "h": 44 - }, - "frame": { - "x": 43, - "y": 88, - "w": 38, - "h": 44 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 37, - "h": 44 - }, - "frame": { - "x": 81, - "y": 132, - "w": 37, - "h": 44 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 37, - "h": 44 - }, - "frame": { - "x": 81, - "y": 132, - "w": 37, - "h": 44 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 37, - "h": 44 - }, - "frame": { - "x": 81, - "y": 132, - "w": 37, - "h": 44 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 37, - "h": 44 - }, - "frame": { - "x": 81, - "y": 88, - "w": 37, - "h": 44 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 36, - "h": 44 - }, - "frame": { - "x": 82, - "y": 176, - "w": 36, - "h": 44 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 36, - "h": 44 - }, - "frame": { - "x": 82, - "y": 176, - "w": 36, - "h": 44 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 42, - "h": 40 - }, - "frame": { - "x": 121, - "y": 85, - "w": 42, - "h": 40 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 36, - "h": 44 - }, - "frame": { - "x": 163, - "y": 85, - "w": 36, - "h": 44 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 36, - "h": 44 - }, - "frame": { - "x": 121, - "y": 125, - "w": 36, - "h": 44 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 36, - "h": 44 - }, - "frame": { - "x": 199, - "y": 124, - "w": 36, - "h": 44 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 36, - "h": 44 - }, - "frame": { - "x": 199, - "y": 124, - "w": 36, - "h": 44 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 36, - "h": 44 - }, - "frame": { - "x": 157, - "y": 129, - "w": 36, - "h": 44 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 36, - "h": 44 - }, - "frame": { - "x": 121, - "y": 169, - "w": 36, - "h": 44 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 5, - "w": 36, - "h": 43 - }, - "frame": { - "x": 235, - "y": 132, - "w": 36, - "h": 43 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 5, - "w": 36, - "h": 43 - }, - "frame": { - "x": 235, - "y": 132, - "w": 36, - "h": 43 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 5, - "w": 36, - "h": 43 - }, - "frame": { - "x": 193, - "y": 168, - "w": 36, - "h": 43 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 5, - "w": 36, - "h": 43 - }, - "frame": { - "x": 157, - "y": 173, - "w": 36, - "h": 43 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 5, - "w": 36, - "h": 43 - }, - "frame": { - "x": 121, - "y": 213, - "w": 36, - "h": 43 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 5, - "w": 36, - "h": 43 - }, - "frame": { - "x": 229, - "y": 175, - "w": 36, - "h": 43 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 5, - "w": 36, - "h": 43 - }, - "frame": { - "x": 193, - "y": 211, - "w": 36, - "h": 43 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 5, - "w": 36, - "h": 43 - }, - "frame": { - "x": 157, - "y": 216, - "w": 36, - "h": 43 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 5, - "w": 36, - "h": 43 - }, - "frame": { - "x": 229, - "y": 218, - "w": 36, - "h": 43 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 5, - "w": 36, - "h": 43 - }, - "frame": { - "x": 229, - "y": 218, - "w": 36, - "h": 43 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:695bd0c4059d0b12112a2e7a99e1d237:1f0a27b4d1a84460990b54c833ed8007:45bb13be23ae6e2a6654a2a00c450d62$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 34, "w": 26, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 26, "h": 33 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0003.png", + "frame": { "x": 78, "y": 0, "w": 28, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 28, "h": 31 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0004.png", + "frame": { "x": 0, "y": 34, "w": 26, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 26, "h": 33 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0007.png", + "frame": { "x": 78, "y": 62, "w": 26, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 26, "h": 32 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0008.png", + "frame": { "x": 52, "y": 94, "w": 28, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 28, "h": 29 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0009.png", + "frame": { "x": 78, "y": 62, "w": 26, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 26, "h": 32 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 34, "w": 26, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 26, "h": 33 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0013.png", + "frame": { "x": 78, "y": 0, "w": 28, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 28, "h": 31 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0014.png", + "frame": { "x": 0, "y": 34, "w": 26, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 26, "h": 33 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0015.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0017.png", + "frame": { "x": 78, "y": 62, "w": 26, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 26, "h": 32 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0018.png", + "frame": { "x": 52, "y": 94, "w": 28, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 28, "h": 29 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0019.png", + "frame": { "x": 78, "y": 62, "w": 26, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 26, "h": 32 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0020.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0021.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0022.png", + "frame": { "x": 0, "y": 34, "w": 26, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 26, "h": 33 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0023.png", + "frame": { "x": 78, "y": 0, "w": 28, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 28, "h": 31 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0024.png", + "frame": { "x": 0, "y": 34, "w": 26, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 26, "h": 33 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0026.png", + "frame": { "x": 26, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 67, "w": 26, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 26, "h": 32 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0028.png", + "frame": { "x": 80, "y": 94, "w": 28, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 28, "h": 29 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0029.png", + "frame": { "x": 78, "y": 62, "w": 26, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 26, "h": 32 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0030.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0031.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0032.png", + "frame": { "x": 26, "y": 34, "w": 26, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 26, "h": 33 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0033.png", + "frame": { "x": 78, "y": 31, "w": 28, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 28, "h": 31 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0034.png", + "frame": { "x": 52, "y": 34, "w": 26, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 26, "h": 33 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0035.png", + "frame": { "x": 52, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0036.png", + "frame": { "x": 52, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0037.png", + "frame": { "x": 26, "y": 67, "w": 26, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 26, "h": 32 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0038.png", + "frame": { "x": 0, "y": 99, "w": 28, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 28, "h": 29 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0039.png", + "frame": { "x": 78, "y": 62, "w": 26, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 26, "h": 32 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0040.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "704.png", + "format": "I8", + "size": { "w": 108, "h": 128 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/704.png b/public/images/pokemon/exp/704.png index 2490591adf2..b85d8dfc3c0 100644 Binary files a/public/images/pokemon/exp/704.png and b/public/images/pokemon/exp/704.png differ diff --git a/public/images/pokemon/exp/705.json b/public/images/pokemon/exp/705.json index d710ef9e5eb..eecb83af45a 100644 --- a/public/images/pokemon/exp/705.json +++ b/public/images/pokemon/exp/705.json @@ -1,272 +1,596 @@ -{ - "textures": [ - { - "image": "705.png", - "format": "RGBA8888", - "size": { - "w": 154, - "h": 154 - }, - "scale": 1, - "frames": [ - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 46, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 58 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 46, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 58 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 45, - "h": 58 - }, - "frame": { - "x": 46, - "y": 0, - "w": 45, - "h": 58 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 45, - "h": 58 - }, - "frame": { - "x": 46, - "y": 0, - "w": 45, - "h": 58 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 45, - "h": 58 - }, - "frame": { - "x": 91, - "y": 0, - "w": 45, - "h": 58 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 42, - "h": 58 - }, - "frame": { - "x": 0, - "y": 58, - "w": 42, - "h": 58 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 42, - "h": 58 - }, - "frame": { - "x": 0, - "y": 58, - "w": 42, - "h": 58 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 58 - }, - "frame": { - "x": 42, - "y": 58, - "w": 41, - "h": 58 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 58 - }, - "frame": { - "x": 42, - "y": 58, - "w": 41, - "h": 58 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 36, - "h": 58 - }, - "frame": { - "x": 83, - "y": 58, - "w": 36, - "h": 58 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 36, - "h": 58 - }, - "frame": { - "x": 83, - "y": 58, - "w": 36, - "h": 58 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 119, - "y": 58, - "w": 35, - "h": 58 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:4bf155254b23c88780e7eee282256589:82bb727988054c3064e203b6908ff464:6b57e983626c7fc9144ab67f30c66814$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 38, "y": 186, "w": 40, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 40, "h": 60 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 78, "y": 189, "w": 40, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 40, "h": 59 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 77, "y": 304, "w": 39, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 39, "h": 57 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 197, "y": 246, "w": 41, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 41, "h": 56 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 158, "y": 302, "w": 41, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 41, "h": 55 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 155, "y": 246, "w": 42, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 42, "h": 55 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 199, "y": 302, "w": 41, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 41, "h": 55 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 77, "y": 248, "w": 41, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 41, "h": 56 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 118, "y": 301, "w": 40, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 40, "h": 57 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 38, "y": 246, "w": 39, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 39, "h": 59 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 253, "w": 37, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 37, "h": 60 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 191, "w": 38, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 38, "h": 62 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 118, "y": 189, "w": 37, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 37, "h": 63 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 0, "y": 64, "w": 39, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 39, "h": 63 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 194, "y": 184, "w": 39, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 39, "h": 62 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 156, "y": 120, "w": 40, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 61 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 38, "y": 186, "w": 40, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 40, "h": 60 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 78, "y": 189, "w": 40, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 40, "h": 59 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 77, "y": 304, "w": 39, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 39, "h": 57 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 197, "y": 246, "w": 41, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 41, "h": 56 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 158, "y": 302, "w": 41, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 41, "h": 55 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 155, "y": 246, "w": 42, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 42, "h": 55 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 199, "y": 302, "w": 41, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 41, "h": 55 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 77, "y": 248, "w": 41, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 41, "h": 56 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 118, "y": 301, "w": 40, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 40, "h": 57 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 38, "y": 246, "w": 39, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 39, "h": 59 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 253, "w": 37, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 37, "h": 60 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 0, "y": 191, "w": 38, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 38, "h": 62 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 118, "y": 189, "w": 37, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 37, "h": 63 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 0, "y": 64, "w": 39, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 39, "h": 63 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 194, "y": 184, "w": 39, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 39, "h": 62 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 156, "y": 120, "w": 40, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 61 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 38, "y": 186, "w": 40, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 40, "h": 60 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 78, "y": 189, "w": 40, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 40, "h": 59 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 77, "y": 304, "w": 39, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 39, "h": 57 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 197, "y": 246, "w": 41, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 41, "h": 56 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 158, "y": 302, "w": 41, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 41, "h": 55 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 155, "y": 246, "w": 42, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 42, "h": 55 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 199, "y": 302, "w": 41, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 41, "h": 55 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 77, "y": 248, "w": 41, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 41, "h": 56 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 118, "y": 301, "w": 40, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 40, "h": 57 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 38, "y": 246, "w": 39, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 39, "h": 59 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 253, "w": 37, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 37, "h": 60 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 0, "y": 191, "w": 38, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 38, "h": 62 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 118, "y": 189, "w": 37, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 37, "h": 63 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 0, "y": 64, "w": 39, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 39, "h": 63 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 194, "y": 184, "w": 39, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 39, "h": 62 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 156, "y": 120, "w": 40, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 61 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 159, "y": 0, "w": 41, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 41, "h": 60 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 39, "y": 125, "w": 40, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 61 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 200, "y": 60, "w": 39, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 39, "h": 63 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 39, "y": 62, "w": 39, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 39, "h": 63 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 79, "y": 125, "w": 38, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 38, "h": 64 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 117, "y": 125, "w": 38, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 38, "h": 64 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 127, "w": 38, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 38, "h": 64 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 0, "w": 39, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 39, "h": 64 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 78, "y": 62, "w": 39, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 39, "h": 63 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 117, "y": 62, "w": 39, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 39, "h": 63 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 155, "y": 181, "w": 39, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 39, "h": 62 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 119, "y": 0, "w": 40, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 62 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 79, "y": 0, "w": 40, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 62 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 39, "y": 0, "w": 40, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 62 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 196, "y": 123, "w": 40, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 61 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 200, "y": 0, "w": 41, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 41, "h": 60 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 159, "y": 60, "w": 41, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 41, "h": 60 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "705.png", + "format": "RGBA8888", + "size": { "w": 241, "h": 361 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/705.png b/public/images/pokemon/exp/705.png index 670e8be5d51..0bd8323bcb4 100644 Binary files a/public/images/pokemon/exp/705.png and b/public/images/pokemon/exp/705.png differ diff --git a/public/images/pokemon/exp/707.json b/public/images/pokemon/exp/707.json deleted file mode 100644 index 253d37ed70a..00000000000 --- a/public/images/pokemon/exp/707.json +++ /dev/null @@ -1,1931 +0,0 @@ -{ - "textures": [ - { - "image": "707.png", - "format": "RGBA8888", - "size": { - "w": 283, - "h": 283 - }, - "scale": 1, - "frames": [ - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 69 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 69 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 69 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 39, - "h": 69 - }, - "frame": { - "x": 41, - "y": 0, - "w": 39, - "h": 69 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 39, - "h": 69 - }, - "frame": { - "x": 41, - "y": 0, - "w": 39, - "h": 69 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 39, - "h": 69 - }, - "frame": { - "x": 41, - "y": 0, - "w": 39, - "h": 69 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 69 - }, - "frame": { - "x": 80, - "y": 0, - "w": 37, - "h": 69 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 69 - }, - "frame": { - "x": 80, - "y": 0, - "w": 37, - "h": 69 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 69 - }, - "frame": { - "x": 80, - "y": 0, - "w": 37, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 117, - "y": 0, - "w": 42, - "h": 70 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 117, - "y": 0, - "w": 42, - "h": 70 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 117, - "y": 0, - "w": 42, - "h": 70 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 117, - "y": 0, - "w": 42, - "h": 70 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 159, - "y": 0, - "w": 42, - "h": 70 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 159, - "y": 0, - "w": 42, - "h": 70 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 159, - "y": 0, - "w": 42, - "h": 70 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 159, - "y": 0, - "w": 42, - "h": 70 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 44, - "h": 70 - }, - "frame": { - "x": 201, - "y": 0, - "w": 44, - "h": 70 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 44, - "h": 70 - }, - "frame": { - "x": 201, - "y": 0, - "w": 44, - "h": 70 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 44, - "h": 70 - }, - "frame": { - "x": 201, - "y": 0, - "w": 44, - "h": 70 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 70 - }, - "frame": { - "x": 245, - "y": 0, - "w": 38, - "h": 70 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 38, - "h": 70 - }, - "frame": { - "x": 245, - "y": 0, - "w": 38, - "h": 70 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 70 - }, - "frame": { - "x": 245, - "y": 0, - "w": 38, - "h": 70 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 38, - "h": 70 - }, - "frame": { - "x": 245, - "y": 0, - "w": 38, - "h": 70 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 70 - }, - "frame": { - "x": 245, - "y": 0, - "w": 38, - "h": 70 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 38, - "h": 70 - }, - "frame": { - "x": 245, - "y": 0, - "w": 38, - "h": 70 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 44, - "h": 70 - }, - "frame": { - "x": 0, - "y": 69, - "w": 44, - "h": 70 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 44, - "h": 70 - }, - "frame": { - "x": 0, - "y": 69, - "w": 44, - "h": 70 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 44, - "h": 70 - }, - "frame": { - "x": 0, - "y": 69, - "w": 44, - "h": 70 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 70 - }, - "frame": { - "x": 44, - "y": 69, - "w": 44, - "h": 70 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 70 - }, - "frame": { - "x": 44, - "y": 69, - "w": 44, - "h": 70 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 70 - }, - "frame": { - "x": 44, - "y": 69, - "w": 44, - "h": 70 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 38, - "h": 70 - }, - "frame": { - "x": 88, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 38, - "h": 70 - }, - "frame": { - "x": 88, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 38, - "h": 70 - }, - "frame": { - "x": 88, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 38, - "h": 70 - }, - "frame": { - "x": 88, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 38, - "h": 70 - }, - "frame": { - "x": 88, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 38, - "h": 70 - }, - "frame": { - "x": 88, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 38, - "h": 70 - }, - "frame": { - "x": 126, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 38, - "h": 70 - }, - "frame": { - "x": 126, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 38, - "h": 70 - }, - "frame": { - "x": 126, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 70 - }, - "frame": { - "x": 164, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 70 - }, - "frame": { - "x": 164, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 70 - }, - "frame": { - "x": 164, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 70 - }, - "frame": { - "x": 202, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 70 - }, - "frame": { - "x": 202, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 70 - }, - "frame": { - "x": 202, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 70 - }, - "frame": { - "x": 240, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 70 - }, - "frame": { - "x": 240, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 70 - }, - "frame": { - "x": 240, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 70 - }, - "frame": { - "x": 0, - "y": 139, - "w": 38, - "h": 70 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 70 - }, - "frame": { - "x": 0, - "y": 139, - "w": 38, - "h": 70 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 70 - }, - "frame": { - "x": 0, - "y": 139, - "w": 38, - "h": 70 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 40, - "h": 70 - }, - "frame": { - "x": 38, - "y": 139, - "w": 40, - "h": 70 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 40, - "h": 70 - }, - "frame": { - "x": 38, - "y": 139, - "w": 40, - "h": 70 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 40, - "h": 70 - }, - "frame": { - "x": 38, - "y": 139, - "w": 40, - "h": 70 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 42, - "h": 70 - }, - "frame": { - "x": 78, - "y": 140, - "w": 42, - "h": 70 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 42, - "h": 70 - }, - "frame": { - "x": 78, - "y": 140, - "w": 42, - "h": 70 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 42, - "h": 70 - }, - "frame": { - "x": 78, - "y": 140, - "w": 42, - "h": 70 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 42, - "h": 70 - }, - "frame": { - "x": 78, - "y": 140, - "w": 42, - "h": 70 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 42, - "h": 70 - }, - "frame": { - "x": 78, - "y": 140, - "w": 42, - "h": 70 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 42, - "h": 70 - }, - "frame": { - "x": 78, - "y": 140, - "w": 42, - "h": 70 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 42, - "h": 70 - }, - "frame": { - "x": 78, - "y": 140, - "w": 42, - "h": 70 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 45, - "h": 70 - }, - "frame": { - "x": 120, - "y": 140, - "w": 45, - "h": 70 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 43, - "h": 70 - }, - "frame": { - "x": 165, - "y": 140, - "w": 43, - "h": 70 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 43, - "h": 70 - }, - "frame": { - "x": 165, - "y": 140, - "w": 43, - "h": 70 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 71 - }, - "frame": { - "x": 208, - "y": 140, - "w": 45, - "h": 71 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 71 - }, - "frame": { - "x": 208, - "y": 140, - "w": 45, - "h": 71 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 71 - }, - "frame": { - "x": 208, - "y": 140, - "w": 45, - "h": 71 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 71 - }, - "frame": { - "x": 0, - "y": 209, - "w": 37, - "h": 71 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 71 - }, - "frame": { - "x": 0, - "y": 209, - "w": 37, - "h": 71 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 71 - }, - "frame": { - "x": 0, - "y": 209, - "w": 37, - "h": 71 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 38, - "h": 71 - }, - "frame": { - "x": 37, - "y": 209, - "w": 38, - "h": 71 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 38, - "h": 71 - }, - "frame": { - "x": 37, - "y": 209, - "w": 38, - "h": 71 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 38, - "h": 71 - }, - "frame": { - "x": 37, - "y": 209, - "w": 38, - "h": 71 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 38, - "h": 71 - }, - "frame": { - "x": 75, - "y": 210, - "w": 38, - "h": 71 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 38, - "h": 71 - }, - "frame": { - "x": 75, - "y": 210, - "w": 38, - "h": 71 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 38, - "h": 71 - }, - "frame": { - "x": 75, - "y": 210, - "w": 38, - "h": 71 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 38, - "h": 71 - }, - "frame": { - "x": 113, - "y": 210, - "w": 38, - "h": 71 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 38, - "h": 71 - }, - "frame": { - "x": 113, - "y": 210, - "w": 38, - "h": 71 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 71 - }, - "frame": { - "x": 113, - "y": 210, - "w": 38, - "h": 71 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 38, - "h": 71 - }, - "frame": { - "x": 113, - "y": 210, - "w": 38, - "h": 71 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 38, - "h": 71 - }, - "frame": { - "x": 113, - "y": 210, - "w": 38, - "h": 71 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 71 - }, - "frame": { - "x": 113, - "y": 210, - "w": 38, - "h": 71 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 38, - "h": 71 - }, - "frame": { - "x": 113, - "y": 210, - "w": 38, - "h": 71 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 38, - "h": 71 - }, - "frame": { - "x": 113, - "y": 210, - "w": 38, - "h": 71 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 71 - }, - "frame": { - "x": 113, - "y": 210, - "w": 38, - "h": 71 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 45, - "h": 71 - }, - "frame": { - "x": 151, - "y": 210, - "w": 45, - "h": 71 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 39, - "h": 71 - }, - "frame": { - "x": 196, - "y": 211, - "w": 39, - "h": 71 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 39, - "h": 71 - }, - "frame": { - "x": 196, - "y": 211, - "w": 39, - "h": 71 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 44, - "h": 71 - }, - "frame": { - "x": 235, - "y": 211, - "w": 44, - "h": 71 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:a13ec2d124f7e95263b088a395e9d780:8c9f0ed432d15fda1ebbfa6ff4063d39:8e96b9056ea81e44ced99c97f472a528$" - } -} diff --git a/public/images/pokemon/exp/707.png b/public/images/pokemon/exp/707.png deleted file mode 100644 index 294d6e35e70..00000000000 Binary files a/public/images/pokemon/exp/707.png and /dev/null differ diff --git a/public/images/pokemon/exp/708.png b/public/images/pokemon/exp/708.png deleted file mode 100644 index f71cbaa535d..00000000000 Binary files a/public/images/pokemon/exp/708.png and /dev/null differ diff --git a/public/images/pokemon/exp/712.json b/public/images/pokemon/exp/712.json index 0e49da4d806..859fa54fc5c 100644 --- a/public/images/pokemon/exp/712.json +++ b/public/images/pokemon/exp/712.json @@ -1,2771 +1,1433 @@ -{ - "textures": [ - { - "image": "712.png", - "format": "RGBA8888", - "size": { - "w": 209, - "h": 209 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 38, - "h": 44 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 38, - "h": 44 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 38, - "h": 44 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 38, - "h": 44 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 38, - "h": 44 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 38, - "h": 44 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 38, - "h": 44 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 38, - "h": 44 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 38, - "h": 44 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 38, - "h": 44 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 38, - "h": 44 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 38, - "h": 44 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 38, - "h": 44 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 38, - "h": 44 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 38, - "h": 44 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 38, - "h": 44 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 38, - "h": 44 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 38, - "h": 44 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 38, - "h": 44 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 38, - "h": 44 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 38, - "h": 44 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 38, - "h": 44 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 38, - "h": 44 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 38, - "h": 44 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 38, - "h": 44 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 38, - "h": 44 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 38, - "h": 44 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 38, - "h": 44 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 38, - "h": 44 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 38, - "h": 44 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 38, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 38, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 38, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 38, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 38, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 38, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 38, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 38, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 38, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 38, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 76, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 76, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 76, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 76, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 76, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 76, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 76, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 76, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 76, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 76, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 114, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 114, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 114, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 114, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 114, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 114, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 114, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 114, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 114, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 114, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 152, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 152, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 152, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 152, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 152, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 152, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 152, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 152, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 152, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 152, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 76, - "y": 43, - "w": 38, - "h": 43 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 76, - "y": 43, - "w": 38, - "h": 43 - } - }, - { - "filename": "0131.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 76, - "y": 43, - "w": 38, - "h": 43 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 38, - "h": 42 - }, - "frame": { - "x": 38, - "y": 44, - "w": 38, - "h": 42 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 38, - "h": 42 - }, - "frame": { - "x": 38, - "y": 44, - "w": 38, - "h": 42 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 38, - "h": 42 - }, - "frame": { - "x": 38, - "y": 44, - "w": 38, - "h": 42 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 38, - "h": 42 - }, - "frame": { - "x": 38, - "y": 44, - "w": 38, - "h": 42 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 38, - "h": 42 - }, - "frame": { - "x": 38, - "y": 44, - "w": 38, - "h": 42 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 38, - "h": 42 - }, - "frame": { - "x": 38, - "y": 44, - "w": 38, - "h": 42 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 38, - "h": 42 - }, - "frame": { - "x": 38, - "y": 44, - "w": 38, - "h": 42 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 38, - "h": 42 - }, - "frame": { - "x": 38, - "y": 44, - "w": 38, - "h": 42 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 38, - "h": 42 - }, - "frame": { - "x": 38, - "y": 44, - "w": 38, - "h": 42 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 38, - "h": 42 - }, - "frame": { - "x": 38, - "y": 44, - "w": 38, - "h": 42 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 38, - "h": 42 - }, - "frame": { - "x": 114, - "y": 43, - "w": 38, - "h": 42 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 38, - "h": 42 - }, - "frame": { - "x": 114, - "y": 43, - "w": 38, - "h": 42 - } - }, - { - "filename": "0129.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 38, - "h": 42 - }, - "frame": { - "x": 114, - "y": 43, - "w": 38, - "h": 42 - } - }, - { - "filename": "0130.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 38, - "h": 42 - }, - "frame": { - "x": 114, - "y": 43, - "w": 38, - "h": 42 - } - }, - { - "filename": "0124.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 38, - "h": 42 - }, - "frame": { - "x": 152, - "y": 43, - "w": 38, - "h": 42 - } - }, - { - "filename": "0125.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 38, - "h": 42 - }, - "frame": { - "x": 152, - "y": 43, - "w": 38, - "h": 42 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 114, - "y": 85, - "w": 38, - "h": 41 - } - }, - { - "filename": "0127.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 114, - "y": 85, - "w": 38, - "h": 41 - } - }, - { - "filename": "0128.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 114, - "y": 85, - "w": 38, - "h": 41 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 152, - "y": 85, - "w": 38, - "h": 41 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 152, - "y": 85, - "w": 38, - "h": 41 - } - }, - { - "filename": "0126.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 152, - "y": 85, - "w": 38, - "h": 41 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 38, - "y": 86, - "w": 38, - "h": 41 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 38, - "y": 86, - "w": 38, - "h": 41 - } - }, - { - "filename": "0112.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 38, - "y": 86, - "w": 38, - "h": 41 - } - }, - { - "filename": "0113.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 38, - "y": 86, - "w": 38, - "h": 41 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 76, - "y": 86, - "w": 38, - "h": 41 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 76, - "y": 86, - "w": 38, - "h": 41 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 76, - "y": 86, - "w": 38, - "h": 41 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 76, - "y": 86, - "w": 38, - "h": 41 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 38, - "y": 127, - "w": 38, - "h": 41 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 38, - "y": 127, - "w": 38, - "h": 41 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 38, - "y": 127, - "w": 38, - "h": 41 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 38, - "y": 127, - "w": 38, - "h": 41 - } - }, - { - "filename": "0114.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 38, - "y": 168, - "w": 38, - "h": 41 - } - }, - { - "filename": "0115.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 38, - "y": 168, - "w": 38, - "h": 41 - } - }, - { - "filename": "0116.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 76, - "y": 127, - "w": 38, - "h": 41 - } - }, - { - "filename": "0117.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 76, - "y": 127, - "w": 38, - "h": 41 - } - }, - { - "filename": "0118.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 76, - "y": 168, - "w": 38, - "h": 41 - } - }, - { - "filename": "0119.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 76, - "y": 168, - "w": 38, - "h": 41 - } - }, - { - "filename": "0120.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 114, - "y": 126, - "w": 38, - "h": 41 - } - }, - { - "filename": "0121.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 114, - "y": 126, - "w": 38, - "h": 41 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 114, - "y": 167, - "w": 37, - "h": 41 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 114, - "y": 167, - "w": 37, - "h": 41 - } - }, - { - "filename": "0122.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 151, - "y": 167, - "w": 37, - "h": 41 - } - }, - { - "filename": "0123.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 151, - "y": 167, - "w": 37, - "h": 41 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:144801e89f73b8a2d351aa5854b03ced:c8bd981e9dc030e1f41d7d7d0b7df029:3a1cc69824960d920ca43f8c9376d136$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0002.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0003.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0004.png", + "frame": { "x": 108, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0005.png", + "frame": { "x": 108, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0006.png", + "frame": { "x": 109, "y": 43, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0007.png", + "frame": { "x": 109, "y": 43, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0008.png", + "frame": { "x": 145, "y": 43, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0009.png", + "frame": { "x": 145, "y": 43, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0012.png", + "frame": { "x": 72, "y": 84, "w": 36, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 36, "h": 41 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0013.png", + "frame": { "x": 72, "y": 84, "w": 36, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 36, "h": 41 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0014.png", + "frame": { "x": 144, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0015.png", + "frame": { "x": 144, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0018.png", + "frame": { "x": 36, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0019.png", + "frame": { "x": 36, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0020.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0021.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0022.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0023.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0024.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0025.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0026.png", + "frame": { "x": 108, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0027.png", + "frame": { "x": 108, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0028.png", + "frame": { "x": 109, "y": 43, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0029.png", + "frame": { "x": 109, "y": 43, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0030.png", + "frame": { "x": 145, "y": 43, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0031.png", + "frame": { "x": 145, "y": 43, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0033.png", + "frame": { "x": 0, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0034.png", + "frame": { "x": 72, "y": 84, "w": 36, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 36, "h": 41 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0035.png", + "frame": { "x": 72, "y": 84, "w": 36, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 36, "h": 41 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0036.png", + "frame": { "x": 144, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0037.png", + "frame": { "x": 144, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0038.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0039.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0040.png", + "frame": { "x": 36, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0041.png", + "frame": { "x": 36, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0042.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0043.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0044.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0045.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0046.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0047.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0048.png", + "frame": { "x": 108, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0049.png", + "frame": { "x": 108, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0050.png", + "frame": { "x": 109, "y": 43, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0051.png", + "frame": { "x": 109, "y": 43, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0052.png", + "frame": { "x": 145, "y": 43, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0053.png", + "frame": { "x": 145, "y": 43, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0056.png", + "frame": { "x": 72, "y": 84, "w": 36, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 36, "h": 41 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0057.png", + "frame": { "x": 72, "y": 84, "w": 36, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 36, "h": 41 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0058.png", + "frame": { "x": 144, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0059.png", + "frame": { "x": 144, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0060.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 36, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0063.png", + "frame": { "x": 36, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0064.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0065.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0066.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0067.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0068.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0069.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0070.png", + "frame": { "x": 108, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0071.png", + "frame": { "x": 108, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0072.png", + "frame": { "x": 109, "y": 43, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0073.png", + "frame": { "x": 109, "y": 43, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0074.png", + "frame": { "x": 145, "y": 43, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0075.png", + "frame": { "x": 145, "y": 43, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0076.png", + "frame": { "x": 0, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0077.png", + "frame": { "x": 0, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0078.png", + "frame": { "x": 72, "y": 84, "w": 36, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 36, "h": 41 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0079.png", + "frame": { "x": 72, "y": 84, "w": 36, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 36, "h": 41 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0080.png", + "frame": { "x": 144, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0081.png", + "frame": { "x": 144, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0082.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0083.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0084.png", + "frame": { "x": 36, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0085.png", + "frame": { "x": 36, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0086.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0087.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0088.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0089.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0090.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0091.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0092.png", + "frame": { "x": 108, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0093.png", + "frame": { "x": 108, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0094.png", + "frame": { "x": 109, "y": 43, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0095.png", + "frame": { "x": 109, "y": 43, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0096.png", + "frame": { "x": 145, "y": 43, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0097.png", + "frame": { "x": 145, "y": 43, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0098.png", + "frame": { "x": 0, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0099.png", + "frame": { "x": 0, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0100.png", + "frame": { "x": 72, "y": 84, "w": 36, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 36, "h": 41 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0101.png", + "frame": { "x": 72, "y": 84, "w": 36, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 36, "h": 41 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0102.png", + "frame": { "x": 144, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0103.png", + "frame": { "x": 144, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0104.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0105.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0106.png", + "frame": { "x": 36, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0107.png", + "frame": { "x": 36, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0108.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0109.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0110.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0111.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0112.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0113.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0114.png", + "frame": { "x": 36, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0115.png", + "frame": { "x": 36, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0116.png", + "frame": { "x": 108, "y": 85, "w": 36, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 36, "h": 41 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0117.png", + "frame": { "x": 108, "y": 85, "w": 36, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 36, "h": 41 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0118.png", + "frame": { "x": 144, "y": 85, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0119.png", + "frame": { "x": 144, "y": 85, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0120.png", + "frame": { "x": 0, "y": 86, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0121.png", + "frame": { "x": 0, "y": 86, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0122.png", + "frame": { "x": 0, "y": 86, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0123.png", + "frame": { "x": 0, "y": 86, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0124.png", + "frame": { "x": 36, "y": 86, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0125.png", + "frame": { "x": 36, "y": 86, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0126.png", + "frame": { "x": 72, "y": 125, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0127.png", + "frame": { "x": 72, "y": 125, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0128.png", + "frame": { "x": 144, "y": 125, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0129.png", + "frame": { "x": 144, "y": 125, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0130.png", + "frame": { "x": 0, "y": 126, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0131.png", + "frame": { "x": 0, "y": 126, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0132.png", + "frame": { "x": 144, "y": 125, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0133.png", + "frame": { "x": 144, "y": 125, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0134.png", + "frame": { "x": 72, "y": 125, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0135.png", + "frame": { "x": 72, "y": 125, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0136.png", + "frame": { "x": 36, "y": 86, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0137.png", + "frame": { "x": 36, "y": 86, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0138.png", + "frame": { "x": 36, "y": 126, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0139.png", + "frame": { "x": 36, "y": 126, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0140.png", + "frame": { "x": 108, "y": 126, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0141.png", + "frame": { "x": 108, "y": 126, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0142.png", + "frame": { "x": 72, "y": 165, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0143.png", + "frame": { "x": 72, "y": 165, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0144.png", + "frame": { "x": 144, "y": 165, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0145.png", + "frame": { "x": 144, "y": 165, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0146.png", + "frame": { "x": 0, "y": 166, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0147.png", + "frame": { "x": 0, "y": 166, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0148.png", + "frame": { "x": 72, "y": 43, "w": 37, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 37, "h": 41 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0149.png", + "frame": { "x": 72, "y": 43, "w": 37, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 37, "h": 41 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0150.png", + "frame": { "x": 0, "y": 86, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0151.png", + "frame": { "x": 0, "y": 86, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0152.png", + "frame": { "x": 0, "y": 86, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0153.png", + "frame": { "x": 144, "y": 85, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0154.png", + "frame": { "x": 144, "y": 85, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0155.png", + "frame": { "x": 108, "y": 85, "w": 36, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 36, "h": 41 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0156.png", + "frame": { "x": 108, "y": 85, "w": 36, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 36, "h": 41 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0157.png", + "frame": { "x": 36, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0158.png", + "frame": { "x": 36, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "712.png", + "format": "I8", + "size": { "w": 181, "h": 206 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/712.png b/public/images/pokemon/exp/712.png index cd40c2e5c9b..1726f22f7b8 100644 Binary files a/public/images/pokemon/exp/712.png and b/public/images/pokemon/exp/712.png differ diff --git a/public/images/pokemon/exp/713.json b/public/images/pokemon/exp/713.json index 7c5c6b565e4..f4fcfa1ff85 100644 --- a/public/images/pokemon/exp/713.json +++ b/public/images/pokemon/exp/713.json @@ -1,146 +1,1100 @@ -{ - "textures": [ - { - "image": "713.png", - "format": "RGBA8888", - "size": { - "w": 174, - "h": 174 - }, - "scale": 1, - "frames": [ - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 87, - "h": 71 - }, - "frame": { - "x": 0, - "y": 0, - "w": 87, - "h": 71 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 87, - "h": 72 - }, - "frame": { - "x": 87, - "y": 0, - "w": 87, - "h": 72 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 87, - "h": 72 - }, - "frame": { - "x": 87, - "y": 0, - "w": 87, - "h": 72 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 87, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 87, - "h": 73 - }, - "frame": { - "x": 0, - "y": 71, - "w": 87, - "h": 73 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 87, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 87, - "h": 73 - }, - "frame": { - "x": 0, - "y": 71, - "w": 87, - "h": 73 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 87, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 87, - "h": 73 - }, - "frame": { - "x": 87, - "y": 72, - "w": 87, - "h": 73 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:11a7176e3fe76c2e9fc09061688f4db6:8fdb4357b8a1808fc8dcdc5a29bec720:625f70bcfe9c7f2437cb9cad6d2b863c$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 166, "y": 64, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 249, "y": 64, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 332, "y": 126, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 166, "y": 127, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 83, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 83, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 83, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 0, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 166, "y": 127, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 332, "y": 126, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 249, "y": 64, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 166, "y": 64, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 166, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 249, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 83, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 83, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 83, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 83, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 0, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 249, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 166, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 166, "y": 64, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 249, "y": 64, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 332, "y": 126, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 166, "y": 127, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 0, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 83, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 83, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 83, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 166, "y": 127, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 332, "y": 126, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 249, "y": 64, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 166, "y": 64, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 166, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 249, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 0, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 83, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 83, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 83, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 83, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 0, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 249, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 166, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 166, "y": 64, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 249, "y": 64, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 332, "y": 126, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 166, "y": 127, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 0, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 83, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 83, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 83, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 166, "y": 127, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 332, "y": 126, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 249, "y": 64, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 166, "y": 64, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 166, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 249, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 0, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 83, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 83, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 83, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 83, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 0, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 249, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 166, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 166, "y": 64, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 249, "y": 64, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 332, "y": 126, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 166, "y": 127, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 0, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 83, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 83, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 83, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 0, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 166, "y": 127, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 332, "y": 126, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 249, "y": 64, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 166, "y": 64, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 166, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 249, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 0, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 83, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 83, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 83, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 83, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 0, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 249, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 166, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 166, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 0, "y": 65, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 0, "y": 65, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 0, "y": 65, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 0, "y": 65, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 83, "y": 65, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 83, "y": 65, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 332, "y": 0, "w": 84, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 84, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 332, "y": 0, "w": 84, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 84, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 332, "y": 63, "w": 84, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 84, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 332, "y": 63, "w": 84, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 84, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 332, "y": 63, "w": 84, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 84, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 332, "y": 63, "w": 84, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 84, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 332, "y": 0, "w": 84, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 84, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0107.png", + "frame": { "x": 0, "y": 65, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0108.png", + "frame": { "x": 0, "y": 65, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0109.png", + "frame": { "x": 249, "y": 127, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0110.png", + "frame": { "x": 249, "y": 127, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0111.png", + "frame": { "x": 332, "y": 188, "w": 83, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 59 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0112.png", + "frame": { "x": 332, "y": 188, "w": 83, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 59 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0113.png", + "frame": { "x": 0, "y": 189, "w": 83, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 58 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0114.png", + "frame": { "x": 0, "y": 189, "w": 83, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 58 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0115.png", + "frame": { "x": 0, "y": 189, "w": 83, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 58 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0116.png", + "frame": { "x": 0, "y": 189, "w": 83, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 58 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0117.png", + "frame": { "x": 332, "y": 188, "w": 83, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 59 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0118.png", + "frame": { "x": 0, "y": 65, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0119.png", + "frame": { "x": 0, "y": 65, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0120.png", + "frame": { "x": 0, "y": 65, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0121.png", + "frame": { "x": 0, "y": 65, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "713.png", + "format": "I8", + "size": { "w": 416, "h": 247 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/713.png b/public/images/pokemon/exp/713.png index 0452b1989a1..2d0b8477262 100644 Binary files a/public/images/pokemon/exp/713.png and b/public/images/pokemon/exp/713.png differ diff --git a/public/images/pokemon/exp/714.json b/public/images/pokemon/exp/714.json deleted file mode 100644 index 7deaf1909af..00000000000 --- a/public/images/pokemon/exp/714.json +++ /dev/null @@ -1,314 +0,0 @@ -{ - "textures": [ - { - "image": "714.png", - "format": "RGBA8888", - "size": { - "w": 179, - "h": 179 - }, - "scale": 1, - "frames": [ - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 64, - "h": 63 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 63, - "h": 60 - }, - "frame": { - "x": 0, - "y": 0, - "w": 63, - "h": 60 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 64, - "h": 63 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 63, - "h": 60 - }, - "frame": { - "x": 0, - "y": 0, - "w": 63, - "h": 60 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 64, - "h": 63 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 64, - "h": 59 - }, - "frame": { - "x": 0, - "y": 60, - "w": 64, - "h": 59 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 64, - "h": 63 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 64, - "h": 59 - }, - "frame": { - "x": 0, - "y": 60, - "w": 64, - "h": 59 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 64, - "h": 63 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 64, - "h": 58 - }, - "frame": { - "x": 63, - "y": 0, - "w": 64, - "h": 58 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 64, - "h": 63 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 60, - "h": 61 - }, - "frame": { - "x": 64, - "y": 58, - "w": 60, - "h": 61 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 64, - "h": 63 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 60, - "h": 61 - }, - "frame": { - "x": 64, - "y": 58, - "w": 60, - "h": 61 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 64, - "h": 63 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 54, - "h": 58 - }, - "frame": { - "x": 124, - "y": 58, - "w": 54, - "h": 58 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 64, - "h": 63 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 54, - "h": 58 - }, - "frame": { - "x": 124, - "y": 58, - "w": 54, - "h": 58 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 64, - "h": 63 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 54, - "h": 58 - }, - "frame": { - "x": 124, - "y": 116, - "w": 54, - "h": 58 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 64, - "h": 63 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 60, - "h": 60 - }, - "frame": { - "x": 0, - "y": 119, - "w": 60, - "h": 60 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 64, - "h": 63 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 60, - "h": 60 - }, - "frame": { - "x": 0, - "y": 119, - "w": 60, - "h": 60 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 64, - "h": 63 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 56, - "h": 60 - }, - "frame": { - "x": 60, - "y": 119, - "w": 56, - "h": 60 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 64, - "h": 63 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 56, - "h": 60 - }, - "frame": { - "x": 60, - "y": 119, - "w": 56, - "h": 60 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:585d7099ac8249026b274a63ac9c25f0:8d770fdec6c3922ce9cc2e04a6453388:1a07d46e710b0568ec824f54fbc4fe6a$" - } -} diff --git a/public/images/pokemon/exp/714.png b/public/images/pokemon/exp/714.png deleted file mode 100644 index 21c184bf476..00000000000 Binary files a/public/images/pokemon/exp/714.png and /dev/null differ diff --git a/public/images/pokemon/exp/715.png b/public/images/pokemon/exp/715.png index 58f093d089a..3967da0f1b9 100644 Binary files a/public/images/pokemon/exp/715.png and b/public/images/pokemon/exp/715.png differ diff --git a/public/images/pokemon/exp/718-10.json b/public/images/pokemon/exp/718-10.json deleted file mode 100644 index f387823bf4c..00000000000 --- a/public/images/pokemon/exp/718-10.json +++ /dev/null @@ -1,692 +0,0 @@ -{ - "textures": [ - { - "image": "718-10.png", - "format": "RGBA8888", - "size": { - "w": 239, - "h": 239 - }, - "scale": 1, - "frames": [ - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 61, - "h": 65 - }, - "frame": { - "x": 0, - "y": 0, - "w": 61, - "h": 65 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 59, - "h": 67 - }, - "frame": { - "x": 0, - "y": 65, - "w": 59, - "h": 67 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 59, - "h": 67 - }, - "frame": { - "x": 0, - "y": 65, - "w": 59, - "h": 67 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 59, - "h": 67 - }, - "frame": { - "x": 0, - "y": 65, - "w": 59, - "h": 67 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 64, - "h": 61 - }, - "frame": { - "x": 0, - "y": 132, - "w": 64, - "h": 61 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 65, - "h": 60 - }, - "frame": { - "x": 59, - "y": 65, - "w": 65, - "h": 60 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 59, - "h": 65 - }, - "frame": { - "x": 61, - "y": 0, - "w": 59, - "h": 65 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 59, - "h": 65 - }, - "frame": { - "x": 61, - "y": 0, - "w": 59, - "h": 65 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 59, - "h": 65 - }, - "frame": { - "x": 61, - "y": 0, - "w": 59, - "h": 65 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 59, - "h": 65 - }, - "frame": { - "x": 120, - "y": 0, - "w": 59, - "h": 65 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 59, - "h": 65 - }, - "frame": { - "x": 120, - "y": 0, - "w": 59, - "h": 65 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 59, - "h": 65 - }, - "frame": { - "x": 120, - "y": 0, - "w": 59, - "h": 65 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 59, - "h": 66 - }, - "frame": { - "x": 179, - "y": 0, - "w": 59, - "h": 66 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 58, - "h": 67 - }, - "frame": { - "x": 124, - "y": 66, - "w": 58, - "h": 67 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 58, - "h": 67 - }, - "frame": { - "x": 124, - "y": 66, - "w": 58, - "h": 67 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 58, - "h": 67 - }, - "frame": { - "x": 124, - "y": 66, - "w": 58, - "h": 67 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 59, - "h": 65 - }, - "frame": { - "x": 64, - "y": 125, - "w": 59, - "h": 65 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 57, - "h": 67 - }, - "frame": { - "x": 182, - "y": 66, - "w": 57, - "h": 67 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 57, - "h": 67 - }, - "frame": { - "x": 182, - "y": 66, - "w": 57, - "h": 67 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 57, - "h": 67 - }, - "frame": { - "x": 182, - "y": 66, - "w": 57, - "h": 67 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 57, - "h": 67 - }, - "frame": { - "x": 182, - "y": 66, - "w": 57, - "h": 67 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 57, - "h": 67 - }, - "frame": { - "x": 182, - "y": 66, - "w": 57, - "h": 67 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 57, - "h": 67 - }, - "frame": { - "x": 182, - "y": 66, - "w": 57, - "h": 67 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 57, - "h": 67 - }, - "frame": { - "x": 182, - "y": 66, - "w": 57, - "h": 67 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 57, - "h": 67 - }, - "frame": { - "x": 182, - "y": 66, - "w": 57, - "h": 67 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 57, - "h": 67 - }, - "frame": { - "x": 182, - "y": 66, - "w": 57, - "h": 67 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 58, - "h": 66 - }, - "frame": { - "x": 123, - "y": 133, - "w": 58, - "h": 66 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 58, - "h": 66 - }, - "frame": { - "x": 123, - "y": 133, - "w": 58, - "h": 66 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 58, - "h": 66 - }, - "frame": { - "x": 123, - "y": 133, - "w": 58, - "h": 66 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 57, - "h": 67 - }, - "frame": { - "x": 181, - "y": 133, - "w": 57, - "h": 67 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 57, - "h": 67 - }, - "frame": { - "x": 181, - "y": 133, - "w": 57, - "h": 67 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 57, - "h": 67 - }, - "frame": { - "x": 181, - "y": 133, - "w": 57, - "h": 67 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:4a92d566ab5398ac1329b7a8bd47bf23:05925b513eba9d64f38ee84fe4b031b9:82195cf2a6db620c5643b8162d6e8c5c$" - } -} diff --git a/public/images/pokemon/exp/718-10.png b/public/images/pokemon/exp/718-10.png deleted file mode 100644 index faf98182653..00000000000 Binary files a/public/images/pokemon/exp/718-10.png and /dev/null differ diff --git a/public/images/pokemon/exp/718.json b/public/images/pokemon/exp/718.json deleted file mode 100644 index 7e32292a1be..00000000000 --- a/public/images/pokemon/exp/718.json +++ /dev/null @@ -1,230 +0,0 @@ -{ - "textures": [ - { - "image": "718.png", - "format": "RGBA8888", - "size": { - "w": 219, - "h": 219 - }, - "scale": 1, - "frames": [ - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 71, - "h": 88 - }, - "frame": { - "x": 0, - "y": 0, - "w": 71, - "h": 88 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 89 - }, - "frame": { - "x": 71, - "y": 0, - "w": 73, - "h": 89 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 74, - "h": 89 - }, - "frame": { - "x": 144, - "y": 0, - "w": 74, - "h": 89 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 74, - "h": 89 - }, - "frame": { - "x": 144, - "y": 0, - "w": 74, - "h": 89 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 74, - "h": 89 - }, - "frame": { - "x": 0, - "y": 89, - "w": 74, - "h": 89 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 74, - "h": 89 - }, - "frame": { - "x": 0, - "y": 89, - "w": 74, - "h": 89 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 73, - "h": 89 - }, - "frame": { - "x": 74, - "y": 89, - "w": 73, - "h": 89 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 73, - "h": 89 - }, - "frame": { - "x": 74, - "y": 89, - "w": 73, - "h": 89 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 72, - "h": 89 - }, - "frame": { - "x": 147, - "y": 89, - "w": 72, - "h": 89 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 72, - "h": 89 - }, - "frame": { - "x": 147, - "y": 89, - "w": 72, - "h": 89 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:ca886cfe27a80d5575319fa107b1227d:f6e306f8382a9caca9560b144b026413:7b4a06b06cbac24b3f39727b0238661b$" - } -} diff --git a/public/images/pokemon/exp/718.png b/public/images/pokemon/exp/718.png deleted file mode 100644 index 01595585059..00000000000 Binary files a/public/images/pokemon/exp/718.png and /dev/null differ diff --git a/public/images/pokemon/exp/719.json b/public/images/pokemon/exp/719.json deleted file mode 100644 index 289b518f437..00000000000 --- a/public/images/pokemon/exp/719.json +++ /dev/null @@ -1,1091 +0,0 @@ -{ - "textures": [ - { - "image": "719.png", - "format": "RGBA8888", - "size": { - "w": 210, - "h": 210 - }, - "scale": 1, - "frames": [ - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 24, - "y": 10, - "w": 49, - "h": 67 - }, - "frame": { - "x": 0, - "y": 0, - "w": 49, - "h": 67 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 24, - "y": 6, - "w": 49, - "h": 67 - }, - "frame": { - "x": 0, - "y": 0, - "w": 49, - "h": 67 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 24, - "y": 10, - "w": 49, - "h": 67 - }, - "frame": { - "x": 0, - "y": 0, - "w": 49, - "h": 67 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 24, - "y": 6, - "w": 49, - "h": 67 - }, - "frame": { - "x": 0, - "y": 0, - "w": 49, - "h": 67 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 24, - "y": 10, - "w": 49, - "h": 67 - }, - "frame": { - "x": 0, - "y": 0, - "w": 49, - "h": 67 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 24, - "y": 6, - "w": 49, - "h": 67 - }, - "frame": { - "x": 0, - "y": 0, - "w": 49, - "h": 67 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 34, - "y": 9, - "w": 48, - "h": 67 - }, - "frame": { - "x": 49, - "y": 0, - "w": 48, - "h": 67 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 22, - "y": 5, - "w": 48, - "h": 67 - }, - "frame": { - "x": 49, - "y": 0, - "w": 48, - "h": 67 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 16, - "y": 3, - "w": 48, - "h": 67 - }, - "frame": { - "x": 49, - "y": 0, - "w": 48, - "h": 67 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 48, - "h": 67 - }, - "frame": { - "x": 49, - "y": 0, - "w": 48, - "h": 67 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 8, - "w": 47, - "h": 67 - }, - "frame": { - "x": 97, - "y": 0, - "w": 47, - "h": 67 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 8, - "w": 47, - "h": 67 - }, - "frame": { - "x": 97, - "y": 0, - "w": 47, - "h": 67 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 4, - "w": 47, - "h": 67 - }, - "frame": { - "x": 97, - "y": 0, - "w": 47, - "h": 67 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 6, - "w": 47, - "h": 67 - }, - "frame": { - "x": 97, - "y": 0, - "w": 47, - "h": 67 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 8, - "w": 47, - "h": 67 - }, - "frame": { - "x": 97, - "y": 0, - "w": 47, - "h": 67 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 8, - "w": 47, - "h": 67 - }, - "frame": { - "x": 97, - "y": 0, - "w": 47, - "h": 67 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 4, - "w": 47, - "h": 67 - }, - "frame": { - "x": 97, - "y": 0, - "w": 47, - "h": 67 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 6, - "w": 47, - "h": 67 - }, - "frame": { - "x": 97, - "y": 0, - "w": 47, - "h": 67 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 8, - "w": 47, - "h": 67 - }, - "frame": { - "x": 97, - "y": 0, - "w": 47, - "h": 67 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 8, - "w": 47, - "h": 67 - }, - "frame": { - "x": 97, - "y": 0, - "w": 47, - "h": 67 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 4, - "w": 47, - "h": 67 - }, - "frame": { - "x": 97, - "y": 0, - "w": 47, - "h": 67 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 6, - "w": 47, - "h": 67 - }, - "frame": { - "x": 97, - "y": 0, - "w": 47, - "h": 67 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 46, - "h": 67 - }, - "frame": { - "x": 144, - "y": 0, - "w": 46, - "h": 67 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 48, - "h": 66 - }, - "frame": { - "x": 0, - "y": 67, - "w": 48, - "h": 66 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 48, - "y": 12, - "w": 46, - "h": 66 - }, - "frame": { - "x": 48, - "y": 67, - "w": 46, - "h": 66 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 45, - "y": 1, - "w": 45, - "h": 67 - }, - "frame": { - "x": 94, - "y": 67, - "w": 45, - "h": 67 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 12, - "y": 8, - "w": 45, - "h": 67 - }, - "frame": { - "x": 94, - "y": 67, - "w": 45, - "h": 67 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 19, - "y": 5, - "w": 45, - "h": 67 - }, - "frame": { - "x": 94, - "y": 67, - "w": 45, - "h": 67 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 6, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 6, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 4, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 2, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 6, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 6, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 6, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 4, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 2, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 6, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 6, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 6, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 4, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 2, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 6, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 27, - "y": 4, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 6, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 36, - "y": 2, - "w": 42, - "h": 67 - }, - "frame": { - "x": 44, - "y": 133, - "w": 42, - "h": 67 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 54, - "y": 3, - "w": 42, - "h": 67 - }, - "frame": { - "x": 139, - "y": 67, - "w": 42, - "h": 67 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 23, - "y": 6, - "w": 42, - "h": 67 - }, - "frame": { - "x": 139, - "y": 67, - "w": 42, - "h": 67 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 1, - "y": 12, - "w": 42, - "h": 66 - }, - "frame": { - "x": 86, - "y": 134, - "w": 42, - "h": 66 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 55, - "y": 6, - "w": 41, - "h": 67 - }, - "frame": { - "x": 128, - "y": 134, - "w": 41, - "h": 67 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 41, - "h": 67 - }, - "frame": { - "x": 169, - "y": 134, - "w": 41, - "h": 67 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:eb63d565533cc4db6abe2324f72ce7a0:5cfab760df87a56d5ca4db54a28b4a46:17a705bb924916761be2495822a53735$" - } -} diff --git a/public/images/pokemon/exp/719.png b/public/images/pokemon/exp/719.png deleted file mode 100644 index f9059000661..00000000000 Binary files a/public/images/pokemon/exp/719.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/248-mega.json b/public/images/pokemon/exp/back/248-mega.json index 25bc42548ab..ddd3987db90 100644 --- a/public/images/pokemon/exp/back/248-mega.json +++ b/public/images/pokemon/exp/back/248-mega.json @@ -1,272 +1,929 @@ -{ - "textures": [ - { - "image": "248-mega.png", - "format": "RGBA8888", - "size": { - "w": 292, - "h": 292 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 74 - }, - "frame": { - "x": 0, - "y": 0, - "w": 80, - "h": 74 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 74 - }, - "frame": { - "x": 0, - "y": 74, - "w": 80, - "h": 74 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 74 - }, - "frame": { - "x": 0, - "y": 148, - "w": 79, - "h": 74 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 74 - }, - "frame": { - "x": 79, - "y": 148, - "w": 79, - "h": 74 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 73 - }, - "frame": { - "x": 80, - "y": 0, - "w": 79, - "h": 73 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 73 - }, - "frame": { - "x": 80, - "y": 73, - "w": 79, - "h": 73 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 75, - "h": 73 - }, - "frame": { - "x": 158, - "y": 146, - "w": 75, - "h": 73 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 75, - "h": 73 - }, - "frame": { - "x": 158, - "y": 146, - "w": 75, - "h": 73 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 75, - "h": 73 - }, - "frame": { - "x": 158, - "y": 219, - "w": 75, - "h": 73 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 75, - "h": 73 - }, - "frame": { - "x": 158, - "y": 219, - "w": 75, - "h": 73 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 73, - "h": 73 - }, - "frame": { - "x": 159, - "y": 0, - "w": 73, - "h": 73 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 73, - "h": 73 - }, - "frame": { - "x": 159, - "y": 73, - "w": 73, - "h": 73 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:625e35ec9f8e731e89fa37587ffb4738:07d356e18baf0312a4e8a36adb76fdd5:90df97eb431b7162252516cb937a0b9e$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 101, "w": 82, "h": 92 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 82, "h": 92 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 430, "y": 101, "w": 82, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 82, "h": 91 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 195, "w": 84, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 84, "h": 88 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 173, "y": 287, "w": 85, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 85, "h": 85 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 373, "w": 85, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 85, "h": 80 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 84, "y": 456, "w": 85, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 85, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 511, "y": 534, "w": 84, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 84, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 512, "y": 612, "w": 83, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 83, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 427, "y": 612, "w": 83, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 83, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 255, "y": 536, "w": 84, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 84, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 169, "y": 535, "w": 84, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 84, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 431, "y": 455, "w": 84, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 84, "h": 77 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 340, "y": 456, "w": 83, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 83, "h": 77 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 171, "y": 456, "w": 83, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 83, "h": 77 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 171, "y": 374, "w": 83, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 83, "h": 80 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 516, "y": 287, "w": 83, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 83, "h": 83 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 347, "y": 287, "w": 83, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 83, "h": 85 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 256, "y": 196, "w": 83, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 89 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 342, "y": 192, "w": 82, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 82, "h": 91 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 0, "y": 101, "w": 82, "h": 92 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 82, "h": 92 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 430, "y": 101, "w": 82, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 82, "h": 91 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 0, "y": 195, "w": 84, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 84, "h": 88 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 173, "y": 287, "w": 85, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 85, "h": 85 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 260, "y": 373, "w": 85, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 85, "h": 80 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 84, "y": 456, "w": 85, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 85, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 511, "y": 534, "w": 84, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 84, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 85, "y": 613, "w": 83, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 83, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 427, "y": 612, "w": 83, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 83, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 255, "y": 536, "w": 84, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 84, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 169, "y": 535, "w": 84, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 84, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 431, "y": 455, "w": 84, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 84, "h": 77 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 340, "y": 456, "w": 83, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 83, "h": 77 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 171, "y": 456, "w": 83, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 83, "h": 77 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 171, "y": 374, "w": 83, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 83, "h": 80 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 516, "y": 287, "w": 83, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 83, "h": 83 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 347, "y": 287, "w": 83, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 83, "h": 85 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 256, "y": 196, "w": 83, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 89 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 342, "y": 192, "w": 82, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 82, "h": 91 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 0, "y": 101, "w": 82, "h": 92 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 82, "h": 92 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 430, "y": 101, "w": 82, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 82, "h": 91 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 195, "w": 84, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 84, "h": 88 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 173, "y": 287, "w": 85, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 85, "h": 85 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 260, "y": 373, "w": 85, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 85, "h": 80 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 84, "y": 456, "w": 85, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 85, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 341, "y": 612, "w": 84, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 84, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 0, "y": 613, "w": 83, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 83, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 427, "y": 612, "w": 83, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 83, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 255, "y": 536, "w": 84, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 84, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 169, "y": 535, "w": 84, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 84, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 518, "y": 455, "w": 84, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 84, "h": 77 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 84, "y": 534, "w": 83, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 83, "h": 77 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 171, "y": 456, "w": 83, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 83, "h": 77 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 171, "y": 374, "w": 83, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 83, "h": 80 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 516, "y": 287, "w": 83, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 83, "h": 83 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 347, "y": 287, "w": 83, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 83, "h": 85 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 256, "y": 196, "w": 83, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 89 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 342, "y": 192, "w": 82, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 82, "h": 91 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 0, "y": 101, "w": 82, "h": 92 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 82, "h": 92 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 430, "y": 101, "w": 82, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 82, "h": 91 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 0, "y": 195, "w": 84, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 84, "h": 88 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 173, "y": 287, "w": 85, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 85, "h": 85 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 260, "y": 373, "w": 85, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 85, "h": 80 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 84, "y": 456, "w": 85, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 85, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 425, "y": 534, "w": 84, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 84, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 0, "y": 613, "w": 83, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 83, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 427, "y": 612, "w": 83, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 83, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 255, "y": 536, "w": 84, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 84, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 169, "y": 535, "w": 84, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 84, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 518, "y": 455, "w": 84, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 84, "h": 77 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 84, "y": 534, "w": 83, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 83, "h": 77 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 171, "y": 456, "w": 83, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 83, "h": 77 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 171, "y": 374, "w": 83, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 83, "h": 80 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 516, "y": 287, "w": 83, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 83, "h": 83 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 347, "y": 287, "w": 83, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 83, "h": 85 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 256, "y": 196, "w": 83, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 89 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 342, "y": 192, "w": 82, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 82, "h": 91 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 0, "y": 101, "w": 82, "h": 92 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 82, "h": 92 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 426, "y": 194, "w": 82, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 82, "h": 91 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 510, "y": 196, "w": 83, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 83, "h": 89 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 0, "y": 285, "w": 83, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 83, "h": 86 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 432, "y": 287, "w": 82, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 82, "h": 85 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 85, "y": 288, "w": 82, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 82, "h": 83 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 87, "y": 373, "w": 82, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 82, "h": 81 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 431, "y": 374, "w": 82, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 82, "h": 79 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 0, "y": 455, "w": 82, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 82, "h": 79 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 256, "y": 455, "w": 82, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 82, "h": 79 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 347, "y": 374, "w": 82, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 82, "h": 80 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 516, "y": 372, "w": 84, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 84, "h": 81 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 260, "y": 287, "w": 85, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 85, "h": 84 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 86, "y": 200, "w": 85, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 85, "h": 86 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 342, "y": 101, "w": 86, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 86, "h": 89 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 256, "y": 100, "w": 84, "h": 94 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 84, "h": 94 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 86, "y": 100, "w": 83, "h": 98 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 83, "h": 98 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 514, "y": 0, "w": 83, "h": 98 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 83, "h": 98 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 344, "y": 0, "w": 83, "h": 99 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 83, "h": 99 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 429, "y": 0, "w": 83, "h": 99 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 83, "h": 99 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 0, "y": 0, "w": 84, "h": 99 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 84, "h": 99 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 86, "y": 0, "w": 84, "h": 98 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 84, "h": 98 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 172, "y": 0, "w": 84, "h": 98 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 84, "h": 98 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 258, "y": 0, "w": 84, "h": 98 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 84, "h": 98 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 171, "y": 100, "w": 83, "h": 97 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 83, "h": 97 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 514, "y": 100, "w": 83, "h": 94 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 83, "h": 94 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "248-mega.png", + "format": "I8", + "size": { "w": 602, "h": 689 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/248-mega.png b/public/images/pokemon/exp/back/248-mega.png index 4b2a4021721..1e4918e5ca7 100644 Binary files a/public/images/pokemon/exp/back/248-mega.png and b/public/images/pokemon/exp/back/248-mega.png differ diff --git a/public/images/pokemon/exp/back/362-mega.json b/public/images/pokemon/exp/back/362-mega.json index 6f5b4ea32bb..02354ddad93 100644 --- a/public/images/pokemon/exp/back/362-mega.json +++ b/public/images/pokemon/exp/back/362-mega.json @@ -1,272 +1,551 @@ -{ - "textures": [ - { - "image": "362-mega.png", - "format": "RGBA8888", - "size": { - "w": 140, - "h": 140 - }, - "scale": 1, - "frames": [ - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 72 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 61, - "h": 71 - }, - "frame": { - "x": 0, - "y": 0, - "w": 61, - "h": 71 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 72 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 61, - "h": 71 - }, - "frame": { - "x": 0, - "y": 0, - "w": 61, - "h": 71 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 72 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 61, - "h": 71 - }, - "frame": { - "x": 0, - "y": 0, - "w": 61, - "h": 71 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 72 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 61, - "h": 71 - }, - "frame": { - "x": 0, - "y": 0, - "w": 61, - "h": 71 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 72 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 61, - "h": 70 - }, - "frame": { - "x": 61, - "y": 0, - "w": 61, - "h": 70 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 72 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 61, - "h": 70 - }, - "frame": { - "x": 61, - "y": 0, - "w": 61, - "h": 70 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 72 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 61, - "h": 70 - }, - "frame": { - "x": 61, - "y": 0, - "w": 61, - "h": 70 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 72 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 61, - "h": 70 - }, - "frame": { - "x": 61, - "y": 0, - "w": 61, - "h": 70 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 72 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 61, - "h": 70 - }, - "frame": { - "x": 61, - "y": 70, - "w": 61, - "h": 70 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 72 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 61, - "h": 70 - }, - "frame": { - "x": 61, - "y": 70, - "w": 61, - "h": 70 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 72 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 61, - "h": 69 - }, - "frame": { - "x": 0, - "y": 71, - "w": 61, - "h": 69 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 72 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 61, - "h": 69 - }, - "frame": { - "x": 0, - "y": 71, - "w": 61, - "h": 69 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:b710cac988ef0d2bf31cf4b83951fd3a:aaedfd5f04a5c93bc13787cb0b73c4e3:8a7271a5423838c97ddeb1e6dc343255$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 14, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 16, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 18, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 15, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 14, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 16, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 18, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 15, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 14, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 16, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 18, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 15, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 0, "y": 0, "w": 65, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 65, "h": 68 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 67, "y": 66, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 58, "h": 66 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 0, "w": 65, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 65, "h": 68 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 67, "y": 66, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 58, "h": 66 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 0, "y": 0, "w": 65, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 65, "h": 68 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 67, "y": 66, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 58, "h": 66 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 0, "y": 0, "w": 65, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 65, "h": 68 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 67, "y": 66, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 58, "h": 66 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 0, "w": 65, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 65, "h": 68 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 67, "y": 66, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 58, "h": 66 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 0, "y": 0, "w": 65, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 65, "h": 68 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 67, "y": 66, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 58, "h": 66 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "362-mega.png", + "format": "I8", + "size": { "w": 128, "h": 132 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/362-mega.png b/public/images/pokemon/exp/back/362-mega.png index 81f9bb5cdcd..5bbfd932d33 100644 Binary files a/public/images/pokemon/exp/back/362-mega.png and b/public/images/pokemon/exp/back/362-mega.png differ diff --git a/public/images/pokemon/exp/back/382-primal.png b/public/images/pokemon/exp/back/382-primal.png index 55c73cf877e..7bf840bcf24 100644 Binary files a/public/images/pokemon/exp/back/382-primal.png and b/public/images/pokemon/exp/back/382-primal.png differ diff --git a/public/images/pokemon/exp/back/651.json b/public/images/pokemon/exp/back/651.json index 2dfe8c0091a..d000767029c 100644 --- a/public/images/pokemon/exp/back/651.json +++ b/public/images/pokemon/exp/back/651.json @@ -1,104 +1,713 @@ -{ - "textures": [ - { - "image": "651.png", - "format": "RGBA8888", - "size": { - "w": 106, - "h": 106 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 50 - }, - "frame": { - "x": 0, - "y": 0, - "w": 53, - "h": 50 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 50 - }, - "frame": { - "x": 0, - "y": 0, - "w": 53, - "h": 50 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 50 - }, - "frame": { - "x": 53, - "y": 0, - "w": 53, - "h": 50 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 53, - "h": 49 - }, - "frame": { - "x": 0, - "y": 50, - "w": 53, - "h": 49 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:04a3a807a85b2fbb34c6e0e609d7bcd9:4422017bd667a14a570c0aab29c8a613:a93e5fa02e10bf11e3ed8bf6571835ca$" - } -} \ No newline at end of file +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 167, "y": 0, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 222, "y": 0, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 277, "y": 0, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 56, "y": 100, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 54, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 277, "y": 150, "w": 53, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 53, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 329, "y": 200, "w": 52, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 52, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 330, "y": 150, "w": 53, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 53, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 198, "w": 53, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 53, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 110, "y": 100, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 54, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 164, "y": 100, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 54, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 218, "y": 100, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 54, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 55, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 110, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 55, "y": 0, "w": 56, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 56, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 165, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 0, "w": 55, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 55, "h": 51 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 220, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 111, "y": 0, "w": 56, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 56, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 275, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 330, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 167, "y": 0, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 222, "y": 0, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 277, "y": 0, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 56, "y": 100, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 54, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 277, "y": 150, "w": 53, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 53, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 329, "y": 200, "w": 52, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 52, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 330, "y": 150, "w": 53, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 53, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 0, "y": 198, "w": 53, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 53, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 110, "y": 100, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 54, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 164, "y": 100, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 54, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 218, "y": 100, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 54, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 55, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 110, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 55, "y": 0, "w": 56, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 56, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 165, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 0, "w": 55, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 55, "h": 51 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 220, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 111, "y": 0, "w": 56, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 56, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 275, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 330, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 167, "y": 0, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 222, "y": 0, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 277, "y": 0, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 56, "y": 100, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 54, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 277, "y": 150, "w": 53, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 53, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 329, "y": 200, "w": 52, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 52, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 330, "y": 150, "w": 53, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 53, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 0, "y": 198, "w": 53, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 53, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 110, "y": 100, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 54, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 164, "y": 100, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 54, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 218, "y": 100, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 54, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 55, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 110, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 55, "y": 0, "w": 56, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 56, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 165, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 0, "w": 55, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 55, "h": 51 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 220, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 111, "y": 0, "w": 56, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 56, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 275, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 330, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 272, "y": 100, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 54, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 0, "y": 100, "w": 56, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 56, "h": 49 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 0, "y": 51, "w": 55, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 55, "h": 49 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 165, "y": 150, "w": 56, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 56, "h": 48 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 160, "y": 247, "w": 55, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 55, "h": 47 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 221, "y": 150, "w": 56, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 56, "h": 48 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 273, "y": 200, "w": 56, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 56, "h": 47 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 0, "y": 149, "w": 55, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 55, "h": 49 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 332, "y": 0, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 165, "y": 198, "w": 54, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 54, "h": 49 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 215, "y": 247, "w": 53, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 53, "h": 48 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 107, "y": 247, "w": 53, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 53, "h": 49 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 219, "y": 198, "w": 54, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 54, "h": 49 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 326, "y": 100, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 54, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 53, "y": 199, "w": 54, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 54, "h": 49 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 107, "y": 199, "w": 55, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 55, "h": 48 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 55, "y": 150, "w": 55, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 55, "h": 49 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 110, "y": 150, "w": 55, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 55, "h": 49 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "651.png", + "format": "I8", + "size": { "w": 387, "h": 296 }, + "scale": "1" + } +} diff --git a/public/images/pokemon/exp/back/651.png b/public/images/pokemon/exp/back/651.png index dd8d2b22d61..b16c8d5d67b 100644 Binary files a/public/images/pokemon/exp/back/651.png and b/public/images/pokemon/exp/back/651.png differ diff --git a/public/images/pokemon/exp/back/653.json b/public/images/pokemon/exp/back/653.json index 48c09e77b1b..c5fb4a5db61 100644 --- a/public/images/pokemon/exp/back/653.json +++ b/public/images/pokemon/exp/back/653.json @@ -1,2036 +1,947 @@ -{ - "textures": [ - { - "image": "653.png", - "format": "RGBA8888", - "size": { - "w": 173, - "h": 173 - }, - "scale": 1, - "frames": [ - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 45, - "y": 0, - "w": 45, - "h": 44 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 45, - "y": 0, - "w": 45, - "h": 44 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 45, - "y": 0, - "w": 45, - "h": 44 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 45, - "y": 0, - "w": 45, - "h": 44 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 45, - "y": 0, - "w": 45, - "h": 44 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 90, - "y": 0, - "w": 45, - "h": 44 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 90, - "y": 0, - "w": 45, - "h": 44 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 90, - "y": 0, - "w": 45, - "h": 44 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 90, - "y": 0, - "w": 45, - "h": 44 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 45, - "h": 44 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 45, - "h": 44 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 45, - "h": 44 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 45, - "h": 44 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 43, - "h": 40 - }, - "frame": { - "x": 43, - "y": 132, - "w": 43, - "h": 40 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 43, - "h": 40 - }, - "frame": { - "x": 43, - "y": 132, - "w": 43, - "h": 40 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 43, - "h": 40 - }, - "frame": { - "x": 43, - "y": 132, - "w": 43, - "h": 40 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 43, - "h": 40 - }, - "frame": { - "x": 43, - "y": 132, - "w": 43, - "h": 40 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 43, - "h": 40 - }, - "frame": { - "x": 43, - "y": 132, - "w": 43, - "h": 40 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 43, - "h": 40 - }, - "frame": { - "x": 43, - "y": 132, - "w": 43, - "h": 40 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 43, - "h": 40 - }, - "frame": { - "x": 43, - "y": 132, - "w": 43, - "h": 40 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 43, - "h": 40 - }, - "frame": { - "x": 43, - "y": 132, - "w": 43, - "h": 40 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 43, - "h": 40 - }, - "frame": { - "x": 43, - "y": 132, - "w": 43, - "h": 40 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 43, - "h": 40 - }, - "frame": { - "x": 43, - "y": 132, - "w": 43, - "h": 40 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 44 - }, - "frame": { - "x": 45, - "y": 44, - "w": 44, - "h": 44 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 44 - }, - "frame": { - "x": 45, - "y": 44, - "w": 44, - "h": 44 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 44 - }, - "frame": { - "x": 45, - "y": 44, - "w": 44, - "h": 44 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 44 - }, - "frame": { - "x": 45, - "y": 44, - "w": 44, - "h": 44 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 43, - "h": 44 - }, - "frame": { - "x": 45, - "y": 88, - "w": 43, - "h": 44 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 43, - "h": 44 - }, - "frame": { - "x": 45, - "y": 88, - "w": 43, - "h": 44 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 43, - "h": 44 - }, - "frame": { - "x": 45, - "y": 88, - "w": 43, - "h": 44 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 40, - "h": 44 - }, - "frame": { - "x": 88, - "y": 88, - "w": 40, - "h": 44 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 40, - "h": 44 - }, - "frame": { - "x": 88, - "y": 88, - "w": 40, - "h": 44 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 40, - "h": 44 - }, - "frame": { - "x": 88, - "y": 88, - "w": 40, - "h": 44 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 40, - "h": 44 - }, - "frame": { - "x": 88, - "y": 88, - "w": 40, - "h": 44 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 40, - "h": 44 - }, - "frame": { - "x": 88, - "y": 88, - "w": 40, - "h": 44 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 40, - "h": 44 - }, - "frame": { - "x": 88, - "y": 88, - "w": 40, - "h": 44 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 40, - "h": 44 - }, - "frame": { - "x": 88, - "y": 88, - "w": 40, - "h": 44 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 40, - "h": 44 - }, - "frame": { - "x": 88, - "y": 88, - "w": 40, - "h": 44 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 40, - "h": 44 - }, - "frame": { - "x": 88, - "y": 88, - "w": 40, - "h": 44 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 40, - "h": 44 - }, - "frame": { - "x": 88, - "y": 88, - "w": 40, - "h": 44 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 40, - "h": 44 - }, - "frame": { - "x": 88, - "y": 88, - "w": 40, - "h": 44 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 40, - "h": 44 - }, - "frame": { - "x": 88, - "y": 88, - "w": 40, - "h": 44 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 41, - "h": 43 - }, - "frame": { - "x": 89, - "y": 44, - "w": 41, - "h": 43 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 41, - "h": 43 - }, - "frame": { - "x": 89, - "y": 44, - "w": 41, - "h": 43 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 41, - "h": 43 - }, - "frame": { - "x": 89, - "y": 44, - "w": 41, - "h": 43 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 41, - "h": 43 - }, - "frame": { - "x": 89, - "y": 44, - "w": 41, - "h": 43 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 41, - "h": 43 - }, - "frame": { - "x": 89, - "y": 44, - "w": 41, - "h": 43 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 41, - "h": 43 - }, - "frame": { - "x": 89, - "y": 44, - "w": 41, - "h": 43 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 41, - "h": 43 - }, - "frame": { - "x": 89, - "y": 44, - "w": 41, - "h": 43 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 41, - "h": 43 - }, - "frame": { - "x": 89, - "y": 44, - "w": 41, - "h": 43 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 41, - "h": 43 - }, - "frame": { - "x": 130, - "y": 44, - "w": 41, - "h": 43 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 41, - "h": 43 - }, - "frame": { - "x": 130, - "y": 44, - "w": 41, - "h": 43 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 87, - "w": 40, - "h": 43 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 87, - "w": 40, - "h": 43 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 87, - "w": 40, - "h": 43 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 87, - "w": 40, - "h": 43 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 130, - "w": 40, - "h": 43 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 130, - "w": 40, - "h": 43 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 130, - "w": 40, - "h": 43 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 130, - "w": 40, - "h": 43 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 130, - "w": 40, - "h": 43 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 130, - "w": 40, - "h": 43 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 130, - "w": 40, - "h": 43 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 130, - "w": 40, - "h": 43 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 130, - "w": 40, - "h": 43 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 130, - "w": 40, - "h": 43 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 130, - "w": 40, - "h": 43 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 130, - "w": 40, - "h": 43 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 130, - "w": 40, - "h": 43 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 130, - "w": 40, - "h": 43 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 130, - "w": 40, - "h": 43 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 130, - "w": 40, - "h": 43 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:2657d933ba34a7364529c17b46d25589:b79a47cc022bd83470144fdf9b951be2:a7be961d0230f568aff23d95e7ff0036$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0002.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0003.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0004.png", + "frame": { "x": 0, "y": 123, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 123, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 84, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 42, "h": 39 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0009.png", + "frame": { "x": 0, "y": 84, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 42, "h": 39 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0012.png", + "frame": { "x": 38, "y": 128, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0013.png", + "frame": { "x": 38, "y": 128, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0014.png", + "frame": { "x": 42, "y": 86, "w": 39, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0015.png", + "frame": { "x": 42, "y": 86, "w": 39, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0016.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0017.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0018.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0019.png", + "frame": { "x": 0, "y": 123, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0020.png", + "frame": { "x": 0, "y": 123, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0021.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0022.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0023.png", + "frame": { "x": 0, "y": 84, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 42, "h": 39 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0024.png", + "frame": { "x": 0, "y": 84, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 42, "h": 39 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0027.png", + "frame": { "x": 38, "y": 128, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0028.png", + "frame": { "x": 38, "y": 128, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0029.png", + "frame": { "x": 130, "y": 86, "w": 39, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0030.png", + "frame": { "x": 130, "y": 86, "w": 39, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0031.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0032.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0033.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0034.png", + "frame": { "x": 38, "y": 128, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0035.png", + "frame": { "x": 38, "y": 128, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0038.png", + "frame": { "x": 0, "y": 84, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 42, "h": 39 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0039.png", + "frame": { "x": 0, "y": 84, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 42, "h": 39 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0040.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0042.png", + "frame": { "x": 38, "y": 128, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0043.png", + "frame": { "x": 38, "y": 128, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0044.png", + "frame": { "x": 42, "y": 86, "w": 39, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0045.png", + "frame": { "x": 42, "y": 86, "w": 39, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0046.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0047.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0048.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0049.png", + "frame": { "x": 38, "y": 128, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0050.png", + "frame": { "x": 38, "y": 128, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0051.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0052.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0053.png", + "frame": { "x": 0, "y": 84, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 42, "h": 39 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 84, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 42, "h": 39 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0057.png", + "frame": { "x": 38, "y": 128, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0058.png", + "frame": { "x": 38, "y": 128, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0059.png", + "frame": { "x": 42, "y": 86, "w": 39, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0060.png", + "frame": { "x": 42, "y": 86, "w": 39, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0063.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0064.png", + "frame": { "x": 38, "y": 128, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0065.png", + "frame": { "x": 38, "y": 128, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0066.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0067.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0068.png", + "frame": { "x": 0, "y": 84, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 42, "h": 39 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0069.png", + "frame": { "x": 0, "y": 84, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 42, "h": 39 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0070.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0071.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0072.png", + "frame": { "x": 38, "y": 128, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0073.png", + "frame": { "x": 38, "y": 128, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0074.png", + "frame": { "x": 42, "y": 86, "w": 39, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0075.png", + "frame": { "x": 42, "y": 86, "w": 39, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0076.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0077.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0078.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0079.png", + "frame": { "x": 130, "y": 43, "w": 41, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 41, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0080.png", + "frame": { "x": 130, "y": 43, "w": 41, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 41, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0081.png", + "frame": { "x": 88, "y": 43, "w": 42, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 42, "h": 44 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0082.png", + "frame": { "x": 88, "y": 43, "w": 42, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 42, "h": 44 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0083.png", + "frame": { "x": 0, "y": 0, "w": 44, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 44, "h": 44 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0084.png", + "frame": { "x": 0, "y": 0, "w": 44, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 44, "h": 44 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0085.png", + "frame": { "x": 44, "y": 0, "w": 44, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0086.png", + "frame": { "x": 44, "y": 0, "w": 44, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0087.png", + "frame": { "x": 44, "y": 0, "w": 44, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0088.png", + "frame": { "x": 88, "y": 0, "w": 44, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0089.png", + "frame": { "x": 88, "y": 0, "w": 44, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0090.png", + "frame": { "x": 44, "y": 0, "w": 44, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0091.png", + "frame": { "x": 44, "y": 0, "w": 44, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0092.png", + "frame": { "x": 88, "y": 0, "w": 44, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0093.png", + "frame": { "x": 88, "y": 0, "w": 44, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0094.png", + "frame": { "x": 44, "y": 0, "w": 44, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0095.png", + "frame": { "x": 132, "y": 0, "w": 44, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0096.png", + "frame": { "x": 132, "y": 0, "w": 44, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0097.png", + "frame": { "x": 44, "y": 43, "w": 44, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0098.png", + "frame": { "x": 44, "y": 43, "w": 44, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0099.png", + "frame": { "x": 0, "y": 0, "w": 44, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 44, "h": 44 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0100.png", + "frame": { "x": 0, "y": 0, "w": 44, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 44, "h": 44 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0101.png", + "frame": { "x": 88, "y": 43, "w": 42, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 42, "h": 44 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0102.png", + "frame": { "x": 88, "y": 43, "w": 42, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 42, "h": 44 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0103.png", + "frame": { "x": 130, "y": 43, "w": 41, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 41, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0104.png", + "frame": { "x": 130, "y": 43, "w": 41, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 41, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "653.png", + "format": "I8", + "size": { "w": 176, "h": 170 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/653.png b/public/images/pokemon/exp/back/653.png index 1f9cb2fe168..58682e90e58 100644 Binary files a/public/images/pokemon/exp/back/653.png and b/public/images/pokemon/exp/back/653.png differ diff --git a/public/images/pokemon/exp/back/654.json b/public/images/pokemon/exp/back/654.json index e62078dc236..a5bd681b6cb 100644 --- a/public/images/pokemon/exp/back/654.json +++ b/public/images/pokemon/exp/back/654.json @@ -1,188 +1,677 @@ -{ - "textures": [ - { - "image": "654.png", - "format": "RGBA8888", - "size": { - "w": 120, - "h": 120 - }, - "scale": 1, - "frames": [ - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 66 - }, - "frame": { - "x": 0, - "y": 0, - "w": 40, - "h": 66 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 66 - }, - "frame": { - "x": 0, - "y": 0, - "w": 40, - "h": 66 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 66 - }, - "frame": { - "x": 0, - "y": 0, - "w": 40, - "h": 66 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 66 - }, - "frame": { - "x": 0, - "y": 0, - "w": 40, - "h": 66 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 66 - }, - "frame": { - "x": 40, - "y": 0, - "w": 40, - "h": 66 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 66 - }, - "frame": { - "x": 40, - "y": 0, - "w": 40, - "h": 66 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 40, - "h": 65 - }, - "frame": { - "x": 80, - "y": 0, - "w": 40, - "h": 65 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 40, - "h": 65 - }, - "frame": { - "x": 80, - "y": 0, - "w": 40, - "h": 65 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:d0b30f6e084cc1428328b2f8b9fbe624:bf595af9905e0e91443856bfefa85a3a:1977f50e1ab8a3304ceeb59ee1aa2ba9$" - } -} \ No newline at end of file +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 263, "w": 50, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 50, "h": 67 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 102, "y": 203, "w": 52, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 52, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 161, "y": 130, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 0, "y": 0, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 55, "y": 0, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 110, "y": 0, "w": 53, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 53, "h": 68 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 110, "y": 68, "w": 51, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 51, "h": 69 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 214, "y": 195, "w": 51, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 51, "h": 68 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 0, "y": 263, "w": 50, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 50, "h": 67 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 102, "y": 203, "w": 52, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 52, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 161, "y": 130, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 0, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 55, "y": 0, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 110, "y": 0, "w": 53, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 53, "h": 68 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 110, "y": 68, "w": 51, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 51, "h": 69 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 214, "y": 195, "w": 51, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 51, "h": 68 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 263, "w": 50, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 50, "h": 67 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 102, "y": 203, "w": 52, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 52, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 161, "y": 130, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 0, "y": 0, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 55, "y": 0, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 110, "y": 0, "w": 53, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 53, "h": 68 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 110, "y": 68, "w": 51, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 51, "h": 69 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 214, "y": 195, "w": 51, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 51, "h": 68 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 263, "w": 50, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 50, "h": 67 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 102, "y": 203, "w": 52, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 52, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 161, "y": 130, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 0, "y": 0, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 55, "y": 0, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 110, "y": 0, "w": 53, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 53, "h": 68 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 110, "y": 68, "w": 51, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 51, "h": 69 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 214, "y": 195, "w": 51, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 51, "h": 68 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 0, "y": 263, "w": 50, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 50, "h": 67 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 102, "y": 203, "w": 52, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 52, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 161, "y": 130, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 0, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 55, "y": 0, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 110, "y": 0, "w": 53, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 53, "h": 68 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 110, "y": 68, "w": 51, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 51, "h": 69 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 214, "y": 195, "w": 51, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 51, "h": 68 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 263, "w": 50, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 50, "h": 67 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 102, "y": 203, "w": 52, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 52, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 161, "y": 130, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 0, "y": 0, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 55, "y": 0, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 110, "y": 0, "w": 53, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 53, "h": 68 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 110, "y": 68, "w": 51, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 51, "h": 69 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 214, "y": 195, "w": 51, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 51, "h": 68 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 263, "w": 50, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 50, "h": 67 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 215, "y": 130, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 163, "y": 0, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 108, "y": 137, "w": 53, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 53, "h": 66 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 50, "y": 263, "w": 50, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 50, "h": 66 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 131, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 218, "y": 0, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 161, "y": 195, "w": 53, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 53, "h": 66 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 154, "y": 261, "w": 52, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 52, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 54, "y": 131, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 163, "y": 65, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 154, "y": 261, "w": 52, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 52, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 54, "y": 131, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 163, "y": 65, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 154, "y": 261, "w": 52, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 52, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 54, "y": 131, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 163, "y": 65, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 154, "y": 261, "w": 52, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 52, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 54, "y": 131, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 218, "y": 65, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 0, "y": 66, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 0, "y": 66, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 55, "y": 66, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 108, "y": 137, "w": 53, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 53, "h": 66 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 0, "y": 196, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 51, "h": 67 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 51, "y": 196, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 51, "h": 67 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "654.png", + "format": "I8", + "size": { "w": 273, "h": 330 }, + "scale": "1" + } +} diff --git a/public/images/pokemon/exp/back/654.png b/public/images/pokemon/exp/back/654.png index 1f8fdd06967..f5d317f8a2e 100644 Binary files a/public/images/pokemon/exp/back/654.png and b/public/images/pokemon/exp/back/654.png differ diff --git a/public/images/pokemon/exp/back/656.json b/public/images/pokemon/exp/back/656.json index 45c9ae75c29..78a3ae89852 100644 --- a/public/images/pokemon/exp/back/656.json +++ b/public/images/pokemon/exp/back/656.json @@ -1,1007 +1,713 @@ -{ - "textures": [ - { - "image": "656.png", - "format": "RGBA8888", - "size": { - "w": 70, - "h": 70 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 35, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 35, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 35, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 35, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 35, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 35, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 35, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 35, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 35, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 35, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 35, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 35, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 35, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 35, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 35, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 35, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 35, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 35, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 35, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 35, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 35, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 35, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 34 - }, - "frame": { - "x": 35, - "y": 0, - "w": 35, - "h": 34 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 35, - "h": 33 - }, - "frame": { - "x": 0, - "y": 34, - "w": 35, - "h": 33 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 35, - "h": 33 - }, - "frame": { - "x": 0, - "y": 34, - "w": 35, - "h": 33 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 35, - "h": 33 - }, - "frame": { - "x": 0, - "y": 34, - "w": 35, - "h": 33 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 35, - "h": 33 - }, - "frame": { - "x": 0, - "y": 34, - "w": 35, - "h": 33 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 35, - "h": 33 - }, - "frame": { - "x": 0, - "y": 34, - "w": 35, - "h": 33 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 35, - "h": 33 - }, - "frame": { - "x": 0, - "y": 34, - "w": 35, - "h": 33 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 35, - "h": 33 - }, - "frame": { - "x": 0, - "y": 34, - "w": 35, - "h": 33 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 35, - "h": 33 - }, - "frame": { - "x": 0, - "y": 34, - "w": 35, - "h": 33 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 35, - "h": 33 - }, - "frame": { - "x": 35, - "y": 34, - "w": 35, - "h": 33 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 35, - "h": 33 - }, - "frame": { - "x": 35, - "y": 34, - "w": 35, - "h": 33 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 35, - "h": 33 - }, - "frame": { - "x": 35, - "y": 34, - "w": 35, - "h": 33 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 35, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 35, - "h": 33 - }, - "frame": { - "x": 35, - "y": 34, - "w": 35, - "h": 33 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:a0be6653f39ddbef185db62f993cae42:d1b80f97b079891e5ee3e04a05cb932f:9c4d208e6c2f857bfb0b23b8eea3326c$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 1, "y": 81, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 131, "y": 81, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 37, "y": 83, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 109, "y": 117, "w": 34, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 34, "h": 33 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 35, "y": 119, "w": 34, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 34, "h": 33 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 35, "y": 154, "w": 34, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 34, "h": 32 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 71, "y": 156, "w": 34, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 34, "h": 32 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 167, "y": 43, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 34, "h": 35 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 71, "y": 121, "w": 34, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 34, "h": 33 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 141, "y": 158, "w": 34, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 32 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 73, "y": 85, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 1, "y": 81, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 131, "y": 81, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 37, "y": 83, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 109, "y": 117, "w": 34, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 34, "h": 33 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 35, "y": 119, "w": 34, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 34, "h": 33 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 35, "y": 154, "w": 34, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 34, "h": 32 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 71, "y": 156, "w": 34, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 34, "h": 32 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 167, "y": 43, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 34, "h": 35 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 71, "y": 121, "w": 34, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 34, "h": 33 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 141, "y": 158, "w": 34, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 32 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 73, "y": 85, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 1, "y": 81, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 131, "y": 81, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 37, "y": 83, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 109, "y": 117, "w": 34, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 34, "h": 33 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 35, "y": 119, "w": 34, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 34, "h": 33 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 35, "y": 154, "w": 34, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 34, "h": 32 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 71, "y": 156, "w": 34, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 34, "h": 32 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 167, "y": 43, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 34, "h": 35 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 71, "y": 121, "w": 34, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 34, "h": 33 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 141, "y": 158, "w": 34, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 32 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 73, "y": 85, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 1, "y": 81, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 131, "y": 81, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 37, "y": 83, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 109, "y": 117, "w": 34, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 34, "h": 33 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 35, "y": 119, "w": 34, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 34, "h": 33 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 35, "y": 154, "w": 34, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 34, "h": 32 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 71, "y": 156, "w": 34, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 34, "h": 32 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 167, "y": 43, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 34, "h": 35 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 71, "y": 121, "w": 34, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 34, "h": 33 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 141, "y": 158, "w": 34, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 32 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 73, "y": 85, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 1, "y": 81, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 131, "y": 81, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 37, "y": 83, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 109, "y": 117, "w": 34, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 34, "h": 33 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 35, "y": 119, "w": 34, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 34, "h": 33 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 35, "y": 154, "w": 34, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 34, "h": 32 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 71, "y": 156, "w": 34, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 34, "h": 32 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 167, "y": 43, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 34, "h": 35 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 71, "y": 121, "w": 34, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 34, "h": 33 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 141, "y": 158, "w": 34, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 32 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 73, "y": 85, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 1, "y": 81, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 200 + }, + { + "filename": "0057.png", + "frame": { "x": 67, "y": 1, "w": 33, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 33, "h": 38 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 1, "y": 1, "w": 31, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 31, "h": 41 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 34, "y": 1, "w": 31, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 31, "h": 41 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 50 + }, + { + "filename": "0060.png", + "frame": { "x": 102, "y": 1, "w": 31, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 31, "h": 40 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 167, "y": 1, "w": 30, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 30, "h": 40 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 167, "y": 80, "w": 30, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 30, "h": 39 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 67, "y": 41, "w": 30, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 30, "h": 40 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 50 + }, + { + "filename": "0064.png", + "frame": { "x": 135, "y": 1, "w": 30, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 30, "h": 41 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 50 + }, + { + "filename": "0065.png", + "frame": { "x": 99, "y": 43, "w": 30, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 30, "h": 40 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 50 + }, + { + "filename": "0066.png", + "frame": { "x": 1, "y": 155, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 32, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 50 + }, + { + "filename": "0067.png", + "frame": { "x": 107, "y": 189, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 32, "h": 32 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 50 + }, + { + "filename": "0068.png", + "frame": { "x": 1, "y": 191, "w": 31, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 16, "w": 31, "h": 31 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 50 + }, + { + "filename": "0069.png", + "frame": { "x": 69, "y": 190, "w": 31, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 31, "h": 33 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 35, "y": 188, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 32, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 750 + }, + { + "filename": "0071.png", + "frame": { "x": 145, "y": 121, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 1, "y": 117, "w": 32, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 32, "h": 36 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 107, "y": 152, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 1, "y": 44, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 34, "h": 35 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 131, "y": 44, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 34, "h": 35 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 1, "y": 81, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 1, "y": 81, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 1, "y": 81, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "656.png", + "format": "I8", + "size": { "w": 202, "h": 224 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/656.png b/public/images/pokemon/exp/back/656.png index 99119d2e96e..9e98534aab2 100644 Binary files a/public/images/pokemon/exp/back/656.png and b/public/images/pokemon/exp/back/656.png differ diff --git a/public/images/pokemon/exp/back/661.json b/public/images/pokemon/exp/back/661.json index 5ccc4bdde31..be82a4ce425 100644 --- a/public/images/pokemon/exp/back/661.json +++ b/public/images/pokemon/exp/back/661.json @@ -1,356 +1,398 @@ -{ - "textures": [ - { - "image": "661.png", - "format": "RGBA8888", - "size": { - "w": 68, - "h": 68 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - }, - "frame": { - "x": 0, - "y": 34, - "w": 32, - "h": 34 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - }, - "frame": { - "x": 0, - "y": 34, - "w": 32, - "h": 34 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - }, - "frame": { - "x": 0, - "y": 34, - "w": 32, - "h": 34 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - }, - "frame": { - "x": 0, - "y": 34, - "w": 32, - "h": 34 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - }, - "frame": { - "x": 0, - "y": 34, - "w": 32, - "h": 34 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - }, - "frame": { - "x": 0, - "y": 34, - "w": 32, - "h": 34 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 34 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 34 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 34 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 34 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - }, - "frame": { - "x": 32, - "y": 34, - "w": 32, - "h": 34 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - }, - "frame": { - "x": 32, - "y": 34, - "w": 32, - "h": 34 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:64046aa714277f415100be681fde9148:1306649eb47cc5be6e5f0b266b6c13ae:186d621a544ea0e0e2e0bd57975a29b1$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 66, "y": 114, "w": 33, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 33, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 117, "w": 33, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 33, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 39, "w": 34, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 34, "h": 39 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0004.png", + "frame": { "x": 105, "y": 36, "w": 35, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 35, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0005.png", + "frame": { "x": 33, "y": 118, "w": 33, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 33, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0006.png", + "frame": { "x": 66, "y": 114, "w": 33, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 33, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0007.png", + "frame": { "x": 68, "y": 75, "w": 33, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 33, "h": 39 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0008.png", + "frame": { "x": 35, "y": 0, "w": 34, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 34, "h": 40 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0009.png", + "frame": { "x": 0, "y": 0, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 35, "h": 39 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 78, "w": 33, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 33, "h": 39 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0011.png", + "frame": { "x": 66, "y": 114, "w": 33, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 33, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 117, "w": 33, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 33, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0013.png", + "frame": { "x": 34, "y": 40, "w": 34, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 34, "h": 39 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0014.png", + "frame": { "x": 69, "y": 37, "w": 35, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 35, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0015.png", + "frame": { "x": 33, "y": 118, "w": 33, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 33, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0016.png", + "frame": { "x": 66, "y": 114, "w": 33, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 33, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0017.png", + "frame": { "x": 68, "y": 75, "w": 33, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 33, "h": 39 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0018.png", + "frame": { "x": 35, "y": 0, "w": 34, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 34, "h": 40 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0019.png", + "frame": { "x": 0, "y": 0, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 35, "h": 39 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0020.png", + "frame": { "x": 0, "y": 78, "w": 33, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 33, "h": 39 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0021.png", + "frame": { "x": 66, "y": 114, "w": 33, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 33, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0022.png", + "frame": { "x": 0, "y": 117, "w": 33, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 33, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0023.png", + "frame": { "x": 34, "y": 40, "w": 34, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 34, "h": 39 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0024.png", + "frame": { "x": 69, "y": 37, "w": 35, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 35, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0025.png", + "frame": { "x": 33, "y": 118, "w": 33, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 33, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0026.png", + "frame": { "x": 66, "y": 114, "w": 33, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 33, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0027.png", + "frame": { "x": 68, "y": 75, "w": 33, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 33, "h": 39 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0028.png", + "frame": { "x": 35, "y": 0, "w": 34, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 34, "h": 40 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0029.png", + "frame": { "x": 0, "y": 0, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 35, "h": 39 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0030.png", + "frame": { "x": 0, "y": 78, "w": 33, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 33, "h": 39 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0031.png", + "frame": { "x": 66, "y": 114, "w": 33, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 33, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0032.png", + "frame": { "x": 33, "y": 79, "w": 33, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 33, "h": 39 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0033.png", + "frame": { "x": 33, "y": 79, "w": 33, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 33, "h": 39 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0034.png", + "frame": { "x": 101, "y": 112, "w": 34, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 34, "h": 37 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0035.png", + "frame": { "x": 69, "y": 0, "w": 36, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 36, "h": 37 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0036.png", + "frame": { "x": 105, "y": 0, "w": 37, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 37, "h": 36 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0037.png", + "frame": { "x": 69, "y": 0, "w": 36, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 36, "h": 37 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0038.png", + "frame": { "x": 105, "y": 0, "w": 37, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 37, "h": 36 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0039.png", + "frame": { "x": 69, "y": 0, "w": 36, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 36, "h": 37 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0040.png", + "frame": { "x": 105, "y": 0, "w": 37, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 37, "h": 36 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0041.png", + "frame": { "x": 69, "y": 0, "w": 36, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 36, "h": 37 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0042.png", + "frame": { "x": 104, "y": 74, "w": 34, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 34, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0043.png", + "frame": { "x": 33, "y": 79, "w": 33, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 33, "h": 39 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "661.png", + "format": "I8", + "size": { "w": 142, "h": 156 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/661.png b/public/images/pokemon/exp/back/661.png index 8ab845902d1..67d9bb04293 100644 Binary files a/public/images/pokemon/exp/back/661.png and b/public/images/pokemon/exp/back/661.png differ diff --git a/public/images/pokemon/exp/back/662.json b/public/images/pokemon/exp/back/662.json index e854c2b896c..52cc70bbe5d 100644 --- a/public/images/pokemon/exp/back/662.json +++ b/public/images/pokemon/exp/back/662.json @@ -1,671 +1,254 @@ -{ - "textures": [ - { - "image": "662.png", - "format": "RGBA8888", - "size": { - "w": 154, - "h": 154 - }, - "scale": 1, - "frames": [ - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 2, - "y": 16, - "w": 56, - "h": 37 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 37 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 2, - "y": 16, - "w": 56, - "h": 37 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 37 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 2, - "y": 16, - "w": 56, - "h": 37 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 37 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 2, - "y": 16, - "w": 56, - "h": 37 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 37 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 8, - "y": 17, - "w": 49, - "h": 48 - }, - "frame": { - "x": 56, - "y": 0, - "w": 49, - "h": 48 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 8, - "y": 17, - "w": 49, - "h": 48 - }, - "frame": { - "x": 56, - "y": 0, - "w": 49, - "h": 48 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 8, - "y": 17, - "w": 49, - "h": 48 - }, - "frame": { - "x": 105, - "y": 0, - "w": 49, - "h": 48 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 8, - "y": 17, - "w": 49, - "h": 48 - }, - "frame": { - "x": 105, - "y": 0, - "w": 49, - "h": 48 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 57, - "h": 50 - }, - "frame": { - "x": 0, - "y": 48, - "w": 57, - "h": 50 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 57, - "h": 50 - }, - "frame": { - "x": 0, - "y": 48, - "w": 57, - "h": 50 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 57, - "h": 50 - }, - "frame": { - "x": 0, - "y": 48, - "w": 57, - "h": 50 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 57, - "h": 50 - }, - "frame": { - "x": 0, - "y": 48, - "w": 57, - "h": 50 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 57, - "h": 51 - }, - "frame": { - "x": 57, - "y": 48, - "w": 57, - "h": 51 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 57, - "h": 51 - }, - "frame": { - "x": 57, - "y": 48, - "w": 57, - "h": 51 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 57, - "h": 51 - }, - "frame": { - "x": 57, - "y": 48, - "w": 57, - "h": 51 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 57, - "h": 51 - }, - "frame": { - "x": 57, - "y": 48, - "w": 57, - "h": 51 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 57, - "h": 52 - }, - "frame": { - "x": 0, - "y": 98, - "w": 57, - "h": 52 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 57, - "h": 52 - }, - "frame": { - "x": 0, - "y": 98, - "w": 57, - "h": 52 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 57, - "h": 52 - }, - "frame": { - "x": 0, - "y": 98, - "w": 57, - "h": 52 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 57, - "h": 52 - }, - "frame": { - "x": 0, - "y": 98, - "w": 57, - "h": 52 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 57, - "h": 52 - }, - "frame": { - "x": 0, - "y": 98, - "w": 57, - "h": 52 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 57, - "h": 52 - }, - "frame": { - "x": 0, - "y": 98, - "w": 57, - "h": 52 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 57, - "h": 52 - }, - "frame": { - "x": 0, - "y": 98, - "w": 57, - "h": 52 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 57, - "h": 52 - }, - "frame": { - "x": 0, - "y": 98, - "w": 57, - "h": 52 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 57, - "h": 52 - }, - "frame": { - "x": 0, - "y": 98, - "w": 57, - "h": 52 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 57, - "h": 52 - }, - "frame": { - "x": 0, - "y": 98, - "w": 57, - "h": 52 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 57, - "h": 52 - }, - "frame": { - "x": 0, - "y": 98, - "w": 57, - "h": 52 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 57, - "h": 52 - }, - "frame": { - "x": 57, - "y": 99, - "w": 57, - "h": 52 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 57, - "h": 52 - }, - "frame": { - "x": 57, - "y": 99, - "w": 57, - "h": 52 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 57, - "h": 52 - }, - "frame": { - "x": 57, - "y": 99, - "w": 57, - "h": 52 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 57, - "h": 52 - }, - "frame": { - "x": 57, - "y": 99, - "w": 57, - "h": 52 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:66c0226d9868b335d6f9adbc58ca011b:9d85ba89536227407c6480dea06dad13:e3da2dd0277c18bcc713dc6dd2460c87$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 1, "y": 70, "w": 53, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 16, "w": 53, "h": 62 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 212, "y": 70, "w": 52, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 18, "w": 52, "h": 63 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 247, "y": 204, "w": 46, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 36, "w": 46, "h": 51 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 1, "y": 196, "w": 49, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 33, "w": 49, "h": 49 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 56, "y": 1, "w": 56, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 56, "h": 65 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 224, "y": 1, "w": 52, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 52, "h": 68 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 107, "y": 68, "w": 48, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 48, "h": 69 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 277, "y": 1, "w": 51, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 51, "h": 68 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 113, "y": 1, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 18, "w": 55, "h": 66 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 48, "y": 249, "w": 44, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 31, "w": 44, "h": 50 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 191, "y": 248, "w": 47, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 27, "w": 47, "h": 49 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 169, "y": 1, "w": 54, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 54, "h": 67 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 101, "y": 208, "w": 45, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 18, "w": 45, "h": 51 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 1, "y": 246, "w": 46, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 13, "w": 46, "h": 51 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 1, "y": 1, "w": 54, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 54, "h": 68 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 56, "y": 67, "w": 50, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 50, "h": 69 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 265, "y": 70, "w": 47, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 6, "w": 47, "h": 69 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 102, "y": 138, "w": 44, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 11, "w": 44, "h": 69 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 147, "y": 193, "w": 43, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 14, "w": 43, "h": 69 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 191, "y": 199, "w": 55, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 31, "w": 55, "h": 48 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 51, "y": 200, "w": 49, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 27, "w": 49, "h": 48 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 156, "y": 69, "w": 55, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 11, "w": 55, "h": 60 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 1, "y": 133, "w": 50, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 6, "w": 50, "h": 62 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 208, "y": 134, "w": 48, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 48, "h": 64 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 257, "y": 140, "w": 48, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 6, "w": 48, "h": 63 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 52, "y": 137, "w": 49, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 49, "h": 62 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 156, "y": 130, "w": 51, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 13, "w": 51, "h": 62 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "662.png", + "format": "I8", + "size": { "w": 329, "h": 300 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/662.png b/public/images/pokemon/exp/back/662.png index 4e6a3c88277..39a9e8e53ad 100644 Binary files a/public/images/pokemon/exp/back/662.png and b/public/images/pokemon/exp/back/662.png differ diff --git a/public/images/pokemon/exp/back/663.json b/public/images/pokemon/exp/back/663.json index 83f5b7ddc42..48526624362 100644 --- a/public/images/pokemon/exp/back/663.json +++ b/public/images/pokemon/exp/back/663.json @@ -1,587 +1,731 @@ -{ - "textures": [ - { - "image": "663.png", - "format": "RGBA8888", - "size": { - "w": 226, - "h": 226 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 96 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 90, - "h": 93 - }, - "frame": { - "x": 0, - "y": 0, - "w": 90, - "h": 93 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 96 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 90, - "h": 93 - }, - "frame": { - "x": 0, - "y": 0, - "w": 90, - "h": 93 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 96 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 90, - "h": 93 - }, - "frame": { - "x": 0, - "y": 0, - "w": 90, - "h": 93 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 96 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 90, - "h": 93 - }, - "frame": { - "x": 0, - "y": 0, - "w": 90, - "h": 93 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 96 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 90, - "h": 93 - }, - "frame": { - "x": 0, - "y": 0, - "w": 90, - "h": 93 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 96 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 90, - "h": 93 - }, - "frame": { - "x": 0, - "y": 0, - "w": 90, - "h": 93 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 96 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 90, - "h": 93 - }, - "frame": { - "x": 0, - "y": 0, - "w": 90, - "h": 93 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 96 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 90, - "h": 93 - }, - "frame": { - "x": 0, - "y": 0, - "w": 90, - "h": 93 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 96 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 90, - "h": 93 - }, - "frame": { - "x": 0, - "y": 0, - "w": 90, - "h": 93 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 96 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 90, - "h": 93 - }, - "frame": { - "x": 0, - "y": 0, - "w": 90, - "h": 93 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 96 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 90, - "h": 93 - }, - "frame": { - "x": 0, - "y": 0, - "w": 90, - "h": 93 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 96 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 90, - "h": 93 - }, - "frame": { - "x": 0, - "y": 93, - "w": 90, - "h": 93 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 96 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 90, - "h": 93 - }, - "frame": { - "x": 0, - "y": 93, - "w": 90, - "h": 93 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 96 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 90, - "h": 93 - }, - "frame": { - "x": 0, - "y": 93, - "w": 90, - "h": 93 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 96 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 90, - "h": 93 - }, - "frame": { - "x": 0, - "y": 93, - "w": 90, - "h": 93 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 96 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 90, - "h": 92 - }, - "frame": { - "x": 90, - "y": 0, - "w": 90, - "h": 92 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 96 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 90, - "h": 92 - }, - "frame": { - "x": 90, - "y": 0, - "w": 90, - "h": 92 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 96 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 90, - "h": 92 - }, - "frame": { - "x": 90, - "y": 0, - "w": 90, - "h": 92 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 96 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 90, - "h": 92 - }, - "frame": { - "x": 90, - "y": 0, - "w": 90, - "h": 92 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 96 - }, - "spriteSourceSize": { - "x": 6, - "y": 19, - "w": 84, - "h": 62 - }, - "frame": { - "x": 90, - "y": 92, - "w": 84, - "h": 62 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 96 - }, - "spriteSourceSize": { - "x": 6, - "y": 19, - "w": 84, - "h": 62 - }, - "frame": { - "x": 90, - "y": 92, - "w": 84, - "h": 62 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 96 - }, - "spriteSourceSize": { - "x": 6, - "y": 19, - "w": 84, - "h": 62 - }, - "frame": { - "x": 90, - "y": 92, - "w": 84, - "h": 62 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 96 - }, - "spriteSourceSize": { - "x": 6, - "y": 19, - "w": 84, - "h": 62 - }, - "frame": { - "x": 90, - "y": 92, - "w": 84, - "h": 62 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 96 - }, - "spriteSourceSize": { - "x": 10, - "y": 24, - "w": 80, - "h": 72 - }, - "frame": { - "x": 90, - "y": 154, - "w": 80, - "h": 72 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 96 - }, - "spriteSourceSize": { - "x": 10, - "y": 24, - "w": 80, - "h": 72 - }, - "frame": { - "x": 90, - "y": 154, - "w": 80, - "h": 72 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 96 - }, - "spriteSourceSize": { - "x": 10, - "y": 24, - "w": 80, - "h": 72 - }, - "frame": { - "x": 90, - "y": 154, - "w": 80, - "h": 72 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 96 - }, - "spriteSourceSize": { - "x": 10, - "y": 24, - "w": 80, - "h": 72 - }, - "frame": { - "x": 90, - "y": 154, - "w": 80, - "h": 72 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:e8559a9780e93da88e5a990643c22bc0:3bdf9c50c7e3aa9ed9acc8477ddf312d:3790d8d72a704a789cc594688d98802e$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 298, "y": 0, "w": 90, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 0, "w": 95, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 95, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0003.png", + "frame": { "x": 193, "y": 0, "w": 104, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 11, "w": 104, "h": 81 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0004.png", + "frame": { "x": 276, "y": 92, "w": 111, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 32, "w": 111, "h": 60 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 90, "w": 107, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 31, "w": 107, "h": 64 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0006.png", + "frame": { "x": 276, "y": 153, "w": 110, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 32, "w": 110, "h": 58 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 155, "w": 101, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 36, "w": 101, "h": 57 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0008.png", + "frame": { "x": 96, "y": 0, "w": 96, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 5, "w": 96, "h": 88 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0009.png", + "frame": { "x": 298, "y": 0, "w": 90, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0010.png", + "frame": { "x": 193, "y": 82, "w": 82, "h": 93 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 2, "w": 82, "h": 93 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 298, "y": 0, "w": 90, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 0, "w": 95, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 95, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0013.png", + "frame": { "x": 193, "y": 0, "w": 104, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 11, "w": 104, "h": 81 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0014.png", + "frame": { "x": 276, "y": 92, "w": 111, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 32, "w": 111, "h": 60 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0015.png", + "frame": { "x": 0, "y": 90, "w": 107, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 31, "w": 107, "h": 64 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0016.png", + "frame": { "x": 276, "y": 153, "w": 110, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 32, "w": 110, "h": 58 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 155, "w": 101, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 36, "w": 101, "h": 57 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0018.png", + "frame": { "x": 96, "y": 0, "w": 96, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 5, "w": 96, "h": 88 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0019.png", + "frame": { "x": 298, "y": 0, "w": 90, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0020.png", + "frame": { "x": 193, "y": 82, "w": 82, "h": 93 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 2, "w": 82, "h": 93 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 298, "y": 0, "w": 90, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0022.png", + "frame": { "x": 0, "y": 0, "w": 95, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 95, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0023.png", + "frame": { "x": 193, "y": 0, "w": 104, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 11, "w": 104, "h": 81 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0024.png", + "frame": { "x": 276, "y": 92, "w": 111, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 32, "w": 111, "h": 60 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 90, "w": 107, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 31, "w": 107, "h": 64 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0026.png", + "frame": { "x": 276, "y": 153, "w": 110, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 32, "w": 110, "h": 58 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 155, "w": 101, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 36, "w": 101, "h": 57 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0028.png", + "frame": { "x": 96, "y": 0, "w": 96, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 5, "w": 96, "h": 88 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0029.png", + "frame": { "x": 298, "y": 0, "w": 90, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0030.png", + "frame": { "x": 193, "y": 82, "w": 82, "h": 93 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 2, "w": 82, "h": 93 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 298, "y": 0, "w": 90, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 0, "w": 95, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 95, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0033.png", + "frame": { "x": 193, "y": 0, "w": 104, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 11, "w": 104, "h": 81 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0034.png", + "frame": { "x": 276, "y": 92, "w": 111, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 32, "w": 111, "h": 60 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0035.png", + "frame": { "x": 0, "y": 90, "w": 107, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 31, "w": 107, "h": 64 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0036.png", + "frame": { "x": 276, "y": 153, "w": 110, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 32, "w": 110, "h": 58 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 155, "w": 101, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 36, "w": 101, "h": 57 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0038.png", + "frame": { "x": 96, "y": 0, "w": 96, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 5, "w": 96, "h": 88 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0039.png", + "frame": { "x": 298, "y": 0, "w": 90, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0040.png", + "frame": { "x": 193, "y": 82, "w": 82, "h": 93 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 2, "w": 82, "h": 93 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 298, "y": 0, "w": 90, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0042.png", + "frame": { "x": 0, "y": 0, "w": 95, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 95, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0043.png", + "frame": { "x": 193, "y": 0, "w": 104, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 11, "w": 104, "h": 81 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0044.png", + "frame": { "x": 276, "y": 92, "w": 111, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 32, "w": 111, "h": 60 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0045.png", + "frame": { "x": 0, "y": 90, "w": 107, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 31, "w": 107, "h": 64 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0046.png", + "frame": { "x": 276, "y": 153, "w": 110, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 32, "w": 110, "h": 58 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0047.png", + "frame": { "x": 0, "y": 155, "w": 101, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 36, "w": 101, "h": 57 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0048.png", + "frame": { "x": 96, "y": 0, "w": 96, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 5, "w": 96, "h": 88 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0049.png", + "frame": { "x": 298, "y": 0, "w": 90, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0050.png", + "frame": { "x": 193, "y": 82, "w": 82, "h": 93 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 2, "w": 82, "h": 93 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 298, "y": 0, "w": 90, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0052.png", + "frame": { "x": 0, "y": 0, "w": 95, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 95, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0053.png", + "frame": { "x": 193, "y": 0, "w": 104, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 11, "w": 104, "h": 81 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0054.png", + "frame": { "x": 276, "y": 92, "w": 111, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 32, "w": 111, "h": 60 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 90, "w": 107, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 31, "w": 107, "h": 64 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0056.png", + "frame": { "x": 276, "y": 153, "w": 110, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 32, "w": 110, "h": 58 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0057.png", + "frame": { "x": 0, "y": 155, "w": 101, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 36, "w": 101, "h": 57 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0058.png", + "frame": { "x": 96, "y": 0, "w": 96, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 5, "w": 96, "h": 88 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0059.png", + "frame": { "x": 298, "y": 0, "w": 90, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0060.png", + "frame": { "x": 193, "y": 82, "w": 82, "h": 93 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 2, "w": 82, "h": 93 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 0, "y": 0, "w": 95, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 95, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0062.png", + "frame": { "x": 193, "y": 0, "w": 104, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 11, "w": 104, "h": 81 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0063.png", + "frame": { "x": 0, "y": 90, "w": 107, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 31, "w": 107, "h": 64 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0064.png", + "frame": { "x": 0, "y": 155, "w": 101, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 36, "w": 101, "h": 57 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0065.png", + "frame": { "x": 193, "y": 82, "w": 82, "h": 93 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 2, "w": 82, "h": 93 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0066.png", + "frame": { "x": 0, "y": 0, "w": 95, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 95, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0067.png", + "frame": { "x": 193, "y": 0, "w": 104, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 11, "w": 104, "h": 81 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0068.png", + "frame": { "x": 0, "y": 90, "w": 107, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 31, "w": 107, "h": 64 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0069.png", + "frame": { "x": 0, "y": 155, "w": 101, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 36, "w": 101, "h": 57 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0070.png", + "frame": { "x": 193, "y": 82, "w": 82, "h": 93 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 2, "w": 82, "h": 93 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0071.png", + "frame": { "x": 0, "y": 0, "w": 95, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 95, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0072.png", + "frame": { "x": 193, "y": 0, "w": 104, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 11, "w": 104, "h": 81 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0073.png", + "frame": { "x": 0, "y": 90, "w": 107, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 31, "w": 107, "h": 64 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0074.png", + "frame": { "x": 0, "y": 155, "w": 101, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 36, "w": 101, "h": 57 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0075.png", + "frame": { "x": 193, "y": 82, "w": 82, "h": 93 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 2, "w": 82, "h": 93 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0076.png", + "frame": { "x": 0, "y": 0, "w": 95, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 95, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0077.png", + "frame": { "x": 193, "y": 0, "w": 104, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 11, "w": 104, "h": 81 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0078.png", + "frame": { "x": 0, "y": 90, "w": 107, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 31, "w": 107, "h": 64 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0079.png", + "frame": { "x": 0, "y": 155, "w": 101, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 36, "w": 101, "h": 57 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0080.png", + "frame": { "x": 193, "y": 82, "w": 82, "h": 93 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 2, "w": 82, "h": 93 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "663.png", + "format": "I8", + "size": { "w": 388, "h": 212 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/663.png b/public/images/pokemon/exp/back/663.png index d241c8be871..6b49fc0a803 100644 Binary files a/public/images/pokemon/exp/back/663.png and b/public/images/pokemon/exp/back/663.png differ diff --git a/public/images/pokemon/exp/back/664.json b/public/images/pokemon/exp/back/664.json index 10da9db36bd..61c85d30239 100644 --- a/public/images/pokemon/exp/back/664.json +++ b/public/images/pokemon/exp/back/664.json @@ -1,104 +1,110 @@ -{ - "textures": [ - { - "image": "664.png", - "format": "RGBA8888", - "size": { - "w": 72, - "h": 72 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 24, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 24, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 24, - "h": 44 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 24, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 24, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 24, - "h": 44 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 24, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 24, - "h": 44 - }, - "frame": { - "x": 24, - "y": 0, - "w": 24, - "h": 44 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 24, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 24, - "h": 42 - }, - "frame": { - "x": 48, - "y": 0, - "w": 24, - "h": 42 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:7fc62d03764cbb44c78d222a8281c03b:59a11cbddf36944dc23f528022e71fc9:596e7d5b15b1bf041c4d7f6707c8ff49$" - } -} \ No newline at end of file +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 54, "y": 49, "w": 26, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 26, "h": 49 }, + "sourceSize": { "w": 28, "h": 49 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 80, "y": 96, "w": 26, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 26, "h": 48 }, + "sourceSize": { "w": 28, "h": 49 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 97, "w": 26, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 26, "h": 48 }, + "sourceSize": { "w": 28, "h": 49 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 0, "y": 49, "w": 27, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 27, "h": 48 }, + "sourceSize": { "w": 28, "h": 49 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 26, "y": 97, "w": 26, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 26, "h": 47 }, + "sourceSize": { "w": 28, "h": 49 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 80, "y": 49, "w": 27, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 27, "h": 47 }, + "sourceSize": { "w": 28, "h": 49 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 27, "y": 49, "w": 27, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 27, "h": 48 }, + "sourceSize": { "w": 28, "h": 49 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 28, "y": 0, "w": 27, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 27, "h": 49 }, + "sourceSize": { "w": 28, "h": 49 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 55, "y": 0, "w": 27, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 27, "h": 49 }, + "sourceSize": { "w": 28, "h": 49 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 0, "w": 28, "h": 49 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 28, "h": 49 }, + "sourceSize": { "w": 28, "h": 49 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 82, "y": 0, "w": 27, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 27, "h": 49 }, + "sourceSize": { "w": 28, "h": 49 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "664.png", + "format": "I8", + "size": { "w": 109, "h": 145 }, + "scale": "1" + } +} diff --git a/public/images/pokemon/exp/back/664.png b/public/images/pokemon/exp/back/664.png index 30664a6aaf1..a8f0906c60d 100644 Binary files a/public/images/pokemon/exp/back/664.png and b/public/images/pokemon/exp/back/664.png differ diff --git a/public/images/pokemon/exp/back/665.json b/public/images/pokemon/exp/back/665.json index 320219545d9..6e713a69311 100644 --- a/public/images/pokemon/exp/back/665.json +++ b/public/images/pokemon/exp/back/665.json @@ -1,104 +1,596 @@ -{ - "textures": [ - { - "image": "665.png", - "format": "RGBA8888", - "size": { - "w": 75, - "h": 75 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 36 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 36 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 36 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 36 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 36 - }, - "frame": { - "x": 38, - "y": 0, - "w": 37, - "h": 36 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 38, - "h": 35 - }, - "frame": { - "x": 0, - "y": 36, - "w": 38, - "h": 35 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:9899654837114efa492ec85d06cd415a:0050d8b3ae2b780795145dd4beb4e6bb:a72e6c94514c750d7462eab6b08ee591$" - } -} \ No newline at end of file +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 86, "y": 73, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 6, "w": 34, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 358, "y": 69, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 0, "y": 71, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 120, "y": 101, "w": 36, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 8, "w": 36, "h": 32 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 262, "y": 102, "w": 36, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 9, "w": 36, "h": 31 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 120, "y": 101, "w": 36, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 8, "w": 36, "h": 32 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 71, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 358, "y": 69, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 86, "y": 73, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 6, "w": 34, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 86, "y": 73, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 6, "w": 34, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 358, "y": 69, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 71, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 120, "y": 101, "w": 36, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 8, "w": 36, "h": 32 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 262, "y": 102, "w": 36, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 9, "w": 36, "h": 31 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 120, "y": 101, "w": 36, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 8, "w": 36, "h": 32 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 0, "y": 71, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 358, "y": 69, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 86, "y": 73, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 6, "w": 34, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 86, "y": 73, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 6, "w": 34, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 358, "y": 69, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 71, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 120, "y": 101, "w": 36, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 8, "w": 36, "h": 32 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 262, "y": 102, "w": 36, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 9, "w": 36, "h": 31 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 120, "y": 101, "w": 36, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 8, "w": 36, "h": 32 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 71, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 358, "y": 69, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 86, "y": 73, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 6, "w": 34, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 160, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 290, "y": 67, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 160, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 47, "y": 40, "w": 39, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 5, "w": 39, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 343, "y": 34, "w": 45, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 5, "w": 45, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 227, "y": 33, "w": 63, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 63, "h": 36 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 80, "y": 0, "w": 74, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 74, "h": 40 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 154, "y": 0, "w": 81, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 81, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 235, "y": 0, "w": 81, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 81, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 0, "w": 80, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 80, "h": 38 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 154, "y": 33, "w": 73, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 73, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 316, "y": 0, "w": 73, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 73, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 290, "y": 34, "w": 53, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 7, "w": 53, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 0, "y": 38, "w": 47, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 7, "w": 47, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 86, "y": 40, "w": 40, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 40, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 156, "y": 101, "w": 34, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 7, "w": 34, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 36, "y": 75, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 6, "w": 34, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 194, "y": 69, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 228, "y": 69, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 324, "y": 69, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "665.png", + "format": "I8", + "size": { "w": 394, "h": 134 }, + "scale": "1" + } +} diff --git a/public/images/pokemon/exp/back/665.png b/public/images/pokemon/exp/back/665.png index 1cb4789e140..c989771bc5f 100644 Binary files a/public/images/pokemon/exp/back/665.png and b/public/images/pokemon/exp/back/665.png differ diff --git a/public/images/pokemon/exp/back/666-archipelago.json b/public/images/pokemon/exp/back/666-archipelago.json index bc4abf95a6d..817696f70a1 100644 --- a/public/images/pokemon/exp/back/666-archipelago.json +++ b/public/images/pokemon/exp/back/666-archipelago.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-archipelago.png", - "format": "RGBA8888", - "size": { - "w": 136, - "h": 136 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 42, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 42, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 42, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 42, - "y": 68, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:223e2a75aa192f3fb67e18f7f0d6c4c7:ba854fe0d08f005e9aa52e55cdc7eb4e:80cdb6dd219378a41ccf5c2acc7e7786$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-archipelago.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/666-archipelago.png b/public/images/pokemon/exp/back/666-archipelago.png index 83622bd976f..f83b645e0fe 100644 Binary files a/public/images/pokemon/exp/back/666-archipelago.png and b/public/images/pokemon/exp/back/666-archipelago.png differ diff --git a/public/images/pokemon/exp/back/666-continental.json b/public/images/pokemon/exp/back/666-continental.json index d0cd7359c88..fc21deb6978 100644 --- a/public/images/pokemon/exp/back/666-continental.json +++ b/public/images/pokemon/exp/back/666-continental.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-continental.png", - "format": "RGBA8888", - "size": { - "w": 136, - "h": 136 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 13, - "y": 1, - "w": 46, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 13, - "y": 1, - "w": 46, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 46, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 46, - "y": 68, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:89725e18f2e4d97217076ac82b40230b:c83c3d03ad1200fc71d95ecafb54bc03:23aaac2256d564b9d8a58d7de70397c3$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-continental.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/666-continental.png b/public/images/pokemon/exp/back/666-continental.png index 21447191338..f1a4cf5a2a4 100644 Binary files a/public/images/pokemon/exp/back/666-continental.png and b/public/images/pokemon/exp/back/666-continental.png differ diff --git a/public/images/pokemon/exp/back/666-elegant.json b/public/images/pokemon/exp/back/666-elegant.json index c44ea10f7dd..35c20315153 100644 --- a/public/images/pokemon/exp/back/666-elegant.json +++ b/public/images/pokemon/exp/back/666-elegant.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-elegant.png", - "format": "RGBA8888", - "size": { - "w": 136, - "h": 136 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 44, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 44, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 44, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 44, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 44, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 44, - "y": 68, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:bbba66d69955866664e782205a4af88d:66e99814147be780756a4d4ccd8b31dc:d6b035048c66474f6236a3bc923faa7b$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-elegant.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/666-elegant.png b/public/images/pokemon/exp/back/666-elegant.png index 3187d681140..2a75c09b505 100644 Binary files a/public/images/pokemon/exp/back/666-elegant.png and b/public/images/pokemon/exp/back/666-elegant.png differ diff --git a/public/images/pokemon/exp/back/666-fancy.json b/public/images/pokemon/exp/back/666-fancy.json index 657c29e99ee..54113df4b51 100644 --- a/public/images/pokemon/exp/back/666-fancy.json +++ b/public/images/pokemon/exp/back/666-fancy.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-fancy.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 43, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:570d1bf9b987c1bf5ebfe39e485464dd:a3c8bebd39c1c84b1bf0fdf600026ea5:6d5edff9a806f43feff031c9919c9aca$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-fancy.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/666-fancy.png b/public/images/pokemon/exp/back/666-fancy.png index 9f9f9c42e80..f7da62d0637 100644 Binary files a/public/images/pokemon/exp/back/666-fancy.png and b/public/images/pokemon/exp/back/666-fancy.png differ diff --git a/public/images/pokemon/exp/back/666-garden.json b/public/images/pokemon/exp/back/666-garden.json index 763dd125a5c..4fcc5ab0ad1 100644 --- a/public/images/pokemon/exp/back/666-garden.json +++ b/public/images/pokemon/exp/back/666-garden.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-garden.png", - "format": "RGBA8888", - "size": { - "w": 136, - "h": 136 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 42, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 42, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 42, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 42, - "y": 68, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:4b2ac69ef7a99f6cef35d3fd38c74d01:8a4c29615f3bf20e9c5d0bb372a5b210:f13a1a8fa0a411aa91fccb833ac8719c$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-garden.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/666-garden.png b/public/images/pokemon/exp/back/666-garden.png index 47a9a27e790..35e0dd02087 100644 Binary files a/public/images/pokemon/exp/back/666-garden.png and b/public/images/pokemon/exp/back/666-garden.png differ diff --git a/public/images/pokemon/exp/back/666-high-plains.json b/public/images/pokemon/exp/back/666-high-plains.json index 90101dd98ba..56a90a01899 100644 --- a/public/images/pokemon/exp/back/666-high-plains.json +++ b/public/images/pokemon/exp/back/666-high-plains.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-high-plains.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 43, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:410c759185f779797422e8f2ce55db4f:6afd0d04b6138fdd57d12681e967b48c:2abdb5d19b2754e3daa24b6ff3ed2c2c$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-high-plains.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/666-high-plains.png b/public/images/pokemon/exp/back/666-high-plains.png index 7b06fcc8040..7b84c4ebac3 100644 Binary files a/public/images/pokemon/exp/back/666-high-plains.png and b/public/images/pokemon/exp/back/666-high-plains.png differ diff --git a/public/images/pokemon/exp/back/666-icy-snow.json b/public/images/pokemon/exp/back/666-icy-snow.json index 17e6e3be8ef..b44f33bb07f 100644 --- a/public/images/pokemon/exp/back/666-icy-snow.json +++ b/public/images/pokemon/exp/back/666-icy-snow.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-icy-snow.png", - "format": "RGBA8888", - "size": { - "w": 136, - "h": 136 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 68, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:9f47e6de00b727163c2ffb6870af9c6b:16bfd68007c3798294c7d690e075f679:fb1e8b97806dc5c60ac6adf0ae48199b$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-icy-snow.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/666-icy-snow.png b/public/images/pokemon/exp/back/666-icy-snow.png index b34659ded51..332e96a6d61 100644 Binary files a/public/images/pokemon/exp/back/666-icy-snow.png and b/public/images/pokemon/exp/back/666-icy-snow.png differ diff --git a/public/images/pokemon/exp/back/666-jungle.json b/public/images/pokemon/exp/back/666-jungle.json index b2ffdb768e6..51876d649da 100644 --- a/public/images/pokemon/exp/back/666-jungle.json +++ b/public/images/pokemon/exp/back/666-jungle.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-jungle.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 43, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:4d8913bd65ce0b63c5354717532a7d60:39392afb8d9fb30f37b8d68b6cd368ad:c8686bcc5493911384853d54c85bfea1$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-jungle.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/666-jungle.png b/public/images/pokemon/exp/back/666-jungle.png index 8e72fdd3af6..291c6bce18c 100644 Binary files a/public/images/pokemon/exp/back/666-jungle.png and b/public/images/pokemon/exp/back/666-jungle.png differ diff --git a/public/images/pokemon/exp/back/666-marine.json b/public/images/pokemon/exp/back/666-marine.json index 6f4be700dfc..18edbc78ec0 100644 --- a/public/images/pokemon/exp/back/666-marine.json +++ b/public/images/pokemon/exp/back/666-marine.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-marine.png", - "format": "RGBA8888", - "size": { - "w": 136, - "h": 136 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 42, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 42, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 42, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 42, - "y": 68, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:b061fec5d665439da49159647e0a7d71:7cac8aa51d4531fbcf0f9ea9bf644452:dc240f0acbf3d56fe8729dd1f703009f$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-marine.png", + "format": "RGBA8888", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/666-marine.png b/public/images/pokemon/exp/back/666-marine.png index 91c5b1be983..9e644f0cdaa 100644 Binary files a/public/images/pokemon/exp/back/666-marine.png and b/public/images/pokemon/exp/back/666-marine.png differ diff --git a/public/images/pokemon/exp/back/666-meadow.json b/public/images/pokemon/exp/back/666-meadow.json index 737ccd7c848..0f24040bd0d 100644 --- a/public/images/pokemon/exp/back/666-meadow.json +++ b/public/images/pokemon/exp/back/666-meadow.json @@ -1,524 +1,118 @@ -{ - "textures": [ - { - "image": "666-meadow.png", - "format": "RGBA8888", - "size": { - "w": 234, - "h": 234 - }, - "scale": 1, - "frames": [ - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 78, - "h": 87 - }, - "frame": { - "x": 0, - "y": 0, - "w": 78, - "h": 87 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 78, - "h": 87 - }, - "frame": { - "x": 0, - "y": 0, - "w": 78, - "h": 87 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 78, - "h": 87 - }, - "frame": { - "x": 0, - "y": 0, - "w": 78, - "h": 87 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 78, - "h": 87 - }, - "frame": { - "x": 0, - "y": 0, - "w": 78, - "h": 87 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 70, - "h": 87 - }, - "frame": { - "x": 0, - "y": 87, - "w": 70, - "h": 87 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 70, - "h": 87 - }, - "frame": { - "x": 0, - "y": 87, - "w": 70, - "h": 87 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 70, - "h": 87 - }, - "frame": { - "x": 0, - "y": 87, - "w": 70, - "h": 87 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 70, - "h": 87 - }, - "frame": { - "x": 0, - "y": 87, - "w": 70, - "h": 87 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 11, - "y": 2, - "w": 63, - "h": 87 - }, - "frame": { - "x": 70, - "y": 87, - "w": 63, - "h": 87 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 11, - "y": 2, - "w": 63, - "h": 87 - }, - "frame": { - "x": 70, - "y": 87, - "w": 63, - "h": 87 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 11, - "y": 2, - "w": 63, - "h": 87 - }, - "frame": { - "x": 70, - "y": 87, - "w": 63, - "h": 87 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 11, - "y": 2, - "w": 63, - "h": 87 - }, - "frame": { - "x": 70, - "y": 87, - "w": 63, - "h": 87 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 14, - "y": 1, - "w": 57, - "h": 87 - }, - "frame": { - "x": 78, - "y": 0, - "w": 57, - "h": 87 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 14, - "y": 1, - "w": 57, - "h": 87 - }, - "frame": { - "x": 78, - "y": 0, - "w": 57, - "h": 87 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 14, - "y": 1, - "w": 57, - "h": 87 - }, - "frame": { - "x": 78, - "y": 0, - "w": 57, - "h": 87 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 14, - "y": 1, - "w": 57, - "h": 87 - }, - "frame": { - "x": 78, - "y": 0, - "w": 57, - "h": 87 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 84, - "h": 86 - }, - "frame": { - "x": 135, - "y": 0, - "w": 84, - "h": 86 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 84, - "h": 86 - }, - "frame": { - "x": 135, - "y": 0, - "w": 84, - "h": 86 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 52, - "h": 87 - }, - "frame": { - "x": 135, - "y": 86, - "w": 52, - "h": 87 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 52, - "h": 87 - }, - "frame": { - "x": 135, - "y": 86, - "w": 52, - "h": 87 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 52, - "h": 87 - }, - "frame": { - "x": 135, - "y": 86, - "w": 52, - "h": 87 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 52, - "h": 87 - }, - "frame": { - "x": 135, - "y": 86, - "w": 52, - "h": 87 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 20, - "y": 0, - "w": 47, - "h": 85 - }, - "frame": { - "x": 187, - "y": 86, - "w": 47, - "h": 85 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 20, - "y": 0, - "w": 47, - "h": 85 - }, - "frame": { - "x": 187, - "y": 86, - "w": 47, - "h": 85 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:49698fe6f96ff24d2fe1c7a365f79f1b:f15ccef05dfd7ebb03ac6c66ae05dcef:f8ac4807b4d6eef2256fa1b93e0f89ba$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/666-meadow.png b/public/images/pokemon/exp/back/666-meadow.png index d7d63b3098f..fabeb9730db 100644 Binary files a/public/images/pokemon/exp/back/666-meadow.png and b/public/images/pokemon/exp/back/666-meadow.png differ diff --git a/public/images/pokemon/exp/back/666-modern.json b/public/images/pokemon/exp/back/666-modern.json index a57b695d10b..e0a00da6d81 100644 --- a/public/images/pokemon/exp/back/666-modern.json +++ b/public/images/pokemon/exp/back/666-modern.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-modern.png", - "format": "RGBA8888", - "size": { - "w": 136, - "h": 136 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 42, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 42, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 42, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 42, - "y": 68, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:deb5b8b4295c15b4c8718bf2ed9791d1:bbe309a34a59a4e2f74eeba5769476f4:5fc0e8f9a0750c2f3cfb5d6e7eca0d45$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-modern.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/666-modern.png b/public/images/pokemon/exp/back/666-modern.png index 689876c3d6d..01a3981dd97 100644 Binary files a/public/images/pokemon/exp/back/666-modern.png and b/public/images/pokemon/exp/back/666-modern.png differ diff --git a/public/images/pokemon/exp/back/666-monsoon.json b/public/images/pokemon/exp/back/666-monsoon.json index 3afda85f798..117fad03b83 100644 --- a/public/images/pokemon/exp/back/666-monsoon.json +++ b/public/images/pokemon/exp/back/666-monsoon.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-monsoon.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 42, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 42, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 42, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:71a24b11bc54be921b67b4376d798e05:f5358aac113e1f7af7eddf984d9692b3:637bea52b465abfb8e5a576310b4dacc$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-monsoon.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/666-monsoon.png b/public/images/pokemon/exp/back/666-monsoon.png index e3cb4d2dca7..32cf2331411 100644 Binary files a/public/images/pokemon/exp/back/666-monsoon.png and b/public/images/pokemon/exp/back/666-monsoon.png differ diff --git a/public/images/pokemon/exp/back/666-ocean.json b/public/images/pokemon/exp/back/666-ocean.json index f0785703906..8d23d70cd31 100644 --- a/public/images/pokemon/exp/back/666-ocean.json +++ b/public/images/pokemon/exp/back/666-ocean.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-ocean.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 43, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:a1a0079c64e9d91336d227b1380cd9d2:cf159e4653ad9208c0f4633a498a6cd1:e7a0e68eab89c2013a3eb7f3b6fc0b33$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-ocean.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/666-ocean.png b/public/images/pokemon/exp/back/666-ocean.png index f60844a9b87..65665ea56c3 100644 Binary files a/public/images/pokemon/exp/back/666-ocean.png and b/public/images/pokemon/exp/back/666-ocean.png differ diff --git a/public/images/pokemon/exp/back/666-poke-ball.json b/public/images/pokemon/exp/back/666-poke-ball.json index ed04a06e7ab..45564e59a32 100644 --- a/public/images/pokemon/exp/back/666-poke-ball.json +++ b/public/images/pokemon/exp/back/666-poke-ball.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-poke-ball.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 43, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:e744396a3b647429d050d678017c05ce:ec812f719dffcd362f0481d7d83c3476:8ec14f129d1691b8da504a13b661abed$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-poke-ball.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/666-poke-ball.png b/public/images/pokemon/exp/back/666-poke-ball.png index eb3053e9434..895a2bf680f 100644 Binary files a/public/images/pokemon/exp/back/666-poke-ball.png and b/public/images/pokemon/exp/back/666-poke-ball.png differ diff --git a/public/images/pokemon/exp/back/666-polar.json b/public/images/pokemon/exp/back/666-polar.json index 4618d891d3f..abb6d0286f4 100644 --- a/public/images/pokemon/exp/back/666-polar.json +++ b/public/images/pokemon/exp/back/666-polar.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-polar.png", - "format": "RGBA8888", - "size": { - "w": 136, - "h": 136 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 14, - "y": 1, - "w": 45, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 14, - "y": 1, - "w": 45, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 45, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 45, - "y": 68, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:a3b0453f2d03b9c62472f57a438298a4:81a5a3455ae0c378bdb1dbe3c3323463:eb7086e98f867c6592e4b161835da18b$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-polar.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/666-polar.png b/public/images/pokemon/exp/back/666-polar.png index 5d09b57833c..c7ec3ec550a 100644 Binary files a/public/images/pokemon/exp/back/666-polar.png and b/public/images/pokemon/exp/back/666-polar.png differ diff --git a/public/images/pokemon/exp/back/666-river.json b/public/images/pokemon/exp/back/666-river.json index c4e5274ab6d..28912532d76 100644 --- a/public/images/pokemon/exp/back/666-river.json +++ b/public/images/pokemon/exp/back/666-river.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-river.png", - "format": "RGBA8888", - "size": { - "w": 136, - "h": 136 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 68, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:2bb6d375761e6690eba12cf4d2bc99c9:9db30ec1cf68fe8c1026c243086573f3:fa23dc87fc53ba2cfa532cf440553cf5$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-river.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/666-river.png b/public/images/pokemon/exp/back/666-river.png index 2910340b676..4e0493b8de5 100644 Binary files a/public/images/pokemon/exp/back/666-river.png and b/public/images/pokemon/exp/back/666-river.png differ diff --git a/public/images/pokemon/exp/back/666-sandstorm.json b/public/images/pokemon/exp/back/666-sandstorm.json index cc96c2a2805..99df25242ff 100644 --- a/public/images/pokemon/exp/back/666-sandstorm.json +++ b/public/images/pokemon/exp/back/666-sandstorm.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-sandstorm.png", - "format": "RGBA8888", - "size": { - "w": 136, - "h": 136 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 68, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 17, - "y": 2, - "w": 40, - "h": 68 - }, - "frame": { - "x": 67, - "y": 0, - "w": 40, - "h": 68 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 17, - "y": 2, - "w": 40, - "h": 68 - }, - "frame": { - "x": 67, - "y": 68, - "w": 40, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:e35abed8cd9d0bbf1556fa684995d930:8d765a06a769bbf3d1639f361548cd6f:12f47e779927411662912d6094a9782d$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-sandstorm.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/666-sandstorm.png b/public/images/pokemon/exp/back/666-sandstorm.png index 96d7084eb30..d95ab4413a5 100644 Binary files a/public/images/pokemon/exp/back/666-sandstorm.png and b/public/images/pokemon/exp/back/666-sandstorm.png differ diff --git a/public/images/pokemon/exp/back/666-savanna.json b/public/images/pokemon/exp/back/666-savanna.json index 8f85dfdeb13..8fa326da1b4 100644 --- a/public/images/pokemon/exp/back/666-savanna.json +++ b/public/images/pokemon/exp/back/666-savanna.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-savanna.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 43, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:1ad0c7c841409c3fd4cb50b399d6e13c:b9406b41d37bc72c57260f9a01a352c8:625a4f0dc001069326a75c6a381f93e6$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-savanna.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/666-savanna.png b/public/images/pokemon/exp/back/666-savanna.png index 7254d0f1f61..4169b1325a6 100644 Binary files a/public/images/pokemon/exp/back/666-savanna.png and b/public/images/pokemon/exp/back/666-savanna.png differ diff --git a/public/images/pokemon/exp/back/666-sun.json b/public/images/pokemon/exp/back/666-sun.json index df795f0ef0c..d41f22f541c 100644 --- a/public/images/pokemon/exp/back/666-sun.json +++ b/public/images/pokemon/exp/back/666-sun.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-sun.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 43, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:1d3a140bac5951725915aa0b64d1fdc6:e322510cf8386dcc7834a05d57e5368e:8f5fdd0a698701f5391c5a3f67e303d6$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-sun.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/666-sun.png b/public/images/pokemon/exp/back/666-sun.png index 84b9d76ef88..5cc814e82d7 100644 Binary files a/public/images/pokemon/exp/back/666-sun.png and b/public/images/pokemon/exp/back/666-sun.png differ diff --git a/public/images/pokemon/exp/back/666-tundra.json b/public/images/pokemon/exp/back/666-tundra.json index 92e5cf92e07..afa574f9e07 100644 --- a/public/images/pokemon/exp/back/666-tundra.json +++ b/public/images/pokemon/exp/back/666-tundra.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-tundra.png", - "format": "RGBA8888", - "size": { - "w": 136, - "h": 136 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 13, - "y": 1, - "w": 46, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 13, - "y": 1, - "w": 46, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 46, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 46, - "y": 68, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:40f74f8757cb0f5a2ab7b5f68ea979a0:d062f67571674668b47f6fab68361105:9779ed3adebc298af537dd64dc25fe00$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-tundra.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/666-tundra.png b/public/images/pokemon/exp/back/666-tundra.png index 393ea113766..01657b339fd 100644 Binary files a/public/images/pokemon/exp/back/666-tundra.png and b/public/images/pokemon/exp/back/666-tundra.png differ diff --git a/public/images/pokemon/exp/back/667.json b/public/images/pokemon/exp/back/667.json index cfe6b109d70..db9918ea230 100644 --- a/public/images/pokemon/exp/back/667.json +++ b/public/images/pokemon/exp/back/667.json @@ -1,125 +1,659 @@ -{ - "textures": [ - { - "image": "667.png", - "format": "RGBA8888", - "size": { - "w": 115, - "h": 115 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 39, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 39, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 39, - "h": 42 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 39, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 39, - "h": 42 - }, - "frame": { - "x": 0, - "y": 42, - "w": 39, - "h": 42 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 39, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 39, - "h": 41 - }, - "frame": { - "x": 39, - "y": 0, - "w": 39, - "h": 41 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 39, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 42 - }, - "frame": { - "x": 39, - "y": 41, - "w": 38, - "h": 42 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 39, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 42 - }, - "frame": { - "x": 77, - "y": 41, - "w": 38, - "h": 42 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:0515d906bdf1ec3ad533ac13c4e701ec:195a93073ecc7446c747c2e79ae07d54:02171d511e760c8a3e1b623ad6bf93f5$" - } -} \ No newline at end of file +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 127, "y": 47, "w": 39, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 85, "y": 48, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 40, "y": 94, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 38, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 79, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 118, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 40, "y": 49, "w": 39, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 39, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 49, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 127, "y": 47, "w": 39, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 85, "y": 48, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0013.png", + "frame": { "x": 40, "y": 94, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 38, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0014.png", + "frame": { "x": 79, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0015.png", + "frame": { "x": 118, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0016.png", + "frame": { "x": 40, "y": 49, "w": 39, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 39, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 49, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0018.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0019.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0020.png", + "frame": { "x": 127, "y": 47, "w": 39, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0021.png", + "frame": { "x": 85, "y": 48, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0022.png", + "frame": { "x": 40, "y": 94, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 38, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0023.png", + "frame": { "x": 79, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0024.png", + "frame": { "x": 118, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0025.png", + "frame": { "x": 40, "y": 49, "w": 39, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 39, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 49, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0027.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0028.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0029.png", + "frame": { "x": 127, "y": 47, "w": 39, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0030.png", + "frame": { "x": 85, "y": 48, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0031.png", + "frame": { "x": 40, "y": 94, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 38, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0032.png", + "frame": { "x": 79, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0033.png", + "frame": { "x": 118, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0034.png", + "frame": { "x": 40, "y": 49, "w": 39, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 39, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0035.png", + "frame": { "x": 0, "y": 49, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0036.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0037.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0038.png", + "frame": { "x": 127, "y": 47, "w": 39, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0039.png", + "frame": { "x": 85, "y": 48, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0040.png", + "frame": { "x": 40, "y": 94, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 38, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0041.png", + "frame": { "x": 79, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0042.png", + "frame": { "x": 118, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0043.png", + "frame": { "x": 40, "y": 49, "w": 39, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 39, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0044.png", + "frame": { "x": 0, "y": 49, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0045.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0046.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0047.png", + "frame": { "x": 127, "y": 47, "w": 39, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0048.png", + "frame": { "x": 85, "y": 48, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0049.png", + "frame": { "x": 40, "y": 94, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 38, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0050.png", + "frame": { "x": 79, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0051.png", + "frame": { "x": 118, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0052.png", + "frame": { "x": 40, "y": 49, "w": 39, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 39, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0053.png", + "frame": { "x": 0, "y": 49, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0054.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0055.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0056.png", + "frame": { "x": 85, "y": 0, "w": 41, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 41, "h": 47 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0057.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0058.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 41, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0059.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0060.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 41, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0061.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0062.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 41, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0063.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0064.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 41, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0065.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0066.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 41, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0067.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0068.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 41, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0069.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0070.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 41, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0071.png", + "frame": { "x": 85, "y": 0, "w": 41, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 41, "h": 47 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0072.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "667.png", + "format": "I8", + "size": { "w": 167, "h": 138 }, + "scale": "1" + } +} diff --git a/public/images/pokemon/exp/back/667.png b/public/images/pokemon/exp/back/667.png index ef7ea964737..f1209cf8e20 100644 Binary files a/public/images/pokemon/exp/back/667.png and b/public/images/pokemon/exp/back/667.png differ diff --git a/public/images/pokemon/exp/back/668.json b/public/images/pokemon/exp/back/668.json index 1e37573828e..594e69189dc 100644 --- a/public/images/pokemon/exp/back/668.json +++ b/public/images/pokemon/exp/back/668.json @@ -1,146 +1,821 @@ -{ - "textures": [ - { - "image": "668.png", - "format": "RGBA8888", - "size": { - "w": 146, - "h": 146 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 73, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 73, - "h": 61 - }, - "frame": { - "x": 0, - "y": 0, - "w": 73, - "h": 61 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 73, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 73, - "h": 61 - }, - "frame": { - "x": 73, - "y": 0, - "w": 73, - "h": 61 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 73, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 73, - "h": 61 - }, - "frame": { - "x": 73, - "y": 0, - "w": 73, - "h": 61 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 73, - "h": 60 - }, - "frame": { - "x": 0, - "y": 61, - "w": 73, - "h": 60 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 73, - "h": 60 - }, - "frame": { - "x": 0, - "y": 61, - "w": 73, - "h": 60 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 61 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 72, - "h": 59 - }, - "frame": { - "x": 73, - "y": 61, - "w": 72, - "h": 59 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:bc67ee0b37e5c8a13762178a52fad862:1ee199920770bc5797feb94424ff9f9a:947bf84d1af493c62e2cef45bb6c19ad$" - } -} \ No newline at end of file +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 152, "y": 292, "w": 74, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 74, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 303, "y": 221, "w": 74, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 74, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 383, "y": 147, "w": 75, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 75, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 233, "y": 74, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 459, "y": 147, "w": 75, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 75, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 315, "y": 0, "w": 76, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 76, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 387, "y": 74, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 392, "y": 0, "w": 75, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 75, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 237, "y": 0, "w": 77, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 77, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 0, "w": 78, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 78, "h": 74 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 79, "y": 0, "w": 78, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 78, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 158, "y": 0, "w": 78, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 78, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 0, "y": 75, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 458, "y": 220, "w": 75, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 75, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 150, "y": 364, "w": 73, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 73, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 152, "y": 292, "w": 74, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 74, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 303, "y": 221, "w": 74, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 74, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 383, "y": 147, "w": 75, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 75, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 233, "y": 74, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 459, "y": 147, "w": 75, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 75, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 315, "y": 0, "w": 76, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 76, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 387, "y": 74, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 392, "y": 0, "w": 75, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 75, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 237, "y": 0, "w": 77, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 77, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 0, "w": 78, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 78, "h": 74 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 79, "y": 0, "w": 78, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 78, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 158, "y": 0, "w": 78, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 78, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 0, "y": 75, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 458, "y": 220, "w": 75, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 75, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 150, "y": 364, "w": 73, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 73, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 152, "y": 292, "w": 74, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 74, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 303, "y": 221, "w": 74, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 74, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 383, "y": 147, "w": 75, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 75, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 233, "y": 74, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 459, "y": 147, "w": 75, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 75, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 315, "y": 0, "w": 76, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 76, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 387, "y": 74, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 392, "y": 0, "w": 75, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 75, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 237, "y": 0, "w": 77, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 77, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 0, "y": 0, "w": 78, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 78, "h": 74 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 79, "y": 0, "w": 78, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 78, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 158, "y": 0, "w": 78, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 78, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 75, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 458, "y": 220, "w": 75, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 75, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 150, "y": 364, "w": 73, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 73, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 152, "y": 292, "w": 74, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 74, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 303, "y": 221, "w": 74, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 74, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 383, "y": 147, "w": 75, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 75, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 233, "y": 74, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 459, "y": 147, "w": 75, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 75, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 315, "y": 0, "w": 76, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 76, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 387, "y": 74, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 392, "y": 0, "w": 75, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 75, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 237, "y": 0, "w": 77, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 77, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 0, "w": 78, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 78, "h": 74 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 79, "y": 0, "w": 78, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 78, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 158, "y": 0, "w": 78, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 78, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 0, "y": 75, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 458, "y": 220, "w": 75, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 75, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 150, "y": 364, "w": 73, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 73, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 152, "y": 292, "w": 74, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 74, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 458, "y": 292, "w": 74, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 74, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 303, "y": 364, "w": 74, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 74, "h": 70 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 227, "y": 294, "w": 75, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 75, "h": 70 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 378, "y": 364, "w": 75, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 75, "h": 69 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 303, "y": 293, "w": 75, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 75, "h": 70 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 379, "y": 293, "w": 75, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 75, "h": 70 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 454, "y": 364, "w": 72, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 72, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 70, "y": 365, "w": 68, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 68, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 291, "y": 435, "w": 62, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 2, "w": 62, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 378, "y": 434, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 2, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 224, "y": 365, "w": 66, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 66, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 0, "y": 365, "w": 69, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 69, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 229, "y": 220, "w": 73, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 73, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 468, "y": 0, "w": 75, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 75, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 308, "y": 147, "w": 74, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 74, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 0, "y": 148, "w": 75, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 75, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 383, "y": 220, "w": 74, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 74, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 231, "y": 147, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 79, "y": 74, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 156, "y": 74, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 310, "y": 74, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 464, "y": 74, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 77, "y": 147, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 154, "y": 147, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 76, "y": 220, "w": 75, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 75, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 152, "y": 220, "w": 76, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 76, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 0, "y": 221, "w": 75, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 75, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 0, "y": 293, "w": 74, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 74, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 75, "y": 293, "w": 74, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 74, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "668.png", + "format": "I8", + "size": { "w": 543, "h": 507 }, + "scale": "1" + } +} diff --git a/public/images/pokemon/exp/back/668.png b/public/images/pokemon/exp/back/668.png index a8384e5cf3c..e600e3e40e1 100644 Binary files a/public/images/pokemon/exp/back/668.png and b/public/images/pokemon/exp/back/668.png differ diff --git a/public/images/pokemon/exp/back/672.json b/public/images/pokemon/exp/back/672.json index e323b585879..f877b9abc2e 100644 --- a/public/images/pokemon/exp/back/672.json +++ b/public/images/pokemon/exp/back/672.json @@ -1,965 +1,479 @@ -{ - "textures": [ - { - "image": "672.png", - "format": "RGBA8888", - "size": { - "w": 282, - "h": 282 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 42, - "w": 41, - "h": 42 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 42, - "w": 41, - "h": 42 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 84, - "w": 41, - "h": 42 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 126, - "w": 41, - "h": 42 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 168, - "w": 41, - "h": 42 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 210, - "w": 41, - "h": 42 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 41, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 82, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 123, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 164, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 205, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 41, - "y": 42, - "w": 41, - "h": 42 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 41, - "y": 84, - "w": 41, - "h": 42 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 41, - "y": 126, - "w": 41, - "h": 42 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 41, - "h": 41 - }, - "frame": { - "x": 41, - "y": 168, - "w": 41, - "h": 41 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 41, - "h": 41 - }, - "frame": { - "x": 41, - "y": 209, - "w": 41, - "h": 41 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 41, - "h": 41 - }, - "frame": { - "x": 82, - "y": 42, - "w": 41, - "h": 41 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 41, - "h": 41 - }, - "frame": { - "x": 123, - "y": 42, - "w": 41, - "h": 41 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 41, - "h": 41 - }, - "frame": { - "x": 164, - "y": 42, - "w": 41, - "h": 41 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 41, - "h": 41 - }, - "frame": { - "x": 205, - "y": 42, - "w": 41, - "h": 41 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 41, - "h": 41 - }, - "frame": { - "x": 82, - "y": 83, - "w": 41, - "h": 41 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 41, - "h": 41 - }, - "frame": { - "x": 82, - "y": 124, - "w": 41, - "h": 41 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 40, - "h": 42 - }, - "frame": { - "x": 82, - "y": 165, - "w": 40, - "h": 42 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 40, - "h": 42 - }, - "frame": { - "x": 82, - "y": 207, - "w": 40, - "h": 42 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 40, - "h": 41 - }, - "frame": { - "x": 122, - "y": 165, - "w": 40, - "h": 41 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 40, - "h": 41 - }, - "frame": { - "x": 122, - "y": 206, - "w": 40, - "h": 41 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 40, - "h": 41 - }, - "frame": { - "x": 123, - "y": 83, - "w": 40, - "h": 41 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 40, - "h": 41 - }, - "frame": { - "x": 123, - "y": 124, - "w": 40, - "h": 41 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 40, - "h": 41 - }, - "frame": { - "x": 162, - "y": 165, - "w": 40, - "h": 41 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 40, - "h": 41 - }, - "frame": { - "x": 162, - "y": 206, - "w": 40, - "h": 41 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 40, - "h": 41 - }, - "frame": { - "x": 163, - "y": 83, - "w": 40, - "h": 41 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 41, - "h": 40 - }, - "frame": { - "x": 163, - "y": 124, - "w": 41, - "h": 40 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 41, - "h": 40 - }, - "frame": { - "x": 203, - "y": 83, - "w": 41, - "h": 40 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 40, - "h": 40 - }, - "frame": { - "x": 202, - "y": 164, - "w": 40, - "h": 40 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 40, - "h": 40 - }, - "frame": { - "x": 204, - "y": 123, - "w": 40, - "h": 40 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 40, - "h": 40 - }, - "frame": { - "x": 242, - "y": 163, - "w": 40, - "h": 40 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 40, - "h": 40 - }, - "frame": { - "x": 242, - "y": 203, - "w": 40, - "h": 40 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 40, - "h": 40 - }, - "frame": { - "x": 202, - "y": 204, - "w": 40, - "h": 40 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:b36f1de558a8fa8ac8b56a9ba43a0dfd:5fe84a3f522e543bfbbfe0837355266b:2e4767b7cd134fc0ab1bb6e9eee82bc7$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 118, "y": 97, "w": 40, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 41, "y": 98, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 78, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 118, "y": 50, "w": 42, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 42, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 56, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 41, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 104, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 40, "y": 146, "w": 39, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 39, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 78, "y": 48, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 118, "y": 97, "w": 40, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 41, "y": 98, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 78, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 118, "y": 50, "w": 42, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 42, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 56, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 41, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 104, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 40, "y": 146, "w": 39, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 39, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 78, "y": 48, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 118, "y": 97, "w": 40, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 41, "y": 98, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 78, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 118, "y": 50, "w": 42, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 42, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 56, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 41, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 104, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 40, "y": 146, "w": 39, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 39, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 78, "y": 48, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 118, "y": 97, "w": 40, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 41, "y": 98, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 78, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 118, "y": 50, "w": 42, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 42, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 56, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 41, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 104, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 40, "y": 146, "w": 39, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 39, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 78, "y": 48, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 39, "y": 0, "w": 39, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 39, "h": 53 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 0, "w": 39, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 39, "h": 56 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 79, "y": 146, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 119, "y": 146, "w": 38, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 38, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 39, "y": 0, "w": 39, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 39, "h": 53 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 0, "w": 39, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 39, "h": 56 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 79, "y": 146, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 119, "y": 146, "w": 38, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 38, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "672.png", + "format": "I8", + "size": { "w": 160, "h": 195 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/672.png b/public/images/pokemon/exp/back/672.png index 5281168ec2e..ef5cf63938e 100644 Binary files a/public/images/pokemon/exp/back/672.png and b/public/images/pokemon/exp/back/672.png differ diff --git a/public/images/pokemon/exp/back/674.json b/public/images/pokemon/exp/back/674.json deleted file mode 100644 index 9ace3fec70f..00000000000 --- a/public/images/pokemon/exp/back/674.json +++ /dev/null @@ -1,1175 +0,0 @@ -{ - "textures": [ - { - "image": "674.png", - "format": "RGBA8888", - "size": { - "w": 124, - "h": 124 - }, - "scale": 1, - "frames": [ - { - "filename": "0036.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 29, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 29, - "h": 42 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 29, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 29, - "h": 42 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 29, - "h": 42 - }, - "frame": { - "x": 29, - "y": 0, - "w": 29, - "h": 42 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 29, - "h": 42 - }, - "frame": { - "x": 29, - "y": 0, - "w": 29, - "h": 42 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 29, - "h": 42 - }, - "frame": { - "x": 29, - "y": 0, - "w": 29, - "h": 42 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 29, - "h": 42 - }, - "frame": { - "x": 58, - "y": 0, - "w": 29, - "h": 42 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 29, - "h": 42 - }, - "frame": { - "x": 58, - "y": 0, - "w": 29, - "h": 42 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 29, - "h": 42 - }, - "frame": { - "x": 58, - "y": 0, - "w": 29, - "h": 42 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 29, - "h": 42 - }, - "frame": { - "x": 58, - "y": 0, - "w": 29, - "h": 42 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 87, - "y": 0, - "w": 28, - "h": 42 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 87, - "y": 0, - "w": 28, - "h": 42 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 87, - "y": 0, - "w": 28, - "h": 42 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 87, - "y": 0, - "w": 28, - "h": 42 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 87, - "y": 0, - "w": 28, - "h": 42 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 87, - "y": 0, - "w": 28, - "h": 42 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 87, - "y": 0, - "w": 28, - "h": 42 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 29, - "h": 41 - }, - "frame": { - "x": 0, - "y": 42, - "w": 29, - "h": 41 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 29, - "h": 41 - }, - "frame": { - "x": 0, - "y": 42, - "w": 29, - "h": 41 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 29, - "h": 41 - }, - "frame": { - "x": 0, - "y": 42, - "w": 29, - "h": 41 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 29, - "h": 41 - }, - "frame": { - "x": 0, - "y": 42, - "w": 29, - "h": 41 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 29, - "h": 40 - }, - "frame": { - "x": 29, - "y": 42, - "w": 29, - "h": 40 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 29, - "h": 40 - }, - "frame": { - "x": 29, - "y": 42, - "w": 29, - "h": 40 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 58, - "y": 42, - "w": 28, - "h": 42 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 58, - "y": 42, - "w": 28, - "h": 42 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 58, - "y": 42, - "w": 28, - "h": 42 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 58, - "y": 42, - "w": 28, - "h": 42 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 58, - "y": 42, - "w": 28, - "h": 42 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 58, - "y": 42, - "w": 28, - "h": 42 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 58, - "y": 42, - "w": 28, - "h": 42 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 58, - "y": 42, - "w": 28, - "h": 42 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 58, - "y": 42, - "w": 28, - "h": 42 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 58, - "y": 42, - "w": 28, - "h": 42 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 58, - "y": 42, - "w": 28, - "h": 42 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 29, - "y": 82, - "w": 28, - "h": 42 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 28, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 28, - "h": 41 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 28, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 28, - "h": 41 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 28, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 28, - "h": 41 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 28, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 28, - "h": 41 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 28, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 28, - "h": 41 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 28, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 28, - "h": 41 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 28, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 28, - "h": 41 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 28, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 28, - "h": 41 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 28, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 28, - "h": 41 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 28, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 28, - "h": 41 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 28, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 28, - "h": 41 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 28, - "h": 40 - }, - "frame": { - "x": 57, - "y": 84, - "w": 28, - "h": 40 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 28, - "h": 40 - }, - "frame": { - "x": 57, - "y": 84, - "w": 28, - "h": 40 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 28, - "h": 40 - }, - "frame": { - "x": 57, - "y": 84, - "w": 28, - "h": 40 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 28, - "h": 40 - }, - "frame": { - "x": 57, - "y": 84, - "w": 28, - "h": 40 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 28, - "h": 40 - }, - "frame": { - "x": 57, - "y": 84, - "w": 28, - "h": 40 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 28, - "h": 40 - }, - "frame": { - "x": 57, - "y": 84, - "w": 28, - "h": 40 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 28, - "h": 40 - }, - "frame": { - "x": 85, - "y": 84, - "w": 28, - "h": 40 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 28, - "h": 41 - }, - "frame": { - "x": 86, - "y": 42, - "w": 28, - "h": 41 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 28, - "h": 41 - }, - "frame": { - "x": 86, - "y": 42, - "w": 28, - "h": 41 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 28, - "h": 41 - }, - "frame": { - "x": 86, - "y": 42, - "w": 28, - "h": 41 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:25c10f058ffdfacdf8263d7198233227:17e793a518166b0f2a1f8af6ec7b8dd7:b823d10f1c9b4d501296982088ba63d6$" - } -} diff --git a/public/images/pokemon/exp/back/674.png b/public/images/pokemon/exp/back/674.png deleted file mode 100644 index 69d9e886150..00000000000 Binary files a/public/images/pokemon/exp/back/674.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/692.json b/public/images/pokemon/exp/back/692.json index 41e845ef9ed..801710c4861 100644 --- a/public/images/pokemon/exp/back/692.json +++ b/public/images/pokemon/exp/back/692.json @@ -1,356 +1,794 @@ -{ - "textures": [ - { - "image": "692.png", - "format": "RGBA8888", - "size": { - "w": 152, - "h": 152 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 51, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 51, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 51, - "h": 39 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 51, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 51, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 51, - "h": 39 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 51, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 51, - "h": 39 - }, - "frame": { - "x": 51, - "y": 0, - "w": 51, - "h": 39 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 51, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 51, - "h": 39 - }, - "frame": { - "x": 51, - "y": 0, - "w": 51, - "h": 39 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 51, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 51, - "h": 39 - }, - "frame": { - "x": 51, - "y": 0, - "w": 51, - "h": 39 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 51, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 51, - "h": 39 - }, - "frame": { - "x": 51, - "y": 0, - "w": 51, - "h": 39 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 51, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 51, - "h": 39 - }, - "frame": { - "x": 0, - "y": 39, - "w": 51, - "h": 39 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 51, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 51, - "h": 39 - }, - "frame": { - "x": 0, - "y": 39, - "w": 51, - "h": 39 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 51, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 51, - "h": 39 - }, - "frame": { - "x": 0, - "y": 39, - "w": 51, - "h": 39 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 51, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 51, - "h": 39 - }, - "frame": { - "x": 0, - "y": 39, - "w": 51, - "h": 39 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 51, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 51, - "h": 39 - }, - "frame": { - "x": 0, - "y": 78, - "w": 51, - "h": 39 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 51, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 51, - "h": 39 - }, - "frame": { - "x": 0, - "y": 78, - "w": 51, - "h": 39 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 51, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 51, - "h": 39 - }, - "frame": { - "x": 51, - "y": 39, - "w": 51, - "h": 39 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 51, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 51, - "h": 39 - }, - "frame": { - "x": 51, - "y": 39, - "w": 51, - "h": 39 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 51, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 51, - "h": 37 - }, - "frame": { - "x": 51, - "y": 78, - "w": 51, - "h": 37 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 51, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 51, - "h": 37 - }, - "frame": { - "x": 51, - "y": 115, - "w": 51, - "h": 37 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:4116bfb3ff62a8dd3ed77070dfb17bc8:e9bdb93a4ed57d3e08db360998da889f:2880def858c84cd859bedf13b0b49a33$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0002.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0003.png", + "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0004.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0005.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0006.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0007.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0008.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0009.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0010.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0011.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0012.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0013.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0014.png", + "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0015.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0016.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0017.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0018.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0019.png", + "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0020.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0021.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0022.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0023.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0024.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0025.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0026.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0027.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0028.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0029.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0030.png", + "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0031.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0032.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0033.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0034.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0035.png", + "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0036.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0037.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0038.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0039.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0040.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0041.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0042.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0043.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0044.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0045.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0046.png", + "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0047.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0048.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0049.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0050.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0051.png", + "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0052.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0053.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0054.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0055.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0056.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0057.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0058.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0059.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0060.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0063.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0064.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0065.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0066.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0067.png", + "frame": { "x": 59, "y": 37, "w": 57, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 57, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0068.png", + "frame": { "x": 59, "y": 37, "w": 57, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 57, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0069.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0070.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0071.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0072.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0073.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0074.png", + "frame": { "x": 60, "y": 72, "w": 58, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 58, "h": 31 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0075.png", + "frame": { "x": 119, "y": 72, "w": 56, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 56, "h": 31 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0076.png", + "frame": { "x": 60, "y": 72, "w": 58, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 58, "h": 31 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0077.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0078.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0079.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0080.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0081.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0082.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0083.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0084.png", + "frame": { "x": 59, "y": 37, "w": 57, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 57, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0085.png", + "frame": { "x": 59, "y": 37, "w": 57, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 57, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0086.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0087.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "692.png", + "format": "I8", + "size": { "w": 181, "h": 106 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/692.png b/public/images/pokemon/exp/back/692.png index 0b3462fe06d..e3eb957a624 100644 Binary files a/public/images/pokemon/exp/back/692.png and b/public/images/pokemon/exp/back/692.png differ diff --git a/public/images/pokemon/exp/back/693.json b/public/images/pokemon/exp/back/693.json index fb29d014658..6358a8908f6 100644 --- a/public/images/pokemon/exp/back/693.json +++ b/public/images/pokemon/exp/back/693.json @@ -1,230 +1,902 @@ -{ - "textures": [ - { - "image": "693.png", - "format": "RGBA8888", - "size": { - "w": 223, - "h": 223 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 76 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 90, - "h": 72 - }, - "frame": { - "x": 0, - "y": 0, - "w": 90, - "h": 72 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 76 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 90, - "h": 72 - }, - "frame": { - "x": 90, - "y": 0, - "w": 90, - "h": 72 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 76 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 90, - "h": 72 - }, - "frame": { - "x": 90, - "y": 0, - "w": 90, - "h": 72 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 76 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 90, - "h": 73 - }, - "frame": { - "x": 0, - "y": 72, - "w": 90, - "h": 73 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 76 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 90, - "h": 73 - }, - "frame": { - "x": 0, - "y": 72, - "w": 90, - "h": 73 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 76 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 90, - "h": 75 - }, - "frame": { - "x": 90, - "y": 72, - "w": 90, - "h": 75 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 76 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 90, - "h": 75 - }, - "frame": { - "x": 90, - "y": 72, - "w": 90, - "h": 75 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 90, - "h": 76 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 90, - "h": 76 - }, - "frame": { - "x": 0, - "y": 145, - "w": 90, - "h": 76 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 90, - "h": 76 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 90, - "h": 76 - }, - "frame": { - "x": 0, - "y": 145, - "w": 90, - "h": 76 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 90, - "h": 76 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 90, - "h": 76 - }, - "frame": { - "x": 90, - "y": 147, - "w": 90, - "h": 76 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:f3b26f7df2eeda76e504b3f1294ac699:a2e5c9fc75e286a40f09ab013ac5cb32:9c1f9147e693c05eb4655590e9099679$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 472, "y": 70, "w": 88, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 0, "w": 88, "h": 72 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 378, "y": 138, "w": 91, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 8, "w": 91, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 187, "y": 260, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 379, "y": 257, "w": 95, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 16, "w": 95, "h": 60 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 572, "y": 1, "w": 98, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 98, "h": 66 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 478, "y": 1, "w": 94, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 11, "w": 94, "h": 69 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 560, "y": 132, "w": 93, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 19, "w": 93, "h": 64 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 474, "y": 257, "w": 90, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 22, "w": 90, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 95, "y": 197, "w": 94, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 21, "w": 94, "h": 62 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 99, "y": 1, "w": 94, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 71 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 291, "y": 1, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 6, "w": 90, "h": 73 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 288, "y": 74, "w": 90, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 11, "w": 90, "h": 67 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 368, "y": 317, "w": 88, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 17, "w": 88, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 96, "y": 259, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 472, "y": 70, "w": 88, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 0, "w": 88, "h": 72 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 378, "y": 138, "w": 91, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 8, "w": 91, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 187, "y": 260, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 379, "y": 257, "w": 95, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 16, "w": 95, "h": 60 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 572, "y": 1, "w": 98, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 98, "h": 66 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 478, "y": 1, "w": 94, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 11, "w": 94, "h": 69 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 560, "y": 132, "w": 93, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 19, "w": 93, "h": 64 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 474, "y": 257, "w": 90, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 22, "w": 90, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 95, "y": 197, "w": 94, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 21, "w": 94, "h": 62 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 99, "y": 1, "w": 94, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 71 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 291, "y": 1, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 6, "w": 90, "h": 73 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 288, "y": 74, "w": 90, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 11, "w": 90, "h": 67 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 368, "y": 317, "w": 88, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 17, "w": 88, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 96, "y": 259, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 472, "y": 70, "w": 88, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 0, "w": 88, "h": 72 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 378, "y": 138, "w": 91, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 8, "w": 91, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 187, "y": 260, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 379, "y": 257, "w": 95, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 16, "w": 95, "h": 60 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 572, "y": 1, "w": 98, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 98, "h": 66 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 478, "y": 1, "w": 94, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 11, "w": 94, "h": 69 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 560, "y": 132, "w": 93, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 19, "w": 93, "h": 64 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 474, "y": 257, "w": 90, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 22, "w": 90, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 95, "y": 197, "w": 94, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 21, "w": 94, "h": 62 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 99, "y": 1, "w": 94, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 71 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 291, "y": 1, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 6, "w": 90, "h": 73 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 288, "y": 74, "w": 90, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 11, "w": 90, "h": 67 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 368, "y": 317, "w": 88, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 17, "w": 88, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 96, "y": 259, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 472, "y": 70, "w": 88, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 0, "w": 88, "h": 72 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 378, "y": 138, "w": 91, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 8, "w": 91, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 187, "y": 260, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 379, "y": 257, "w": 95, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 16, "w": 95, "h": 60 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 572, "y": 1, "w": 98, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 98, "h": 66 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 478, "y": 1, "w": 94, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 11, "w": 94, "h": 69 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 560, "y": 132, "w": 93, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 19, "w": 93, "h": 64 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 474, "y": 257, "w": 90, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 22, "w": 90, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 95, "y": 197, "w": 94, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 21, "w": 94, "h": 62 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 99, "y": 1, "w": 94, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 71 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 291, "y": 1, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 6, "w": 90, "h": 73 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 288, "y": 74, "w": 90, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 11, "w": 90, "h": 67 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 368, "y": 317, "w": 88, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 17, "w": 88, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 96, "y": 259, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 472, "y": 70, "w": 88, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 0, "w": 88, "h": 72 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 378, "y": 138, "w": 91, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 8, "w": 91, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 187, "y": 260, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 379, "y": 257, "w": 95, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 16, "w": 95, "h": 60 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 572, "y": 1, "w": 98, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 98, "h": 66 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 478, "y": 1, "w": 94, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 11, "w": 94, "h": 69 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 560, "y": 132, "w": 93, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 19, "w": 93, "h": 64 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 474, "y": 257, "w": 90, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 22, "w": 90, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 95, "y": 197, "w": 94, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 21, "w": 94, "h": 62 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 99, "y": 1, "w": 94, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 71 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 291, "y": 1, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 6, "w": 90, "h": 73 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 288, "y": 74, "w": 90, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 11, "w": 90, "h": 67 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 368, "y": 317, "w": 88, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 17, "w": 88, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 96, "y": 259, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 565, "y": 196, "w": 90, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 6, "w": 90, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 278, "y": 266, "w": 90, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 10, "w": 90, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 189, "y": 199, "w": 95, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 95, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 193, "y": 1, "w": 98, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 98, "h": 68 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 1, "y": 71, "w": 94, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 469, "y": 196, "w": 96, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 12, "w": 96, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 1, "y": 1, "w": 98, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 5, "w": 98, "h": 70 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 1, "y": 136, "w": 94, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 10, "w": 94, "h": 63 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 95, "y": 72, "w": 96, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 12, "w": 96, "h": 63 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 381, "y": 1, "w": 97, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 6, "w": 97, "h": 67 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 1, "y": 71, "w": 94, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 469, "y": 196, "w": 96, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 12, "w": 96, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 1, "y": 1, "w": 98, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 5, "w": 98, "h": 70 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 191, "y": 136, "w": 94, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 10, "w": 94, "h": 63 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 95, "y": 135, "w": 96, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 11, "w": 96, "h": 62 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 572, "y": 67, "w": 99, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 99, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 284, "y": 205, "w": 95, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 11, "w": 95, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 1, "y": 199, "w": 91, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 12, "w": 91, "h": 60 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 1, "y": 259, "w": 95, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 12, "w": 95, "h": 60 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 193, "y": 69, "w": 95, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 5, "w": 95, "h": 67 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 285, "y": 141, "w": 92, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 8, "w": 92, "h": 64 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 96, "y": 318, "w": 89, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 14, "w": 89, "h": 58 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 564, "y": 261, "w": 92, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 14, "w": 92, "h": 58 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "693.png", + "format": "I8", + "size": { "w": 672, "h": 377 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/693.png b/public/images/pokemon/exp/back/693.png index a4b89137043..4772c64f8d0 100644 Binary files a/public/images/pokemon/exp/back/693.png and b/public/images/pokemon/exp/back/693.png differ diff --git a/public/images/pokemon/exp/back/694.json b/public/images/pokemon/exp/back/694.json deleted file mode 100644 index d77a3db07e3..00000000000 --- a/public/images/pokemon/exp/back/694.json +++ /dev/null @@ -1,272 +0,0 @@ -{ - "textures": [ - { - "image": "694.png", - "format": "RGBA8888", - "size": { - "w": 130, - "h": 130 - }, - "scale": 1, - "frames": [ - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 48, - "h": 35 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 48, - "h": 35 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 39 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 47, - "h": 35 - }, - "frame": { - "x": 48, - "y": 0, - "w": 47, - "h": 35 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 47, - "h": 36 - }, - "frame": { - "x": 0, - "y": 35, - "w": 47, - "h": 36 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 47, - "h": 36 - }, - "frame": { - "x": 0, - "y": 35, - "w": 47, - "h": 36 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 47, - "h": 37 - }, - "frame": { - "x": 47, - "y": 35, - "w": 47, - "h": 37 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 47, - "h": 37 - }, - "frame": { - "x": 47, - "y": 35, - "w": 47, - "h": 37 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 46, - "h": 38 - }, - "frame": { - "x": 0, - "y": 71, - "w": 46, - "h": 38 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 46, - "h": 38 - }, - "frame": { - "x": 0, - "y": 71, - "w": 46, - "h": 38 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 39 - }, - "frame": { - "x": 46, - "y": 72, - "w": 44, - "h": 39 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 39 - }, - "frame": { - "x": 46, - "y": 72, - "w": 44, - "h": 39 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 39 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 40, - "h": 39 - }, - "frame": { - "x": 90, - "y": 72, - "w": 40, - "h": 39 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:8940ca5f146f0b24d2aa10692e8e18b0:e6a9f01d7ca698d2b3d7fdf6d9244c8c:b0990f9650cfe63b836cbed33f0b44d8$" - } -} diff --git a/public/images/pokemon/exp/back/694.png b/public/images/pokemon/exp/back/694.png deleted file mode 100644 index d3675e0a9d7..00000000000 Binary files a/public/images/pokemon/exp/back/694.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/697.json b/public/images/pokemon/exp/back/697.json index 9707f931b14..6963da289ab 100644 --- a/public/images/pokemon/exp/back/697.json +++ b/public/images/pokemon/exp/back/697.json @@ -1,1196 +1,992 @@ -{ - "textures": [ - { - "image": "697.png", - "format": "RGBA8888", - "size": { - "w": 374, - "h": 374 - }, - "scale": 1, - "frames": [ - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 63, - "h": 78 - }, - "frame": { - "x": 0, - "y": 0, - "w": 63, - "h": 78 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 63, - "h": 78 - }, - "frame": { - "x": 0, - "y": 0, - "w": 63, - "h": 78 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 60, - "h": 78 - }, - "frame": { - "x": 0, - "y": 78, - "w": 60, - "h": 78 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 66, - "h": 77 - }, - "frame": { - "x": 0, - "y": 156, - "w": 66, - "h": 77 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 66, - "h": 77 - }, - "frame": { - "x": 0, - "y": 156, - "w": 66, - "h": 77 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 76 - }, - "frame": { - "x": 60, - "y": 78, - "w": 77, - "h": 76 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 76 - }, - "frame": { - "x": 60, - "y": 78, - "w": 77, - "h": 76 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 76 - }, - "frame": { - "x": 60, - "y": 78, - "w": 77, - "h": 76 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 76 - }, - "frame": { - "x": 60, - "y": 78, - "w": 77, - "h": 76 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 76 - }, - "frame": { - "x": 63, - "y": 0, - "w": 77, - "h": 76 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 76 - }, - "frame": { - "x": 63, - "y": 0, - "w": 77, - "h": 76 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 76 - }, - "frame": { - "x": 63, - "y": 0, - "w": 77, - "h": 76 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 76 - }, - "frame": { - "x": 63, - "y": 0, - "w": 77, - "h": 76 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 76 - }, - "frame": { - "x": 0, - "y": 233, - "w": 77, - "h": 76 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 76 - }, - "frame": { - "x": 0, - "y": 233, - "w": 77, - "h": 76 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 76 - }, - "frame": { - "x": 0, - "y": 233, - "w": 77, - "h": 76 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 76 - }, - "frame": { - "x": 0, - "y": 233, - "w": 77, - "h": 76 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 76 - }, - "frame": { - "x": 66, - "y": 154, - "w": 77, - "h": 76 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 76 - }, - "frame": { - "x": 66, - "y": 154, - "w": 77, - "h": 76 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 76 - }, - "frame": { - "x": 66, - "y": 154, - "w": 77, - "h": 76 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 76 - }, - "frame": { - "x": 66, - "y": 154, - "w": 77, - "h": 76 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 76, - "h": 76 - }, - "frame": { - "x": 137, - "y": 76, - "w": 76, - "h": 76 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 76, - "h": 76 - }, - "frame": { - "x": 137, - "y": 76, - "w": 76, - "h": 76 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 76, - "h": 76 - }, - "frame": { - "x": 137, - "y": 76, - "w": 76, - "h": 76 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 76, - "h": 76 - }, - "frame": { - "x": 137, - "y": 76, - "w": 76, - "h": 76 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 69, - "h": 76 - }, - "frame": { - "x": 140, - "y": 0, - "w": 69, - "h": 76 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 69, - "h": 76 - }, - "frame": { - "x": 140, - "y": 0, - "w": 69, - "h": 76 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 75 - }, - "frame": { - "x": 209, - "y": 0, - "w": 76, - "h": 75 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 75 - }, - "frame": { - "x": 209, - "y": 0, - "w": 76, - "h": 75 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 75 - }, - "frame": { - "x": 209, - "y": 0, - "w": 76, - "h": 75 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 77, - "h": 73 - }, - "frame": { - "x": 285, - "y": 0, - "w": 77, - "h": 73 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 75 - }, - "frame": { - "x": 285, - "y": 73, - "w": 76, - "h": 75 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 72, - "h": 75 - }, - "frame": { - "x": 213, - "y": 75, - "w": 72, - "h": 75 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 72, - "h": 75 - }, - "frame": { - "x": 213, - "y": 75, - "w": 72, - "h": 75 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 76, - "h": 74 - }, - "frame": { - "x": 285, - "y": 148, - "w": 76, - "h": 74 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 76, - "h": 74 - }, - "frame": { - "x": 285, - "y": 148, - "w": 76, - "h": 74 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 75, - "h": 75 - }, - "frame": { - "x": 143, - "y": 152, - "w": 75, - "h": 75 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 75, - "h": 75 - }, - "frame": { - "x": 143, - "y": 152, - "w": 75, - "h": 75 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 75, - "h": 75 - }, - "frame": { - "x": 143, - "y": 152, - "w": 75, - "h": 75 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 75, - "h": 75 - }, - "frame": { - "x": 143, - "y": 152, - "w": 75, - "h": 75 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 74 - }, - "frame": { - "x": 77, - "y": 230, - "w": 74, - "h": 74 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 74 - }, - "frame": { - "x": 77, - "y": 230, - "w": 74, - "h": 74 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 74 - }, - "frame": { - "x": 77, - "y": 230, - "w": 74, - "h": 74 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 74 - }, - "frame": { - "x": 77, - "y": 230, - "w": 74, - "h": 74 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 74 - }, - "frame": { - "x": 77, - "y": 230, - "w": 74, - "h": 74 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 74 - }, - "frame": { - "x": 151, - "y": 227, - "w": 74, - "h": 74 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 74 - }, - "frame": { - "x": 151, - "y": 227, - "w": 74, - "h": 74 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 74 - }, - "frame": { - "x": 151, - "y": 227, - "w": 74, - "h": 74 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 75, - "h": 73 - }, - "frame": { - "x": 151, - "y": 301, - "w": 75, - "h": 73 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 75, - "h": 73 - }, - "frame": { - "x": 151, - "y": 301, - "w": 75, - "h": 73 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 74 - }, - "frame": { - "x": 225, - "y": 222, - "w": 74, - "h": 74 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 74 - }, - "frame": { - "x": 299, - "y": 222, - "w": 74, - "h": 74 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 73, - "h": 74 - }, - "frame": { - "x": 226, - "y": 296, - "w": 73, - "h": 74 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 73, - "h": 74 - }, - "frame": { - "x": 226, - "y": 296, - "w": 73, - "h": 74 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 73, - "h": 74 - }, - "frame": { - "x": 226, - "y": 296, - "w": 73, - "h": 74 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 73, - "h": 74 - }, - "frame": { - "x": 299, - "y": 296, - "w": 73, - "h": 74 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:5c15a6488ad8d9c5cd58a9490e3f8fe1:9f98e28712fdc6eb5949c7f74cafffeb:f4fdd87d2fc1483d8e0a185c2654e3d9$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 149, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 286, "y": 150, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 185, "y": 227, "w": 91, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 91, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 93, "y": 227, "w": 91, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 91, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 301, "w": 91, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 91, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 182, "y": 303, "w": 90, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 90, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 273, "y": 375, "w": 91, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 91, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 182, "y": 378, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 90, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 273, "y": 449, "w": 89, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 5, "w": 89, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 177, "y": 452, "w": 89, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 89, "h": 72 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 452, "y": 450, "w": 89, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 89, "h": 72 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 461, "y": 376, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 90, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 649, "y": 375, "w": 91, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 91, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 558, "y": 303, "w": 90, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 90, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 649, "y": 300, "w": 91, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 91, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 373, "y": 227, "w": 91, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 91, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 149, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 286, "y": 150, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 185, "y": 227, "w": 91, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 91, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 93, "y": 227, "w": 91, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 91, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 0, "y": 301, "w": 91, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 91, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 182, "y": 303, "w": 90, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 90, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 273, "y": 375, "w": 91, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 91, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 182, "y": 378, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 90, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 273, "y": 449, "w": 89, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 5, "w": 89, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 177, "y": 452, "w": 89, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 89, "h": 72 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 452, "y": 450, "w": 89, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 89, "h": 72 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 461, "y": 376, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 90, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 649, "y": 375, "w": 91, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 91, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 558, "y": 303, "w": 90, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 90, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 649, "y": 300, "w": 91, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 91, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 373, "y": 227, "w": 91, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 91, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 0, "y": 149, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 286, "y": 150, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 185, "y": 227, "w": 91, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 91, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 93, "y": 227, "w": 91, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 91, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 301, "w": 91, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 91, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 182, "y": 303, "w": 90, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 90, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 273, "y": 375, "w": 91, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 91, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 182, "y": 378, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 90, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 273, "y": 449, "w": 89, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 5, "w": 89, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 177, "y": 452, "w": 89, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 89, "h": 72 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 452, "y": 450, "w": 89, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 89, "h": 72 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 461, "y": 376, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 90, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 649, "y": 375, "w": 91, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 91, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 558, "y": 303, "w": 90, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 90, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 649, "y": 300, "w": 91, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 91, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 373, "y": 227, "w": 91, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 91, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 149, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 286, "y": 150, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 185, "y": 227, "w": 91, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 91, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 93, "y": 227, "w": 91, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 91, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 0, "y": 301, "w": 91, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 91, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 182, "y": 303, "w": 90, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 90, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 273, "y": 375, "w": 91, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 91, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 182, "y": 378, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 90, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 273, "y": 449, "w": 89, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 5, "w": 89, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 177, "y": 452, "w": 89, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 89, "h": 72 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 452, "y": 450, "w": 89, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 89, "h": 72 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 461, "y": 376, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 90, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 649, "y": 375, "w": 91, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 91, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 558, "y": 303, "w": 90, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 90, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 649, "y": 300, "w": 91, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 91, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 373, "y": 227, "w": 91, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 91, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 0, "y": 149, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 370, "y": 303, "w": 90, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 90, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 558, "y": 227, "w": 90, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 90, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 0, "y": 376, "w": 88, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 88, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 89, "y": 379, "w": 87, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 87, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 365, "y": 378, "w": 86, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 86, "h": 76 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 640, "y": 449, "w": 84, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 84, "h": 77 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 552, "y": 378, "w": 87, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 87, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 92, "y": 303, "w": 89, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 89, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 465, "y": 302, "w": 92, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 92, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 465, "y": 227, "w": 92, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 92, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 465, "y": 227, "w": 92, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 92, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 0, "y": 149, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 186, "y": 151, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 0, "y": 225, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 670, "y": 150, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 93, "y": 151, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 472, "y": 151, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 565, "y": 151, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 670, "y": 150, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 0, "y": 149, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 277, "y": 301, "w": 92, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 92, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 465, "y": 227, "w": 92, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 92, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 465, "y": 227, "w": 92, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 92, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 0, "y": 149, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 388, "y": 75, "w": 93, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 93, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 97, "y": 75, "w": 93, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 93, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 292, "y": 0, "w": 95, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 95, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 196, "y": 0, "w": 95, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 95, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 582, "y": 0, "w": 96, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 96, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 98, "y": 0, "w": 97, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 97, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 0, "y": 0, "w": 97, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 97, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 485, "y": 0, "w": 96, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 96, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 388, "y": 0, "w": 96, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 96, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 0, "y": 75, "w": 96, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 96, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 286, "y": 76, "w": 95, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 95, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 670, "y": 76, "w": 95, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 95, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 658, "y": 226, "w": 94, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 94, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 191, "y": 76, "w": 94, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 94, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 279, "y": 226, "w": 93, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 93, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 679, "y": 0, "w": 94, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 94, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 482, "y": 75, "w": 93, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 93, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0107.png", + "frame": { "x": 576, "y": 75, "w": 93, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 93, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0108.png", + "frame": { "x": 379, "y": 151, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0109.png", + "frame": { "x": 465, "y": 227, "w": 92, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 92, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "697.png", + "format": "I8", + "size": { "w": 773, "h": 526 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/697.png b/public/images/pokemon/exp/back/697.png index 44a73042829..f0ae22f2bb0 100644 Binary files a/public/images/pokemon/exp/back/697.png and b/public/images/pokemon/exp/back/697.png differ diff --git a/public/images/pokemon/exp/back/698.json b/public/images/pokemon/exp/back/698.json deleted file mode 100644 index 01e3235cc36..00000000000 --- a/public/images/pokemon/exp/back/698.json +++ /dev/null @@ -1,3296 +0,0 @@ -{ - "textures": [ - { - "image": "698.png", - "format": "RGBA8888", - "size": { - "w": 181, - "h": 181 - }, - "scale": 1, - "frames": [ - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 45, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 54 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 45, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 54 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 45, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 54 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 45, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 54 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 45, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 54 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 45, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 54 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 45, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 54 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 45, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 54 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 45, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 54 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 45, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 54 - } - }, - { - "filename": "0113.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 45, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 54 - } - }, - { - "filename": "0114.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 45, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 54 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 43, - "h": 55 - }, - "frame": { - "x": 0, - "y": 54, - "w": 43, - "h": 55 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 43, - "h": 55 - }, - "frame": { - "x": 0, - "y": 54, - "w": 43, - "h": 55 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 43, - "h": 55 - }, - "frame": { - "x": 0, - "y": 54, - "w": 43, - "h": 55 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 43, - "h": 55 - }, - "frame": { - "x": 0, - "y": 54, - "w": 43, - "h": 55 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 43, - "h": 55 - }, - "frame": { - "x": 0, - "y": 54, - "w": 43, - "h": 55 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 43, - "h": 55 - }, - "frame": { - "x": 0, - "y": 54, - "w": 43, - "h": 55 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 43, - "h": 55 - }, - "frame": { - "x": 0, - "y": 54, - "w": 43, - "h": 55 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 43, - "h": 55 - }, - "frame": { - "x": 0, - "y": 54, - "w": 43, - "h": 55 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 43, - "h": 55 - }, - "frame": { - "x": 0, - "y": 54, - "w": 43, - "h": 55 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 43, - "h": 55 - }, - "frame": { - "x": 0, - "y": 54, - "w": 43, - "h": 55 - } - }, - { - "filename": "0115.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 43, - "h": 55 - }, - "frame": { - "x": 0, - "y": 54, - "w": 43, - "h": 55 - } - }, - { - "filename": "0116.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 43, - "h": 55 - }, - "frame": { - "x": 0, - "y": 54, - "w": 43, - "h": 55 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 45, - "h": 53 - }, - "frame": { - "x": 45, - "y": 0, - "w": 45, - "h": 53 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 45, - "h": 53 - }, - "frame": { - "x": 45, - "y": 0, - "w": 45, - "h": 53 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 45, - "h": 53 - }, - "frame": { - "x": 45, - "y": 0, - "w": 45, - "h": 53 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 45, - "h": 53 - }, - "frame": { - "x": 45, - "y": 0, - "w": 45, - "h": 53 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 45, - "h": 53 - }, - "frame": { - "x": 45, - "y": 0, - "w": 45, - "h": 53 - } - }, - { - "filename": "0112.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 45, - "h": 53 - }, - "frame": { - "x": 45, - "y": 0, - "w": 45, - "h": 53 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0117.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0118.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0119.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0120.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0121.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0122.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0155.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0156.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 37, - "h": 56 - }, - "frame": { - "x": 129, - "y": 0, - "w": 37, - "h": 56 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 37, - "h": 56 - }, - "frame": { - "x": 129, - "y": 0, - "w": 37, - "h": 56 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 37, - "h": 56 - }, - "frame": { - "x": 129, - "y": 0, - "w": 37, - "h": 56 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 37, - "h": 56 - }, - "frame": { - "x": 129, - "y": 0, - "w": 37, - "h": 56 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 37, - "h": 56 - }, - "frame": { - "x": 129, - "y": 0, - "w": 37, - "h": 56 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 37, - "h": 56 - }, - "frame": { - "x": 129, - "y": 0, - "w": 37, - "h": 56 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 37, - "h": 56 - }, - "frame": { - "x": 129, - "y": 0, - "w": 37, - "h": 56 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 37, - "h": 56 - }, - "frame": { - "x": 129, - "y": 0, - "w": 37, - "h": 56 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 37, - "h": 56 - }, - "frame": { - "x": 129, - "y": 0, - "w": 37, - "h": 56 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 37, - "h": 56 - }, - "frame": { - "x": 129, - "y": 0, - "w": 37, - "h": 56 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 37, - "h": 56 - }, - "frame": { - "x": 129, - "y": 0, - "w": 37, - "h": 56 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 37, - "h": 56 - }, - "frame": { - "x": 129, - "y": 0, - "w": 37, - "h": 56 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 35, - "h": 56 - }, - "frame": { - "x": 41, - "y": 109, - "w": 35, - "h": 56 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 35, - "h": 56 - }, - "frame": { - "x": 41, - "y": 109, - "w": 35, - "h": 56 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 35, - "h": 56 - }, - "frame": { - "x": 41, - "y": 109, - "w": 35, - "h": 56 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 35, - "h": 56 - }, - "frame": { - "x": 41, - "y": 109, - "w": 35, - "h": 56 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 35, - "h": 56 - }, - "frame": { - "x": 41, - "y": 109, - "w": 35, - "h": 56 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 35, - "h": 56 - }, - "frame": { - "x": 41, - "y": 109, - "w": 35, - "h": 56 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 35, - "h": 56 - }, - "frame": { - "x": 41, - "y": 109, - "w": 35, - "h": 56 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 35, - "h": 56 - }, - "frame": { - "x": 41, - "y": 109, - "w": 35, - "h": 56 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 35, - "h": 56 - }, - "frame": { - "x": 41, - "y": 109, - "w": 35, - "h": 56 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 35, - "h": 56 - }, - "frame": { - "x": 41, - "y": 109, - "w": 35, - "h": 56 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 35, - "h": 56 - }, - "frame": { - "x": 41, - "y": 109, - "w": 35, - "h": 56 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 35, - "h": 56 - }, - "frame": { - "x": 41, - "y": 109, - "w": 35, - "h": 56 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 33, - "h": 55 - }, - "frame": { - "x": 43, - "y": 54, - "w": 33, - "h": 55 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 33, - "h": 55 - }, - "frame": { - "x": 43, - "y": 54, - "w": 33, - "h": 55 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 33, - "h": 55 - }, - "frame": { - "x": 43, - "y": 54, - "w": 33, - "h": 55 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 33, - "h": 55 - }, - "frame": { - "x": 43, - "y": 54, - "w": 33, - "h": 55 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 33, - "h": 55 - }, - "frame": { - "x": 43, - "y": 54, - "w": 33, - "h": 55 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 33, - "h": 55 - }, - "frame": { - "x": 43, - "y": 54, - "w": 33, - "h": 55 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 33, - "h": 55 - }, - "frame": { - "x": 43, - "y": 54, - "w": 33, - "h": 55 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 33, - "h": 55 - }, - "frame": { - "x": 43, - "y": 54, - "w": 33, - "h": 55 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 33, - "h": 55 - }, - "frame": { - "x": 43, - "y": 54, - "w": 33, - "h": 55 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 33, - "h": 55 - }, - "frame": { - "x": 43, - "y": 54, - "w": 33, - "h": 55 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 33, - "h": 55 - }, - "frame": { - "x": 43, - "y": 54, - "w": 33, - "h": 55 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 33, - "h": 55 - }, - "frame": { - "x": 43, - "y": 54, - "w": 33, - "h": 55 - } - }, - { - "filename": "0123.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 37, - "h": 57 - }, - "frame": { - "x": 76, - "y": 56, - "w": 37, - "h": 57 - } - }, - { - "filename": "0124.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 37, - "h": 57 - }, - "frame": { - "x": 76, - "y": 56, - "w": 37, - "h": 57 - } - }, - { - "filename": "0153.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 37, - "h": 57 - }, - "frame": { - "x": 76, - "y": 56, - "w": 37, - "h": 57 - } - }, - { - "filename": "0154.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 37, - "h": 57 - }, - "frame": { - "x": 76, - "y": 56, - "w": 37, - "h": 57 - } - }, - { - "filename": "0125.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 113, - "y": 56, - "w": 35, - "h": 58 - } - }, - { - "filename": "0126.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 113, - "y": 56, - "w": 35, - "h": 58 - } - }, - { - "filename": "0151.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 113, - "y": 56, - "w": 35, - "h": 58 - } - }, - { - "filename": "0152.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 113, - "y": 56, - "w": 35, - "h": 58 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 33, - "h": 54 - }, - "frame": { - "x": 148, - "y": 56, - "w": 33, - "h": 54 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 33, - "h": 54 - }, - "frame": { - "x": 148, - "y": 56, - "w": 33, - "h": 54 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 33, - "h": 54 - }, - "frame": { - "x": 148, - "y": 56, - "w": 33, - "h": 54 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 33, - "h": 54 - }, - "frame": { - "x": 148, - "y": 56, - "w": 33, - "h": 54 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 33, - "h": 54 - }, - "frame": { - "x": 148, - "y": 56, - "w": 33, - "h": 54 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 33, - "h": 54 - }, - "frame": { - "x": 148, - "y": 56, - "w": 33, - "h": 54 - } - }, - { - "filename": "0127.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 76, - "y": 113, - "w": 35, - "h": 58 - } - }, - { - "filename": "0128.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 76, - "y": 113, - "w": 35, - "h": 58 - } - }, - { - "filename": "0133.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 76, - "y": 113, - "w": 35, - "h": 58 - } - }, - { - "filename": "0134.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 76, - "y": 113, - "w": 35, - "h": 58 - } - }, - { - "filename": "0139.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 76, - "y": 113, - "w": 35, - "h": 58 - } - }, - { - "filename": "0140.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 76, - "y": 113, - "w": 35, - "h": 58 - } - }, - { - "filename": "0145.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 76, - "y": 113, - "w": 35, - "h": 58 - } - }, - { - "filename": "0146.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 76, - "y": 113, - "w": 35, - "h": 58 - } - }, - { - "filename": "0129.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 111, - "y": 114, - "w": 35, - "h": 58 - } - }, - { - "filename": "0130.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 111, - "y": 114, - "w": 35, - "h": 58 - } - }, - { - "filename": "0135.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 111, - "y": 114, - "w": 35, - "h": 58 - } - }, - { - "filename": "0136.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 111, - "y": 114, - "w": 35, - "h": 58 - } - }, - { - "filename": "0141.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 111, - "y": 114, - "w": 35, - "h": 58 - } - }, - { - "filename": "0142.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 111, - "y": 114, - "w": 35, - "h": 58 - } - }, - { - "filename": "0147.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 111, - "y": 114, - "w": 35, - "h": 58 - } - }, - { - "filename": "0148.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 111, - "y": 114, - "w": 35, - "h": 58 - } - }, - { - "filename": "0131.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 146, - "y": 114, - "w": 35, - "h": 58 - } - }, - { - "filename": "0132.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 146, - "y": 114, - "w": 35, - "h": 58 - } - }, - { - "filename": "0137.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 146, - "y": 114, - "w": 35, - "h": 58 - } - }, - { - "filename": "0138.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 146, - "y": 114, - "w": 35, - "h": 58 - } - }, - { - "filename": "0143.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 146, - "y": 114, - "w": 35, - "h": 58 - } - }, - { - "filename": "0144.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 146, - "y": 114, - "w": 35, - "h": 58 - } - }, - { - "filename": "0149.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 146, - "y": 114, - "w": 35, - "h": 58 - } - }, - { - "filename": "0150.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 146, - "y": 114, - "w": 35, - "h": 58 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:47af8de4c4888204d35a4e17ac074ed2:4f5193840bb62c79e8f9d414f094a882:198087d69fed44d4a642fa3ba5c077d6$" - } -} diff --git a/public/images/pokemon/exp/back/698.png b/public/images/pokemon/exp/back/698.png deleted file mode 100644 index 43738b78928..00000000000 Binary files a/public/images/pokemon/exp/back/698.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/700.json b/public/images/pokemon/exp/back/700.json index 8919ba29366..70083de61c9 100644 --- a/public/images/pokemon/exp/back/700.json +++ b/public/images/pokemon/exp/back/700.json @@ -1,209 +1,587 @@ -{ - "textures": [ - { - "image": "700.png", - "format": "RGBA8888", - "size": { - "w": 173, - "h": 173 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 44, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 44, - "h": 58 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 44, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 58 - }, - "frame": { - "x": 0, - "y": 58, - "w": 44, - "h": 58 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 44, - "h": 57 - }, - "frame": { - "x": 0, - "y": 116, - "w": 44, - "h": 57 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 44, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 58 - }, - "frame": { - "x": 44, - "y": 0, - "w": 44, - "h": 58 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 44, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 58 - }, - "frame": { - "x": 88, - "y": 0, - "w": 44, - "h": 58 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 44, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 58 - }, - "frame": { - "x": 88, - "y": 0, - "w": 44, - "h": 58 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 44, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 58 - }, - "frame": { - "x": 44, - "y": 58, - "w": 44, - "h": 58 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 44, - "h": 56 - }, - "frame": { - "x": 44, - "y": 116, - "w": 44, - "h": 56 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 44, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 58 - }, - "frame": { - "x": 88, - "y": 58, - "w": 44, - "h": 58 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:e0cdfdc055c08cdcb7b31d0da301c709:2affc6f4613ab8f1ba13cd35d9106bb3:2e4bf5ef1f19e475073f7da10c60b540$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 46, "y": 123, "w": 46, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 46, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 101, "y": 63, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 47, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 180, "w": 46, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 46, "h": 58 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 91, "y": 182, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 46, "h": 57 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 137, "y": 183, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 46, "h": 57 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 188, "y": 180, "w": 45, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 45, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 46, "y": 182, "w": 45, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 45, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 49, "y": 64, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 47, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 46, "y": 123, "w": 46, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 46, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 101, "y": 63, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 47, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 180, "w": 46, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 46, "h": 58 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 91, "y": 182, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 46, "h": 57 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 137, "y": 183, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 46, "h": 57 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 188, "y": 180, "w": 45, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 45, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 46, "y": 182, "w": 45, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 45, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 49, "y": 64, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 47, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 46, "y": 123, "w": 46, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 46, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 101, "y": 63, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 47, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 0, "y": 180, "w": 46, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 46, "h": 58 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 91, "y": 182, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 46, "h": 57 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 137, "y": 183, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 46, "h": 57 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 188, "y": 180, "w": 45, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 45, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 46, "y": 182, "w": 45, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 45, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 49, "y": 64, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 47, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 46, "y": 123, "w": 46, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 46, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 101, "y": 63, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 47, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 180, "w": 46, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 46, "h": 58 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 91, "y": 182, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 46, "h": 57 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 137, "y": 183, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 46, "h": 57 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 188, "y": 180, "w": 45, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 45, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 46, "y": 182, "w": 45, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 45, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 49, "y": 64, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 47, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 46, "y": 123, "w": 46, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 46, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 101, "y": 63, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 47, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 0, "y": 180, "w": 46, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 46, "h": 58 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 91, "y": 182, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 46, "h": 57 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 137, "y": 183, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 46, "h": 57 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 188, "y": 180, "w": 45, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 45, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 46, "y": 182, "w": 45, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 45, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 49, "y": 64, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 47, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 46, "y": 123, "w": 46, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 46, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 101, "y": 63, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 47, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 180, "w": 46, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 46, "h": 58 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 91, "y": 182, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 46, "h": 57 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 137, "y": 183, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 46, "h": 57 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 188, "y": 180, "w": 45, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 45, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 46, "y": 182, "w": 45, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 45, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 49, "y": 64, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 47, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 142, "y": 124, "w": 46, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 46, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 101, "y": 0, "w": 48, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 48, "h": 63 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 195, "y": 0, "w": 49, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 49, "h": 60 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 0, "y": 60, "w": 49, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 49, "h": 60 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 0, "y": 0, "w": 53, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 53, "h": 60 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 148, "y": 64, "w": 46, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 46, "h": 60 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 120, "w": 46, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 46, "h": 60 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 195, "y": 60, "w": 47, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 47, "h": 60 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 194, "y": 120, "w": 46, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 46, "h": 60 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 96, "y": 122, "w": 46, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 46, "h": 60 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 195, "y": 60, "w": 47, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 47, "h": 60 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 194, "y": 120, "w": 46, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 46, "h": 60 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 96, "y": 122, "w": 46, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 46, "h": 60 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 149, "y": 0, "w": 46, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 46, "h": 64 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 53, "y": 0, "w": 48, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 48, "h": 64 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 142, "y": 124, "w": 46, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 46, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "700.png", + "format": "I8", + "size": { "w": 244, "h": 241 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/700.png b/public/images/pokemon/exp/back/700.png index 6684e845a39..a3675cc15d8 100644 Binary files a/public/images/pokemon/exp/back/700.png and b/public/images/pokemon/exp/back/700.png differ diff --git a/public/images/pokemon/exp/back/702.json b/public/images/pokemon/exp/back/702.json index 7fa99d3eb04..9680e17e397 100644 --- a/public/images/pokemon/exp/back/702.json +++ b/public/images/pokemon/exp/back/702.json @@ -1,1028 +1,443 @@ -{ - "textures": [ - { - "image": "702.png", - "format": "RGBA8888", - "size": { - "w": 141, - "h": 141 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 47, - "h": 35 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 47, - "h": 35 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 47, - "h": 35 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 47, - "h": 35 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 47, - "h": 35 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 47, - "h": 35 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 70, - "w": 47, - "h": 35 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 70, - "w": 47, - "h": 35 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 70, - "w": 47, - "h": 35 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 70, - "w": 47, - "h": 35 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 70, - "w": 47, - "h": 35 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 105, - "w": 47, - "h": 35 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 47, - "y": 0, - "w": 47, - "h": 35 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 35 - }, - "frame": { - "x": 47, - "y": 35, - "w": 46, - "h": 35 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 35 - }, - "frame": { - "x": 47, - "y": 35, - "w": 46, - "h": 35 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 35 - }, - "frame": { - "x": 47, - "y": 35, - "w": 46, - "h": 35 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 35 - }, - "frame": { - "x": 47, - "y": 35, - "w": 46, - "h": 35 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 35 - }, - "frame": { - "x": 47, - "y": 35, - "w": 46, - "h": 35 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 35 - }, - "frame": { - "x": 47, - "y": 35, - "w": 46, - "h": 35 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 47, - "h": 34 - }, - "frame": { - "x": 47, - "y": 70, - "w": 47, - "h": 34 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 47, - "h": 34 - }, - "frame": { - "x": 47, - "y": 70, - "w": 47, - "h": 34 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 47, - "h": 34 - }, - "frame": { - "x": 47, - "y": 70, - "w": 47, - "h": 34 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 47, - "h": 34 - }, - "frame": { - "x": 47, - "y": 70, - "w": 47, - "h": 34 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 47, - "h": 34 - }, - "frame": { - "x": 47, - "y": 70, - "w": 47, - "h": 34 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 47, - "h": 34 - }, - "frame": { - "x": 93, - "y": 35, - "w": 47, - "h": 34 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 47, - "h": 34 - }, - "frame": { - "x": 93, - "y": 35, - "w": 47, - "h": 34 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 47, - "h": 34 - }, - "frame": { - "x": 93, - "y": 35, - "w": 47, - "h": 34 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 47, - "h": 34 - }, - "frame": { - "x": 93, - "y": 35, - "w": 47, - "h": 34 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 47, - "h": 34 - }, - "frame": { - "x": 93, - "y": 35, - "w": 47, - "h": 34 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 47, - "h": 34 - }, - "frame": { - "x": 93, - "y": 35, - "w": 47, - "h": 34 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 47, - "h": 34 - }, - "frame": { - "x": 94, - "y": 0, - "w": 47, - "h": 34 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 47, - "h": 32 - }, - "frame": { - "x": 94, - "y": 69, - "w": 47, - "h": 32 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 47, - "h": 32 - }, - "frame": { - "x": 94, - "y": 69, - "w": 47, - "h": 32 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 47, - "h": 32 - }, - "frame": { - "x": 94, - "y": 69, - "w": 47, - "h": 32 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 47, - "h": 32 - }, - "frame": { - "x": 94, - "y": 69, - "w": 47, - "h": 32 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 47, - "h": 32 - }, - "frame": { - "x": 94, - "y": 69, - "w": 47, - "h": 32 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 47, - "h": 32 - }, - "frame": { - "x": 94, - "y": 69, - "w": 47, - "h": 32 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 47, - "h": 32 - }, - "frame": { - "x": 94, - "y": 101, - "w": 47, - "h": 32 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 47, - "h": 32 - }, - "frame": { - "x": 94, - "y": 101, - "w": 47, - "h": 32 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 47, - "h": 32 - }, - "frame": { - "x": 94, - "y": 101, - "w": 47, - "h": 32 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 47, - "h": 32 - }, - "frame": { - "x": 94, - "y": 101, - "w": 47, - "h": 32 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 47, - "h": 32 - }, - "frame": { - "x": 94, - "y": 101, - "w": 47, - "h": 32 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 47, - "h": 32 - }, - "frame": { - "x": 47, - "y": 104, - "w": 47, - "h": 32 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:4052cb31e311daed50c3ad98d6d07226:990695ce3fc0717eec42d716a52de75e:ba8fdab405d5efab99c4aa1084328e6b$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 48, "y": 0, "w": 46, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 0, "w": 47, "h": 35 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 47, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 93, "y": 36, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 47, "y": 72, "w": 45, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 45, "h": 31 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 139, "y": 70, "w": 46, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 46, "h": 31 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 93, "y": 70, "w": 45, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 45, "h": 33 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 95, "y": 0, "w": 46, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 47, "y": 36, "w": 45, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 45, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 48, "y": 0, "w": 46, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 0, "w": 47, "h": 35 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 47, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 93, "y": 36, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 47, "y": 72, "w": 45, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 45, "h": 31 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0013.png", + "frame": { "x": 139, "y": 70, "w": 46, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 46, "h": 31 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0014.png", + "frame": { "x": 93, "y": 70, "w": 45, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 45, "h": 33 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0015.png", + "frame": { "x": 95, "y": 0, "w": 46, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0016.png", + "frame": { "x": 47, "y": 36, "w": 45, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 45, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0017.png", + "frame": { "x": 48, "y": 0, "w": 46, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 0, "w": 47, "h": 35 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 47, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0019.png", + "frame": { "x": 93, "y": 36, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0020.png", + "frame": { "x": 47, "y": 72, "w": 45, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 45, "h": 31 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0021.png", + "frame": { "x": 139, "y": 70, "w": 46, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 46, "h": 31 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0022.png", + "frame": { "x": 93, "y": 70, "w": 45, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 45, "h": 33 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0023.png", + "frame": { "x": 95, "y": 0, "w": 46, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0024.png", + "frame": { "x": 47, "y": 36, "w": 45, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 45, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0025.png", + "frame": { "x": 48, "y": 0, "w": 46, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 0, "w": 47, "h": 35 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 47, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0027.png", + "frame": { "x": 93, "y": 36, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0028.png", + "frame": { "x": 47, "y": 72, "w": 45, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 45, "h": 31 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0029.png", + "frame": { "x": 139, "y": 70, "w": 46, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 46, "h": 31 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0030.png", + "frame": { "x": 93, "y": 70, "w": 45, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 45, "h": 33 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0031.png", + "frame": { "x": 95, "y": 0, "w": 46, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0032.png", + "frame": { "x": 47, "y": 36, "w": 45, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 45, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0033.png", + "frame": { "x": 48, "y": 0, "w": 46, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0034.png", + "frame": { "x": 0, "y": 0, "w": 47, "h": 35 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 47, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0035.png", + "frame": { "x": 93, "y": 36, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0036.png", + "frame": { "x": 47, "y": 72, "w": 45, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 45, "h": 31 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0037.png", + "frame": { "x": 139, "y": 70, "w": 46, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 46, "h": 31 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0038.png", + "frame": { "x": 93, "y": 70, "w": 45, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 45, "h": 33 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0039.png", + "frame": { "x": 95, "y": 0, "w": 46, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0040.png", + "frame": { "x": 47, "y": 36, "w": 45, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 45, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0041.png", + "frame": { "x": 142, "y": 0, "w": 46, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0042.png", + "frame": { "x": 0, "y": 0, "w": 47, "h": 35 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 47, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0043.png", + "frame": { "x": 140, "y": 36, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0044.png", + "frame": { "x": 47, "y": 72, "w": 45, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 45, "h": 31 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0045.png", + "frame": { "x": 0, "y": 72, "w": 46, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 46, "h": 31 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0046.png", + "frame": { "x": 93, "y": 70, "w": 45, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 45, "h": 33 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0047.png", + "frame": { "x": 0, "y": 36, "w": 46, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0048.png", + "frame": { "x": 47, "y": 36, "w": 45, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 45, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "702.png", + "format": "I8", + "size": { "w": 188, "h": 103 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/702.png b/public/images/pokemon/exp/back/702.png index e90d2e5200b..2305dd44628 100644 Binary files a/public/images/pokemon/exp/back/702.png and b/public/images/pokemon/exp/back/702.png differ diff --git a/public/images/pokemon/exp/back/703.json b/public/images/pokemon/exp/back/703.json deleted file mode 100644 index dc39d04326d..00000000000 --- a/public/images/pokemon/exp/back/703.json +++ /dev/null @@ -1,314 +0,0 @@ -{ - "textures": [ - { - "image": "703.png", - "format": "RGBA8888", - "size": { - "w": 110, - "h": 110 - }, - "scale": 1, - "frames": [ - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 36, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 36, - "h": 39 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 39 - }, - "frame": { - "x": 36, - "y": 0, - "w": 37, - "h": 39 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 37, - "h": 40 - }, - "frame": { - "x": 73, - "y": 0, - "w": 37, - "h": 40 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 37, - "h": 40 - }, - "frame": { - "x": 73, - "y": 0, - "w": 37, - "h": 40 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 37, - "h": 40 - }, - "frame": { - "x": 73, - "y": 0, - "w": 37, - "h": 40 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 37, - "h": 40 - }, - "frame": { - "x": 73, - "y": 0, - "w": 37, - "h": 40 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 37, - "h": 40 - }, - "frame": { - "x": 73, - "y": 0, - "w": 37, - "h": 40 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 37, - "h": 40 - }, - "frame": { - "x": 73, - "y": 0, - "w": 37, - "h": 40 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 37, - "h": 40 - }, - "frame": { - "x": 73, - "y": 0, - "w": 37, - "h": 40 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 37, - "h": 40 - }, - "frame": { - "x": 0, - "y": 39, - "w": 37, - "h": 40 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 36, - "h": 40 - }, - "frame": { - "x": 37, - "y": 39, - "w": 36, - "h": 40 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 36, - "h": 40 - }, - "frame": { - "x": 37, - "y": 39, - "w": 36, - "h": 40 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 36, - "h": 40 - }, - "frame": { - "x": 37, - "y": 39, - "w": 36, - "h": 40 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 40 - }, - "frame": { - "x": 73, - "y": 40, - "w": 37, - "h": 40 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:9e937b9120a4e2d30cb17c3057bdb25e:2992340ca21fbb2052a947040742ff82:721af8c322ff60159262e9b3017c784d$" - } -} diff --git a/public/images/pokemon/exp/back/703.png b/public/images/pokemon/exp/back/703.png deleted file mode 100644 index 2af4ac363ea..00000000000 Binary files a/public/images/pokemon/exp/back/703.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/704.json b/public/images/pokemon/exp/back/704.json index cfee176924b..ff94c52a2a8 100644 --- a/public/images/pokemon/exp/back/704.json +++ b/public/images/pokemon/exp/back/704.json @@ -1,1742 +1,101 @@ -{ - "textures": [ - { - "image": "704.png", - "format": "RGBA8888", - "size": { - "w": 233, - "h": 233 - }, - "scale": 1, - "frames": [ - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 66, - "h": 72 - }, - "frame": { - "x": 0, - "y": 0, - "w": 66, - "h": 72 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 26, - "y": 24, - "w": 41, - "h": 48 - }, - "frame": { - "x": 0, - "y": 72, - "w": 41, - "h": 48 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 26, - "y": 25, - "w": 41, - "h": 47 - }, - "frame": { - "x": 66, - "y": 0, - "w": 41, - "h": 47 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 26, - "y": 25, - "w": 41, - "h": 47 - }, - "frame": { - "x": 66, - "y": 0, - "w": 41, - "h": 47 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 27, - "y": 25, - "w": 40, - "h": 47 - }, - "frame": { - "x": 0, - "y": 120, - "w": 40, - "h": 47 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 27, - "y": 25, - "w": 40, - "h": 47 - }, - "frame": { - "x": 0, - "y": 120, - "w": 40, - "h": 47 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 28, - "y": 26, - "w": 39, - "h": 46 - }, - "frame": { - "x": 107, - "y": 0, - "w": 39, - "h": 46 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 28, - "y": 26, - "w": 39, - "h": 46 - }, - "frame": { - "x": 0, - "y": 167, - "w": 39, - "h": 46 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 26, - "y": 29, - "w": 41, - "h": 43 - }, - "frame": { - "x": 146, - "y": 0, - "w": 41, - "h": 43 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 26, - "y": 29, - "w": 41, - "h": 43 - }, - "frame": { - "x": 146, - "y": 0, - "w": 41, - "h": 43 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 26, - "y": 29, - "w": 41, - "h": 43 - }, - "frame": { - "x": 146, - "y": 0, - "w": 41, - "h": 43 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 26, - "y": 29, - "w": 41, - "h": 43 - }, - "frame": { - "x": 146, - "y": 0, - "w": 41, - "h": 43 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 26, - "y": 29, - "w": 41, - "h": 43 - }, - "frame": { - "x": 146, - "y": 0, - "w": 41, - "h": 43 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 26, - "y": 29, - "w": 41, - "h": 43 - }, - "frame": { - "x": 146, - "y": 0, - "w": 41, - "h": 43 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 26, - "y": 29, - "w": 41, - "h": 43 - }, - "frame": { - "x": 146, - "y": 0, - "w": 41, - "h": 43 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 26, - "y": 29, - "w": 41, - "h": 43 - }, - "frame": { - "x": 146, - "y": 0, - "w": 41, - "h": 43 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 26, - "y": 30, - "w": 41, - "h": 42 - }, - "frame": { - "x": 187, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 26, - "y": 30, - "w": 41, - "h": 42 - }, - "frame": { - "x": 187, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 26, - "y": 30, - "w": 41, - "h": 42 - }, - "frame": { - "x": 187, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 26, - "y": 30, - "w": 41, - "h": 42 - }, - "frame": { - "x": 187, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 29, - "y": 26, - "w": 37, - "h": 46 - }, - "frame": { - "x": 41, - "y": 72, - "w": 37, - "h": 46 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 29, - "y": 26, - "w": 37, - "h": 46 - }, - "frame": { - "x": 41, - "y": 72, - "w": 37, - "h": 46 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 29, - "y": 26, - "w": 37, - "h": 46 - }, - "frame": { - "x": 41, - "y": 72, - "w": 37, - "h": 46 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 29, - "y": 26, - "w": 37, - "h": 46 - }, - "frame": { - "x": 41, - "y": 72, - "w": 37, - "h": 46 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 29, - "y": 26, - "w": 37, - "h": 46 - }, - "frame": { - "x": 41, - "y": 72, - "w": 37, - "h": 46 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 29, - "y": 26, - "w": 37, - "h": 46 - }, - "frame": { - "x": 78, - "y": 47, - "w": 37, - "h": 46 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 29, - "y": 26, - "w": 37, - "h": 46 - }, - "frame": { - "x": 78, - "y": 47, - "w": 37, - "h": 46 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 29, - "y": 26, - "w": 37, - "h": 46 - }, - "frame": { - "x": 78, - "y": 47, - "w": 37, - "h": 46 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 29, - "y": 26, - "w": 37, - "h": 46 - }, - "frame": { - "x": 78, - "y": 47, - "w": 37, - "h": 46 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 29, - "y": 26, - "w": 37, - "h": 46 - }, - "frame": { - "x": 78, - "y": 47, - "w": 37, - "h": 46 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 29, - "y": 26, - "w": 37, - "h": 46 - }, - "frame": { - "x": 115, - "y": 46, - "w": 37, - "h": 46 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 29, - "y": 26, - "w": 37, - "h": 46 - }, - "frame": { - "x": 115, - "y": 46, - "w": 37, - "h": 46 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 29, - "y": 26, - "w": 37, - "h": 46 - }, - "frame": { - "x": 115, - "y": 46, - "w": 37, - "h": 46 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 29, - "y": 26, - "w": 37, - "h": 46 - }, - "frame": { - "x": 152, - "y": 43, - "w": 37, - "h": 46 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 29, - "y": 26, - "w": 37, - "h": 46 - }, - "frame": { - "x": 152, - "y": 43, - "w": 37, - "h": 46 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 29, - "y": 26, - "w": 37, - "h": 46 - }, - "frame": { - "x": 152, - "y": 43, - "w": 37, - "h": 46 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 29, - "y": 26, - "w": 37, - "h": 46 - }, - "frame": { - "x": 152, - "y": 43, - "w": 37, - "h": 46 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 28, - "y": 26, - "w": 38, - "h": 46 - }, - "frame": { - "x": 189, - "y": 42, - "w": 38, - "h": 46 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 28, - "y": 26, - "w": 38, - "h": 46 - }, - "frame": { - "x": 189, - "y": 42, - "w": 38, - "h": 46 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 28, - "y": 27, - "w": 38, - "h": 45 - }, - "frame": { - "x": 78, - "y": 93, - "w": 38, - "h": 45 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 28, - "y": 27, - "w": 38, - "h": 45 - }, - "frame": { - "x": 78, - "y": 93, - "w": 38, - "h": 45 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 28, - "y": 27, - "w": 38, - "h": 45 - }, - "frame": { - "x": 78, - "y": 93, - "w": 38, - "h": 45 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 28, - "y": 27, - "w": 38, - "h": 45 - }, - "frame": { - "x": 78, - "y": 93, - "w": 38, - "h": 45 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 28, - "y": 27, - "w": 38, - "h": 45 - }, - "frame": { - "x": 78, - "y": 93, - "w": 38, - "h": 45 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 28, - "y": 27, - "w": 38, - "h": 45 - }, - "frame": { - "x": 78, - "y": 93, - "w": 38, - "h": 45 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 28, - "y": 27, - "w": 38, - "h": 45 - }, - "frame": { - "x": 78, - "y": 93, - "w": 38, - "h": 45 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 28, - "y": 27, - "w": 38, - "h": 45 - }, - "frame": { - "x": 78, - "y": 93, - "w": 38, - "h": 45 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 28, - "y": 27, - "w": 38, - "h": 45 - }, - "frame": { - "x": 116, - "y": 92, - "w": 38, - "h": 45 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 28, - "y": 27, - "w": 38, - "h": 45 - }, - "frame": { - "x": 154, - "y": 89, - "w": 38, - "h": 45 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 26, - "y": 30, - "w": 41, - "h": 42 - }, - "frame": { - "x": 192, - "y": 88, - "w": 41, - "h": 42 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 26, - "y": 30, - "w": 41, - "h": 42 - }, - "frame": { - "x": 192, - "y": 88, - "w": 41, - "h": 42 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 26, - "y": 30, - "w": 41, - "h": 42 - }, - "frame": { - "x": 192, - "y": 88, - "w": 41, - "h": 42 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 26, - "y": 30, - "w": 41, - "h": 42 - }, - "frame": { - "x": 192, - "y": 130, - "w": 41, - "h": 42 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 28, - "y": 28, - "w": 38, - "h": 44 - }, - "frame": { - "x": 154, - "y": 134, - "w": 38, - "h": 44 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 28, - "y": 28, - "w": 38, - "h": 44 - }, - "frame": { - "x": 154, - "y": 134, - "w": 38, - "h": 44 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 28, - "y": 28, - "w": 38, - "h": 44 - }, - "frame": { - "x": 154, - "y": 134, - "w": 38, - "h": 44 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 28, - "y": 28, - "w": 38, - "h": 44 - }, - "frame": { - "x": 154, - "y": 134, - "w": 38, - "h": 44 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 28, - "y": 28, - "w": 38, - "h": 44 - }, - "frame": { - "x": 116, - "y": 137, - "w": 38, - "h": 44 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 28, - "y": 28, - "w": 38, - "h": 44 - }, - "frame": { - "x": 40, - "y": 120, - "w": 38, - "h": 44 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 28, - "y": 28, - "w": 38, - "h": 44 - }, - "frame": { - "x": 40, - "y": 120, - "w": 38, - "h": 44 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 28, - "y": 28, - "w": 38, - "h": 44 - }, - "frame": { - "x": 40, - "y": 120, - "w": 38, - "h": 44 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 28, - "y": 28, - "w": 38, - "h": 44 - }, - "frame": { - "x": 78, - "y": 138, - "w": 38, - "h": 44 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 27, - "y": 28, - "w": 39, - "h": 44 - }, - "frame": { - "x": 39, - "y": 167, - "w": 39, - "h": 44 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 27, - "y": 28, - "w": 39, - "h": 44 - }, - "frame": { - "x": 39, - "y": 167, - "w": 39, - "h": 44 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 27, - "y": 28, - "w": 39, - "h": 44 - }, - "frame": { - "x": 39, - "y": 167, - "w": 39, - "h": 44 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 25, - "y": 31, - "w": 42, - "h": 41 - }, - "frame": { - "x": 78, - "y": 182, - "w": 42, - "h": 41 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 25, - "y": 31, - "w": 42, - "h": 41 - }, - "frame": { - "x": 78, - "y": 182, - "w": 42, - "h": 41 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 25, - "y": 31, - "w": 42, - "h": 41 - }, - "frame": { - "x": 78, - "y": 182, - "w": 42, - "h": 41 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 25, - "y": 31, - "w": 42, - "h": 41 - }, - "frame": { - "x": 78, - "y": 182, - "w": 42, - "h": 41 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 25, - "y": 31, - "w": 42, - "h": 41 - }, - "frame": { - "x": 78, - "y": 182, - "w": 42, - "h": 41 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 25, - "y": 31, - "w": 42, - "h": 41 - }, - "frame": { - "x": 78, - "y": 182, - "w": 42, - "h": 41 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 25, - "y": 31, - "w": 42, - "h": 41 - }, - "frame": { - "x": 78, - "y": 182, - "w": 42, - "h": 41 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 25, - "y": 31, - "w": 42, - "h": 41 - }, - "frame": { - "x": 78, - "y": 182, - "w": 42, - "h": 41 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 27, - "y": 28, - "w": 39, - "h": 44 - }, - "frame": { - "x": 120, - "y": 181, - "w": 39, - "h": 44 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 27, - "y": 28, - "w": 39, - "h": 44 - }, - "frame": { - "x": 120, - "y": 181, - "w": 39, - "h": 44 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 27, - "y": 28, - "w": 39, - "h": 44 - }, - "frame": { - "x": 120, - "y": 181, - "w": 39, - "h": 44 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 27, - "y": 28, - "w": 39, - "h": 44 - }, - "frame": { - "x": 120, - "y": 181, - "w": 39, - "h": 44 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 27, - "y": 28, - "w": 39, - "h": 44 - }, - "frame": { - "x": 120, - "y": 181, - "w": 39, - "h": 44 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 25, - "y": 32, - "w": 42, - "h": 40 - }, - "frame": { - "x": 159, - "y": 178, - "w": 42, - "h": 40 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 25, - "y": 32, - "w": 42, - "h": 40 - }, - "frame": { - "x": 159, - "y": 178, - "w": 42, - "h": 40 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 25, - "y": 32, - "w": 42, - "h": 40 - }, - "frame": { - "x": 159, - "y": 178, - "w": 42, - "h": 40 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 72 - }, - "spriteSourceSize": { - "x": 25, - "y": 32, - "w": 42, - "h": 40 - }, - "frame": { - "x": 159, - "y": 178, - "w": 42, - "h": 40 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:1af9bc6c970e4ca611c23ce1e26ff660:ab013a92210cb1b0ae94301a2c9b4c2a:45bb13be23ae6e2a6654a2a00c450d62$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 27, "h": 34 }, + "duration": 150 + }, + { + "filename": "0002.png", + "frame": { "x": 53, "y": 0, "w": 26, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 26, "h": 32 }, + "sourceSize": { "w": 27, "h": 34 }, + "duration": 150 + }, + { + "filename": "0003.png", + "frame": { "x": 26, "y": 0, "w": 27, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 27, "h": 31 }, + "sourceSize": { "w": 27, "h": 34 }, + "duration": 150 + }, + { + "filename": "0004.png", + "frame": { "x": 53, "y": 0, "w": 26, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 26, "h": 32 }, + "sourceSize": { "w": 27, "h": 34 }, + "duration": 150 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 27, "h": 34 }, + "duration": 150 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 27, "h": 34 }, + "duration": 150 + }, + { + "filename": "0007.png", + "frame": { "x": 26, "y": 31, "w": 26, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 26, "h": 32 }, + "sourceSize": { "w": 27, "h": 34 }, + "duration": 150 + }, + { + "filename": "0008.png", + "frame": { "x": 52, "y": 32, "w": 27, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 27, "h": 30 }, + "sourceSize": { "w": 27, "h": 34 }, + "duration": 150 + }, + { + "filename": "0009.png", + "frame": { "x": 26, "y": 31, "w": 26, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 26, "h": 32 }, + "sourceSize": { "w": 27, "h": 34 }, + "duration": 150 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 27, "h": 34 }, + "duration": 150 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "704.png", + "format": "I8", + "size": { "w": 79, "h": 63 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/704.png b/public/images/pokemon/exp/back/704.png index e08171177fd..a67b79b0ee9 100644 Binary files a/public/images/pokemon/exp/back/704.png and b/public/images/pokemon/exp/back/704.png differ diff --git a/public/images/pokemon/exp/back/705.json b/public/images/pokemon/exp/back/705.json index be407b80180..2fc8cb18e99 100644 --- a/public/images/pokemon/exp/back/705.json +++ b/public/images/pokemon/exp/back/705.json @@ -1,230 +1,596 @@ -{ - "textures": [ - { - "image": "705.png", - "format": "RGBA8888", - "size": { - "w": 118, - "h": 118 - }, - "scale": 1, - "frames": [ - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 59 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 39, - "h": 59 - }, - "frame": { - "x": 0, - "y": 0, - "w": 39, - "h": 59 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 59 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 39, - "h": 59 - }, - "frame": { - "x": 0, - "y": 0, - "w": 39, - "h": 59 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 59 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 59 - }, - "frame": { - "x": 0, - "y": 59, - "w": 37, - "h": 59 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 59 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 59 - }, - "frame": { - "x": 0, - "y": 59, - "w": 37, - "h": 59 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 59 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 59 - }, - "frame": { - "x": 37, - "y": 59, - "w": 35, - "h": 59 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 59 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 59 - }, - "frame": { - "x": 39, - "y": 0, - "w": 35, - "h": 59 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 59 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 59 - }, - "frame": { - "x": 39, - "y": 0, - "w": 35, - "h": 59 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 59 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 41, - "h": 58 - }, - "frame": { - "x": 72, - "y": 59, - "w": 41, - "h": 58 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 59 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 41, - "h": 58 - }, - "frame": { - "x": 72, - "y": 59, - "w": 41, - "h": 58 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 59 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 42, - "h": 57 - }, - "frame": { - "x": 74, - "y": 0, - "w": 42, - "h": 57 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:25dc113e55116f41d58d372b4ed9b10a:95a84e44ff027f7c648e68bbd8ace4bc:6b57e983626c7fc9144ab67f30c66814$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 116, "y": 124, "w": 40, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 40, "h": 59 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 40, "y": 185, "w": 40, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 40, "h": 58 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 77, "y": 298, "w": 40, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 40, "h": 56 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 162, "y": 299, "w": 40, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 40, "h": 56 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 202, "y": 299, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 41, "h": 54 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 117, "y": 300, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 41, "h": 54 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 121, "y": 245, "w": 41, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 41, "h": 55 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 80, "y": 242, "w": 41, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 41, "h": 56 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 0, "y": 244, "w": 40, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 40, "h": 57 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 194, "y": 240, "w": 39, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 39, "h": 59 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 125, "w": 37, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 37, "h": 59 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 156, "y": 184, "w": 38, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 38, "h": 61 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 40, "y": 243, "w": 37, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 37, "h": 62 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 158, "y": 0, "w": 39, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 39, "h": 62 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 156, "y": 62, "w": 39, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 39, "h": 61 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 197, "y": 0, "w": 40, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 40, "h": 60 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 116, "y": 124, "w": 40, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 40, "h": 59 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 40, "y": 185, "w": 40, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 40, "h": 58 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 77, "y": 298, "w": 40, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 40, "h": 56 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 162, "y": 299, "w": 40, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 40, "h": 56 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 202, "y": 299, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 41, "h": 54 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 117, "y": 300, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 41, "h": 54 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 121, "y": 245, "w": 41, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 41, "h": 55 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 80, "y": 242, "w": 41, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 41, "h": 56 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 244, "w": 40, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 40, "h": 57 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 194, "y": 240, "w": 39, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 39, "h": 59 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 125, "w": 37, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 37, "h": 59 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 156, "y": 184, "w": 38, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 38, "h": 61 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 40, "y": 243, "w": 37, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 37, "h": 62 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 158, "y": 0, "w": 39, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 39, "h": 62 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 156, "y": 62, "w": 39, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 39, "h": 61 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 197, "y": 0, "w": 40, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 40, "h": 60 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 116, "y": 124, "w": 40, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 40, "h": 59 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 40, "y": 185, "w": 40, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 40, "h": 58 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 77, "y": 298, "w": 40, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 40, "h": 56 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 162, "y": 299, "w": 40, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 40, "h": 56 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 202, "y": 299, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 41, "h": 54 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 117, "y": 300, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 41, "h": 54 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 121, "y": 245, "w": 41, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 41, "h": 55 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 80, "y": 242, "w": 41, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 41, "h": 56 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 244, "w": 40, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 40, "h": 57 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 194, "y": 240, "w": 39, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 39, "h": 59 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 125, "w": 37, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 37, "h": 59 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 156, "y": 184, "w": 38, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 38, "h": 61 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 40, "y": 243, "w": 37, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 37, "h": 62 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 158, "y": 0, "w": 39, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 39, "h": 62 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 156, "y": 62, "w": 39, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 39, "h": 61 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 197, "y": 0, "w": 40, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 40, "h": 60 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 116, "y": 124, "w": 40, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 40, "h": 59 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 195, "y": 181, "w": 40, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 40, "h": 59 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 118, "y": 0, "w": 40, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 40, "h": 61 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 0, "y": 0, "w": 40, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 40, "h": 62 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 118, "y": 61, "w": 38, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 38, "h": 63 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 62, "w": 38, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 38, "h": 63 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 40, "y": 0, "w": 39, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 39, "h": 63 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 79, "y": 0, "w": 39, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 39, "h": 63 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 38, "y": 63, "w": 39, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 39, "h": 61 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 77, "y": 63, "w": 39, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 39, "h": 61 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 195, "y": 120, "w": 39, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 39, "h": 61 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 156, "y": 123, "w": 39, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 39, "h": 61 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 38, "y": 124, "w": 39, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 39, "h": 61 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 77, "y": 124, "w": 39, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 39, "h": 61 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 197, "y": 60, "w": 40, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 40, "h": 60 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 116, "y": 183, "w": 40, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 40, "h": 59 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 0, "y": 185, "w": 40, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 40, "h": 59 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "705.png", + "format": "I8", + "size": { "w": 243, "h": 355 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/705.png b/public/images/pokemon/exp/back/705.png index a4f62a21004..18c942605d6 100644 Binary files a/public/images/pokemon/exp/back/705.png and b/public/images/pokemon/exp/back/705.png differ diff --git a/public/images/pokemon/exp/back/707.png b/public/images/pokemon/exp/back/707.png deleted file mode 100644 index 6ce681a5651..00000000000 Binary files a/public/images/pokemon/exp/back/707.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/708.json b/public/images/pokemon/exp/back/708.json deleted file mode 100644 index f0b2e21b5c1..00000000000 --- a/public/images/pokemon/exp/back/708.json +++ /dev/null @@ -1,503 +0,0 @@ -{ - "textures": [ - { - "image": "708.png", - "format": "RGBA8888", - "size": { - "w": 135, - "h": 135 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 46, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 46 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 46, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 46 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 46, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 46 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 45, - "h": 46 - }, - "frame": { - "x": 0, - "y": 46, - "w": 45, - "h": 46 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 45, - "h": 46 - }, - "frame": { - "x": 0, - "y": 46, - "w": 45, - "h": 46 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 45, - "h": 46 - }, - "frame": { - "x": 0, - "y": 46, - "w": 45, - "h": 46 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 45, - "h": 43 - }, - "frame": { - "x": 0, - "y": 92, - "w": 45, - "h": 43 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 45, - "h": 43 - }, - "frame": { - "x": 0, - "y": 92, - "w": 45, - "h": 43 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 44, - "h": 46 - }, - "frame": { - "x": 45, - "y": 46, - "w": 44, - "h": 46 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 44, - "h": 46 - }, - "frame": { - "x": 45, - "y": 46, - "w": 44, - "h": 46 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 44, - "h": 46 - }, - "frame": { - "x": 45, - "y": 46, - "w": 44, - "h": 46 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 45, - "h": 45 - }, - "frame": { - "x": 46, - "y": 0, - "w": 45, - "h": 45 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 45, - "h": 45 - }, - "frame": { - "x": 46, - "y": 0, - "w": 45, - "h": 45 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 45, - "h": 45 - }, - "frame": { - "x": 46, - "y": 0, - "w": 45, - "h": 45 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 45, - "h": 45 - }, - "frame": { - "x": 46, - "y": 0, - "w": 45, - "h": 45 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 44, - "h": 41 - }, - "frame": { - "x": 91, - "y": 0, - "w": 44, - "h": 41 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 44, - "h": 41 - }, - "frame": { - "x": 91, - "y": 0, - "w": 44, - "h": 41 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 45, - "h": 45 - }, - "frame": { - "x": 89, - "y": 45, - "w": 45, - "h": 45 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 45, - "h": 45 - }, - "frame": { - "x": 89, - "y": 45, - "w": 45, - "h": 45 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 45, - "h": 45 - }, - "frame": { - "x": 89, - "y": 45, - "w": 45, - "h": 45 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 45, - "h": 44 - }, - "frame": { - "x": 89, - "y": 90, - "w": 45, - "h": 44 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 45, - "h": 44 - }, - "frame": { - "x": 89, - "y": 90, - "w": 45, - "h": 44 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 45, - "h": 44 - }, - "frame": { - "x": 89, - "y": 90, - "w": 45, - "h": 44 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:bcbffc2559c06539de3a8e783aa9b810:1a73d753b783ff36005e333d5e1a213a:796c82c5076b122f2663381836c65843$" - } -} diff --git a/public/images/pokemon/exp/back/708.png b/public/images/pokemon/exp/back/708.png deleted file mode 100644 index a531ec27f9f..00000000000 Binary files a/public/images/pokemon/exp/back/708.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/712.json b/public/images/pokemon/exp/back/712.json index 46b8cdaad44..fe53f52369e 100644 --- a/public/images/pokemon/exp/back/712.json +++ b/public/images/pokemon/exp/back/712.json @@ -1,2729 +1,1433 @@ -{ - "textures": [ - { - "image": "712.png", - "format": "RGBA8888", - "size": { - "w": 208, - "h": 208 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 37, - "h": 44 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 37, - "h": 44 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 37, - "h": 44 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 37, - "h": 44 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 37, - "h": 44 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 37, - "h": 44 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 37, - "h": 44 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 37, - "h": 44 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 37, - "h": 44 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 37, - "h": 44 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 37, - "h": 44 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 37, - "h": 44 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 37, - "h": 44 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 37, - "h": 44 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 37, - "h": 44 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 37, - "h": 44 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 37, - "h": 44 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 37, - "h": 44 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 37, - "h": 44 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 37, - "h": 44 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 37, - "h": 44 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 37, - "h": 44 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 37, - "h": 44 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 37, - "h": 44 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 37, - "h": 44 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 37, - "h": 44 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 37, - "h": 44 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 37, - "h": 44 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 37, - "h": 44 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 37, - "h": 44 - } - }, - { - "filename": "0113.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 37, - "y": 0, - "w": 38, - "h": 41 - } - }, - { - "filename": "0114.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 37, - "y": 0, - "w": 38, - "h": 41 - } - }, - { - "filename": "0115.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 75, - "y": 0, - "w": 38, - "h": 41 - } - }, - { - "filename": "0116.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 75, - "y": 0, - "w": 38, - "h": 41 - } - }, - { - "filename": "0119.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 113, - "y": 0, - "w": 38, - "h": 41 - } - }, - { - "filename": "0120.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 113, - "y": 0, - "w": 38, - "h": 41 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 151, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 151, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 151, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 151, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 151, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 151, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 151, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 151, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 151, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 151, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 37, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 37, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 37, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 37, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 37, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 37, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 37, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 37, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 37, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 37, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 74, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 74, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 74, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 74, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 74, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 74, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 74, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 74, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 74, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 74, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 111, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 111, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 111, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 111, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 111, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 111, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 111, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 111, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 111, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 111, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 148, - "y": 44, - "w": 37, - "h": 43 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 148, - "y": 44, - "w": 37, - "h": 43 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 148, - "y": 44, - "w": 37, - "h": 43 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 148, - "y": 44, - "w": 37, - "h": 43 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 148, - "y": 44, - "w": 37, - "h": 43 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 148, - "y": 44, - "w": 37, - "h": 43 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 148, - "y": 44, - "w": 37, - "h": 43 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 148, - "y": 44, - "w": 37, - "h": 43 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 148, - "y": 44, - "w": 37, - "h": 43 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 148, - "y": 44, - "w": 37, - "h": 43 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 37, - "y": 84, - "w": 37, - "h": 43 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 37, - "y": 84, - "w": 37, - "h": 43 - } - }, - { - "filename": "0129.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 37, - "y": 84, - "w": 37, - "h": 43 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 37, - "h": 42 - }, - "frame": { - "x": 74, - "y": 84, - "w": 37, - "h": 42 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 37, - "h": 42 - }, - "frame": { - "x": 74, - "y": 84, - "w": 37, - "h": 42 - } - }, - { - "filename": "0127.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 37, - "h": 42 - }, - "frame": { - "x": 74, - "y": 84, - "w": 37, - "h": 42 - } - }, - { - "filename": "0128.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 37, - "h": 42 - }, - "frame": { - "x": 74, - "y": 84, - "w": 37, - "h": 42 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 111, - "y": 84, - "w": 37, - "h": 41 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 111, - "y": 84, - "w": 37, - "h": 41 - } - }, - { - "filename": "0125.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 111, - "y": 84, - "w": 37, - "h": 41 - } - }, - { - "filename": "0126.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 111, - "y": 84, - "w": 37, - "h": 41 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 148, - "y": 87, - "w": 37, - "h": 41 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 148, - "y": 87, - "w": 37, - "h": 41 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 111, - "y": 125, - "w": 37, - "h": 41 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 111, - "y": 125, - "w": 37, - "h": 41 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 111, - "y": 125, - "w": 37, - "h": 41 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 111, - "y": 125, - "w": 37, - "h": 41 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 74, - "y": 126, - "w": 37, - "h": 41 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 74, - "y": 126, - "w": 37, - "h": 41 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 74, - "y": 126, - "w": 37, - "h": 41 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 74, - "y": 126, - "w": 37, - "h": 41 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 37, - "y": 127, - "w": 37, - "h": 41 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 37, - "y": 127, - "w": 37, - "h": 41 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 74, - "y": 167, - "w": 37, - "h": 41 - } - }, - { - "filename": "0112.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 74, - "y": 167, - "w": 37, - "h": 41 - } - }, - { - "filename": "0123.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 37, - "h": 40 - }, - "frame": { - "x": 37, - "y": 168, - "w": 37, - "h": 40 - } - }, - { - "filename": "0124.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 37, - "h": 40 - }, - "frame": { - "x": 37, - "y": 168, - "w": 37, - "h": 40 - } - }, - { - "filename": "0117.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 111, - "y": 166, - "w": 37, - "h": 41 - } - }, - { - "filename": "0118.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 111, - "y": 166, - "w": 37, - "h": 41 - } - }, - { - "filename": "0121.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 36, - "h": 41 - }, - "frame": { - "x": 148, - "y": 128, - "w": 36, - "h": 41 - } - }, - { - "filename": "0122.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 36, - "h": 41 - }, - "frame": { - "x": 148, - "y": 128, - "w": 36, - "h": 41 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:600bb71c0995d9554966ee794b89312a:22158bf1d17659480b23ef6d5ed6dbcb:3a1cc69824960d920ca43f8c9376d136$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 106, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0002.png", + "frame": { "x": 106, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0003.png", + "frame": { "x": 106, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0004.png", + "frame": { "x": 141, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0005.png", + "frame": { "x": 141, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0006.png", + "frame": { "x": 105, "y": 43, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0007.png", + "frame": { "x": 105, "y": 43, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0008.png", + "frame": { "x": 140, "y": 43, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 43, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0012.png", + "frame": { "x": 70, "y": 0, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0013.png", + "frame": { "x": 70, "y": 0, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0014.png", + "frame": { "x": 70, "y": 42, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0015.png", + "frame": { "x": 70, "y": 42, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0018.png", + "frame": { "x": 35, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0019.png", + "frame": { "x": 35, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0020.png", + "frame": { "x": 106, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0021.png", + "frame": { "x": 106, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0022.png", + "frame": { "x": 106, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0023.png", + "frame": { "x": 106, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0024.png", + "frame": { "x": 106, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0025.png", + "frame": { "x": 106, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0026.png", + "frame": { "x": 141, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0027.png", + "frame": { "x": 141, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0028.png", + "frame": { "x": 105, "y": 43, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0029.png", + "frame": { "x": 105, "y": 43, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0030.png", + "frame": { "x": 140, "y": 43, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0031.png", + "frame": { "x": 140, "y": 43, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0033.png", + "frame": { "x": 0, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0034.png", + "frame": { "x": 70, "y": 0, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0035.png", + "frame": { "x": 70, "y": 0, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0036.png", + "frame": { "x": 70, "y": 42, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0037.png", + "frame": { "x": 70, "y": 42, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0038.png", + "frame": { "x": 0, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0039.png", + "frame": { "x": 0, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0040.png", + "frame": { "x": 35, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0041.png", + "frame": { "x": 35, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0042.png", + "frame": { "x": 106, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0043.png", + "frame": { "x": 106, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0044.png", + "frame": { "x": 106, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0045.png", + "frame": { "x": 106, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0046.png", + "frame": { "x": 106, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0047.png", + "frame": { "x": 106, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0048.png", + "frame": { "x": 141, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0049.png", + "frame": { "x": 141, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0050.png", + "frame": { "x": 105, "y": 43, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0051.png", + "frame": { "x": 105, "y": 43, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0052.png", + "frame": { "x": 140, "y": 43, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0053.png", + "frame": { "x": 140, "y": 43, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0056.png", + "frame": { "x": 70, "y": 0, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0057.png", + "frame": { "x": 70, "y": 0, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0058.png", + "frame": { "x": 70, "y": 42, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0059.png", + "frame": { "x": 70, "y": 42, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0060.png", + "frame": { "x": 0, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 0, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 35, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0063.png", + "frame": { "x": 35, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0064.png", + "frame": { "x": 106, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0065.png", + "frame": { "x": 106, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0066.png", + "frame": { "x": 106, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0067.png", + "frame": { "x": 106, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0068.png", + "frame": { "x": 106, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0069.png", + "frame": { "x": 106, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0070.png", + "frame": { "x": 141, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0071.png", + "frame": { "x": 141, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0072.png", + "frame": { "x": 105, "y": 43, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0073.png", + "frame": { "x": 105, "y": 43, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0074.png", + "frame": { "x": 140, "y": 43, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0075.png", + "frame": { "x": 140, "y": 43, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0076.png", + "frame": { "x": 0, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0077.png", + "frame": { "x": 0, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0078.png", + "frame": { "x": 70, "y": 0, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0079.png", + "frame": { "x": 70, "y": 0, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0080.png", + "frame": { "x": 70, "y": 42, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0081.png", + "frame": { "x": 70, "y": 42, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0082.png", + "frame": { "x": 0, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0083.png", + "frame": { "x": 0, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0084.png", + "frame": { "x": 35, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0085.png", + "frame": { "x": 35, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0086.png", + "frame": { "x": 106, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0087.png", + "frame": { "x": 106, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0088.png", + "frame": { "x": 106, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0089.png", + "frame": { "x": 106, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0090.png", + "frame": { "x": 106, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0091.png", + "frame": { "x": 106, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0092.png", + "frame": { "x": 141, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0093.png", + "frame": { "x": 141, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0094.png", + "frame": { "x": 105, "y": 43, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0095.png", + "frame": { "x": 105, "y": 43, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0096.png", + "frame": { "x": 140, "y": 43, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0097.png", + "frame": { "x": 140, "y": 43, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0098.png", + "frame": { "x": 0, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0099.png", + "frame": { "x": 0, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0100.png", + "frame": { "x": 70, "y": 0, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0101.png", + "frame": { "x": 70, "y": 0, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0102.png", + "frame": { "x": 70, "y": 42, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0103.png", + "frame": { "x": 70, "y": 42, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0104.png", + "frame": { "x": 0, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0105.png", + "frame": { "x": 0, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0106.png", + "frame": { "x": 35, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0107.png", + "frame": { "x": 35, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0108.png", + "frame": { "x": 106, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0109.png", + "frame": { "x": 106, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0110.png", + "frame": { "x": 106, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0111.png", + "frame": { "x": 106, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0112.png", + "frame": { "x": 106, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0113.png", + "frame": { "x": 106, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0114.png", + "frame": { "x": 35, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0115.png", + "frame": { "x": 35, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0116.png", + "frame": { "x": 72, "y": 125, "w": 35, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 35, "h": 41 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0117.png", + "frame": { "x": 72, "y": 125, "w": 35, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 35, "h": 41 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0118.png", + "frame": { "x": 107, "y": 125, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0119.png", + "frame": { "x": 107, "y": 125, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0120.png", + "frame": { "x": 107, "y": 125, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0121.png", + "frame": { "x": 107, "y": 125, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0122.png", + "frame": { "x": 107, "y": 125, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0123.png", + "frame": { "x": 107, "y": 125, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0124.png", + "frame": { "x": 142, "y": 125, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0125.png", + "frame": { "x": 142, "y": 125, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0126.png", + "frame": { "x": 0, "y": 126, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0127.png", + "frame": { "x": 0, "y": 126, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0128.png", + "frame": { "x": 70, "y": 85, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0129.png", + "frame": { "x": 70, "y": 85, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0130.png", + "frame": { "x": 106, "y": 85, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0131.png", + "frame": { "x": 106, "y": 85, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0132.png", + "frame": { "x": 70, "y": 85, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0133.png", + "frame": { "x": 70, "y": 85, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0134.png", + "frame": { "x": 0, "y": 126, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0135.png", + "frame": { "x": 0, "y": 126, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0136.png", + "frame": { "x": 35, "y": 165, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0137.png", + "frame": { "x": 35, "y": 165, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0138.png", + "frame": { "x": 142, "y": 85, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0139.png", + "frame": { "x": 142, "y": 85, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0140.png", + "frame": { "x": 0, "y": 86, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0141.png", + "frame": { "x": 0, "y": 86, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0142.png", + "frame": { "x": 107, "y": 165, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0143.png", + "frame": { "x": 107, "y": 165, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0144.png", + "frame": { "x": 36, "y": 125, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0145.png", + "frame": { "x": 36, "y": 125, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0146.png", + "frame": { "x": 142, "y": 165, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0147.png", + "frame": { "x": 142, "y": 165, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0148.png", + "frame": { "x": 0, "y": 166, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0149.png", + "frame": { "x": 0, "y": 166, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0150.png", + "frame": { "x": 107, "y": 125, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0151.png", + "frame": { "x": 107, "y": 125, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0152.png", + "frame": { "x": 107, "y": 125, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0153.png", + "frame": { "x": 107, "y": 125, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0154.png", + "frame": { "x": 107, "y": 125, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0155.png", + "frame": { "x": 72, "y": 125, "w": 35, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 35, "h": 41 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0156.png", + "frame": { "x": 72, "y": 125, "w": 35, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 35, "h": 41 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0157.png", + "frame": { "x": 35, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0158.png", + "frame": { "x": 35, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "712.png", + "format": "I8", + "size": { "w": 178, "h": 205 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/712.png b/public/images/pokemon/exp/back/712.png index 81f77412357..a5b57fc9f1b 100644 Binary files a/public/images/pokemon/exp/back/712.png and b/public/images/pokemon/exp/back/712.png differ diff --git a/public/images/pokemon/exp/back/713.json b/public/images/pokemon/exp/back/713.json index c2e09d4783e..0ff72eef867 100644 --- a/public/images/pokemon/exp/back/713.json +++ b/public/images/pokemon/exp/back/713.json @@ -1,188 +1,1100 @@ -{ - "textures": [ - { - "image": "713.png", - "format": "RGBA8888", - "size": { - "w": 199, - "h": 199 - }, - "scale": 1, - "frames": [ - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 87, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 87, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 87, - "h": 69 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 87, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 87, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 87, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 87, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 87, - "h": 69 - }, - "frame": { - "x": 87, - "y": 0, - "w": 87, - "h": 69 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 87, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 87, - "h": 69 - }, - "frame": { - "x": 87, - "y": 0, - "w": 87, - "h": 69 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 87, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 87, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 87, - "h": 69 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 87, - "h": 66 - }, - "frame": { - "x": 87, - "y": 69, - "w": 87, - "h": 66 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 87, - "h": 66 - }, - "frame": { - "x": 87, - "y": 69, - "w": 87, - "h": 66 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 87, - "h": 64 - }, - "frame": { - "x": 87, - "y": 135, - "w": 87, - "h": 64 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:6f396042cb759179580f2aeb1af94e22:59471aca6db39209b1e31d5894938bcb:625f70bcfe9c7f2437cb9cad6d2b863c$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 87, "y": 126, "w": 87, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 62 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 127, "w": 87, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 62 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 261, "y": 127, "w": 87, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 87, "h": 61 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 174, "y": 128, "w": 87, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 87, "h": 61 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 87, "y": 188, "w": 87, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 87, "h": 60 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 87, "y": 188, "w": 87, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 87, "h": 60 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 87, "y": 188, "w": 87, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 87, "h": 60 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 174, "y": 128, "w": 87, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 87, "h": 61 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 261, "y": 127, "w": 87, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 87, "h": 61 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 127, "w": 87, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 62 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 87, "y": 126, "w": 87, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 62 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 270, "y": 64, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 270, "y": 0, "w": 87, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 64 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 63, "w": 87, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 64 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 183, "y": 0, "w": 87, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 65 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 183, "y": 0, "w": 87, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 65 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 183, "y": 0, "w": 87, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 65 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 183, "y": 0, "w": 87, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 65 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 0, "y": 63, "w": 87, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 64 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 270, "y": 0, "w": 87, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 64 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 270, "y": 64, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 87, "y": 126, "w": 87, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 62 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 127, "w": 87, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 62 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 261, "y": 127, "w": 87, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 87, "h": 61 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 174, "y": 128, "w": 87, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 87, "h": 61 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 87, "y": 188, "w": 87, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 87, "h": 60 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 87, "y": 188, "w": 87, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 87, "h": 60 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 87, "y": 188, "w": 87, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 87, "h": 60 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 174, "y": 128, "w": 87, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 87, "h": 61 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 261, "y": 127, "w": 87, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 87, "h": 61 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 0, "y": 127, "w": 87, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 62 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 87, "y": 126, "w": 87, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 62 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 270, "y": 64, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 270, "y": 0, "w": 87, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 64 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 0, "y": 63, "w": 87, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 64 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 183, "y": 0, "w": 87, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 65 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 183, "y": 0, "w": 87, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 65 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 183, "y": 0, "w": 87, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 65 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 183, "y": 0, "w": 87, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 65 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 0, "y": 63, "w": 87, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 64 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 270, "y": 0, "w": 87, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 64 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 270, "y": 64, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 87, "y": 126, "w": 87, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 62 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 127, "w": 87, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 62 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 261, "y": 127, "w": 87, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 87, "h": 61 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 174, "y": 128, "w": 87, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 87, "h": 61 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 87, "y": 188, "w": 87, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 87, "h": 60 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 87, "y": 188, "w": 87, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 87, "h": 60 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 87, "y": 188, "w": 87, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 87, "h": 60 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 174, "y": 128, "w": 87, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 87, "h": 61 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 261, "y": 127, "w": 87, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 87, "h": 61 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 0, "y": 127, "w": 87, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 62 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 87, "y": 126, "w": 87, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 62 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 270, "y": 64, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 270, "y": 0, "w": 87, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 64 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 0, "y": 63, "w": 87, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 64 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 183, "y": 0, "w": 87, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 65 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 183, "y": 0, "w": 87, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 65 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 183, "y": 0, "w": 87, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 65 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 183, "y": 0, "w": 87, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 65 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 0, "y": 63, "w": 87, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 64 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 270, "y": 0, "w": 87, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 64 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 270, "y": 64, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 87, "y": 126, "w": 87, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 62 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 0, "y": 127, "w": 87, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 62 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 261, "y": 127, "w": 87, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 87, "h": 61 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 174, "y": 128, "w": 87, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 87, "h": 61 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 87, "y": 188, "w": 87, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 87, "h": 60 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 87, "y": 188, "w": 87, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 87, "h": 60 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 87, "y": 188, "w": 87, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 87, "h": 60 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 174, "y": 128, "w": 87, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 87, "h": 61 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 261, "y": 127, "w": 87, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 87, "h": 61 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 0, "y": 127, "w": 87, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 62 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 87, "y": 126, "w": 87, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 62 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 270, "y": 64, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 270, "y": 0, "w": 87, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 64 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 0, "y": 63, "w": 87, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 64 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 183, "y": 0, "w": 87, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 65 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 183, "y": 0, "w": 87, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 65 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 183, "y": 0, "w": 87, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 65 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 183, "y": 0, "w": 87, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 65 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 0, "y": 63, "w": 87, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 64 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 270, "y": 0, "w": 87, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 64 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 270, "y": 64, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 270, "y": 64, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 174, "y": 65, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 174, "y": 65, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 92, "y": 0, "w": 91, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 91, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 92, "y": 0, "w": 91, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 91, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 0, "y": 0, "w": 92, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 92, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 0, "y": 0, "w": 92, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 92, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 0, "y": 0, "w": 92, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 92, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 0, "y": 0, "w": 92, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 92, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 0, "y": 0, "w": 92, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 92, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0107.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0108.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0109.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0110.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0111.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0112.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0113.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0114.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0115.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0116.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0117.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0118.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0119.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0120.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0121.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "713.png", + "format": "I8", + "size": { "w": 357, "h": 248 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/713.png b/public/images/pokemon/exp/back/713.png index 6692bc5c65a..d6782ee4357 100644 Binary files a/public/images/pokemon/exp/back/713.png and b/public/images/pokemon/exp/back/713.png differ diff --git a/public/images/pokemon/exp/back/714.json b/public/images/pokemon/exp/back/714.json deleted file mode 100644 index ecdf5b1b813..00000000000 --- a/public/images/pokemon/exp/back/714.json +++ /dev/null @@ -1,230 +0,0 @@ -{ - "textures": [ - { - "image": "714.png", - "format": "RGBA8888", - "size": { - "w": 147, - "h": 147 - }, - "scale": 1, - "frames": [ - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 69 - }, - "spriteSourceSize": { - "x": 13, - "y": 0, - "w": 34, - "h": 57 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 57 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 60, - "h": 58 - }, - "frame": { - "x": 34, - "y": 0, - "w": 60, - "h": 58 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 69 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 46, - "h": 58 - }, - "frame": { - "x": 94, - "y": 0, - "w": 46, - "h": 58 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 69 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 46, - "h": 58 - }, - "frame": { - "x": 94, - "y": 0, - "w": 46, - "h": 58 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 69 - }, - "spriteSourceSize": { - "x": 1, - "y": 10, - "w": 58, - "h": 58 - }, - "frame": { - "x": 0, - "y": 58, - "w": 58, - "h": 58 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 69 - }, - "spriteSourceSize": { - "x": 1, - "y": 10, - "w": 58, - "h": 58 - }, - "frame": { - "x": 0, - "y": 58, - "w": 58, - "h": 58 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 69 - }, - "spriteSourceSize": { - "x": 3, - "y": 7, - "w": 54, - "h": 58 - }, - "frame": { - "x": 58, - "y": 58, - "w": 54, - "h": 58 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 69 - }, - "spriteSourceSize": { - "x": 3, - "y": 7, - "w": 54, - "h": 58 - }, - "frame": { - "x": 58, - "y": 58, - "w": 54, - "h": 58 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 69 - }, - "spriteSourceSize": { - "x": 12, - "y": 1, - "w": 35, - "h": 58 - }, - "frame": { - "x": 112, - "y": 58, - "w": 35, - "h": 58 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 69 - }, - "spriteSourceSize": { - "x": 12, - "y": 1, - "w": 35, - "h": 58 - }, - "frame": { - "x": 112, - "y": 58, - "w": 35, - "h": 58 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:5c3a62d7014eae3eb4c5e67ef6a405f3:1456f6425f3a65e77dc4017298499d80:1a07d46e710b0568ec824f54fbc4fe6a$" - } -} diff --git a/public/images/pokemon/exp/back/714.png b/public/images/pokemon/exp/back/714.png deleted file mode 100644 index 0d81f19fcd4..00000000000 Binary files a/public/images/pokemon/exp/back/714.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/718-10.json b/public/images/pokemon/exp/back/718-10.json deleted file mode 100644 index 03fc4c60ed9..00000000000 --- a/public/images/pokemon/exp/back/718-10.json +++ /dev/null @@ -1,188 +0,0 @@ -{ - "textures": [ - { - "image": "718-10.png", - "format": "RGBA8888", - "size": { - "w": 197, - "h": 197 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 66, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 66, - "h": 67 - }, - "frame": { - "x": 0, - "y": 0, - "w": 66, - "h": 67 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 66, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 66, - "h": 67 - }, - "frame": { - "x": 0, - "y": 0, - "w": 66, - "h": 67 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 66, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 66, - "h": 67 - }, - "frame": { - "x": 0, - "y": 67, - "w": 66, - "h": 67 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 66, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 66, - "h": 67 - }, - "frame": { - "x": 0, - "y": 67, - "w": 66, - "h": 67 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 66, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 66, - "h": 67 - }, - "frame": { - "x": 66, - "y": 0, - "w": 66, - "h": 67 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 66, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 65, - "h": 67 - }, - "frame": { - "x": 132, - "y": 0, - "w": 65, - "h": 67 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 66, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 65, - "h": 67 - }, - "frame": { - "x": 132, - "y": 0, - "w": 65, - "h": 67 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 66, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 66, - "h": 65 - }, - "frame": { - "x": 66, - "y": 67, - "w": 66, - "h": 65 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:bd85fbac35b53b12b06187b29756853b:2478226f2126bdc982b17f3a3acb49c4:82195cf2a6db620c5643b8162d6e8c5c$" - } -} diff --git a/public/images/pokemon/exp/back/718-10.png b/public/images/pokemon/exp/back/718-10.png deleted file mode 100644 index 709dc3bea8a..00000000000 Binary files a/public/images/pokemon/exp/back/718-10.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/718.json b/public/images/pokemon/exp/back/718.json deleted file mode 100644 index 698179b1453..00000000000 --- a/public/images/pokemon/exp/back/718.json +++ /dev/null @@ -1,230 +0,0 @@ -{ - "textures": [ - { - "image": "718.png", - "format": "RGBA8888", - "size": { - "w": 216, - "h": 216 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 74, - "h": 89 - }, - "frame": { - "x": 0, - "y": 0, - "w": 74, - "h": 89 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 74, - "h": 89 - }, - "frame": { - "x": 0, - "y": 0, - "w": 74, - "h": 89 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 73, - "h": 89 - }, - "frame": { - "x": 0, - "y": 89, - "w": 73, - "h": 89 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 89 - }, - "frame": { - "x": 73, - "y": 89, - "w": 73, - "h": 89 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 89 - }, - "frame": { - "x": 73, - "y": 89, - "w": 73, - "h": 89 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 72, - "h": 89 - }, - "frame": { - "x": 74, - "y": 0, - "w": 72, - "h": 89 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 72, - "h": 89 - }, - "frame": { - "x": 74, - "y": 0, - "w": 72, - "h": 89 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 70, - "h": 88 - }, - "frame": { - "x": 146, - "y": 0, - "w": 70, - "h": 88 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 70, - "h": 88 - }, - "frame": { - "x": 146, - "y": 0, - "w": 70, - "h": 88 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 69, - "h": 87 - }, - "frame": { - "x": 146, - "y": 88, - "w": 69, - "h": 87 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:82c29d609c52a3a1aa4b9af042ef9ce8:8d05611f8189d493fef8906e0f11f3de:7b4a06b06cbac24b3f39727b0238661b$" - } -} diff --git a/public/images/pokemon/exp/back/718.png b/public/images/pokemon/exp/back/718.png deleted file mode 100644 index f2f380e339a..00000000000 Binary files a/public/images/pokemon/exp/back/718.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/719.json b/public/images/pokemon/exp/back/719.json deleted file mode 100644 index 4cd0e34f113..00000000000 --- a/public/images/pokemon/exp/back/719.json +++ /dev/null @@ -1,272 +0,0 @@ -{ - "textures": [ - { - "image": "719.png", - "format": "RGBA8888", - "size": { - "w": 158, - "h": 158 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 14, - "w": 39, - "h": 66 - }, - "frame": { - "x": 0, - "y": 0, - "w": 39, - "h": 66 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 39, - "h": 67 - }, - "frame": { - "x": 39, - "y": 0, - "w": 39, - "h": 67 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 39, - "h": 67 - }, - "frame": { - "x": 39, - "y": 0, - "w": 39, - "h": 67 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 40, - "h": 67 - }, - "frame": { - "x": 78, - "y": 0, - "w": 40, - "h": 67 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 40, - "h": 67 - }, - "frame": { - "x": 78, - "y": 0, - "w": 40, - "h": 67 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 40, - "h": 67 - }, - "frame": { - "x": 118, - "y": 0, - "w": 40, - "h": 67 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 40, - "h": 67 - }, - "frame": { - "x": 118, - "y": 0, - "w": 40, - "h": 67 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 80 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 41, - "h": 67 - }, - "frame": { - "x": 0, - "y": 67, - "w": 41, - "h": 67 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 68 - }, - "frame": { - "x": 41, - "y": 67, - "w": 41, - "h": 68 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 68 - }, - "frame": { - "x": 41, - "y": 67, - "w": 41, - "h": 68 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 80 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 68 - }, - "frame": { - "x": 82, - "y": 67, - "w": 42, - "h": 68 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 80 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 68 - }, - "frame": { - "x": 82, - "y": 67, - "w": 42, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:0db095e3b451ffc873bea6b5e23ba65d:f7ad8a345854a119edb545cc03dcde8e:17a705bb924916761be2495822a53735$" - } -} diff --git a/public/images/pokemon/exp/back/719.png b/public/images/pokemon/exp/back/719.png deleted file mode 100644 index cb0c84041f9..00000000000 Binary files a/public/images/pokemon/exp/back/719.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/987.png b/public/images/pokemon/exp/back/987.png index 1da8db869dc..4956b630d3e 100644 Binary files a/public/images/pokemon/exp/back/987.png and b/public/images/pokemon/exp/back/987.png differ diff --git a/public/images/pokemon/exp/shiny/708.json b/public/images/pokemon/exp/back/female/6215.json similarity index 62% rename from public/images/pokemon/exp/shiny/708.json rename to public/images/pokemon/exp/back/female/6215.json index 188cebad63c..4f58734d55e 100644 --- a/public/images/pokemon/exp/shiny/708.json +++ b/public/images/pokemon/exp/back/female/6215.json @@ -1,432 +1,33 @@ { "textures": [ { - "image": "708.png", + "image": "6215.png", "format": "RGBA8888", "size": { - "w": 206, - "h": 206 + "w": 155, + "h": 155 }, "scale": 1, "frames": [ - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 51, - "h": 43 - }, - "frame": { - "x": 0, - "y": 0, - "w": 51, - "h": 43 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 51, - "h": 43 - }, - "frame": { - "x": 0, - "y": 0, - "w": 51, - "h": 43 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 51, - "h": 43 - }, - "frame": { - "x": 0, - "y": 0, - "w": 51, - "h": 43 - } - }, { "filename": "0007.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 58, - "h": 47 + "w": 54, + "h": 50 }, "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 51, - "h": 43 - }, - "frame": { "x": 0, - "y": 43, - "w": 51, - "h": 43 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 51, - "h": 43 - }, - "frame": { - "x": 0, - "y": 43, - "w": 51, - "h": 43 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 51, - "h": 43 - }, - "frame": { - "x": 0, - "y": 43, - "w": 51, - "h": 43 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, "y": 1, - "w": 51, - "h": 43 + "w": 54, + "h": 49 }, "frame": { "x": 0, - "y": 86, - "w": 51, - "h": 43 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 51, - "h": 43 - }, - "frame": { - "x": 0, - "y": 86, - "w": 51, - "h": 43 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 51, - "h": 43 - }, - "frame": { - "x": 0, - "y": 86, - "w": 51, - "h": 43 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 51, - "h": 42 - }, - "frame": { - "x": 0, - "y": 129, - "w": 51, - "h": 42 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 51, - "h": 42 - }, - "frame": { - "x": 0, - "y": 129, - "w": 51, - "h": 42 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 51, - "h": 42 - }, - "frame": { - "x": 0, - "y": 129, - "w": 51, - "h": 42 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 51, - "h": 42 - }, - "frame": { - "x": 0, - "y": 129, - "w": 51, - "h": 42 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 51, - "h": 42 - }, - "frame": { - "x": 0, - "y": 129, - "w": 51, - "h": 42 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 51, - "h": 42 - }, - "frame": { - "x": 51, "y": 0, - "w": 51, - "h": 42 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 51, - "h": 42 - }, - "frame": { - "x": 51, - "y": 0, - "w": 51, - "h": 42 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 51, - "h": 42 - }, - "frame": { - "x": 51, - "y": 0, - "w": 51, - "h": 42 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 51, - "h": 42 - }, - "frame": { - "x": 51, - "y": 42, - "w": 51, - "h": 42 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 51, - "h": 42 - }, - "frame": { - "x": 51, - "y": 42, - "w": 51, - "h": 42 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 51, - "h": 42 - }, - "frame": { - "x": 51, - "y": 42, - "w": 51, - "h": 42 + "w": 54, + "h": 49 } }, { @@ -434,20 +35,41 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 58, - "h": 47 + "w": 54, + "h": 50 }, "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 51, - "h": 42 + "x": 0, + "y": 1, + "w": 54, + "h": 49 }, "frame": { - "x": 51, - "y": 84, - "w": 51, - "h": 42 + "x": 0, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 54, + "h": 49 + }, + "frame": { + "x": 0, + "y": 0, + "w": 54, + "h": 49 } }, { @@ -455,20 +77,41 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 58, - "h": 47 + "w": 54, + "h": 50 }, "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 51, - "h": 42 + "x": 0, + "y": 1, + "w": 54, + "h": 49 }, "frame": { - "x": 51, - "y": 84, - "w": 51, - "h": 42 + "x": 0, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 54, + "h": 49 + }, + "frame": { + "x": 0, + "y": 0, + "w": 54, + "h": 49 } }, { @@ -476,461 +119,41 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 51, - "h": 42 - }, - "frame": { - "x": 51, - "y": 84, - "w": 51, - "h": 42 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 51, - "h": 42 - }, - "frame": { - "x": 51, - "y": 126, - "w": 51, - "h": 42 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 51, - "h": 42 - }, - "frame": { - "x": 51, - "y": 126, - "w": 51, - "h": 42 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 51, - "h": 42 - }, - "frame": { - "x": 51, - "y": 126, - "w": 51, - "h": 42 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 51, - "h": 42 - }, - "frame": { - "x": 102, - "y": 0, - "w": 51, - "h": 42 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 51, - "h": 42 - }, - "frame": { - "x": 102, - "y": 0, - "w": 51, - "h": 42 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 51, - "h": 42 - }, - "frame": { - "x": 102, - "y": 0, - "w": 51, - "h": 42 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 51, - "h": 42 - }, - "frame": { - "x": 102, - "y": 42, - "w": 51, - "h": 42 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 51, - "h": 42 - }, - "frame": { - "x": 102, - "y": 42, - "w": 51, - "h": 42 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 51, - "h": 42 - }, - "frame": { - "x": 102, - "y": 42, - "w": 51, - "h": 42 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 51, - "h": 41 - }, - "frame": { - "x": 102, - "y": 84, - "w": 51, - "h": 41 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 51, - "h": 41 - }, - "frame": { - "x": 102, - "y": 84, - "w": 51, - "h": 41 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 51, - "h": 41 - }, - "frame": { - "x": 102, - "y": 84, - "w": 51, - "h": 41 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 51, - "h": 41 - }, - "frame": { - "x": 102, - "y": 125, - "w": 51, - "h": 41 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 51, - "h": 41 - }, - "frame": { - "x": 102, - "y": 125, - "w": 51, - "h": 41 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 51, - "h": 41 - }, - "frame": { - "x": 102, - "y": 125, - "w": 51, - "h": 41 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 50, - "h": 40 - }, - "frame": { - "x": 102, - "y": 166, - "w": 50, - "h": 40 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 + "w": 54, + "h": 50 }, "spriteSourceSize": { "x": 0, - "y": 6, - "w": 50, - "h": 40 - }, - "frame": { - "x": 152, - "y": 166, - "w": 50, - "h": 40 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 6, "y": 1, - "w": 51, - "h": 41 + "w": 54, + "h": 49 }, "frame": { - "x": 153, + "x": 0, "y": 0, - "w": 51, - "h": 41 + "w": 54, + "h": 49 } }, { - "filename": "0042.png", + "filename": "0043.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 58, - "h": 47 + "w": 54, + "h": 50 }, "spriteSourceSize": { - "x": 6, + "x": 0, "y": 1, - "w": 51, - "h": 41 + "w": 54, + "h": 49 }, "frame": { - "x": 153, + "x": 0, "y": 0, - "w": 51, - "h": 41 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 51, - "h": 41 - }, - "frame": { - "x": 153, - "y": 41, - "w": 51, - "h": 41 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 51, - "h": 41 - }, - "frame": { - "x": 153, - "y": 41, - "w": 51, - "h": 41 + "w": 54, + "h": 49 } }, { @@ -938,41 +161,146 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 58, - "h": 47 + "w": 54, + "h": 50 }, "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 51, - "h": 41 + "x": 0, + "y": 1, + "w": 54, + "h": 49 }, "frame": { - "x": 153, - "y": 82, - "w": 51, - "h": 41 + "x": 0, + "y": 0, + "w": 54, + "h": 49 } }, { - "filename": "0048.png", + "filename": "0005.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 58, - "h": 47 + "w": 54, + "h": 50 }, "spriteSourceSize": { - "x": 2, + "x": 0, "y": 3, - "w": 51, - "h": 41 + "w": 54, + "h": 47 }, "frame": { - "x": 153, - "y": 82, - "w": 51, - "h": 41 + "x": 54, + "y": 0, + "w": 54, + "h": 47 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 54, + "h": 47 + }, + "frame": { + "x": 54, + "y": 0, + "w": 54, + "h": 47 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 54, + "h": 47 + }, + "frame": { + "x": 54, + "y": 0, + "w": 54, + "h": 47 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 54, + "h": 47 + }, + "frame": { + "x": 54, + "y": 0, + "w": 54, + "h": 47 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 54, + "h": 47 + }, + "frame": { + "x": 54, + "y": 0, + "w": 54, + "h": 47 + } + }, + { + "filename": "0030.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 54, + "h": 47 + }, + "frame": { + "x": 54, + "y": 0, + "w": 54, + "h": 47 } }, { @@ -980,20 +308,167 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 58, + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 54, "h": 47 }, + "frame": { + "x": 54, + "y": 0, + "w": 54, + "h": 47 + } + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 54, + "h": 47 + }, + "frame": { + "x": 54, + "y": 0, + "w": 54, + "h": 47 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, "spriteSourceSize": { "x": 0, "y": 4, - "w": 51, - "h": 41 + "w": 54, + "h": 46 }, "frame": { - "x": 153, - "y": 123, - "w": 51, - "h": 41 + "x": 54, + "y": 47, + "w": 54, + "h": 46 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 54, + "h": 46 + }, + "frame": { + "x": 54, + "y": 47, + "w": 54, + "h": 46 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 54, + "h": 46 + }, + "frame": { + "x": 54, + "y": 47, + "w": 54, + "h": 46 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 54, + "h": 46 + }, + "frame": { + "x": 54, + "y": 47, + "w": 54, + "h": 46 + } + }, + { + "filename": "0027.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 54, + "h": 46 + }, + "frame": { + "x": 54, + "y": 47, + "w": 54, + "h": 46 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 54, + "h": 46 + }, + "frame": { + "x": 54, + "y": 47, + "w": 54, + "h": 46 } }, { @@ -1001,20 +476,545 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 58, - "h": 47 + "w": 54, + "h": 50 }, "spriteSourceSize": { "x": 0, "y": 4, - "w": 51, - "h": 41 + "w": 54, + "h": 46 }, "frame": { - "x": 153, - "y": 123, + "x": 54, + "y": 47, + "w": 54, + "h": 46 + } + }, + { + "filename": "0048.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 54, + "h": 46 + }, + "frame": { + "x": 54, + "y": 47, + "w": 54, + "h": 46 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 54, + "h": 44 + }, + "frame": { + "x": 0, + "y": 49, + "w": 54, + "h": 44 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 54, + "h": 44 + }, + "frame": { + "x": 0, + "y": 49, + "w": 54, + "h": 44 + } + }, + { + "filename": "0025.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 54, + "h": 44 + }, + "frame": { + "x": 0, + "y": 49, + "w": 54, + "h": 44 + } + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 54, + "h": 44 + }, + "frame": { + "x": 0, + "y": 49, + "w": 54, + "h": 44 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 0, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 0, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 0, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 0, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 0, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 0, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 0, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 0, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 52, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 52, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 52, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 52, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0036.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 52, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0037.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 52, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0040.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 52, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 52, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, "w": 51, - "h": 41 + "h": 50 + }, + "frame": { + "x": 104, + "y": 93, + "w": 51, + "h": 50 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 51, + "h": 50 + }, + "frame": { + "x": 104, + "y": 93, + "w": 51, + "h": 50 + } + }, + { + "filename": "0038.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 51, + "h": 50 + }, + "frame": { + "x": 104, + "y": 93, + "w": 51, + "h": 50 + } + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 51, + "h": 50 + }, + "frame": { + "x": 104, + "y": 93, + "w": 51, + "h": 50 } } ] @@ -1023,6 +1023,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:02aeb20d3dedab69cd63430f383bb8a9:140bc3262838e3b187b88498bce06706:796c82c5076b122f2663381836c65843$" + "smartupdate": "$TexturePacker:SmartUpdate:29aeff74e785c73ae2261d8bb0459111:5709d3d72351f1424de632ebf8347c01:736cd88647e79ba7896fc74f9406c2fe$" } } diff --git a/public/images/pokemon/exp/back/female/6215.png b/public/images/pokemon/exp/back/female/6215.png new file mode 100644 index 00000000000..7dbdab7eb85 Binary files /dev/null and b/public/images/pokemon/exp/back/female/6215.png differ diff --git a/public/images/pokemon/exp/back/female/668.json b/public/images/pokemon/exp/back/female/668.json new file mode 100644 index 00000000000..4c493f84959 --- /dev/null +++ b/public/images/pokemon/exp/back/female/668.json @@ -0,0 +1,821 @@ +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 475, "y": 144, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 76, "y": 214, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 76, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 152, "y": 283, "w": 75, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 75, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 73, "y": 284, "w": 74, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 5, "w": 74, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 460, "y": 350, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 6, "w": 74, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 227, "y": 350, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 6, "w": 74, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 385, "y": 284, "w": 75, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 6, "w": 75, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 472, "y": 283, "w": 77, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 77, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 233, "y": 282, "w": 77, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 5, "w": 77, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 396, "y": 215, "w": 76, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 76, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 214, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 76, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 399, "y": 144, "w": 76, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 76, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 431, "y": 73, "w": 77, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 77, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 242, "y": 142, "w": 77, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 77, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 156, "y": 213, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 475, "y": 144, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 76, "y": 214, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 76, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 152, "y": 283, "w": 75, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 75, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 73, "y": 284, "w": 74, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 5, "w": 74, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 460, "y": 350, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 6, "w": 74, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 227, "y": 350, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 6, "w": 74, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 385, "y": 284, "w": 75, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 6, "w": 75, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 472, "y": 283, "w": 77, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 77, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 233, "y": 282, "w": 77, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 5, "w": 77, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 396, "y": 215, "w": 76, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 76, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 214, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 76, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 399, "y": 144, "w": 76, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 76, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 431, "y": 73, "w": 77, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 77, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 242, "y": 142, "w": 77, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 77, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 156, "y": 213, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 475, "y": 144, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 76, "y": 214, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 76, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 152, "y": 283, "w": 75, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 75, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 73, "y": 284, "w": 74, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 5, "w": 74, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 460, "y": 350, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 6, "w": 74, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 227, "y": 350, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 6, "w": 74, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 385, "y": 284, "w": 75, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 6, "w": 75, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 472, "y": 283, "w": 77, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 77, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 233, "y": 282, "w": 77, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 5, "w": 77, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 396, "y": 215, "w": 76, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 76, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 214, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 76, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 399, "y": 144, "w": 76, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 76, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 431, "y": 73, "w": 77, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 77, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 242, "y": 142, "w": 77, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 77, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 156, "y": 213, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 475, "y": 144, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 76, "y": 214, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 76, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 152, "y": 283, "w": 75, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 75, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 73, "y": 284, "w": 74, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 5, "w": 74, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 460, "y": 350, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 6, "w": 74, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 227, "y": 350, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 6, "w": 74, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 385, "y": 284, "w": 75, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 6, "w": 75, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 472, "y": 283, "w": 77, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 77, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 233, "y": 282, "w": 77, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 5, "w": 77, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 396, "y": 215, "w": 76, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 76, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 214, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 76, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 399, "y": 144, "w": 76, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 76, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 431, "y": 73, "w": 77, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 77, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 242, "y": 142, "w": 77, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 77, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 156, "y": 213, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 475, "y": 144, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 0, "y": 144, "w": 78, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 78, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 233, "y": 213, "w": 78, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 78, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 156, "y": 144, "w": 79, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 79, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 319, "y": 144, "w": 80, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 80, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 242, "y": 73, "w": 80, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 80, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 310, "y": 282, "w": 75, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 75, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 534, "y": 350, "w": 71, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 4, "w": 71, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 301, "y": 351, "w": 67, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 3, "w": 67, "h": 73 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 0, "y": 353, "w": 63, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 3, "w": 63, "h": 75 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 204, "y": 417, "w": 63, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 2, "w": 63, "h": 75 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 139, "y": 352, "w": 65, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 3, "w": 65, "h": 73 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 73, "y": 352, "w": 66, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 3, "w": 66, "h": 72 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 368, "y": 351, "w": 69, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 69, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 0, "y": 284, "w": 73, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 4, "w": 73, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 475, "y": 214, "w": 76, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 76, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 319, "y": 212, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 82, "y": 73, "w": 80, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 80, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 519, "y": 72, "w": 83, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 83, "h": 72 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 434, "y": 0, "w": 85, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 85, "h": 73 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 261, "y": 0, "w": 86, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 86, "h": 73 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 174, "y": 0, "w": 87, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 73 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 87, "y": 0, "w": 87, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 87, "h": 73 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 0, "y": 0, "w": 87, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 87, "h": 73 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 347, "y": 0, "w": 87, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 87, "h": 72 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 519, "y": 0, "w": 85, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 85, "h": 72 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 347, "y": 72, "w": 84, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 84, "h": 72 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 0, "y": 73, "w": 82, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 82, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 162, "y": 73, "w": 80, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 80, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 78, "y": 144, "w": 78, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 78, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "668-female.png", + "format": "I8", + "size": { "w": 605, "h": 492 }, + "scale": "1" + } +} diff --git a/public/images/pokemon/exp/back/female/668.png b/public/images/pokemon/exp/back/female/668.png new file mode 100644 index 00000000000..e5b5ed2494e Binary files /dev/null and b/public/images/pokemon/exp/back/female/668.png differ diff --git a/public/images/pokemon/exp/back/shiny/248-mega.json b/public/images/pokemon/exp/back/shiny/248-mega.json index e6874d48784..67e88b6014f 100644 --- a/public/images/pokemon/exp/back/shiny/248-mega.json +++ b/public/images/pokemon/exp/back/shiny/248-mega.json @@ -1,272 +1,929 @@ -{ - "textures": [ - { - "image": "248-mega.png", - "format": "RGBA8888", - "size": { - "w": 292, - "h": 292 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 74 - }, - "frame": { - "x": 0, - "y": 0, - "w": 80, - "h": 74 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 74 - }, - "frame": { - "x": 0, - "y": 74, - "w": 80, - "h": 74 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 74 - }, - "frame": { - "x": 0, - "y": 148, - "w": 79, - "h": 74 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 74 - }, - "frame": { - "x": 79, - "y": 148, - "w": 79, - "h": 74 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 73 - }, - "frame": { - "x": 80, - "y": 0, - "w": 79, - "h": 73 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 73 - }, - "frame": { - "x": 80, - "y": 73, - "w": 79, - "h": 73 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 75, - "h": 73 - }, - "frame": { - "x": 158, - "y": 146, - "w": 75, - "h": 73 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 75, - "h": 73 - }, - "frame": { - "x": 158, - "y": 146, - "w": 75, - "h": 73 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 75, - "h": 73 - }, - "frame": { - "x": 158, - "y": 219, - "w": 75, - "h": 73 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 75, - "h": 73 - }, - "frame": { - "x": 158, - "y": 219, - "w": 75, - "h": 73 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 73, - "h": 73 - }, - "frame": { - "x": 159, - "y": 0, - "w": 73, - "h": 73 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 73, - "h": 73 - }, - "frame": { - "x": 159, - "y": 73, - "w": 73, - "h": 73 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:3dba844e4799c099eae9413ec740d703:7a7dc95ebe53fcea6738011b92bff44e:90df97eb431b7162252516cb937a0b9e$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 101, "w": 82, "h": 92 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 82, "h": 92 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 430, "y": 101, "w": 82, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 82, "h": 91 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 195, "w": 84, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 84, "h": 88 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 173, "y": 287, "w": 85, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 85, "h": 85 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 373, "w": 85, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 85, "h": 80 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 341, "y": 455, "w": 85, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 85, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 84, "y": 534, "w": 84, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 84, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 170, "y": 534, "w": 83, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 83, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 170, "y": 456, "w": 83, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 83, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 341, "y": 533, "w": 84, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 84, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 84, "y": 456, "w": 84, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 84, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 255, "y": 455, "w": 84, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 84, "h": 77 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 513, "y": 455, "w": 83, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 83, "h": 77 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 428, "y": 455, "w": 83, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 83, "h": 77 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 260, "y": 373, "w": 83, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 83, "h": 80 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 516, "y": 287, "w": 83, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 83, "h": 83 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 347, "y": 287, "w": 83, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 83, "h": 85 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 256, "y": 196, "w": 83, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 89 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 342, "y": 192, "w": 82, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 82, "h": 91 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 0, "y": 101, "w": 82, "h": 92 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 82, "h": 92 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 430, "y": 101, "w": 82, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 82, "h": 91 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 0, "y": 195, "w": 84, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 84, "h": 88 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 173, "y": 287, "w": 85, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 85, "h": 85 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 0, "y": 373, "w": 85, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 85, "h": 80 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 341, "y": 455, "w": 85, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 85, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 84, "y": 534, "w": 84, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 84, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 170, "y": 534, "w": 83, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 83, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 170, "y": 456, "w": 83, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 83, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 341, "y": 533, "w": 84, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 84, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 84, "y": 456, "w": 84, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 84, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 255, "y": 455, "w": 84, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 84, "h": 77 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 513, "y": 455, "w": 83, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 83, "h": 77 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 428, "y": 455, "w": 83, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 83, "h": 77 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 260, "y": 373, "w": 83, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 83, "h": 80 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 516, "y": 287, "w": 83, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 83, "h": 83 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 347, "y": 287, "w": 83, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 83, "h": 85 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 256, "y": 196, "w": 83, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 89 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 342, "y": 192, "w": 82, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 82, "h": 91 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 0, "y": 101, "w": 82, "h": 92 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 82, "h": 92 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 430, "y": 101, "w": 82, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 82, "h": 91 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 195, "w": 84, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 84, "h": 88 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 173, "y": 287, "w": 85, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 85, "h": 85 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 373, "w": 85, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 85, "h": 80 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 341, "y": 455, "w": 85, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 85, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 84, "y": 534, "w": 84, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 84, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 170, "y": 534, "w": 83, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 83, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 170, "y": 456, "w": 83, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 83, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 341, "y": 533, "w": 84, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 84, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 84, "y": 456, "w": 84, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 84, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 255, "y": 455, "w": 84, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 84, "h": 77 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 513, "y": 455, "w": 83, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 83, "h": 77 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 428, "y": 455, "w": 83, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 83, "h": 77 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 260, "y": 373, "w": 83, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 83, "h": 80 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 516, "y": 287, "w": 83, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 83, "h": 83 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 347, "y": 287, "w": 83, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 83, "h": 85 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 256, "y": 196, "w": 83, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 89 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 342, "y": 192, "w": 82, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 82, "h": 91 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 0, "y": 101, "w": 82, "h": 92 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 82, "h": 92 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 430, "y": 101, "w": 82, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 82, "h": 91 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 0, "y": 195, "w": 84, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 84, "h": 88 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 173, "y": 287, "w": 85, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 85, "h": 85 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 0, "y": 373, "w": 85, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 85, "h": 80 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 341, "y": 455, "w": 85, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 85, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 84, "y": 534, "w": 84, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 84, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 170, "y": 534, "w": 83, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 83, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 170, "y": 456, "w": 83, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 83, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 341, "y": 533, "w": 84, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 84, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 84, "y": 456, "w": 84, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 84, "h": 76 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 255, "y": 455, "w": 84, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 84, "h": 77 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 513, "y": 455, "w": 83, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 83, "h": 77 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 428, "y": 455, "w": 83, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 83, "h": 77 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 260, "y": 373, "w": 83, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 83, "h": 80 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 516, "y": 287, "w": 83, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 83, "h": 83 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 347, "y": 287, "w": 83, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 83, "h": 85 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 256, "y": 196, "w": 83, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 83, "h": 89 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 342, "y": 192, "w": 82, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 82, "h": 91 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 0, "y": 101, "w": 82, "h": 92 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 82, "h": 92 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 426, "y": 194, "w": 82, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 82, "h": 91 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 510, "y": 196, "w": 83, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 83, "h": 89 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 0, "y": 285, "w": 83, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 83, "h": 86 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 432, "y": 287, "w": 82, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 82, "h": 85 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 85, "y": 288, "w": 82, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 82, "h": 83 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 87, "y": 373, "w": 82, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 82, "h": 81 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 345, "y": 374, "w": 82, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 82, "h": 79 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 429, "y": 374, "w": 82, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 82, "h": 79 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 0, "y": 455, "w": 82, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 82, "h": 79 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 171, "y": 374, "w": 82, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 82, "h": 80 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 516, "y": 372, "w": 84, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 84, "h": 81 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 260, "y": 287, "w": 85, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 85, "h": 84 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 86, "y": 200, "w": 85, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 85, "h": 86 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 342, "y": 101, "w": 86, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 86, "h": 89 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 256, "y": 100, "w": 84, "h": 94 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 84, "h": 94 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 86, "y": 100, "w": 83, "h": 98 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 83, "h": 98 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 514, "y": 0, "w": 83, "h": 98 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 83, "h": 98 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 429, "y": 0, "w": 83, "h": 99 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 83, "h": 99 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 344, "y": 0, "w": 83, "h": 99 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 83, "h": 99 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 0, "y": 0, "w": 84, "h": 99 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 84, "h": 99 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 258, "y": 0, "w": 84, "h": 98 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 84, "h": 98 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 172, "y": 0, "w": 84, "h": 98 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 84, "h": 98 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 86, "y": 0, "w": 84, "h": 98 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 84, "h": 98 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 171, "y": 100, "w": 83, "h": 97 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 83, "h": 97 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 514, "y": 100, "w": 83, "h": 94 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 83, "h": 94 }, + "sourceSize": { "w": 88, "h": 101 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "248-mega.png", + "format": "I8", + "size": { "w": 600, "h": 610 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/248-mega.png b/public/images/pokemon/exp/back/shiny/248-mega.png index 10b8bfb05f3..bb4a62d441f 100644 Binary files a/public/images/pokemon/exp/back/shiny/248-mega.png and b/public/images/pokemon/exp/back/shiny/248-mega.png differ diff --git a/public/images/pokemon/exp/back/shiny/362-mega.json b/public/images/pokemon/exp/back/shiny/362-mega.json index 2c42a6db6f1..02354ddad93 100644 --- a/public/images/pokemon/exp/back/shiny/362-mega.json +++ b/public/images/pokemon/exp/back/shiny/362-mega.json @@ -1,272 +1,551 @@ -{ - "textures": [ - { - "image": "362-mega.png", - "format": "RGBA8888", - "size": { - "w": 140, - "h": 140 - }, - "scale": 1, - "frames": [ - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 72 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 61, - "h": 71 - }, - "frame": { - "x": 0, - "y": 0, - "w": 61, - "h": 71 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 72 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 61, - "h": 71 - }, - "frame": { - "x": 0, - "y": 0, - "w": 61, - "h": 71 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 72 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 61, - "h": 71 - }, - "frame": { - "x": 0, - "y": 0, - "w": 61, - "h": 71 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 72 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 61, - "h": 71 - }, - "frame": { - "x": 0, - "y": 0, - "w": 61, - "h": 71 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 72 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 61, - "h": 70 - }, - "frame": { - "x": 61, - "y": 0, - "w": 61, - "h": 70 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 72 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 61, - "h": 70 - }, - "frame": { - "x": 61, - "y": 0, - "w": 61, - "h": 70 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 72 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 61, - "h": 70 - }, - "frame": { - "x": 61, - "y": 0, - "w": 61, - "h": 70 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 72 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 61, - "h": 70 - }, - "frame": { - "x": 61, - "y": 0, - "w": 61, - "h": 70 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 72 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 61, - "h": 70 - }, - "frame": { - "x": 61, - "y": 70, - "w": 61, - "h": 70 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 72 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 61, - "h": 70 - }, - "frame": { - "x": 61, - "y": 70, - "w": 61, - "h": 70 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 72 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 61, - "h": 69 - }, - "frame": { - "x": 0, - "y": 71, - "w": 61, - "h": 69 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 72 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 61, - "h": 69 - }, - "frame": { - "x": 0, - "y": 71, - "w": 61, - "h": 69 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:25f7f8085d78ddcdd4aadd2f3591c111:e79d613f15426593f8c7367b1afc6c04:8a7271a5423838c97ddeb1e6dc343255$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 14, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 16, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 18, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 15, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 14, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 16, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 18, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 15, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 14, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 16, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 18, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 15, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 0, "y": 0, "w": 65, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 65, "h": 68 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 67, "y": 66, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 58, "h": 66 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 0, "w": 65, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 65, "h": 68 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 67, "y": 66, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 58, "h": 66 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 0, "y": 0, "w": 65, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 65, "h": 68 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 67, "y": 66, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 58, "h": 66 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 0, "y": 0, "w": 65, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 65, "h": 68 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 67, "y": 66, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 58, "h": 66 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 0, "w": 65, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 65, "h": 68 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 67, "y": 66, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 58, "h": 66 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 0, "y": 0, "w": 65, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 65, "h": 68 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 67, "y": 66, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 58, "h": 66 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 67, "y": 0, "w": 61, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 61, "h": 64 }, + "sourceSize": { "w": 65, "h": 82 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "362-mega.png", + "format": "I8", + "size": { "w": 128, "h": 132 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/362-mega.png b/public/images/pokemon/exp/back/shiny/362-mega.png index 32f3e5658a3..75d5b5075b9 100644 Binary files a/public/images/pokemon/exp/back/shiny/362-mega.png and b/public/images/pokemon/exp/back/shiny/362-mega.png differ diff --git a/public/images/pokemon/exp/back/shiny/651.json b/public/images/pokemon/exp/back/shiny/651.json index 4e96154d67b..04a791f539f 100644 --- a/public/images/pokemon/exp/back/shiny/651.json +++ b/public/images/pokemon/exp/back/shiny/651.json @@ -1,104 +1,713 @@ -{ - "textures": [ - { - "image": "651.png", - "format": "RGBA8888", - "size": { - "w": 106, - "h": 106 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 50 - }, - "frame": { - "x": 0, - "y": 0, - "w": 53, - "h": 50 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 50 - }, - "frame": { - "x": 0, - "y": 0, - "w": 53, - "h": 50 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 50 - }, - "frame": { - "x": 53, - "y": 0, - "w": 53, - "h": 50 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 53, - "h": 49 - }, - "frame": { - "x": 0, - "y": 50, - "w": 53, - "h": 49 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:3f6a8875e3bdc40a01569005eeaa99a4:fe6f34e605d5c3077475cfd03942ff77:a93e5fa02e10bf11e3ed8bf6571835ca$" - } -} \ No newline at end of file +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 167, "y": 0, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 222, "y": 0, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 277, "y": 0, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 56, "y": 100, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 54, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 331, "y": 150, "w": 53, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 53, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 162, "y": 247, "w": 52, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 52, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 219, "y": 198, "w": 53, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 53, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 272, "y": 198, "w": 53, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 53, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 110, "y": 100, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 54, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 164, "y": 100, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 54, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 218, "y": 100, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 54, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 55, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 110, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 55, "y": 0, "w": 56, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 56, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 165, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 0, "w": 55, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 55, "h": 51 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 220, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 111, "y": 0, "w": 56, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 56, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 275, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 330, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 167, "y": 0, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 222, "y": 0, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 277, "y": 0, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 56, "y": 100, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 54, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 331, "y": 150, "w": 53, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 53, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 162, "y": 247, "w": 52, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 52, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 219, "y": 198, "w": 53, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 53, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 272, "y": 198, "w": 53, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 53, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 326, "y": 100, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 54, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 164, "y": 100, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 54, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 218, "y": 100, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 54, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 55, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 110, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 55, "y": 0, "w": 56, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 56, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 165, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 0, "w": 55, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 55, "h": 51 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 220, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 111, "y": 0, "w": 56, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 56, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 275, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 330, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 167, "y": 0, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 222, "y": 0, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 277, "y": 0, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 56, "y": 100, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 54, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 331, "y": 150, "w": 53, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 53, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 162, "y": 247, "w": 52, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 52, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 219, "y": 198, "w": 53, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 53, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 272, "y": 198, "w": 53, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 53, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 110, "y": 100, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 54, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 164, "y": 100, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 54, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 218, "y": 100, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 54, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 55, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 110, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 55, "y": 0, "w": 56, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 56, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 165, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 0, "w": 55, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 55, "h": 51 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 220, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 111, "y": 0, "w": 56, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 56, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 275, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 330, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 272, "y": 100, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 54, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 0, "y": 100, "w": 56, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 56, "h": 49 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 0, "y": 51, "w": 55, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 55, "h": 49 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 219, "y": 150, "w": 56, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 56, "h": 48 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 0, "y": 248, "w": 55, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 55, "h": 47 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 275, "y": 150, "w": 56, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 56, "h": 48 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 325, "y": 200, "w": 56, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 56, "h": 47 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 54, "y": 150, "w": 55, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 55, "h": 49 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 332, "y": 0, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 0, "y": 199, "w": 54, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 54, "h": 49 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 55, "y": 248, "w": 53, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 53, "h": 48 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 325, "y": 247, "w": 53, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 53, "h": 49 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 54, "y": 199, "w": 54, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 54, "h": 49 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 0, "y": 149, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 54, "h": 50 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 108, "y": 199, "w": 54, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 54, "h": 49 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 162, "y": 199, "w": 55, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 55, "h": 48 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 109, "y": 150, "w": 55, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 55, "h": 49 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 164, "y": 150, "w": 55, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 55, "h": 49 }, + "sourceSize": { "w": 59, "h": 54 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "651.png", + "format": "I8", + "size": { "w": 387, "h": 297 }, + "scale": "1" + } +} diff --git a/public/images/pokemon/exp/back/shiny/651.png b/public/images/pokemon/exp/back/shiny/651.png index 99fa14d5df9..b607fa69a15 100644 Binary files a/public/images/pokemon/exp/back/shiny/651.png and b/public/images/pokemon/exp/back/shiny/651.png differ diff --git a/public/images/pokemon/exp/back/shiny/653.json b/public/images/pokemon/exp/back/shiny/653.json index a5d273cff64..c5fb4a5db61 100644 --- a/public/images/pokemon/exp/back/shiny/653.json +++ b/public/images/pokemon/exp/back/shiny/653.json @@ -1,2204 +1,947 @@ -{ - "textures": [ - { - "image": "653.png", - "format": "RGBA8888", - "size": { - "w": 173, - "h": 173 - }, - "scale": 1, - "frames": [ - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 45, - "y": 0, - "w": 45, - "h": 44 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 45, - "y": 0, - "w": 45, - "h": 44 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 45, - "y": 0, - "w": 45, - "h": 44 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 45, - "y": 0, - "w": 45, - "h": 44 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 45, - "y": 0, - "w": 45, - "h": 44 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 45, - "y": 0, - "w": 45, - "h": 44 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 90, - "y": 0, - "w": 45, - "h": 44 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 90, - "y": 0, - "w": 45, - "h": 44 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 90, - "y": 0, - "w": 45, - "h": 44 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 90, - "y": 0, - "w": 45, - "h": 44 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 45, - "h": 44 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 45, - "h": 44 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 45, - "h": 44 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 45, - "h": 44 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 132, - "w": 43, - "h": 41 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 43, - "h": 40 - }, - "frame": { - "x": 43, - "y": 132, - "w": 43, - "h": 40 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 43, - "h": 40 - }, - "frame": { - "x": 43, - "y": 132, - "w": 43, - "h": 40 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 43, - "h": 40 - }, - "frame": { - "x": 43, - "y": 132, - "w": 43, - "h": 40 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 43, - "h": 40 - }, - "frame": { - "x": 43, - "y": 132, - "w": 43, - "h": 40 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 43, - "h": 40 - }, - "frame": { - "x": 43, - "y": 132, - "w": 43, - "h": 40 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 43, - "h": 40 - }, - "frame": { - "x": 43, - "y": 132, - "w": 43, - "h": 40 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 43, - "h": 40 - }, - "frame": { - "x": 43, - "y": 132, - "w": 43, - "h": 40 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 43, - "h": 40 - }, - "frame": { - "x": 43, - "y": 132, - "w": 43, - "h": 40 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 43, - "h": 40 - }, - "frame": { - "x": 43, - "y": 132, - "w": 43, - "h": 40 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 43, - "h": 40 - }, - "frame": { - "x": 43, - "y": 132, - "w": 43, - "h": 40 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 44 - }, - "frame": { - "x": 45, - "y": 44, - "w": 44, - "h": 44 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 44 - }, - "frame": { - "x": 45, - "y": 44, - "w": 44, - "h": 44 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 44 - }, - "frame": { - "x": 45, - "y": 44, - "w": 44, - "h": 44 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 44 - }, - "frame": { - "x": 45, - "y": 44, - "w": 44, - "h": 44 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 43, - "h": 44 - }, - "frame": { - "x": 45, - "y": 88, - "w": 43, - "h": 44 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 43, - "h": 44 - }, - "frame": { - "x": 45, - "y": 88, - "w": 43, - "h": 44 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 43, - "h": 44 - }, - "frame": { - "x": 45, - "y": 88, - "w": 43, - "h": 44 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 43, - "h": 44 - }, - "frame": { - "x": 45, - "y": 88, - "w": 43, - "h": 44 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 40, - "h": 44 - }, - "frame": { - "x": 88, - "y": 88, - "w": 40, - "h": 44 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 40, - "h": 44 - }, - "frame": { - "x": 88, - "y": 88, - "w": 40, - "h": 44 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 40, - "h": 44 - }, - "frame": { - "x": 88, - "y": 88, - "w": 40, - "h": 44 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 40, - "h": 44 - }, - "frame": { - "x": 88, - "y": 88, - "w": 40, - "h": 44 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 40, - "h": 44 - }, - "frame": { - "x": 88, - "y": 88, - "w": 40, - "h": 44 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 40, - "h": 44 - }, - "frame": { - "x": 88, - "y": 88, - "w": 40, - "h": 44 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 40, - "h": 44 - }, - "frame": { - "x": 88, - "y": 88, - "w": 40, - "h": 44 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 40, - "h": 44 - }, - "frame": { - "x": 88, - "y": 88, - "w": 40, - "h": 44 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 40, - "h": 44 - }, - "frame": { - "x": 88, - "y": 88, - "w": 40, - "h": 44 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 40, - "h": 44 - }, - "frame": { - "x": 88, - "y": 88, - "w": 40, - "h": 44 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 40, - "h": 44 - }, - "frame": { - "x": 88, - "y": 88, - "w": 40, - "h": 44 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 40, - "h": 44 - }, - "frame": { - "x": 88, - "y": 88, - "w": 40, - "h": 44 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 40, - "h": 44 - }, - "frame": { - "x": 88, - "y": 88, - "w": 40, - "h": 44 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 40, - "h": 44 - }, - "frame": { - "x": 88, - "y": 88, - "w": 40, - "h": 44 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 40, - "h": 44 - }, - "frame": { - "x": 88, - "y": 88, - "w": 40, - "h": 44 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 40, - "h": 44 - }, - "frame": { - "x": 88, - "y": 88, - "w": 40, - "h": 44 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 40, - "h": 44 - }, - "frame": { - "x": 88, - "y": 88, - "w": 40, - "h": 44 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 40, - "h": 44 - }, - "frame": { - "x": 88, - "y": 88, - "w": 40, - "h": 44 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 41, - "h": 43 - }, - "frame": { - "x": 89, - "y": 44, - "w": 41, - "h": 43 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 41, - "h": 43 - }, - "frame": { - "x": 89, - "y": 44, - "w": 41, - "h": 43 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 41, - "h": 43 - }, - "frame": { - "x": 89, - "y": 44, - "w": 41, - "h": 43 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 41, - "h": 43 - }, - "frame": { - "x": 89, - "y": 44, - "w": 41, - "h": 43 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 41, - "h": 43 - }, - "frame": { - "x": 89, - "y": 44, - "w": 41, - "h": 43 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 41, - "h": 43 - }, - "frame": { - "x": 89, - "y": 44, - "w": 41, - "h": 43 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 41, - "h": 43 - }, - "frame": { - "x": 89, - "y": 44, - "w": 41, - "h": 43 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 41, - "h": 43 - }, - "frame": { - "x": 89, - "y": 44, - "w": 41, - "h": 43 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 41, - "h": 43 - }, - "frame": { - "x": 130, - "y": 44, - "w": 41, - "h": 43 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 41, - "h": 43 - }, - "frame": { - "x": 130, - "y": 44, - "w": 41, - "h": 43 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 87, - "w": 40, - "h": 43 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 87, - "w": 40, - "h": 43 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 87, - "w": 40, - "h": 43 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 87, - "w": 40, - "h": 43 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 130, - "w": 40, - "h": 43 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 130, - "w": 40, - "h": 43 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 130, - "w": 40, - "h": 43 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 130, - "w": 40, - "h": 43 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 130, - "w": 40, - "h": 43 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 130, - "w": 40, - "h": 43 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 130, - "w": 40, - "h": 43 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 130, - "w": 40, - "h": 43 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 130, - "w": 40, - "h": 43 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 130, - "w": 40, - "h": 43 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 130, - "w": 40, - "h": 43 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 130, - "w": 40, - "h": 43 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 130, - "w": 40, - "h": 43 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 130, - "w": 40, - "h": 43 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 130, - "w": 40, - "h": 43 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 40, - "h": 43 - }, - "frame": { - "x": 128, - "y": 130, - "w": 40, - "h": 43 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:d04be8782bc4dd7044942acce05841d1:0e29431888e23f35da7ce4bf9b48965f:a7be961d0230f568aff23d95e7ff0036$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0002.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0003.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0004.png", + "frame": { "x": 0, "y": 123, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 123, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 84, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 42, "h": 39 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0009.png", + "frame": { "x": 0, "y": 84, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 42, "h": 39 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0012.png", + "frame": { "x": 38, "y": 128, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0013.png", + "frame": { "x": 38, "y": 128, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0014.png", + "frame": { "x": 42, "y": 86, "w": 39, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0015.png", + "frame": { "x": 42, "y": 86, "w": 39, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0016.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0017.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0018.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0019.png", + "frame": { "x": 0, "y": 123, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0020.png", + "frame": { "x": 0, "y": 123, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0021.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0022.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0023.png", + "frame": { "x": 0, "y": 84, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 42, "h": 39 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0024.png", + "frame": { "x": 0, "y": 84, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 42, "h": 39 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0027.png", + "frame": { "x": 38, "y": 128, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0028.png", + "frame": { "x": 38, "y": 128, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0029.png", + "frame": { "x": 130, "y": 86, "w": 39, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0030.png", + "frame": { "x": 130, "y": 86, "w": 39, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0031.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0032.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0033.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0034.png", + "frame": { "x": 38, "y": 128, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0035.png", + "frame": { "x": 38, "y": 128, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0038.png", + "frame": { "x": 0, "y": 84, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 42, "h": 39 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0039.png", + "frame": { "x": 0, "y": 84, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 42, "h": 39 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0040.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0042.png", + "frame": { "x": 38, "y": 128, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0043.png", + "frame": { "x": 38, "y": 128, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0044.png", + "frame": { "x": 42, "y": 86, "w": 39, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0045.png", + "frame": { "x": 42, "y": 86, "w": 39, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0046.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0047.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0048.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0049.png", + "frame": { "x": 38, "y": 128, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0050.png", + "frame": { "x": 38, "y": 128, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0051.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0052.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0053.png", + "frame": { "x": 0, "y": 84, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 42, "h": 39 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 84, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 42, "h": 39 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0057.png", + "frame": { "x": 38, "y": 128, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0058.png", + "frame": { "x": 38, "y": 128, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0059.png", + "frame": { "x": 42, "y": 86, "w": 39, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0060.png", + "frame": { "x": 42, "y": 86, "w": 39, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0063.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0064.png", + "frame": { "x": 38, "y": 128, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0065.png", + "frame": { "x": 38, "y": 128, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0066.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0067.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0068.png", + "frame": { "x": 0, "y": 84, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 42, "h": 39 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0069.png", + "frame": { "x": 0, "y": 84, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 42, "h": 39 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0070.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0071.png", + "frame": { "x": 0, "y": 44, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 41, "h": 40 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0072.png", + "frame": { "x": 38, "y": 128, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0073.png", + "frame": { "x": 38, "y": 128, "w": 38, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 38, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0074.png", + "frame": { "x": 42, "y": 86, "w": 39, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0075.png", + "frame": { "x": 42, "y": 86, "w": 39, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 42 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0076.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0077.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0078.png", + "frame": { "x": 81, "y": 87, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 38, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0079.png", + "frame": { "x": 130, "y": 43, "w": 41, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 41, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0080.png", + "frame": { "x": 130, "y": 43, "w": 41, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 41, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0081.png", + "frame": { "x": 88, "y": 43, "w": 42, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 42, "h": 44 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0082.png", + "frame": { "x": 88, "y": 43, "w": 42, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 42, "h": 44 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0083.png", + "frame": { "x": 0, "y": 0, "w": 44, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 44, "h": 44 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0084.png", + "frame": { "x": 0, "y": 0, "w": 44, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 44, "h": 44 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0085.png", + "frame": { "x": 44, "y": 0, "w": 44, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0086.png", + "frame": { "x": 44, "y": 0, "w": 44, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0087.png", + "frame": { "x": 44, "y": 0, "w": 44, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0088.png", + "frame": { "x": 88, "y": 0, "w": 44, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0089.png", + "frame": { "x": 88, "y": 0, "w": 44, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0090.png", + "frame": { "x": 44, "y": 0, "w": 44, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0091.png", + "frame": { "x": 44, "y": 0, "w": 44, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0092.png", + "frame": { "x": 88, "y": 0, "w": 44, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0093.png", + "frame": { "x": 88, "y": 0, "w": 44, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0094.png", + "frame": { "x": 44, "y": 0, "w": 44, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0095.png", + "frame": { "x": 132, "y": 0, "w": 44, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0096.png", + "frame": { "x": 132, "y": 0, "w": 44, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0097.png", + "frame": { "x": 44, "y": 43, "w": 44, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0098.png", + "frame": { "x": 44, "y": 43, "w": 44, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 44, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0099.png", + "frame": { "x": 0, "y": 0, "w": 44, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 44, "h": 44 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0100.png", + "frame": { "x": 0, "y": 0, "w": 44, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 44, "h": 44 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0101.png", + "frame": { "x": 88, "y": 43, "w": 42, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 42, "h": 44 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0102.png", + "frame": { "x": 88, "y": 43, "w": 42, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 42, "h": 44 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0103.png", + "frame": { "x": 130, "y": 43, "w": 41, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 41, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + }, + { + "filename": "0104.png", + "frame": { "x": 130, "y": 43, "w": 41, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 41, "h": 43 }, + "sourceSize": { "w": 46, "h": 44 }, + "duration": 50 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "653.png", + "format": "I8", + "size": { "w": 176, "h": 170 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/653.png b/public/images/pokemon/exp/back/shiny/653.png index efd98f5ee42..08b2420ad11 100644 Binary files a/public/images/pokemon/exp/back/shiny/653.png and b/public/images/pokemon/exp/back/shiny/653.png differ diff --git a/public/images/pokemon/exp/back/shiny/654.json b/public/images/pokemon/exp/back/shiny/654.json index 990436ec243..a5bd681b6cb 100644 --- a/public/images/pokemon/exp/back/shiny/654.json +++ b/public/images/pokemon/exp/back/shiny/654.json @@ -1,188 +1,677 @@ -{ - "textures": [ - { - "image": "654.png", - "format": "RGBA8888", - "size": { - "w": 120, - "h": 120 - }, - "scale": 1, - "frames": [ - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 66 - }, - "frame": { - "x": 0, - "y": 0, - "w": 40, - "h": 66 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 66 - }, - "frame": { - "x": 0, - "y": 0, - "w": 40, - "h": 66 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 66 - }, - "frame": { - "x": 0, - "y": 0, - "w": 40, - "h": 66 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 66 - }, - "frame": { - "x": 0, - "y": 0, - "w": 40, - "h": 66 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 66 - }, - "frame": { - "x": 40, - "y": 0, - "w": 40, - "h": 66 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 66 - }, - "frame": { - "x": 40, - "y": 0, - "w": 40, - "h": 66 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 40, - "h": 65 - }, - "frame": { - "x": 80, - "y": 0, - "w": 40, - "h": 65 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 40, - "h": 65 - }, - "frame": { - "x": 80, - "y": 0, - "w": 40, - "h": 65 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:6f47a7be287accef984c271dc9a4c0a3:dfd096ac65957c3db229b035490b4fbb:1977f50e1ab8a3304ceeb59ee1aa2ba9$" - } -} \ No newline at end of file +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 263, "w": 50, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 50, "h": 67 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 102, "y": 203, "w": 52, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 52, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 161, "y": 130, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 0, "y": 0, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 55, "y": 0, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 110, "y": 0, "w": 53, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 53, "h": 68 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 110, "y": 68, "w": 51, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 51, "h": 69 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 214, "y": 195, "w": 51, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 51, "h": 68 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 0, "y": 263, "w": 50, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 50, "h": 67 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 102, "y": 203, "w": 52, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 52, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 161, "y": 130, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 0, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 55, "y": 0, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 110, "y": 0, "w": 53, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 53, "h": 68 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 110, "y": 68, "w": 51, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 51, "h": 69 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 214, "y": 195, "w": 51, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 51, "h": 68 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 263, "w": 50, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 50, "h": 67 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 102, "y": 203, "w": 52, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 52, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 161, "y": 130, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 0, "y": 0, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 55, "y": 0, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 110, "y": 0, "w": 53, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 53, "h": 68 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 110, "y": 68, "w": 51, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 51, "h": 69 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 214, "y": 195, "w": 51, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 51, "h": 68 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 263, "w": 50, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 50, "h": 67 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 102, "y": 203, "w": 52, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 52, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 161, "y": 130, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 0, "y": 0, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 55, "y": 0, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 110, "y": 0, "w": 53, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 53, "h": 68 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 110, "y": 68, "w": 51, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 51, "h": 69 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 214, "y": 195, "w": 51, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 51, "h": 68 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 0, "y": 263, "w": 50, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 50, "h": 67 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 102, "y": 203, "w": 52, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 52, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 161, "y": 130, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 0, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 55, "y": 0, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 110, "y": 0, "w": 53, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 53, "h": 68 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 110, "y": 68, "w": 51, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 51, "h": 69 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 214, "y": 195, "w": 51, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 51, "h": 68 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 263, "w": 50, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 50, "h": 67 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 102, "y": 203, "w": 52, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 52, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 161, "y": 130, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 0, "y": 0, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 55, "y": 0, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 110, "y": 0, "w": 53, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 53, "h": 68 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 110, "y": 68, "w": 51, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 51, "h": 69 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 214, "y": 195, "w": 51, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 51, "h": 68 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 263, "w": 50, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 50, "h": 67 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 215, "y": 130, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 163, "y": 0, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 108, "y": 137, "w": 53, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 53, "h": 66 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 50, "y": 263, "w": 50, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 50, "h": 66 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 131, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 218, "y": 0, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 161, "y": 195, "w": 53, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 53, "h": 66 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 154, "y": 261, "w": 52, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 52, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 54, "y": 131, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 163, "y": 65, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 154, "y": 261, "w": 52, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 52, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 54, "y": 131, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 163, "y": 65, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 154, "y": 261, "w": 52, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 52, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 54, "y": 131, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 163, "y": 65, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 154, "y": 261, "w": 52, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 52, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 54, "y": 131, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 218, "y": 65, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 0, "y": 66, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 0, "y": 66, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 55, "y": 66, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 108, "y": 137, "w": 53, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 53, "h": 66 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 0, "y": 196, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 51, "h": 67 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 51, "y": 196, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 51, "h": 67 }, + "sourceSize": { "w": 55, "h": 69 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "654.png", + "format": "I8", + "size": { "w": 273, "h": 330 }, + "scale": "1" + } +} diff --git a/public/images/pokemon/exp/back/shiny/654.png b/public/images/pokemon/exp/back/shiny/654.png index 0dfad6834cc..747aa61bd58 100644 Binary files a/public/images/pokemon/exp/back/shiny/654.png and b/public/images/pokemon/exp/back/shiny/654.png differ diff --git a/public/images/pokemon/exp/back/shiny/656.json b/public/images/pokemon/exp/back/shiny/656.json index 0a023d7bee6..78a3ae89852 100644 --- a/public/images/pokemon/exp/back/shiny/656.json +++ b/public/images/pokemon/exp/back/shiny/656.json @@ -1,1658 +1,713 @@ -{ - "textures": [ - { - "image": "656.png", - "format": "RGBA8888", - "size": { - "w": 201, - "h": 201 - }, - "scale": 1, - "frames": [ - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 15, - "w": 32, - "h": 32 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 14, - "w": 34, - "h": 33 - }, - "frame": { - "x": 32, - "y": 0, - "w": 34, - "h": 33 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 14, - "w": 34, - "h": 33 - }, - "frame": { - "x": 32, - "y": 0, - "w": 34, - "h": 33 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 14, - "w": 34, - "h": 33 - }, - "frame": { - "x": 32, - "y": 0, - "w": 34, - "h": 33 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 14, - "w": 34, - "h": 33 - }, - "frame": { - "x": 32, - "y": 0, - "w": 34, - "h": 33 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 14, - "w": 34, - "h": 33 - }, - "frame": { - "x": 32, - "y": 0, - "w": 34, - "h": 33 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 14, - "w": 34, - "h": 33 - }, - "frame": { - "x": 66, - "y": 0, - "w": 34, - "h": 33 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 14, - "w": 34, - "h": 33 - }, - "frame": { - "x": 66, - "y": 0, - "w": 34, - "h": 33 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 14, - "w": 34, - "h": 33 - }, - "frame": { - "x": 66, - "y": 0, - "w": 34, - "h": 33 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 14, - "w": 34, - "h": 33 - }, - "frame": { - "x": 66, - "y": 0, - "w": 34, - "h": 33 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 14, - "w": 34, - "h": 33 - }, - "frame": { - "x": 66, - "y": 0, - "w": 34, - "h": 33 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 14, - "w": 33, - "h": 33 - }, - "frame": { - "x": 100, - "y": 0, - "w": 33, - "h": 33 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 13, - "w": 34, - "h": 34 - }, - "frame": { - "x": 133, - "y": 0, - "w": 34, - "h": 34 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 13, - "w": 34, - "h": 34 - }, - "frame": { - "x": 133, - "y": 0, - "w": 34, - "h": 34 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 13, - "w": 34, - "h": 34 - }, - "frame": { - "x": 133, - "y": 0, - "w": 34, - "h": 34 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 13, - "w": 34, - "h": 34 - }, - "frame": { - "x": 133, - "y": 0, - "w": 34, - "h": 34 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 13, - "w": 34, - "h": 34 - }, - "frame": { - "x": 133, - "y": 0, - "w": 34, - "h": 34 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 13, - "w": 34, - "h": 34 - }, - "frame": { - "x": 167, - "y": 0, - "w": 34, - "h": 34 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 13, - "w": 34, - "h": 34 - }, - "frame": { - "x": 167, - "y": 0, - "w": 34, - "h": 34 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 13, - "w": 34, - "h": 34 - }, - "frame": { - "x": 167, - "y": 0, - "w": 34, - "h": 34 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 13, - "w": 34, - "h": 34 - }, - "frame": { - "x": 167, - "y": 0, - "w": 34, - "h": 34 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 13, - "w": 34, - "h": 34 - }, - "frame": { - "x": 167, - "y": 0, - "w": 34, - "h": 34 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 13, - "w": 32, - "h": 34 - }, - "frame": { - "x": 0, - "y": 32, - "w": 32, - "h": 34 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 34, - "h": 34 - }, - "frame": { - "x": 32, - "y": 33, - "w": 34, - "h": 34 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 34, - "h": 34 - }, - "frame": { - "x": 32, - "y": 33, - "w": 34, - "h": 34 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 34, - "h": 34 - }, - "frame": { - "x": 32, - "y": 33, - "w": 34, - "h": 34 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 34, - "h": 34 - }, - "frame": { - "x": 32, - "y": 33, - "w": 34, - "h": 34 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 34, - "h": 34 - }, - "frame": { - "x": 32, - "y": 33, - "w": 34, - "h": 34 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 34, - "h": 35 - }, - "frame": { - "x": 66, - "y": 33, - "w": 34, - "h": 35 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 34, - "h": 35 - }, - "frame": { - "x": 66, - "y": 33, - "w": 34, - "h": 35 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 34, - "h": 35 - }, - "frame": { - "x": 66, - "y": 33, - "w": 34, - "h": 35 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 34, - "h": 35 - }, - "frame": { - "x": 66, - "y": 33, - "w": 34, - "h": 35 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 34, - "h": 35 - }, - "frame": { - "x": 66, - "y": 33, - "w": 34, - "h": 35 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 34, - "h": 35 - }, - "frame": { - "x": 66, - "y": 33, - "w": 34, - "h": 35 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 34, - "h": 35 - }, - "frame": { - "x": 66, - "y": 33, - "w": 34, - "h": 35 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 34, - "h": 35 - }, - "frame": { - "x": 66, - "y": 33, - "w": 34, - "h": 35 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 34, - "h": 35 - }, - "frame": { - "x": 66, - "y": 33, - "w": 34, - "h": 35 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 33, - "h": 35 - }, - "frame": { - "x": 100, - "y": 33, - "w": 33, - "h": 35 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 34, - "h": 35 - }, - "frame": { - "x": 133, - "y": 34, - "w": 34, - "h": 35 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 34, - "h": 35 - }, - "frame": { - "x": 133, - "y": 34, - "w": 34, - "h": 35 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 34, - "h": 35 - }, - "frame": { - "x": 133, - "y": 34, - "w": 34, - "h": 35 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 34, - "h": 35 - }, - "frame": { - "x": 133, - "y": 34, - "w": 34, - "h": 35 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 34, - "h": 35 - }, - "frame": { - "x": 133, - "y": 34, - "w": 34, - "h": 35 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 34, - "h": 35 - }, - "frame": { - "x": 167, - "y": 34, - "w": 34, - "h": 35 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 34, - "h": 35 - }, - "frame": { - "x": 167, - "y": 34, - "w": 34, - "h": 35 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 34, - "h": 35 - }, - "frame": { - "x": 167, - "y": 34, - "w": 34, - "h": 35 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 34, - "h": 35 - }, - "frame": { - "x": 167, - "y": 34, - "w": 34, - "h": 35 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 34, - "h": 35 - }, - "frame": { - "x": 167, - "y": 34, - "w": 34, - "h": 35 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 34, - "h": 35 - }, - "frame": { - "x": 0, - "y": 67, - "w": 34, - "h": 35 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 34, - "h": 35 - }, - "frame": { - "x": 0, - "y": 67, - "w": 34, - "h": 35 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 34, - "h": 35 - }, - "frame": { - "x": 0, - "y": 67, - "w": 34, - "h": 35 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 34, - "h": 35 - }, - "frame": { - "x": 0, - "y": 67, - "w": 34, - "h": 35 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 34, - "h": 35 - }, - "frame": { - "x": 0, - "y": 67, - "w": 34, - "h": 35 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 34, - "h": 35 - }, - "frame": { - "x": 34, - "y": 68, - "w": 34, - "h": 35 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 34, - "h": 35 - }, - "frame": { - "x": 34, - "y": 68, - "w": 34, - "h": 35 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 34, - "h": 35 - }, - "frame": { - "x": 34, - "y": 68, - "w": 34, - "h": 35 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 34, - "h": 35 - }, - "frame": { - "x": 34, - "y": 68, - "w": 34, - "h": 35 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 34, - "h": 35 - }, - "frame": { - "x": 34, - "y": 68, - "w": 34, - "h": 35 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 33, - "h": 35 - }, - "frame": { - "x": 68, - "y": 68, - "w": 33, - "h": 35 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 34, - "h": 36 - }, - "frame": { - "x": 101, - "y": 69, - "w": 34, - "h": 36 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 34, - "h": 36 - }, - "frame": { - "x": 101, - "y": 69, - "w": 34, - "h": 36 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 34, - "h": 36 - }, - "frame": { - "x": 101, - "y": 69, - "w": 34, - "h": 36 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 34, - "h": 36 - }, - "frame": { - "x": 101, - "y": 69, - "w": 34, - "h": 36 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 34, - "h": 36 - }, - "frame": { - "x": 101, - "y": 69, - "w": 34, - "h": 36 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 33, - "h": 36 - }, - "frame": { - "x": 135, - "y": 69, - "w": 33, - "h": 36 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 33, - "h": 36 - }, - "frame": { - "x": 168, - "y": 69, - "w": 33, - "h": 36 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 34, - "h": 36 - }, - "frame": { - "x": 0, - "y": 102, - "w": 34, - "h": 36 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 34, - "h": 36 - }, - "frame": { - "x": 34, - "y": 103, - "w": 34, - "h": 36 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 33, - "h": 37 - }, - "frame": { - "x": 68, - "y": 103, - "w": 33, - "h": 37 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 34, - "h": 39 - }, - "frame": { - "x": 101, - "y": 105, - "w": 34, - "h": 39 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 31, - "h": 40 - }, - "frame": { - "x": 135, - "y": 105, - "w": 31, - "h": 40 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 31, - "h": 41 - }, - "frame": { - "x": 166, - "y": 105, - "w": 31, - "h": 41 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 32, - "h": 42 - }, - "frame": { - "x": 0, - "y": 138, - "w": 32, - "h": 42 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 32, - "h": 42 - }, - "frame": { - "x": 32, - "y": 139, - "w": 32, - "h": 42 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 31, - "h": 42 - }, - "frame": { - "x": 64, - "y": 140, - "w": 31, - "h": 42 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 31, - "h": 42 - }, - "frame": { - "x": 95, - "y": 144, - "w": 31, - "h": 42 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 32, - "h": 43 - }, - "frame": { - "x": 126, - "y": 145, - "w": 32, - "h": 43 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 34, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 31, - "h": 43 - }, - "frame": { - "x": 158, - "y": 146, - "w": 31, - "h": 43 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:5076cf3500c6d9392a3e656db2bcf661:8a870f3a4f8085495687c4af91e0de7e:9c4d208e6c2f857bfb0b23b8eea3326c$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 1, "y": 81, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 131, "y": 81, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 37, "y": 83, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 109, "y": 117, "w": 34, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 34, "h": 33 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 35, "y": 119, "w": 34, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 34, "h": 33 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 35, "y": 154, "w": 34, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 34, "h": 32 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 71, "y": 156, "w": 34, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 34, "h": 32 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 167, "y": 43, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 34, "h": 35 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 71, "y": 121, "w": 34, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 34, "h": 33 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 141, "y": 158, "w": 34, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 32 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 73, "y": 85, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 1, "y": 81, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 131, "y": 81, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 37, "y": 83, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 109, "y": 117, "w": 34, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 34, "h": 33 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 35, "y": 119, "w": 34, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 34, "h": 33 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 35, "y": 154, "w": 34, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 34, "h": 32 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 71, "y": 156, "w": 34, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 34, "h": 32 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 167, "y": 43, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 34, "h": 35 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 71, "y": 121, "w": 34, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 34, "h": 33 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 141, "y": 158, "w": 34, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 32 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 73, "y": 85, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 1, "y": 81, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 131, "y": 81, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 37, "y": 83, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 109, "y": 117, "w": 34, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 34, "h": 33 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 35, "y": 119, "w": 34, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 34, "h": 33 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 35, "y": 154, "w": 34, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 34, "h": 32 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 71, "y": 156, "w": 34, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 34, "h": 32 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 167, "y": 43, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 34, "h": 35 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 71, "y": 121, "w": 34, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 34, "h": 33 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 141, "y": 158, "w": 34, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 32 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 73, "y": 85, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 1, "y": 81, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 131, "y": 81, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 37, "y": 83, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 109, "y": 117, "w": 34, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 34, "h": 33 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 35, "y": 119, "w": 34, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 34, "h": 33 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 35, "y": 154, "w": 34, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 34, "h": 32 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 71, "y": 156, "w": 34, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 34, "h": 32 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 167, "y": 43, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 34, "h": 35 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 71, "y": 121, "w": 34, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 34, "h": 33 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 141, "y": 158, "w": 34, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 32 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 73, "y": 85, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 1, "y": 81, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 131, "y": 81, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 37, "y": 83, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 109, "y": 117, "w": 34, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 34, "h": 33 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 35, "y": 119, "w": 34, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 34, "h": 33 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 35, "y": 154, "w": 34, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 34, "h": 32 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 71, "y": 156, "w": 34, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 34, "h": 32 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 167, "y": 43, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 34, "h": 35 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 71, "y": 121, "w": 34, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 34, "h": 33 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 141, "y": 158, "w": 34, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 32 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 73, "y": 85, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 1, "y": 81, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 200 + }, + { + "filename": "0057.png", + "frame": { "x": 67, "y": 1, "w": 33, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 33, "h": 38 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 1, "y": 1, "w": 31, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 31, "h": 41 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 34, "y": 1, "w": 31, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 31, "h": 41 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 50 + }, + { + "filename": "0060.png", + "frame": { "x": 102, "y": 1, "w": 31, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 31, "h": 40 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 167, "y": 1, "w": 30, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 30, "h": 40 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 167, "y": 80, "w": 30, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 30, "h": 39 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 67, "y": 41, "w": 30, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 30, "h": 40 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 50 + }, + { + "filename": "0064.png", + "frame": { "x": 135, "y": 1, "w": 30, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 30, "h": 41 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 50 + }, + { + "filename": "0065.png", + "frame": { "x": 99, "y": 43, "w": 30, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 30, "h": 40 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 50 + }, + { + "filename": "0066.png", + "frame": { "x": 1, "y": 155, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 32, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 50 + }, + { + "filename": "0067.png", + "frame": { "x": 107, "y": 189, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 32, "h": 32 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 50 + }, + { + "filename": "0068.png", + "frame": { "x": 1, "y": 191, "w": 31, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 16, "w": 31, "h": 31 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 50 + }, + { + "filename": "0069.png", + "frame": { "x": 69, "y": 190, "w": 31, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 31, "h": 33 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 35, "y": 188, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 32, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 750 + }, + { + "filename": "0071.png", + "frame": { "x": 145, "y": 121, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 1, "y": 117, "w": 32, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 32, "h": 36 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 107, "y": 152, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 1, "y": 44, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 34, "h": 35 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 131, "y": 44, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 34, "h": 35 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 1, "y": 81, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 1, "y": 81, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 1, "y": 81, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 34, "h": 34 }, + "sourceSize": { "w": 34, "h": 47 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "656.png", + "format": "I8", + "size": { "w": 202, "h": 224 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/656.png b/public/images/pokemon/exp/back/shiny/656.png index 47b18020ffe..0c974e52a98 100644 Binary files a/public/images/pokemon/exp/back/shiny/656.png and b/public/images/pokemon/exp/back/shiny/656.png differ diff --git a/public/images/pokemon/exp/back/shiny/661.json b/public/images/pokemon/exp/back/shiny/661.json index 1199eaead4b..be82a4ce425 100644 --- a/public/images/pokemon/exp/back/shiny/661.json +++ b/public/images/pokemon/exp/back/shiny/661.json @@ -1,356 +1,398 @@ -{ - "textures": [ - { - "image": "661.png", - "format": "RGBA8888", - "size": { - "w": 68, - "h": 68 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - }, - "frame": { - "x": 0, - "y": 34, - "w": 32, - "h": 34 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - }, - "frame": { - "x": 0, - "y": 34, - "w": 32, - "h": 34 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - }, - "frame": { - "x": 0, - "y": 34, - "w": 32, - "h": 34 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - }, - "frame": { - "x": 0, - "y": 34, - "w": 32, - "h": 34 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - }, - "frame": { - "x": 0, - "y": 34, - "w": 32, - "h": 34 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - }, - "frame": { - "x": 0, - "y": 34, - "w": 32, - "h": 34 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 34 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 34 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 34 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 34 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - }, - "frame": { - "x": 32, - "y": 34, - "w": 32, - "h": 34 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 34 - }, - "frame": { - "x": 32, - "y": 34, - "w": 32, - "h": 34 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:622c17fd3933b7d7d1eddb422fc24fc5:684446320bdfd8fa492ed28395182fcc:186d621a544ea0e0e2e0bd57975a29b1$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 66, "y": 114, "w": 33, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 33, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 117, "w": 33, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 33, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 39, "w": 34, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 34, "h": 39 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0004.png", + "frame": { "x": 105, "y": 36, "w": 35, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 35, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0005.png", + "frame": { "x": 33, "y": 118, "w": 33, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 33, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0006.png", + "frame": { "x": 66, "y": 114, "w": 33, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 33, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0007.png", + "frame": { "x": 68, "y": 75, "w": 33, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 33, "h": 39 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0008.png", + "frame": { "x": 35, "y": 0, "w": 34, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 34, "h": 40 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0009.png", + "frame": { "x": 0, "y": 0, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 35, "h": 39 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 78, "w": 33, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 33, "h": 39 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0011.png", + "frame": { "x": 66, "y": 114, "w": 33, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 33, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 117, "w": 33, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 33, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0013.png", + "frame": { "x": 34, "y": 40, "w": 34, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 34, "h": 39 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0014.png", + "frame": { "x": 69, "y": 37, "w": 35, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 35, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0015.png", + "frame": { "x": 33, "y": 118, "w": 33, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 33, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0016.png", + "frame": { "x": 66, "y": 114, "w": 33, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 33, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0017.png", + "frame": { "x": 68, "y": 75, "w": 33, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 33, "h": 39 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0018.png", + "frame": { "x": 35, "y": 0, "w": 34, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 34, "h": 40 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0019.png", + "frame": { "x": 0, "y": 0, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 35, "h": 39 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0020.png", + "frame": { "x": 0, "y": 78, "w": 33, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 33, "h": 39 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0021.png", + "frame": { "x": 66, "y": 114, "w": 33, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 33, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0022.png", + "frame": { "x": 0, "y": 117, "w": 33, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 33, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0023.png", + "frame": { "x": 34, "y": 40, "w": 34, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 34, "h": 39 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0024.png", + "frame": { "x": 69, "y": 37, "w": 35, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 35, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0025.png", + "frame": { "x": 33, "y": 118, "w": 33, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 33, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0026.png", + "frame": { "x": 66, "y": 114, "w": 33, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 33, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0027.png", + "frame": { "x": 68, "y": 75, "w": 33, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 33, "h": 39 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0028.png", + "frame": { "x": 35, "y": 0, "w": 34, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 34, "h": 40 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0029.png", + "frame": { "x": 0, "y": 0, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 35, "h": 39 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0030.png", + "frame": { "x": 0, "y": 78, "w": 33, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 33, "h": 39 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0031.png", + "frame": { "x": 66, "y": 114, "w": 33, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 33, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0032.png", + "frame": { "x": 33, "y": 79, "w": 33, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 33, "h": 39 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0033.png", + "frame": { "x": 33, "y": 79, "w": 33, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 33, "h": 39 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0034.png", + "frame": { "x": 101, "y": 112, "w": 34, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 34, "h": 37 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0035.png", + "frame": { "x": 69, "y": 0, "w": 36, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 36, "h": 37 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0036.png", + "frame": { "x": 105, "y": 0, "w": 37, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 37, "h": 36 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0037.png", + "frame": { "x": 69, "y": 0, "w": 36, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 36, "h": 37 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0038.png", + "frame": { "x": 105, "y": 0, "w": 37, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 37, "h": 36 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0039.png", + "frame": { "x": 69, "y": 0, "w": 36, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 36, "h": 37 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0040.png", + "frame": { "x": 105, "y": 0, "w": 37, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 37, "h": 36 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0041.png", + "frame": { "x": 69, "y": 0, "w": 36, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 36, "h": 37 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0042.png", + "frame": { "x": 104, "y": 74, "w": 34, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 34, "h": 38 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + }, + { + "filename": "0043.png", + "frame": { "x": 33, "y": 79, "w": 33, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 33, "h": 39 }, + "sourceSize": { "w": 38, "h": 40 }, + "duration": 120 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "661.png", + "format": "I8", + "size": { "w": 142, "h": 156 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/661.png b/public/images/pokemon/exp/back/shiny/661.png index a76bde31ab3..a38de0cabe4 100644 Binary files a/public/images/pokemon/exp/back/shiny/661.png and b/public/images/pokemon/exp/back/shiny/661.png differ diff --git a/public/images/pokemon/exp/back/shiny/662.json b/public/images/pokemon/exp/back/shiny/662.json index f2154fb0de0..52cc70bbe5d 100644 --- a/public/images/pokemon/exp/back/shiny/662.json +++ b/public/images/pokemon/exp/back/shiny/662.json @@ -1,671 +1,254 @@ -{ - "textures": [ - { - "image": "662.png", - "format": "RGBA8888", - "size": { - "w": 154, - "h": 154 - }, - "scale": 1, - "frames": [ - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 2, - "y": 16, - "w": 56, - "h": 37 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 37 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 2, - "y": 16, - "w": 56, - "h": 37 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 37 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 2, - "y": 16, - "w": 56, - "h": 37 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 37 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 2, - "y": 16, - "w": 56, - "h": 37 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 37 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 8, - "y": 17, - "w": 49, - "h": 48 - }, - "frame": { - "x": 56, - "y": 0, - "w": 49, - "h": 48 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 8, - "y": 17, - "w": 49, - "h": 48 - }, - "frame": { - "x": 56, - "y": 0, - "w": 49, - "h": 48 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 8, - "y": 17, - "w": 49, - "h": 48 - }, - "frame": { - "x": 105, - "y": 0, - "w": 49, - "h": 48 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 8, - "y": 17, - "w": 49, - "h": 48 - }, - "frame": { - "x": 105, - "y": 0, - "w": 49, - "h": 48 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 57, - "h": 50 - }, - "frame": { - "x": 0, - "y": 48, - "w": 57, - "h": 50 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 57, - "h": 50 - }, - "frame": { - "x": 0, - "y": 48, - "w": 57, - "h": 50 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 57, - "h": 50 - }, - "frame": { - "x": 0, - "y": 48, - "w": 57, - "h": 50 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 57, - "h": 50 - }, - "frame": { - "x": 0, - "y": 48, - "w": 57, - "h": 50 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 57, - "h": 51 - }, - "frame": { - "x": 57, - "y": 48, - "w": 57, - "h": 51 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 57, - "h": 51 - }, - "frame": { - "x": 57, - "y": 48, - "w": 57, - "h": 51 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 57, - "h": 51 - }, - "frame": { - "x": 57, - "y": 48, - "w": 57, - "h": 51 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 57, - "h": 51 - }, - "frame": { - "x": 57, - "y": 48, - "w": 57, - "h": 51 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 57, - "h": 52 - }, - "frame": { - "x": 0, - "y": 98, - "w": 57, - "h": 52 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 57, - "h": 52 - }, - "frame": { - "x": 0, - "y": 98, - "w": 57, - "h": 52 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 57, - "h": 52 - }, - "frame": { - "x": 0, - "y": 98, - "w": 57, - "h": 52 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 57, - "h": 52 - }, - "frame": { - "x": 0, - "y": 98, - "w": 57, - "h": 52 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 57, - "h": 52 - }, - "frame": { - "x": 0, - "y": 98, - "w": 57, - "h": 52 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 57, - "h": 52 - }, - "frame": { - "x": 0, - "y": 98, - "w": 57, - "h": 52 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 57, - "h": 52 - }, - "frame": { - "x": 0, - "y": 98, - "w": 57, - "h": 52 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 57, - "h": 52 - }, - "frame": { - "x": 0, - "y": 98, - "w": 57, - "h": 52 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 57, - "h": 52 - }, - "frame": { - "x": 0, - "y": 98, - "w": 57, - "h": 52 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 57, - "h": 52 - }, - "frame": { - "x": 0, - "y": 98, - "w": 57, - "h": 52 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 57, - "h": 52 - }, - "frame": { - "x": 0, - "y": 98, - "w": 57, - "h": 52 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 57, - "h": 52 - }, - "frame": { - "x": 57, - "y": 99, - "w": 57, - "h": 52 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 57, - "h": 52 - }, - "frame": { - "x": 57, - "y": 99, - "w": 57, - "h": 52 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 57, - "h": 52 - }, - "frame": { - "x": 57, - "y": 99, - "w": 57, - "h": 52 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 57, - "h": 52 - }, - "frame": { - "x": 57, - "y": 99, - "w": 57, - "h": 52 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:14a51ba69bd1aad179c85e117e323d5e:a3d65c092dec9149a9e5c39aed3a7dc3:e3da2dd0277c18bcc713dc6dd2460c87$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 1, "y": 70, "w": 53, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 16, "w": 53, "h": 62 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 212, "y": 70, "w": 52, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 18, "w": 52, "h": 63 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 247, "y": 204, "w": 46, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 36, "w": 46, "h": 51 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 1, "y": 196, "w": 49, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 33, "w": 49, "h": 49 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 56, "y": 1, "w": 56, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 56, "h": 65 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 224, "y": 1, "w": 52, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 52, "h": 68 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 107, "y": 68, "w": 48, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 48, "h": 69 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 277, "y": 1, "w": 51, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 51, "h": 68 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 113, "y": 1, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 18, "w": 55, "h": 66 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 48, "y": 249, "w": 44, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 31, "w": 44, "h": 50 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 191, "y": 248, "w": 47, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 27, "w": 47, "h": 49 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 169, "y": 1, "w": 54, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 54, "h": 67 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 101, "y": 208, "w": 45, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 18, "w": 45, "h": 51 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 1, "y": 246, "w": 46, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 13, "w": 46, "h": 51 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 1, "y": 1, "w": 54, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 54, "h": 68 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 56, "y": 67, "w": 50, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 50, "h": 69 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 265, "y": 70, "w": 47, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 6, "w": 47, "h": 69 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 102, "y": 138, "w": 44, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 11, "w": 44, "h": 69 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 147, "y": 193, "w": 43, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 14, "w": 43, "h": 69 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 191, "y": 199, "w": 55, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 31, "w": 55, "h": 48 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 51, "y": 200, "w": 49, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 27, "w": 49, "h": 48 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 156, "y": 69, "w": 55, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 11, "w": 55, "h": 60 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 1, "y": 133, "w": 50, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 6, "w": 50, "h": 62 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 208, "y": 134, "w": 48, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 48, "h": 64 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 257, "y": 140, "w": 48, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 6, "w": 48, "h": 63 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 52, "y": 137, "w": 49, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 49, "h": 62 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 156, "y": 130, "w": 51, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 13, "w": 51, "h": 62 }, + "sourceSize": { "w": 70, "h": 87 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "662.png", + "format": "I8", + "size": { "w": 329, "h": 300 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/662.png b/public/images/pokemon/exp/back/shiny/662.png index e662b3198a6..b914dac31b1 100644 Binary files a/public/images/pokemon/exp/back/shiny/662.png and b/public/images/pokemon/exp/back/shiny/662.png differ diff --git a/public/images/pokemon/exp/back/shiny/663.json b/public/images/pokemon/exp/back/shiny/663.json index d464b333f20..48526624362 100644 --- a/public/images/pokemon/exp/back/shiny/663.json +++ b/public/images/pokemon/exp/back/shiny/663.json @@ -1,1700 +1,731 @@ -{ - "textures": [ - { - "image": "663.png", - "format": "RGBA8888", - "size": { - "w": 302, - "h": 302 - }, - "scale": 1, - "frames": [ - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 6, - "y": 33, - "w": 103, - "h": 59 - }, - "frame": { - "x": 0, - "y": 0, - "w": 103, - "h": 59 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 6, - "y": 33, - "w": 103, - "h": 59 - }, - "frame": { - "x": 0, - "y": 0, - "w": 103, - "h": 59 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 6, - "y": 33, - "w": 103, - "h": 59 - }, - "frame": { - "x": 0, - "y": 0, - "w": 103, - "h": 59 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 6, - "y": 33, - "w": 103, - "h": 59 - }, - "frame": { - "x": 0, - "y": 0, - "w": 103, - "h": 59 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 6, - "y": 33, - "w": 103, - "h": 59 - }, - "frame": { - "x": 0, - "y": 0, - "w": 103, - "h": 59 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 6, - "y": 33, - "w": 103, - "h": 59 - }, - "frame": { - "x": 0, - "y": 0, - "w": 103, - "h": 59 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 6, - "y": 33, - "w": 103, - "h": 59 - }, - "frame": { - "x": 0, - "y": 0, - "w": 103, - "h": 59 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 6, - "y": 33, - "w": 103, - "h": 59 - }, - "frame": { - "x": 0, - "y": 0, - "w": 103, - "h": 59 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 6, - "y": 33, - "w": 103, - "h": 59 - }, - "frame": { - "x": 0, - "y": 0, - "w": 103, - "h": 59 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 6, - "y": 33, - "w": 103, - "h": 59 - }, - "frame": { - "x": 0, - "y": 0, - "w": 103, - "h": 59 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 1, - "y": 29, - "w": 112, - "h": 60 - }, - "frame": { - "x": 103, - "y": 0, - "w": 112, - "h": 60 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 1, - "y": 29, - "w": 112, - "h": 60 - }, - "frame": { - "x": 103, - "y": 0, - "w": 112, - "h": 60 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 1, - "y": 29, - "w": 112, - "h": 60 - }, - "frame": { - "x": 103, - "y": 0, - "w": 112, - "h": 60 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 1, - "y": 29, - "w": 112, - "h": 60 - }, - "frame": { - "x": 103, - "y": 0, - "w": 112, - "h": 60 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 1, - "y": 29, - "w": 112, - "h": 60 - }, - "frame": { - "x": 103, - "y": 0, - "w": 112, - "h": 60 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 1, - "y": 29, - "w": 112, - "h": 60 - }, - "frame": { - "x": 103, - "y": 0, - "w": 112, - "h": 60 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 84, - "h": 93 - }, - "frame": { - "x": 215, - "y": 0, - "w": 84, - "h": 93 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 84, - "h": 93 - }, - "frame": { - "x": 215, - "y": 0, - "w": 84, - "h": 93 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 84, - "h": 93 - }, - "frame": { - "x": 215, - "y": 0, - "w": 84, - "h": 93 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 84, - "h": 93 - }, - "frame": { - "x": 215, - "y": 0, - "w": 84, - "h": 93 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 84, - "h": 93 - }, - "frame": { - "x": 215, - "y": 0, - "w": 84, - "h": 93 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 84, - "h": 93 - }, - "frame": { - "x": 215, - "y": 0, - "w": 84, - "h": 93 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 84, - "h": 93 - }, - "frame": { - "x": 215, - "y": 0, - "w": 84, - "h": 93 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 84, - "h": 93 - }, - "frame": { - "x": 215, - "y": 0, - "w": 84, - "h": 93 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 84, - "h": 93 - }, - "frame": { - "x": 215, - "y": 0, - "w": 84, - "h": 93 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 84, - "h": 93 - }, - "frame": { - "x": 215, - "y": 0, - "w": 84, - "h": 93 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 0, - "y": 29, - "w": 112, - "h": 62 - }, - "frame": { - "x": 0, - "y": 60, - "w": 112, - "h": 62 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 0, - "y": 29, - "w": 112, - "h": 62 - }, - "frame": { - "x": 0, - "y": 60, - "w": 112, - "h": 62 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 0, - "y": 29, - "w": 112, - "h": 62 - }, - "frame": { - "x": 0, - "y": 60, - "w": 112, - "h": 62 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 0, - "y": 29, - "w": 112, - "h": 62 - }, - "frame": { - "x": 0, - "y": 60, - "w": 112, - "h": 62 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 0, - "y": 29, - "w": 112, - "h": 62 - }, - "frame": { - "x": 0, - "y": 60, - "w": 112, - "h": 62 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 0, - "y": 29, - "w": 112, - "h": 62 - }, - "frame": { - "x": 0, - "y": 60, - "w": 112, - "h": 62 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 98, - "h": 90 - }, - "frame": { - "x": 112, - "y": 60, - "w": 98, - "h": 90 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 98, - "h": 90 - }, - "frame": { - "x": 112, - "y": 60, - "w": 98, - "h": 90 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 98, - "h": 90 - }, - "frame": { - "x": 112, - "y": 60, - "w": 98, - "h": 90 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 98, - "h": 90 - }, - "frame": { - "x": 112, - "y": 60, - "w": 98, - "h": 90 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 98, - "h": 90 - }, - "frame": { - "x": 112, - "y": 60, - "w": 98, - "h": 90 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 98, - "h": 90 - }, - "frame": { - "x": 112, - "y": 60, - "w": 98, - "h": 90 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 92, - "h": 93 - }, - "frame": { - "x": 210, - "y": 93, - "w": 92, - "h": 93 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 92, - "h": 93 - }, - "frame": { - "x": 210, - "y": 93, - "w": 92, - "h": 93 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 92, - "h": 93 - }, - "frame": { - "x": 210, - "y": 93, - "w": 92, - "h": 93 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 92, - "h": 93 - }, - "frame": { - "x": 210, - "y": 93, - "w": 92, - "h": 93 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 92, - "h": 93 - }, - "frame": { - "x": 210, - "y": 93, - "w": 92, - "h": 93 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 92, - "h": 93 - }, - "frame": { - "x": 210, - "y": 93, - "w": 92, - "h": 93 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 92, - "h": 93 - }, - "frame": { - "x": 210, - "y": 93, - "w": 92, - "h": 93 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 92, - "h": 93 - }, - "frame": { - "x": 210, - "y": 93, - "w": 92, - "h": 93 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 92, - "h": 93 - }, - "frame": { - "x": 210, - "y": 93, - "w": 92, - "h": 93 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 92, - "h": 93 - }, - "frame": { - "x": 210, - "y": 93, - "w": 92, - "h": 93 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 92, - "h": 93 - }, - "frame": { - "x": 210, - "y": 93, - "w": 92, - "h": 93 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 92, - "h": 93 - }, - "frame": { - "x": 210, - "y": 93, - "w": 92, - "h": 93 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 1, - "y": 28, - "w": 109, - "h": 65 - }, - "frame": { - "x": 0, - "y": 122, - "w": 109, - "h": 65 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 1, - "y": 28, - "w": 109, - "h": 65 - }, - "frame": { - "x": 0, - "y": 122, - "w": 109, - "h": 65 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 1, - "y": 28, - "w": 109, - "h": 65 - }, - "frame": { - "x": 0, - "y": 122, - "w": 109, - "h": 65 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 1, - "y": 28, - "w": 109, - "h": 65 - }, - "frame": { - "x": 0, - "y": 122, - "w": 109, - "h": 65 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 1, - "y": 28, - "w": 109, - "h": 65 - }, - "frame": { - "x": 0, - "y": 122, - "w": 109, - "h": 65 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 1, - "y": 28, - "w": 109, - "h": 65 - }, - "frame": { - "x": 0, - "y": 122, - "w": 109, - "h": 65 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 1, - "y": 28, - "w": 109, - "h": 65 - }, - "frame": { - "x": 0, - "y": 122, - "w": 109, - "h": 65 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 1, - "y": 28, - "w": 109, - "h": 65 - }, - "frame": { - "x": 0, - "y": 122, - "w": 109, - "h": 65 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 1, - "y": 28, - "w": 109, - "h": 65 - }, - "frame": { - "x": 0, - "y": 122, - "w": 109, - "h": 65 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 1, - "y": 28, - "w": 109, - "h": 65 - }, - "frame": { - "x": 0, - "y": 122, - "w": 109, - "h": 65 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 97, - "h": 91 - }, - "frame": { - "x": 109, - "y": 150, - "w": 97, - "h": 91 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 97, - "h": 91 - }, - "frame": { - "x": 109, - "y": 150, - "w": 97, - "h": 91 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 97, - "h": 91 - }, - "frame": { - "x": 109, - "y": 150, - "w": 97, - "h": 91 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 97, - "h": 91 - }, - "frame": { - "x": 109, - "y": 150, - "w": 97, - "h": 91 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 97, - "h": 91 - }, - "frame": { - "x": 109, - "y": 150, - "w": 97, - "h": 91 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 97, - "h": 91 - }, - "frame": { - "x": 109, - "y": 150, - "w": 97, - "h": 91 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 97, - "h": 91 - }, - "frame": { - "x": 109, - "y": 150, - "w": 97, - "h": 91 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 97, - "h": 91 - }, - "frame": { - "x": 109, - "y": 150, - "w": 97, - "h": 91 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 97, - "h": 91 - }, - "frame": { - "x": 109, - "y": 150, - "w": 97, - "h": 91 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 97, - "h": 91 - }, - "frame": { - "x": 109, - "y": 150, - "w": 97, - "h": 91 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 11, - "y": 8, - "w": 105, - "h": 83 - }, - "frame": { - "x": 0, - "y": 187, - "w": 105, - "h": 83 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 11, - "y": 8, - "w": 105, - "h": 83 - }, - "frame": { - "x": 0, - "y": 187, - "w": 105, - "h": 83 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 11, - "y": 8, - "w": 105, - "h": 83 - }, - "frame": { - "x": 0, - "y": 187, - "w": 105, - "h": 83 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 11, - "y": 8, - "w": 105, - "h": 83 - }, - "frame": { - "x": 0, - "y": 187, - "w": 105, - "h": 83 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 11, - "y": 8, - "w": 105, - "h": 83 - }, - "frame": { - "x": 0, - "y": 187, - "w": 105, - "h": 83 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 11, - "y": 8, - "w": 105, - "h": 83 - }, - "frame": { - "x": 0, - "y": 187, - "w": 105, - "h": 83 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 11, - "y": 8, - "w": 105, - "h": 83 - }, - "frame": { - "x": 0, - "y": 187, - "w": 105, - "h": 83 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 11, - "y": 8, - "w": 105, - "h": 83 - }, - "frame": { - "x": 0, - "y": 187, - "w": 105, - "h": 83 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 11, - "y": 8, - "w": 105, - "h": 83 - }, - "frame": { - "x": 0, - "y": 187, - "w": 105, - "h": 83 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 116, - "h": 93 - }, - "spriteSourceSize": { - "x": 11, - "y": 8, - "w": 105, - "h": 83 - }, - "frame": { - "x": 0, - "y": 187, - "w": 105, - "h": 83 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:cee80289834c8acf0ea6d754131cf471:08d47f0b9be8c73bf8d3f74f4dc0a00d:3790d8d72a704a789cc594688d98802e$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 298, "y": 0, "w": 90, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 0, "w": 95, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 95, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0003.png", + "frame": { "x": 193, "y": 0, "w": 104, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 11, "w": 104, "h": 81 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0004.png", + "frame": { "x": 276, "y": 92, "w": 111, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 32, "w": 111, "h": 60 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 90, "w": 107, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 31, "w": 107, "h": 64 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0006.png", + "frame": { "x": 276, "y": 153, "w": 110, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 32, "w": 110, "h": 58 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 155, "w": 101, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 36, "w": 101, "h": 57 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0008.png", + "frame": { "x": 96, "y": 0, "w": 96, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 5, "w": 96, "h": 88 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0009.png", + "frame": { "x": 298, "y": 0, "w": 90, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0010.png", + "frame": { "x": 193, "y": 82, "w": 82, "h": 93 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 2, "w": 82, "h": 93 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 298, "y": 0, "w": 90, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 0, "w": 95, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 95, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0013.png", + "frame": { "x": 193, "y": 0, "w": 104, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 11, "w": 104, "h": 81 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0014.png", + "frame": { "x": 276, "y": 92, "w": 111, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 32, "w": 111, "h": 60 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0015.png", + "frame": { "x": 0, "y": 90, "w": 107, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 31, "w": 107, "h": 64 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0016.png", + "frame": { "x": 276, "y": 153, "w": 110, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 32, "w": 110, "h": 58 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 155, "w": 101, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 36, "w": 101, "h": 57 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0018.png", + "frame": { "x": 96, "y": 0, "w": 96, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 5, "w": 96, "h": 88 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0019.png", + "frame": { "x": 298, "y": 0, "w": 90, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0020.png", + "frame": { "x": 193, "y": 82, "w": 82, "h": 93 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 2, "w": 82, "h": 93 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 298, "y": 0, "w": 90, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0022.png", + "frame": { "x": 0, "y": 0, "w": 95, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 95, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0023.png", + "frame": { "x": 193, "y": 0, "w": 104, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 11, "w": 104, "h": 81 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0024.png", + "frame": { "x": 276, "y": 92, "w": 111, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 32, "w": 111, "h": 60 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 90, "w": 107, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 31, "w": 107, "h": 64 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0026.png", + "frame": { "x": 276, "y": 153, "w": 110, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 32, "w": 110, "h": 58 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 155, "w": 101, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 36, "w": 101, "h": 57 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0028.png", + "frame": { "x": 96, "y": 0, "w": 96, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 5, "w": 96, "h": 88 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0029.png", + "frame": { "x": 298, "y": 0, "w": 90, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0030.png", + "frame": { "x": 193, "y": 82, "w": 82, "h": 93 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 2, "w": 82, "h": 93 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 298, "y": 0, "w": 90, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 0, "w": 95, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 95, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0033.png", + "frame": { "x": 193, "y": 0, "w": 104, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 11, "w": 104, "h": 81 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0034.png", + "frame": { "x": 276, "y": 92, "w": 111, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 32, "w": 111, "h": 60 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0035.png", + "frame": { "x": 0, "y": 90, "w": 107, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 31, "w": 107, "h": 64 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0036.png", + "frame": { "x": 276, "y": 153, "w": 110, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 32, "w": 110, "h": 58 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 155, "w": 101, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 36, "w": 101, "h": 57 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0038.png", + "frame": { "x": 96, "y": 0, "w": 96, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 5, "w": 96, "h": 88 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0039.png", + "frame": { "x": 298, "y": 0, "w": 90, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0040.png", + "frame": { "x": 193, "y": 82, "w": 82, "h": 93 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 2, "w": 82, "h": 93 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 298, "y": 0, "w": 90, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0042.png", + "frame": { "x": 0, "y": 0, "w": 95, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 95, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0043.png", + "frame": { "x": 193, "y": 0, "w": 104, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 11, "w": 104, "h": 81 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0044.png", + "frame": { "x": 276, "y": 92, "w": 111, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 32, "w": 111, "h": 60 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0045.png", + "frame": { "x": 0, "y": 90, "w": 107, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 31, "w": 107, "h": 64 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0046.png", + "frame": { "x": 276, "y": 153, "w": 110, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 32, "w": 110, "h": 58 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0047.png", + "frame": { "x": 0, "y": 155, "w": 101, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 36, "w": 101, "h": 57 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0048.png", + "frame": { "x": 96, "y": 0, "w": 96, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 5, "w": 96, "h": 88 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0049.png", + "frame": { "x": 298, "y": 0, "w": 90, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0050.png", + "frame": { "x": 193, "y": 82, "w": 82, "h": 93 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 2, "w": 82, "h": 93 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 298, "y": 0, "w": 90, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0052.png", + "frame": { "x": 0, "y": 0, "w": 95, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 95, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0053.png", + "frame": { "x": 193, "y": 0, "w": 104, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 11, "w": 104, "h": 81 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0054.png", + "frame": { "x": 276, "y": 92, "w": 111, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 32, "w": 111, "h": 60 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 90, "w": 107, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 31, "w": 107, "h": 64 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0056.png", + "frame": { "x": 276, "y": 153, "w": 110, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 32, "w": 110, "h": 58 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0057.png", + "frame": { "x": 0, "y": 155, "w": 101, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 36, "w": 101, "h": 57 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0058.png", + "frame": { "x": 96, "y": 0, "w": 96, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 5, "w": 96, "h": 88 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0059.png", + "frame": { "x": 298, "y": 0, "w": 90, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0060.png", + "frame": { "x": 193, "y": 82, "w": 82, "h": 93 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 2, "w": 82, "h": 93 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 0, "y": 0, "w": 95, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 95, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0062.png", + "frame": { "x": 193, "y": 0, "w": 104, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 11, "w": 104, "h": 81 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0063.png", + "frame": { "x": 0, "y": 90, "w": 107, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 31, "w": 107, "h": 64 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0064.png", + "frame": { "x": 0, "y": 155, "w": 101, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 36, "w": 101, "h": 57 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0065.png", + "frame": { "x": 193, "y": 82, "w": 82, "h": 93 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 2, "w": 82, "h": 93 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0066.png", + "frame": { "x": 0, "y": 0, "w": 95, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 95, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0067.png", + "frame": { "x": 193, "y": 0, "w": 104, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 11, "w": 104, "h": 81 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0068.png", + "frame": { "x": 0, "y": 90, "w": 107, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 31, "w": 107, "h": 64 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0069.png", + "frame": { "x": 0, "y": 155, "w": 101, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 36, "w": 101, "h": 57 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0070.png", + "frame": { "x": 193, "y": 82, "w": 82, "h": 93 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 2, "w": 82, "h": 93 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0071.png", + "frame": { "x": 0, "y": 0, "w": 95, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 95, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0072.png", + "frame": { "x": 193, "y": 0, "w": 104, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 11, "w": 104, "h": 81 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0073.png", + "frame": { "x": 0, "y": 90, "w": 107, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 31, "w": 107, "h": 64 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0074.png", + "frame": { "x": 0, "y": 155, "w": 101, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 36, "w": 101, "h": 57 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0075.png", + "frame": { "x": 193, "y": 82, "w": 82, "h": 93 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 2, "w": 82, "h": 93 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0076.png", + "frame": { "x": 0, "y": 0, "w": 95, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 95, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0077.png", + "frame": { "x": 193, "y": 0, "w": 104, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 11, "w": 104, "h": 81 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0078.png", + "frame": { "x": 0, "y": 90, "w": 107, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 31, "w": 107, "h": 64 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0079.png", + "frame": { "x": 0, "y": 155, "w": 101, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 36, "w": 101, "h": 57 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0080.png", + "frame": { "x": 193, "y": 82, "w": 82, "h": 93 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 2, "w": 82, "h": 93 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "663.png", + "format": "I8", + "size": { "w": 388, "h": 212 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/663.png b/public/images/pokemon/exp/back/shiny/663.png index bb8a7a63b47..ddb4658f34f 100644 Binary files a/public/images/pokemon/exp/back/shiny/663.png and b/public/images/pokemon/exp/back/shiny/663.png differ diff --git a/public/images/pokemon/exp/back/shiny/664.json b/public/images/pokemon/exp/back/shiny/664.json index 737a874aeef..61c85d30239 100644 --- a/public/images/pokemon/exp/back/shiny/664.json +++ b/public/images/pokemon/exp/back/shiny/664.json @@ -1,104 +1,110 @@ -{ - "textures": [ - { - "image": "664.png", - "format": "RGBA8888", - "size": { - "w": 72, - "h": 72 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 24, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 24, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 24, - "h": 44 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 24, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 24, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 24, - "h": 44 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 24, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 24, - "h": 44 - }, - "frame": { - "x": 24, - "y": 0, - "w": 24, - "h": 44 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 24, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 24, - "h": 42 - }, - "frame": { - "x": 48, - "y": 0, - "w": 24, - "h": 42 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:601a4fb542614963fb9749e3339712b0:f6208a116912601a698682c3723dc18c:596e7d5b15b1bf041c4d7f6707c8ff49$" - } -} \ No newline at end of file +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 54, "y": 49, "w": 26, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 26, "h": 49 }, + "sourceSize": { "w": 28, "h": 49 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 80, "y": 96, "w": 26, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 26, "h": 48 }, + "sourceSize": { "w": 28, "h": 49 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 97, "w": 26, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 26, "h": 48 }, + "sourceSize": { "w": 28, "h": 49 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 0, "y": 49, "w": 27, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 27, "h": 48 }, + "sourceSize": { "w": 28, "h": 49 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 26, "y": 97, "w": 26, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 26, "h": 47 }, + "sourceSize": { "w": 28, "h": 49 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 80, "y": 49, "w": 27, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 27, "h": 47 }, + "sourceSize": { "w": 28, "h": 49 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 27, "y": 49, "w": 27, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 27, "h": 48 }, + "sourceSize": { "w": 28, "h": 49 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 28, "y": 0, "w": 27, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 27, "h": 49 }, + "sourceSize": { "w": 28, "h": 49 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 55, "y": 0, "w": 27, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 27, "h": 49 }, + "sourceSize": { "w": 28, "h": 49 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 0, "w": 28, "h": 49 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 28, "h": 49 }, + "sourceSize": { "w": 28, "h": 49 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 82, "y": 0, "w": 27, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 27, "h": 49 }, + "sourceSize": { "w": 28, "h": 49 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "664.png", + "format": "I8", + "size": { "w": 109, "h": 145 }, + "scale": "1" + } +} diff --git a/public/images/pokemon/exp/back/shiny/664.png b/public/images/pokemon/exp/back/shiny/664.png index 84657407fb6..ad6b46a574e 100644 Binary files a/public/images/pokemon/exp/back/shiny/664.png and b/public/images/pokemon/exp/back/shiny/664.png differ diff --git a/public/images/pokemon/exp/back/shiny/665.json b/public/images/pokemon/exp/back/shiny/665.json index 74db8ba58cd..fe2659dbf6d 100644 --- a/public/images/pokemon/exp/back/shiny/665.json +++ b/public/images/pokemon/exp/back/shiny/665.json @@ -1,188 +1,596 @@ -{ - "textures": [ - { - "image": "665.png", - "format": "RGBA8888", - "size": { - "w": 107, - "h": 107 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 36 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 36 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 36 - }, - "frame": { - "x": 0, - "y": 36, - "w": 38, - "h": 36 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 36 - }, - "frame": { - "x": 0, - "y": 36, - "w": 38, - "h": 36 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 36 - }, - "frame": { - "x": 0, - "y": 36, - "w": 38, - "h": 36 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 38, - "h": 35 - }, - "frame": { - "x": 0, - "y": 72, - "w": 38, - "h": 35 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 36 - }, - "frame": { - "x": 38, - "y": 0, - "w": 37, - "h": 36 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 36 - }, - "frame": { - "x": 38, - "y": 36, - "w": 37, - "h": 36 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 38, - "h": 35 - }, - "frame": { - "x": 38, - "y": 72, - "w": 38, - "h": 35 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:33adc9cf726011c23993f48b34d8072e:5df22173a3e399c0e4fd7f67a42a829c:a72e6c94514c750d7462eab6b08ee591$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 86, "y": 73, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 6, "w": 34, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 358, "y": 69, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 0, "y": 71, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 120, "y": 101, "w": 36, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 8, "w": 36, "h": 32 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 262, "y": 102, "w": 36, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 9, "w": 36, "h": 31 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 120, "y": 101, "w": 36, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 8, "w": 36, "h": 32 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 71, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 358, "y": 69, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 86, "y": 73, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 6, "w": 34, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 86, "y": 73, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 6, "w": 34, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 358, "y": 69, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 71, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 120, "y": 101, "w": 36, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 8, "w": 36, "h": 32 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 262, "y": 102, "w": 36, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 9, "w": 36, "h": 31 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 120, "y": 101, "w": 36, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 8, "w": 36, "h": 32 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 0, "y": 71, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 358, "y": 69, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 86, "y": 73, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 6, "w": 34, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 86, "y": 73, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 6, "w": 34, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 358, "y": 69, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 71, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 120, "y": 101, "w": 36, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 8, "w": 36, "h": 32 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 262, "y": 102, "w": 36, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 9, "w": 36, "h": 31 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 120, "y": 101, "w": 36, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 8, "w": 36, "h": 32 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 71, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 358, "y": 69, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 86, "y": 73, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 6, "w": 34, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 160, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 290, "y": 67, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 160, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 47, "y": 40, "w": 39, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 5, "w": 39, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 343, "y": 34, "w": 45, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 5, "w": 45, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 227, "y": 33, "w": 63, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 63, "h": 36 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 80, "y": 0, "w": 74, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 74, "h": 40 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 154, "y": 0, "w": 81, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 81, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 235, "y": 0, "w": 81, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 81, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 0, "w": 80, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 80, "h": 38 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 154, "y": 33, "w": 73, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 73, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 316, "y": 0, "w": 73, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 73, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 290, "y": 34, "w": 53, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 7, "w": 53, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 0, "y": 38, "w": 47, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 7, "w": 47, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 86, "y": 40, "w": 40, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 7, "w": 40, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 156, "y": 101, "w": 34, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 7, "w": 34, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 36, "y": 75, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 6, "w": 34, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 194, "y": 69, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 228, "y": 69, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 324, "y": 69, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 126, "y": 66, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "665.png", + "format": "I8", + "size": { "w": 394, "h": 134 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/665.png b/public/images/pokemon/exp/back/shiny/665.png index 098b20d3d82..6b8ae18d7a0 100644 Binary files a/public/images/pokemon/exp/back/shiny/665.png and b/public/images/pokemon/exp/back/shiny/665.png differ diff --git a/public/images/pokemon/exp/back/shiny/666-archipelago.json b/public/images/pokemon/exp/back/shiny/666-archipelago.json index 5207ba45af5..817696f70a1 100644 --- a/public/images/pokemon/exp/back/shiny/666-archipelago.json +++ b/public/images/pokemon/exp/back/shiny/666-archipelago.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-archipelago.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 42, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 42, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 42, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:d3b3934e858033f670ae2a24ec4d347a:f014942f9212da6fadbc8a0c94f2dc11:80cdb6dd219378a41ccf5c2acc7e7786$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-archipelago.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/666-archipelago.png b/public/images/pokemon/exp/back/shiny/666-archipelago.png index cfc3f0012b6..ada5bd02bdb 100644 Binary files a/public/images/pokemon/exp/back/shiny/666-archipelago.png and b/public/images/pokemon/exp/back/shiny/666-archipelago.png differ diff --git a/public/images/pokemon/exp/back/shiny/666-continental.json b/public/images/pokemon/exp/back/shiny/666-continental.json index a20a1baa32b..fc21deb6978 100644 --- a/public/images/pokemon/exp/back/shiny/666-continental.json +++ b/public/images/pokemon/exp/back/shiny/666-continental.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-continental.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 13, - "y": 1, - "w": 46, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 46, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 13, - "y": 1, - "w": 46, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 46, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 46, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:06c65586a6c76ae16868407b3530cc3e:c9740628cc5f7aa0301821f74d9d2e17:23aaac2256d564b9d8a58d7de70397c3$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-continental.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/666-continental.png b/public/images/pokemon/exp/back/shiny/666-continental.png index 80fdfbd42fe..a70b86e6f4e 100644 Binary files a/public/images/pokemon/exp/back/shiny/666-continental.png and b/public/images/pokemon/exp/back/shiny/666-continental.png differ diff --git a/public/images/pokemon/exp/back/shiny/666-elegant.json b/public/images/pokemon/exp/back/shiny/666-elegant.json index e4372fe6e79..35c20315153 100644 --- a/public/images/pokemon/exp/back/shiny/666-elegant.json +++ b/public/images/pokemon/exp/back/shiny/666-elegant.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-elegant.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 44, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 44, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 44, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 44, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 44, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:2f5780697c633c5f2db2d90012b0bfaa:3df5d06e71f1f48664b1d3f70b589ce5:d6b035048c66474f6236a3bc923faa7b$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-elegant.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/666-elegant.png b/public/images/pokemon/exp/back/shiny/666-elegant.png index a63ccd8a4fd..f1493354831 100644 Binary files a/public/images/pokemon/exp/back/shiny/666-elegant.png and b/public/images/pokemon/exp/back/shiny/666-elegant.png differ diff --git a/public/images/pokemon/exp/back/shiny/666-fancy.json b/public/images/pokemon/exp/back/shiny/666-fancy.json index da0238946be..54113df4b51 100644 --- a/public/images/pokemon/exp/back/shiny/666-fancy.json +++ b/public/images/pokemon/exp/back/shiny/666-fancy.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-fancy.png", - "format": "RGBA8888", - "size": { - "w": 133, - "h": 133 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 65, - "h": 66 - }, - "frame": { - "x": 0, - "y": 0, - "w": 65, - "h": 66 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 69 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 41, - "h": 67 - }, - "frame": { - "x": 65, - "y": 0, - "w": 41, - "h": 67 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 69 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 41, - "h": 67 - }, - "frame": { - "x": 0, - "y": 66, - "w": 41, - "h": 67 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 65, - "h": 66 - }, - "frame": { - "x": 41, - "y": 67, - "w": 65, - "h": 66 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:f6d28d4fec94007c70d1812b69e8c9a4:cff02079419826e1cb2148e331588d89:6d5edff9a806f43feff031c9919c9aca$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-fancy.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/666-fancy.png b/public/images/pokemon/exp/back/shiny/666-fancy.png index c84443bbe4e..6a50c5817a8 100644 Binary files a/public/images/pokemon/exp/back/shiny/666-fancy.png and b/public/images/pokemon/exp/back/shiny/666-fancy.png differ diff --git a/public/images/pokemon/exp/back/shiny/666-garden.json b/public/images/pokemon/exp/back/shiny/666-garden.json index 1a44f773e4f..4fcc5ab0ad1 100644 --- a/public/images/pokemon/exp/back/shiny/666-garden.json +++ b/public/images/pokemon/exp/back/shiny/666-garden.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-garden.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 42, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 42, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 42, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:b8e1d103e0e6ac306d2c8f447067ec3c:8483540406726b13fa42ad566b4f6991:f13a1a8fa0a411aa91fccb833ac8719c$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-garden.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/666-garden.png b/public/images/pokemon/exp/back/shiny/666-garden.png index b37c6f8c84e..92214cc4d75 100644 Binary files a/public/images/pokemon/exp/back/shiny/666-garden.png and b/public/images/pokemon/exp/back/shiny/666-garden.png differ diff --git a/public/images/pokemon/exp/back/shiny/666-high-plains.json b/public/images/pokemon/exp/back/shiny/666-high-plains.json index 898cbf94515..56a90a01899 100644 --- a/public/images/pokemon/exp/back/shiny/666-high-plains.json +++ b/public/images/pokemon/exp/back/shiny/666-high-plains.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-high-plains.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 43, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:6a10c59dc5b4abef78a2379364bae874:239b86e13316e6d8fc74b42cc7f657d9:2abdb5d19b2754e3daa24b6ff3ed2c2c$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-high-plains.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/666-high-plains.png b/public/images/pokemon/exp/back/shiny/666-high-plains.png index e23f879af0c..80e02eede13 100644 Binary files a/public/images/pokemon/exp/back/shiny/666-high-plains.png and b/public/images/pokemon/exp/back/shiny/666-high-plains.png differ diff --git a/public/images/pokemon/exp/back/shiny/666-icy-snow.json b/public/images/pokemon/exp/back/shiny/666-icy-snow.json index 4922c7c1fb6..b44f33bb07f 100644 --- a/public/images/pokemon/exp/back/shiny/666-icy-snow.json +++ b/public/images/pokemon/exp/back/shiny/666-icy-snow.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-icy-snow.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 43, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:a19b20c8ff121729b5b9dfb470e1e166:abf786c03cda88b39336d9172fd788ec:fb1e8b97806dc5c60ac6adf0ae48199b$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-icy-snow.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/666-icy-snow.png b/public/images/pokemon/exp/back/shiny/666-icy-snow.png index 2ba96cc9ac3..1fe8305f068 100644 Binary files a/public/images/pokemon/exp/back/shiny/666-icy-snow.png and b/public/images/pokemon/exp/back/shiny/666-icy-snow.png differ diff --git a/public/images/pokemon/exp/back/shiny/666-jungle.json b/public/images/pokemon/exp/back/shiny/666-jungle.json index 17254038662..51876d649da 100644 --- a/public/images/pokemon/exp/back/shiny/666-jungle.json +++ b/public/images/pokemon/exp/back/shiny/666-jungle.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-jungle.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 43, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:4318d523b7ff0df47aa749ed39d81402:f7d5cbe7029fecd1e518aa0501a8c8ba:c8686bcc5493911384853d54c85bfea1$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-jungle.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/666-jungle.png b/public/images/pokemon/exp/back/shiny/666-jungle.png index 3f1127f0265..1dbe65c02f2 100644 Binary files a/public/images/pokemon/exp/back/shiny/666-jungle.png and b/public/images/pokemon/exp/back/shiny/666-jungle.png differ diff --git a/public/images/pokemon/exp/back/shiny/666-marine.json b/public/images/pokemon/exp/back/shiny/666-marine.json index 5e89662d52f..a77fd76f1dd 100644 --- a/public/images/pokemon/exp/back/shiny/666-marine.json +++ b/public/images/pokemon/exp/back/shiny/666-marine.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-marine.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 42, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 42, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 42, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:df888a902e99f6aa55c8d9a1696f30ef:5e5db402df59c188bf1aaf4cc0b516d5:dc240f0acbf3d56fe8729dd1f703009f$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-marine.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/666-marine.png b/public/images/pokemon/exp/back/shiny/666-marine.png index 7e1a47124b9..1a69d6587da 100644 Binary files a/public/images/pokemon/exp/back/shiny/666-marine.png and b/public/images/pokemon/exp/back/shiny/666-marine.png differ diff --git a/public/images/pokemon/exp/back/shiny/666-meadow.json b/public/images/pokemon/exp/back/shiny/666-meadow.json index 54e872aee05..2c4a73b80cf 100644 --- a/public/images/pokemon/exp/back/shiny/666-meadow.json +++ b/public/images/pokemon/exp/back/shiny/666-meadow.json @@ -1,524 +1,119 @@ -{ - "textures": [ - { - "image": "666-meadow.png", - "format": "RGBA8888", - "size": { - "w": 234, - "h": 234 - }, - "scale": 1, - "frames": [ - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 78, - "h": 87 - }, - "frame": { - "x": 0, - "y": 0, - "w": 78, - "h": 87 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 78, - "h": 87 - }, - "frame": { - "x": 0, - "y": 0, - "w": 78, - "h": 87 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 78, - "h": 87 - }, - "frame": { - "x": 0, - "y": 0, - "w": 78, - "h": 87 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 78, - "h": 87 - }, - "frame": { - "x": 0, - "y": 0, - "w": 78, - "h": 87 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 70, - "h": 87 - }, - "frame": { - "x": 0, - "y": 87, - "w": 70, - "h": 87 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 70, - "h": 87 - }, - "frame": { - "x": 0, - "y": 87, - "w": 70, - "h": 87 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 70, - "h": 87 - }, - "frame": { - "x": 0, - "y": 87, - "w": 70, - "h": 87 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 70, - "h": 87 - }, - "frame": { - "x": 0, - "y": 87, - "w": 70, - "h": 87 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 11, - "y": 2, - "w": 63, - "h": 87 - }, - "frame": { - "x": 70, - "y": 87, - "w": 63, - "h": 87 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 11, - "y": 2, - "w": 63, - "h": 87 - }, - "frame": { - "x": 70, - "y": 87, - "w": 63, - "h": 87 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 11, - "y": 2, - "w": 63, - "h": 87 - }, - "frame": { - "x": 70, - "y": 87, - "w": 63, - "h": 87 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 11, - "y": 2, - "w": 63, - "h": 87 - }, - "frame": { - "x": 70, - "y": 87, - "w": 63, - "h": 87 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 14, - "y": 1, - "w": 57, - "h": 87 - }, - "frame": { - "x": 78, - "y": 0, - "w": 57, - "h": 87 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 14, - "y": 1, - "w": 57, - "h": 87 - }, - "frame": { - "x": 78, - "y": 0, - "w": 57, - "h": 87 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 14, - "y": 1, - "w": 57, - "h": 87 - }, - "frame": { - "x": 78, - "y": 0, - "w": 57, - "h": 87 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 14, - "y": 1, - "w": 57, - "h": 87 - }, - "frame": { - "x": 78, - "y": 0, - "w": 57, - "h": 87 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 84, - "h": 86 - }, - "frame": { - "x": 135, - "y": 0, - "w": 84, - "h": 86 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 84, - "h": 86 - }, - "frame": { - "x": 135, - "y": 0, - "w": 84, - "h": 86 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 52, - "h": 87 - }, - "frame": { - "x": 135, - "y": 86, - "w": 52, - "h": 87 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 52, - "h": 87 - }, - "frame": { - "x": 135, - "y": 86, - "w": 52, - "h": 87 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 52, - "h": 87 - }, - "frame": { - "x": 135, - "y": 86, - "w": 52, - "h": 87 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 52, - "h": 87 - }, - "frame": { - "x": 135, - "y": 86, - "w": 52, - "h": 87 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 20, - "y": 0, - "w": 47, - "h": 85 - }, - "frame": { - "x": 187, - "y": 86, - "w": 47, - "h": 85 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 20, - "y": 0, - "w": 47, - "h": 85 - }, - "frame": { - "x": 187, - "y": 86, - "w": 47, - "h": 85 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:217e1d90eca71c8b95407de1c156a5e6:e2b23be3d14960d78059a46f5b83304a:f8ac4807b4d6eef2256fa1b93e0f89ba$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-meadow.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/666-meadow.png b/public/images/pokemon/exp/back/shiny/666-meadow.png index 2e8a64be5d4..1148fa5a620 100644 Binary files a/public/images/pokemon/exp/back/shiny/666-meadow.png and b/public/images/pokemon/exp/back/shiny/666-meadow.png differ diff --git a/public/images/pokemon/exp/back/shiny/666-modern.json b/public/images/pokemon/exp/back/shiny/666-modern.json index c60078bd8ce..e0a00da6d81 100644 --- a/public/images/pokemon/exp/back/shiny/666-modern.json +++ b/public/images/pokemon/exp/back/shiny/666-modern.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-modern.png", - "format": "RGBA8888", - "size": { - "w": 132, - "h": 132 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 69 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 40, - "h": 67 - }, - "frame": { - "x": 0, - "y": 0, - "w": 40, - "h": 67 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 69 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 40, - "h": 67 - }, - "frame": { - "x": 0, - "y": 0, - "w": 40, - "h": 67 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 65, - "h": 66 - }, - "frame": { - "x": 40, - "y": 0, - "w": 65, - "h": 66 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 65, - "h": 66 - }, - "frame": { - "x": 40, - "y": 66, - "w": 65, - "h": 66 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:854759536c0175b34e9ed7b2513e55dd:9fbbae33832e3b62152c5bae85714a7a:5fc0e8f9a0750c2f3cfb5d6e7eca0d45$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-modern.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/666-modern.png b/public/images/pokemon/exp/back/shiny/666-modern.png index f9654fbeb02..d9f109c8ef9 100644 Binary files a/public/images/pokemon/exp/back/shiny/666-modern.png and b/public/images/pokemon/exp/back/shiny/666-modern.png differ diff --git a/public/images/pokemon/exp/back/shiny/666-monsoon.json b/public/images/pokemon/exp/back/shiny/666-monsoon.json index 78130a47159..117fad03b83 100644 --- a/public/images/pokemon/exp/back/shiny/666-monsoon.json +++ b/public/images/pokemon/exp/back/shiny/666-monsoon.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-monsoon.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 42, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 42, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 42, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:dcde8c849851ea64b2ceed92a82153e1:5a97106b9193dc2cda01b0448d9f2637:637bea52b465abfb8e5a576310b4dacc$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-monsoon.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/666-monsoon.png b/public/images/pokemon/exp/back/shiny/666-monsoon.png index 5d87fc101a8..cc5279545d5 100644 Binary files a/public/images/pokemon/exp/back/shiny/666-monsoon.png and b/public/images/pokemon/exp/back/shiny/666-monsoon.png differ diff --git a/public/images/pokemon/exp/back/shiny/666-ocean.json b/public/images/pokemon/exp/back/shiny/666-ocean.json index 1bf44996eef..8d23d70cd31 100644 --- a/public/images/pokemon/exp/back/shiny/666-ocean.json +++ b/public/images/pokemon/exp/back/shiny/666-ocean.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-ocean.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 43, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:dc3f54a39a4afa0ea28913252050d7c1:d856dfe44678a2ee4dc3d367a6658ad3:e7a0e68eab89c2013a3eb7f3b6fc0b33$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-ocean.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/666-ocean.png b/public/images/pokemon/exp/back/shiny/666-ocean.png index 8c6aeca189a..caabd9302ea 100644 Binary files a/public/images/pokemon/exp/back/shiny/666-ocean.png and b/public/images/pokemon/exp/back/shiny/666-ocean.png differ diff --git a/public/images/pokemon/exp/back/shiny/666-poke-ball.json b/public/images/pokemon/exp/back/shiny/666-poke-ball.json index 5c8715a8a1e..45564e59a32 100644 --- a/public/images/pokemon/exp/back/shiny/666-poke-ball.json +++ b/public/images/pokemon/exp/back/shiny/666-poke-ball.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-poke-ball.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 43, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:9df25dba5036e3cd48218e8de3a98074:4357b8b161f5f87776f4d39fcb3723f5:8ec14f129d1691b8da504a13b661abed$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-poke-ball.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/666-poke-ball.png b/public/images/pokemon/exp/back/shiny/666-poke-ball.png index 24907a5ef9f..30e2cbf8615 100644 Binary files a/public/images/pokemon/exp/back/shiny/666-poke-ball.png and b/public/images/pokemon/exp/back/shiny/666-poke-ball.png differ diff --git a/public/images/pokemon/exp/back/shiny/666-polar.json b/public/images/pokemon/exp/back/shiny/666-polar.json index ef69f49e390..abb6d0286f4 100644 --- a/public/images/pokemon/exp/back/shiny/666-polar.json +++ b/public/images/pokemon/exp/back/shiny/666-polar.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-polar.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 14, - "y": 1, - "w": 45, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 45, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 14, - "y": 1, - "w": 45, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 45, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 45, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:aab22d39518ad2f1b1621a5954e95674:958cacbba11b25f5b1e7fe9a9a40465d:eb7086e98f867c6592e4b161835da18b$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-polar.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/666-polar.png b/public/images/pokemon/exp/back/shiny/666-polar.png index b2f00a2a6df..c9f4fe642ee 100644 Binary files a/public/images/pokemon/exp/back/shiny/666-polar.png and b/public/images/pokemon/exp/back/shiny/666-polar.png differ diff --git a/public/images/pokemon/exp/back/shiny/666-savanna.json b/public/images/pokemon/exp/back/shiny/666-savanna.json index 24638119724..8fa326da1b4 100644 --- a/public/images/pokemon/exp/back/shiny/666-savanna.json +++ b/public/images/pokemon/exp/back/shiny/666-savanna.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-savanna.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 43, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:0c7fd4a8c1137a2566fabe2f53dac4c4:295a7bdde494b6106f9c73b649be6098:625a4f0dc001069326a75c6a381f93e6$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-savanna.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/666-savanna.png b/public/images/pokemon/exp/back/shiny/666-savanna.png index 5fcf8bc6d28..a69c0c18ae1 100644 Binary files a/public/images/pokemon/exp/back/shiny/666-savanna.png and b/public/images/pokemon/exp/back/shiny/666-savanna.png differ diff --git a/public/images/pokemon/exp/back/shiny/666-sun.json b/public/images/pokemon/exp/back/shiny/666-sun.json index a2ccb3c82d8..d41f22f541c 100644 --- a/public/images/pokemon/exp/back/shiny/666-sun.json +++ b/public/images/pokemon/exp/back/shiny/666-sun.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-sun.png", - "format": "RGBA8888", - "size": { - "w": 135, - "h": 135 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 65, - "h": 67 - }, - "frame": { - "x": 0, - "y": 0, - "w": 65, - "h": 67 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 70 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 41, - "h": 68 - }, - "frame": { - "x": 65, - "y": 0, - "w": 41, - "h": 68 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 70 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 41, - "h": 68 - }, - "frame": { - "x": 0, - "y": 67, - "w": 41, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 65, - "h": 67 - }, - "frame": { - "x": 41, - "y": 68, - "w": 65, - "h": 67 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:d1400564456ce432aab0ca4f263c336a:fba76efed9d6341c0b46301efd8cd8f5:8f5fdd0a698701f5391c5a3f67e303d6$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-sun.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/666-sun.png b/public/images/pokemon/exp/back/shiny/666-sun.png index 28918f2b59a..3914a0fe350 100644 Binary files a/public/images/pokemon/exp/back/shiny/666-sun.png and b/public/images/pokemon/exp/back/shiny/666-sun.png differ diff --git a/public/images/pokemon/exp/back/shiny/666-tundra.json b/public/images/pokemon/exp/back/shiny/666-tundra.json index 8361b7ca139..afa574f9e07 100644 --- a/public/images/pokemon/exp/back/shiny/666-tundra.json +++ b/public/images/pokemon/exp/back/shiny/666-tundra.json @@ -1,104 +1,119 @@ -{ - "textures": [ - { - "image": "666-tundra.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 13, - "y": 1, - "w": 46, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 46, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 13, - "y": 1, - "w": 46, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 46, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 46, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:b87511ba7b272729aecbf5eb18fe65cc:383836b7b2902a470e150b17bdd9bcfc:9779ed3adebc298af537dd64dc25fe00$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 2, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 71, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 124, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 140, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 71, "y": 71, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 71, "y": 2, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 2, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 51, "h": 67 }, + "sourceSize": { "w": 67, "h": 73 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "666-tundra.png", + "format": "I8", + "size": { "w": 262, "h": 140 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/666-tundra.png b/public/images/pokemon/exp/back/shiny/666-tundra.png index c33fbf1fc65..78316df8a8f 100644 Binary files a/public/images/pokemon/exp/back/shiny/666-tundra.png and b/public/images/pokemon/exp/back/shiny/666-tundra.png differ diff --git a/public/images/pokemon/exp/back/shiny/667.json b/public/images/pokemon/exp/back/shiny/667.json index cf561f26e4f..db9918ea230 100644 --- a/public/images/pokemon/exp/back/shiny/667.json +++ b/public/images/pokemon/exp/back/shiny/667.json @@ -1,1532 +1,659 @@ -{ - "textures": [ - { - "image": "667.png", - "format": "RGBA8888", - "size": { - "w": 160, - "h": 160 - }, - "scale": 1, - "frames": [ - { - "filename": "0056.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 43, - "y": 0, - "w": 43, - "h": 48 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 43, - "y": 0, - "w": 43, - "h": 48 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 43, - "y": 0, - "w": 43, - "h": 48 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 43, - "y": 0, - "w": 43, - "h": 48 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 43, - "y": 0, - "w": 43, - "h": 48 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 43, - "y": 0, - "w": 43, - "h": 48 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 43, - "y": 0, - "w": 43, - "h": 48 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 86, - "y": 0, - "w": 43, - "h": 48 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 86, - "y": 0, - "w": 43, - "h": 48 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 86, - "y": 0, - "w": 43, - "h": 48 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 86, - "y": 0, - "w": 43, - "h": 48 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 86, - "y": 0, - "w": 43, - "h": 48 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 86, - "y": 0, - "w": 43, - "h": 48 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 86, - "y": 0, - "w": 43, - "h": 48 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 41, - "h": 47 - }, - "frame": { - "x": 0, - "y": 48, - "w": 41, - "h": 47 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 41, - "h": 47 - }, - "frame": { - "x": 0, - "y": 48, - "w": 41, - "h": 47 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 41, - "h": 47 - }, - "frame": { - "x": 0, - "y": 48, - "w": 41, - "h": 47 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 41, - "h": 47 - }, - "frame": { - "x": 0, - "y": 48, - "w": 41, - "h": 47 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 41, - "h": 47 - }, - "frame": { - "x": 0, - "y": 48, - "w": 41, - "h": 47 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 41, - "h": 47 - }, - "frame": { - "x": 0, - "y": 48, - "w": 41, - "h": 47 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 41, - "h": 47 - }, - "frame": { - "x": 0, - "y": 48, - "w": 41, - "h": 47 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 41, - "h": 47 - }, - "frame": { - "x": 0, - "y": 48, - "w": 41, - "h": 47 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 41, - "h": 47 - }, - "frame": { - "x": 0, - "y": 48, - "w": 41, - "h": 47 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 41, - "h": 47 - }, - "frame": { - "x": 0, - "y": 48, - "w": 41, - "h": 47 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 41, - "h": 47 - }, - "frame": { - "x": 0, - "y": 48, - "w": 41, - "h": 47 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 41, - "h": 47 - }, - "frame": { - "x": 0, - "y": 48, - "w": 41, - "h": 47 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 41, - "h": 47 - }, - "frame": { - "x": 0, - "y": 48, - "w": 41, - "h": 47 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 41, - "h": 47 - }, - "frame": { - "x": 0, - "y": 48, - "w": 41, - "h": 47 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 40, - "h": 47 - }, - "frame": { - "x": 41, - "y": 48, - "w": 40, - "h": 47 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 40, - "h": 47 - }, - "frame": { - "x": 41, - "y": 48, - "w": 40, - "h": 47 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 40, - "h": 47 - }, - "frame": { - "x": 41, - "y": 48, - "w": 40, - "h": 47 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 40, - "h": 47 - }, - "frame": { - "x": 41, - "y": 48, - "w": 40, - "h": 47 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 40, - "h": 47 - }, - "frame": { - "x": 41, - "y": 48, - "w": 40, - "h": 47 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 40, - "h": 47 - }, - "frame": { - "x": 41, - "y": 48, - "w": 40, - "h": 47 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 40, - "h": 46 - }, - "frame": { - "x": 81, - "y": 48, - "w": 40, - "h": 46 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 40, - "h": 46 - }, - "frame": { - "x": 81, - "y": 48, - "w": 40, - "h": 46 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 40, - "h": 46 - }, - "frame": { - "x": 81, - "y": 48, - "w": 40, - "h": 46 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 40, - "h": 46 - }, - "frame": { - "x": 81, - "y": 48, - "w": 40, - "h": 46 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 40, - "h": 46 - }, - "frame": { - "x": 81, - "y": 48, - "w": 40, - "h": 46 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 40, - "h": 46 - }, - "frame": { - "x": 81, - "y": 48, - "w": 40, - "h": 46 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 40, - "h": 46 - }, - "frame": { - "x": 81, - "y": 94, - "w": 40, - "h": 46 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 40, - "h": 46 - }, - "frame": { - "x": 81, - "y": 94, - "w": 40, - "h": 46 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 40, - "h": 46 - }, - "frame": { - "x": 81, - "y": 94, - "w": 40, - "h": 46 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 40, - "h": 46 - }, - "frame": { - "x": 81, - "y": 94, - "w": 40, - "h": 46 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 40, - "h": 46 - }, - "frame": { - "x": 81, - "y": 94, - "w": 40, - "h": 46 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 40, - "h": 46 - }, - "frame": { - "x": 81, - "y": 94, - "w": 40, - "h": 46 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 40, - "h": 45 - }, - "frame": { - "x": 0, - "y": 95, - "w": 40, - "h": 45 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 40, - "h": 45 - }, - "frame": { - "x": 0, - "y": 95, - "w": 40, - "h": 45 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 40, - "h": 45 - }, - "frame": { - "x": 0, - "y": 95, - "w": 40, - "h": 45 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 40, - "h": 45 - }, - "frame": { - "x": 0, - "y": 95, - "w": 40, - "h": 45 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 40, - "h": 45 - }, - "frame": { - "x": 0, - "y": 95, - "w": 40, - "h": 45 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 40, - "h": 45 - }, - "frame": { - "x": 0, - "y": 95, - "w": 40, - "h": 45 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 39, - "h": 45 - }, - "frame": { - "x": 40, - "y": 95, - "w": 39, - "h": 45 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 39, - "h": 45 - }, - "frame": { - "x": 40, - "y": 95, - "w": 39, - "h": 45 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 39, - "h": 45 - }, - "frame": { - "x": 40, - "y": 95, - "w": 39, - "h": 45 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 39, - "h": 45 - }, - "frame": { - "x": 40, - "y": 95, - "w": 39, - "h": 45 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 39, - "h": 45 - }, - "frame": { - "x": 40, - "y": 95, - "w": 39, - "h": 45 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 39, - "h": 45 - }, - "frame": { - "x": 40, - "y": 95, - "w": 39, - "h": 45 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 39, - "h": 44 - }, - "frame": { - "x": 121, - "y": 48, - "w": 39, - "h": 44 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 39, - "h": 44 - }, - "frame": { - "x": 121, - "y": 48, - "w": 39, - "h": 44 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 39, - "h": 44 - }, - "frame": { - "x": 121, - "y": 48, - "w": 39, - "h": 44 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 39, - "h": 44 - }, - "frame": { - "x": 121, - "y": 48, - "w": 39, - "h": 44 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 39, - "h": 44 - }, - "frame": { - "x": 121, - "y": 48, - "w": 39, - "h": 44 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 39, - "h": 44 - }, - "frame": { - "x": 121, - "y": 48, - "w": 39, - "h": 44 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 39, - "h": 44 - }, - "frame": { - "x": 121, - "y": 92, - "w": 39, - "h": 44 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 39, - "h": 44 - }, - "frame": { - "x": 121, - "y": 92, - "w": 39, - "h": 44 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 39, - "h": 44 - }, - "frame": { - "x": 121, - "y": 92, - "w": 39, - "h": 44 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 39, - "h": 44 - }, - "frame": { - "x": 121, - "y": 92, - "w": 39, - "h": 44 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 39, - "h": 44 - }, - "frame": { - "x": 121, - "y": 92, - "w": 39, - "h": 44 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 39, - "h": 44 - }, - "frame": { - "x": 121, - "y": 92, - "w": 39, - "h": 44 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:4fbaee798794f5f6bc216941c6d420d9:a27205da0cc7ce20d4a4422df81b9109:02171d511e760c8a3e1b623ad6bf93f5$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 127, "y": 47, "w": 39, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 85, "y": 48, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 40, "y": 94, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 38, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 79, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 118, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 40, "y": 49, "w": 39, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 39, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 49, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 127, "y": 47, "w": 39, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 85, "y": 48, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0013.png", + "frame": { "x": 40, "y": 94, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 38, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0014.png", + "frame": { "x": 79, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0015.png", + "frame": { "x": 118, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0016.png", + "frame": { "x": 40, "y": 49, "w": 39, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 39, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 49, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0018.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0019.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0020.png", + "frame": { "x": 127, "y": 47, "w": 39, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0021.png", + "frame": { "x": 85, "y": 48, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0022.png", + "frame": { "x": 40, "y": 94, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 38, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0023.png", + "frame": { "x": 79, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0024.png", + "frame": { "x": 118, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0025.png", + "frame": { "x": 40, "y": 49, "w": 39, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 39, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 49, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0027.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0028.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0029.png", + "frame": { "x": 127, "y": 47, "w": 39, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0030.png", + "frame": { "x": 85, "y": 48, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0031.png", + "frame": { "x": 40, "y": 94, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 38, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0032.png", + "frame": { "x": 79, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0033.png", + "frame": { "x": 118, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0034.png", + "frame": { "x": 40, "y": 49, "w": 39, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 39, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0035.png", + "frame": { "x": 0, "y": 49, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0036.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0037.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0038.png", + "frame": { "x": 127, "y": 47, "w": 39, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0039.png", + "frame": { "x": 85, "y": 48, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0040.png", + "frame": { "x": 40, "y": 94, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 38, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0041.png", + "frame": { "x": 79, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0042.png", + "frame": { "x": 118, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0043.png", + "frame": { "x": 40, "y": 49, "w": 39, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 39, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0044.png", + "frame": { "x": 0, "y": 49, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0045.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0046.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0047.png", + "frame": { "x": 127, "y": 47, "w": 39, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0048.png", + "frame": { "x": 85, "y": 48, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0049.png", + "frame": { "x": 40, "y": 94, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 38, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0050.png", + "frame": { "x": 79, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0051.png", + "frame": { "x": 118, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0052.png", + "frame": { "x": 40, "y": 49, "w": 39, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 39, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0053.png", + "frame": { "x": 0, "y": 49, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0054.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0055.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0056.png", + "frame": { "x": 85, "y": 0, "w": 41, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 41, "h": 47 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0057.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0058.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 41, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0059.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0060.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 41, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0061.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0062.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 41, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0063.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0064.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 41, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0065.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0066.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 41, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0067.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0068.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 41, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0069.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0070.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 41, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0071.png", + "frame": { "x": 85, "y": 0, "w": 41, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 41, "h": 47 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0072.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "667.png", + "format": "I8", + "size": { "w": 167, "h": 138 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/667.png b/public/images/pokemon/exp/back/shiny/667.png index eb8b7eb756f..d44bed5ee65 100644 Binary files a/public/images/pokemon/exp/back/shiny/667.png and b/public/images/pokemon/exp/back/shiny/667.png differ diff --git a/public/images/pokemon/exp/back/shiny/668.json b/public/images/pokemon/exp/back/shiny/668.json index cd1665c7fe7..594e69189dc 100644 --- a/public/images/pokemon/exp/back/shiny/668.json +++ b/public/images/pokemon/exp/back/shiny/668.json @@ -1,146 +1,821 @@ -{ - "textures": [ - { - "image": "668.png", - "format": "RGBA8888", - "size": { - "w": 146, - "h": 146 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 73, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 73, - "h": 61 - }, - "frame": { - "x": 0, - "y": 0, - "w": 73, - "h": 61 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 73, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 73, - "h": 61 - }, - "frame": { - "x": 73, - "y": 0, - "w": 73, - "h": 61 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 73, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 73, - "h": 61 - }, - "frame": { - "x": 73, - "y": 0, - "w": 73, - "h": 61 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 73, - "h": 60 - }, - "frame": { - "x": 0, - "y": 61, - "w": 73, - "h": 60 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 73, - "h": 60 - }, - "frame": { - "x": 0, - "y": 61, - "w": 73, - "h": 60 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 73, - "h": 61 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 72, - "h": 59 - }, - "frame": { - "x": 73, - "y": 61, - "w": 72, - "h": 59 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:0e20693ecfc704a58db8c8592fcdc9cc:659468d84f3cc98068a3454a7c68f1e4:947bf84d1af493c62e2cef45bb6c19ad$" - } -} \ No newline at end of file +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 152, "y": 292, "w": 74, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 74, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 303, "y": 221, "w": 74, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 74, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 383, "y": 147, "w": 75, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 75, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 233, "y": 74, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 459, "y": 147, "w": 75, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 75, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 315, "y": 0, "w": 76, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 76, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 387, "y": 74, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 392, "y": 0, "w": 75, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 75, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 237, "y": 0, "w": 77, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 77, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 0, "w": 78, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 78, "h": 74 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 79, "y": 0, "w": 78, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 78, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 158, "y": 0, "w": 78, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 78, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 0, "y": 75, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 458, "y": 220, "w": 75, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 75, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 150, "y": 364, "w": 73, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 73, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 152, "y": 292, "w": 74, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 74, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 303, "y": 221, "w": 74, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 74, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 383, "y": 147, "w": 75, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 75, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 233, "y": 74, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 459, "y": 147, "w": 75, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 75, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 315, "y": 0, "w": 76, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 76, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 387, "y": 74, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 392, "y": 0, "w": 75, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 75, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 237, "y": 0, "w": 77, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 77, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 0, "w": 78, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 78, "h": 74 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 79, "y": 0, "w": 78, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 78, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 158, "y": 0, "w": 78, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 78, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 0, "y": 75, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 458, "y": 220, "w": 75, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 75, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 150, "y": 364, "w": 73, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 73, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 152, "y": 292, "w": 74, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 74, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 303, "y": 221, "w": 74, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 74, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 383, "y": 147, "w": 75, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 75, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 233, "y": 74, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 459, "y": 147, "w": 75, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 75, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 315, "y": 0, "w": 76, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 76, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 387, "y": 74, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 392, "y": 0, "w": 75, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 75, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 237, "y": 0, "w": 77, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 77, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 0, "y": 0, "w": 78, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 78, "h": 74 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 79, "y": 0, "w": 78, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 78, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 158, "y": 0, "w": 78, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 78, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 75, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 458, "y": 220, "w": 75, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 75, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 150, "y": 364, "w": 73, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 73, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 152, "y": 292, "w": 74, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 74, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 303, "y": 221, "w": 74, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 74, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 383, "y": 147, "w": 75, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 75, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 233, "y": 74, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 459, "y": 147, "w": 75, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 75, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 315, "y": 0, "w": 76, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 76, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 387, "y": 74, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 392, "y": 0, "w": 75, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 75, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 237, "y": 0, "w": 77, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 77, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 0, "w": 78, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 78, "h": 74 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 79, "y": 0, "w": 78, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 78, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 158, "y": 0, "w": 78, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 78, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 0, "y": 75, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 458, "y": 220, "w": 75, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 75, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 150, "y": 364, "w": 73, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 73, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 152, "y": 292, "w": 74, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 74, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 458, "y": 292, "w": 74, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 74, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 303, "y": 364, "w": 74, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 74, "h": 70 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 227, "y": 294, "w": 75, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 75, "h": 70 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 378, "y": 364, "w": 75, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 75, "h": 69 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 303, "y": 293, "w": 75, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 75, "h": 70 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 379, "y": 293, "w": 75, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 75, "h": 70 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 454, "y": 364, "w": 72, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 72, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 70, "y": 365, "w": 68, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 68, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 291, "y": 435, "w": 62, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 2, "w": 62, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 378, "y": 434, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 2, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 224, "y": 365, "w": 66, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 66, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 0, "y": 365, "w": 69, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 69, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 229, "y": 220, "w": 73, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 73, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 468, "y": 0, "w": 75, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 75, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 308, "y": 147, "w": 74, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 74, "h": 73 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 0, "y": 148, "w": 75, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 75, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 383, "y": 220, "w": 74, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 74, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 231, "y": 147, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 79, "y": 74, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 156, "y": 74, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 310, "y": 74, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 464, "y": 74, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 77, "y": 147, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 154, "y": 147, "w": 76, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 76, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 76, "y": 220, "w": 75, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 75, "h": 72 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 152, "y": 220, "w": 76, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 76, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 0, "y": 221, "w": 75, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 75, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 0, "y": 293, "w": 74, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 74, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 75, "y": 293, "w": 74, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 74, "h": 71 }, + "sourceSize": { "w": 80, "h": 74 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "668.png", + "format": "I8", + "size": { "w": 543, "h": 507 }, + "scale": "1" + } +} diff --git a/public/images/pokemon/exp/back/shiny/668.png b/public/images/pokemon/exp/back/shiny/668.png index e2fa147e7fd..0ece333f235 100644 Binary files a/public/images/pokemon/exp/back/shiny/668.png and b/public/images/pokemon/exp/back/shiny/668.png differ diff --git a/public/images/pokemon/exp/back/shiny/672.json b/public/images/pokemon/exp/back/shiny/672.json index a8bb0336e34..f877b9abc2e 100644 --- a/public/images/pokemon/exp/back/shiny/672.json +++ b/public/images/pokemon/exp/back/shiny/672.json @@ -1,965 +1,479 @@ -{ - "textures": [ - { - "image": "672.png", - "format": "RGBA8888", - "size": { - "w": 282, - "h": 282 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 42, - "w": 41, - "h": 42 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 42, - "w": 41, - "h": 42 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 84, - "w": 41, - "h": 42 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 126, - "w": 41, - "h": 42 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 168, - "w": 41, - "h": 42 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 210, - "w": 41, - "h": 42 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 41, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 82, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 123, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 164, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 205, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 41, - "y": 42, - "w": 41, - "h": 42 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 41, - "y": 84, - "w": 41, - "h": 42 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 41, - "y": 126, - "w": 41, - "h": 42 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 41, - "h": 41 - }, - "frame": { - "x": 41, - "y": 168, - "w": 41, - "h": 41 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 41, - "h": 41 - }, - "frame": { - "x": 41, - "y": 209, - "w": 41, - "h": 41 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 41, - "h": 41 - }, - "frame": { - "x": 82, - "y": 42, - "w": 41, - "h": 41 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 41, - "h": 41 - }, - "frame": { - "x": 123, - "y": 42, - "w": 41, - "h": 41 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 41, - "h": 41 - }, - "frame": { - "x": 164, - "y": 42, - "w": 41, - "h": 41 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 41, - "h": 41 - }, - "frame": { - "x": 205, - "y": 42, - "w": 41, - "h": 41 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 41, - "h": 41 - }, - "frame": { - "x": 82, - "y": 83, - "w": 41, - "h": 41 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 41, - "h": 41 - }, - "frame": { - "x": 82, - "y": 124, - "w": 41, - "h": 41 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 40, - "h": 42 - }, - "frame": { - "x": 82, - "y": 165, - "w": 40, - "h": 42 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 40, - "h": 42 - }, - "frame": { - "x": 82, - "y": 207, - "w": 40, - "h": 42 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 40, - "h": 41 - }, - "frame": { - "x": 122, - "y": 165, - "w": 40, - "h": 41 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 40, - "h": 41 - }, - "frame": { - "x": 122, - "y": 206, - "w": 40, - "h": 41 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 40, - "h": 41 - }, - "frame": { - "x": 123, - "y": 83, - "w": 40, - "h": 41 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 40, - "h": 41 - }, - "frame": { - "x": 123, - "y": 124, - "w": 40, - "h": 41 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 40, - "h": 41 - }, - "frame": { - "x": 162, - "y": 165, - "w": 40, - "h": 41 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 40, - "h": 41 - }, - "frame": { - "x": 162, - "y": 206, - "w": 40, - "h": 41 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 40, - "h": 41 - }, - "frame": { - "x": 163, - "y": 83, - "w": 40, - "h": 41 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 41, - "h": 40 - }, - "frame": { - "x": 163, - "y": 124, - "w": 41, - "h": 40 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 41, - "h": 40 - }, - "frame": { - "x": 203, - "y": 83, - "w": 41, - "h": 40 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 40, - "h": 40 - }, - "frame": { - "x": 202, - "y": 164, - "w": 40, - "h": 40 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 40, - "h": 40 - }, - "frame": { - "x": 204, - "y": 123, - "w": 40, - "h": 40 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 40, - "h": 40 - }, - "frame": { - "x": 242, - "y": 163, - "w": 40, - "h": 40 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 40, - "h": 40 - }, - "frame": { - "x": 242, - "y": 203, - "w": 40, - "h": 40 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 40, - "h": 40 - }, - "frame": { - "x": 202, - "y": 204, - "w": 40, - "h": 40 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:e27a409eb13547a4ef97935b726389b3:05b6a88e37fb9d64101b9f9071f3afb5:2e4767b7cd134fc0ab1bb6e9eee82bc7$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 118, "y": 97, "w": 40, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 41, "y": 98, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 78, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 118, "y": 50, "w": 42, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 42, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 56, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 41, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 104, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 40, "y": 146, "w": 39, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 39, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 78, "y": 48, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 118, "y": 97, "w": 40, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 41, "y": 98, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 78, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 118, "y": 50, "w": 42, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 42, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 56, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 41, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 104, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 40, "y": 146, "w": 39, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 39, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 78, "y": 48, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 118, "y": 97, "w": 40, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 41, "y": 98, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 78, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 118, "y": 50, "w": 42, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 42, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 56, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 41, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 104, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 40, "y": 146, "w": 39, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 39, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 78, "y": 48, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 118, "y": 97, "w": 40, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 41, "y": 98, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 78, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 118, "y": 50, "w": 42, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 42, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 56, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 41, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 104, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 40, "y": 146, "w": 39, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 39, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 78, "y": 48, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 39, "y": 0, "w": 39, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 39, "h": 53 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 0, "w": 39, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 39, "h": 56 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 79, "y": 146, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 119, "y": 146, "w": 38, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 38, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 39, "y": 0, "w": 39, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 39, "h": 53 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 0, "w": 39, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 39, "h": 56 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 79, "y": 146, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 119, "y": 146, "w": 38, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 38, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "672.png", + "format": "I8", + "size": { "w": 160, "h": 195 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/672.png b/public/images/pokemon/exp/back/shiny/672.png index 2fab39d2aee..848b2e35962 100644 Binary files a/public/images/pokemon/exp/back/shiny/672.png and b/public/images/pokemon/exp/back/shiny/672.png differ diff --git a/public/images/pokemon/exp/back/shiny/674.json b/public/images/pokemon/exp/back/shiny/674.json deleted file mode 100644 index 52192847bdf..00000000000 --- a/public/images/pokemon/exp/back/shiny/674.json +++ /dev/null @@ -1,1175 +0,0 @@ -{ - "textures": [ - { - "image": "674.png", - "format": "RGBA8888", - "size": { - "w": 124, - "h": 124 - }, - "scale": 1, - "frames": [ - { - "filename": "0036.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 29, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 29, - "h": 42 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 29, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 29, - "h": 42 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 29, - "h": 42 - }, - "frame": { - "x": 29, - "y": 0, - "w": 29, - "h": 42 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 29, - "h": 42 - }, - "frame": { - "x": 29, - "y": 0, - "w": 29, - "h": 42 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 29, - "h": 42 - }, - "frame": { - "x": 29, - "y": 0, - "w": 29, - "h": 42 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 29, - "h": 42 - }, - "frame": { - "x": 58, - "y": 0, - "w": 29, - "h": 42 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 29, - "h": 42 - }, - "frame": { - "x": 58, - "y": 0, - "w": 29, - "h": 42 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 29, - "h": 42 - }, - "frame": { - "x": 58, - "y": 0, - "w": 29, - "h": 42 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 29, - "h": 42 - }, - "frame": { - "x": 58, - "y": 0, - "w": 29, - "h": 42 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 87, - "y": 0, - "w": 28, - "h": 42 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 87, - "y": 0, - "w": 28, - "h": 42 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 87, - "y": 0, - "w": 28, - "h": 42 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 87, - "y": 0, - "w": 28, - "h": 42 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 87, - "y": 0, - "w": 28, - "h": 42 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 87, - "y": 0, - "w": 28, - "h": 42 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 87, - "y": 0, - "w": 28, - "h": 42 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 29, - "h": 41 - }, - "frame": { - "x": 0, - "y": 42, - "w": 29, - "h": 41 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 29, - "h": 41 - }, - "frame": { - "x": 0, - "y": 42, - "w": 29, - "h": 41 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 29, - "h": 41 - }, - "frame": { - "x": 0, - "y": 42, - "w": 29, - "h": 41 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 29, - "h": 41 - }, - "frame": { - "x": 0, - "y": 42, - "w": 29, - "h": 41 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 29, - "h": 40 - }, - "frame": { - "x": 29, - "y": 42, - "w": 29, - "h": 40 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 29, - "h": 40 - }, - "frame": { - "x": 29, - "y": 42, - "w": 29, - "h": 40 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 58, - "y": 42, - "w": 28, - "h": 42 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 58, - "y": 42, - "w": 28, - "h": 42 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 58, - "y": 42, - "w": 28, - "h": 42 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 58, - "y": 42, - "w": 28, - "h": 42 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 58, - "y": 42, - "w": 28, - "h": 42 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 58, - "y": 42, - "w": 28, - "h": 42 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 58, - "y": 42, - "w": 28, - "h": 42 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 58, - "y": 42, - "w": 28, - "h": 42 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 58, - "y": 42, - "w": 28, - "h": 42 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 58, - "y": 42, - "w": 28, - "h": 42 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 58, - "y": 42, - "w": 28, - "h": 42 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 29, - "y": 82, - "w": 28, - "h": 42 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 28, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 28, - "h": 41 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 28, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 28, - "h": 41 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 28, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 28, - "h": 41 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 28, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 28, - "h": 41 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 28, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 28, - "h": 41 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 28, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 28, - "h": 41 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 28, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 28, - "h": 41 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 28, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 28, - "h": 41 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 28, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 28, - "h": 41 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 28, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 28, - "h": 41 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 28, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 28, - "h": 41 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 28, - "h": 40 - }, - "frame": { - "x": 57, - "y": 84, - "w": 28, - "h": 40 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 28, - "h": 40 - }, - "frame": { - "x": 57, - "y": 84, - "w": 28, - "h": 40 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 28, - "h": 40 - }, - "frame": { - "x": 57, - "y": 84, - "w": 28, - "h": 40 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 28, - "h": 40 - }, - "frame": { - "x": 57, - "y": 84, - "w": 28, - "h": 40 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 28, - "h": 40 - }, - "frame": { - "x": 57, - "y": 84, - "w": 28, - "h": 40 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 28, - "h": 40 - }, - "frame": { - "x": 57, - "y": 84, - "w": 28, - "h": 40 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 28, - "h": 40 - }, - "frame": { - "x": 85, - "y": 84, - "w": 28, - "h": 40 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 28, - "h": 41 - }, - "frame": { - "x": 86, - "y": 42, - "w": 28, - "h": 41 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 28, - "h": 41 - }, - "frame": { - "x": 86, - "y": 42, - "w": 28, - "h": 41 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 29, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 28, - "h": 41 - }, - "frame": { - "x": 86, - "y": 42, - "w": 28, - "h": 41 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:76841431bc0f022caab94cff146aa974:cfb5f5b4c165e509044ceea57b0d5b30:b823d10f1c9b4d501296982088ba63d6$" - } -} diff --git a/public/images/pokemon/exp/back/shiny/674.png b/public/images/pokemon/exp/back/shiny/674.png deleted file mode 100644 index 75e7b228137..00000000000 Binary files a/public/images/pokemon/exp/back/shiny/674.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/shiny/692.json b/public/images/pokemon/exp/back/shiny/692.json index 9e90079e613..801710c4861 100644 --- a/public/images/pokemon/exp/back/shiny/692.json +++ b/public/images/pokemon/exp/back/shiny/692.json @@ -1,1847 +1,794 @@ -{ - "textures": [ - { - "image": "692.png", - "format": "RGBA8888", - "size": { - "w": 168, - "h": 168 - }, - "scale": 1, - "frames": [ - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 61, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 61, - "h": 35 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 61, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 61, - "h": 35 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 61, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 61, - "h": 35 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 61, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 61, - "h": 35 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 61, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 61, - "h": 35 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 61, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 61, - "h": 35 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 61, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 61, - "h": 35 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 61, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 61, - "h": 35 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 61, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 61, - "h": 35 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 61, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 61, - "h": 35 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 61, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 61, - "h": 35 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 61, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 61, - "h": 35 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 61, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 61, - "h": 35 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 61, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 61, - "h": 35 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 61, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 61, - "h": 35 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 61, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 61, - "h": 35 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 61, - "h": 35 - }, - "frame": { - "x": 61, - "y": 0, - "w": 61, - "h": 35 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 61, - "h": 35 - }, - "frame": { - "x": 61, - "y": 0, - "w": 61, - "h": 35 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 61, - "h": 35 - }, - "frame": { - "x": 61, - "y": 0, - "w": 61, - "h": 35 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 61, - "h": 35 - }, - "frame": { - "x": 61, - "y": 0, - "w": 61, - "h": 35 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 61, - "h": 35 - }, - "frame": { - "x": 61, - "y": 0, - "w": 61, - "h": 35 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 61, - "h": 35 - }, - "frame": { - "x": 61, - "y": 0, - "w": 61, - "h": 35 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 61, - "h": 35 - }, - "frame": { - "x": 61, - "y": 0, - "w": 61, - "h": 35 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 61, - "h": 35 - }, - "frame": { - "x": 61, - "y": 0, - "w": 61, - "h": 35 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 60, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 60, - "h": 35 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 60, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 60, - "h": 35 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 60, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 60, - "h": 35 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 60, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 60, - "h": 35 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 60, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 60, - "h": 35 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 60, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 60, - "h": 35 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 60, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 60, - "h": 35 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 60, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 60, - "h": 35 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 60, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 60, - "h": 35 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 60, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 60, - "h": 35 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 60, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 60, - "h": 35 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 60, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 60, - "h": 35 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 60, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 60, - "h": 35 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 60, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 60, - "h": 35 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 60, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 60, - "h": 35 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 60, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 60, - "h": 35 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 60, - "h": 34 - }, - "frame": { - "x": 60, - "y": 35, - "w": 60, - "h": 34 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 60, - "h": 34 - }, - "frame": { - "x": 60, - "y": 35, - "w": 60, - "h": 34 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 60, - "h": 34 - }, - "frame": { - "x": 60, - "y": 35, - "w": 60, - "h": 34 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 60, - "h": 34 - }, - "frame": { - "x": 60, - "y": 35, - "w": 60, - "h": 34 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 60, - "h": 34 - }, - "frame": { - "x": 60, - "y": 35, - "w": 60, - "h": 34 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 60, - "h": 34 - }, - "frame": { - "x": 60, - "y": 35, - "w": 60, - "h": 34 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 60, - "h": 34 - }, - "frame": { - "x": 60, - "y": 35, - "w": 60, - "h": 34 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 60, - "h": 34 - }, - "frame": { - "x": 60, - "y": 35, - "w": 60, - "h": 34 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 60, - "h": 34 - }, - "frame": { - "x": 60, - "y": 35, - "w": 60, - "h": 34 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 60, - "h": 34 - }, - "frame": { - "x": 60, - "y": 35, - "w": 60, - "h": 34 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 60, - "h": 34 - }, - "frame": { - "x": 60, - "y": 35, - "w": 60, - "h": 34 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 60, - "h": 34 - }, - "frame": { - "x": 60, - "y": 35, - "w": 60, - "h": 34 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 60, - "h": 32 - }, - "frame": { - "x": 60, - "y": 69, - "w": 60, - "h": 32 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 60, - "h": 32 - }, - "frame": { - "x": 60, - "y": 69, - "w": 60, - "h": 32 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 59, - "h": 35 - }, - "frame": { - "x": 0, - "y": 70, - "w": 59, - "h": 35 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 59, - "h": 35 - }, - "frame": { - "x": 0, - "y": 70, - "w": 59, - "h": 35 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 59, - "h": 35 - }, - "frame": { - "x": 0, - "y": 70, - "w": 59, - "h": 35 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 59, - "h": 35 - }, - "frame": { - "x": 0, - "y": 70, - "w": 59, - "h": 35 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 59, - "h": 35 - }, - "frame": { - "x": 0, - "y": 70, - "w": 59, - "h": 35 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 59, - "h": 35 - }, - "frame": { - "x": 0, - "y": 70, - "w": 59, - "h": 35 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 59, - "h": 35 - }, - "frame": { - "x": 0, - "y": 70, - "w": 59, - "h": 35 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 59, - "h": 35 - }, - "frame": { - "x": 0, - "y": 70, - "w": 59, - "h": 35 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 59, - "h": 35 - }, - "frame": { - "x": 0, - "y": 105, - "w": 59, - "h": 35 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 59, - "h": 35 - }, - "frame": { - "x": 0, - "y": 105, - "w": 59, - "h": 35 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 59, - "h": 35 - }, - "frame": { - "x": 0, - "y": 105, - "w": 59, - "h": 35 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 59, - "h": 35 - }, - "frame": { - "x": 0, - "y": 105, - "w": 59, - "h": 35 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 58, - "h": 35 - }, - "frame": { - "x": 59, - "y": 101, - "w": 58, - "h": 35 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 58, - "h": 35 - }, - "frame": { - "x": 59, - "y": 101, - "w": 58, - "h": 35 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 58, - "h": 35 - }, - "frame": { - "x": 59, - "y": 101, - "w": 58, - "h": 35 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 58, - "h": 35 - }, - "frame": { - "x": 59, - "y": 101, - "w": 58, - "h": 35 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 58, - "h": 35 - }, - "frame": { - "x": 59, - "y": 101, - "w": 58, - "h": 35 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 58, - "h": 35 - }, - "frame": { - "x": 59, - "y": 101, - "w": 58, - "h": 35 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 58, - "h": 35 - }, - "frame": { - "x": 59, - "y": 101, - "w": 58, - "h": 35 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 58, - "h": 35 - }, - "frame": { - "x": 59, - "y": 101, - "w": 58, - "h": 35 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 58, - "h": 35 - }, - "frame": { - "x": 59, - "y": 101, - "w": 58, - "h": 35 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 58, - "h": 35 - }, - "frame": { - "x": 59, - "y": 101, - "w": 58, - "h": 35 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 58, - "h": 35 - }, - "frame": { - "x": 59, - "y": 101, - "w": 58, - "h": 35 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 58, - "h": 35 - }, - "frame": { - "x": 59, - "y": 101, - "w": 58, - "h": 35 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 58, - "h": 35 - }, - "frame": { - "x": 59, - "y": 101, - "w": 58, - "h": 35 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 58, - "h": 35 - }, - "frame": { - "x": 59, - "y": 101, - "w": 58, - "h": 35 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 58, - "h": 35 - }, - "frame": { - "x": 59, - "y": 101, - "w": 58, - "h": 35 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 58, - "h": 35 - }, - "frame": { - "x": 59, - "y": 101, - "w": 58, - "h": 35 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 58, - "h": 35 - }, - "frame": { - "x": 59, - "y": 101, - "w": 58, - "h": 35 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 58, - "h": 35 - }, - "frame": { - "x": 59, - "y": 101, - "w": 58, - "h": 35 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 58, - "h": 35 - }, - "frame": { - "x": 59, - "y": 101, - "w": 58, - "h": 35 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 58, - "h": 35 - }, - "frame": { - "x": 59, - "y": 101, - "w": 58, - "h": 35 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 57, - "h": 32 - }, - "frame": { - "x": 59, - "y": 136, - "w": 57, - "h": 32 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:8f5831496e68316e4cb3449a0eaf2bb1:e0a74859ab21c488d9f8cbabc8355b5a:2880def858c84cd859bedf13b0b49a33$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0002.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0003.png", + "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0004.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0005.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0006.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0007.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0008.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0009.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0010.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0011.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0012.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0013.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0014.png", + "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0015.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0016.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0017.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0018.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0019.png", + "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0020.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0021.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0022.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0023.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0024.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0025.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0026.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0027.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0028.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0029.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0030.png", + "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0031.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0032.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0033.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0034.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0035.png", + "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0036.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0037.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0038.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0039.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0040.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0041.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0042.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0043.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0044.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0045.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0046.png", + "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0047.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0048.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0049.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0050.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0051.png", + "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0052.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0053.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0054.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0055.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0056.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0057.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0058.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0059.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0060.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0063.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0064.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0065.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0066.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0067.png", + "frame": { "x": 59, "y": 37, "w": 57, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 57, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0068.png", + "frame": { "x": 59, "y": 37, "w": 57, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 57, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0069.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0070.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0071.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0072.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0073.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0074.png", + "frame": { "x": 60, "y": 72, "w": 58, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 58, "h": 31 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0075.png", + "frame": { "x": 119, "y": 72, "w": 56, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 56, "h": 31 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0076.png", + "frame": { "x": 60, "y": 72, "w": 58, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 58, "h": 31 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0077.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0078.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0079.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0080.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0081.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0082.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0083.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0084.png", + "frame": { "x": 59, "y": 37, "w": 57, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 57, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0085.png", + "frame": { "x": 59, "y": 37, "w": 57, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 57, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0086.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0087.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "692.png", + "format": "I8", + "size": { "w": 181, "h": 106 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/692.png b/public/images/pokemon/exp/back/shiny/692.png index a08f22af600..c1bb353a739 100644 Binary files a/public/images/pokemon/exp/back/shiny/692.png and b/public/images/pokemon/exp/back/shiny/692.png differ diff --git a/public/images/pokemon/exp/back/shiny/693.json b/public/images/pokemon/exp/back/shiny/693.json index b0fcec5a40b..6358a8908f6 100644 --- a/public/images/pokemon/exp/back/shiny/693.json +++ b/public/images/pokemon/exp/back/shiny/693.json @@ -1,230 +1,902 @@ -{ - "textures": [ - { - "image": "693.png", - "format": "RGBA8888", - "size": { - "w": 223, - "h": 223 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 76 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 90, - "h": 72 - }, - "frame": { - "x": 0, - "y": 0, - "w": 90, - "h": 72 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 76 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 90, - "h": 72 - }, - "frame": { - "x": 90, - "y": 0, - "w": 90, - "h": 72 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 76 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 90, - "h": 72 - }, - "frame": { - "x": 90, - "y": 0, - "w": 90, - "h": 72 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 76 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 90, - "h": 73 - }, - "frame": { - "x": 0, - "y": 72, - "w": 90, - "h": 73 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 76 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 90, - "h": 73 - }, - "frame": { - "x": 0, - "y": 72, - "w": 90, - "h": 73 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 76 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 90, - "h": 75 - }, - "frame": { - "x": 90, - "y": 72, - "w": 90, - "h": 75 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 90, - "h": 76 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 90, - "h": 75 - }, - "frame": { - "x": 90, - "y": 72, - "w": 90, - "h": 75 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 90, - "h": 76 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 90, - "h": 76 - }, - "frame": { - "x": 0, - "y": 145, - "w": 90, - "h": 76 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 90, - "h": 76 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 90, - "h": 76 - }, - "frame": { - "x": 0, - "y": 145, - "w": 90, - "h": 76 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 90, - "h": 76 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 90, - "h": 76 - }, - "frame": { - "x": 90, - "y": 147, - "w": 90, - "h": 76 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:e2d977eceb50e18ece349b4545bbecdd:e9880823c470ec1cfcd9a8f06892f017:9c1f9147e693c05eb4655590e9099679$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 472, "y": 70, "w": 88, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 0, "w": 88, "h": 72 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 378, "y": 138, "w": 91, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 8, "w": 91, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 187, "y": 260, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 379, "y": 257, "w": 95, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 16, "w": 95, "h": 60 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 572, "y": 1, "w": 98, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 98, "h": 66 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 478, "y": 1, "w": 94, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 11, "w": 94, "h": 69 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 560, "y": 132, "w": 93, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 19, "w": 93, "h": 64 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 474, "y": 257, "w": 90, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 22, "w": 90, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 95, "y": 197, "w": 94, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 21, "w": 94, "h": 62 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 99, "y": 1, "w": 94, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 71 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 291, "y": 1, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 6, "w": 90, "h": 73 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 288, "y": 74, "w": 90, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 11, "w": 90, "h": 67 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 368, "y": 317, "w": 88, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 17, "w": 88, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 96, "y": 259, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 472, "y": 70, "w": 88, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 0, "w": 88, "h": 72 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 378, "y": 138, "w": 91, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 8, "w": 91, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 187, "y": 260, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 379, "y": 257, "w": 95, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 16, "w": 95, "h": 60 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 572, "y": 1, "w": 98, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 98, "h": 66 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 478, "y": 1, "w": 94, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 11, "w": 94, "h": 69 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 560, "y": 132, "w": 93, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 19, "w": 93, "h": 64 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 474, "y": 257, "w": 90, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 22, "w": 90, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 95, "y": 197, "w": 94, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 21, "w": 94, "h": 62 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 99, "y": 1, "w": 94, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 71 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 291, "y": 1, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 6, "w": 90, "h": 73 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 288, "y": 74, "w": 90, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 11, "w": 90, "h": 67 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 368, "y": 317, "w": 88, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 17, "w": 88, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 96, "y": 259, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 472, "y": 70, "w": 88, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 0, "w": 88, "h": 72 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 378, "y": 138, "w": 91, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 8, "w": 91, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 187, "y": 260, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 379, "y": 257, "w": 95, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 16, "w": 95, "h": 60 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 572, "y": 1, "w": 98, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 98, "h": 66 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 478, "y": 1, "w": 94, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 11, "w": 94, "h": 69 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 560, "y": 132, "w": 93, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 19, "w": 93, "h": 64 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 474, "y": 257, "w": 90, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 22, "w": 90, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 95, "y": 197, "w": 94, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 21, "w": 94, "h": 62 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 99, "y": 1, "w": 94, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 71 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 291, "y": 1, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 6, "w": 90, "h": 73 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 288, "y": 74, "w": 90, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 11, "w": 90, "h": 67 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 368, "y": 317, "w": 88, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 17, "w": 88, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 96, "y": 259, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 472, "y": 70, "w": 88, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 0, "w": 88, "h": 72 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 378, "y": 138, "w": 91, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 8, "w": 91, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 187, "y": 260, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 379, "y": 257, "w": 95, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 16, "w": 95, "h": 60 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 572, "y": 1, "w": 98, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 98, "h": 66 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 478, "y": 1, "w": 94, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 11, "w": 94, "h": 69 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 560, "y": 132, "w": 93, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 19, "w": 93, "h": 64 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 474, "y": 257, "w": 90, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 22, "w": 90, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 95, "y": 197, "w": 94, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 21, "w": 94, "h": 62 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 99, "y": 1, "w": 94, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 71 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 291, "y": 1, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 6, "w": 90, "h": 73 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 288, "y": 74, "w": 90, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 11, "w": 90, "h": 67 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 368, "y": 317, "w": 88, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 17, "w": 88, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 96, "y": 259, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 472, "y": 70, "w": 88, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 0, "w": 88, "h": 72 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 378, "y": 138, "w": 91, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 8, "w": 91, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 187, "y": 260, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 379, "y": 257, "w": 95, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 16, "w": 95, "h": 60 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 572, "y": 1, "w": 98, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 98, "h": 66 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 478, "y": 1, "w": 94, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 11, "w": 94, "h": 69 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 560, "y": 132, "w": 93, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 19, "w": 93, "h": 64 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 474, "y": 257, "w": 90, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 22, "w": 90, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 95, "y": 197, "w": 94, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 21, "w": 94, "h": 62 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 99, "y": 1, "w": 94, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 71 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 291, "y": 1, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 6, "w": 90, "h": 73 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 288, "y": 74, "w": 90, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 11, "w": 90, "h": 67 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 368, "y": 317, "w": 88, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 17, "w": 88, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 96, "y": 259, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 565, "y": 196, "w": 90, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 6, "w": 90, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 278, "y": 266, "w": 90, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 10, "w": 90, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 189, "y": 199, "w": 95, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 95, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 193, "y": 1, "w": 98, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 98, "h": 68 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 1, "y": 71, "w": 94, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 469, "y": 196, "w": 96, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 12, "w": 96, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 1, "y": 1, "w": 98, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 5, "w": 98, "h": 70 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 1, "y": 136, "w": 94, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 10, "w": 94, "h": 63 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 95, "y": 72, "w": 96, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 12, "w": 96, "h": 63 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 381, "y": 1, "w": 97, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 6, "w": 97, "h": 67 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 1, "y": 71, "w": 94, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 469, "y": 196, "w": 96, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 12, "w": 96, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 1, "y": 1, "w": 98, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 5, "w": 98, "h": 70 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 191, "y": 136, "w": 94, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 10, "w": 94, "h": 63 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 95, "y": 135, "w": 96, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 11, "w": 96, "h": 62 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 572, "y": 67, "w": 99, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 99, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 284, "y": 205, "w": 95, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 11, "w": 95, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 1, "y": 199, "w": 91, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 12, "w": 91, "h": 60 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 1, "y": 259, "w": 95, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 12, "w": 95, "h": 60 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 193, "y": 69, "w": 95, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 5, "w": 95, "h": 67 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 285, "y": 141, "w": 92, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 8, "w": 92, "h": 64 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 96, "y": 318, "w": 89, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 14, "w": 89, "h": 58 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 564, "y": 261, "w": 92, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 14, "w": 92, "h": 58 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "693.png", + "format": "I8", + "size": { "w": 672, "h": 377 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/693.png b/public/images/pokemon/exp/back/shiny/693.png index 5eb7110fc3d..10b639004ae 100644 Binary files a/public/images/pokemon/exp/back/shiny/693.png and b/public/images/pokemon/exp/back/shiny/693.png differ diff --git a/public/images/pokemon/exp/back/shiny/694.json b/public/images/pokemon/exp/back/shiny/694.json deleted file mode 100644 index ec28fb40922..00000000000 --- a/public/images/pokemon/exp/back/shiny/694.json +++ /dev/null @@ -1,272 +0,0 @@ -{ - "textures": [ - { - "image": "694.png", - "format": "RGBA8888", - "size": { - "w": 130, - "h": 130 - }, - "scale": 1, - "frames": [ - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 48, - "h": 35 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 48, - "h": 35 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 39 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 47, - "h": 35 - }, - "frame": { - "x": 48, - "y": 0, - "w": 47, - "h": 35 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 47, - "h": 36 - }, - "frame": { - "x": 0, - "y": 35, - "w": 47, - "h": 36 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 47, - "h": 36 - }, - "frame": { - "x": 0, - "y": 35, - "w": 47, - "h": 36 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 47, - "h": 37 - }, - "frame": { - "x": 47, - "y": 35, - "w": 47, - "h": 37 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 47, - "h": 37 - }, - "frame": { - "x": 47, - "y": 35, - "w": 47, - "h": 37 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 46, - "h": 38 - }, - "frame": { - "x": 0, - "y": 71, - "w": 46, - "h": 38 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 46, - "h": 38 - }, - "frame": { - "x": 0, - "y": 71, - "w": 46, - "h": 38 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 39 - }, - "frame": { - "x": 46, - "y": 72, - "w": 44, - "h": 39 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 39 - }, - "frame": { - "x": 46, - "y": 72, - "w": 44, - "h": 39 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 39 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 40, - "h": 39 - }, - "frame": { - "x": 90, - "y": 72, - "w": 40, - "h": 39 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:d46bf508ccc2fa50cb3f373328d8e60a:7d537a54677423b5809fcbc4394d9538:b0990f9650cfe63b836cbed33f0b44d8$" - } -} diff --git a/public/images/pokemon/exp/back/shiny/694.png b/public/images/pokemon/exp/back/shiny/694.png deleted file mode 100644 index 2df2c82fdd7..00000000000 Binary files a/public/images/pokemon/exp/back/shiny/694.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/shiny/697.json b/public/images/pokemon/exp/back/shiny/697.json index ade475cd439..6963da289ab 100644 --- a/public/images/pokemon/exp/back/shiny/697.json +++ b/public/images/pokemon/exp/back/shiny/697.json @@ -1,1196 +1,992 @@ -{ - "textures": [ - { - "image": "697.png", - "format": "RGBA8888", - "size": { - "w": 374, - "h": 374 - }, - "scale": 1, - "frames": [ - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 63, - "h": 78 - }, - "frame": { - "x": 0, - "y": 0, - "w": 63, - "h": 78 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 63, - "h": 78 - }, - "frame": { - "x": 0, - "y": 0, - "w": 63, - "h": 78 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 60, - "h": 78 - }, - "frame": { - "x": 0, - "y": 78, - "w": 60, - "h": 78 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 66, - "h": 77 - }, - "frame": { - "x": 0, - "y": 156, - "w": 66, - "h": 77 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 66, - "h": 77 - }, - "frame": { - "x": 0, - "y": 156, - "w": 66, - "h": 77 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 76 - }, - "frame": { - "x": 60, - "y": 78, - "w": 77, - "h": 76 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 76 - }, - "frame": { - "x": 60, - "y": 78, - "w": 77, - "h": 76 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 76 - }, - "frame": { - "x": 60, - "y": 78, - "w": 77, - "h": 76 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 76 - }, - "frame": { - "x": 60, - "y": 78, - "w": 77, - "h": 76 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 76 - }, - "frame": { - "x": 63, - "y": 0, - "w": 77, - "h": 76 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 76 - }, - "frame": { - "x": 63, - "y": 0, - "w": 77, - "h": 76 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 76 - }, - "frame": { - "x": 63, - "y": 0, - "w": 77, - "h": 76 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 76 - }, - "frame": { - "x": 63, - "y": 0, - "w": 77, - "h": 76 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 76 - }, - "frame": { - "x": 0, - "y": 233, - "w": 77, - "h": 76 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 76 - }, - "frame": { - "x": 0, - "y": 233, - "w": 77, - "h": 76 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 76 - }, - "frame": { - "x": 0, - "y": 233, - "w": 77, - "h": 76 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 76 - }, - "frame": { - "x": 0, - "y": 233, - "w": 77, - "h": 76 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 76 - }, - "frame": { - "x": 66, - "y": 154, - "w": 77, - "h": 76 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 76 - }, - "frame": { - "x": 66, - "y": 154, - "w": 77, - "h": 76 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 76 - }, - "frame": { - "x": 66, - "y": 154, - "w": 77, - "h": 76 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 76 - }, - "frame": { - "x": 66, - "y": 154, - "w": 77, - "h": 76 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 76, - "h": 76 - }, - "frame": { - "x": 137, - "y": 76, - "w": 76, - "h": 76 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 76, - "h": 76 - }, - "frame": { - "x": 137, - "y": 76, - "w": 76, - "h": 76 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 76, - "h": 76 - }, - "frame": { - "x": 137, - "y": 76, - "w": 76, - "h": 76 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 76, - "h": 76 - }, - "frame": { - "x": 137, - "y": 76, - "w": 76, - "h": 76 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 69, - "h": 76 - }, - "frame": { - "x": 140, - "y": 0, - "w": 69, - "h": 76 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 69, - "h": 76 - }, - "frame": { - "x": 140, - "y": 0, - "w": 69, - "h": 76 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 75 - }, - "frame": { - "x": 209, - "y": 0, - "w": 76, - "h": 75 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 75 - }, - "frame": { - "x": 209, - "y": 0, - "w": 76, - "h": 75 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 75 - }, - "frame": { - "x": 209, - "y": 0, - "w": 76, - "h": 75 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 77, - "h": 73 - }, - "frame": { - "x": 285, - "y": 0, - "w": 77, - "h": 73 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 75 - }, - "frame": { - "x": 285, - "y": 73, - "w": 76, - "h": 75 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 72, - "h": 75 - }, - "frame": { - "x": 213, - "y": 75, - "w": 72, - "h": 75 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 72, - "h": 75 - }, - "frame": { - "x": 213, - "y": 75, - "w": 72, - "h": 75 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 76, - "h": 74 - }, - "frame": { - "x": 285, - "y": 148, - "w": 76, - "h": 74 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 76, - "h": 74 - }, - "frame": { - "x": 285, - "y": 148, - "w": 76, - "h": 74 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 75, - "h": 75 - }, - "frame": { - "x": 143, - "y": 152, - "w": 75, - "h": 75 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 75, - "h": 75 - }, - "frame": { - "x": 143, - "y": 152, - "w": 75, - "h": 75 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 75, - "h": 75 - }, - "frame": { - "x": 143, - "y": 152, - "w": 75, - "h": 75 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 75, - "h": 75 - }, - "frame": { - "x": 143, - "y": 152, - "w": 75, - "h": 75 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 74 - }, - "frame": { - "x": 77, - "y": 230, - "w": 74, - "h": 74 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 74 - }, - "frame": { - "x": 77, - "y": 230, - "w": 74, - "h": 74 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 74 - }, - "frame": { - "x": 77, - "y": 230, - "w": 74, - "h": 74 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 74 - }, - "frame": { - "x": 77, - "y": 230, - "w": 74, - "h": 74 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 74 - }, - "frame": { - "x": 77, - "y": 230, - "w": 74, - "h": 74 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 74 - }, - "frame": { - "x": 151, - "y": 227, - "w": 74, - "h": 74 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 74 - }, - "frame": { - "x": 151, - "y": 227, - "w": 74, - "h": 74 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 74 - }, - "frame": { - "x": 151, - "y": 227, - "w": 74, - "h": 74 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 75, - "h": 73 - }, - "frame": { - "x": 151, - "y": 301, - "w": 75, - "h": 73 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 75, - "h": 73 - }, - "frame": { - "x": 151, - "y": 301, - "w": 75, - "h": 73 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 74 - }, - "frame": { - "x": 225, - "y": 222, - "w": 74, - "h": 74 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 74 - }, - "frame": { - "x": 299, - "y": 222, - "w": 74, - "h": 74 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 73, - "h": 74 - }, - "frame": { - "x": 226, - "y": 296, - "w": 73, - "h": 74 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 73, - "h": 74 - }, - "frame": { - "x": 226, - "y": 296, - "w": 73, - "h": 74 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 73, - "h": 74 - }, - "frame": { - "x": 226, - "y": 296, - "w": 73, - "h": 74 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 78 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 73, - "h": 74 - }, - "frame": { - "x": 299, - "y": 296, - "w": 73, - "h": 74 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:dc19d18c6fcbcf52992f8e0181b428f3:44bc6e229ce96fd68619c97288aeb670:f4fdd87d2fc1483d8e0a185c2654e3d9$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 149, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 286, "y": 150, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 185, "y": 227, "w": 91, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 91, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 93, "y": 227, "w": 91, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 91, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 301, "w": 91, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 91, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 182, "y": 303, "w": 90, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 90, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 273, "y": 375, "w": 91, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 91, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 182, "y": 378, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 90, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 273, "y": 449, "w": 89, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 5, "w": 89, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 177, "y": 452, "w": 89, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 89, "h": 72 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 452, "y": 450, "w": 89, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 89, "h": 72 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 461, "y": 376, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 90, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 649, "y": 375, "w": 91, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 91, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 558, "y": 303, "w": 90, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 90, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 649, "y": 300, "w": 91, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 91, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 373, "y": 227, "w": 91, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 91, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 149, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 286, "y": 150, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 185, "y": 227, "w": 91, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 91, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 93, "y": 227, "w": 91, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 91, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 0, "y": 301, "w": 91, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 91, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 182, "y": 303, "w": 90, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 90, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 273, "y": 375, "w": 91, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 91, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 182, "y": 378, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 90, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 273, "y": 449, "w": 89, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 5, "w": 89, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 177, "y": 452, "w": 89, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 89, "h": 72 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 452, "y": 450, "w": 89, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 89, "h": 72 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 461, "y": 376, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 90, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 649, "y": 375, "w": 91, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 91, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 558, "y": 303, "w": 90, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 90, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 649, "y": 300, "w": 91, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 91, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 373, "y": 227, "w": 91, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 91, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 0, "y": 149, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 286, "y": 150, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 185, "y": 227, "w": 91, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 91, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 93, "y": 227, "w": 91, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 91, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 301, "w": 91, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 91, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 182, "y": 303, "w": 90, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 90, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 273, "y": 375, "w": 91, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 91, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 182, "y": 378, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 90, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 273, "y": 449, "w": 89, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 5, "w": 89, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 177, "y": 452, "w": 89, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 89, "h": 72 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 452, "y": 450, "w": 89, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 89, "h": 72 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 461, "y": 376, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 90, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 649, "y": 375, "w": 91, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 91, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 558, "y": 303, "w": 90, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 90, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 649, "y": 300, "w": 91, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 91, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 373, "y": 227, "w": 91, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 91, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 149, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 286, "y": 150, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 185, "y": 227, "w": 91, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 91, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 93, "y": 227, "w": 91, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 91, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 0, "y": 301, "w": 91, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 91, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 182, "y": 303, "w": 90, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 90, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 273, "y": 375, "w": 91, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 91, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 182, "y": 378, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 90, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 273, "y": 449, "w": 89, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 5, "w": 89, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 177, "y": 452, "w": 89, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 89, "h": 72 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 452, "y": 450, "w": 89, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 89, "h": 72 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 461, "y": 376, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 90, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 649, "y": 375, "w": 91, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 91, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 558, "y": 303, "w": 90, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 90, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 649, "y": 300, "w": 91, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 91, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 373, "y": 227, "w": 91, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 91, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 0, "y": 149, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 370, "y": 303, "w": 90, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 90, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 558, "y": 227, "w": 90, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 90, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 0, "y": 376, "w": 88, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 88, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 89, "y": 379, "w": 87, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 87, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 365, "y": 378, "w": 86, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 86, "h": 76 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 640, "y": 449, "w": 84, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 84, "h": 77 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 552, "y": 378, "w": 87, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 87, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 92, "y": 303, "w": 89, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 89, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 465, "y": 302, "w": 92, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 92, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 465, "y": 227, "w": 92, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 92, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 465, "y": 227, "w": 92, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 92, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 0, "y": 149, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 186, "y": 151, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 0, "y": 225, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 670, "y": 150, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 93, "y": 151, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 472, "y": 151, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 565, "y": 151, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 670, "y": 150, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 0, "y": 149, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 277, "y": 301, "w": 92, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 92, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 465, "y": 227, "w": 92, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 92, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 465, "y": 227, "w": 92, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 92, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 0, "y": 149, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 388, "y": 75, "w": 93, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 93, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 97, "y": 75, "w": 93, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 93, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 292, "y": 0, "w": 95, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 95, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 196, "y": 0, "w": 95, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 95, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 582, "y": 0, "w": 96, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 96, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 98, "y": 0, "w": 97, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 97, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 0, "y": 0, "w": 97, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 97, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 485, "y": 0, "w": 96, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 96, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 388, "y": 0, "w": 96, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 96, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 0, "y": 75, "w": 96, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 96, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 286, "y": 76, "w": 95, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 95, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 670, "y": 76, "w": 95, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 95, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 658, "y": 226, "w": 94, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 94, "h": 73 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 191, "y": 76, "w": 94, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 94, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 279, "y": 226, "w": 93, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 93, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 679, "y": 0, "w": 94, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 94, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 482, "y": 75, "w": 93, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 93, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0107.png", + "frame": { "x": 576, "y": 75, "w": 93, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 93, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0108.png", + "frame": { "x": 379, "y": 151, "w": 92, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 92, "h": 75 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + }, + { + "filename": "0109.png", + "frame": { "x": 465, "y": 227, "w": 92, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 92, "h": 74 }, + "sourceSize": { "w": 100, "h": 78 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "697.png", + "format": "I8", + "size": { "w": 773, "h": 526 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/697.png b/public/images/pokemon/exp/back/shiny/697.png index cc3a5b344c3..fabed852462 100644 Binary files a/public/images/pokemon/exp/back/shiny/697.png and b/public/images/pokemon/exp/back/shiny/697.png differ diff --git a/public/images/pokemon/exp/back/shiny/698.json b/public/images/pokemon/exp/back/shiny/698.json deleted file mode 100644 index 197e3b844b3..00000000000 --- a/public/images/pokemon/exp/back/shiny/698.json +++ /dev/null @@ -1,3296 +0,0 @@ -{ - "textures": [ - { - "image": "698.png", - "format": "RGBA8888", - "size": { - "w": 181, - "h": 181 - }, - "scale": 1, - "frames": [ - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 45, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 54 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 45, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 54 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 45, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 54 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 45, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 54 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 45, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 54 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 45, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 54 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 45, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 54 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 45, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 54 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 45, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 54 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 45, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 54 - } - }, - { - "filename": "0113.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 45, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 54 - } - }, - { - "filename": "0114.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 45, - "h": 54 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 54 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 43, - "h": 55 - }, - "frame": { - "x": 0, - "y": 54, - "w": 43, - "h": 55 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 43, - "h": 55 - }, - "frame": { - "x": 0, - "y": 54, - "w": 43, - "h": 55 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 43, - "h": 55 - }, - "frame": { - "x": 0, - "y": 54, - "w": 43, - "h": 55 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 43, - "h": 55 - }, - "frame": { - "x": 0, - "y": 54, - "w": 43, - "h": 55 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 43, - "h": 55 - }, - "frame": { - "x": 0, - "y": 54, - "w": 43, - "h": 55 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 43, - "h": 55 - }, - "frame": { - "x": 0, - "y": 54, - "w": 43, - "h": 55 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 43, - "h": 55 - }, - "frame": { - "x": 0, - "y": 54, - "w": 43, - "h": 55 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 43, - "h": 55 - }, - "frame": { - "x": 0, - "y": 54, - "w": 43, - "h": 55 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 43, - "h": 55 - }, - "frame": { - "x": 0, - "y": 54, - "w": 43, - "h": 55 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 43, - "h": 55 - }, - "frame": { - "x": 0, - "y": 54, - "w": 43, - "h": 55 - } - }, - { - "filename": "0115.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 43, - "h": 55 - }, - "frame": { - "x": 0, - "y": 54, - "w": 43, - "h": 55 - } - }, - { - "filename": "0116.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 43, - "h": 55 - }, - "frame": { - "x": 0, - "y": 54, - "w": 43, - "h": 55 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 45, - "h": 53 - }, - "frame": { - "x": 45, - "y": 0, - "w": 45, - "h": 53 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 45, - "h": 53 - }, - "frame": { - "x": 45, - "y": 0, - "w": 45, - "h": 53 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 45, - "h": 53 - }, - "frame": { - "x": 45, - "y": 0, - "w": 45, - "h": 53 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 45, - "h": 53 - }, - "frame": { - "x": 45, - "y": 0, - "w": 45, - "h": 53 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 45, - "h": 53 - }, - "frame": { - "x": 45, - "y": 0, - "w": 45, - "h": 53 - } - }, - { - "filename": "0112.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 45, - "h": 53 - }, - "frame": { - "x": 45, - "y": 0, - "w": 45, - "h": 53 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0117.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0118.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0119.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0120.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 56 - }, - "frame": { - "x": 0, - "y": 109, - "w": 41, - "h": 56 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0121.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0122.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0155.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0156.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 56 - }, - "frame": { - "x": 90, - "y": 0, - "w": 39, - "h": 56 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 37, - "h": 56 - }, - "frame": { - "x": 129, - "y": 0, - "w": 37, - "h": 56 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 37, - "h": 56 - }, - "frame": { - "x": 129, - "y": 0, - "w": 37, - "h": 56 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 37, - "h": 56 - }, - "frame": { - "x": 129, - "y": 0, - "w": 37, - "h": 56 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 37, - "h": 56 - }, - "frame": { - "x": 129, - "y": 0, - "w": 37, - "h": 56 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 37, - "h": 56 - }, - "frame": { - "x": 129, - "y": 0, - "w": 37, - "h": 56 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 37, - "h": 56 - }, - "frame": { - "x": 129, - "y": 0, - "w": 37, - "h": 56 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 37, - "h": 56 - }, - "frame": { - "x": 129, - "y": 0, - "w": 37, - "h": 56 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 37, - "h": 56 - }, - "frame": { - "x": 129, - "y": 0, - "w": 37, - "h": 56 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 37, - "h": 56 - }, - "frame": { - "x": 129, - "y": 0, - "w": 37, - "h": 56 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 37, - "h": 56 - }, - "frame": { - "x": 129, - "y": 0, - "w": 37, - "h": 56 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 37, - "h": 56 - }, - "frame": { - "x": 129, - "y": 0, - "w": 37, - "h": 56 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 37, - "h": 56 - }, - "frame": { - "x": 129, - "y": 0, - "w": 37, - "h": 56 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 35, - "h": 56 - }, - "frame": { - "x": 41, - "y": 109, - "w": 35, - "h": 56 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 35, - "h": 56 - }, - "frame": { - "x": 41, - "y": 109, - "w": 35, - "h": 56 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 35, - "h": 56 - }, - "frame": { - "x": 41, - "y": 109, - "w": 35, - "h": 56 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 35, - "h": 56 - }, - "frame": { - "x": 41, - "y": 109, - "w": 35, - "h": 56 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 35, - "h": 56 - }, - "frame": { - "x": 41, - "y": 109, - "w": 35, - "h": 56 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 35, - "h": 56 - }, - "frame": { - "x": 41, - "y": 109, - "w": 35, - "h": 56 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 35, - "h": 56 - }, - "frame": { - "x": 41, - "y": 109, - "w": 35, - "h": 56 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 35, - "h": 56 - }, - "frame": { - "x": 41, - "y": 109, - "w": 35, - "h": 56 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 35, - "h": 56 - }, - "frame": { - "x": 41, - "y": 109, - "w": 35, - "h": 56 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 35, - "h": 56 - }, - "frame": { - "x": 41, - "y": 109, - "w": 35, - "h": 56 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 35, - "h": 56 - }, - "frame": { - "x": 41, - "y": 109, - "w": 35, - "h": 56 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 35, - "h": 56 - }, - "frame": { - "x": 41, - "y": 109, - "w": 35, - "h": 56 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 33, - "h": 55 - }, - "frame": { - "x": 43, - "y": 54, - "w": 33, - "h": 55 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 33, - "h": 55 - }, - "frame": { - "x": 43, - "y": 54, - "w": 33, - "h": 55 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 33, - "h": 55 - }, - "frame": { - "x": 43, - "y": 54, - "w": 33, - "h": 55 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 33, - "h": 55 - }, - "frame": { - "x": 43, - "y": 54, - "w": 33, - "h": 55 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 33, - "h": 55 - }, - "frame": { - "x": 43, - "y": 54, - "w": 33, - "h": 55 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 33, - "h": 55 - }, - "frame": { - "x": 43, - "y": 54, - "w": 33, - "h": 55 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 33, - "h": 55 - }, - "frame": { - "x": 43, - "y": 54, - "w": 33, - "h": 55 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 33, - "h": 55 - }, - "frame": { - "x": 43, - "y": 54, - "w": 33, - "h": 55 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 33, - "h": 55 - }, - "frame": { - "x": 43, - "y": 54, - "w": 33, - "h": 55 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 33, - "h": 55 - }, - "frame": { - "x": 43, - "y": 54, - "w": 33, - "h": 55 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 33, - "h": 55 - }, - "frame": { - "x": 43, - "y": 54, - "w": 33, - "h": 55 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 33, - "h": 55 - }, - "frame": { - "x": 43, - "y": 54, - "w": 33, - "h": 55 - } - }, - { - "filename": "0123.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 37, - "h": 57 - }, - "frame": { - "x": 76, - "y": 56, - "w": 37, - "h": 57 - } - }, - { - "filename": "0124.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 37, - "h": 57 - }, - "frame": { - "x": 76, - "y": 56, - "w": 37, - "h": 57 - } - }, - { - "filename": "0153.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 37, - "h": 57 - }, - "frame": { - "x": 76, - "y": 56, - "w": 37, - "h": 57 - } - }, - { - "filename": "0154.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 37, - "h": 57 - }, - "frame": { - "x": 76, - "y": 56, - "w": 37, - "h": 57 - } - }, - { - "filename": "0125.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 113, - "y": 56, - "w": 35, - "h": 58 - } - }, - { - "filename": "0126.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 113, - "y": 56, - "w": 35, - "h": 58 - } - }, - { - "filename": "0151.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 113, - "y": 56, - "w": 35, - "h": 58 - } - }, - { - "filename": "0152.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 113, - "y": 56, - "w": 35, - "h": 58 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 33, - "h": 54 - }, - "frame": { - "x": 148, - "y": 56, - "w": 33, - "h": 54 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 33, - "h": 54 - }, - "frame": { - "x": 148, - "y": 56, - "w": 33, - "h": 54 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 33, - "h": 54 - }, - "frame": { - "x": 148, - "y": 56, - "w": 33, - "h": 54 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 33, - "h": 54 - }, - "frame": { - "x": 148, - "y": 56, - "w": 33, - "h": 54 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 33, - "h": 54 - }, - "frame": { - "x": 148, - "y": 56, - "w": 33, - "h": 54 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 33, - "h": 54 - }, - "frame": { - "x": 148, - "y": 56, - "w": 33, - "h": 54 - } - }, - { - "filename": "0127.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 76, - "y": 113, - "w": 35, - "h": 58 - } - }, - { - "filename": "0128.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 76, - "y": 113, - "w": 35, - "h": 58 - } - }, - { - "filename": "0133.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 76, - "y": 113, - "w": 35, - "h": 58 - } - }, - { - "filename": "0134.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 76, - "y": 113, - "w": 35, - "h": 58 - } - }, - { - "filename": "0139.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 76, - "y": 113, - "w": 35, - "h": 58 - } - }, - { - "filename": "0140.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 76, - "y": 113, - "w": 35, - "h": 58 - } - }, - { - "filename": "0145.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 76, - "y": 113, - "w": 35, - "h": 58 - } - }, - { - "filename": "0146.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 76, - "y": 113, - "w": 35, - "h": 58 - } - }, - { - "filename": "0129.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 111, - "y": 114, - "w": 35, - "h": 58 - } - }, - { - "filename": "0130.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 111, - "y": 114, - "w": 35, - "h": 58 - } - }, - { - "filename": "0135.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 111, - "y": 114, - "w": 35, - "h": 58 - } - }, - { - "filename": "0136.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 111, - "y": 114, - "w": 35, - "h": 58 - } - }, - { - "filename": "0141.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 111, - "y": 114, - "w": 35, - "h": 58 - } - }, - { - "filename": "0142.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 111, - "y": 114, - "w": 35, - "h": 58 - } - }, - { - "filename": "0147.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 111, - "y": 114, - "w": 35, - "h": 58 - } - }, - { - "filename": "0148.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 111, - "y": 114, - "w": 35, - "h": 58 - } - }, - { - "filename": "0131.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 146, - "y": 114, - "w": 35, - "h": 58 - } - }, - { - "filename": "0132.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 146, - "y": 114, - "w": 35, - "h": 58 - } - }, - { - "filename": "0137.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 146, - "y": 114, - "w": 35, - "h": 58 - } - }, - { - "filename": "0138.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 146, - "y": 114, - "w": 35, - "h": 58 - } - }, - { - "filename": "0143.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 146, - "y": 114, - "w": 35, - "h": 58 - } - }, - { - "filename": "0144.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 146, - "y": 114, - "w": 35, - "h": 58 - } - }, - { - "filename": "0149.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 146, - "y": 114, - "w": 35, - "h": 58 - } - }, - { - "filename": "0150.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 146, - "y": 114, - "w": 35, - "h": 58 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:7926d4052a1ca822dcfc49423c76e3a1:6930576af3683498fb06f805ffdf25f2:198087d69fed44d4a642fa3ba5c077d6$" - } -} diff --git a/public/images/pokemon/exp/back/shiny/698.png b/public/images/pokemon/exp/back/shiny/698.png deleted file mode 100644 index dbd5cefcbf0..00000000000 Binary files a/public/images/pokemon/exp/back/shiny/698.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/shiny/700.json b/public/images/pokemon/exp/back/shiny/700.json index fd3cf94bb73..70083de61c9 100644 --- a/public/images/pokemon/exp/back/shiny/700.json +++ b/public/images/pokemon/exp/back/shiny/700.json @@ -1,1364 +1,587 @@ -{ - "textures": [ - { - "image": "700.png", - "format": "RGBA8888", - "size": { - "w": 248, - "h": 248 - }, - "scale": 1, - "frames": [ - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 54, - "h": 61 - }, - "frame": { - "x": 0, - "y": 0, - "w": 54, - "h": 61 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 50, - "h": 64 - }, - "frame": { - "x": 54, - "y": 0, - "w": 50, - "h": 64 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 50, - "h": 64 - }, - "frame": { - "x": 0, - "y": 61, - "w": 50, - "h": 64 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 51, - "h": 61 - }, - "frame": { - "x": 50, - "y": 64, - "w": 51, - "h": 61 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 48, - "h": 64 - }, - "frame": { - "x": 101, - "y": 64, - "w": 48, - "h": 64 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 51, - "h": 61 - }, - "frame": { - "x": 0, - "y": 125, - "w": 51, - "h": 61 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 49, - "h": 61 - }, - "frame": { - "x": 51, - "y": 125, - "w": 49, - "h": 61 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 49, - "h": 61 - }, - "frame": { - "x": 51, - "y": 125, - "w": 49, - "h": 61 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 49, - "h": 60 - }, - "frame": { - "x": 104, - "y": 0, - "w": 49, - "h": 60 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 49, - "h": 60 - }, - "frame": { - "x": 104, - "y": 0, - "w": 49, - "h": 60 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 49, - "h": 60 - }, - "frame": { - "x": 104, - "y": 0, - "w": 49, - "h": 60 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 49, - "h": 60 - }, - "frame": { - "x": 104, - "y": 0, - "w": 49, - "h": 60 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 49, - "h": 60 - }, - "frame": { - "x": 104, - "y": 0, - "w": 49, - "h": 60 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 49, - "h": 60 - }, - "frame": { - "x": 104, - "y": 0, - "w": 49, - "h": 60 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 48, - "h": 61 - }, - "frame": { - "x": 100, - "y": 128, - "w": 48, - "h": 61 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 48, - "h": 61 - }, - "frame": { - "x": 0, - "y": 186, - "w": 48, - "h": 61 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 48, - "h": 61 - }, - "frame": { - "x": 48, - "y": 186, - "w": 48, - "h": 61 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 48, - "h": 61 - }, - "frame": { - "x": 48, - "y": 186, - "w": 48, - "h": 61 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 48, - "h": 61 - }, - "frame": { - "x": 148, - "y": 128, - "w": 48, - "h": 61 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 48, - "h": 61 - }, - "frame": { - "x": 148, - "y": 128, - "w": 48, - "h": 61 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 60 - }, - "frame": { - "x": 149, - "y": 60, - "w": 48, - "h": 60 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 60 - }, - "frame": { - "x": 149, - "y": 60, - "w": 48, - "h": 60 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 60 - }, - "frame": { - "x": 149, - "y": 60, - "w": 48, - "h": 60 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 60 - }, - "frame": { - "x": 149, - "y": 60, - "w": 48, - "h": 60 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 60 - }, - "frame": { - "x": 149, - "y": 60, - "w": 48, - "h": 60 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 60 - }, - "frame": { - "x": 149, - "y": 60, - "w": 48, - "h": 60 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 60 - }, - "frame": { - "x": 153, - "y": 0, - "w": 48, - "h": 60 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 60 - }, - "frame": { - "x": 153, - "y": 0, - "w": 48, - "h": 60 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 60 - }, - "frame": { - "x": 153, - "y": 0, - "w": 48, - "h": 60 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 60 - }, - "frame": { - "x": 153, - "y": 0, - "w": 48, - "h": 60 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 60 - }, - "frame": { - "x": 153, - "y": 0, - "w": 48, - "h": 60 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 60 - }, - "frame": { - "x": 153, - "y": 0, - "w": 48, - "h": 60 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 48, - "h": 60 - }, - "frame": { - "x": 196, - "y": 120, - "w": 48, - "h": 60 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 48, - "h": 60 - }, - "frame": { - "x": 196, - "y": 120, - "w": 48, - "h": 60 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 48, - "h": 59 - }, - "frame": { - "x": 197, - "y": 60, - "w": 48, - "h": 59 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 48, - "h": 59 - }, - "frame": { - "x": 197, - "y": 60, - "w": 48, - "h": 59 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 48, - "h": 59 - }, - "frame": { - "x": 197, - "y": 60, - "w": 48, - "h": 59 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 48, - "h": 59 - }, - "frame": { - "x": 197, - "y": 60, - "w": 48, - "h": 59 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 48, - "h": 59 - }, - "frame": { - "x": 197, - "y": 60, - "w": 48, - "h": 59 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 48, - "h": 59 - }, - "frame": { - "x": 197, - "y": 60, - "w": 48, - "h": 59 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 47, - "h": 60 - }, - "frame": { - "x": 201, - "y": 0, - "w": 47, - "h": 60 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 47, - "h": 60 - }, - "frame": { - "x": 201, - "y": 0, - "w": 47, - "h": 60 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 47, - "h": 60 - }, - "frame": { - "x": 201, - "y": 0, - "w": 47, - "h": 60 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 47, - "h": 60 - }, - "frame": { - "x": 201, - "y": 0, - "w": 47, - "h": 60 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 47, - "h": 60 - }, - "frame": { - "x": 201, - "y": 0, - "w": 47, - "h": 60 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 47, - "h": 60 - }, - "frame": { - "x": 201, - "y": 0, - "w": 47, - "h": 60 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 47, - "h": 60 - }, - "frame": { - "x": 196, - "y": 180, - "w": 47, - "h": 60 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 47, - "h": 60 - }, - "frame": { - "x": 196, - "y": 180, - "w": 47, - "h": 60 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 47, - "h": 60 - }, - "frame": { - "x": 196, - "y": 180, - "w": 47, - "h": 60 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 47, - "h": 60 - }, - "frame": { - "x": 196, - "y": 180, - "w": 47, - "h": 60 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 47, - "h": 60 - }, - "frame": { - "x": 196, - "y": 180, - "w": 47, - "h": 60 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 47, - "h": 60 - }, - "frame": { - "x": 196, - "y": 180, - "w": 47, - "h": 60 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 48, - "h": 58 - }, - "frame": { - "x": 96, - "y": 189, - "w": 48, - "h": 58 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 48, - "h": 58 - }, - "frame": { - "x": 96, - "y": 189, - "w": 48, - "h": 58 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 48, - "h": 58 - }, - "frame": { - "x": 96, - "y": 189, - "w": 48, - "h": 58 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 48, - "h": 58 - }, - "frame": { - "x": 96, - "y": 189, - "w": 48, - "h": 58 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 48, - "h": 58 - }, - "frame": { - "x": 96, - "y": 189, - "w": 48, - "h": 58 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 48, - "h": 58 - }, - "frame": { - "x": 96, - "y": 189, - "w": 48, - "h": 58 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 48, - "h": 58 - }, - "frame": { - "x": 144, - "y": 189, - "w": 48, - "h": 58 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 48, - "h": 58 - }, - "frame": { - "x": 144, - "y": 189, - "w": 48, - "h": 58 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 48, - "h": 58 - }, - "frame": { - "x": 144, - "y": 189, - "w": 48, - "h": 58 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 48, - "h": 58 - }, - "frame": { - "x": 144, - "y": 189, - "w": 48, - "h": 58 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 48, - "h": 58 - }, - "frame": { - "x": 144, - "y": 189, - "w": 48, - "h": 58 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 64 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 48, - "h": 58 - }, - "frame": { - "x": 144, - "y": 189, - "w": 48, - "h": 58 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:cc4ca4dff49e9c03ffd4d0d75ae6e17b:1555e19065e6e4144c3cbb6020a0ae39:2e4bf5ef1f19e475073f7da10c60b540$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 46, "y": 123, "w": 46, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 46, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 101, "y": 63, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 47, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 180, "w": 46, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 46, "h": 58 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 91, "y": 182, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 46, "h": 57 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 137, "y": 183, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 46, "h": 57 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 188, "y": 180, "w": 45, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 45, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 46, "y": 182, "w": 45, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 45, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 49, "y": 64, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 47, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 46, "y": 123, "w": 46, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 46, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 101, "y": 63, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 47, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 180, "w": 46, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 46, "h": 58 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 91, "y": 182, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 46, "h": 57 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 137, "y": 183, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 46, "h": 57 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 188, "y": 180, "w": 45, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 45, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 46, "y": 182, "w": 45, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 45, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 49, "y": 64, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 47, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 46, "y": 123, "w": 46, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 46, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 101, "y": 63, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 47, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 0, "y": 180, "w": 46, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 46, "h": 58 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 91, "y": 182, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 46, "h": 57 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 137, "y": 183, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 46, "h": 57 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 188, "y": 180, "w": 45, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 45, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 46, "y": 182, "w": 45, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 45, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 49, "y": 64, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 47, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 46, "y": 123, "w": 46, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 46, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 101, "y": 63, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 47, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 180, "w": 46, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 46, "h": 58 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 91, "y": 182, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 46, "h": 57 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 137, "y": 183, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 46, "h": 57 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 188, "y": 180, "w": 45, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 45, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 46, "y": 182, "w": 45, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 45, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 49, "y": 64, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 47, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 46, "y": 123, "w": 46, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 46, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 101, "y": 63, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 47, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 0, "y": 180, "w": 46, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 46, "h": 58 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 91, "y": 182, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 46, "h": 57 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 137, "y": 183, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 46, "h": 57 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 188, "y": 180, "w": 45, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 45, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 46, "y": 182, "w": 45, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 45, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 49, "y": 64, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 47, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 46, "y": 123, "w": 46, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 46, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 101, "y": 63, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 47, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 180, "w": 46, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 46, "h": 58 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 91, "y": 182, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 46, "h": 57 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 137, "y": 183, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 46, "h": 57 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 188, "y": 180, "w": 45, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 45, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 46, "y": 182, "w": 45, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 45, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 49, "y": 64, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 47, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 142, "y": 124, "w": 46, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 46, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 101, "y": 0, "w": 48, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 48, "h": 63 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 195, "y": 0, "w": 49, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 49, "h": 60 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 0, "y": 60, "w": 49, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 49, "h": 60 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 0, "y": 0, "w": 53, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 53, "h": 60 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 148, "y": 64, "w": 46, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 46, "h": 60 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 120, "w": 46, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 46, "h": 60 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 195, "y": 60, "w": 47, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 47, "h": 60 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 194, "y": 120, "w": 46, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 46, "h": 60 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 96, "y": 122, "w": 46, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 46, "h": 60 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 195, "y": 60, "w": 47, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 47, "h": 60 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 194, "y": 120, "w": 46, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 46, "h": 60 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 96, "y": 122, "w": 46, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 46, "h": 60 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 149, "y": 0, "w": 46, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 46, "h": 64 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 53, "y": 0, "w": 48, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 48, "h": 64 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 142, "y": 124, "w": 46, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 46, "h": 59 }, + "sourceSize": { "w": 55, "h": 64 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "700.png", + "format": "I8", + "size": { "w": 244, "h": 241 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/700.png b/public/images/pokemon/exp/back/shiny/700.png index fe533ba5a88..dab66177e99 100644 Binary files a/public/images/pokemon/exp/back/shiny/700.png and b/public/images/pokemon/exp/back/shiny/700.png differ diff --git a/public/images/pokemon/exp/back/shiny/702.json b/public/images/pokemon/exp/back/shiny/702.json index 2e194f21033..9680e17e397 100644 --- a/public/images/pokemon/exp/back/shiny/702.json +++ b/public/images/pokemon/exp/back/shiny/702.json @@ -1,1028 +1,443 @@ -{ - "textures": [ - { - "image": "702.png", - "format": "RGBA8888", - "size": { - "w": 141, - "h": 141 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 47, - "h": 35 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 47, - "h": 35 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 47, - "h": 35 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 47, - "h": 35 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 47, - "h": 35 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 47, - "h": 35 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 70, - "w": 47, - "h": 35 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 70, - "w": 47, - "h": 35 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 70, - "w": 47, - "h": 35 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 70, - "w": 47, - "h": 35 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 70, - "w": 47, - "h": 35 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 0, - "y": 105, - "w": 47, - "h": 35 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 35 - }, - "frame": { - "x": 47, - "y": 0, - "w": 47, - "h": 35 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 35 - }, - "frame": { - "x": 47, - "y": 35, - "w": 46, - "h": 35 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 35 - }, - "frame": { - "x": 47, - "y": 35, - "w": 46, - "h": 35 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 35 - }, - "frame": { - "x": 47, - "y": 35, - "w": 46, - "h": 35 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 35 - }, - "frame": { - "x": 47, - "y": 35, - "w": 46, - "h": 35 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 35 - }, - "frame": { - "x": 47, - "y": 35, - "w": 46, - "h": 35 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 35 - }, - "frame": { - "x": 47, - "y": 35, - "w": 46, - "h": 35 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 47, - "h": 34 - }, - "frame": { - "x": 47, - "y": 70, - "w": 47, - "h": 34 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 47, - "h": 34 - }, - "frame": { - "x": 47, - "y": 70, - "w": 47, - "h": 34 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 47, - "h": 34 - }, - "frame": { - "x": 47, - "y": 70, - "w": 47, - "h": 34 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 47, - "h": 34 - }, - "frame": { - "x": 47, - "y": 70, - "w": 47, - "h": 34 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 47, - "h": 34 - }, - "frame": { - "x": 47, - "y": 70, - "w": 47, - "h": 34 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 47, - "h": 34 - }, - "frame": { - "x": 93, - "y": 35, - "w": 47, - "h": 34 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 47, - "h": 34 - }, - "frame": { - "x": 93, - "y": 35, - "w": 47, - "h": 34 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 47, - "h": 34 - }, - "frame": { - "x": 93, - "y": 35, - "w": 47, - "h": 34 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 47, - "h": 34 - }, - "frame": { - "x": 93, - "y": 35, - "w": 47, - "h": 34 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 47, - "h": 34 - }, - "frame": { - "x": 93, - "y": 35, - "w": 47, - "h": 34 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 47, - "h": 34 - }, - "frame": { - "x": 93, - "y": 35, - "w": 47, - "h": 34 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 47, - "h": 34 - }, - "frame": { - "x": 94, - "y": 0, - "w": 47, - "h": 34 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 47, - "h": 32 - }, - "frame": { - "x": 94, - "y": 69, - "w": 47, - "h": 32 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 47, - "h": 32 - }, - "frame": { - "x": 94, - "y": 69, - "w": 47, - "h": 32 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 47, - "h": 32 - }, - "frame": { - "x": 94, - "y": 69, - "w": 47, - "h": 32 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 47, - "h": 32 - }, - "frame": { - "x": 94, - "y": 69, - "w": 47, - "h": 32 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 47, - "h": 32 - }, - "frame": { - "x": 94, - "y": 69, - "w": 47, - "h": 32 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 47, - "h": 32 - }, - "frame": { - "x": 94, - "y": 69, - "w": 47, - "h": 32 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 47, - "h": 32 - }, - "frame": { - "x": 94, - "y": 101, - "w": 47, - "h": 32 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 47, - "h": 32 - }, - "frame": { - "x": 94, - "y": 101, - "w": 47, - "h": 32 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 47, - "h": 32 - }, - "frame": { - "x": 94, - "y": 101, - "w": 47, - "h": 32 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 47, - "h": 32 - }, - "frame": { - "x": 94, - "y": 101, - "w": 47, - "h": 32 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 47, - "h": 32 - }, - "frame": { - "x": 94, - "y": 101, - "w": 47, - "h": 32 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 47, - "h": 32 - }, - "frame": { - "x": 47, - "y": 104, - "w": 47, - "h": 32 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:72bba6c37c149abe81c9754a412876bd:fb5c4a7192ee7ba359b93fb9fea89158:ba8fdab405d5efab99c4aa1084328e6b$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 48, "y": 0, "w": 46, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 0, "w": 47, "h": 35 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 47, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 93, "y": 36, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 47, "y": 72, "w": 45, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 45, "h": 31 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 139, "y": 70, "w": 46, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 46, "h": 31 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 93, "y": 70, "w": 45, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 45, "h": 33 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 95, "y": 0, "w": 46, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 47, "y": 36, "w": 45, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 45, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 48, "y": 0, "w": 46, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 0, "w": 47, "h": 35 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 47, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 93, "y": 36, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 47, "y": 72, "w": 45, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 45, "h": 31 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0013.png", + "frame": { "x": 139, "y": 70, "w": 46, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 46, "h": 31 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0014.png", + "frame": { "x": 93, "y": 70, "w": 45, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 45, "h": 33 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0015.png", + "frame": { "x": 95, "y": 0, "w": 46, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0016.png", + "frame": { "x": 47, "y": 36, "w": 45, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 45, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0017.png", + "frame": { "x": 48, "y": 0, "w": 46, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 0, "w": 47, "h": 35 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 47, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0019.png", + "frame": { "x": 93, "y": 36, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0020.png", + "frame": { "x": 47, "y": 72, "w": 45, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 45, "h": 31 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0021.png", + "frame": { "x": 139, "y": 70, "w": 46, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 46, "h": 31 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0022.png", + "frame": { "x": 93, "y": 70, "w": 45, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 45, "h": 33 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0023.png", + "frame": { "x": 95, "y": 0, "w": 46, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0024.png", + "frame": { "x": 47, "y": 36, "w": 45, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 45, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0025.png", + "frame": { "x": 48, "y": 0, "w": 46, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 0, "w": 47, "h": 35 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 47, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0027.png", + "frame": { "x": 93, "y": 36, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0028.png", + "frame": { "x": 47, "y": 72, "w": 45, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 45, "h": 31 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0029.png", + "frame": { "x": 139, "y": 70, "w": 46, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 46, "h": 31 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0030.png", + "frame": { "x": 93, "y": 70, "w": 45, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 45, "h": 33 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0031.png", + "frame": { "x": 95, "y": 0, "w": 46, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0032.png", + "frame": { "x": 47, "y": 36, "w": 45, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 45, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0033.png", + "frame": { "x": 48, "y": 0, "w": 46, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0034.png", + "frame": { "x": 0, "y": 0, "w": 47, "h": 35 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 47, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0035.png", + "frame": { "x": 93, "y": 36, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0036.png", + "frame": { "x": 47, "y": 72, "w": 45, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 45, "h": 31 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0037.png", + "frame": { "x": 139, "y": 70, "w": 46, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 46, "h": 31 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0038.png", + "frame": { "x": 93, "y": 70, "w": 45, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 45, "h": 33 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0039.png", + "frame": { "x": 95, "y": 0, "w": 46, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0040.png", + "frame": { "x": 47, "y": 36, "w": 45, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 45, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0041.png", + "frame": { "x": 142, "y": 0, "w": 46, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0042.png", + "frame": { "x": 0, "y": 0, "w": 47, "h": 35 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 47, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0043.png", + "frame": { "x": 140, "y": 36, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0044.png", + "frame": { "x": 47, "y": 72, "w": 45, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 45, "h": 31 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0045.png", + "frame": { "x": 0, "y": 72, "w": 46, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 46, "h": 31 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0046.png", + "frame": { "x": 93, "y": 70, "w": 45, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 45, "h": 33 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0047.png", + "frame": { "x": 0, "y": 36, "w": 46, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + }, + { + "filename": "0048.png", + "frame": { "x": 47, "y": 36, "w": 45, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 45, "h": 35 }, + "sourceSize": { "w": 47, "h": 35 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "702.png", + "format": "I8", + "size": { "w": 188, "h": 103 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/702.png b/public/images/pokemon/exp/back/shiny/702.png index 12401f8950b..7a02b912cf0 100644 Binary files a/public/images/pokemon/exp/back/shiny/702.png and b/public/images/pokemon/exp/back/shiny/702.png differ diff --git a/public/images/pokemon/exp/back/shiny/703.json b/public/images/pokemon/exp/back/shiny/703.json deleted file mode 100644 index dee9aa2bb4e..00000000000 --- a/public/images/pokemon/exp/back/shiny/703.json +++ /dev/null @@ -1,1322 +0,0 @@ -{ - "textures": [ - { - "image": "703.png", - "format": "RGBA8888", - "size": { - "w": 152, - "h": 152 - }, - "scale": 1, - "frames": [ - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 7, - "w": 38, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 42 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 7, - "w": 38, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 42 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 7, - "w": 38, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 42 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 7, - "w": 38, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 42 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 8, - "w": 38, - "h": 41 - }, - "frame": { - "x": 0, - "y": 42, - "w": 38, - "h": 41 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 8, - "w": 38, - "h": 41 - }, - "frame": { - "x": 0, - "y": 42, - "w": 38, - "h": 41 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 8, - "w": 38, - "h": 41 - }, - "frame": { - "x": 0, - "y": 42, - "w": 38, - "h": 41 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 8, - "w": 38, - "h": 41 - }, - "frame": { - "x": 0, - "y": 42, - "w": 38, - "h": 41 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 8, - "w": 37, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 37, - "h": 41 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 37, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 37, - "h": 41 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 8, - "w": 37, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 37, - "h": 41 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 37, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 37, - "h": 41 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 8, - "w": 37, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 37, - "h": 41 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 37, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 37, - "h": 41 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 8, - "w": 37, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 37, - "h": 41 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 37, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 37, - "h": 41 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 37, - "h": 41 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 37, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 37, - "h": 41 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 37, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 37, - "h": 41 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 37, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 37, - "h": 41 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 37, - "h": 41 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 37, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 37, - "h": 41 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 37, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 37, - "h": 41 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 37, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 37, - "h": 41 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 37, - "h": 41 - }, - "frame": { - "x": 0, - "y": 83, - "w": 37, - "h": 41 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 39, - "h": 40 - }, - "frame": { - "x": 37, - "y": 83, - "w": 39, - "h": 40 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 39, - "h": 40 - }, - "frame": { - "x": 37, - "y": 83, - "w": 39, - "h": 40 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 39, - "h": 39 - }, - "frame": { - "x": 76, - "y": 0, - "w": 39, - "h": 39 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 39, - "h": 39 - }, - "frame": { - "x": 76, - "y": 0, - "w": 39, - "h": 39 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 39, - "h": 39 - }, - "frame": { - "x": 76, - "y": 0, - "w": 39, - "h": 39 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 39, - "h": 39 - }, - "frame": { - "x": 76, - "y": 0, - "w": 39, - "h": 39 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 39, - "h": 39 - }, - "frame": { - "x": 76, - "y": 0, - "w": 39, - "h": 39 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 40 - }, - "frame": { - "x": 38, - "y": 0, - "w": 38, - "h": 40 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 40 - }, - "frame": { - "x": 38, - "y": 0, - "w": 38, - "h": 40 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 40 - }, - "frame": { - "x": 38, - "y": 0, - "w": 38, - "h": 40 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 40 - }, - "frame": { - "x": 38, - "y": 0, - "w": 38, - "h": 40 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 37, - "h": 40 - }, - "frame": { - "x": 115, - "y": 0, - "w": 37, - "h": 40 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 37, - "h": 40 - }, - "frame": { - "x": 115, - "y": 0, - "w": 37, - "h": 40 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 37, - "h": 40 - }, - "frame": { - "x": 115, - "y": 0, - "w": 37, - "h": 40 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 37, - "h": 40 - }, - "frame": { - "x": 115, - "y": 0, - "w": 37, - "h": 40 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 38, - "h": 40 - }, - "frame": { - "x": 76, - "y": 39, - "w": 38, - "h": 40 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 38, - "h": 40 - }, - "frame": { - "x": 76, - "y": 39, - "w": 38, - "h": 40 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 38, - "h": 40 - }, - "frame": { - "x": 76, - "y": 39, - "w": 38, - "h": 40 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 38, - "h": 40 - }, - "frame": { - "x": 76, - "y": 39, - "w": 38, - "h": 40 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 7, - "w": 38, - "h": 40 - }, - "frame": { - "x": 38, - "y": 40, - "w": 38, - "h": 40 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 40 - }, - "frame": { - "x": 38, - "y": 40, - "w": 38, - "h": 40 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 7, - "w": 38, - "h": 40 - }, - "frame": { - "x": 38, - "y": 40, - "w": 38, - "h": 40 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 40 - }, - "frame": { - "x": 38, - "y": 40, - "w": 38, - "h": 40 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 7, - "w": 38, - "h": 40 - }, - "frame": { - "x": 38, - "y": 40, - "w": 38, - "h": 40 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 40 - }, - "frame": { - "x": 38, - "y": 40, - "w": 38, - "h": 40 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 7, - "w": 38, - "h": 40 - }, - "frame": { - "x": 38, - "y": 40, - "w": 38, - "h": 40 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 40 - }, - "frame": { - "x": 38, - "y": 40, - "w": 38, - "h": 40 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 40 - }, - "frame": { - "x": 114, - "y": 40, - "w": 38, - "h": 40 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 40 - }, - "frame": { - "x": 114, - "y": 40, - "w": 38, - "h": 40 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 40 - }, - "frame": { - "x": 114, - "y": 40, - "w": 38, - "h": 40 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 40 - }, - "frame": { - "x": 114, - "y": 40, - "w": 38, - "h": 40 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 40 - }, - "frame": { - "x": 114, - "y": 40, - "w": 38, - "h": 40 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 38, - "h": 40 - }, - "frame": { - "x": 76, - "y": 79, - "w": 38, - "h": 40 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 37, - "h": 40 - }, - "frame": { - "x": 114, - "y": 80, - "w": 37, - "h": 40 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 37, - "h": 40 - }, - "frame": { - "x": 114, - "y": 80, - "w": 37, - "h": 40 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 37, - "h": 40 - }, - "frame": { - "x": 114, - "y": 80, - "w": 37, - "h": 40 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 37, - "h": 40 - }, - "frame": { - "x": 114, - "y": 80, - "w": 37, - "h": 40 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:910fb9af9ea6e167d162cc6f8ae5174e:9e48a450788ccb42705466148db9893d:721af8c322ff60159262e9b3017c784d$" - } -} diff --git a/public/images/pokemon/exp/back/shiny/703.png b/public/images/pokemon/exp/back/shiny/703.png deleted file mode 100644 index 2081d702118..00000000000 Binary files a/public/images/pokemon/exp/back/shiny/703.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/shiny/704.json b/public/images/pokemon/exp/back/shiny/704.json index 32f8d89d5a8..ff94c52a2a8 100644 --- a/public/images/pokemon/exp/back/shiny/704.json +++ b/public/images/pokemon/exp/back/shiny/704.json @@ -1,230 +1,101 @@ -{ - "textures": [ - { - "image": "704.png", - "format": "RGBA8888", - "size": { - "w": 81, - "h": 81 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 27, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 27, - "h": 34 - }, - "frame": { - "x": 0, - "y": 0, - "w": 27, - "h": 34 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 27, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 27, - "h": 34 - }, - "frame": { - "x": 0, - "y": 0, - "w": 27, - "h": 34 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 27, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 27, - "h": 34 - }, - "frame": { - "x": 0, - "y": 0, - "w": 27, - "h": 34 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 27, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 27, - "h": 34 - }, - "frame": { - "x": 0, - "y": 0, - "w": 27, - "h": 34 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 27, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 27, - "h": 33 - }, - "frame": { - "x": 27, - "y": 0, - "w": 27, - "h": 33 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 27, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 27, - "h": 33 - }, - "frame": { - "x": 27, - "y": 0, - "w": 27, - "h": 33 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 27, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 27, - "h": 33 - }, - "frame": { - "x": 27, - "y": 33, - "w": 27, - "h": 33 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 27, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 27, - "h": 33 - }, - "frame": { - "x": 27, - "y": 33, - "w": 27, - "h": 33 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 27, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 27, - "h": 32 - }, - "frame": { - "x": 0, - "y": 34, - "w": 27, - "h": 32 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 27, - "h": 34 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 27, - "h": 31 - }, - "frame": { - "x": 54, - "y": 0, - "w": 27, - "h": 31 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:6de9f988e21fa1819baa4118b3f8d3c5:467738d3742ffa651ad1f101f3369860:45bb13be23ae6e2a6654a2a00c450d62$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 27, "h": 34 }, + "duration": 150 + }, + { + "filename": "0002.png", + "frame": { "x": 53, "y": 0, "w": 26, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 26, "h": 32 }, + "sourceSize": { "w": 27, "h": 34 }, + "duration": 150 + }, + { + "filename": "0003.png", + "frame": { "x": 26, "y": 0, "w": 27, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 27, "h": 31 }, + "sourceSize": { "w": 27, "h": 34 }, + "duration": 150 + }, + { + "filename": "0004.png", + "frame": { "x": 53, "y": 0, "w": 26, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 26, "h": 32 }, + "sourceSize": { "w": 27, "h": 34 }, + "duration": 150 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 27, "h": 34 }, + "duration": 150 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 27, "h": 34 }, + "duration": 150 + }, + { + "filename": "0007.png", + "frame": { "x": 26, "y": 31, "w": 26, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 26, "h": 32 }, + "sourceSize": { "w": 27, "h": 34 }, + "duration": 150 + }, + { + "filename": "0008.png", + "frame": { "x": 52, "y": 32, "w": 27, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 27, "h": 30 }, + "sourceSize": { "w": 27, "h": 34 }, + "duration": 150 + }, + { + "filename": "0009.png", + "frame": { "x": 26, "y": 31, "w": 26, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 26, "h": 32 }, + "sourceSize": { "w": 27, "h": 34 }, + "duration": 150 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 27, "h": 34 }, + "duration": 150 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "704.png", + "format": "I8", + "size": { "w": 79, "h": 63 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/704.png b/public/images/pokemon/exp/back/shiny/704.png index 5d3b5026ded..75a2898cd92 100644 Binary files a/public/images/pokemon/exp/back/shiny/704.png and b/public/images/pokemon/exp/back/shiny/704.png differ diff --git a/public/images/pokemon/exp/back/shiny/705.json b/public/images/pokemon/exp/back/shiny/705.json index ab139c247f5..2fc8cb18e99 100644 --- a/public/images/pokemon/exp/back/shiny/705.json +++ b/public/images/pokemon/exp/back/shiny/705.json @@ -1,230 +1,596 @@ -{ - "textures": [ - { - "image": "705.png", - "format": "RGBA8888", - "size": { - "w": 118, - "h": 118 - }, - "scale": 1, - "frames": [ - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 59 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 39, - "h": 59 - }, - "frame": { - "x": 0, - "y": 0, - "w": 39, - "h": 59 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 59 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 39, - "h": 59 - }, - "frame": { - "x": 0, - "y": 0, - "w": 39, - "h": 59 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 59 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 59 - }, - "frame": { - "x": 0, - "y": 59, - "w": 37, - "h": 59 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 59 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 59 - }, - "frame": { - "x": 0, - "y": 59, - "w": 37, - "h": 59 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 59 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 59 - }, - "frame": { - "x": 37, - "y": 59, - "w": 35, - "h": 59 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 59 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 59 - }, - "frame": { - "x": 39, - "y": 0, - "w": 35, - "h": 59 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 59 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 59 - }, - "frame": { - "x": 39, - "y": 0, - "w": 35, - "h": 59 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 59 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 41, - "h": 58 - }, - "frame": { - "x": 72, - "y": 59, - "w": 41, - "h": 58 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 59 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 41, - "h": 58 - }, - "frame": { - "x": 72, - "y": 59, - "w": 41, - "h": 58 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 59 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 42, - "h": 57 - }, - "frame": { - "x": 74, - "y": 0, - "w": 42, - "h": 57 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:82a03fa5424412ce647108fd8dac55a8:b9edd38338e7033be81034e75b8ae8a8:6b57e983626c7fc9144ab67f30c66814$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 116, "y": 124, "w": 40, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 40, "h": 59 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 40, "y": 185, "w": 40, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 40, "h": 58 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 77, "y": 298, "w": 40, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 40, "h": 56 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 162, "y": 299, "w": 40, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 40, "h": 56 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 202, "y": 299, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 41, "h": 54 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 117, "y": 300, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 41, "h": 54 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 121, "y": 245, "w": 41, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 41, "h": 55 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 80, "y": 242, "w": 41, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 41, "h": 56 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 0, "y": 244, "w": 40, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 40, "h": 57 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 194, "y": 240, "w": 39, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 39, "h": 59 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 125, "w": 37, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 37, "h": 59 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 156, "y": 184, "w": 38, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 38, "h": 61 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 40, "y": 243, "w": 37, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 37, "h": 62 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 158, "y": 0, "w": 39, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 39, "h": 62 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 156, "y": 62, "w": 39, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 39, "h": 61 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 197, "y": 0, "w": 40, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 40, "h": 60 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 116, "y": 124, "w": 40, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 40, "h": 59 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 40, "y": 185, "w": 40, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 40, "h": 58 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 77, "y": 298, "w": 40, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 40, "h": 56 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 162, "y": 299, "w": 40, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 40, "h": 56 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 202, "y": 299, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 41, "h": 54 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 117, "y": 300, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 41, "h": 54 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 121, "y": 245, "w": 41, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 41, "h": 55 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 80, "y": 242, "w": 41, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 41, "h": 56 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 244, "w": 40, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 40, "h": 57 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 194, "y": 240, "w": 39, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 39, "h": 59 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 125, "w": 37, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 37, "h": 59 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 156, "y": 184, "w": 38, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 38, "h": 61 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 40, "y": 243, "w": 37, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 37, "h": 62 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 158, "y": 0, "w": 39, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 39, "h": 62 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 156, "y": 62, "w": 39, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 39, "h": 61 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 197, "y": 0, "w": 40, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 40, "h": 60 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 116, "y": 124, "w": 40, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 40, "h": 59 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 40, "y": 185, "w": 40, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 40, "h": 58 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 77, "y": 298, "w": 40, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 40, "h": 56 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 162, "y": 299, "w": 40, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 40, "h": 56 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 202, "y": 299, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 41, "h": 54 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 117, "y": 300, "w": 41, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 41, "h": 54 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 121, "y": 245, "w": 41, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 41, "h": 55 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 80, "y": 242, "w": 41, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 41, "h": 56 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 244, "w": 40, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 40, "h": 57 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 194, "y": 240, "w": 39, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 39, "h": 59 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 125, "w": 37, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 37, "h": 59 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 156, "y": 184, "w": 38, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 38, "h": 61 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 40, "y": 243, "w": 37, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 37, "h": 62 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 158, "y": 0, "w": 39, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 39, "h": 62 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 156, "y": 62, "w": 39, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 39, "h": 61 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 197, "y": 0, "w": 40, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 40, "h": 60 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 116, "y": 124, "w": 40, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 40, "h": 59 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 195, "y": 181, "w": 40, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 40, "h": 59 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 118, "y": 0, "w": 40, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 40, "h": 61 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 0, "y": 0, "w": 40, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 40, "h": 62 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 118, "y": 61, "w": 38, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 38, "h": 63 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 62, "w": 38, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 38, "h": 63 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 40, "y": 0, "w": 39, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 39, "h": 63 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 79, "y": 0, "w": 39, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 39, "h": 63 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 38, "y": 63, "w": 39, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 39, "h": 61 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 77, "y": 63, "w": 39, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 39, "h": 61 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 195, "y": 120, "w": 39, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 39, "h": 61 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 156, "y": 123, "w": 39, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 39, "h": 61 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 38, "y": 124, "w": 39, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 39, "h": 61 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 77, "y": 124, "w": 39, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 39, "h": 61 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 197, "y": 60, "w": 40, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 40, "h": 60 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 116, "y": 183, "w": 40, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 40, "h": 59 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 0, "y": 185, "w": 40, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 40, "h": 59 }, + "sourceSize": { "w": 43, "h": 63 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "705.png", + "format": "I8", + "size": { "w": 243, "h": 355 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/705.png b/public/images/pokemon/exp/back/shiny/705.png index 65c9933f415..4ee803dd570 100644 Binary files a/public/images/pokemon/exp/back/shiny/705.png and b/public/images/pokemon/exp/back/shiny/705.png differ diff --git a/public/images/pokemon/exp/back/shiny/707.png b/public/images/pokemon/exp/back/shiny/707.png deleted file mode 100644 index 538667f7252..00000000000 Binary files a/public/images/pokemon/exp/back/shiny/707.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/shiny/708.json b/public/images/pokemon/exp/back/shiny/708.json deleted file mode 100644 index fe864e9f9ea..00000000000 --- a/public/images/pokemon/exp/back/shiny/708.json +++ /dev/null @@ -1,503 +0,0 @@ -{ - "textures": [ - { - "image": "708.png", - "format": "RGBA8888", - "size": { - "w": 135, - "h": 135 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 46, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 46 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 46, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 46 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 46, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 46 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 45, - "h": 46 - }, - "frame": { - "x": 0, - "y": 46, - "w": 45, - "h": 46 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 45, - "h": 46 - }, - "frame": { - "x": 0, - "y": 46, - "w": 45, - "h": 46 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 45, - "h": 46 - }, - "frame": { - "x": 0, - "y": 46, - "w": 45, - "h": 46 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 45, - "h": 43 - }, - "frame": { - "x": 0, - "y": 92, - "w": 45, - "h": 43 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 45, - "h": 43 - }, - "frame": { - "x": 0, - "y": 92, - "w": 45, - "h": 43 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 44, - "h": 46 - }, - "frame": { - "x": 45, - "y": 46, - "w": 44, - "h": 46 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 44, - "h": 46 - }, - "frame": { - "x": 45, - "y": 46, - "w": 44, - "h": 46 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 44, - "h": 46 - }, - "frame": { - "x": 45, - "y": 46, - "w": 44, - "h": 46 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 45, - "h": 45 - }, - "frame": { - "x": 46, - "y": 0, - "w": 45, - "h": 45 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 45, - "h": 45 - }, - "frame": { - "x": 46, - "y": 0, - "w": 45, - "h": 45 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 45, - "h": 45 - }, - "frame": { - "x": 46, - "y": 0, - "w": 45, - "h": 45 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 45, - "h": 45 - }, - "frame": { - "x": 46, - "y": 0, - "w": 45, - "h": 45 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 44, - "h": 41 - }, - "frame": { - "x": 91, - "y": 0, - "w": 44, - "h": 41 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 44, - "h": 41 - }, - "frame": { - "x": 91, - "y": 0, - "w": 44, - "h": 41 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 45, - "h": 45 - }, - "frame": { - "x": 89, - "y": 45, - "w": 45, - "h": 45 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 45, - "h": 45 - }, - "frame": { - "x": 89, - "y": 45, - "w": 45, - "h": 45 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 45, - "h": 45 - }, - "frame": { - "x": 89, - "y": 45, - "w": 45, - "h": 45 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 45, - "h": 44 - }, - "frame": { - "x": 89, - "y": 90, - "w": 45, - "h": 44 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 45, - "h": 44 - }, - "frame": { - "x": 89, - "y": 90, - "w": 45, - "h": 44 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 51 - }, - "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 45, - "h": 44 - }, - "frame": { - "x": 89, - "y": 90, - "w": 45, - "h": 44 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:ae43a2361518d114c34efceaee18a46b:85de733a19b6cdd71d9518299acef7f4:796c82c5076b122f2663381836c65843$" - } -} diff --git a/public/images/pokemon/exp/back/shiny/708.png b/public/images/pokemon/exp/back/shiny/708.png deleted file mode 100644 index 35e2594241a..00000000000 Binary files a/public/images/pokemon/exp/back/shiny/708.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/shiny/712.json b/public/images/pokemon/exp/back/shiny/712.json index 1fc96cf19a4..869a92fd6ea 100644 --- a/public/images/pokemon/exp/back/shiny/712.json +++ b/public/images/pokemon/exp/back/shiny/712.json @@ -1,3338 +1,1433 @@ -{ - "textures": [ - { - "image": "712.png", - "format": "RGBA8888", - "size": { - "w": 208, - "h": 208 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0112.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0113.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 37, - "h": 44 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 37, - "h": 44 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 37, - "h": 44 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 37, - "h": 44 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 37, - "h": 44 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 37, - "h": 44 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 37, - "h": 44 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 37, - "h": 44 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 37, - "h": 44 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 37, - "h": 44 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 37, - "h": 44 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 37, - "h": 44 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 37, - "h": 44 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 37, - "h": 44 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 37, - "h": 44 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 37, - "h": 44 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 37, - "h": 44 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 37, - "h": 44 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 37, - "h": 44 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 37, - "h": 44 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 37, - "h": 44 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 37, - "h": 44 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 37, - "h": 44 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 37, - "h": 44 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 37, - "h": 44 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 37, - "h": 44 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 37, - "h": 44 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 37, - "h": 44 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 37, - "h": 44 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 37, - "h": 44 - } - }, - { - "filename": "0138.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 37, - "y": 0, - "w": 38, - "h": 41 - } - }, - { - "filename": "0139.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 37, - "y": 0, - "w": 38, - "h": 41 - } - }, - { - "filename": "0140.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 75, - "y": 0, - "w": 38, - "h": 41 - } - }, - { - "filename": "0141.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 75, - "y": 0, - "w": 38, - "h": 41 - } - }, - { - "filename": "0144.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 113, - "y": 0, - "w": 38, - "h": 41 - } - }, - { - "filename": "0145.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 113, - "y": 0, - "w": 38, - "h": 41 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 151, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 151, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 151, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 151, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 151, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 151, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 151, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 151, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 151, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 37, - "h": 44 - }, - "frame": { - "x": 151, - "y": 0, - "w": 37, - "h": 44 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 37, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 37, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 37, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 37, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 37, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 37, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 37, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 37, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 37, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 37, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 74, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 74, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 74, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 74, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 74, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 74, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 74, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 74, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 74, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 74, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 111, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 111, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 111, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 111, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 111, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 111, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 111, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 111, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 111, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 111, - "y": 41, - "w": 37, - "h": 43 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 148, - "y": 44, - "w": 37, - "h": 43 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 148, - "y": 44, - "w": 37, - "h": 43 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 148, - "y": 44, - "w": 37, - "h": 43 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 148, - "y": 44, - "w": 37, - "h": 43 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 148, - "y": 44, - "w": 37, - "h": 43 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 148, - "y": 44, - "w": 37, - "h": 43 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 148, - "y": 44, - "w": 37, - "h": 43 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 148, - "y": 44, - "w": 37, - "h": 43 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 148, - "y": 44, - "w": 37, - "h": 43 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 148, - "y": 44, - "w": 37, - "h": 43 - } - }, - { - "filename": "0114.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 37, - "y": 84, - "w": 37, - "h": 43 - } - }, - { - "filename": "0115.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 37, - "y": 84, - "w": 37, - "h": 43 - } - }, - { - "filename": "0157.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 37, - "y": 84, - "w": 37, - "h": 43 - } - }, - { - "filename": "0158.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 37, - "h": 43 - }, - "frame": { - "x": 37, - "y": 84, - "w": 37, - "h": 43 - } - }, - { - "filename": "0116.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 37, - "h": 42 - }, - "frame": { - "x": 74, - "y": 84, - "w": 37, - "h": 42 - } - }, - { - "filename": "0117.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 37, - "h": 42 - }, - "frame": { - "x": 74, - "y": 84, - "w": 37, - "h": 42 - } - }, - { - "filename": "0155.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 37, - "h": 42 - }, - "frame": { - "x": 74, - "y": 84, - "w": 37, - "h": 42 - } - }, - { - "filename": "0156.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 37, - "h": 42 - }, - "frame": { - "x": 74, - "y": 84, - "w": 37, - "h": 42 - } - }, - { - "filename": "0118.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 111, - "y": 84, - "w": 37, - "h": 41 - } - }, - { - "filename": "0119.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 111, - "y": 84, - "w": 37, - "h": 41 - } - }, - { - "filename": "0120.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 111, - "y": 84, - "w": 37, - "h": 41 - } - }, - { - "filename": "0121.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 111, - "y": 84, - "w": 37, - "h": 41 - } - }, - { - "filename": "0122.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 111, - "y": 84, - "w": 37, - "h": 41 - } - }, - { - "filename": "0123.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 111, - "y": 84, - "w": 37, - "h": 41 - } - }, - { - "filename": "0150.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 111, - "y": 84, - "w": 37, - "h": 41 - } - }, - { - "filename": "0151.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 111, - "y": 84, - "w": 37, - "h": 41 - } - }, - { - "filename": "0152.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 111, - "y": 84, - "w": 37, - "h": 41 - } - }, - { - "filename": "0153.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 111, - "y": 84, - "w": 37, - "h": 41 - } - }, - { - "filename": "0154.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 111, - "y": 84, - "w": 37, - "h": 41 - } - }, - { - "filename": "0124.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 148, - "y": 87, - "w": 37, - "h": 41 - } - }, - { - "filename": "0125.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 148, - "y": 87, - "w": 37, - "h": 41 - } - }, - { - "filename": "0126.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 111, - "y": 125, - "w": 37, - "h": 41 - } - }, - { - "filename": "0127.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 111, - "y": 125, - "w": 37, - "h": 41 - } - }, - { - "filename": "0134.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 111, - "y": 125, - "w": 37, - "h": 41 - } - }, - { - "filename": "0135.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 111, - "y": 125, - "w": 37, - "h": 41 - } - }, - { - "filename": "0128.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 74, - "y": 126, - "w": 37, - "h": 41 - } - }, - { - "filename": "0129.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 74, - "y": 126, - "w": 37, - "h": 41 - } - }, - { - "filename": "0132.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 74, - "y": 126, - "w": 37, - "h": 41 - } - }, - { - "filename": "0133.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 74, - "y": 126, - "w": 37, - "h": 41 - } - }, - { - "filename": "0130.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 37, - "y": 127, - "w": 37, - "h": 41 - } - }, - { - "filename": "0131.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 37, - "y": 127, - "w": 37, - "h": 41 - } - }, - { - "filename": "0136.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 74, - "y": 167, - "w": 37, - "h": 41 - } - }, - { - "filename": "0137.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 74, - "y": 167, - "w": 37, - "h": 41 - } - }, - { - "filename": "0148.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 37, - "h": 40 - }, - "frame": { - "x": 37, - "y": 168, - "w": 37, - "h": 40 - } - }, - { - "filename": "0149.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 37, - "h": 40 - }, - "frame": { - "x": 37, - "y": 168, - "w": 37, - "h": 40 - } - }, - { - "filename": "0142.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 111, - "y": 166, - "w": 37, - "h": 41 - } - }, - { - "filename": "0143.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 111, - "y": 166, - "w": 37, - "h": 41 - } - }, - { - "filename": "0146.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 36, - "h": 41 - }, - "frame": { - "x": 148, - "y": 128, - "w": 36, - "h": 41 - } - }, - { - "filename": "0147.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 36, - "h": 41 - }, - "frame": { - "x": 148, - "y": 128, - "w": 36, - "h": 41 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:6fc0455d6f0af01f72622b0f21f8ee70:352443e5019cc9719abfbd45c1015afa:3a1cc69824960d920ca43f8c9376d136$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 109, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0002.png", + "frame": { "x": 109, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0003.png", + "frame": { "x": 109, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0004.png", + "frame": { "x": 145, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0005.png", + "frame": { "x": 145, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0006.png", + "frame": { "x": 72, "y": 43, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0007.png", + "frame": { "x": 72, "y": 43, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0008.png", + "frame": { "x": 108, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0009.png", + "frame": { "x": 108, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0010.png", + "frame": { "x": 144, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0011.png", + "frame": { "x": 144, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0012.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0013.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0014.png", + "frame": { "x": 181, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0015.png", + "frame": { "x": 181, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0018.png", + "frame": { "x": 36, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0019.png", + "frame": { "x": 36, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0020.png", + "frame": { "x": 109, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0021.png", + "frame": { "x": 109, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0022.png", + "frame": { "x": 109, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0023.png", + "frame": { "x": 109, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0024.png", + "frame": { "x": 109, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0025.png", + "frame": { "x": 109, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0026.png", + "frame": { "x": 145, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0027.png", + "frame": { "x": 145, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0028.png", + "frame": { "x": 72, "y": 43, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0029.png", + "frame": { "x": 72, "y": 43, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0030.png", + "frame": { "x": 108, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0031.png", + "frame": { "x": 108, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0032.png", + "frame": { "x": 144, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0033.png", + "frame": { "x": 144, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0034.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0035.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0036.png", + "frame": { "x": 181, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0037.png", + "frame": { "x": 181, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0038.png", + "frame": { "x": 0, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0039.png", + "frame": { "x": 0, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0040.png", + "frame": { "x": 36, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0041.png", + "frame": { "x": 36, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0042.png", + "frame": { "x": 109, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0043.png", + "frame": { "x": 109, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0044.png", + "frame": { "x": 109, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0045.png", + "frame": { "x": 109, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0046.png", + "frame": { "x": 109, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0047.png", + "frame": { "x": 109, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0048.png", + "frame": { "x": 145, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0049.png", + "frame": { "x": 145, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0050.png", + "frame": { "x": 72, "y": 43, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0051.png", + "frame": { "x": 72, "y": 43, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0052.png", + "frame": { "x": 108, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0053.png", + "frame": { "x": 108, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0054.png", + "frame": { "x": 144, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0055.png", + "frame": { "x": 144, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0056.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0057.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0058.png", + "frame": { "x": 181, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0059.png", + "frame": { "x": 181, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0060.png", + "frame": { "x": 0, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 0, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 36, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0063.png", + "frame": { "x": 36, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0064.png", + "frame": { "x": 109, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0065.png", + "frame": { "x": 109, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0066.png", + "frame": { "x": 109, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0067.png", + "frame": { "x": 109, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0068.png", + "frame": { "x": 109, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0069.png", + "frame": { "x": 109, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0070.png", + "frame": { "x": 145, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0071.png", + "frame": { "x": 145, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0072.png", + "frame": { "x": 72, "y": 43, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0073.png", + "frame": { "x": 72, "y": 43, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0074.png", + "frame": { "x": 108, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0075.png", + "frame": { "x": 108, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0076.png", + "frame": { "x": 144, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0077.png", + "frame": { "x": 144, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0078.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0079.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0080.png", + "frame": { "x": 181, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0081.png", + "frame": { "x": 181, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0082.png", + "frame": { "x": 0, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0083.png", + "frame": { "x": 0, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0084.png", + "frame": { "x": 36, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0085.png", + "frame": { "x": 36, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0086.png", + "frame": { "x": 109, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0087.png", + "frame": { "x": 109, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0088.png", + "frame": { "x": 109, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0089.png", + "frame": { "x": 109, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0090.png", + "frame": { "x": 109, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0091.png", + "frame": { "x": 109, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0092.png", + "frame": { "x": 145, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0093.png", + "frame": { "x": 145, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0094.png", + "frame": { "x": 72, "y": 43, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0095.png", + "frame": { "x": 72, "y": 43, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0096.png", + "frame": { "x": 108, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0097.png", + "frame": { "x": 108, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0098.png", + "frame": { "x": 144, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0099.png", + "frame": { "x": 144, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0100.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0101.png", + "frame": { "x": 72, "y": 0, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0102.png", + "frame": { "x": 181, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0103.png", + "frame": { "x": 181, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0104.png", + "frame": { "x": 0, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0105.png", + "frame": { "x": 0, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0106.png", + "frame": { "x": 36, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0107.png", + "frame": { "x": 36, "y": 0, "w": 35, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 35, "h": 44 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0108.png", + "frame": { "x": 109, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0109.png", + "frame": { "x": 109, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0110.png", + "frame": { "x": 109, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0111.png", + "frame": { "x": 109, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0112.png", + "frame": { "x": 109, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0113.png", + "frame": { "x": 109, "y": 0, "w": 35, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 35, "h": 43 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0114.png", + "frame": { "x": 180, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0115.png", + "frame": { "x": 180, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0116.png", + "frame": { "x": 148, "y": 87, "w": 35, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 35, "h": 41 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0117.png", + "frame": { "x": 148, "y": 87, "w": 35, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 35, "h": 41 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0118.png", + "frame": { "x": 0, "y": 127, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0119.png", + "frame": { "x": 0, "y": 127, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0120.png", + "frame": { "x": 0, "y": 127, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0121.png", + "frame": { "x": 0, "y": 127, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0122.png", + "frame": { "x": 0, "y": 127, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0123.png", + "frame": { "x": 0, "y": 127, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0124.png", + "frame": { "x": 36, "y": 127, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0125.png", + "frame": { "x": 36, "y": 127, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0126.png", + "frame": { "x": 72, "y": 128, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0127.png", + "frame": { "x": 72, "y": 128, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0128.png", + "frame": { "x": 0, "y": 45, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0129.png", + "frame": { "x": 0, "y": 45, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0130.png", + "frame": { "x": 0, "y": 86, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0131.png", + "frame": { "x": 0, "y": 86, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0132.png", + "frame": { "x": 0, "y": 45, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0133.png", + "frame": { "x": 0, "y": 45, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0134.png", + "frame": { "x": 72, "y": 128, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0135.png", + "frame": { "x": 72, "y": 128, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0136.png", + "frame": { "x": 108, "y": 128, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0137.png", + "frame": { "x": 108, "y": 128, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0138.png", + "frame": { "x": 37, "y": 86, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0139.png", + "frame": { "x": 37, "y": 86, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0140.png", + "frame": { "x": 74, "y": 87, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0141.png", + "frame": { "x": 74, "y": 87, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0142.png", + "frame": { "x": 144, "y": 129, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0143.png", + "frame": { "x": 144, "y": 129, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0144.png", + "frame": { "x": 111, "y": 87, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0145.png", + "frame": { "x": 111, "y": 87, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0146.png", + "frame": { "x": 180, "y": 129, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0147.png", + "frame": { "x": 180, "y": 129, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0148.png", + "frame": { "x": 0, "y": 168, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0149.png", + "frame": { "x": 0, "y": 168, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0150.png", + "frame": { "x": 0, "y": 127, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0151.png", + "frame": { "x": 0, "y": 127, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0152.png", + "frame": { "x": 0, "y": 127, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0153.png", + "frame": { "x": 0, "y": 127, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0154.png", + "frame": { "x": 0, "y": 127, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0155.png", + "frame": { "x": 148, "y": 87, "w": 35, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 35, "h": 41 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0156.png", + "frame": { "x": 148, "y": 87, "w": 35, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 35, "h": 41 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0157.png", + "frame": { "x": 180, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + }, + { + "filename": "0158.png", + "frame": { "x": 180, "y": 44, "w": 35, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 35, "h": 42 }, + "sourceSize": { "w": 40, "h": 44 }, + "duration": 50 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "712.png", + "format": "I8", + "size": { "w": 216, "h": 207 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/712.png b/public/images/pokemon/exp/back/shiny/712.png index 709718daf83..989ed14b08e 100644 Binary files a/public/images/pokemon/exp/back/shiny/712.png and b/public/images/pokemon/exp/back/shiny/712.png differ diff --git a/public/images/pokemon/exp/back/shiny/713.json b/public/images/pokemon/exp/back/shiny/713.json index 8f1736a5256..0ff72eef867 100644 --- a/public/images/pokemon/exp/back/shiny/713.json +++ b/public/images/pokemon/exp/back/shiny/713.json @@ -1,188 +1,1100 @@ -{ - "textures": [ - { - "image": "713.png", - "format": "RGBA8888", - "size": { - "w": 199, - "h": 199 - }, - "scale": 1, - "frames": [ - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 87, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 87, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 87, - "h": 69 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 87, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 87, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 87, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 87, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 87, - "h": 69 - }, - "frame": { - "x": 87, - "y": 0, - "w": 87, - "h": 69 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 87, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 87, - "h": 69 - }, - "frame": { - "x": 87, - "y": 0, - "w": 87, - "h": 69 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 87, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 87, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 87, - "h": 69 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 87, - "h": 66 - }, - "frame": { - "x": 87, - "y": 69, - "w": 87, - "h": 66 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 87, - "h": 66 - }, - "frame": { - "x": 87, - "y": 69, - "w": 87, - "h": 66 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 87, - "h": 64 - }, - "frame": { - "x": 87, - "y": 135, - "w": 87, - "h": 64 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:0af8023555592952fe28b217e91b3a50:e8f7bce9a0476374152ae2437bd2d84b:625f70bcfe9c7f2437cb9cad6d2b863c$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 87, "y": 126, "w": 87, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 62 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 127, "w": 87, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 62 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 261, "y": 127, "w": 87, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 87, "h": 61 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 174, "y": 128, "w": 87, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 87, "h": 61 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 87, "y": 188, "w": 87, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 87, "h": 60 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 87, "y": 188, "w": 87, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 87, "h": 60 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 87, "y": 188, "w": 87, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 87, "h": 60 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 174, "y": 128, "w": 87, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 87, "h": 61 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 261, "y": 127, "w": 87, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 87, "h": 61 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 127, "w": 87, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 62 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 87, "y": 126, "w": 87, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 62 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 270, "y": 64, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 270, "y": 0, "w": 87, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 64 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 63, "w": 87, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 64 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 183, "y": 0, "w": 87, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 65 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 183, "y": 0, "w": 87, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 65 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 183, "y": 0, "w": 87, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 65 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 183, "y": 0, "w": 87, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 65 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 0, "y": 63, "w": 87, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 64 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 270, "y": 0, "w": 87, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 64 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 270, "y": 64, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 87, "y": 126, "w": 87, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 62 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 127, "w": 87, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 62 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 261, "y": 127, "w": 87, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 87, "h": 61 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 174, "y": 128, "w": 87, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 87, "h": 61 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 87, "y": 188, "w": 87, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 87, "h": 60 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 87, "y": 188, "w": 87, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 87, "h": 60 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 87, "y": 188, "w": 87, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 87, "h": 60 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 174, "y": 128, "w": 87, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 87, "h": 61 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 261, "y": 127, "w": 87, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 87, "h": 61 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 0, "y": 127, "w": 87, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 62 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 87, "y": 126, "w": 87, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 62 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 270, "y": 64, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 270, "y": 0, "w": 87, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 64 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 0, "y": 63, "w": 87, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 64 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 183, "y": 0, "w": 87, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 65 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 183, "y": 0, "w": 87, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 65 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 183, "y": 0, "w": 87, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 65 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 183, "y": 0, "w": 87, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 65 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 0, "y": 63, "w": 87, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 64 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 270, "y": 0, "w": 87, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 64 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 270, "y": 64, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 87, "y": 126, "w": 87, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 62 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 127, "w": 87, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 62 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 261, "y": 127, "w": 87, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 87, "h": 61 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 174, "y": 128, "w": 87, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 87, "h": 61 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 87, "y": 188, "w": 87, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 87, "h": 60 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 87, "y": 188, "w": 87, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 87, "h": 60 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 87, "y": 188, "w": 87, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 87, "h": 60 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 174, "y": 128, "w": 87, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 87, "h": 61 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 261, "y": 127, "w": 87, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 87, "h": 61 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 0, "y": 127, "w": 87, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 62 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 87, "y": 126, "w": 87, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 62 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 270, "y": 64, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 270, "y": 0, "w": 87, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 64 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 0, "y": 63, "w": 87, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 64 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 183, "y": 0, "w": 87, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 65 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 183, "y": 0, "w": 87, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 65 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 183, "y": 0, "w": 87, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 65 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 183, "y": 0, "w": 87, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 65 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 0, "y": 63, "w": 87, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 64 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 270, "y": 0, "w": 87, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 64 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 270, "y": 64, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 87, "y": 126, "w": 87, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 62 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 0, "y": 127, "w": 87, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 62 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 261, "y": 127, "w": 87, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 87, "h": 61 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 174, "y": 128, "w": 87, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 87, "h": 61 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 87, "y": 188, "w": 87, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 87, "h": 60 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 87, "y": 188, "w": 87, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 87, "h": 60 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 87, "y": 188, "w": 87, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 87, "h": 60 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 174, "y": 128, "w": 87, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 87, "h": 61 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 261, "y": 127, "w": 87, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 87, "h": 61 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 0, "y": 127, "w": 87, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 62 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 87, "y": 126, "w": 87, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 62 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 270, "y": 64, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 270, "y": 0, "w": 87, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 64 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 0, "y": 63, "w": 87, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 64 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 183, "y": 0, "w": 87, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 65 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 183, "y": 0, "w": 87, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 65 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 183, "y": 0, "w": 87, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 65 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 183, "y": 0, "w": 87, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 65 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 0, "y": 63, "w": 87, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 64 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 270, "y": 0, "w": 87, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 64 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 270, "y": 64, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 270, "y": 64, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 174, "y": 65, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 174, "y": 65, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 92, "y": 0, "w": 91, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 91, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 92, "y": 0, "w": 91, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 91, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 0, "y": 0, "w": 92, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 92, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 0, "y": 0, "w": 92, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 92, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 0, "y": 0, "w": 92, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 92, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 0, "y": 0, "w": 92, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 92, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 0, "y": 0, "w": 92, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 92, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0107.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0108.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0109.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0110.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0111.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0112.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0113.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0114.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0115.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0116.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0117.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0118.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0119.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0120.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + }, + { + "filename": "0121.png", + "frame": { "x": 87, "y": 63, "w": 87, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 87, "h": 63 }, + "sourceSize": { "w": 92, "h": 66 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "713.png", + "format": "I8", + "size": { "w": 357, "h": 248 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/713.png b/public/images/pokemon/exp/back/shiny/713.png index 87011e1bbb9..b4417f8386b 100644 Binary files a/public/images/pokemon/exp/back/shiny/713.png and b/public/images/pokemon/exp/back/shiny/713.png differ diff --git a/public/images/pokemon/exp/back/shiny/714.json b/public/images/pokemon/exp/back/shiny/714.json deleted file mode 100644 index 1d8e87ffa8c..00000000000 --- a/public/images/pokemon/exp/back/shiny/714.json +++ /dev/null @@ -1,230 +0,0 @@ -{ - "textures": [ - { - "image": "714.png", - "format": "RGBA8888", - "size": { - "w": 147, - "h": 147 - }, - "scale": 1, - "frames": [ - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 69 - }, - "spriteSourceSize": { - "x": 13, - "y": 0, - "w": 34, - "h": 57 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 57 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 60, - "h": 58 - }, - "frame": { - "x": 34, - "y": 0, - "w": 60, - "h": 58 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 69 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 46, - "h": 58 - }, - "frame": { - "x": 94, - "y": 0, - "w": 46, - "h": 58 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 69 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 46, - "h": 58 - }, - "frame": { - "x": 94, - "y": 0, - "w": 46, - "h": 58 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 69 - }, - "spriteSourceSize": { - "x": 1, - "y": 10, - "w": 58, - "h": 58 - }, - "frame": { - "x": 0, - "y": 58, - "w": 58, - "h": 58 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 69 - }, - "spriteSourceSize": { - "x": 1, - "y": 10, - "w": 58, - "h": 58 - }, - "frame": { - "x": 0, - "y": 58, - "w": 58, - "h": 58 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 69 - }, - "spriteSourceSize": { - "x": 3, - "y": 7, - "w": 54, - "h": 58 - }, - "frame": { - "x": 58, - "y": 58, - "w": 54, - "h": 58 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 69 - }, - "spriteSourceSize": { - "x": 3, - "y": 7, - "w": 54, - "h": 58 - }, - "frame": { - "x": 58, - "y": 58, - "w": 54, - "h": 58 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 69 - }, - "spriteSourceSize": { - "x": 12, - "y": 1, - "w": 35, - "h": 58 - }, - "frame": { - "x": 112, - "y": 58, - "w": 35, - "h": 58 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 69 - }, - "spriteSourceSize": { - "x": 12, - "y": 1, - "w": 35, - "h": 58 - }, - "frame": { - "x": 112, - "y": 58, - "w": 35, - "h": 58 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:b5f2c2112a42d04cd66e9ed8b57be94f:1af3c375153c5a8b4950e81283c602fa:1a07d46e710b0568ec824f54fbc4fe6a$" - } -} diff --git a/public/images/pokemon/exp/back/shiny/714.png b/public/images/pokemon/exp/back/shiny/714.png deleted file mode 100644 index fa2c001e7cc..00000000000 Binary files a/public/images/pokemon/exp/back/shiny/714.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/shiny/718-10.json b/public/images/pokemon/exp/back/shiny/718-10.json deleted file mode 100644 index 147d661bd6b..00000000000 --- a/public/images/pokemon/exp/back/shiny/718-10.json +++ /dev/null @@ -1,188 +0,0 @@ -{ - "textures": [ - { - "image": "718-10.png", - "format": "RGBA8888", - "size": { - "w": 194, - "h": 194 - }, - "scale": 1, - "frames": [ - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 62, - "h": 66 - }, - "frame": { - "x": 0, - "y": 0, - "w": 62, - "h": 66 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 60, - "h": 66 - }, - "frame": { - "x": 0, - "y": 66, - "w": 60, - "h": 66 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 60, - "h": 66 - }, - "frame": { - "x": 0, - "y": 66, - "w": 60, - "h": 66 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 63, - "h": 65 - }, - "frame": { - "x": 60, - "y": 66, - "w": 63, - "h": 65 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 63, - "h": 65 - }, - "frame": { - "x": 62, - "y": 0, - "w": 63, - "h": 65 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 63, - "h": 64 - }, - "frame": { - "x": 125, - "y": 0, - "w": 63, - "h": 64 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 62, - "h": 65 - }, - "frame": { - "x": 125, - "y": 64, - "w": 62, - "h": 65 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 59, - "h": 65 - }, - "frame": { - "x": 123, - "y": 129, - "w": 59, - "h": 65 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:9b4423fced8dd8763a4e886055e4ab1f:d04b9095317ace207a8d36f1e501da19:82195cf2a6db620c5643b8162d6e8c5c$" - } -} diff --git a/public/images/pokemon/exp/back/shiny/718-10.png b/public/images/pokemon/exp/back/shiny/718-10.png deleted file mode 100644 index 63d73684da4..00000000000 Binary files a/public/images/pokemon/exp/back/shiny/718-10.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/shiny/718.json b/public/images/pokemon/exp/back/shiny/718.json deleted file mode 100644 index b5cde64bbad..00000000000 --- a/public/images/pokemon/exp/back/shiny/718.json +++ /dev/null @@ -1,230 +0,0 @@ -{ - "textures": [ - { - "image": "718.png", - "format": "RGBA8888", - "size": { - "w": 216, - "h": 216 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 74, - "h": 89 - }, - "frame": { - "x": 0, - "y": 0, - "w": 74, - "h": 89 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 74, - "h": 89 - }, - "frame": { - "x": 0, - "y": 0, - "w": 74, - "h": 89 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 73, - "h": 89 - }, - "frame": { - "x": 0, - "y": 89, - "w": 73, - "h": 89 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 89 - }, - "frame": { - "x": 73, - "y": 89, - "w": 73, - "h": 89 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 89 - }, - "frame": { - "x": 73, - "y": 89, - "w": 73, - "h": 89 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 72, - "h": 89 - }, - "frame": { - "x": 74, - "y": 0, - "w": 72, - "h": 89 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 72, - "h": 89 - }, - "frame": { - "x": 74, - "y": 0, - "w": 72, - "h": 89 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 70, - "h": 88 - }, - "frame": { - "x": 146, - "y": 0, - "w": 70, - "h": 88 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 70, - "h": 88 - }, - "frame": { - "x": 146, - "y": 0, - "w": 70, - "h": 88 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 69, - "h": 87 - }, - "frame": { - "x": 146, - "y": 88, - "w": 69, - "h": 87 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:b8c991edb02cd8fac15ae3bfa6518a6b:1cf351059eb3257fa98dfd55b07708c4:7b4a06b06cbac24b3f39727b0238661b$" - } -} diff --git a/public/images/pokemon/exp/back/shiny/718.png b/public/images/pokemon/exp/back/shiny/718.png deleted file mode 100644 index 5e981224596..00000000000 Binary files a/public/images/pokemon/exp/back/shiny/718.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/shiny/719.json b/public/images/pokemon/exp/back/shiny/719.json deleted file mode 100644 index d39dc5b1c99..00000000000 --- a/public/images/pokemon/exp/back/shiny/719.json +++ /dev/null @@ -1,272 +0,0 @@ -{ - "textures": [ - { - "image": "719.png", - "format": "RGBA8888", - "size": { - "w": 158, - "h": 158 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 14, - "w": 39, - "h": 66 - }, - "frame": { - "x": 0, - "y": 0, - "w": 39, - "h": 66 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 39, - "h": 67 - }, - "frame": { - "x": 39, - "y": 0, - "w": 39, - "h": 67 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 39, - "h": 67 - }, - "frame": { - "x": 39, - "y": 0, - "w": 39, - "h": 67 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 40, - "h": 67 - }, - "frame": { - "x": 78, - "y": 0, - "w": 40, - "h": 67 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 40, - "h": 67 - }, - "frame": { - "x": 78, - "y": 0, - "w": 40, - "h": 67 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 40, - "h": 67 - }, - "frame": { - "x": 118, - "y": 0, - "w": 40, - "h": 67 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 40, - "h": 67 - }, - "frame": { - "x": 118, - "y": 0, - "w": 40, - "h": 67 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 80 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 41, - "h": 67 - }, - "frame": { - "x": 0, - "y": 67, - "w": 41, - "h": 67 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 68 - }, - "frame": { - "x": 41, - "y": 67, - "w": 41, - "h": 68 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 68 - }, - "frame": { - "x": 41, - "y": 67, - "w": 41, - "h": 68 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 80 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 68 - }, - "frame": { - "x": 82, - "y": 67, - "w": 42, - "h": 68 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 80 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 68 - }, - "frame": { - "x": 82, - "y": 67, - "w": 42, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:4664ffe6d92453555d7befbaf3a06e34:ee4f7a42565694ad44dfdf274a36ffbb:17a705bb924916761be2495822a53735$" - } -} diff --git a/public/images/pokemon/exp/back/shiny/719.png b/public/images/pokemon/exp/back/shiny/719.png deleted file mode 100644 index d1640abb4a0..00000000000 Binary files a/public/images/pokemon/exp/back/shiny/719.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/shiny/987.png b/public/images/pokemon/exp/back/shiny/987.png index d829e1a2d11..f62bb9f3ecc 100644 Binary files a/public/images/pokemon/exp/back/shiny/987.png and b/public/images/pokemon/exp/back/shiny/987.png differ diff --git a/public/images/pokemon/exp/708.json b/public/images/pokemon/exp/back/shiny/female/6215.json similarity index 62% rename from public/images/pokemon/exp/708.json rename to public/images/pokemon/exp/back/shiny/female/6215.json index f03fc408ded..07510ceaa55 100644 --- a/public/images/pokemon/exp/708.json +++ b/public/images/pokemon/exp/back/shiny/female/6215.json @@ -1,432 +1,33 @@ { "textures": [ { - "image": "708.png", + "image": "6215.png", "format": "RGBA8888", "size": { - "w": 206, - "h": 206 + "w": 155, + "h": 155 }, "scale": 1, "frames": [ - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 51, - "h": 43 - }, - "frame": { - "x": 0, - "y": 0, - "w": 51, - "h": 43 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 51, - "h": 43 - }, - "frame": { - "x": 0, - "y": 0, - "w": 51, - "h": 43 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 51, - "h": 43 - }, - "frame": { - "x": 0, - "y": 0, - "w": 51, - "h": 43 - } - }, { "filename": "0007.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 58, - "h": 47 + "w": 54, + "h": 50 }, "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 51, - "h": 43 - }, - "frame": { "x": 0, - "y": 43, - "w": 51, - "h": 43 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 51, - "h": 43 - }, - "frame": { - "x": 0, - "y": 43, - "w": 51, - "h": 43 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 51, - "h": 43 - }, - "frame": { - "x": 0, - "y": 43, - "w": 51, - "h": 43 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, "y": 1, - "w": 51, - "h": 43 + "w": 54, + "h": 49 }, "frame": { "x": 0, - "y": 86, - "w": 51, - "h": 43 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 51, - "h": 43 - }, - "frame": { - "x": 0, - "y": 86, - "w": 51, - "h": 43 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 51, - "h": 43 - }, - "frame": { - "x": 0, - "y": 86, - "w": 51, - "h": 43 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 51, - "h": 42 - }, - "frame": { - "x": 0, - "y": 129, - "w": 51, - "h": 42 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 51, - "h": 42 - }, - "frame": { - "x": 0, - "y": 129, - "w": 51, - "h": 42 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 51, - "h": 42 - }, - "frame": { - "x": 0, - "y": 129, - "w": 51, - "h": 42 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 51, - "h": 42 - }, - "frame": { - "x": 0, - "y": 129, - "w": 51, - "h": 42 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 51, - "h": 42 - }, - "frame": { - "x": 0, - "y": 129, - "w": 51, - "h": 42 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 51, - "h": 42 - }, - "frame": { - "x": 51, "y": 0, - "w": 51, - "h": 42 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 51, - "h": 42 - }, - "frame": { - "x": 51, - "y": 0, - "w": 51, - "h": 42 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 51, - "h": 42 - }, - "frame": { - "x": 51, - "y": 0, - "w": 51, - "h": 42 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 51, - "h": 42 - }, - "frame": { - "x": 51, - "y": 42, - "w": 51, - "h": 42 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 51, - "h": 42 - }, - "frame": { - "x": 51, - "y": 42, - "w": 51, - "h": 42 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 51, - "h": 42 - }, - "frame": { - "x": 51, - "y": 42, - "w": 51, - "h": 42 + "w": 54, + "h": 49 } }, { @@ -434,20 +35,41 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 58, - "h": 47 + "w": 54, + "h": 50 }, "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 51, - "h": 42 + "x": 0, + "y": 1, + "w": 54, + "h": 49 }, "frame": { - "x": 51, - "y": 84, - "w": 51, - "h": 42 + "x": 0, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 54, + "h": 49 + }, + "frame": { + "x": 0, + "y": 0, + "w": 54, + "h": 49 } }, { @@ -455,20 +77,41 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 58, - "h": 47 + "w": 54, + "h": 50 }, "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 51, - "h": 42 + "x": 0, + "y": 1, + "w": 54, + "h": 49 }, "frame": { - "x": 51, - "y": 84, - "w": 51, - "h": 42 + "x": 0, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 54, + "h": 49 + }, + "frame": { + "x": 0, + "y": 0, + "w": 54, + "h": 49 } }, { @@ -476,461 +119,41 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 51, - "h": 42 - }, - "frame": { - "x": 51, - "y": 84, - "w": 51, - "h": 42 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 51, - "h": 42 - }, - "frame": { - "x": 51, - "y": 126, - "w": 51, - "h": 42 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 51, - "h": 42 - }, - "frame": { - "x": 51, - "y": 126, - "w": 51, - "h": 42 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 51, - "h": 42 - }, - "frame": { - "x": 51, - "y": 126, - "w": 51, - "h": 42 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 51, - "h": 42 - }, - "frame": { - "x": 102, - "y": 0, - "w": 51, - "h": 42 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 51, - "h": 42 - }, - "frame": { - "x": 102, - "y": 0, - "w": 51, - "h": 42 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 51, - "h": 42 - }, - "frame": { - "x": 102, - "y": 0, - "w": 51, - "h": 42 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 51, - "h": 42 - }, - "frame": { - "x": 102, - "y": 42, - "w": 51, - "h": 42 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 51, - "h": 42 - }, - "frame": { - "x": 102, - "y": 42, - "w": 51, - "h": 42 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 51, - "h": 42 - }, - "frame": { - "x": 102, - "y": 42, - "w": 51, - "h": 42 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 51, - "h": 41 - }, - "frame": { - "x": 102, - "y": 84, - "w": 51, - "h": 41 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 51, - "h": 41 - }, - "frame": { - "x": 102, - "y": 84, - "w": 51, - "h": 41 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 51, - "h": 41 - }, - "frame": { - "x": 102, - "y": 84, - "w": 51, - "h": 41 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 51, - "h": 41 - }, - "frame": { - "x": 102, - "y": 125, - "w": 51, - "h": 41 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 51, - "h": 41 - }, - "frame": { - "x": 102, - "y": 125, - "w": 51, - "h": 41 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 51, - "h": 41 - }, - "frame": { - "x": 102, - "y": 125, - "w": 51, - "h": 41 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 50, - "h": 40 - }, - "frame": { - "x": 102, - "y": 166, - "w": 50, - "h": 40 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 + "w": 54, + "h": 50 }, "spriteSourceSize": { "x": 0, - "y": 6, - "w": 50, - "h": 40 - }, - "frame": { - "x": 152, - "y": 166, - "w": 50, - "h": 40 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 6, "y": 1, - "w": 51, - "h": 41 + "w": 54, + "h": 49 }, "frame": { - "x": 153, + "x": 0, "y": 0, - "w": 51, - "h": 41 + "w": 54, + "h": 49 } }, { - "filename": "0042.png", + "filename": "0043.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 58, - "h": 47 + "w": 54, + "h": 50 }, "spriteSourceSize": { - "x": 6, + "x": 0, "y": 1, - "w": 51, - "h": 41 + "w": 54, + "h": 49 }, "frame": { - "x": 153, + "x": 0, "y": 0, - "w": 51, - "h": 41 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 51, - "h": 41 - }, - "frame": { - "x": 153, - "y": 41, - "w": 51, - "h": 41 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 47 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 51, - "h": 41 - }, - "frame": { - "x": 153, - "y": 41, - "w": 51, - "h": 41 + "w": 54, + "h": 49 } }, { @@ -938,41 +161,146 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 58, - "h": 47 + "w": 54, + "h": 50 }, "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 51, - "h": 41 + "x": 0, + "y": 1, + "w": 54, + "h": 49 }, "frame": { - "x": 153, - "y": 82, - "w": 51, - "h": 41 + "x": 0, + "y": 0, + "w": 54, + "h": 49 } }, { - "filename": "0048.png", + "filename": "0005.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 58, - "h": 47 + "w": 54, + "h": 50 }, "spriteSourceSize": { - "x": 2, + "x": 0, "y": 3, - "w": 51, - "h": 41 + "w": 54, + "h": 47 }, "frame": { - "x": 153, - "y": 82, - "w": 51, - "h": 41 + "x": 54, + "y": 0, + "w": 54, + "h": 47 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 54, + "h": 47 + }, + "frame": { + "x": 54, + "y": 0, + "w": 54, + "h": 47 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 54, + "h": 47 + }, + "frame": { + "x": 54, + "y": 0, + "w": 54, + "h": 47 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 54, + "h": 47 + }, + "frame": { + "x": 54, + "y": 0, + "w": 54, + "h": 47 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 54, + "h": 47 + }, + "frame": { + "x": 54, + "y": 0, + "w": 54, + "h": 47 + } + }, + { + "filename": "0030.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 54, + "h": 47 + }, + "frame": { + "x": 54, + "y": 0, + "w": 54, + "h": 47 } }, { @@ -980,20 +308,167 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 58, + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 54, "h": 47 }, + "frame": { + "x": 54, + "y": 0, + "w": 54, + "h": 47 + } + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 54, + "h": 47 + }, + "frame": { + "x": 54, + "y": 0, + "w": 54, + "h": 47 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, "spriteSourceSize": { "x": 0, "y": 4, - "w": 51, - "h": 41 + "w": 54, + "h": 46 }, "frame": { - "x": 153, - "y": 123, - "w": 51, - "h": 41 + "x": 54, + "y": 47, + "w": 54, + "h": 46 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 54, + "h": 46 + }, + "frame": { + "x": 54, + "y": 47, + "w": 54, + "h": 46 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 54, + "h": 46 + }, + "frame": { + "x": 54, + "y": 47, + "w": 54, + "h": 46 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 54, + "h": 46 + }, + "frame": { + "x": 54, + "y": 47, + "w": 54, + "h": 46 + } + }, + { + "filename": "0027.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 54, + "h": 46 + }, + "frame": { + "x": 54, + "y": 47, + "w": 54, + "h": 46 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 54, + "h": 46 + }, + "frame": { + "x": 54, + "y": 47, + "w": 54, + "h": 46 } }, { @@ -1001,20 +476,545 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 58, - "h": 47 + "w": 54, + "h": 50 }, "spriteSourceSize": { "x": 0, "y": 4, - "w": 51, - "h": 41 + "w": 54, + "h": 46 }, "frame": { - "x": 153, - "y": 123, + "x": 54, + "y": 47, + "w": 54, + "h": 46 + } + }, + { + "filename": "0048.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 54, + "h": 46 + }, + "frame": { + "x": 54, + "y": 47, + "w": 54, + "h": 46 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 54, + "h": 44 + }, + "frame": { + "x": 0, + "y": 49, + "w": 54, + "h": 44 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 54, + "h": 44 + }, + "frame": { + "x": 0, + "y": 49, + "w": 54, + "h": 44 + } + }, + { + "filename": "0025.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 54, + "h": 44 + }, + "frame": { + "x": 0, + "y": 49, + "w": 54, + "h": 44 + } + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 54, + "h": 44 + }, + "frame": { + "x": 0, + "y": 49, + "w": 54, + "h": 44 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 0, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 0, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 0, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 0, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 0, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 0, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 0, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 0, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 52, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 52, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 52, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 52, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0036.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 52, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0037.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 52, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0040.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 52, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 52, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, "w": 51, - "h": 41 + "h": 50 + }, + "frame": { + "x": 104, + "y": 93, + "w": 51, + "h": 50 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 51, + "h": 50 + }, + "frame": { + "x": 104, + "y": 93, + "w": 51, + "h": 50 + } + }, + { + "filename": "0038.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 51, + "h": 50 + }, + "frame": { + "x": 104, + "y": 93, + "w": 51, + "h": 50 + } + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 51, + "h": 50 + }, + "frame": { + "x": 104, + "y": 93, + "w": 51, + "h": 50 } } ] @@ -1023,6 +1023,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:db6408a4e96a3c4552035ce768316e02:28f26069e5c44ed9f6fa66442864f895:796c82c5076b122f2663381836c65843$" + "smartupdate": "$TexturePacker:SmartUpdate:7decf4c336c92bdacc5d43bc8590718f:30606c7130f3577df61a85f98b567a88:736cd88647e79ba7896fc74f9406c2fe$" } } diff --git a/public/images/pokemon/exp/back/shiny/female/6215.png b/public/images/pokemon/exp/back/shiny/female/6215.png new file mode 100644 index 00000000000..3af5e81148c Binary files /dev/null and b/public/images/pokemon/exp/back/shiny/female/6215.png differ diff --git a/public/images/pokemon/exp/back/shiny/female/668.json b/public/images/pokemon/exp/back/shiny/female/668.json new file mode 100644 index 00000000000..8e55af5a4de --- /dev/null +++ b/public/images/pokemon/exp/back/shiny/female/668.json @@ -0,0 +1,820 @@ +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 475, "y": 144, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 76, "y": 214, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 76, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 152, "y": 283, "w": 75, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 75, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 73, "y": 284, "w": 74, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 5, "w": 74, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 460, "y": 350, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 6, "w": 74, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 227, "y": 350, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 6, "w": 74, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 385, "y": 284, "w": 75, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 6, "w": 75, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 472, "y": 283, "w": 77, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 77, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 233, "y": 282, "w": 77, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 5, "w": 77, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 396, "y": 215, "w": 76, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 76, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 214, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 76, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 399, "y": 144, "w": 76, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 76, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 431, "y": 73, "w": 77, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 77, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 242, "y": 142, "w": 77, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 77, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 156, "y": 213, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 475, "y": 144, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 76, "y": 214, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 76, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 152, "y": 283, "w": 75, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 75, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 73, "y": 284, "w": 74, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 5, "w": 74, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 460, "y": 350, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 6, "w": 74, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 227, "y": 350, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 6, "w": 74, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 385, "y": 284, "w": 75, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 6, "w": 75, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 472, "y": 283, "w": 77, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 77, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 233, "y": 282, "w": 77, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 5, "w": 77, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 396, "y": 215, "w": 76, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 76, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 214, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 76, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 399, "y": 144, "w": 76, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 76, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 431, "y": 73, "w": 77, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 77, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 242, "y": 142, "w": 77, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 77, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 156, "y": 213, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 475, "y": 144, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 76, "y": 214, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 76, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 152, "y": 283, "w": 75, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 75, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 73, "y": 284, "w": 74, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 5, "w": 74, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 460, "y": 350, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 6, "w": 74, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 227, "y": 350, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 6, "w": 74, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 385, "y": 284, "w": 75, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 6, "w": 75, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 472, "y": 283, "w": 77, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 77, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 233, "y": 282, "w": 77, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 5, "w": 77, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 396, "y": 215, "w": 76, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 76, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 214, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 76, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 399, "y": 144, "w": 76, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 76, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 431, "y": 73, "w": 77, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 77, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 242, "y": 142, "w": 77, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 77, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 156, "y": 213, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 475, "y": 144, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 76, "y": 214, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 76, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 152, "y": 283, "w": 75, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 75, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 73, "y": 284, "w": 74, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 5, "w": 74, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 460, "y": 350, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 6, "w": 74, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 227, "y": 350, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 6, "w": 74, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 385, "y": 284, "w": 75, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 6, "w": 75, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 472, "y": 283, "w": 77, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 77, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 233, "y": 282, "w": 77, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 5, "w": 77, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 396, "y": 215, "w": 76, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 76, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 214, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 76, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 399, "y": 144, "w": 76, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 76, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 431, "y": 73, "w": 77, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 77, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 242, "y": 142, "w": 77, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 77, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 156, "y": 213, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 475, "y": 144, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 0, "y": 144, "w": 78, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 78, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 233, "y": 213, "w": 78, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 78, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 156, "y": 144, "w": 79, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 79, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 319, "y": 144, "w": 80, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 80, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 242, "y": 73, "w": 80, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 80, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 310, "y": 282, "w": 75, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 75, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 534, "y": 350, "w": 71, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 4, "w": 71, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 301, "y": 351, "w": 67, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 3, "w": 67, "h": 73 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 0, "y": 353, "w": 63, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 3, "w": 63, "h": 75 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 204, "y": 417, "w": 63, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 2, "w": 63, "h": 75 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 139, "y": 352, "w": 65, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 3, "w": 65, "h": 73 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 73, "y": 352, "w": 66, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 3, "w": 66, "h": 72 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 368, "y": 351, "w": 69, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 69, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 0, "y": 284, "w": 73, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 4, "w": 73, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 475, "y": 214, "w": 76, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 76, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 319, "y": 212, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 82, "y": 73, "w": 80, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 80, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 519, "y": 72, "w": 83, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 83, "h": 72 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 434, "y": 0, "w": 85, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 85, "h": 73 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 261, "y": 0, "w": 86, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 86, "h": 73 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 174, "y": 0, "w": 87, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 73 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 87, "y": 0, "w": 87, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 87, "h": 73 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 0, "y": 0, "w": 87, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 87, "h": 73 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 347, "y": 0, "w": 87, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 87, "h": 72 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 519, "y": 0, "w": 85, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 85, "h": 72 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 347, "y": 72, "w": 84, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 84, "h": 72 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 0, "y": 73, "w": 82, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 82, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 162, "y": 73, "w": 80, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 80, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 78, "y": 144, "w": 78, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 78, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "format": "I8", + "size": { "w": 605, "h": 492 }, + "scale": "1" + } +} diff --git a/public/images/pokemon/exp/back/shiny/female/668.png b/public/images/pokemon/exp/back/shiny/female/668.png new file mode 100644 index 00000000000..cec15d8fcb7 Binary files /dev/null and b/public/images/pokemon/exp/back/shiny/female/668.png differ diff --git a/public/images/pokemon/exp/back/shiny/707.json b/public/images/pokemon/exp/female/6215.json similarity index 62% rename from public/images/pokemon/exp/back/shiny/707.json rename to public/images/pokemon/exp/female/6215.json index 384c57d4102..8e010a77bb6 100644 --- a/public/images/pokemon/exp/back/shiny/707.json +++ b/public/images/pokemon/exp/female/6215.json @@ -1,2007 +1,33 @@ { "textures": [ { - "image": "707.png", + "image": "6215.png", "format": "RGBA8888", "size": { - "w": 286, - "h": 286 + "w": 230, + "h": 230 }, "scale": 1, "frames": [ - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 10, - "y": 1, - "w": 38, - "h": 72 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 72 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 10, - "y": 1, - "w": 38, - "h": 72 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 72 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 10, - "y": 1, - "w": 38, - "h": 72 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 72 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 9, - "y": 2, - "w": 38, - "h": 72 - }, - "frame": { - "x": 0, - "y": 72, - "w": 38, - "h": 72 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 9, - "y": 2, - "w": 38, - "h": 72 - }, - "frame": { - "x": 0, - "y": 72, - "w": 38, - "h": 72 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 9, - "y": 2, - "w": 38, - "h": 72 - }, - "frame": { - "x": 0, - "y": 72, - "w": 38, - "h": 72 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 38, - "h": 72 - }, - "frame": { - "x": 0, - "y": 144, - "w": 38, - "h": 72 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 72 - }, - "frame": { - "x": 0, - "y": 144, - "w": 38, - "h": 72 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 72 - }, - "frame": { - "x": 0, - "y": 144, - "w": 38, - "h": 72 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 38, - "h": 72 - }, - "frame": { - "x": 0, - "y": 144, - "w": 38, - "h": 72 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 72 - }, - "frame": { - "x": 0, - "y": 144, - "w": 38, - "h": 72 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 72 - }, - "frame": { - "x": 0, - "y": 144, - "w": 38, - "h": 72 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 38, - "h": 72 - }, - "frame": { - "x": 0, - "y": 144, - "w": 38, - "h": 72 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 72 - }, - "frame": { - "x": 0, - "y": 144, - "w": 38, - "h": 72 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 72 - }, - "frame": { - "x": 0, - "y": 144, - "w": 38, - "h": 72 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 0, - "y": 216, - "w": 42, - "h": 70 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 0, - "y": 216, - "w": 42, - "h": 70 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 0, - "y": 216, - "w": 42, - "h": 70 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 0, - "y": 216, - "w": 42, - "h": 70 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 0, - "y": 216, - "w": 42, - "h": 70 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 0, - "y": 216, - "w": 42, - "h": 70 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 38, - "h": 72 - }, - "frame": { - "x": 38, - "y": 0, - "w": 38, - "h": 72 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 38, - "h": 72 - }, - "frame": { - "x": 38, - "y": 0, - "w": 38, - "h": 72 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 37, - "h": 72 - }, - "frame": { - "x": 38, - "y": 72, - "w": 37, - "h": 72 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 37, - "h": 72 - }, - "frame": { - "x": 38, - "y": 72, - "w": 37, - "h": 72 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 37, - "h": 72 - }, - "frame": { - "x": 38, - "y": 72, - "w": 37, - "h": 72 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 39, - "h": 71 - }, - "frame": { - "x": 38, - "y": 144, - "w": 39, - "h": 71 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 39, - "h": 71 - }, - "frame": { - "x": 38, - "y": 144, - "w": 39, - "h": 71 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 39, - "h": 71 - }, - "frame": { - "x": 38, - "y": 144, - "w": 39, - "h": 71 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 38, - "h": 71 - }, - "frame": { - "x": 42, - "y": 215, - "w": 38, - "h": 71 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 38, - "h": 71 - }, - "frame": { - "x": 42, - "y": 215, - "w": 38, - "h": 71 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 38, - "h": 71 - }, - "frame": { - "x": 42, - "y": 215, - "w": 38, - "h": 71 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 38, - "h": 71 - }, - "frame": { - "x": 42, - "y": 215, - "w": 38, - "h": 71 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 38, - "h": 71 - }, - "frame": { - "x": 42, - "y": 215, - "w": 38, - "h": 71 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 38, - "h": 71 - }, - "frame": { - "x": 42, - "y": 215, - "w": 38, - "h": 71 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 38, - "h": 71 - }, - "frame": { - "x": 75, - "y": 72, - "w": 38, - "h": 71 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 38, - "h": 71 - }, - "frame": { - "x": 75, - "y": 72, - "w": 38, - "h": 71 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 38, - "h": 71 - }, - "frame": { - "x": 75, - "y": 72, - "w": 38, - "h": 71 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 38, - "h": 71 - }, - "frame": { - "x": 75, - "y": 72, - "w": 38, - "h": 71 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 38, - "h": 71 - }, - "frame": { - "x": 75, - "y": 72, - "w": 38, - "h": 71 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 38, - "h": 71 - }, - "frame": { - "x": 75, - "y": 72, - "w": 38, - "h": 71 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 38, - "h": 71 - }, - "frame": { - "x": 77, - "y": 143, - "w": 38, - "h": 71 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 38, - "h": 71 - }, - "frame": { - "x": 77, - "y": 143, - "w": 38, - "h": 71 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 38, - "h": 71 - }, - "frame": { - "x": 77, - "y": 143, - "w": 38, - "h": 71 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 71 - }, - "frame": { - "x": 80, - "y": 214, - "w": 38, - "h": 71 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 71 - }, - "frame": { - "x": 80, - "y": 214, - "w": 38, - "h": 71 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 71 - }, - "frame": { - "x": 80, - "y": 214, - "w": 38, - "h": 71 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 71 - }, - "frame": { - "x": 80, - "y": 214, - "w": 38, - "h": 71 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 71 - }, - "frame": { - "x": 80, - "y": 214, - "w": 38, - "h": 71 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 71 - }, - "frame": { - "x": 80, - "y": 214, - "w": 38, - "h": 71 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 71 - }, - "frame": { - "x": 76, - "y": 0, - "w": 38, - "h": 71 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 71 - }, - "frame": { - "x": 76, - "y": 0, - "w": 38, - "h": 71 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 71 - }, - "frame": { - "x": 76, - "y": 0, - "w": 38, - "h": 71 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 71 - }, - "frame": { - "x": 113, - "y": 71, - "w": 38, - "h": 71 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 71 - }, - "frame": { - "x": 113, - "y": 71, - "w": 38, - "h": 71 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 71 - }, - "frame": { - "x": 113, - "y": 71, - "w": 38, - "h": 71 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 114, - "y": 0, - "w": 42, - "h": 70 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 114, - "y": 0, - "w": 42, - "h": 70 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 114, - "y": 0, - "w": 42, - "h": 70 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 115, - "y": 142, - "w": 42, - "h": 70 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 41, - "h": 70 - }, - "frame": { - "x": 151, - "y": 70, - "w": 41, - "h": 70 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 41, - "h": 70 - }, - "frame": { - "x": 151, - "y": 70, - "w": 41, - "h": 70 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 41, - "h": 70 - }, - "frame": { - "x": 151, - "y": 70, - "w": 41, - "h": 70 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 40, - "h": 70 - }, - "frame": { - "x": 156, - "y": 0, - "w": 40, - "h": 70 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 40, - "h": 70 - }, - "frame": { - "x": 156, - "y": 0, - "w": 40, - "h": 70 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 40, - "h": 70 - }, - "frame": { - "x": 156, - "y": 0, - "w": 40, - "h": 70 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 70 - }, - "frame": { - "x": 118, - "y": 212, - "w": 38, - "h": 70 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 70 - }, - "frame": { - "x": 118, - "y": 212, - "w": 38, - "h": 70 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 70 - }, - "frame": { - "x": 118, - "y": 212, - "w": 38, - "h": 70 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 44, - "h": 69 - }, - "frame": { - "x": 156, - "y": 212, - "w": 44, - "h": 69 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 44, - "h": 69 - }, - "frame": { - "x": 156, - "y": 212, - "w": 44, - "h": 69 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 44, - "h": 69 - }, - "frame": { - "x": 156, - "y": 212, - "w": 44, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 69 - }, - "frame": { - "x": 157, - "y": 140, - "w": 43, - "h": 69 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 69 - }, - "frame": { - "x": 157, - "y": 140, - "w": 43, - "h": 69 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 69 - }, - "frame": { - "x": 157, - "y": 140, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 43, - "h": 69 - }, - "frame": { - "x": 192, - "y": 70, - "w": 43, - "h": 69 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 43, - "h": 69 - }, - "frame": { - "x": 192, - "y": 70, - "w": 43, - "h": 69 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 43, - "h": 69 - }, - "frame": { - "x": 192, - "y": 70, - "w": 43, - "h": 69 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 69 - }, - "frame": { - "x": 192, - "y": 70, - "w": 43, - "h": 69 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 69 - }, - "frame": { - "x": 192, - "y": 70, - "w": 43, - "h": 69 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 69 - }, - "frame": { - "x": 192, - "y": 70, - "w": 43, - "h": 69 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 69 - }, - "frame": { - "x": 192, - "y": 70, - "w": 43, - "h": 69 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 192, - "y": 70, - "w": 43, - "h": 69 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 43, - "h": 69 - }, - "frame": { - "x": 196, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 43, - "h": 69 - }, - "frame": { - "x": 196, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 43, - "h": 69 - }, - "frame": { - "x": 196, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 43, - "h": 69 - }, - "frame": { - "x": 239, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 43, - "h": 69 - }, - "frame": { - "x": 239, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 235, - "y": 69, - "w": 43, - "h": 69 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 43, - "h": 69 - }, - "frame": { - "x": 235, - "y": 69, - "w": 43, - "h": 69 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 42, - "h": 69 - }, - "frame": { - "x": 235, - "y": 138, - "w": 42, - "h": 69 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 42, - "h": 69 - }, - "frame": { - "x": 235, - "y": 138, - "w": 42, - "h": 69 - } - }, { "filename": "0007.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 48, - "h": 74 + "w": 56, + "h": 54 }, "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 41, - "h": 69 + "x": 1, + "y": 1, + "w": 55, + "h": 50 }, "frame": { - "x": 200, - "y": 207, - "w": 41, - "h": 69 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, + "x": 0, "y": 0, - "w": 41, - "h": 69 - }, - "frame": { - "x": 200, - "y": 207, - "w": 41, - "h": 69 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 41, - "h": 69 - }, - "frame": { - "x": 200, - "y": 207, - "w": 41, - "h": 69 + "w": 55, + "h": 50 } }, { @@ -2009,20 +35,1175 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 48, - "h": 74 + "w": 56, + "h": 54 }, "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 40, - "h": 69 + "x": 1, + "y": 1, + "w": 55, + "h": 50 }, "frame": { - "x": 241, - "y": 207, - "w": 40, - "h": 69 + "x": 0, + "y": 0, + "w": 55, + "h": 50 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 55, + "h": 50 + }, + "frame": { + "x": 0, + "y": 0, + "w": 55, + "h": 50 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 55, + "h": 50 + }, + "frame": { + "x": 0, + "y": 0, + "w": 55, + "h": 50 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 55, + "h": 50 + }, + "frame": { + "x": 0, + "y": 0, + "w": 55, + "h": 50 + } + }, + { + "filename": "0032.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 55, + "h": 50 + }, + "frame": { + "x": 0, + "y": 0, + "w": 55, + "h": 50 + } + }, + { + "filename": "0043.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 55, + "h": 50 + }, + "frame": { + "x": 0, + "y": 0, + "w": 55, + "h": 50 + } + }, + { + "filename": "0044.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 55, + "h": 50 + }, + "frame": { + "x": 0, + "y": 0, + "w": 55, + "h": 50 + } + }, + { + "filename": "0055.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 55, + "h": 50 + }, + "frame": { + "x": 0, + "y": 0, + "w": 55, + "h": 50 + } + }, + { + "filename": "0056.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 55, + "h": 50 + }, + "frame": { + "x": 0, + "y": 0, + "w": 55, + "h": 50 + } + }, + { + "filename": "0067.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 55, + "h": 50 + }, + "frame": { + "x": 0, + "y": 0, + "w": 55, + "h": 50 + } + }, + { + "filename": "0068.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 55, + "h": 50 + }, + "frame": { + "x": 0, + "y": 0, + "w": 55, + "h": 50 + } + }, + { + "filename": "0079.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 55, + "h": 50 + }, + "frame": { + "x": 0, + "y": 50, + "w": 55, + "h": 50 + } + }, + { + "filename": "0080.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 55, + "h": 50 + }, + "frame": { + "x": 0, + "y": 50, + "w": 55, + "h": 50 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 51 + }, + "frame": { + "x": 55, + "y": 0, + "w": 52, + "h": 51 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 51 + }, + "frame": { + "x": 55, + "y": 0, + "w": 52, + "h": 51 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 51 + }, + "frame": { + "x": 55, + "y": 0, + "w": 52, + "h": 51 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 51 + }, + "frame": { + "x": 55, + "y": 0, + "w": 52, + "h": 51 + } + }, + { + "filename": "0027.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 51 + }, + "frame": { + "x": 55, + "y": 0, + "w": 52, + "h": 51 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 51 + }, + "frame": { + "x": 55, + "y": 0, + "w": 52, + "h": 51 + } + }, + { + "filename": "0047.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 51 + }, + "frame": { + "x": 55, + "y": 0, + "w": 52, + "h": 51 + } + }, + { + "filename": "0048.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 51 + }, + "frame": { + "x": 55, + "y": 0, + "w": 52, + "h": 51 + } + }, + { + "filename": "0051.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 51 + }, + "frame": { + "x": 55, + "y": 0, + "w": 52, + "h": 51 + } + }, + { + "filename": "0052.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 51 + }, + "frame": { + "x": 55, + "y": 0, + "w": 52, + "h": 51 + } + }, + { + "filename": "0071.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 51 + }, + "frame": { + "x": 55, + "y": 0, + "w": 52, + "h": 51 + } + }, + { + "filename": "0072.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 51 + }, + "frame": { + "x": 55, + "y": 0, + "w": 52, + "h": 51 + } + }, + { + "filename": "0075.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 51 + }, + "frame": { + "x": 55, + "y": 0, + "w": 52, + "h": 51 + } + }, + { + "filename": "0076.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 51 + }, + "frame": { + "x": 55, + "y": 0, + "w": 52, + "h": 51 + } + }, + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 53, + "h": 50 + }, + "frame": { + "x": 0, + "y": 100, + "w": 53, + "h": 50 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 53, + "h": 50 + }, + "frame": { + "x": 0, + "y": 100, + "w": 53, + "h": 50 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 53, + "h": 50 + }, + "frame": { + "x": 0, + "y": 100, + "w": 53, + "h": 50 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 53, + "h": 50 + }, + "frame": { + "x": 0, + "y": 100, + "w": 53, + "h": 50 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 53, + "h": 50 + }, + "frame": { + "x": 0, + "y": 100, + "w": 53, + "h": 50 + } + }, + { + "filename": "0030.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 53, + "h": 50 + }, + "frame": { + "x": 0, + "y": 100, + "w": 53, + "h": 50 + } + }, + { + "filename": "0045.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 53, + "h": 50 + }, + "frame": { + "x": 0, + "y": 100, + "w": 53, + "h": 50 + } + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 53, + "h": 50 + }, + "frame": { + "x": 0, + "y": 100, + "w": 53, + "h": 50 + } + }, + { + "filename": "0069.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 53, + "h": 50 + }, + "frame": { + "x": 0, + "y": 100, + "w": 53, + "h": 50 + } + }, + { + "filename": "0070.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 53, + "h": 50 + }, + "frame": { + "x": 0, + "y": 100, + "w": 53, + "h": 50 + } + }, + { + "filename": "0077.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 53, + "h": 50 + }, + "frame": { + "x": 0, + "y": 100, + "w": 53, + "h": 50 + } + }, + { + "filename": "0078.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 53, + "h": 50 + }, + "frame": { + "x": 0, + "y": 100, + "w": 53, + "h": 50 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 107, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 107, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 107, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 107, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 107, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 107, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 107, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 107, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0057.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 107, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0058.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 107, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0065.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 107, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0066.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 107, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 161, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 161, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 161, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 161, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 161, + "y": 0, + "w": 54, + "h": 49 } }, { @@ -2030,20 +1211,125 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 48, - "h": 74 + "w": 56, + "h": 54 }, "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 40, - "h": 69 + "x": 2, + "y": 2, + "w": 54, + "h": 49 }, "frame": { - "x": 241, - "y": 207, - "w": 40, - "h": 69 + "x": 161, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 161, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0040.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 161, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0059.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 161, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0060.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 161, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0063.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 161, + "y": 0, + "w": 54, + "h": 49 } }, { @@ -2051,20 +1337,734 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 48, - "h": 74 + "w": 56, + "h": 54 }, "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 40, - "h": 69 + "x": 2, + "y": 2, + "w": 54, + "h": 49 }, "frame": { - "x": 241, - "y": 207, - "w": 40, - "h": 69 + "x": 161, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0053.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 53, + "h": 50 + }, + "frame": { + "x": 0, + "y": 150, + "w": 53, + "h": 50 + } + }, + { + "filename": "0054.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 53, + "h": 50 + }, + "frame": { + "x": 0, + "y": 150, + "w": 53, + "h": 50 + } + }, + { + "filename": "0081.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 53, + "h": 50 + }, + "frame": { + "x": 55, + "y": 51, + "w": 53, + "h": 50 + } + }, + { + "filename": "0082.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 53, + "h": 50 + }, + "frame": { + "x": 55, + "y": 51, + "w": 53, + "h": 50 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 54, + "h": 48 + }, + "frame": { + "x": 53, + "y": 101, + "w": 54, + "h": 48 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 54, + "h": 48 + }, + "frame": { + "x": 53, + "y": 101, + "w": 54, + "h": 48 + } + }, + { + "filename": "0037.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 54, + "h": 48 + }, + "frame": { + "x": 53, + "y": 101, + "w": 54, + "h": 48 + } + }, + { + "filename": "0038.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 54, + "h": 48 + }, + "frame": { + "x": 53, + "y": 101, + "w": 54, + "h": 48 + } + }, + { + "filename": "0061.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 54, + "h": 48 + }, + "frame": { + "x": 53, + "y": 101, + "w": 54, + "h": 48 + } + }, + { + "filename": "0062.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 54, + "h": 48 + }, + "frame": { + "x": 53, + "y": 101, + "w": 54, + "h": 48 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 4, + "y": 0, + "w": 50, + "h": 51 + }, + "frame": { + "x": 53, + "y": 149, + "w": 50, + "h": 51 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 4, + "y": 0, + "w": 50, + "h": 51 + }, + "frame": { + "x": 53, + "y": 149, + "w": 50, + "h": 51 + } + }, + { + "filename": "0025.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 4, + "y": 0, + "w": 50, + "h": 51 + }, + "frame": { + "x": 53, + "y": 149, + "w": 50, + "h": 51 + } + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 4, + "y": 0, + "w": 50, + "h": 51 + }, + "frame": { + "x": 53, + "y": 149, + "w": 50, + "h": 51 + } + }, + { + "filename": "0049.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 4, + "y": 0, + "w": 50, + "h": 51 + }, + "frame": { + "x": 53, + "y": 149, + "w": 50, + "h": 51 + } + }, + { + "filename": "0050.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 4, + "y": 0, + "w": 50, + "h": 51 + }, + "frame": { + "x": 53, + "y": 149, + "w": 50, + "h": 51 + } + }, + { + "filename": "0073.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 4, + "y": 0, + "w": 50, + "h": 51 + }, + "frame": { + "x": 53, + "y": 149, + "w": 50, + "h": 51 + } + }, + { + "filename": "0074.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 4, + "y": 0, + "w": 50, + "h": 51 + }, + "frame": { + "x": 53, + "y": 149, + "w": 50, + "h": 51 + } + }, + { + "filename": "0083.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 47, + "h": 47 + }, + "frame": { + "x": 108, + "y": 49, + "w": 47, + "h": 47 + } + }, + { + "filename": "0084.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 47, + "h": 47 + }, + "frame": { + "x": 108, + "y": 49, + "w": 47, + "h": 47 + } + }, + { + "filename": "0097.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 47, + "h": 47 + }, + "frame": { + "x": 155, + "y": 49, + "w": 47, + "h": 47 + } + }, + { + "filename": "0098.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 47, + "h": 47 + }, + "frame": { + "x": 155, + "y": 49, + "w": 47, + "h": 47 + } + }, + { + "filename": "0087.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 47, + "h": 44 + }, + "frame": { + "x": 108, + "y": 96, + "w": 47, + "h": 44 + } + }, + { + "filename": "0088.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 47, + "h": 44 + }, + "frame": { + "x": 108, + "y": 96, + "w": 47, + "h": 44 + } + }, + { + "filename": "0085.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 45, + "h": 46 + }, + "frame": { + "x": 155, + "y": 96, + "w": 45, + "h": 46 + } + }, + { + "filename": "0086.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 45, + "h": 46 + }, + "frame": { + "x": 155, + "y": 96, + "w": 45, + "h": 46 + } + }, + { + "filename": "0089.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 1, + "y": 8, + "w": 45, + "h": 44 + }, + "frame": { + "x": 107, + "y": 140, + "w": 45, + "h": 44 + } + }, + { + "filename": "0090.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 1, + "y": 8, + "w": 45, + "h": 44 + }, + "frame": { + "x": 107, + "y": 140, + "w": 45, + "h": 44 + } + }, + { + "filename": "0091.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 39, + "h": 46 + }, + "frame": { + "x": 103, + "y": 184, + "w": 39, + "h": 46 + } + }, + { + "filename": "0092.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 39, + "h": 46 + }, + "frame": { + "x": 103, + "y": 184, + "w": 39, + "h": 46 + } + }, + { + "filename": "0093.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 38, + "h": 46 + }, + "frame": { + "x": 142, + "y": 184, + "w": 38, + "h": 46 + } + }, + { + "filename": "0094.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 38, + "h": 46 + }, + "frame": { + "x": 142, + "y": 184, + "w": 38, + "h": 46 + } + }, + { + "filename": "0095.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 5, + "y": 8, + "w": 41, + "h": 44 + }, + "frame": { + "x": 180, + "y": 142, + "w": 41, + "h": 44 + } + }, + { + "filename": "0096.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 5, + "y": 8, + "w": 41, + "h": 44 + }, + "frame": { + "x": 180, + "y": 142, + "w": 41, + "h": 44 } } ] @@ -2073,6 +2073,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:cdbd19c7dad9a1ff1df2740c2ec77705:390b1dd326d02ff6f47617dbaa2be2bb:8e96b9056ea81e44ced99c97f472a528$" + "smartupdate": "$TexturePacker:SmartUpdate:a8930baf3a1083758adeeca87b28c6c7:3138fb5696691a4322b6805a44d3caa0:736cd88647e79ba7896fc74f9406c2fe$" } } diff --git a/public/images/pokemon/exp/female/6215.png b/public/images/pokemon/exp/female/6215.png new file mode 100644 index 00000000000..2d132090ae8 Binary files /dev/null and b/public/images/pokemon/exp/female/6215.png differ diff --git a/public/images/pokemon/exp/female/668.json b/public/images/pokemon/exp/female/668.json new file mode 100644 index 00000000000..443f13c0b54 --- /dev/null +++ b/public/images/pokemon/exp/female/668.json @@ -0,0 +1,820 @@ +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 219, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 291, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 62, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 453, "y": 289, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 62, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 441, "y": 360, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 309, "y": 359, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 380, "y": 358, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 317, "y": 289, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 390, "y": 288, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 254, "y": 220, "w": 63, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 63, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 63, "y": 220, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 399, "y": 216, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 64, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 138, "y": 74, "w": 63, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 63, "h": 78 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 201, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 264, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 219, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 291, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 62, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 453, "y": 289, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 62, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 441, "y": 360, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 309, "y": 359, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 380, "y": 358, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 317, "y": 289, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 390, "y": 288, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 254, "y": 220, "w": 63, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 63, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 63, "y": 220, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 399, "y": 216, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 64, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 138, "y": 74, "w": 63, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 63, "h": 78 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 201, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 264, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 0, "y": 219, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 291, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 62, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 453, "y": 289, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 62, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 441, "y": 360, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 309, "y": 359, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 380, "y": 358, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 317, "y": 289, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 390, "y": 288, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 254, "y": 220, "w": 63, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 63, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 63, "y": 220, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 399, "y": 216, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 64, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 138, "y": 74, "w": 63, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 63, "h": 78 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 201, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 264, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 0, "y": 219, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 0, "y": 291, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 62, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 453, "y": 289, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 62, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 441, "y": 360, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 309, "y": 359, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 380, "y": 358, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 317, "y": 289, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 390, "y": 288, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 254, "y": 220, "w": 63, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 63, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 63, "y": 220, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 399, "y": 216, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 64, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 138, "y": 74, "w": 63, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 63, "h": 78 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 201, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 264, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 0, "y": 219, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 0, "y": 147, "w": 64, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 64, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 127, "y": 152, "w": 64, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 64, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 465, "y": 146, "w": 65, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 65, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 399, "y": 146, "w": 66, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 66, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 334, "y": 74, "w": 66, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 66, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 191, "y": 220, "w": 63, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 63, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 126, "y": 223, "w": 62, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 62, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 462, "y": 217, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 188, "y": 291, "w": 61, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 61, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 249, "y": 291, "w": 60, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 60, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 62, "y": 292, "w": 60, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 60, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 122, "y": 295, "w": 60, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 60, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 182, "y": 363, "w": 59, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 59, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 60, "y": 364, "w": 59, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 59, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 0, "y": 362, "w": 60, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 7, "w": 60, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 327, "y": 217, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 268, "y": 74, "w": 66, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 66, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 0, "y": 74, "w": 69, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 69, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 376, "y": 0, "w": 73, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 73, "h": 74 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 227, "y": 0, "w": 75, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 75, "h": 74 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 76, "y": 0, "w": 76, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 76, "h": 74 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 0, "y": 0, "w": 76, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 76, "h": 74 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 152, "y": 0, "w": 75, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 75, "h": 74 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 302, "y": 0, "w": 74, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 74, "h": 74 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 449, "y": 0, "w": 72, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 72, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 449, "y": 73, "w": 71, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 71, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 69, "y": 74, "w": 69, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 69, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 201, "y": 74, "w": 67, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 67, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 334, "y": 145, "w": 65, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 65, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "format": "I8", + "size": { "w": 530, "h": 436 }, + "scale": "1" + } +} diff --git a/public/images/pokemon/exp/female/668.png b/public/images/pokemon/exp/female/668.png new file mode 100644 index 00000000000..fa0582a61f1 Binary files /dev/null and b/public/images/pokemon/exp/female/668.png differ diff --git a/public/images/pokemon/exp/shiny/248-mega.json b/public/images/pokemon/exp/shiny/248-mega.json index 6dc54a8aeb2..15243cf5a2d 100644 --- a/public/images/pokemon/exp/shiny/248-mega.json +++ b/public/images/pokemon/exp/shiny/248-mega.json @@ -1,272 +1,929 @@ -{ - "textures": [ - { - "image": "248-mega.png", - "format": "RGBA8888", - "size": { - "w": 271, - "h": 271 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 91, - "h": 85 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 91, - "h": 85 - }, - "frame": { - "x": 0, - "y": 0, - "w": 91, - "h": 85 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 91, - "h": 85 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 91, - "h": 85 - }, - "frame": { - "x": 0, - "y": 0, - "w": 91, - "h": 85 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 91, - "h": 85 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 91, - "h": 85 - }, - "frame": { - "x": 91, - "y": 0, - "w": 91, - "h": 85 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 91, - "h": 85 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 91, - "h": 85 - }, - "frame": { - "x": 91, - "y": 0, - "w": 91, - "h": 85 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 91, - "h": 85 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 91, - "h": 85 - }, - "frame": { - "x": 0, - "y": 85, - "w": 91, - "h": 85 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 91, - "h": 85 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 91, - "h": 85 - }, - "frame": { - "x": 0, - "y": 85, - "w": 91, - "h": 85 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 91, - "h": 85 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 91, - "h": 85 - }, - "frame": { - "x": 0, - "y": 170, - "w": 91, - "h": 85 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 91, - "h": 85 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 91, - "h": 85 - }, - "frame": { - "x": 0, - "y": 170, - "w": 91, - "h": 85 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 85 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 90, - "h": 85 - }, - "frame": { - "x": 91, - "y": 85, - "w": 90, - "h": 85 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 85 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 90, - "h": 85 - }, - "frame": { - "x": 91, - "y": 85, - "w": 90, - "h": 85 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 85 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 90, - "h": 85 - }, - "frame": { - "x": 181, - "y": 85, - "w": 90, - "h": 85 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 85 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 90, - "h": 84 - }, - "frame": { - "x": 91, - "y": 170, - "w": 90, - "h": 84 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:e303fed6273448420d3b88ba11175e8d:629c5a6630efddb6c94efdcd98c81d33:90df97eb431b7162252516cb937a0b9e$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 467, "y": 175, "w": 90, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 90, "h": 84 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 559, "y": 175, "w": 90, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 90, "h": 84 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 374, "y": 261, "w": 91, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 91, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 467, "y": 261, "w": 92, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 92, "h": 82 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 262, "w": 92, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 92, "h": 82 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 91, "y": 431, "w": 90, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 90, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 183, "y": 431, "w": 90, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 90, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 514, "w": 88, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 88, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 182, "y": 513, "w": 89, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 89, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 273, "y": 515, "w": 87, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 87, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 91, "y": 513, "w": 89, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 89, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 364, "y": 513, "w": 88, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 88, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 546, "y": 433, "w": 89, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 89, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 0, "y": 431, "w": 89, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 89, "h": 81 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 365, "y": 430, "w": 90, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 90, "h": 81 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 273, "y": 348, "w": 90, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 90, "h": 81 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 370, "y": 346, "w": 90, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 90, "h": 82 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 186, "y": 262, "w": 90, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 90, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 278, "y": 263, "w": 90, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 90, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 184, "y": 176, "w": 90, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 90, "h": 84 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 559, "y": 175, "w": 90, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 90, "h": 84 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 374, "y": 261, "w": 91, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 91, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 467, "y": 261, "w": 92, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 92, "h": 82 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 0, "y": 262, "w": 92, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 92, "h": 82 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 91, "y": 431, "w": 90, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 90, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 183, "y": 431, "w": 90, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 90, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 514, "w": 88, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 88, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 182, "y": 513, "w": 89, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 89, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 273, "y": 515, "w": 87, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 87, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 91, "y": 513, "w": 89, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 89, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 364, "y": 513, "w": 88, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 88, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 546, "y": 433, "w": 89, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 89, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 0, "y": 431, "w": 89, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 89, "h": 81 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 365, "y": 430, "w": 90, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 90, "h": 81 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 273, "y": 348, "w": 90, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 90, "h": 81 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 370, "y": 346, "w": 90, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 90, "h": 82 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 186, "y": 262, "w": 90, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 90, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 278, "y": 263, "w": 90, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 90, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 184, "y": 176, "w": 90, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 90, "h": 84 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 559, "y": 175, "w": 90, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 90, "h": 84 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 374, "y": 261, "w": 91, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 91, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 467, "y": 261, "w": 92, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 92, "h": 82 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 262, "w": 92, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 92, "h": 82 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 91, "y": 431, "w": 90, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 90, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 183, "y": 431, "w": 90, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 90, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 0, "y": 514, "w": 88, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 88, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 182, "y": 513, "w": 89, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 89, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 273, "y": 515, "w": 87, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 87, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 91, "y": 513, "w": 89, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 89, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 364, "y": 513, "w": 88, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 88, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 546, "y": 433, "w": 89, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 89, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 0, "y": 431, "w": 89, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 89, "h": 81 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 365, "y": 430, "w": 90, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 90, "h": 81 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 273, "y": 348, "w": 90, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 90, "h": 81 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 370, "y": 346, "w": 90, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 90, "h": 82 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 186, "y": 262, "w": 90, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 90, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 278, "y": 263, "w": 90, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 90, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 184, "y": 176, "w": 90, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 90, "h": 84 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 559, "y": 175, "w": 90, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 90, "h": 84 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 374, "y": 261, "w": 91, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 91, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 467, "y": 261, "w": 92, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 92, "h": 82 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 0, "y": 262, "w": 92, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 92, "h": 82 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 91, "y": 431, "w": 90, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 90, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 183, "y": 431, "w": 90, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 90, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 0, "y": 514, "w": 88, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 88, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 182, "y": 513, "w": 89, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 89, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 273, "y": 515, "w": 87, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 87, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 91, "y": 513, "w": 89, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 89, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 364, "y": 513, "w": 88, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 88, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 546, "y": 433, "w": 89, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 89, "h": 80 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 0, "y": 431, "w": 89, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 89, "h": 81 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 365, "y": 430, "w": 90, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 90, "h": 81 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 273, "y": 348, "w": 90, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 90, "h": 81 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 370, "y": 346, "w": 90, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 90, "h": 82 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 186, "y": 262, "w": 90, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 90, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 278, "y": 263, "w": 90, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 90, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 184, "y": 176, "w": 90, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 90, "h": 84 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 0, "y": 176, "w": 90, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 90, "h": 84 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 92, "y": 176, "w": 90, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 90, "h": 84 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 561, "y": 261, "w": 90, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 90, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 0, "y": 346, "w": 89, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 89, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 467, "y": 345, "w": 89, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 89, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 94, "y": 262, "w": 90, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 90, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 91, "y": 347, "w": 89, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 89, "h": 82 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 182, "y": 347, "w": 89, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 89, "h": 82 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 275, "y": 431, "w": 87, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 87, "h": 82 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 457, "y": 430, "w": 87, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 87, "h": 83 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 558, "y": 346, "w": 86, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 86, "h": 85 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 283, "y": 175, "w": 89, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 89, "h": 86 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 189, "y": 88, "w": 92, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 92, "h": 86 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 0, "y": 0, "w": 93, "h": 87 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 93, "h": 87 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 380, "y": 0, "w": 92, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 92, "h": 86 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 95, "y": 88, "w": 92, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 92, "h": 86 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 474, "y": 0, "w": 92, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 92, "h": 86 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 190, "y": 0, "w": 93, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 93, "h": 86 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 95, "y": 0, "w": 93, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 93, "h": 86 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 285, "y": 0, "w": 93, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 93, "h": 86 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 473, "y": 88, "w": 93, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 93, "h": 85 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 378, "y": 88, "w": 93, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 93, "h": 85 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 283, "y": 88, "w": 93, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 93, "h": 85 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 0, "y": 89, "w": 93, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 93, "h": 85 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 374, "y": 175, "w": 91, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 91, "h": 84 }, + "sourceSize": { "w": 94, "h": 87 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "248-mega.png", + "format": "I8", + "size": { "w": 651, "h": 595 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/248-mega.png b/public/images/pokemon/exp/shiny/248-mega.png index eebfa35bbd4..8d9d5fc316c 100644 Binary files a/public/images/pokemon/exp/shiny/248-mega.png and b/public/images/pokemon/exp/shiny/248-mega.png differ diff --git a/public/images/pokemon/exp/shiny/362-mega.json b/public/images/pokemon/exp/shiny/362-mega.json index fe381106be4..c69ecfb1903 100644 --- a/public/images/pokemon/exp/shiny/362-mega.json +++ b/public/images/pokemon/exp/shiny/362-mega.json @@ -1,272 +1,551 @@ -{ - "textures": [ - { - "image": "362-mega.png", - "format": "RGBA8888", - "size": { - "w": 174, - "h": 174 - }, - "scale": 1, - "frames": [ - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 58, - "h": 72 - }, - "frame": { - "x": 0, - "y": 0, - "w": 58, - "h": 72 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 58, - "h": 72 - }, - "frame": { - "x": 0, - "y": 0, - "w": 58, - "h": 72 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 58, - "h": 72 - }, - "frame": { - "x": 0, - "y": 0, - "w": 58, - "h": 72 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 58, - "h": 72 - }, - "frame": { - "x": 0, - "y": 0, - "w": 58, - "h": 72 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 58, - "h": 71 - }, - "frame": { - "x": 0, - "y": 72, - "w": 58, - "h": 71 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 58, - "h": 71 - }, - "frame": { - "x": 0, - "y": 72, - "w": 58, - "h": 71 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 58, - "h": 71 - }, - "frame": { - "x": 0, - "y": 72, - "w": 58, - "h": 71 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 58, - "h": 71 - }, - "frame": { - "x": 58, - "y": 0, - "w": 58, - "h": 71 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 58, - "h": 71 - }, - "frame": { - "x": 58, - "y": 0, - "w": 58, - "h": 71 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 58, - "h": 71 - }, - "frame": { - "x": 116, - "y": 0, - "w": 58, - "h": 71 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 58, - "h": 70 - }, - "frame": { - "x": 58, - "y": 71, - "w": 58, - "h": 70 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 58, - "h": 70 - }, - "frame": { - "x": 58, - "y": 71, - "w": 58, - "h": 70 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:2d52abc4de24282165212b778dfccd62:be0a830bc1f35d437700a203d1fea184:8a7271a5423838c97ddeb1e6dc343255$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 11, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 14, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 16, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 18, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 15, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 13, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 11, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 14, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 16, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 18, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 15, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 13, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 11, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 14, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 16, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 18, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 15, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 13, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 0, "y": 0, "w": 62, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 62, "h": 67 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 0, "y": 69, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 55, "h": 65 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 0, "w": 62, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 62, "h": 67 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 0, "y": 69, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 55, "h": 65 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 0, "y": 0, "w": 62, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 62, "h": 67 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 0, "y": 69, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 55, "h": 65 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 0, "y": 0, "w": 62, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 62, "h": 67 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 69, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 55, "h": 65 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 0, "w": 62, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 62, "h": 67 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 69, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 55, "h": 65 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 0, "y": 0, "w": 62, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 62, "h": 67 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 0, "y": 69, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 55, "h": 65 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 64, "y": 0, "w": 58, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 58, "h": 66 }, + "sourceSize": { "w": 62, "h": 84 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "362-mega.png", + "format": "I8", + "size": { "w": 122, "h": 134 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/362-mega.png b/public/images/pokemon/exp/shiny/362-mega.png index 9d2b9adc7f4..6645ab66cab 100644 Binary files a/public/images/pokemon/exp/shiny/362-mega.png and b/public/images/pokemon/exp/shiny/362-mega.png differ diff --git a/public/images/pokemon/exp/shiny/651.json b/public/images/pokemon/exp/shiny/651.json index 4289441de3d..20bdccd5bd4 100644 --- a/public/images/pokemon/exp/shiny/651.json +++ b/public/images/pokemon/exp/shiny/651.json @@ -1,188 +1,713 @@ -{ - "textures": [ - { - "image": "651.png", - "format": "RGBA8888", - "size": { - "w": 116, - "h": 116 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 58, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 58, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 58, - "h": 53 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 58, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 58, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 58, - "h": 53 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 58, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 58, - "h": 53 - }, - "frame": { - "x": 0, - "y": 0, - "w": 58, - "h": 53 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 58, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 58, - "h": 53 - }, - "frame": { - "x": 58, - "y": 0, - "w": 58, - "h": 53 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 58, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 58, - "h": 53 - }, - "frame": { - "x": 58, - "y": 0, - "w": 58, - "h": 53 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 58, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 58, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 58, - "h": 53 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 58, - "h": 52 - }, - "frame": { - "x": 58, - "y": 53, - "w": 58, - "h": 52 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 58, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 58, - "h": 52 - }, - "frame": { - "x": 58, - "y": 53, - "w": 58, - "h": 52 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:53a767b5d08c0b868b90b8a06972f1db:ac5b599a09e8592218deeebb976d4e5c:a93e5fa02e10bf11e3ed8bf6571835ca$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 119, "y": 49, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 175, "y": 49, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 355, "y": 49, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 278, "y": 101, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 110, "y": 151, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 56, "y": 101, "w": 53, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 53, "h": 51 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 165, "y": 151, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 333, "y": 151, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 287, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 112, "y": 100, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 168, "y": 100, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 152, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 278, "y": 152, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 56, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 231, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 224, "y": 101, "w": 53, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 53, "h": 51 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 343, "y": 100, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 55, "y": 153, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 220, "y": 153, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 119, "y": 49, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 175, "y": 49, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 355, "y": 49, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 278, "y": 101, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 110, "y": 151, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 56, "y": 101, "w": 53, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 53, "h": 51 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 165, "y": 151, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 333, "y": 151, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 287, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 112, "y": 100, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 168, "y": 100, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 152, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 278, "y": 152, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 56, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 231, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 224, "y": 101, "w": 53, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 53, "h": 51 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 343, "y": 100, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 0, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 55, "y": 153, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 220, "y": 153, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 119, "y": 49, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 175, "y": 49, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 355, "y": 49, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 278, "y": 101, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 110, "y": 151, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 56, "y": 101, "w": 53, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 53, "h": 51 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 165, "y": 151, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 333, "y": 151, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 287, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 112, "y": 100, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 168, "y": 100, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 0, "y": 152, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 278, "y": 152, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 56, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 231, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 224, "y": 101, "w": 53, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 53, "h": 51 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 343, "y": 100, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 0, "y": 50, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 55, "y": 153, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 220, "y": 153, "w": 54, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 54, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 119, "y": 49, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 239, "y": 0, "w": 57, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 49 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 60, "y": 0, "w": 58, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 58, "h": 49 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 355, "y": 0, "w": 58, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 58, "h": 48 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 0, "y": 0, "w": 59, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 59, "h": 49 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 119, "y": 0, "w": 59, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 59, "h": 48 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 179, "y": 0, "w": 59, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 59, "h": 48 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 297, "y": 0, "w": 57, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 49 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 0, "y": 101, "w": 55, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 55, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 0, "y": 203, "w": 53, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 53, "h": 49 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 329, "y": 252, "w": 51, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 51, "h": 47 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 109, "y": 252, "w": 51, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 51, "h": 48 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 219, "y": 204, "w": 52, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 52, "h": 49 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 166, "y": 202, "w": 52, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 52, "h": 50 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 275, "y": 203, "w": 53, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 53, "h": 49 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 54, "y": 204, "w": 54, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 54, "h": 48 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 333, "y": 202, "w": 54, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 54, "h": 49 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 110, "y": 202, "w": 55, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 55, "h": 49 }, + "sourceSize": { "w": 60, "h": 53 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "651.png", + "format": "I8", + "size": { "w": 413, "h": 300 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/651.png b/public/images/pokemon/exp/shiny/651.png index dcd70d11100..1e59bc97587 100644 Binary files a/public/images/pokemon/exp/shiny/651.png and b/public/images/pokemon/exp/shiny/651.png differ diff --git a/public/images/pokemon/exp/shiny/653.json b/public/images/pokemon/exp/shiny/653.json index 738762f18c6..a08242f32cf 100644 --- a/public/images/pokemon/exp/shiny/653.json +++ b/public/images/pokemon/exp/shiny/653.json @@ -1,1553 +1,947 @@ -{ - "textures": [ - { - "image": "653.png", - "format": "RGBA8888", - "size": { - "w": 180, - "h": 180 - }, - "scale": 1, - "frames": [ - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 47, - "h": 45 - }, - "frame": { - "x": 0, - "y": 0, - "w": 47, - "h": 45 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 47, - "h": 45 - }, - "frame": { - "x": 0, - "y": 0, - "w": 47, - "h": 45 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 47, - "h": 45 - }, - "frame": { - "x": 0, - "y": 0, - "w": 47, - "h": 45 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 47, - "h": 45 - }, - "frame": { - "x": 0, - "y": 0, - "w": 47, - "h": 45 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 47, - "h": 45 - }, - "frame": { - "x": 0, - "y": 0, - "w": 47, - "h": 45 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 47, - "h": 45 - }, - "frame": { - "x": 0, - "y": 0, - "w": 47, - "h": 45 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 47, - "h": 45 - }, - "frame": { - "x": 47, - "y": 0, - "w": 47, - "h": 45 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 47, - "h": 45 - }, - "frame": { - "x": 47, - "y": 0, - "w": 47, - "h": 45 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 47, - "h": 45 - }, - "frame": { - "x": 47, - "y": 0, - "w": 47, - "h": 45 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 47, - "h": 45 - }, - "frame": { - "x": 47, - "y": 0, - "w": 47, - "h": 45 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 47, - "h": 45 - }, - "frame": { - "x": 47, - "y": 0, - "w": 47, - "h": 45 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 47, - "h": 45 - }, - "frame": { - "x": 47, - "y": 0, - "w": 47, - "h": 45 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 43, - "h": 49 - }, - "frame": { - "x": 94, - "y": 0, - "w": 43, - "h": 49 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 43, - "h": 49 - }, - "frame": { - "x": 94, - "y": 0, - "w": 43, - "h": 49 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 43, - "h": 49 - }, - "frame": { - "x": 94, - "y": 0, - "w": 43, - "h": 49 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 43, - "h": 49 - }, - "frame": { - "x": 94, - "y": 0, - "w": 43, - "h": 49 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 43, - "h": 49 - }, - "frame": { - "x": 94, - "y": 0, - "w": 43, - "h": 49 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 43, - "h": 49 - }, - "frame": { - "x": 94, - "y": 0, - "w": 43, - "h": 49 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 43, - "h": 49 - }, - "frame": { - "x": 94, - "y": 0, - "w": 43, - "h": 49 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 43, - "h": 49 - }, - "frame": { - "x": 94, - "y": 0, - "w": 43, - "h": 49 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 43, - "h": 49 - }, - "frame": { - "x": 94, - "y": 0, - "w": 43, - "h": 49 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 43, - "h": 49 - }, - "frame": { - "x": 94, - "y": 0, - "w": 43, - "h": 49 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 43, - "h": 49 - }, - "frame": { - "x": 94, - "y": 0, - "w": 43, - "h": 49 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 43, - "h": 49 - }, - "frame": { - "x": 94, - "y": 0, - "w": 43, - "h": 49 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 137, - "y": 0, - "w": 42, - "h": 49 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 137, - "y": 0, - "w": 42, - "h": 49 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 137, - "y": 0, - "w": 42, - "h": 49 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 137, - "y": 0, - "w": 42, - "h": 49 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 137, - "y": 0, - "w": 42, - "h": 49 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 137, - "y": 0, - "w": 42, - "h": 49 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 47, - "h": 44 - }, - "frame": { - "x": 0, - "y": 45, - "w": 47, - "h": 44 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 47, - "h": 44 - }, - "frame": { - "x": 0, - "y": 45, - "w": 47, - "h": 44 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 47, - "h": 44 - }, - "frame": { - "x": 0, - "y": 45, - "w": 47, - "h": 44 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 47, - "h": 44 - }, - "frame": { - "x": 0, - "y": 45, - "w": 47, - "h": 44 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 47, - "h": 44 - }, - "frame": { - "x": 0, - "y": 45, - "w": 47, - "h": 44 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 47, - "h": 44 - }, - "frame": { - "x": 0, - "y": 45, - "w": 47, - "h": 44 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 44, - "h": 47 - }, - "frame": { - "x": 47, - "y": 45, - "w": 44, - "h": 47 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 44, - "h": 47 - }, - "frame": { - "x": 47, - "y": 45, - "w": 44, - "h": 47 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 44, - "h": 47 - }, - "frame": { - "x": 47, - "y": 45, - "w": 44, - "h": 47 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 44, - "h": 47 - }, - "frame": { - "x": 47, - "y": 45, - "w": 44, - "h": 47 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 44, - "h": 47 - }, - "frame": { - "x": 47, - "y": 45, - "w": 44, - "h": 47 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 44, - "h": 47 - }, - "frame": { - "x": 47, - "y": 45, - "w": 44, - "h": 47 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 0, - "y": 89, - "w": 42, - "h": 49 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 0, - "y": 89, - "w": 42, - "h": 49 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 0, - "y": 89, - "w": 42, - "h": 49 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 0, - "y": 89, - "w": 42, - "h": 49 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 0, - "y": 89, - "w": 42, - "h": 49 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 0, - "y": 89, - "w": 42, - "h": 49 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 47, - "h": 42 - }, - "frame": { - "x": 0, - "y": 138, - "w": 47, - "h": 42 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 47, - "h": 42 - }, - "frame": { - "x": 0, - "y": 138, - "w": 47, - "h": 42 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 47, - "h": 42 - }, - "frame": { - "x": 0, - "y": 138, - "w": 47, - "h": 42 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 47, - "h": 42 - }, - "frame": { - "x": 0, - "y": 138, - "w": 47, - "h": 42 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 47, - "h": 42 - }, - "frame": { - "x": 0, - "y": 138, - "w": 47, - "h": 42 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 47, - "h": 42 - }, - "frame": { - "x": 0, - "y": 138, - "w": 47, - "h": 42 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 46, - "h": 44 - }, - "frame": { - "x": 42, - "y": 92, - "w": 46, - "h": 44 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 46, - "h": 44 - }, - "frame": { - "x": 42, - "y": 92, - "w": 46, - "h": 44 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 46, - "h": 44 - }, - "frame": { - "x": 42, - "y": 92, - "w": 46, - "h": 44 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 46, - "h": 44 - }, - "frame": { - "x": 42, - "y": 92, - "w": 46, - "h": 44 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 46, - "h": 44 - }, - "frame": { - "x": 42, - "y": 92, - "w": 46, - "h": 44 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 47, - "h": 42 - }, - "frame": { - "x": 47, - "y": 136, - "w": 47, - "h": 42 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 91, - "y": 49, - "w": 42, - "h": 49 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 91, - "y": 49, - "w": 42, - "h": 49 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 91, - "y": 49, - "w": 42, - "h": 49 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 91, - "y": 49, - "w": 42, - "h": 49 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 91, - "y": 49, - "w": 42, - "h": 49 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 91, - "y": 49, - "w": 42, - "h": 49 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 133, - "y": 49, - "w": 42, - "h": 49 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 49 - }, - "frame": { - "x": 133, - "y": 49, - "w": 42, - "h": 49 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 43, - "h": 47 - }, - "frame": { - "x": 94, - "y": 98, - "w": 43, - "h": 47 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 43, - "h": 47 - }, - "frame": { - "x": 94, - "y": 98, - "w": 43, - "h": 47 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 43, - "h": 46 - }, - "frame": { - "x": 137, - "y": 98, - "w": 43, - "h": 46 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 43, - "h": 46 - }, - "frame": { - "x": 137, - "y": 98, - "w": 43, - "h": 46 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 43, - "h": 46 - }, - "frame": { - "x": 137, - "y": 98, - "w": 43, - "h": 46 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:ee78bfcc0ba0e0b5534e843718784ee6:a0e7315742d6fef56aa3fa3581440131:a7be961d0230f568aff23d95e7ff0036$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0002.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0003.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0004.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0005.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0008.png", + "frame": { "x": 41, "y": 130, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 42, "h": 39 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0009.png", + "frame": { "x": 41, "y": 130, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 42, "h": 39 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0012.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0013.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0014.png", + "frame": { "x": 80, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0015.png", + "frame": { "x": 80, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0016.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0017.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0018.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0019.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0020.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0021.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0022.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0023.png", + "frame": { "x": 41, "y": 130, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 42, "h": 39 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0024.png", + "frame": { "x": 41, "y": 130, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 42, "h": 39 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0027.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0028.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0029.png", + "frame": { "x": 80, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0030.png", + "frame": { "x": 80, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0031.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0032.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0033.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0034.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0035.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0038.png", + "frame": { "x": 41, "y": 130, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 42, "h": 39 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0039.png", + "frame": { "x": 41, "y": 130, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 42, "h": 39 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0040.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0042.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0043.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0044.png", + "frame": { "x": 80, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0045.png", + "frame": { "x": 80, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0046.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0047.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0048.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0049.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0050.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0051.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0052.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0053.png", + "frame": { "x": 41, "y": 130, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 42, "h": 39 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0054.png", + "frame": { "x": 41, "y": 130, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 42, "h": 39 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0057.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0058.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0059.png", + "frame": { "x": 80, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0060.png", + "frame": { "x": 80, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0063.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0064.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0065.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0066.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0067.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0068.png", + "frame": { "x": 41, "y": 130, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 42, "h": 39 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0069.png", + "frame": { "x": 41, "y": 130, "w": 42, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 42, "h": 39 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0070.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0071.png", + "frame": { "x": 0, "y": 130, "w": 41, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 41, "h": 40 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0072.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0073.png", + "frame": { "x": 40, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0074.png", + "frame": { "x": 80, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0075.png", + "frame": { "x": 80, "y": 88, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 42 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0076.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0077.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0078.png", + "frame": { "x": 83, "y": 132, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 38, "h": 43 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0079.png", + "frame": { "x": 120, "y": 88, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 38, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0080.png", + "frame": { "x": 120, "y": 88, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 38, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0081.png", + "frame": { "x": 0, "y": 45, "w": 40, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 40, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0082.png", + "frame": { "x": 0, "y": 45, "w": 40, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 40, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0083.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 45 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0084.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 45 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0085.png", + "frame": { "x": 42, "y": 0, "w": 42, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 42, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0086.png", + "frame": { "x": 42, "y": 0, "w": 42, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 42, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0087.png", + "frame": { "x": 42, "y": 0, "w": 42, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 42, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0088.png", + "frame": { "x": 42, "y": 44, "w": 41, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 41, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0089.png", + "frame": { "x": 42, "y": 44, "w": 41, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 41, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0090.png", + "frame": { "x": 84, "y": 0, "w": 42, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 42, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0091.png", + "frame": { "x": 84, "y": 0, "w": 42, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 42, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0092.png", + "frame": { "x": 83, "y": 44, "w": 41, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 41, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0093.png", + "frame": { "x": 83, "y": 44, "w": 41, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 41, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0094.png", + "frame": { "x": 84, "y": 0, "w": 42, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 42, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0095.png", + "frame": { "x": 124, "y": 44, "w": 41, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 41, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0096.png", + "frame": { "x": 124, "y": 44, "w": 41, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 41, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0097.png", + "frame": { "x": 126, "y": 0, "w": 42, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 42, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0098.png", + "frame": { "x": 126, "y": 0, "w": 42, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 42, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0099.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 45 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0100.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 45 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0101.png", + "frame": { "x": 0, "y": 45, "w": 40, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 40, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0102.png", + "frame": { "x": 0, "y": 45, "w": 40, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 40, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0103.png", + "frame": { "x": 120, "y": 88, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 38, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + }, + { + "filename": "0104.png", + "frame": { "x": 120, "y": 88, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 38, "h": 44 }, + "sourceSize": { "w": 44, "h": 45 }, + "duration": 50 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "653.png", + "format": "I8", + "size": { "w": 168, "h": 175 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/653.png b/public/images/pokemon/exp/shiny/653.png index 053624e5b7f..b1afebbd6a1 100644 Binary files a/public/images/pokemon/exp/shiny/653.png and b/public/images/pokemon/exp/shiny/653.png differ diff --git a/public/images/pokemon/exp/shiny/654.json b/public/images/pokemon/exp/shiny/654.json index 08655169f2a..74019f665ec 100644 --- a/public/images/pokemon/exp/shiny/654.json +++ b/public/images/pokemon/exp/shiny/654.json @@ -1,818 +1,695 @@ -{ - "textures": [ - { - "image": "654.png", - "format": "RGBA8888", - "size": { - "w": 390, - "h": 390 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 47, - "h": 81 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 81 - }, - "frame": { - "x": 0, - "y": 81, - "w": 47, - "h": 81 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 47, - "h": 81 - }, - "frame": { - "x": 0, - "y": 162, - "w": 47, - "h": 81 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 47, - "h": 80 - }, - "frame": { - "x": 0, - "y": 243, - "w": 47, - "h": 80 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 81 - }, - "frame": { - "x": 47, - "y": 0, - "w": 46, - "h": 81 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 81 - }, - "frame": { - "x": 47, - "y": 81, - "w": 46, - "h": 81 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 81 - }, - "frame": { - "x": 47, - "y": 162, - "w": 46, - "h": 81 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 46, - "h": 80 - }, - "frame": { - "x": 47, - "y": 243, - "w": 46, - "h": 80 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 46, - "h": 79 - }, - "frame": { - "x": 93, - "y": 0, - "w": 46, - "h": 79 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 46, - "h": 79 - }, - "frame": { - "x": 93, - "y": 79, - "w": 46, - "h": 79 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 46, - "h": 79 - }, - "frame": { - "x": 93, - "y": 158, - "w": 46, - "h": 79 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 46, - "h": 79 - }, - "frame": { - "x": 93, - "y": 237, - "w": 46, - "h": 79 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 8, - "y": 7, - "w": 46, - "h": 74 - }, - "frame": { - "x": 93, - "y": 316, - "w": 46, - "h": 74 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 46, - "h": 79 - }, - "frame": { - "x": 139, - "y": 0, - "w": 46, - "h": 79 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 80 - }, - "frame": { - "x": 139, - "y": 79, - "w": 45, - "h": 80 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 80 - }, - "frame": { - "x": 139, - "y": 159, - "w": 45, - "h": 80 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 46, - "h": 78 - }, - "frame": { - "x": 139, - "y": 239, - "w": 46, - "h": 78 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 46, - "h": 73 - }, - "frame": { - "x": 139, - "y": 317, - "w": 46, - "h": 73 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 45, - "h": 79 - }, - "frame": { - "x": 184, - "y": 79, - "w": 45, - "h": 79 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 45, - "h": 79 - }, - "frame": { - "x": 185, - "y": 0, - "w": 45, - "h": 79 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 45, - "h": 79 - }, - "frame": { - "x": 184, - "y": 158, - "w": 45, - "h": 79 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 45, - "h": 79 - }, - "frame": { - "x": 185, - "y": 237, - "w": 45, - "h": 79 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 8, - "y": 7, - "w": 46, - "h": 74 - }, - "frame": { - "x": 185, - "y": 316, - "w": 46, - "h": 74 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 45, - "h": 79 - }, - "frame": { - "x": 229, - "y": 79, - "w": 45, - "h": 79 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 45, - "h": 79 - }, - "frame": { - "x": 230, - "y": 0, - "w": 45, - "h": 79 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 45, - "h": 79 - }, - "frame": { - "x": 229, - "y": 158, - "w": 45, - "h": 79 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 45, - "h": 79 - }, - "frame": { - "x": 230, - "y": 237, - "w": 45, - "h": 79 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 46, - "h": 73 - }, - "frame": { - "x": 231, - "y": 316, - "w": 46, - "h": 73 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 46, - "h": 77 - }, - "frame": { - "x": 274, - "y": 79, - "w": 46, - "h": 77 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 47, - "h": 75 - }, - "frame": { - "x": 275, - "y": 0, - "w": 47, - "h": 75 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 45, - "h": 78 - }, - "frame": { - "x": 274, - "y": 156, - "w": 45, - "h": 78 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 45, - "h": 78 - }, - "frame": { - "x": 275, - "y": 234, - "w": 45, - "h": 78 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 46, - "h": 76 - }, - "frame": { - "x": 319, - "y": 156, - "w": 46, - "h": 76 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 45, - "h": 77 - }, - "frame": { - "x": 320, - "y": 75, - "w": 45, - "h": 77 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 46, - "h": 75 - }, - "frame": { - "x": 322, - "y": 0, - "w": 46, - "h": 75 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 46, - "h": 75 - }, - "frame": { - "x": 277, - "y": 312, - "w": 46, - "h": 75 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 45, - "h": 76 - }, - "frame": { - "x": 320, - "y": 232, - "w": 45, - "h": 76 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 81 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 45, - "h": 76 - }, - "frame": { - "x": 323, - "y": 308, - "w": 45, - "h": 76 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:3bc1d6050e2efe57cc85a4e2787f5287:383941fac594bced71237ecb57b89444:1977f50e1ab8a3304ceeb59ee1aa2ba9$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 102, "y": 326, "w": 50, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 50, "h": 67 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 107, "y": 261, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 196, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 282, "y": 0, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 117, "y": 0, "w": 56, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 56, "h": 66 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 60, "y": 0, "w": 57, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 57, "h": 68 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 229, "y": 0, "w": 53, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 53, "h": 69 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 261, "w": 51, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 1, "w": 51, "h": 68 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 102, "y": 326, "w": 50, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 50, "h": 67 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 160, "y": 261, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 110, "y": 196, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 65, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 117, "y": 0, "w": 56, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 56, "h": 66 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 60, "y": 0, "w": 57, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 57, "h": 68 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 229, "y": 0, "w": 53, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 53, "h": 69 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 261, "w": 51, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 1, "w": 51, "h": 68 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 102, "y": 326, "w": 50, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 50, "h": 67 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 107, "y": 261, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 0, "y": 196, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 282, "y": 0, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 117, "y": 0, "w": 56, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 56, "h": 66 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 60, "y": 0, "w": 57, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 57, "h": 68 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 229, "y": 0, "w": 53, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 53, "h": 69 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 0, "y": 261, "w": 51, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 1, "w": 51, "h": 68 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 102, "y": 326, "w": 50, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 50, "h": 67 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 160, "y": 261, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 110, "y": 196, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 0, "y": 65, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 117, "y": 0, "w": 56, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 56, "h": 66 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 60, "y": 0, "w": 57, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 57, "h": 68 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 229, "y": 0, "w": 53, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 53, "h": 69 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 261, "w": 51, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 1, "w": 51, "h": 68 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 102, "y": 326, "w": 50, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 50, "h": 67 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 107, "y": 261, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 0, "y": 196, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 282, "y": 0, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 117, "y": 0, "w": 56, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 56, "h": 66 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 60, "y": 0, "w": 57, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 57, "h": 68 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 229, "y": 0, "w": 53, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 53, "h": 69 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 0, "y": 261, "w": 51, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 1, "w": 51, "h": 68 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 102, "y": 326, "w": 50, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 50, "h": 67 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 160, "y": 261, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 110, "y": 196, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 0, "y": 65, "w": 55, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 55, "h": 66 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 117, "y": 0, "w": 56, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 56, "h": 66 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 60, "y": 0, "w": 57, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 57, "h": 68 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 229, "y": 0, "w": 53, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 53, "h": 69 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 0, "y": 261, "w": 51, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 1, "w": 51, "h": 68 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 152, "y": 326, "w": 50, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 50, "h": 67 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 164, "y": 196, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 117, "y": 66, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 172, "y": 66, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 213, "y": 265, "w": 51, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 51, "h": 66 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 282, "y": 66, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 173, "y": 0, "w": 56, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 56, "h": 66 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 0, "w": 60, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 60, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 55, "y": 68, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 227, "y": 69, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 275, "y": 196, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 55, "y": 68, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 227, "y": 69, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 275, "y": 196, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 55, "y": 68, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 227, "y": 69, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 275, "y": 196, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 55, "y": 68, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 0, "y": 131, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 110, "y": 131, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 165, "y": 131, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 282, "y": 131, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 55, "y": 133, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 220, "y": 134, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 54, "y": 198, "w": 53, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 53, "h": 66 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 218, "y": 199, "w": 53, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 53, "h": 66 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 271, "y": 261, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 51, "h": 67 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 51, "y": 264, "w": 51, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 51, "h": 67 }, + "sourceSize": { "w": 63, "h": 69 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "654.png", + "format": "I8", + "size": { "w": 337, "h": 393 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/654.png b/public/images/pokemon/exp/shiny/654.png index f619614c362..bc9177ec918 100644 Binary files a/public/images/pokemon/exp/shiny/654.png and b/public/images/pokemon/exp/shiny/654.png differ diff --git a/public/images/pokemon/exp/shiny/656.json b/public/images/pokemon/exp/shiny/656.json index ac9979ad913..3c2051bfe3a 100644 --- a/public/images/pokemon/exp/shiny/656.json +++ b/public/images/pokemon/exp/shiny/656.json @@ -1,671 +1,713 @@ -{ - "textures": [ - { - "image": "656.png", - "format": "RGBA8888", - "size": { - "w": 96, - "h": 96 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 32, - "h": 34 - }, - "frame": { - "x": 64, - "y": 0, - "w": 32, - "h": 34 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 32, - "h": 34 - }, - "frame": { - "x": 64, - "y": 0, - "w": 32, - "h": 34 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 32, - "h": 34 - }, - "frame": { - "x": 64, - "y": 0, - "w": 32, - "h": 34 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 32, - "h": 34 - }, - "frame": { - "x": 64, - "y": 0, - "w": 32, - "h": 34 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 32, - "h": 34 - }, - "frame": { - "x": 64, - "y": 34, - "w": 32, - "h": 34 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 32, - "h": 34 - }, - "frame": { - "x": 64, - "y": 34, - "w": 32, - "h": 34 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 32, - "h": 34 - }, - "frame": { - "x": 64, - "y": 34, - "w": 32, - "h": 34 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 32, - "h": 34 - }, - "frame": { - "x": 64, - "y": 34, - "w": 32, - "h": 34 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:5864efc3a72b67d8dab83f02efd39074:ff0362b6a3d22e42702e1a31a4aec233:9c4d208e6c2f857bfb0b23b8eea3326c$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 129, "y": 42, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 194, "y": 1, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 194, "y": 38, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 172, "y": 112, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 32, "h": 34 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 207, "y": 112, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 32, "h": 34 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 195, "y": 148, "w": 32, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 32, "h": 33 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 195, "y": 183, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 32, "h": 32 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 163, "y": 75, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 197, "y": 75, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 98, "y": 116, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 34 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 1, "y": 81, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 129, "y": 42, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 194, "y": 1, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 194, "y": 38, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 172, "y": 112, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 32, "h": 34 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 207, "y": 112, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 32, "h": 34 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 195, "y": 148, "w": 32, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 32, "h": 33 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 195, "y": 183, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 32, "h": 32 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 163, "y": 75, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 197, "y": 75, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 1, "y": 118, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 34 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 1, "y": 81, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 129, "y": 42, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 194, "y": 1, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 194, "y": 38, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 172, "y": 112, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 32, "h": 34 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 207, "y": 112, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 32, "h": 34 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 195, "y": 148, "w": 32, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 32, "h": 33 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 195, "y": 183, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 32, "h": 32 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 163, "y": 75, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 197, "y": 75, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 1, "y": 118, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 34 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 1, "y": 81, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 129, "y": 42, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 194, "y": 1, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 194, "y": 38, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 172, "y": 112, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 32, "h": 34 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 207, "y": 112, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 32, "h": 34 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 195, "y": 148, "w": 32, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 32, "h": 33 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 195, "y": 183, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 32, "h": 32 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 163, "y": 75, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 197, "y": 75, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 1, "y": 118, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 34 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 1, "y": 81, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 129, "y": 42, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 194, "y": 1, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 194, "y": 38, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 172, "y": 112, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 32, "h": 34 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 207, "y": 112, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 32, "h": 34 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 195, "y": 148, "w": 32, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 32, "h": 33 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 195, "y": 183, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 32, "h": 32 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 163, "y": 75, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 197, "y": 75, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 1, "y": 118, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 34 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 1, "y": 81, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 129, "y": 42, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 200 + }, + { + "filename": "0057.png", + "frame": { "x": 129, "y": 1, "w": 31, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 31, "h": 38 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 1, "y": 1, "w": 30, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 30, "h": 41 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 33, "y": 1, "w": 30, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 30, "h": 41 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 50 + }, + { + "filename": "0060.png", + "frame": { "x": 65, "y": 1, "w": 30, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 30, "h": 41 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 97, "y": 1, "w": 30, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 30, "h": 40 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 162, "y": 1, "w": 30, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 30, "h": 39 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 67, "y": 81, "w": 29, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 29, "h": 38 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 50 + }, + { + "filename": "0064.png", + "frame": { "x": 164, "y": 148, "w": 29, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 29, "h": 37 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 50 + }, + { + "filename": "0065.png", + "frame": { "x": 35, "y": 81, "w": 30, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 30, "h": 37 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 50 + }, + { + "filename": "0066.png", + "frame": { "x": 69, "y": 152, "w": 33, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 14, "w": 33, "h": 32 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 50 + }, + { + "filename": "0067.png", + "frame": { "x": 104, "y": 185, "w": 34, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 16, "w": 34, "h": 30 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 50 + }, + { + "filename": "0068.png", + "frame": { "x": 68, "y": 186, "w": 34, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 17, "w": 34, "h": 29 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 50 + }, + { + "filename": "0069.png", + "frame": { "x": 1, "y": 157, "w": 33, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 14, "w": 33, "h": 32 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 137, "y": 112, "w": 33, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 13, "w": 33, "h": 33 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 750 + }, + { + "filename": "0071.png", + "frame": { "x": 1, "y": 44, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 132, "y": 147, "w": 30, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 30, "h": 36 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 36, "y": 157, "w": 30, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 30, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 35, "y": 121, "w": 32, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 32, "h": 34 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 35, "y": 44, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 69, "y": 44, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 103, "y": 79, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 129, "y": 42, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 32, "h": 35 }, + "sourceSize": { "w": 36, "h": 47 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "656.png", + "format": "I8", + "size": { "w": 240, "h": 216 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/656.png b/public/images/pokemon/exp/shiny/656.png index ffbbc8258d1..c0a97924ca7 100644 Binary files a/public/images/pokemon/exp/shiny/656.png and b/public/images/pokemon/exp/shiny/656.png differ diff --git a/public/images/pokemon/exp/shiny/661.json b/public/images/pokemon/exp/shiny/661.json index 6dba8b616b3..ba6523f22b1 100644 --- a/public/images/pokemon/exp/shiny/661.json +++ b/public/images/pokemon/exp/shiny/661.json @@ -1,356 +1,398 @@ -{ - "textures": [ - { - "image": "661.png", - "format": "RGBA8888", - "size": { - "w": 70, - "h": 70 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 35 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 32, - "y": 35, - "w": 32, - "h": 35 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 32, - "y": 35, - "w": 32, - "h": 35 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:f9a4d305d58fcbff383e0da1712abf6a:1bc270d999d234ddb64b1c01d568ad86:186d621a544ea0e0e2e0bd57975a29b1$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 1, "y": 40, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0002.png", + "frame": { "x": 34, "y": 117, "w": 31, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 31, "h": 39 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0003.png", + "frame": { "x": 36, "y": 38, "w": 32, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 32, "h": 39 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0004.png", + "frame": { "x": 1, "y": 1, "w": 34, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 34, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0005.png", + "frame": { "x": 34, "y": 78, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0006.png", + "frame": { "x": 1, "y": 40, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0007.png", + "frame": { "x": 1, "y": 118, "w": 31, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 31, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0008.png", + "frame": { "x": 1, "y": 79, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0009.png", + "frame": { "x": 72, "y": 1, "w": 34, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 34, "h": 37 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0010.png", + "frame": { "x": 67, "y": 79, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0011.png", + "frame": { "x": 1, "y": 40, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0012.png", + "frame": { "x": 34, "y": 117, "w": 31, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 31, "h": 39 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0013.png", + "frame": { "x": 36, "y": 38, "w": 32, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 32, "h": 39 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0014.png", + "frame": { "x": 1, "y": 1, "w": 34, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 34, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0015.png", + "frame": { "x": 34, "y": 78, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0016.png", + "frame": { "x": 1, "y": 40, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0017.png", + "frame": { "x": 1, "y": 118, "w": 31, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 31, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0018.png", + "frame": { "x": 1, "y": 79, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0019.png", + "frame": { "x": 72, "y": 1, "w": 34, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 34, "h": 37 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0020.png", + "frame": { "x": 67, "y": 79, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0021.png", + "frame": { "x": 1, "y": 40, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0022.png", + "frame": { "x": 34, "y": 117, "w": 31, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 31, "h": 39 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0023.png", + "frame": { "x": 36, "y": 38, "w": 32, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 32, "h": 39 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0024.png", + "frame": { "x": 1, "y": 1, "w": 34, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 34, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0025.png", + "frame": { "x": 34, "y": 78, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0026.png", + "frame": { "x": 1, "y": 40, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0027.png", + "frame": { "x": 1, "y": 118, "w": 31, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 31, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0028.png", + "frame": { "x": 1, "y": 79, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0029.png", + "frame": { "x": 72, "y": 1, "w": 34, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 34, "h": 37 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0030.png", + "frame": { "x": 67, "y": 79, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0031.png", + "frame": { "x": 1, "y": 40, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0032.png", + "frame": { "x": 69, "y": 39, "w": 32, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 32, "h": 39 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0033.png", + "frame": { "x": 69, "y": 39, "w": 32, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 32, "h": 39 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0034.png", + "frame": { "x": 100, "y": 79, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 32, "h": 38 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0035.png", + "frame": { "x": 107, "y": 1, "w": 34, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 34, "h": 37 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0036.png", + "frame": { "x": 36, "y": 1, "w": 35, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 35, "h": 36 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0037.png", + "frame": { "x": 107, "y": 1, "w": 34, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 34, "h": 37 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0038.png", + "frame": { "x": 36, "y": 1, "w": 35, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 35, "h": 36 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0039.png", + "frame": { "x": 107, "y": 1, "w": 34, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 34, "h": 37 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0040.png", + "frame": { "x": 36, "y": 1, "w": 35, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 35, "h": 36 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0041.png", + "frame": { "x": 107, "y": 1, "w": 34, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 34, "h": 37 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0042.png", + "frame": { "x": 102, "y": 39, "w": 32, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 32, "h": 39 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + }, + { + "filename": "0043.png", + "frame": { "x": 69, "y": 39, "w": 32, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 32, "h": 39 }, + "sourceSize": { "w": 37, "h": 39 }, + "duration": 120 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "661.png", + "format": "I8", + "size": { "w": 142, "h": 157 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/661.png b/public/images/pokemon/exp/shiny/661.png index 2b73fb85c54..0e2d5996bc2 100644 Binary files a/public/images/pokemon/exp/shiny/661.png and b/public/images/pokemon/exp/shiny/661.png differ diff --git a/public/images/pokemon/exp/shiny/662.json b/public/images/pokemon/exp/shiny/662.json index 9aa396fbae1..3600bbcd38d 100644 --- a/public/images/pokemon/exp/shiny/662.json +++ b/public/images/pokemon/exp/shiny/662.json @@ -1,776 +1,254 @@ -{ - "textures": [ - { - "image": "662.png", - "format": "RGBA8888", - "size": { - "w": 167, - "h": 167 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 56, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 56, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 56, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 56, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 56, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 56, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 56, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 56, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 56, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 56, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 56, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 56, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 56, - "h": 52 - }, - "frame": { - "x": 56, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 56, - "h": 52 - }, - "frame": { - "x": 56, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 56, - "h": 52 - }, - "frame": { - "x": 56, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 56, - "h": 52 - }, - "frame": { - "x": 56, - "y": 0, - "w": 56, - "h": 52 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 1, - "y": 16, - "w": 55, - "h": 37 - }, - "frame": { - "x": 112, - "y": 0, - "w": 55, - "h": 37 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 1, - "y": 16, - "w": 55, - "h": 37 - }, - "frame": { - "x": 112, - "y": 0, - "w": 55, - "h": 37 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 1, - "y": 16, - "w": 55, - "h": 37 - }, - "frame": { - "x": 112, - "y": 0, - "w": 55, - "h": 37 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 1, - "y": 16, - "w": 55, - "h": 37 - }, - "frame": { - "x": 112, - "y": 0, - "w": 55, - "h": 37 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 51 - }, - "frame": { - "x": 0, - "y": 52, - "w": 56, - "h": 51 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 51 - }, - "frame": { - "x": 0, - "y": 52, - "w": 56, - "h": 51 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 51 - }, - "frame": { - "x": 0, - "y": 52, - "w": 56, - "h": 51 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 51 - }, - "frame": { - "x": 0, - "y": 52, - "w": 56, - "h": 51 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 50 - }, - "frame": { - "x": 0, - "y": 103, - "w": 56, - "h": 50 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 50 - }, - "frame": { - "x": 0, - "y": 103, - "w": 56, - "h": 50 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 50 - }, - "frame": { - "x": 0, - "y": 103, - "w": 56, - "h": 50 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 50 - }, - "frame": { - "x": 0, - "y": 103, - "w": 56, - "h": 50 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 56, - "h": 44 - }, - "frame": { - "x": 56, - "y": 52, - "w": 56, - "h": 44 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 56, - "h": 44 - }, - "frame": { - "x": 56, - "y": 52, - "w": 56, - "h": 44 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 56, - "h": 44 - }, - "frame": { - "x": 56, - "y": 96, - "w": 56, - "h": 44 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 56, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 56, - "h": 44 - }, - "frame": { - "x": 56, - "y": 96, - "w": 56, - "h": 44 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:3ab37b59d2c6d2f3d8b7379738b89720:769cd0fc38f80c712966ce15da281c1f:e3da2dd0277c18bcc713dc6dd2460c87$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 221, "y": 131, "w": 57, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 17, "w": 57, "h": 61 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 113, "y": 70, "w": 56, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 19, "w": 56, "h": 63 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 335, "y": 136, "w": 49, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 36, "w": 49, "h": 50 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 105, "y": 197, "w": 63, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 33, "w": 63, "h": 51 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 1, "y": 1, "w": 59, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 16, "w": 59, "h": 66 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 119, "y": 1, "w": 56, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 11, "w": 56, "h": 68 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 233, "y": 1, "w": 54, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 7, "w": 54, "h": 70 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 176, "y": 1, "w": 56, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 13, "w": 56, "h": 68 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 288, "y": 1, "w": 59, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 20, "w": 59, "h": 64 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 338, "y": 187, "w": 47, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 30, "w": 47, "h": 48 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 66, "y": 249, "w": 62, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 26, "w": 62, "h": 49 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 1, "y": 68, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 6, "w": 58, "h": 64 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 169, "y": 141, "w": 47, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 17, "w": 47, "h": 49 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 275, "y": 198, "w": 62, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 12, "w": 62, "h": 50 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 61, "y": 1, "w": 57, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 57, "h": 67 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 288, "y": 66, "w": 54, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 54, "h": 69 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 60, "y": 69, "w": 52, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 5, "w": 52, "h": 71 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 170, "y": 70, "w": 50, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 50, "h": 70 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 1, "y": 133, "w": 49, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 13, "w": 49, "h": 70 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 275, "y": 249, "w": 56, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 30, "w": 56, "h": 49 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 1, "y": 205, "w": 64, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 27, "w": 64, "h": 48 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 221, "y": 72, "w": 60, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 13, "w": 60, "h": 58 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 113, "y": 134, "w": 55, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 7, "w": 55, "h": 62 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 223, "y": 193, "w": 51, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 3, "w": 51, "h": 64 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 51, "y": 141, "w": 53, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 7, "w": 53, "h": 63 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 169, "y": 193, "w": 53, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 10, "w": 53, "h": 63 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 279, "y": 136, "w": 55, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 14, "w": 55, "h": 61 }, + "sourceSize": { "w": 75, "h": 86 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "662.png", + "format": "I8", + "size": { "w": 386, "h": 299 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/662.png b/public/images/pokemon/exp/shiny/662.png index e45e79556c5..4eae91c7855 100644 Binary files a/public/images/pokemon/exp/shiny/662.png and b/public/images/pokemon/exp/shiny/662.png differ diff --git a/public/images/pokemon/exp/shiny/663.json b/public/images/pokemon/exp/shiny/663.json index 3af6f5c5875..8c4ef182132 100644 --- a/public/images/pokemon/exp/shiny/663.json +++ b/public/images/pokemon/exp/shiny/663.json @@ -1,1700 +1,731 @@ -{ - "textures": [ - { - "image": "663.png", - "format": "RGBA8888", - "size": { - "w": 295, - "h": 295 - }, - "scale": 1, - "frames": [ - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 0, - "y": 27, - "w": 121, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 121, - "h": 58 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 0, - "y": 27, - "w": 121, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 121, - "h": 58 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 0, - "y": 27, - "w": 121, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 121, - "h": 58 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 0, - "y": 27, - "w": 121, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 121, - "h": 58 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 0, - "y": 27, - "w": 121, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 121, - "h": 58 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 0, - "y": 27, - "w": 121, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 121, - "h": 58 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 2, - "y": 27, - "w": 116, - "h": 64 - }, - "frame": { - "x": 121, - "y": 0, - "w": 116, - "h": 64 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 2, - "y": 27, - "w": 116, - "h": 64 - }, - "frame": { - "x": 121, - "y": 0, - "w": 116, - "h": 64 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 2, - "y": 27, - "w": 116, - "h": 64 - }, - "frame": { - "x": 121, - "y": 0, - "w": 116, - "h": 64 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 2, - "y": 27, - "w": 116, - "h": 64 - }, - "frame": { - "x": 121, - "y": 0, - "w": 116, - "h": 64 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 2, - "y": 27, - "w": 116, - "h": 64 - }, - "frame": { - "x": 121, - "y": 0, - "w": 116, - "h": 64 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 2, - "y": 27, - "w": 116, - "h": 64 - }, - "frame": { - "x": 121, - "y": 0, - "w": 116, - "h": 64 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 2, - "y": 27, - "w": 116, - "h": 64 - }, - "frame": { - "x": 121, - "y": 0, - "w": 116, - "h": 64 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 2, - "y": 27, - "w": 116, - "h": 64 - }, - "frame": { - "x": 121, - "y": 0, - "w": 116, - "h": 64 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 2, - "y": 27, - "w": 116, - "h": 64 - }, - "frame": { - "x": 121, - "y": 0, - "w": 116, - "h": 64 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 2, - "y": 27, - "w": 116, - "h": 64 - }, - "frame": { - "x": 121, - "y": 0, - "w": 116, - "h": 64 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 108, - "h": 88 - }, - "frame": { - "x": 0, - "y": 58, - "w": 108, - "h": 88 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 108, - "h": 88 - }, - "frame": { - "x": 0, - "y": 58, - "w": 108, - "h": 88 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 108, - "h": 88 - }, - "frame": { - "x": 0, - "y": 58, - "w": 108, - "h": 88 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 108, - "h": 88 - }, - "frame": { - "x": 0, - "y": 58, - "w": 108, - "h": 88 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 108, - "h": 88 - }, - "frame": { - "x": 0, - "y": 58, - "w": 108, - "h": 88 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 108, - "h": 88 - }, - "frame": { - "x": 0, - "y": 58, - "w": 108, - "h": 88 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 19, - "y": 0, - "w": 87, - "h": 92 - }, - "frame": { - "x": 0, - "y": 146, - "w": 87, - "h": 92 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 19, - "y": 0, - "w": 87, - "h": 92 - }, - "frame": { - "x": 0, - "y": 146, - "w": 87, - "h": 92 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 19, - "y": 0, - "w": 87, - "h": 92 - }, - "frame": { - "x": 0, - "y": 146, - "w": 87, - "h": 92 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 19, - "y": 0, - "w": 87, - "h": 92 - }, - "frame": { - "x": 0, - "y": 146, - "w": 87, - "h": 92 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 19, - "y": 0, - "w": 87, - "h": 92 - }, - "frame": { - "x": 0, - "y": 146, - "w": 87, - "h": 92 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 19, - "y": 0, - "w": 87, - "h": 92 - }, - "frame": { - "x": 0, - "y": 146, - "w": 87, - "h": 92 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 19, - "y": 0, - "w": 87, - "h": 92 - }, - "frame": { - "x": 0, - "y": 146, - "w": 87, - "h": 92 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 19, - "y": 0, - "w": 87, - "h": 92 - }, - "frame": { - "x": 0, - "y": 146, - "w": 87, - "h": 92 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 19, - "y": 0, - "w": 87, - "h": 92 - }, - "frame": { - "x": 0, - "y": 146, - "w": 87, - "h": 92 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 19, - "y": 0, - "w": 87, - "h": 92 - }, - "frame": { - "x": 0, - "y": 146, - "w": 87, - "h": 92 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 92, - "h": 91 - }, - "frame": { - "x": 87, - "y": 146, - "w": 92, - "h": 91 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 92, - "h": 91 - }, - "frame": { - "x": 87, - "y": 146, - "w": 92, - "h": 91 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 92, - "h": 91 - }, - "frame": { - "x": 87, - "y": 146, - "w": 92, - "h": 91 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 92, - "h": 91 - }, - "frame": { - "x": 87, - "y": 146, - "w": 92, - "h": 91 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 92, - "h": 91 - }, - "frame": { - "x": 87, - "y": 146, - "w": 92, - "h": 91 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 92, - "h": 91 - }, - "frame": { - "x": 87, - "y": 146, - "w": 92, - "h": 91 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 92, - "h": 91 - }, - "frame": { - "x": 87, - "y": 146, - "w": 92, - "h": 91 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 92, - "h": 91 - }, - "frame": { - "x": 87, - "y": 146, - "w": 92, - "h": 91 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 92, - "h": 91 - }, - "frame": { - "x": 87, - "y": 146, - "w": 92, - "h": 91 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 92, - "h": 91 - }, - "frame": { - "x": 87, - "y": 146, - "w": 92, - "h": 91 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 92, - "h": 91 - }, - "frame": { - "x": 87, - "y": 146, - "w": 92, - "h": 91 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 92, - "h": 91 - }, - "frame": { - "x": 87, - "y": 146, - "w": 92, - "h": 91 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 9, - "y": 33, - "w": 99, - "h": 58 - }, - "frame": { - "x": 87, - "y": 237, - "w": 99, - "h": 58 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 9, - "y": 33, - "w": 99, - "h": 58 - }, - "frame": { - "x": 87, - "y": 237, - "w": 99, - "h": 58 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 9, - "y": 33, - "w": 99, - "h": 58 - }, - "frame": { - "x": 87, - "y": 237, - "w": 99, - "h": 58 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 9, - "y": 33, - "w": 99, - "h": 58 - }, - "frame": { - "x": 87, - "y": 237, - "w": 99, - "h": 58 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 9, - "y": 33, - "w": 99, - "h": 58 - }, - "frame": { - "x": 87, - "y": 237, - "w": 99, - "h": 58 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 9, - "y": 33, - "w": 99, - "h": 58 - }, - "frame": { - "x": 87, - "y": 237, - "w": 99, - "h": 58 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 9, - "y": 33, - "w": 99, - "h": 58 - }, - "frame": { - "x": 87, - "y": 237, - "w": 99, - "h": 58 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 9, - "y": 33, - "w": 99, - "h": 58 - }, - "frame": { - "x": 87, - "y": 237, - "w": 99, - "h": 58 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 9, - "y": 33, - "w": 99, - "h": 58 - }, - "frame": { - "x": 87, - "y": 237, - "w": 99, - "h": 58 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 9, - "y": 33, - "w": 99, - "h": 58 - }, - "frame": { - "x": 87, - "y": 237, - "w": 99, - "h": 58 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 8, - "y": 13, - "w": 104, - "h": 76 - }, - "frame": { - "x": 186, - "y": 64, - "w": 104, - "h": 76 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 8, - "y": 13, - "w": 104, - "h": 76 - }, - "frame": { - "x": 186, - "y": 64, - "w": 104, - "h": 76 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 8, - "y": 13, - "w": 104, - "h": 76 - }, - "frame": { - "x": 186, - "y": 64, - "w": 104, - "h": 76 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 8, - "y": 13, - "w": 104, - "h": 76 - }, - "frame": { - "x": 186, - "y": 64, - "w": 104, - "h": 76 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 8, - "y": 13, - "w": 104, - "h": 76 - }, - "frame": { - "x": 186, - "y": 64, - "w": 104, - "h": 76 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 8, - "y": 13, - "w": 104, - "h": 76 - }, - "frame": { - "x": 186, - "y": 64, - "w": 104, - "h": 76 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 8, - "y": 13, - "w": 104, - "h": 76 - }, - "frame": { - "x": 186, - "y": 64, - "w": 104, - "h": 76 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 8, - "y": 13, - "w": 104, - "h": 76 - }, - "frame": { - "x": 186, - "y": 64, - "w": 104, - "h": 76 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 8, - "y": 13, - "w": 104, - "h": 76 - }, - "frame": { - "x": 186, - "y": 64, - "w": 104, - "h": 76 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 8, - "y": 13, - "w": 104, - "h": 76 - }, - "frame": { - "x": 186, - "y": 64, - "w": 104, - "h": 76 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 7, - "y": 29, - "w": 103, - "h": 64 - }, - "frame": { - "x": 186, - "y": 140, - "w": 103, - "h": 64 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 7, - "y": 29, - "w": 103, - "h": 64 - }, - "frame": { - "x": 186, - "y": 140, - "w": 103, - "h": 64 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 7, - "y": 29, - "w": 103, - "h": 64 - }, - "frame": { - "x": 186, - "y": 140, - "w": 103, - "h": 64 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 7, - "y": 29, - "w": 103, - "h": 64 - }, - "frame": { - "x": 186, - "y": 140, - "w": 103, - "h": 64 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 7, - "y": 29, - "w": 103, - "h": 64 - }, - "frame": { - "x": 186, - "y": 140, - "w": 103, - "h": 64 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 7, - "y": 29, - "w": 103, - "h": 64 - }, - "frame": { - "x": 186, - "y": 140, - "w": 103, - "h": 64 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 16, - "y": 3, - "w": 95, - "h": 87 - }, - "frame": { - "x": 186, - "y": 204, - "w": 95, - "h": 87 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 16, - "y": 3, - "w": 95, - "h": 87 - }, - "frame": { - "x": 186, - "y": 204, - "w": 95, - "h": 87 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 16, - "y": 3, - "w": 95, - "h": 87 - }, - "frame": { - "x": 186, - "y": 204, - "w": 95, - "h": 87 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 16, - "y": 3, - "w": 95, - "h": 87 - }, - "frame": { - "x": 186, - "y": 204, - "w": 95, - "h": 87 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 16, - "y": 3, - "w": 95, - "h": 87 - }, - "frame": { - "x": 186, - "y": 204, - "w": 95, - "h": 87 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 16, - "y": 3, - "w": 95, - "h": 87 - }, - "frame": { - "x": 186, - "y": 204, - "w": 95, - "h": 87 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 16, - "y": 3, - "w": 95, - "h": 87 - }, - "frame": { - "x": 186, - "y": 204, - "w": 95, - "h": 87 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 16, - "y": 3, - "w": 95, - "h": 87 - }, - "frame": { - "x": 186, - "y": 204, - "w": 95, - "h": 87 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 16, - "y": 3, - "w": 95, - "h": 87 - }, - "frame": { - "x": 186, - "y": 204, - "w": 95, - "h": 87 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 121, - "h": 93 - }, - "spriteSourceSize": { - "x": 16, - "y": 3, - "w": 95, - "h": 87 - }, - "frame": { - "x": 186, - "y": 204, - "w": 95, - "h": 87 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:8bf443d425b4203c8adbc0ffad215956:cf5b810e03b096373e0bdd0a7220fc2c:3790d8d72a704a789cc594688d98802e$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 107, "y": 0, "w": 90, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0002.png", + "frame": { "x": 198, "y": 0, "w": 93, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 6, "w": 93, "h": 85 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0003.png", + "frame": { "x": 378, "y": 0, "w": 102, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 16, "w": 102, "h": 74 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0004.png", + "frame": { "x": 115, "y": 90, "w": 121, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 30, "w": 121, "h": 56 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 90, "w": 114, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 30, "w": 114, "h": 62 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0006.png", + "frame": { "x": 378, "y": 75, "w": 101, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 32, "w": 101, "h": 63 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0007.png", + "frame": { "x": 237, "y": 92, "w": 97, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 36, "w": 97, "h": 56 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 0, "w": 106, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 106, "h": 86 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0009.png", + "frame": { "x": 107, "y": 0, "w": 90, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0010.png", + "frame": { "x": 292, "y": 0, "w": 85, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 2, "w": 85, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 107, "y": 0, "w": 90, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0012.png", + "frame": { "x": 198, "y": 0, "w": 93, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 6, "w": 93, "h": 85 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0013.png", + "frame": { "x": 378, "y": 0, "w": 102, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 16, "w": 102, "h": 74 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0014.png", + "frame": { "x": 115, "y": 90, "w": 121, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 30, "w": 121, "h": 56 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0015.png", + "frame": { "x": 0, "y": 90, "w": 114, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 30, "w": 114, "h": 62 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0016.png", + "frame": { "x": 378, "y": 75, "w": 101, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 32, "w": 101, "h": 63 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0017.png", + "frame": { "x": 237, "y": 92, "w": 97, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 36, "w": 97, "h": 56 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 0, "w": 106, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 106, "h": 86 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0019.png", + "frame": { "x": 107, "y": 0, "w": 90, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0020.png", + "frame": { "x": 292, "y": 0, "w": 85, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 2, "w": 85, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 107, "y": 0, "w": 90, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0022.png", + "frame": { "x": 198, "y": 0, "w": 93, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 6, "w": 93, "h": 85 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0023.png", + "frame": { "x": 378, "y": 0, "w": 102, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 16, "w": 102, "h": 74 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0024.png", + "frame": { "x": 115, "y": 90, "w": 121, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 30, "w": 121, "h": 56 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 90, "w": 114, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 30, "w": 114, "h": 62 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0026.png", + "frame": { "x": 378, "y": 75, "w": 101, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 32, "w": 101, "h": 63 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0027.png", + "frame": { "x": 237, "y": 92, "w": 97, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 36, "w": 97, "h": 56 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0028.png", + "frame": { "x": 0, "y": 0, "w": 106, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 106, "h": 86 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0029.png", + "frame": { "x": 107, "y": 0, "w": 90, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0030.png", + "frame": { "x": 292, "y": 0, "w": 85, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 2, "w": 85, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 107, "y": 0, "w": 90, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0032.png", + "frame": { "x": 198, "y": 0, "w": 93, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 6, "w": 93, "h": 85 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0033.png", + "frame": { "x": 378, "y": 0, "w": 102, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 16, "w": 102, "h": 74 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0034.png", + "frame": { "x": 115, "y": 90, "w": 121, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 30, "w": 121, "h": 56 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0035.png", + "frame": { "x": 0, "y": 90, "w": 114, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 30, "w": 114, "h": 62 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0036.png", + "frame": { "x": 378, "y": 75, "w": 101, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 32, "w": 101, "h": 63 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0037.png", + "frame": { "x": 237, "y": 92, "w": 97, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 36, "w": 97, "h": 56 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0038.png", + "frame": { "x": 0, "y": 0, "w": 106, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 106, "h": 86 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0039.png", + "frame": { "x": 107, "y": 0, "w": 90, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0040.png", + "frame": { "x": 292, "y": 0, "w": 85, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 2, "w": 85, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 107, "y": 0, "w": 90, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0042.png", + "frame": { "x": 198, "y": 0, "w": 93, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 6, "w": 93, "h": 85 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0043.png", + "frame": { "x": 378, "y": 0, "w": 102, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 16, "w": 102, "h": 74 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0044.png", + "frame": { "x": 115, "y": 90, "w": 121, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 30, "w": 121, "h": 56 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0045.png", + "frame": { "x": 0, "y": 90, "w": 114, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 30, "w": 114, "h": 62 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0046.png", + "frame": { "x": 378, "y": 75, "w": 101, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 32, "w": 101, "h": 63 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0047.png", + "frame": { "x": 237, "y": 92, "w": 97, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 36, "w": 97, "h": 56 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0048.png", + "frame": { "x": 0, "y": 0, "w": 106, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 106, "h": 86 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0049.png", + "frame": { "x": 107, "y": 0, "w": 90, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0050.png", + "frame": { "x": 292, "y": 0, "w": 85, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 2, "w": 85, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 107, "y": 0, "w": 90, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0052.png", + "frame": { "x": 198, "y": 0, "w": 93, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 6, "w": 93, "h": 85 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0053.png", + "frame": { "x": 378, "y": 0, "w": 102, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 16, "w": 102, "h": 74 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0054.png", + "frame": { "x": 115, "y": 90, "w": 121, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 30, "w": 121, "h": 56 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 90, "w": 114, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 30, "w": 114, "h": 62 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0056.png", + "frame": { "x": 378, "y": 75, "w": 101, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 32, "w": 101, "h": 63 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0057.png", + "frame": { "x": 237, "y": 92, "w": 97, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 36, "w": 97, "h": 56 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0058.png", + "frame": { "x": 0, "y": 0, "w": 106, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 106, "h": 86 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0059.png", + "frame": { "x": 107, "y": 0, "w": 90, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 3, "w": 90, "h": 89 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0060.png", + "frame": { "x": 292, "y": 0, "w": 85, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 2, "w": 85, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 198, "y": 0, "w": 93, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 6, "w": 93, "h": 85 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0062.png", + "frame": { "x": 378, "y": 0, "w": 102, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 16, "w": 102, "h": 74 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0063.png", + "frame": { "x": 0, "y": 90, "w": 114, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 30, "w": 114, "h": 62 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0064.png", + "frame": { "x": 237, "y": 92, "w": 97, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 36, "w": 97, "h": 56 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0065.png", + "frame": { "x": 292, "y": 0, "w": 85, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 2, "w": 85, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0066.png", + "frame": { "x": 198, "y": 0, "w": 93, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 6, "w": 93, "h": 85 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0067.png", + "frame": { "x": 378, "y": 0, "w": 102, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 16, "w": 102, "h": 74 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0068.png", + "frame": { "x": 0, "y": 90, "w": 114, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 30, "w": 114, "h": 62 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0069.png", + "frame": { "x": 237, "y": 92, "w": 97, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 36, "w": 97, "h": 56 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0070.png", + "frame": { "x": 292, "y": 0, "w": 85, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 2, "w": 85, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0071.png", + "frame": { "x": 198, "y": 0, "w": 93, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 6, "w": 93, "h": 85 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0072.png", + "frame": { "x": 378, "y": 0, "w": 102, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 16, "w": 102, "h": 74 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0073.png", + "frame": { "x": 0, "y": 90, "w": 114, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 30, "w": 114, "h": 62 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0074.png", + "frame": { "x": 237, "y": 92, "w": 97, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 36, "w": 97, "h": 56 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0075.png", + "frame": { "x": 292, "y": 0, "w": 85, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 2, "w": 85, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0076.png", + "frame": { "x": 198, "y": 0, "w": 93, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 6, "w": 93, "h": 85 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0077.png", + "frame": { "x": 378, "y": 0, "w": 102, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 16, "w": 102, "h": 74 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0078.png", + "frame": { "x": 0, "y": 90, "w": 114, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 30, "w": 114, "h": 62 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0079.png", + "frame": { "x": 237, "y": 92, "w": 97, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 36, "w": 97, "h": 56 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + }, + { + "filename": "0080.png", + "frame": { "x": 292, "y": 0, "w": 85, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 2, "w": 85, "h": 91 }, + "sourceSize": { "w": 128, "h": 96 }, + "duration": 80 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "663.png", + "format": "I8", + "size": { "w": 480, "h": 152 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/663.png b/public/images/pokemon/exp/shiny/663.png index 21c1e740e8d..a4e9dad1596 100644 Binary files a/public/images/pokemon/exp/shiny/663.png and b/public/images/pokemon/exp/shiny/663.png differ diff --git a/public/images/pokemon/exp/shiny/664.json b/public/images/pokemon/exp/shiny/664.json index 07a901e0d44..5036fe74b0b 100644 --- a/public/images/pokemon/exp/shiny/664.json +++ b/public/images/pokemon/exp/shiny/664.json @@ -1,188 +1,110 @@ -{ - "textures": [ - { - "image": "664.png", - "format": "RGBA8888", - "size": { - "w": 84, - "h": 84 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 25, - "h": 43 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 25, - "h": 43 - }, - "frame": { - "x": 0, - "y": 0, - "w": 25, - "h": 43 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 25, - "h": 43 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 25, - "h": 43 - }, - "frame": { - "x": 0, - "y": 0, - "w": 25, - "h": 43 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 25, - "h": 43 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 25, - "h": 43 - }, - "frame": { - "x": 0, - "y": 0, - "w": 25, - "h": 43 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 25, - "h": 43 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 25, - "h": 41 - }, - "frame": { - "x": 0, - "y": 43, - "w": 25, - "h": 41 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 25, - "h": 43 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 25, - "h": 41 - }, - "frame": { - "x": 0, - "y": 43, - "w": 25, - "h": 41 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 25, - "h": 43 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 25, - "h": 43 - }, - "frame": { - "x": 25, - "y": 0, - "w": 25, - "h": 43 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 25, - "h": 43 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 25, - "h": 43 - }, - "frame": { - "x": 25, - "y": 0, - "w": 25, - "h": 43 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 25, - "h": 43 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 25, - "h": 43 - }, - "frame": { - "x": 50, - "y": 0, - "w": 25, - "h": 43 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:abc9e31ee93d2f27a131cb957fe7fc3c:57e5ff2b24c643697831bc41f9168d6d:596e7d5b15b1bf041c4d7f6707c8ff49$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 46, "w": 26, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 26, "h": 46 }, + "sourceSize": { "w": 28, "h": 46 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 83, "y": 46, "w": 26, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 26, "h": 45 }, + "sourceSize": { "w": 28, "h": 46 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 26, "y": 90, "w": 26, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 26, "h": 45 }, + "sourceSize": { "w": 28, "h": 46 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 52, "y": 91, "w": 26, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 26, "h": 45 }, + "sourceSize": { "w": 28, "h": 46 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 26, "y": 46, "w": 27, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 27, "h": 44 }, + "sourceSize": { "w": 28, "h": 46 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 78, "y": 91, "w": 26, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 26, "h": 44 }, + "sourceSize": { "w": 28, "h": 46 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 56, "y": 0, "w": 28, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 28, "h": 45 }, + "sourceSize": { "w": 28, "h": 46 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 0, "w": 28, "h": 46 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 28, "h": 46 }, + "sourceSize": { "w": 28, "h": 46 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 28, "y": 0, "w": 28, "h": 46 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 28, "h": 46 }, + "sourceSize": { "w": 28, "h": 46 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 84, "y": 0, "w": 27, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 27, "h": 46 }, + "sourceSize": { "w": 28, "h": 46 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 56, "y": 45, "w": 27, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 27, "h": 46 }, + "sourceSize": { "w": 28, "h": 46 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "664.png", + "format": "I8", + "size": { "w": 111, "h": 136 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/664.png b/public/images/pokemon/exp/shiny/664.png index 2c10d379388..bfb8bd76371 100644 Binary files a/public/images/pokemon/exp/shiny/664.png and b/public/images/pokemon/exp/shiny/664.png differ diff --git a/public/images/pokemon/exp/shiny/665.json b/public/images/pokemon/exp/shiny/665.json index d419d4e9f03..a06b1d10ad0 100644 --- a/public/images/pokemon/exp/shiny/665.json +++ b/public/images/pokemon/exp/shiny/665.json @@ -1,188 +1,596 @@ -{ - "textures": [ - { - "image": "665.png", - "format": "RGBA8888", - "size": { - "w": 76, - "h": 76 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 36 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 36 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 36 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 36 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 36 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 36 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 36 - }, - "frame": { - "x": 38, - "y": 0, - "w": 38, - "h": 36 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 36 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 36 - }, - "frame": { - "x": 0, - "y": 36, - "w": 36, - "h": 36 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 36 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 36 - }, - "frame": { - "x": 0, - "y": 36, - "w": 36, - "h": 36 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 38, - "h": 35 - }, - "frame": { - "x": 36, - "y": 36, - "w": 38, - "h": 35 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 38, - "h": 35 - }, - "frame": { - "x": 36, - "y": 36, - "w": 38, - "h": 35 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:af761b040cc08a74363c20cbe1eaf31a:5814711e03aeb472bfa3250552523d75:a72e6c94514c750d7462eab6b08ee591$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 36, "y": 76, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 4, "w": 34, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 79, "y": 73, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 5, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 0, "y": 76, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 5, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 115, "y": 103, "w": 36, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 6, "w": 36, "h": 32 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 151, "y": 103, "w": 36, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 7, "w": 36, "h": 31 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 115, "y": 103, "w": 36, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 6, "w": 36, "h": 32 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 76, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 5, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 79, "y": 73, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 5, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 36, "y": 76, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 4, "w": 34, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 36, "y": 76, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 4, "w": 34, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 79, "y": 73, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 5, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 76, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 5, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 115, "y": 103, "w": 36, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 6, "w": 36, "h": 32 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 151, "y": 103, "w": 36, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 7, "w": 36, "h": 31 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 115, "y": 103, "w": 36, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 6, "w": 36, "h": 32 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 0, "y": 76, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 5, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 79, "y": 73, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 5, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 36, "y": 76, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 4, "w": 34, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 36, "y": 76, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 4, "w": 34, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 79, "y": 73, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 5, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 76, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 5, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 115, "y": 103, "w": 36, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 6, "w": 36, "h": 32 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 151, "y": 103, "w": 36, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 7, "w": 36, "h": 31 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 115, "y": 103, "w": 36, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 6, "w": 36, "h": 32 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 76, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 5, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 79, "y": 73, "w": 36, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 5, "w": 36, "h": 33 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 36, "y": 76, "w": 34, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 4, "w": 34, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 159, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 193, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 159, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 40, "y": 41, "w": 39, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 3, "w": 39, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 80, "y": 38, "w": 45, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 3, "w": 45, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 227, "y": 34, "w": 63, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 63, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 80, "y": 0, "w": 74, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 74, "h": 38 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 154, "y": 0, "w": 81, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 81, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 235, "y": 0, "w": 81, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 81, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 0, "w": 80, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 80, "h": 41 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 154, "y": 34, "w": 73, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 4, "w": 73, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 316, "y": 0, "w": 73, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 4, "w": 73, "h": 37 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 290, "y": 37, "w": 53, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 4, "w": 53, "h": 34 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 343, "y": 37, "w": 46, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 3, "w": 46, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 0, "y": 41, "w": 40, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 3, "w": 40, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 227, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 261, "y": 71, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 295, "y": 71, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 329, "y": 72, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 363, "y": 72, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 125, "y": 68, "w": 34, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 34, "h": 35 }, + "sourceSize": { "w": 81, "h": 45 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "665.png", + "format": "I8", + "size": { "w": 397, "h": 135 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/665.png b/public/images/pokemon/exp/shiny/665.png index 316ad902306..7046825ae59 100644 Binary files a/public/images/pokemon/exp/shiny/665.png and b/public/images/pokemon/exp/shiny/665.png differ diff --git a/public/images/pokemon/exp/shiny/667.json b/public/images/pokemon/exp/shiny/667.json index db076b1f465..3fba95afcf9 100644 --- a/public/images/pokemon/exp/shiny/667.json +++ b/public/images/pokemon/exp/shiny/667.json @@ -1,272 +1,659 @@ -{ - "textures": [ - { - "image": "667.png", - "format": "RGBA8888", - "size": { - "w": 160, - "h": 160 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 40, - "h": 46 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 40, - "h": 46 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 46 - }, - "frame": { - "x": 0, - "y": 46, - "w": 40, - "h": 46 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 46 - }, - "frame": { - "x": 0, - "y": 92, - "w": 40, - "h": 46 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 46 - }, - "frame": { - "x": 40, - "y": 0, - "w": 40, - "h": 46 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 46 - }, - "frame": { - "x": 80, - "y": 0, - "w": 40, - "h": 46 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 40, - "h": 45 - }, - "frame": { - "x": 120, - "y": 0, - "w": 40, - "h": 45 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 40, - "h": 45 - }, - "frame": { - "x": 120, - "y": 0, - "w": 40, - "h": 45 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 40, - "h": 45 - }, - "frame": { - "x": 120, - "y": 45, - "w": 40, - "h": 45 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 40, - "h": 45 - }, - "frame": { - "x": 40, - "y": 90, - "w": 40, - "h": 45 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 40, - "h": 44 - }, - "frame": { - "x": 40, - "y": 46, - "w": 40, - "h": 44 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 40, - "h": 44 - }, - "frame": { - "x": 80, - "y": 46, - "w": 40, - "h": 44 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:fb79c9185dd67d4776808c312f36f7a4:a6c3c7cc2402b26f23f5ac4e23929ba7:02171d511e760c8a3e1b623ad6bf93f5$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 127, "y": 48, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 50, "w": 39, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 39, "h": 46 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 40, "y": 50, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 39, "h": 45 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 120, "y": 96, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 38, "h": 44 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 80, "y": 96, "w": 39, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 39, "h": 44 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 40, "y": 96, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 39, "h": 45 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 85, "y": 49, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 40, "h": 46 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 127, "y": 48, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 50, "w": 39, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 39, "h": 46 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0013.png", + "frame": { "x": 40, "y": 50, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 39, "h": 45 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0014.png", + "frame": { "x": 120, "y": 96, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 38, "h": 44 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0015.png", + "frame": { "x": 80, "y": 96, "w": 39, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 39, "h": 44 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0016.png", + "frame": { "x": 40, "y": 96, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 39, "h": 45 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0017.png", + "frame": { "x": 85, "y": 49, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 40, "h": 46 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0018.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0019.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0020.png", + "frame": { "x": 127, "y": 48, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0021.png", + "frame": { "x": 0, "y": 50, "w": 39, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 39, "h": 46 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0022.png", + "frame": { "x": 40, "y": 50, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 39, "h": 45 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0023.png", + "frame": { "x": 120, "y": 96, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 38, "h": 44 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0024.png", + "frame": { "x": 80, "y": 96, "w": 39, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 39, "h": 44 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0025.png", + "frame": { "x": 40, "y": 96, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 39, "h": 45 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0026.png", + "frame": { "x": 85, "y": 49, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 40, "h": 46 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0027.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0028.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0029.png", + "frame": { "x": 127, "y": 48, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0030.png", + "frame": { "x": 0, "y": 50, "w": 39, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 39, "h": 46 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0031.png", + "frame": { "x": 40, "y": 50, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 39, "h": 45 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0032.png", + "frame": { "x": 120, "y": 96, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 38, "h": 44 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0033.png", + "frame": { "x": 80, "y": 96, "w": 39, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 39, "h": 44 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0034.png", + "frame": { "x": 40, "y": 96, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 39, "h": 45 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0035.png", + "frame": { "x": 85, "y": 49, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 40, "h": 46 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0036.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0037.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0038.png", + "frame": { "x": 127, "y": 48, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0039.png", + "frame": { "x": 0, "y": 50, "w": 39, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 39, "h": 46 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0040.png", + "frame": { "x": 40, "y": 50, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 39, "h": 45 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0041.png", + "frame": { "x": 120, "y": 96, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 38, "h": 44 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0042.png", + "frame": { "x": 80, "y": 96, "w": 39, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 39, "h": 44 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0043.png", + "frame": { "x": 40, "y": 96, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 39, "h": 45 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0044.png", + "frame": { "x": 85, "y": 49, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 40, "h": 46 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0045.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0046.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0047.png", + "frame": { "x": 127, "y": 48, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0048.png", + "frame": { "x": 0, "y": 50, "w": 39, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 39, "h": 46 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0049.png", + "frame": { "x": 40, "y": 50, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 39, "h": 45 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0050.png", + "frame": { "x": 120, "y": 96, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 38, "h": 44 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0051.png", + "frame": { "x": 80, "y": 96, "w": 39, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 39, "h": 44 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0052.png", + "frame": { "x": 40, "y": 96, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 39, "h": 45 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0053.png", + "frame": { "x": 85, "y": 49, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 40, "h": 46 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0054.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0055.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0056.png", + "frame": { "x": 85, "y": 0, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 41, "h": 48 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0057.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 49 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 49 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0058.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 41, "h": 49 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0059.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 49 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 49 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0060.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 41, "h": 49 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0061.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 49 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 49 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0062.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 41, "h": 49 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0063.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 49 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 49 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0064.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 41, "h": 49 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0065.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 49 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 49 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0066.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 41, "h": 49 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0067.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 49 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 49 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0068.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 41, "h": 49 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0069.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 49 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 49 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0070.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 41, "h": 49 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0071.png", + "frame": { "x": 85, "y": 0, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 41, "h": 48 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + }, + { + "filename": "0072.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 47 }, + "sourceSize": { "w": 42, "h": 49 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "667.png", + "format": "I8", + "size": { "w": 167, "h": 141 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/667.png b/public/images/pokemon/exp/shiny/667.png index a0704b502c9..589f219c472 100644 Binary files a/public/images/pokemon/exp/shiny/667.png and b/public/images/pokemon/exp/shiny/667.png differ diff --git a/public/images/pokemon/exp/shiny/668.json b/public/images/pokemon/exp/shiny/668.json index 7e3f88c2276..63671a548a2 100644 --- a/public/images/pokemon/exp/shiny/668.json +++ b/public/images/pokemon/exp/shiny/668.json @@ -1,272 +1,821 @@ -{ - "textures": [ - { - "image": "668.png", - "format": "RGBA8888", - "size": { - "w": 205, - "h": 205 - }, - "scale": 1, - "frames": [ - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 70, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 70, - "h": 68 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 70, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 70, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 70, - "h": 69 - }, - "frame": { - "x": 70, - "y": 0, - "w": 70, - "h": 69 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 70, - "h": 69 - }, - "frame": { - "x": 70, - "y": 0, - "w": 70, - "h": 69 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 70, - "h": 69 - }, - "frame": { - "x": 70, - "y": 0, - "w": 70, - "h": 69 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 70, - "h": 69 - }, - "frame": { - "x": 70, - "y": 0, - "w": 70, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 70 - }, - "frame": { - "x": 0, - "y": 68, - "w": 67, - "h": 70 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 70 - }, - "frame": { - "x": 0, - "y": 68, - "w": 67, - "h": 70 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 69, - "h": 70 - }, - "frame": { - "x": 67, - "y": 69, - "w": 69, - "h": 70 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 69, - "h": 70 - }, - "frame": { - "x": 67, - "y": 69, - "w": 69, - "h": 70 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 69, - "h": 70 - }, - "frame": { - "x": 67, - "y": 69, - "w": 69, - "h": 70 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 69, - "h": 70 - }, - "frame": { - "x": 136, - "y": 69, - "w": 69, - "h": 70 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:fe9d35bc9a00c019cb84acf0c89b22a5:7d23425606ae8471a81a61d8fdec2fc9:947bf84d1af493c62e2cef45bb6c19ad$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 67, "y": 222, "w": 70, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 70, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 295, "w": 68, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 68, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 414, "y": 297, "w": 67, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 67, "h": 72 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 196, "y": 367, "w": 65, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 65, "h": 71 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 414, "y": 369, "w": 62, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 62, "h": 72 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 320, "y": 372, "w": 60, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 60, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 380, "y": 441, "w": 58, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 58, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 196, "y": 438, "w": 58, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 61, "y": 370, "w": 60, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 60, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 350, "y": 296, "w": 64, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 64, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 151, "w": 67, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 67, "h": 77 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 283, "y": 149, "w": 68, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 68, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 434, "y": 149, "w": 68, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 68, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 214, "y": 149, "w": 69, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 69, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 282, "y": 225, "w": 68, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 68, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 67, "y": 222, "w": 70, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 70, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 295, "w": 68, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 68, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 414, "y": 297, "w": 67, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 67, "h": 72 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 196, "y": 367, "w": 65, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 65, "h": 71 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 414, "y": 369, "w": 62, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 62, "h": 72 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 320, "y": 372, "w": 60, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 60, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 380, "y": 441, "w": 58, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 58, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 196, "y": 438, "w": 58, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 61, "y": 370, "w": 60, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 60, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 350, "y": 296, "w": 64, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 64, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 151, "w": 67, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 67, "h": 77 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 283, "y": 149, "w": 68, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 68, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 434, "y": 149, "w": 68, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 68, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 214, "y": 149, "w": 69, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 69, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 282, "y": 225, "w": 68, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 68, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 67, "y": 222, "w": 70, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 70, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 295, "w": 68, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 68, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 414, "y": 297, "w": 67, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 67, "h": 72 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 196, "y": 367, "w": 65, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 65, "h": 71 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 414, "y": 369, "w": 62, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 62, "h": 72 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 320, "y": 372, "w": 60, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 60, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 380, "y": 441, "w": 58, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 58, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 196, "y": 438, "w": 58, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 61, "y": 370, "w": 60, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 60, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 350, "y": 296, "w": 64, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 64, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 151, "w": 67, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 67, "h": 77 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 283, "y": 149, "w": 68, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 68, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 434, "y": 149, "w": 68, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 68, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 214, "y": 149, "w": 69, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 69, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 282, "y": 225, "w": 68, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 68, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 67, "y": 222, "w": 70, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 70, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 0, "y": 295, "w": 68, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 68, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 414, "y": 297, "w": 67, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 67, "h": 72 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 196, "y": 367, "w": 65, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 65, "h": 71 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 414, "y": 369, "w": 62, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 62, "h": 72 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 320, "y": 372, "w": 60, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 60, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 380, "y": 441, "w": 58, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 58, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 196, "y": 438, "w": 58, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 61, "y": 370, "w": 60, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 60, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 350, "y": 296, "w": 64, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 64, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 151, "w": 67, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 67, "h": 77 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 283, "y": 149, "w": 68, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 68, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 434, "y": 149, "w": 68, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 68, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 214, "y": 149, "w": 69, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 69, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 282, "y": 225, "w": 68, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 68, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 351, "y": 151, "w": 70, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 70, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 142, "y": 221, "w": 70, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 70, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 351, "y": 224, "w": 70, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 70, "h": 72 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 421, "y": 225, "w": 69, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 69, "h": 72 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 205, "y": 296, "w": 69, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 69, "h": 71 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 212, "y": 224, "w": 70, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 70, "h": 72 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 137, "y": 294, "w": 68, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 68, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 274, "y": 299, "w": 64, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 64, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 0, "y": 368, "w": 61, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 61, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 0, "y": 442, "w": 55, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 55, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 438, "y": 441, "w": 55, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 55, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 261, "y": 372, "w": 59, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 134, "y": 367, "w": 62, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 62, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 68, "y": 295, "w": 66, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 66, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 365, "y": 75, "w": 69, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 69, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 0, "y": 75, "w": 71, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 71, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 442, "y": 74, "w": 72, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 72, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 221, "y": 74, "w": 72, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 72, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 369, "y": 0, "w": 73, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 73, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 296, "y": 0, "w": 73, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 73, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 74, "y": 0, "w": 74, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 74, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 0, "y": 0, "w": 74, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 74, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 148, "y": 0, "w": 74, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 74, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 148, "y": 74, "w": 73, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 73, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 222, "y": 0, "w": 74, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 74, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 442, "y": 0, "w": 73, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 73, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 293, "y": 75, "w": 72, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 72, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 71, "y": 75, "w": 72, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 72, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 71, "y": 149, "w": 71, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 71, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 143, "y": 148, "w": 71, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 71, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "668.png", + "format": "I8", + "size": { "w": 515, "h": 516 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/668.png b/public/images/pokemon/exp/shiny/668.png index eaf8428625f..4cac3d1d582 100644 Binary files a/public/images/pokemon/exp/shiny/668.png and b/public/images/pokemon/exp/shiny/668.png differ diff --git a/public/images/pokemon/exp/shiny/672.json b/public/images/pokemon/exp/shiny/672.json index 67914bce1a9..f337bef7d29 100644 --- a/public/images/pokemon/exp/shiny/672.json +++ b/public/images/pokemon/exp/shiny/672.json @@ -1,965 +1,479 @@ -{ - "textures": [ - { - "image": "672.png", - "format": "RGBA8888", - "size": { - "w": 250, - "h": 250 - }, - "scale": 1, - "frames": [ - { - "filename": "0033.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 42 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 42 - }, - "frame": { - "x": 38, - "y": 0, - "w": 38, - "h": 42 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 42 - }, - "frame": { - "x": 76, - "y": 0, - "w": 38, - "h": 42 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 42 - }, - "frame": { - "x": 114, - "y": 0, - "w": 38, - "h": 42 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 42 - }, - "frame": { - "x": 152, - "y": 0, - "w": 38, - "h": 42 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 42 - }, - "frame": { - "x": 190, - "y": 0, - "w": 38, - "h": 42 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 42 - }, - "frame": { - "x": 0, - "y": 42, - "w": 38, - "h": 42 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 42 - }, - "frame": { - "x": 38, - "y": 42, - "w": 38, - "h": 42 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 42 - }, - "frame": { - "x": 76, - "y": 42, - "w": 38, - "h": 42 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 42 - }, - "frame": { - "x": 114, - "y": 42, - "w": 37, - "h": 42 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 42 - }, - "frame": { - "x": 151, - "y": 42, - "w": 37, - "h": 42 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 42 - }, - "frame": { - "x": 188, - "y": 42, - "w": 37, - "h": 42 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 37, - "h": 42 - }, - "frame": { - "x": 0, - "y": 84, - "w": 37, - "h": 42 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 37, - "y": 84, - "w": 36, - "h": 42 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 37, - "y": 84, - "w": 36, - "h": 42 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 37, - "y": 84, - "w": 36, - "h": 42 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 37, - "y": 84, - "w": 36, - "h": 42 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 37, - "y": 84, - "w": 36, - "h": 42 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 37, - "y": 84, - "w": 36, - "h": 42 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 37, - "y": 84, - "w": 36, - "h": 42 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 73, - "y": 84, - "w": 36, - "h": 42 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 73, - "y": 84, - "w": 36, - "h": 42 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 73, - "y": 84, - "w": 36, - "h": 42 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 109, - "y": 84, - "w": 36, - "h": 42 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 109, - "y": 84, - "w": 36, - "h": 42 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 145, - "y": 84, - "w": 36, - "h": 42 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 181, - "y": 84, - "w": 36, - "h": 42 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 0, - "y": 126, - "w": 36, - "h": 42 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 36, - "y": 126, - "w": 36, - "h": 42 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 72, - "y": 126, - "w": 36, - "h": 42 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 108, - "y": 126, - "w": 36, - "h": 42 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 144, - "y": 126, - "w": 36, - "h": 42 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 36, - "h": 42 - }, - "frame": { - "x": 180, - "y": 126, - "w": 36, - "h": 42 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 36, - "h": 41 - }, - "frame": { - "x": 0, - "y": 168, - "w": 36, - "h": 41 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 36, - "h": 41 - }, - "frame": { - "x": 0, - "y": 168, - "w": 36, - "h": 41 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 36, - "h": 41 - }, - "frame": { - "x": 36, - "y": 168, - "w": 36, - "h": 41 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 36, - "h": 41 - }, - "frame": { - "x": 72, - "y": 168, - "w": 36, - "h": 41 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 36, - "h": 41 - }, - "frame": { - "x": 108, - "y": 168, - "w": 36, - "h": 41 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 36, - "h": 41 - }, - "frame": { - "x": 108, - "y": 168, - "w": 36, - "h": 41 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 36, - "h": 41 - }, - "frame": { - "x": 144, - "y": 168, - "w": 36, - "h": 41 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 35, - "h": 42 - }, - "frame": { - "x": 180, - "y": 168, - "w": 35, - "h": 42 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 35, - "h": 42 - }, - "frame": { - "x": 180, - "y": 168, - "w": 35, - "h": 42 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 35, - "h": 42 - }, - "frame": { - "x": 215, - "y": 168, - "w": 35, - "h": 42 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 36, - "h": 41 - }, - "frame": { - "x": 0, - "y": 209, - "w": 36, - "h": 41 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 36, - "h": 41 - }, - "frame": { - "x": 36, - "y": 209, - "w": 36, - "h": 41 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:6fbd68ddc96f5b89a1e22b8dd6bbb4a7:2f673cdac5630b38377caf1ee3b82a60:2e4767b7cd134fc0ab1bb6e9eee82bc7$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 127, "y": 50, "w": 42, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 42, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 43, "y": 53, "w": 43, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 43, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 124, "y": 148, "w": 43, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 43, "h": 45 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 102, "w": 42, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 42, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 127, "y": 99, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 41, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 128, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 127, "y": 50, "w": 42, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 42, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 43, "y": 53, "w": 43, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 43, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 124, "y": 148, "w": 43, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 43, "h": 45 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 102, "w": 42, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 42, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 127, "y": 99, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 41, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 128, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 127, "y": 50, "w": 42, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 42, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 43, "y": 53, "w": 43, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 43, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 124, "y": 148, "w": 43, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 43, "h": 45 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 102, "w": 42, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 42, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 127, "y": 99, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 41, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 128, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 127, "y": 50, "w": 42, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 42, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 43, "y": 53, "w": 43, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 43, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 124, "y": 148, "w": 43, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 43, "h": 45 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 102, "w": 42, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 42, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 127, "y": 99, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 41, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 128, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 43, "y": 0, "w": 43, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 43, "h": 53 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 0, "w": 43, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 43, "h": 54 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 42, "y": 100, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 41, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 86, "y": 50, "w": 41, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 41, "h": 51 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 43, "y": 0, "w": 43, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 43, "h": 53 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 0, "w": 43, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 43, "h": 54 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 83, "y": 101, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 41, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 86, "y": 50, "w": 41, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 41, "h": 51 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "672.png", + "format": "I8", + "size": { "w": 170, "h": 193 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/672.png b/public/images/pokemon/exp/shiny/672.png index 51c0e68da6c..605e79f1889 100644 Binary files a/public/images/pokemon/exp/shiny/672.png and b/public/images/pokemon/exp/shiny/672.png differ diff --git a/public/images/pokemon/exp/shiny/674.json b/public/images/pokemon/exp/shiny/674.json deleted file mode 100644 index 26013ad137f..00000000000 --- a/public/images/pokemon/exp/shiny/674.json +++ /dev/null @@ -1,524 +0,0 @@ -{ - "textures": [ - { - "image": "674.png", - "format": "RGBA8888", - "size": { - "w": 90, - "h": 90 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 30, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 40 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 30, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 40 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 30, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 40 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 30, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 40 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 30, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 40 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 30, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 40 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 30, - "h": 39 - }, - "frame": { - "x": 0, - "y": 40, - "w": 30, - "h": 39 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 30, - "h": 39 - }, - "frame": { - "x": 0, - "y": 40, - "w": 30, - "h": 39 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 30, - "h": 39 - }, - "frame": { - "x": 0, - "y": 40, - "w": 30, - "h": 39 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 30, - "h": 39 - }, - "frame": { - "x": 0, - "y": 40, - "w": 30, - "h": 39 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 30, - "h": 39 - }, - "frame": { - "x": 0, - "y": 40, - "w": 30, - "h": 39 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 30, - "h": 39 - }, - "frame": { - "x": 0, - "y": 40, - "w": 30, - "h": 39 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 30, - "h": 39 - }, - "frame": { - "x": 0, - "y": 40, - "w": 30, - "h": 39 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 30, - "h": 39 - }, - "frame": { - "x": 0, - "y": 40, - "w": 30, - "h": 39 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 30, - "h": 39 - }, - "frame": { - "x": 0, - "y": 40, - "w": 30, - "h": 39 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 30, - "h": 39 - }, - "frame": { - "x": 0, - "y": 40, - "w": 30, - "h": 39 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 30, - "h": 39 - }, - "frame": { - "x": 30, - "y": 0, - "w": 30, - "h": 39 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 30, - "h": 39 - }, - "frame": { - "x": 30, - "y": 0, - "w": 30, - "h": 39 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 30, - "h": 37 - }, - "frame": { - "x": 60, - "y": 0, - "w": 30, - "h": 37 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 30, - "h": 37 - }, - "frame": { - "x": 60, - "y": 0, - "w": 30, - "h": 37 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 30, - "h": 37 - }, - "frame": { - "x": 60, - "y": 0, - "w": 30, - "h": 37 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 30, - "h": 37 - }, - "frame": { - "x": 60, - "y": 0, - "w": 30, - "h": 37 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 30, - "h": 37 - }, - "frame": { - "x": 60, - "y": 37, - "w": 30, - "h": 37 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 30, - "h": 37 - }, - "frame": { - "x": 60, - "y": 37, - "w": 30, - "h": 37 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:a2f25cc68caea7219a96b563bb024d37:e8428456d1d23ad84ab9684dafd116b9:b823d10f1c9b4d501296982088ba63d6$" - } -} diff --git a/public/images/pokemon/exp/shiny/674.png b/public/images/pokemon/exp/shiny/674.png deleted file mode 100644 index b32b56ecd8d..00000000000 Binary files a/public/images/pokemon/exp/shiny/674.png and /dev/null differ diff --git a/public/images/pokemon/exp/shiny/692.json b/public/images/pokemon/exp/shiny/692.json index 6d64cba2430..86b535260ae 100644 --- a/public/images/pokemon/exp/shiny/692.json +++ b/public/images/pokemon/exp/shiny/692.json @@ -1,356 +1,794 @@ -{ - "textures": [ - { - "image": "692.png", - "format": "RGBA8888", - "size": { - "w": 162, - "h": 162 - }, - "scale": 1, - "frames": [ - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 60, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 60, - "h": 41 - }, - "frame": { - "x": 0, - "y": 0, - "w": 60, - "h": 41 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 60, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 60, - "h": 41 - }, - "frame": { - "x": 0, - "y": 0, - "w": 60, - "h": 41 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 60, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 60, - "h": 41 - }, - "frame": { - "x": 60, - "y": 0, - "w": 60, - "h": 41 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 60, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 60, - "h": 41 - }, - "frame": { - "x": 60, - "y": 0, - "w": 60, - "h": 41 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 60, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 60, - "h": 41 - }, - "frame": { - "x": 0, - "y": 41, - "w": 60, - "h": 41 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 60, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 60, - "h": 41 - }, - "frame": { - "x": 0, - "y": 41, - "w": 60, - "h": 41 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 60, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 60, - "h": 41 - }, - "frame": { - "x": 0, - "y": 82, - "w": 60, - "h": 41 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 60, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 60, - "h": 41 - }, - "frame": { - "x": 0, - "y": 82, - "w": 60, - "h": 41 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 60, - "h": 39 - }, - "frame": { - "x": 0, - "y": 123, - "w": 60, - "h": 39 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 60, - "h": 39 - }, - "frame": { - "x": 0, - "y": 123, - "w": 60, - "h": 39 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 60, - "h": 39 - }, - "frame": { - "x": 60, - "y": 41, - "w": 60, - "h": 39 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 60, - "h": 39 - }, - "frame": { - "x": 60, - "y": 41, - "w": 60, - "h": 39 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 60, - "h": 39 - }, - "frame": { - "x": 60, - "y": 41, - "w": 60, - "h": 39 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 60, - "h": 39 - }, - "frame": { - "x": 60, - "y": 41, - "w": 60, - "h": 39 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 41 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 59, - "h": 41 - }, - "frame": { - "x": 60, - "y": 80, - "w": 59, - "h": 41 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 41 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 59, - "h": 41 - }, - "frame": { - "x": 60, - "y": 121, - "w": 59, - "h": 41 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:fc9e6abcf70d6b35f1c403837c5312e8:2e67d61083a20d6c59dae4299718afc0:2880def858c84cd859bedf13b0b49a33$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0002.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0003.png", + "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0004.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0005.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0006.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0007.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0008.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0009.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0010.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0011.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0012.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0013.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0014.png", + "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0015.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0016.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0017.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0018.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0019.png", + "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0020.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0021.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0022.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0023.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0024.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0025.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0026.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0027.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0028.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0029.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0030.png", + "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0031.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0032.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0033.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0034.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0035.png", + "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0036.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0037.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0038.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0039.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0040.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0041.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0042.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0043.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0044.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0045.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0046.png", + "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0047.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0048.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0049.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0050.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0051.png", + "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0052.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0053.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0054.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0055.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0056.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0057.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0058.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0059.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0060.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0063.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0064.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0065.png", + "frame": { "x": 178, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0066.png", + "frame": { "x": 178, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0067.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0068.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0069.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0070.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0071.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0072.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0073.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0074.png", + "frame": { "x": 1, "y": 71, "w": 57, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 57, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0075.png", + "frame": { "x": 1, "y": 71, "w": 57, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 57, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0076.png", + "frame": { "x": 117, "y": 72, "w": 59, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0077.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0078.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0079.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0080.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0081.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0082.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0083.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0084.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0085.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0086.png", + "frame": { "x": 178, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0087.png", + "frame": { "x": 178, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "692.png", + "format": "I8", + "size": { "w": 239, "h": 106 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/692.png b/public/images/pokemon/exp/shiny/692.png index 46cb7ca0f35..3d938d6e64a 100644 Binary files a/public/images/pokemon/exp/shiny/692.png and b/public/images/pokemon/exp/shiny/692.png differ diff --git a/public/images/pokemon/exp/shiny/693.json b/public/images/pokemon/exp/shiny/693.json index 991a16f1e53..c8f7763de1d 100644 --- a/public/images/pokemon/exp/shiny/693.json +++ b/public/images/pokemon/exp/shiny/693.json @@ -1,272 +1,902 @@ -{ - "textures": [ - { - "image": "693.png", - "format": "RGBA8888", - "size": { - "w": 259, - "h": 259 - }, - "scale": 1, - "frames": [ - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 86, - "h": 89 - }, - "frame": { - "x": 0, - "y": 0, - "w": 86, - "h": 89 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 86, - "h": 89 - }, - "frame": { - "x": 0, - "y": 0, - "w": 86, - "h": 89 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 89 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 85, - "h": 89 - }, - "frame": { - "x": 0, - "y": 89, - "w": 85, - "h": 89 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 89 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 85, - "h": 89 - }, - "frame": { - "x": 0, - "y": 89, - "w": 85, - "h": 89 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 85, - "h": 89 - }, - "frame": { - "x": 86, - "y": 0, - "w": 85, - "h": 89 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 85, - "h": 89 - }, - "frame": { - "x": 86, - "y": 0, - "w": 85, - "h": 89 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 85, - "h": 89 - }, - "frame": { - "x": 85, - "y": 89, - "w": 85, - "h": 89 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 85, - "h": 88 - }, - "frame": { - "x": 171, - "y": 0, - "w": 85, - "h": 88 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 85, - "h": 88 - }, - "frame": { - "x": 171, - "y": 0, - "w": 85, - "h": 88 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 89 - }, - "spriteSourceSize": { - "x": 1, - "y": 8, - "w": 91, - "h": 80 - }, - "frame": { - "x": 0, - "y": 178, - "w": 91, - "h": 80 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 89 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 89, - "h": 83 - }, - "frame": { - "x": 170, - "y": 89, - "w": 89, - "h": 83 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 89 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 89, - "h": 83 - }, - "frame": { - "x": 170, - "y": 89, - "w": 89, - "h": 83 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:ab498798f30c4ef93c4c30affa037f2e:aef6fdb8988ea3ebf127e38fb4875bad:9c1f9147e693c05eb4655590e9099679$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 416, "y": 214, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 91, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 405, "y": 145, "w": 103, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 207, "y": 344, "w": 105, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 17, "w": 105, "h": 62 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 507, "y": 285, "w": 105, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 18, "w": 105, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 412, "y": 1, "w": 104, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 104, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 1, "y": 145, "w": 99, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 14, "w": 99, "h": 72 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 1, "y": 76, "w": 105, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 105, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 507, "y": 219, "w": 104, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 24, "w": 104, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 1, "y": 283, "w": 102, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 23, "w": 102, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 207, "y": 1, "w": 99, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 99, "h": 77 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 517, "y": 74, "w": 93, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 93, "h": 78 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 106, "y": 78, "w": 102, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 12, "w": 102, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 421, "y": 348, "w": 102, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 102, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 312, "y": 354, "w": 100, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 100, "h": 61 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 416, "y": 214, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 91, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 405, "y": 145, "w": 103, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 207, "y": 344, "w": 105, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 17, "w": 105, "h": 62 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 507, "y": 285, "w": 105, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 18, "w": 105, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 412, "y": 1, "w": 104, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 104, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 1, "y": 145, "w": 99, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 14, "w": 99, "h": 72 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 1, "y": 76, "w": 105, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 105, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 507, "y": 219, "w": 104, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 24, "w": 104, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 1, "y": 283, "w": 102, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 23, "w": 102, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 207, "y": 1, "w": 99, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 99, "h": 77 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 517, "y": 74, "w": 93, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 93, "h": 78 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 106, "y": 78, "w": 102, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 12, "w": 102, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 421, "y": 348, "w": 102, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 102, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 312, "y": 354, "w": 100, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 100, "h": 61 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 416, "y": 214, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 91, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 405, "y": 145, "w": 103, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 207, "y": 344, "w": 105, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 17, "w": 105, "h": 62 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 507, "y": 285, "w": 105, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 18, "w": 105, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 412, "y": 1, "w": 104, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 104, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 1, "y": 145, "w": 99, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 14, "w": 99, "h": 72 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 1, "y": 76, "w": 105, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 105, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 507, "y": 219, "w": 104, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 24, "w": 104, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 1, "y": 283, "w": 102, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 23, "w": 102, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 207, "y": 1, "w": 99, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 99, "h": 77 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 517, "y": 74, "w": 93, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 93, "h": 78 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 106, "y": 78, "w": 102, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 12, "w": 102, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 421, "y": 348, "w": 102, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 102, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 312, "y": 354, "w": 100, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 100, "h": 61 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 416, "y": 214, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 91, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 405, "y": 145, "w": 103, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 207, "y": 344, "w": 105, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 17, "w": 105, "h": 62 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 507, "y": 285, "w": 105, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 18, "w": 105, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 412, "y": 1, "w": 104, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 104, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 1, "y": 145, "w": 99, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 14, "w": 99, "h": 72 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 1, "y": 76, "w": 105, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 105, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 507, "y": 219, "w": 104, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 24, "w": 104, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 1, "y": 283, "w": 102, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 23, "w": 102, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 207, "y": 1, "w": 99, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 99, "h": 77 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 517, "y": 74, "w": 93, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 93, "h": 78 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 106, "y": 78, "w": 102, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 12, "w": 102, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 421, "y": 348, "w": 102, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 102, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 312, "y": 354, "w": 100, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 100, "h": 61 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 416, "y": 214, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 91, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 405, "y": 145, "w": 103, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 207, "y": 344, "w": 105, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 17, "w": 105, "h": 62 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 507, "y": 285, "w": 105, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 18, "w": 105, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 412, "y": 1, "w": 104, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 104, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 1, "y": 145, "w": 99, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 14, "w": 99, "h": 72 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 1, "y": 76, "w": 105, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 105, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 507, "y": 219, "w": 104, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 24, "w": 104, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 1, "y": 283, "w": 102, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 23, "w": 102, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 207, "y": 1, "w": 99, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 99, "h": 77 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 517, "y": 74, "w": 93, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 93, "h": 78 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 106, "y": 78, "w": 102, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 12, "w": 102, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 421, "y": 348, "w": 102, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 102, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 312, "y": 354, "w": 100, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 100, "h": 61 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 303, "y": 140, "w": 102, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 5, "w": 102, "h": 70 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 523, "y": 348, "w": 102, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 11, "w": 102, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 318, "y": 290, "w": 103, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 7, "w": 103, "h": 64 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 105, "y": 1, "w": 102, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 0, "w": 102, "h": 75 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 306, "y": 72, "w": 108, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 108, "h": 68 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 108, "y": 276, "w": 105, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 14, "w": 105, "h": 65 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 1, "y": 1, "w": 104, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 104, "h": 74 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 203, "y": 210, "w": 106, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 13, "w": 106, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 508, "y": 152, "w": 106, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 106, "h": 67 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 414, "y": 74, "w": 103, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 8, "w": 103, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 306, "y": 72, "w": 108, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 108, "h": 68 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 108, "y": 276, "w": 105, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 14, "w": 105, "h": 65 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 1, "y": 1, "w": 104, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 104, "h": 74 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 203, "y": 210, "w": 106, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 13, "w": 106, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 309, "y": 214, "w": 107, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 14, "w": 107, "h": 65 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 306, "y": 1, "w": 106, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 9, "w": 106, "h": 70 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 1, "y": 218, "w": 107, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 14, "w": 107, "h": 65 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 213, "y": 279, "w": 105, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 105, "h": 65 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 103, "y": 341, "w": 104, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 104, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 516, "y": 1, "w": 101, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 5, "w": 101, "h": 73 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 100, "y": 149, "w": 103, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 1, "y": 349, "w": 102, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 16, "w": 102, "h": 62 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 103, "y": 404, "w": 100, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 16, "w": 100, "h": 61 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "693.png", + "format": "I8", + "size": { "w": 626, "h": 466 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/693.png b/public/images/pokemon/exp/shiny/693.png index 328c909b196..60f40ad0c40 100644 Binary files a/public/images/pokemon/exp/shiny/693.png and b/public/images/pokemon/exp/shiny/693.png differ diff --git a/public/images/pokemon/exp/shiny/694.json b/public/images/pokemon/exp/shiny/694.json deleted file mode 100644 index 2352bb65a43..00000000000 --- a/public/images/pokemon/exp/shiny/694.json +++ /dev/null @@ -1,272 +0,0 @@ -{ - "textures": [ - { - "image": "694.png", - "format": "RGBA8888", - "size": { - "w": 140, - "h": 140 - }, - "scale": 1, - "frames": [ - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 37 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 44, - "h": 34 - }, - "frame": { - "x": 0, - "y": 0, - "w": 44, - "h": 34 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 37 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 43, - "h": 34 - }, - "frame": { - "x": 0, - "y": 34, - "w": 43, - "h": 34 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 37 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 43, - "h": 34 - }, - "frame": { - "x": 44, - "y": 0, - "w": 43, - "h": 34 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 37 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 41, - "h": 35 - }, - "frame": { - "x": 0, - "y": 68, - "w": 41, - "h": 35 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 37 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 36, - "h": 37 - }, - "frame": { - "x": 0, - "y": 103, - "w": 36, - "h": 37 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 37 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 36, - "h": 37 - }, - "frame": { - "x": 0, - "y": 103, - "w": 36, - "h": 37 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 37 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 34, - "h": 37 - }, - "frame": { - "x": 36, - "y": 103, - "w": 34, - "h": 37 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 37 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 41, - "h": 35 - }, - "frame": { - "x": 87, - "y": 0, - "w": 41, - "h": 35 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 37 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 39, - "h": 36 - }, - "frame": { - "x": 43, - "y": 34, - "w": 39, - "h": 36 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 37 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 39, - "h": 36 - }, - "frame": { - "x": 82, - "y": 35, - "w": 39, - "h": 36 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 37 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 33, - "h": 37 - }, - "frame": { - "x": 70, - "y": 71, - "w": 33, - "h": 37 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 44, - "h": 37 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 31, - "h": 37 - }, - "frame": { - "x": 103, - "y": 71, - "w": 31, - "h": 37 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:8a9916d2af3a40f04636cd5b11758f77:333ac780963a12589518f0acf1d61fde:b0990f9650cfe63b836cbed33f0b44d8$" - } -} diff --git a/public/images/pokemon/exp/shiny/694.png b/public/images/pokemon/exp/shiny/694.png deleted file mode 100644 index fe927c06742..00000000000 Binary files a/public/images/pokemon/exp/shiny/694.png and /dev/null differ diff --git a/public/images/pokemon/exp/shiny/696.json b/public/images/pokemon/exp/shiny/696.json index 0d54e1282c5..7ea3165c669 100644 --- a/public/images/pokemon/exp/shiny/696.json +++ b/public/images/pokemon/exp/shiny/696.json @@ -1,692 +1,1055 @@ -{ - "textures": [ - { - "image": "696.png", - "format": "RGBA8888", - "size": { - "w": 135, - "h": 135 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 53, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 53, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 53, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 53, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 53, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 53, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 53, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 53, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 53, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 53, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 0, - "y": 46, - "w": 53, - "h": 46 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 46 - }, - "frame": { - "x": 0, - "y": 46, - "w": 53, - "h": 46 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 53, - "h": 43 - }, - "frame": { - "x": 0, - "y": 92, - "w": 53, - "h": 43 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 53, - "h": 43 - }, - "frame": { - "x": 0, - "y": 92, - "w": 53, - "h": 43 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 53, - "h": 45 - }, - "frame": { - "x": 53, - "y": 46, - "w": 53, - "h": 45 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 53, - "h": 45 - }, - "frame": { - "x": 53, - "y": 46, - "w": 53, - "h": 45 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 53, - "h": 45 - }, - "frame": { - "x": 53, - "y": 46, - "w": 53, - "h": 45 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 53, - "h": 45 - }, - "frame": { - "x": 53, - "y": 46, - "w": 53, - "h": 45 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 53, - "h": 45 - }, - "frame": { - "x": 53, - "y": 46, - "w": 53, - "h": 45 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 53, - "h": 45 - }, - "frame": { - "x": 53, - "y": 46, - "w": 53, - "h": 45 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 53, - "h": 45 - }, - "frame": { - "x": 53, - "y": 46, - "w": 53, - "h": 45 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 53, - "h": 45 - }, - "frame": { - "x": 53, - "y": 46, - "w": 53, - "h": 45 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 44 - }, - "frame": { - "x": 53, - "y": 91, - "w": 53, - "h": 44 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 44 - }, - "frame": { - "x": 53, - "y": 91, - "w": 53, - "h": 44 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 44 - }, - "frame": { - "x": 53, - "y": 91, - "w": 53, - "h": 44 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 44 - }, - "frame": { - "x": 53, - "y": 91, - "w": 53, - "h": 44 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:83a7f65d0ef4a30ff24cb813c97b1fe2:69043b7539e99a45979999a29408221b:58b7763fb9abdd043e9bfa400cfafdef$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0002.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0003.png", + "frame": { "x": 114, "y": 0, "w": 57, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 57, "h": 47 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0004.png", + "frame": { "x": 114, "y": 0, "w": 57, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 57, "h": 47 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0005.png", + "frame": { "x": 57, "y": 0, "w": 57, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 57, "h": 48 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0006.png", + "frame": { "x": 57, "y": 0, "w": 57, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 57, "h": 48 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 0, "w": 57, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 57, "h": 50 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 0, "w": 57, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 57, "h": 50 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0009.png", + "frame": { "x": 114, "y": 0, "w": 57, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 57, "h": 47 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0010.png", + "frame": { "x": 113, "y": 93, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 57, "h": 44 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0011.png", + "frame": { "x": 170, "y": 92, "w": 57, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 57, "h": 45 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0012.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0013.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0014.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0015.png", + "frame": { "x": 56, "y": 94, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 57, "h": 44 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0016.png", + "frame": { "x": 56, "y": 94, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 57, "h": 44 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0017.png", + "frame": { "x": 113, "y": 137, "w": 58, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 58, "h": 42 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0018.png", + "frame": { "x": 113, "y": 137, "w": 58, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 58, "h": 42 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0019.png", + "frame": { "x": 0, "y": 138, "w": 58, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 58, "h": 40 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0020.png", + "frame": { "x": 0, "y": 138, "w": 58, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 58, "h": 40 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0021.png", + "frame": { "x": 56, "y": 94, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 57, "h": 44 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0022.png", + "frame": { "x": 113, "y": 93, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 57, "h": 44 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0023.png", + "frame": { "x": 170, "y": 92, "w": 57, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 57, "h": 45 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0024.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0025.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0026.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0027.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0028.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0029.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0030.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0031.png", + "frame": { "x": 114, "y": 0, "w": 57, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 57, "h": 47 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0032.png", + "frame": { "x": 114, "y": 0, "w": 57, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 57, "h": 47 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0033.png", + "frame": { "x": 57, "y": 0, "w": 57, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 57, "h": 48 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0034.png", + "frame": { "x": 57, "y": 0, "w": 57, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 57, "h": 48 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0035.png", + "frame": { "x": 0, "y": 0, "w": 57, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 57, "h": 50 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 0, "w": 57, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 57, "h": 50 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0037.png", + "frame": { "x": 114, "y": 0, "w": 57, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 57, "h": 47 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0038.png", + "frame": { "x": 113, "y": 93, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 57, "h": 44 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0039.png", + "frame": { "x": 170, "y": 92, "w": 57, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 57, "h": 45 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0040.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0041.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0042.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0043.png", + "frame": { "x": 56, "y": 94, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 57, "h": 44 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0044.png", + "frame": { "x": 56, "y": 94, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 57, "h": 44 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0045.png", + "frame": { "x": 113, "y": 137, "w": 58, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 58, "h": 42 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0046.png", + "frame": { "x": 113, "y": 137, "w": 58, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 58, "h": 42 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0047.png", + "frame": { "x": 0, "y": 138, "w": 58, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 58, "h": 40 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0048.png", + "frame": { "x": 0, "y": 138, "w": 58, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 58, "h": 40 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0049.png", + "frame": { "x": 56, "y": 94, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 57, "h": 44 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0050.png", + "frame": { "x": 113, "y": 93, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 57, "h": 44 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0051.png", + "frame": { "x": 170, "y": 92, "w": 57, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 57, "h": 45 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0052.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0053.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0054.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0055.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0056.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0057.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0058.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0059.png", + "frame": { "x": 114, "y": 0, "w": 57, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 57, "h": 47 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0060.png", + "frame": { "x": 114, "y": 0, "w": 57, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 57, "h": 47 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 57, "y": 0, "w": 57, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 57, "h": 48 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 57, "y": 0, "w": 57, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 57, "h": 48 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0063.png", + "frame": { "x": 0, "y": 0, "w": 57, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 57, "h": 50 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0064.png", + "frame": { "x": 0, "y": 0, "w": 57, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 57, "h": 50 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0065.png", + "frame": { "x": 114, "y": 0, "w": 57, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 57, "h": 47 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0066.png", + "frame": { "x": 113, "y": 93, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 57, "h": 44 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0067.png", + "frame": { "x": 170, "y": 92, "w": 57, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 57, "h": 45 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0068.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0069.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0070.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0071.png", + "frame": { "x": 56, "y": 94, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 57, "h": 44 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0072.png", + "frame": { "x": 56, "y": 94, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 57, "h": 44 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0073.png", + "frame": { "x": 113, "y": 137, "w": 58, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 58, "h": 42 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0074.png", + "frame": { "x": 113, "y": 137, "w": 58, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 58, "h": 42 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0075.png", + "frame": { "x": 0, "y": 138, "w": 58, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 58, "h": 40 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0076.png", + "frame": { "x": 0, "y": 138, "w": 58, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 58, "h": 40 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0077.png", + "frame": { "x": 56, "y": 94, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 57, "h": 44 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0078.png", + "frame": { "x": 113, "y": 93, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 57, "h": 44 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0079.png", + "frame": { "x": 170, "y": 92, "w": 57, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 57, "h": 45 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0080.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0081.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0082.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0083.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0084.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0085.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0086.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0087.png", + "frame": { "x": 227, "y": 92, "w": 55, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 55, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0088.png", + "frame": { "x": 227, "y": 92, "w": 55, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 55, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0089.png", + "frame": { "x": 228, "y": 46, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 56, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0090.png", + "frame": { "x": 228, "y": 46, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 56, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0091.png", + "frame": { "x": 114, "y": 47, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 56, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0092.png", + "frame": { "x": 114, "y": 47, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 56, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0093.png", + "frame": { "x": 171, "y": 0, "w": 58, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 58, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0094.png", + "frame": { "x": 171, "y": 0, "w": 58, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 58, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0095.png", + "frame": { "x": 171, "y": 46, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0096.png", + "frame": { "x": 57, "y": 48, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 56, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0097.png", + "frame": { "x": 57, "y": 48, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 56, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0098.png", + "frame": { "x": 0, "y": 50, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 56, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0099.png", + "frame": { "x": 0, "y": 50, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 56, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0100.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0101.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0102.png", + "frame": { "x": 227, "y": 92, "w": 55, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 55, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0103.png", + "frame": { "x": 227, "y": 92, "w": 55, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 55, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0104.png", + "frame": { "x": 228, "y": 46, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 56, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0105.png", + "frame": { "x": 228, "y": 46, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 56, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0106.png", + "frame": { "x": 114, "y": 47, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 56, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0107.png", + "frame": { "x": 114, "y": 47, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 56, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0108.png", + "frame": { "x": 171, "y": 0, "w": 58, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 58, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0109.png", + "frame": { "x": 171, "y": 0, "w": 58, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 58, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0110.png", + "frame": { "x": 171, "y": 46, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0111.png", + "frame": { "x": 57, "y": 48, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 56, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0112.png", + "frame": { "x": 57, "y": 48, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 56, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0113.png", + "frame": { "x": 0, "y": 50, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 56, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0114.png", + "frame": { "x": 0, "y": 50, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 56, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0115.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + }, + { + "filename": "0116.png", + "frame": { "x": 229, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 61, "h": 50 }, + "duration": 50 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "696.png", + "format": "I8", + "size": { "w": 286, "h": 179 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/696.png b/public/images/pokemon/exp/shiny/696.png index 0a11f7b7ec7..86ecac0d371 100644 Binary files a/public/images/pokemon/exp/shiny/696.png and b/public/images/pokemon/exp/shiny/696.png differ diff --git a/public/images/pokemon/exp/shiny/697.json b/public/images/pokemon/exp/shiny/697.json index 7d68fbf764e..c56de41946c 100644 --- a/public/images/pokemon/exp/shiny/697.json +++ b/public/images/pokemon/exp/shiny/697.json @@ -1,1175 +1,983 @@ -{ - "textures": [ - { - "image": "697.png", - "format": "RGBA8888", - "size": { - "w": 378, - "h": 378 - }, - "scale": 1, - "frames": [ - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 76, - "h": 76 - }, - "frame": { - "x": 0, - "y": 0, - "w": 76, - "h": 76 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 76, - "h": 76 - }, - "frame": { - "x": 0, - "y": 0, - "w": 76, - "h": 76 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 76, - "h": 76 - }, - "frame": { - "x": 0, - "y": 0, - "w": 76, - "h": 76 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 76, - "h": 76 - }, - "frame": { - "x": 0, - "y": 0, - "w": 76, - "h": 76 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 76, - "h": 76 - }, - "frame": { - "x": 0, - "y": 76, - "w": 76, - "h": 76 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 76, - "h": 76 - }, - "frame": { - "x": 0, - "y": 76, - "w": 76, - "h": 76 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 76, - "h": 76 - }, - "frame": { - "x": 0, - "y": 76, - "w": 76, - "h": 76 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 76, - "h": 76 - }, - "frame": { - "x": 0, - "y": 76, - "w": 76, - "h": 76 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 76, - "h": 75 - }, - "frame": { - "x": 76, - "y": 0, - "w": 76, - "h": 75 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 76, - "h": 75 - }, - "frame": { - "x": 76, - "y": 0, - "w": 76, - "h": 75 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 76, - "h": 75 - }, - "frame": { - "x": 76, - "y": 0, - "w": 76, - "h": 75 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 76, - "h": 75 - }, - "frame": { - "x": 76, - "y": 0, - "w": 76, - "h": 75 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 75, - "h": 75 - }, - "frame": { - "x": 0, - "y": 152, - "w": 75, - "h": 75 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 75, - "h": 75 - }, - "frame": { - "x": 0, - "y": 152, - "w": 75, - "h": 75 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 75, - "h": 75 - }, - "frame": { - "x": 0, - "y": 152, - "w": 75, - "h": 75 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 75, - "h": 75 - }, - "frame": { - "x": 0, - "y": 152, - "w": 75, - "h": 75 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 76, - "h": 74 - }, - "frame": { - "x": 76, - "y": 75, - "w": 76, - "h": 74 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 75, - "h": 75 - }, - "frame": { - "x": 152, - "y": 0, - "w": 75, - "h": 75 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 76, - "h": 74 - }, - "frame": { - "x": 227, - "y": 0, - "w": 76, - "h": 74 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 74, - "h": 75 - }, - "frame": { - "x": 0, - "y": 227, - "w": 74, - "h": 75 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 74, - "h": 75 - }, - "frame": { - "x": 0, - "y": 227, - "w": 74, - "h": 75 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 74, - "h": 75 - }, - "frame": { - "x": 0, - "y": 227, - "w": 74, - "h": 75 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 74, - "h": 75 - }, - "frame": { - "x": 0, - "y": 227, - "w": 74, - "h": 75 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 69, - "h": 76 - }, - "frame": { - "x": 0, - "y": 302, - "w": 69, - "h": 76 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 69, - "h": 76 - }, - "frame": { - "x": 0, - "y": 302, - "w": 69, - "h": 76 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 74, - "h": 74 - }, - "frame": { - "x": 152, - "y": 75, - "w": 74, - "h": 74 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 74, - "h": 74 - }, - "frame": { - "x": 152, - "y": 75, - "w": 74, - "h": 74 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 74, - "h": 74 - }, - "frame": { - "x": 152, - "y": 75, - "w": 74, - "h": 74 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 74, - "h": 74 - }, - "frame": { - "x": 152, - "y": 75, - "w": 74, - "h": 74 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 74, - "h": 74 - }, - "frame": { - "x": 303, - "y": 0, - "w": 74, - "h": 74 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 74, - "h": 74 - }, - "frame": { - "x": 303, - "y": 0, - "w": 74, - "h": 74 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 72, - "h": 75 - }, - "frame": { - "x": 69, - "y": 302, - "w": 72, - "h": 75 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 72, - "h": 75 - }, - "frame": { - "x": 69, - "y": 302, - "w": 72, - "h": 75 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 72, - "h": 75 - }, - "frame": { - "x": 69, - "y": 302, - "w": 72, - "h": 75 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 72, - "h": 75 - }, - "frame": { - "x": 69, - "y": 302, - "w": 72, - "h": 75 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 71, - "h": 75 - }, - "frame": { - "x": 74, - "y": 227, - "w": 71, - "h": 75 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 71, - "h": 75 - }, - "frame": { - "x": 74, - "y": 227, - "w": 71, - "h": 75 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 71, - "h": 75 - }, - "frame": { - "x": 74, - "y": 227, - "w": 71, - "h": 75 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 71, - "h": 75 - }, - "frame": { - "x": 74, - "y": 227, - "w": 71, - "h": 75 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 73, - "h": 75 - }, - "frame": { - "x": 75, - "y": 152, - "w": 73, - "h": 75 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 73, - "h": 75 - }, - "frame": { - "x": 75, - "y": 152, - "w": 73, - "h": 75 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 73, - "h": 75 - }, - "frame": { - "x": 75, - "y": 152, - "w": 73, - "h": 75 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 73, - "h": 75 - }, - "frame": { - "x": 75, - "y": 152, - "w": 73, - "h": 75 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 74, - "h": 75 - }, - "frame": { - "x": 148, - "y": 149, - "w": 74, - "h": 75 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 74, - "h": 75 - }, - "frame": { - "x": 148, - "y": 149, - "w": 74, - "h": 75 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 67, - "h": 77 - }, - "frame": { - "x": 222, - "y": 149, - "w": 67, - "h": 77 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 72, - "h": 75 - }, - "frame": { - "x": 227, - "y": 74, - "w": 72, - "h": 75 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 67, - "h": 77 - }, - "frame": { - "x": 299, - "y": 74, - "w": 67, - "h": 77 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 65, - "h": 78 - }, - "frame": { - "x": 289, - "y": 151, - "w": 65, - "h": 78 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 65, - "h": 78 - }, - "frame": { - "x": 289, - "y": 151, - "w": 65, - "h": 78 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 63, - "h": 79 - }, - "frame": { - "x": 145, - "y": 227, - "w": 63, - "h": 79 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 63, - "h": 79 - }, - "frame": { - "x": 145, - "y": 227, - "w": 63, - "h": 79 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 61, - "h": 79 - }, - "frame": { - "x": 208, - "y": 226, - "w": 61, - "h": 79 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 61, - "h": 79 - }, - "frame": { - "x": 208, - "y": 226, - "w": 61, - "h": 79 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 79 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 60, - "h": 79 - }, - "frame": { - "x": 269, - "y": 229, - "w": 60, - "h": 79 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:f5b6396fc735fbaf3881fa6c1e4cdad7:20237f200f066bd1e2f7b8926f0361f1:f4fdd87d2fc1483d8e0a185c2654e3d9$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 384, "y": 77, "w": 92, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 92, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 476, "y": 77, "w": 92, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 92, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 661, "y": 232, "w": 91, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 91, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 281, "y": 312, "w": 91, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 91, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 556, "y": 462, "w": 91, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 5, "w": 91, "h": 77 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 181, "y": 462, "w": 90, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 90, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 88, "y": 464, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 540, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 90, "y": 540, "w": 89, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 7, "w": 89, "h": 75 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 179, "y": 540, "w": 89, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 7, "w": 89, "h": 75 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 647, "y": 468, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 271, "y": 470, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 536, "y": 539, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 90, "y": 386, "w": 91, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 91, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 366, "y": 234, "w": 92, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 92, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 275, "y": 233, "w": 91, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 91, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 384, "y": 77, "w": 92, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 92, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 476, "y": 77, "w": 92, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 92, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 661, "y": 232, "w": 91, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 91, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 281, "y": 312, "w": 91, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 91, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 556, "y": 462, "w": 91, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 5, "w": 91, "h": 77 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 181, "y": 462, "w": 90, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 90, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 88, "y": 464, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 0, "y": 540, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 90, "y": 540, "w": 89, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 7, "w": 89, "h": 75 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 179, "y": 540, "w": 89, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 7, "w": 89, "h": 75 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 647, "y": 468, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 271, "y": 470, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 536, "y": 539, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 90, "y": 386, "w": 91, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 91, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 366, "y": 234, "w": 92, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 92, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 275, "y": 233, "w": 91, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 91, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 384, "y": 77, "w": 92, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 92, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 476, "y": 77, "w": 92, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 92, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 661, "y": 232, "w": 91, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 91, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 281, "y": 312, "w": 91, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 91, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 556, "y": 462, "w": 91, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 5, "w": 91, "h": 77 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 181, "y": 462, "w": 90, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 90, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 88, "y": 464, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 0, "y": 540, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 90, "y": 540, "w": 89, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 7, "w": 89, "h": 75 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 179, "y": 540, "w": 89, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 7, "w": 89, "h": 75 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 647, "y": 468, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 271, "y": 470, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 536, "y": 539, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 90, "y": 386, "w": 91, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 91, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 366, "y": 234, "w": 92, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 92, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 275, "y": 233, "w": 91, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 91, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 384, "y": 77, "w": 92, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 92, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 476, "y": 77, "w": 92, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 92, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 661, "y": 232, "w": 91, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 91, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 281, "y": 312, "w": 91, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 91, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 556, "y": 462, "w": 91, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 5, "w": 91, "h": 77 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 181, "y": 462, "w": 90, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 90, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 88, "y": 464, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 540, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 90, "y": 540, "w": 89, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 7, "w": 89, "h": 75 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 179, "y": 540, "w": 89, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 7, "w": 89, "h": 75 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 647, "y": 468, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 271, "y": 470, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 536, "y": 539, "w": 90, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 90, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 90, "y": 386, "w": 91, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 91, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 366, "y": 234, "w": 92, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 92, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 275, "y": 233, "w": 91, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 91, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 0, "y": 78, "w": 92, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 92, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 184, "y": 231, "w": 91, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 91, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 94, "y": 157, "w": 90, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 90, "h": 80 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 0, "y": 391, "w": 88, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 88, "h": 80 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 275, "y": 390, "w": 88, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 88, "h": 80 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 363, "y": 463, "w": 86, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 1, "w": 86, "h": 81 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 649, "y": 386, "w": 86, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 86, "h": 82 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 449, "y": 463, "w": 87, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 87, "h": 80 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 0, "y": 312, "w": 90, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 90, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 372, "y": 386, "w": 92, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 5, "w": 92, "h": 77 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 566, "y": 233, "w": 92, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 92, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 566, "y": 233, "w": 92, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 92, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 92, "y": 78, "w": 92, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 92, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 473, "y": 156, "w": 93, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 93, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 556, "y": 386, "w": 93, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 93, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 181, "y": 387, "w": 94, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 94, "h": 75 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 648, "y": 311, "w": 95, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 95, "h": 75 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 186, "y": 312, "w": 95, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 95, "h": 75 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 661, "y": 157, "w": 96, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 96, "h": 75 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 458, "y": 311, "w": 95, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 95, "h": 75 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 669, "y": 0, "w": 93, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 93, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 464, "y": 386, "w": 92, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 5, "w": 92, "h": 77 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 0, "y": 234, "w": 92, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 92, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 0, "y": 234, "w": 92, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 92, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 384, "y": 77, "w": 92, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 92, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 568, "y": 79, "w": 93, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 93, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 661, "y": 79, "w": 93, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 93, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 289, "y": 0, "w": 95, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 95, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 0, "y": 0, "w": 96, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 96, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 96, "y": 0, "w": 96, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 96, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 192, "y": 0, "w": 97, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 97, "h": 77 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 480, "y": 0, "w": 96, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 96, "h": 77 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 384, "y": 0, "w": 96, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 96, "h": 77 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 192, "y": 77, "w": 96, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 96, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 566, "y": 157, "w": 95, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 95, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 553, "y": 311, "w": 95, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 95, "h": 75 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 277, "y": 157, "w": 95, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 95, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 92, "y": 310, "w": 94, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 94, "h": 76 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 0, "y": 157, "w": 94, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 94, "h": 77 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 458, "y": 234, "w": 93, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 93, "h": 77 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 184, "y": 153, "w": 93, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 93, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 380, "y": 156, "w": 93, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 93, "h": 78 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0107.png", + "frame": { "x": 576, "y": 0, "w": 93, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 93, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + }, + { + "filename": "0108.png", + "frame": { "x": 288, "y": 78, "w": 92, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 92, "h": 79 }, + "sourceSize": { "w": 100, "h": 82 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "697.png", + "format": "I8", + "size": { "w": 762, "h": 616 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/697.png b/public/images/pokemon/exp/shiny/697.png index b89902a748f..7f4a0c09327 100644 Binary files a/public/images/pokemon/exp/shiny/697.png and b/public/images/pokemon/exp/shiny/697.png differ diff --git a/public/images/pokemon/exp/shiny/698.json b/public/images/pokemon/exp/shiny/698.json deleted file mode 100644 index de4bc49fb04..00000000000 --- a/public/images/pokemon/exp/shiny/698.json +++ /dev/null @@ -1,3296 +0,0 @@ -{ - "textures": [ - { - "image": "698.png", - "format": "RGBA8888", - "size": { - "w": 175, - "h": 175 - }, - "scale": 1, - "frames": [ - { - "filename": "0125.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0126.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0151.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0152.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0127.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 0, - "y": 60, - "w": 32, - "h": 60 - } - }, - { - "filename": "0128.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 0, - "y": 60, - "w": 32, - "h": 60 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 55 - }, - "frame": { - "x": 0, - "y": 120, - "w": 38, - "h": 55 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 55 - }, - "frame": { - "x": 0, - "y": 120, - "w": 38, - "h": 55 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 55 - }, - "frame": { - "x": 0, - "y": 120, - "w": 38, - "h": 55 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 55 - }, - "frame": { - "x": 0, - "y": 120, - "w": 38, - "h": 55 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 55 - }, - "frame": { - "x": 0, - "y": 120, - "w": 38, - "h": 55 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 55 - }, - "frame": { - "x": 0, - "y": 120, - "w": 38, - "h": 55 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 55 - }, - "frame": { - "x": 0, - "y": 120, - "w": 38, - "h": 55 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 55 - }, - "frame": { - "x": 0, - "y": 120, - "w": 38, - "h": 55 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 55 - }, - "frame": { - "x": 0, - "y": 120, - "w": 38, - "h": 55 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 55 - }, - "frame": { - "x": 0, - "y": 120, - "w": 38, - "h": 55 - } - }, - { - "filename": "0112.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 55 - }, - "frame": { - "x": 0, - "y": 120, - "w": 38, - "h": 55 - } - }, - { - "filename": "0113.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 55 - }, - "frame": { - "x": 0, - "y": 120, - "w": 38, - "h": 55 - } - }, - { - "filename": "0129.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0130.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0135.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0136.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0141.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0142.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0147.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0148.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0131.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 32, - "y": 60, - "w": 32, - "h": 60 - } - }, - { - "filename": "0132.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 32, - "y": 60, - "w": 32, - "h": 60 - } - }, - { - "filename": "0137.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 32, - "y": 60, - "w": 32, - "h": 60 - } - }, - { - "filename": "0138.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 32, - "y": 60, - "w": 32, - "h": 60 - } - }, - { - "filename": "0143.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 32, - "y": 60, - "w": 32, - "h": 60 - } - }, - { - "filename": "0144.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 32, - "y": 60, - "w": 32, - "h": 60 - } - }, - { - "filename": "0149.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 32, - "y": 60, - "w": 32, - "h": 60 - } - }, - { - "filename": "0150.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 32, - "y": 60, - "w": 32, - "h": 60 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 29, - "h": 55 - }, - "frame": { - "x": 38, - "y": 120, - "w": 29, - "h": 55 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 29, - "h": 55 - }, - "frame": { - "x": 38, - "y": 120, - "w": 29, - "h": 55 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 29, - "h": 55 - }, - "frame": { - "x": 38, - "y": 120, - "w": 29, - "h": 55 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 29, - "h": 55 - }, - "frame": { - "x": 38, - "y": 120, - "w": 29, - "h": 55 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 29, - "h": 55 - }, - "frame": { - "x": 38, - "y": 120, - "w": 29, - "h": 55 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 29, - "h": 55 - }, - "frame": { - "x": 38, - "y": 120, - "w": 29, - "h": 55 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 29, - "h": 55 - }, - "frame": { - "x": 38, - "y": 120, - "w": 29, - "h": 55 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 29, - "h": 55 - }, - "frame": { - "x": 38, - "y": 120, - "w": 29, - "h": 55 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 29, - "h": 55 - }, - "frame": { - "x": 38, - "y": 120, - "w": 29, - "h": 55 - } - }, - { - "filename": "0133.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 64, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0134.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 64, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0139.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 64, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0140.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 64, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0145.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 64, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0146.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 32, - "h": 60 - }, - "frame": { - "x": 64, - "y": 0, - "w": 32, - "h": 60 - } - }, - { - "filename": "0123.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 32, - "h": 59 - }, - "frame": { - "x": 64, - "y": 60, - "w": 32, - "h": 59 - } - }, - { - "filename": "0124.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 32, - "h": 59 - }, - "frame": { - "x": 64, - "y": 60, - "w": 32, - "h": 59 - } - }, - { - "filename": "0153.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 32, - "h": 59 - }, - "frame": { - "x": 64, - "y": 60, - "w": 32, - "h": 59 - } - }, - { - "filename": "0154.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 32, - "h": 59 - }, - "frame": { - "x": 64, - "y": 60, - "w": 32, - "h": 59 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 37, - "h": 56 - }, - "frame": { - "x": 67, - "y": 119, - "w": 37, - "h": 56 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 37, - "h": 56 - }, - "frame": { - "x": 67, - "y": 119, - "w": 37, - "h": 56 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 37, - "h": 56 - }, - "frame": { - "x": 67, - "y": 119, - "w": 37, - "h": 56 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 37, - "h": 56 - }, - "frame": { - "x": 67, - "y": 119, - "w": 37, - "h": 56 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 37, - "h": 56 - }, - "frame": { - "x": 67, - "y": 119, - "w": 37, - "h": 56 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 37, - "h": 56 - }, - "frame": { - "x": 67, - "y": 119, - "w": 37, - "h": 56 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 37, - "h": 56 - }, - "frame": { - "x": 67, - "y": 119, - "w": 37, - "h": 56 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 37, - "h": 56 - }, - "frame": { - "x": 67, - "y": 119, - "w": 37, - "h": 56 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 37, - "h": 56 - }, - "frame": { - "x": 67, - "y": 119, - "w": 37, - "h": 56 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 37, - "h": 56 - }, - "frame": { - "x": 67, - "y": 119, - "w": 37, - "h": 56 - } - }, - { - "filename": "0114.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 37, - "h": 56 - }, - "frame": { - "x": 67, - "y": 119, - "w": 37, - "h": 56 - } - }, - { - "filename": "0115.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 37, - "h": 56 - }, - "frame": { - "x": 67, - "y": 119, - "w": 37, - "h": 56 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 38, - "h": 54 - }, - "frame": { - "x": 104, - "y": 0, - "w": 38, - "h": 54 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 38, - "h": 54 - }, - "frame": { - "x": 104, - "y": 0, - "w": 38, - "h": 54 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 38, - "h": 54 - }, - "frame": { - "x": 104, - "y": 0, - "w": 38, - "h": 54 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 38, - "h": 54 - }, - "frame": { - "x": 104, - "y": 0, - "w": 38, - "h": 54 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 38, - "h": 54 - }, - "frame": { - "x": 104, - "y": 0, - "w": 38, - "h": 54 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 38, - "h": 54 - }, - "frame": { - "x": 104, - "y": 0, - "w": 38, - "h": 54 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 38, - "h": 54 - }, - "frame": { - "x": 104, - "y": 0, - "w": 38, - "h": 54 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 38, - "h": 54 - }, - "frame": { - "x": 104, - "y": 0, - "w": 38, - "h": 54 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 38, - "h": 54 - }, - "frame": { - "x": 104, - "y": 0, - "w": 38, - "h": 54 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 33, - "h": 58 - }, - "frame": { - "x": 142, - "y": 0, - "w": 33, - "h": 58 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 33, - "h": 58 - }, - "frame": { - "x": 142, - "y": 0, - "w": 33, - "h": 58 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 33, - "h": 58 - }, - "frame": { - "x": 142, - "y": 0, - "w": 33, - "h": 58 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 33, - "h": 58 - }, - "frame": { - "x": 142, - "y": 0, - "w": 33, - "h": 58 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 33, - "h": 58 - }, - "frame": { - "x": 142, - "y": 0, - "w": 33, - "h": 58 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 33, - "h": 58 - }, - "frame": { - "x": 142, - "y": 0, - "w": 33, - "h": 58 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 33, - "h": 58 - }, - "frame": { - "x": 142, - "y": 0, - "w": 33, - "h": 58 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 33, - "h": 58 - }, - "frame": { - "x": 142, - "y": 0, - "w": 33, - "h": 58 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 33, - "h": 58 - }, - "frame": { - "x": 142, - "y": 0, - "w": 33, - "h": 58 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 33, - "h": 58 - }, - "frame": { - "x": 142, - "y": 0, - "w": 33, - "h": 58 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 33, - "h": 58 - }, - "frame": { - "x": 142, - "y": 0, - "w": 33, - "h": 58 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 33, - "h": 58 - }, - "frame": { - "x": 142, - "y": 0, - "w": 33, - "h": 58 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 36, - "h": 57 - }, - "frame": { - "x": 104, - "y": 54, - "w": 36, - "h": 57 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 36, - "h": 57 - }, - "frame": { - "x": 104, - "y": 54, - "w": 36, - "h": 57 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 36, - "h": 57 - }, - "frame": { - "x": 104, - "y": 54, - "w": 36, - "h": 57 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 36, - "h": 57 - }, - "frame": { - "x": 104, - "y": 54, - "w": 36, - "h": 57 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 36, - "h": 57 - }, - "frame": { - "x": 104, - "y": 54, - "w": 36, - "h": 57 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 36, - "h": 57 - }, - "frame": { - "x": 104, - "y": 54, - "w": 36, - "h": 57 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 36, - "h": 57 - }, - "frame": { - "x": 104, - "y": 54, - "w": 36, - "h": 57 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 36, - "h": 57 - }, - "frame": { - "x": 104, - "y": 54, - "w": 36, - "h": 57 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 36, - "h": 57 - }, - "frame": { - "x": 104, - "y": 54, - "w": 36, - "h": 57 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 36, - "h": 57 - }, - "frame": { - "x": 104, - "y": 54, - "w": 36, - "h": 57 - } - }, - { - "filename": "0116.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 36, - "h": 57 - }, - "frame": { - "x": 104, - "y": 54, - "w": 36, - "h": 57 - } - }, - { - "filename": "0117.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 36, - "h": 57 - }, - "frame": { - "x": 104, - "y": 54, - "w": 36, - "h": 57 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0118.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0119.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0120.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0121.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0122.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0155.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0156.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 34, - "h": 58 - }, - "frame": { - "x": 140, - "y": 58, - "w": 34, - "h": 58 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 31, - "h": 57 - }, - "frame": { - "x": 104, - "y": 116, - "w": 31, - "h": 57 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 31, - "h": 57 - }, - "frame": { - "x": 104, - "y": 116, - "w": 31, - "h": 57 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 31, - "h": 57 - }, - "frame": { - "x": 104, - "y": 116, - "w": 31, - "h": 57 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 31, - "h": 57 - }, - "frame": { - "x": 104, - "y": 116, - "w": 31, - "h": 57 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 31, - "h": 57 - }, - "frame": { - "x": 104, - "y": 116, - "w": 31, - "h": 57 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 31, - "h": 57 - }, - "frame": { - "x": 104, - "y": 116, - "w": 31, - "h": 57 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 31, - "h": 57 - }, - "frame": { - "x": 104, - "y": 116, - "w": 31, - "h": 57 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 31, - "h": 57 - }, - "frame": { - "x": 104, - "y": 116, - "w": 31, - "h": 57 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 31, - "h": 57 - }, - "frame": { - "x": 104, - "y": 116, - "w": 31, - "h": 57 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 31, - "h": 57 - }, - "frame": { - "x": 104, - "y": 116, - "w": 31, - "h": 57 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 31, - "h": 57 - }, - "frame": { - "x": 104, - "y": 116, - "w": 31, - "h": 57 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 31, - "h": 57 - }, - "frame": { - "x": 104, - "y": 116, - "w": 31, - "h": 57 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 30, - "h": 56 - }, - "frame": { - "x": 135, - "y": 116, - "w": 30, - "h": 56 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 30, - "h": 56 - }, - "frame": { - "x": 135, - "y": 116, - "w": 30, - "h": 56 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 30, - "h": 56 - }, - "frame": { - "x": 135, - "y": 116, - "w": 30, - "h": 56 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 30, - "h": 56 - }, - "frame": { - "x": 135, - "y": 116, - "w": 30, - "h": 56 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 30, - "h": 56 - }, - "frame": { - "x": 135, - "y": 116, - "w": 30, - "h": 56 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 30, - "h": 56 - }, - "frame": { - "x": 135, - "y": 116, - "w": 30, - "h": 56 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 30, - "h": 56 - }, - "frame": { - "x": 135, - "y": 116, - "w": 30, - "h": 56 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 30, - "h": 56 - }, - "frame": { - "x": 135, - "y": 116, - "w": 30, - "h": 56 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 30, - "h": 56 - }, - "frame": { - "x": 135, - "y": 116, - "w": 30, - "h": 56 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 30, - "h": 56 - }, - "frame": { - "x": 135, - "y": 116, - "w": 30, - "h": 56 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 30, - "h": 56 - }, - "frame": { - "x": 135, - "y": 116, - "w": 30, - "h": 56 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 30, - "h": 56 - }, - "frame": { - "x": 135, - "y": 116, - "w": 30, - "h": 56 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:0ae9a601cdaeb2fdd017428d743bace6:a3c21f877838702a0481b1e5447757cd:198087d69fed44d4a642fa3ba5c077d6$" - } -} diff --git a/public/images/pokemon/exp/shiny/698.png b/public/images/pokemon/exp/shiny/698.png deleted file mode 100644 index 84d8ba3dac5..00000000000 Binary files a/public/images/pokemon/exp/shiny/698.png and /dev/null differ diff --git a/public/images/pokemon/exp/shiny/700.json b/public/images/pokemon/exp/shiny/700.json index 4b7158b6eb9..fd6ef9b1bed 100644 --- a/public/images/pokemon/exp/shiny/700.json +++ b/public/images/pokemon/exp/shiny/700.json @@ -1,1070 +1,523 @@ -{ - "textures": [ - { - "image": "700.png", - "format": "RGBA8888", - "size": { - "w": 233, - "h": 233 - }, - "scale": 1, - "frames": [ - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 53, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 53, - "h": 58 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 53, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 53, - "h": 58 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 53, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 53, - "h": 58 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 53, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 53, - "h": 58 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 52, - "h": 58 - }, - "frame": { - "x": 0, - "y": 58, - "w": 52, - "h": 58 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 52, - "h": 58 - }, - "frame": { - "x": 0, - "y": 58, - "w": 52, - "h": 58 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 52, - "h": 58 - }, - "frame": { - "x": 0, - "y": 58, - "w": 52, - "h": 58 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 52, - "h": 58 - }, - "frame": { - "x": 0, - "y": 58, - "w": 52, - "h": 58 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 52, - "h": 58 - }, - "frame": { - "x": 53, - "y": 0, - "w": 52, - "h": 58 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 52, - "h": 58 - }, - "frame": { - "x": 53, - "y": 0, - "w": 52, - "h": 58 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 52, - "h": 58 - }, - "frame": { - "x": 53, - "y": 0, - "w": 52, - "h": 58 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 52, - "h": 58 - }, - "frame": { - "x": 53, - "y": 0, - "w": 52, - "h": 58 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 51, - "h": 59 - }, - "frame": { - "x": 0, - "y": 116, - "w": 51, - "h": 59 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 51, - "h": 59 - }, - "frame": { - "x": 0, - "y": 116, - "w": 51, - "h": 59 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 51, - "h": 59 - }, - "frame": { - "x": 0, - "y": 116, - "w": 51, - "h": 59 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 51, - "h": 59 - }, - "frame": { - "x": 0, - "y": 116, - "w": 51, - "h": 59 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 45, - "h": 58 - }, - "frame": { - "x": 0, - "y": 175, - "w": 45, - "h": 58 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 45, - "h": 58 - }, - "frame": { - "x": 0, - "y": 175, - "w": 45, - "h": 58 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 52, - "y": 58, - "w": 50, - "h": 59 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 52, - "y": 58, - "w": 50, - "h": 59 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 52, - "y": 58, - "w": 50, - "h": 59 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 52, - "y": 58, - "w": 50, - "h": 59 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 52, - "y": 58, - "w": 50, - "h": 59 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 52, - "y": 58, - "w": 50, - "h": 59 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 105, - "y": 0, - "w": 50, - "h": 59 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 105, - "y": 0, - "w": 50, - "h": 59 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 105, - "y": 0, - "w": 50, - "h": 59 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 105, - "y": 0, - "w": 50, - "h": 59 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 155, - "y": 0, - "w": 50, - "h": 59 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 155, - "y": 0, - "w": 50, - "h": 59 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 155, - "y": 0, - "w": 50, - "h": 59 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 155, - "y": 0, - "w": 50, - "h": 59 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 51, - "y": 117, - "w": 50, - "h": 59 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 51, - "y": 117, - "w": 50, - "h": 59 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 51, - "y": 117, - "w": 50, - "h": 59 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 51, - "y": 117, - "w": 50, - "h": 59 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 42, - "h": 57 - }, - "frame": { - "x": 45, - "y": 176, - "w": 42, - "h": 57 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 102, - "y": 59, - "w": 50, - "h": 59 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 102, - "y": 59, - "w": 50, - "h": 59 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 102, - "y": 59, - "w": 50, - "h": 59 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 102, - "y": 59, - "w": 50, - "h": 59 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 152, - "y": 59, - "w": 50, - "h": 59 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 152, - "y": 59, - "w": 50, - "h": 59 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 152, - "y": 59, - "w": 50, - "h": 59 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 152, - "y": 59, - "w": 50, - "h": 59 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 50, - "h": 59 - }, - "frame": { - "x": 101, - "y": 118, - "w": 50, - "h": 59 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 49, - "h": 59 - }, - "frame": { - "x": 151, - "y": 118, - "w": 49, - "h": 59 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 49, - "h": 59 - }, - "frame": { - "x": 151, - "y": 118, - "w": 49, - "h": 59 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 49, - "h": 59 - }, - "frame": { - "x": 151, - "y": 118, - "w": 49, - "h": 59 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 53, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 49, - "h": 59 - }, - "frame": { - "x": 151, - "y": 118, - "w": 49, - "h": 59 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:b88614ce72ee950ea29dcf939b8dfd56:5daab4ddd86f67a34aaa4b7377e3b534:2e4bf5ef1f19e475073f7da10c60b540$" - } +{ "frames": { + "0001.png": { + "frame": { "x": 180, "y": 183, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 43, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0002.png": { + "frame": { "x": 136, "y": 238, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 43, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0003.png": { + "frame": { "x": 44, "y": 181, "w": 44, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 44, "h": 57 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0004.png": { + "frame": { "x": 88, "y": 239, "w": 44, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 44, "h": 56 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0005.png": { + "frame": { "x": 180, "y": 242, "w": 43, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 43, "h": 56 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0006.png": { + "frame": { "x": 93, "y": 119, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 45, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0007.png": { + "frame": { "x": 99, "y": 60, "w": 46, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 46, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0008.png": { + "frame": { "x": 139, "y": 119, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 45, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0009.png": { + "frame": { "x": 180, "y": 183, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 43, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0010.png": { + "frame": { "x": 136, "y": 238, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 43, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0011.png": { + "frame": { "x": 44, "y": 181, "w": 44, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 44, "h": 57 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0012.png": { + "frame": { "x": 88, "y": 239, "w": 44, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 44, "h": 56 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0013.png": { + "frame": { "x": 180, "y": 242, "w": 43, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 43, "h": 56 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0014.png": { + "frame": { "x": 0, "y": 120, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 45, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0015.png": { + "frame": { "x": 146, "y": 60, "w": 46, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 46, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0016.png": { + "frame": { "x": 46, "y": 122, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 45, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0017.png": { + "frame": { "x": 180, "y": 183, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 43, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0018.png": { + "frame": { "x": 136, "y": 238, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 43, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0019.png": { + "frame": { "x": 44, "y": 181, "w": 44, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 44, "h": 57 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0020.png": { + "frame": { "x": 88, "y": 239, "w": 44, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 44, "h": 56 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0021.png": { + "frame": { "x": 180, "y": 242, "w": 43, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 43, "h": 56 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0022.png": { + "frame": { "x": 93, "y": 119, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 45, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0023.png": { + "frame": { "x": 99, "y": 60, "w": 46, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 46, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0024.png": { + "frame": { "x": 139, "y": 119, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 45, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0025.png": { + "frame": { "x": 180, "y": 183, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 43, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0026.png": { + "frame": { "x": 136, "y": 238, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 43, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0027.png": { + "frame": { "x": 44, "y": 181, "w": 44, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 44, "h": 57 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0028.png": { + "frame": { "x": 88, "y": 239, "w": 44, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 44, "h": 56 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0029.png": { + "frame": { "x": 180, "y": 242, "w": 43, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 43, "h": 56 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0030.png": { + "frame": { "x": 0, "y": 120, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 45, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0031.png": { + "frame": { "x": 146, "y": 60, "w": 46, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 46, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0032.png": { + "frame": { "x": 46, "y": 122, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 45, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0033.png": { + "frame": { "x": 180, "y": 183, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 43, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0034.png": { + "frame": { "x": 136, "y": 238, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 43, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0035.png": { + "frame": { "x": 44, "y": 181, "w": 44, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 44, "h": 57 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0036.png": { + "frame": { "x": 88, "y": 239, "w": 44, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 44, "h": 56 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0037.png": { + "frame": { "x": 180, "y": 242, "w": 43, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 43, "h": 56 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0038.png": { + "frame": { "x": 93, "y": 119, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 45, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0039.png": { + "frame": { "x": 99, "y": 60, "w": 46, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 46, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0040.png": { + "frame": { "x": 139, "y": 119, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 45, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0041.png": { + "frame": { "x": 180, "y": 183, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 43, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0042.png": { + "frame": { "x": 136, "y": 238, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 43, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0043.png": { + "frame": { "x": 44, "y": 181, "w": 44, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 44, "h": 57 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0044.png": { + "frame": { "x": 88, "y": 239, "w": 44, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 44, "h": 56 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0045.png": { + "frame": { "x": 180, "y": 242, "w": 43, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 43, "h": 56 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0046.png": { + "frame": { "x": 0, "y": 120, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 45, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0047.png": { + "frame": { "x": 146, "y": 60, "w": 46, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 46, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0048.png": { + "frame": { "x": 46, "y": 122, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 45, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0049.png": { + "frame": { "x": 0, "y": 239, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 43, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0050.png": { + "frame": { "x": 193, "y": 60, "w": 43, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 43, "h": 62 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0051.png": { + "frame": { "x": 99, "y": 0, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 47, "h": 59 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0052.png": { + "frame": { "x": 147, "y": 0, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 47, "h": 59 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0053.png": { + "frame": { "x": 0, "y": 0, "w": 51, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 51, "h": 59 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0054.png": { + "frame": { "x": 0, "y": 60, "w": 46, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 46, "h": 59 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0055.png": { + "frame": { "x": 92, "y": 178, "w": 43, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 43, "h": 60 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0056.png": { + "frame": { "x": 195, "y": 0, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 47, "h": 59 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0057.png": { + "frame": { "x": 52, "y": 0, "w": 46, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 46, "h": 61 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0058.png": { + "frame": { "x": 136, "y": 178, "w": 43, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 43, "h": 59 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0059.png": { + "frame": { "x": 195, "y": 0, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 47, "h": 59 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0060.png": { + "frame": { "x": 52, "y": 0, "w": 46, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 46, "h": 61 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0061.png": { + "frame": { "x": 0, "y": 179, "w": 43, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 43, "h": 59 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0062.png": { + "frame": { "x": 185, "y": 123, "w": 44, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 44, "h": 59 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0063.png": { + "frame": { "x": 47, "y": 62, "w": 45, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 45, "h": 59 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + }, + "0064.png": { + "frame": { "x": 44, "y": 239, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 43, "h": 58 }, + "sourceSize": { "w": 51, "h": 62 }, + "duration": 100 + } + }, + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "700.png", + "format": "I8", + "size": { "w": 242, "h": 298 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/700.png b/public/images/pokemon/exp/shiny/700.png index 5c809e628f5..f7addc720bf 100644 Binary files a/public/images/pokemon/exp/shiny/700.png and b/public/images/pokemon/exp/shiny/700.png differ diff --git a/public/images/pokemon/exp/shiny/702.json b/public/images/pokemon/exp/shiny/702.json index fc28cb19512..0ab95b58c7a 100644 --- a/public/images/pokemon/exp/shiny/702.json +++ b/public/images/pokemon/exp/shiny/702.json @@ -1,671 +1,443 @@ -{ - "textures": [ - { - "image": "702.png", - "format": "RGBA8888", - "size": { - "w": 138, - "h": 138 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 36 - }, - "frame": { - "x": 0, - "y": 0, - "w": 48, - "h": 36 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 36 - }, - "frame": { - "x": 0, - "y": 0, - "w": 48, - "h": 36 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 36 - }, - "frame": { - "x": 0, - "y": 0, - "w": 48, - "h": 36 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 36 - }, - "frame": { - "x": 0, - "y": 0, - "w": 48, - "h": 36 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 36 - }, - "frame": { - "x": 0, - "y": 0, - "w": 48, - "h": 36 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 36 - }, - "frame": { - "x": 0, - "y": 0, - "w": 48, - "h": 36 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 36 - }, - "frame": { - "x": 48, - "y": 0, - "w": 48, - "h": 36 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 36 - }, - "frame": { - "x": 48, - "y": 0, - "w": 48, - "h": 36 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 36 - }, - "frame": { - "x": 0, - "y": 36, - "w": 47, - "h": 36 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 36 - }, - "frame": { - "x": 0, - "y": 36, - "w": 47, - "h": 36 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 36 - }, - "frame": { - "x": 0, - "y": 36, - "w": 47, - "h": 36 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 36 - }, - "frame": { - "x": 0, - "y": 36, - "w": 47, - "h": 36 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 36 - }, - "frame": { - "x": 0, - "y": 36, - "w": 47, - "h": 36 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 36 - }, - "frame": { - "x": 0, - "y": 36, - "w": 47, - "h": 36 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 45, - "h": 36 - }, - "frame": { - "x": 0, - "y": 72, - "w": 45, - "h": 36 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 45, - "h": 36 - }, - "frame": { - "x": 0, - "y": 72, - "w": 45, - "h": 36 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 35 - }, - "frame": { - "x": 45, - "y": 72, - "w": 48, - "h": 35 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 35 - }, - "frame": { - "x": 45, - "y": 72, - "w": 48, - "h": 35 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 35 - }, - "frame": { - "x": 45, - "y": 72, - "w": 48, - "h": 35 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 35 - }, - "frame": { - "x": 45, - "y": 72, - "w": 48, - "h": 35 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 35 - }, - "frame": { - "x": 45, - "y": 72, - "w": 48, - "h": 35 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 35 - }, - "frame": { - "x": 45, - "y": 72, - "w": 48, - "h": 35 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 44, - "h": 35 - }, - "frame": { - "x": 47, - "y": 36, - "w": 44, - "h": 35 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 44, - "h": 35 - }, - "frame": { - "x": 47, - "y": 36, - "w": 44, - "h": 35 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 44, - "h": 35 - }, - "frame": { - "x": 47, - "y": 36, - "w": 44, - "h": 35 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 47, - "h": 33 - }, - "frame": { - "x": 91, - "y": 36, - "w": 47, - "h": 33 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 47, - "h": 33 - }, - "frame": { - "x": 91, - "y": 36, - "w": 47, - "h": 33 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 47, - "h": 33 - }, - "frame": { - "x": 91, - "y": 36, - "w": 47, - "h": 33 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 44, - "h": 35 - }, - "frame": { - "x": 93, - "y": 69, - "w": 44, - "h": 35 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 44, - "h": 35 - }, - "frame": { - "x": 93, - "y": 69, - "w": 44, - "h": 35 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 36 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 44, - "h": 35 - }, - "frame": { - "x": 93, - "y": 69, - "w": 44, - "h": 35 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:2fc3a964a6785b059da0b8d24f80fbd1:ec3deecdcac6775e64f154a58c36eef3:ba8fdab405d5efab99c4aa1084328e6b$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 144, "y": 0, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 0, "w": 47, "h": 36 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 47, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 37, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 0, "y": 111, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 47, "y": 111, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 47, "y": 37, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 94, "y": 37, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 141, "y": 74, "w": 45, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 45, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 144, "y": 0, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 0, "w": 47, "h": 36 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 47, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 37, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 111, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0013.png", + "frame": { "x": 47, "y": 111, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0014.png", + "frame": { "x": 47, "y": 37, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0015.png", + "frame": { "x": 94, "y": 37, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0016.png", + "frame": { "x": 141, "y": 74, "w": 45, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 45, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0017.png", + "frame": { "x": 144, "y": 0, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 0, "w": 47, "h": 36 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 47, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0019.png", + "frame": { "x": 0, "y": 37, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0020.png", + "frame": { "x": 0, "y": 111, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0021.png", + "frame": { "x": 47, "y": 111, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0022.png", + "frame": { "x": 47, "y": 37, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0023.png", + "frame": { "x": 94, "y": 37, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0024.png", + "frame": { "x": 141, "y": 74, "w": 45, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 45, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0025.png", + "frame": { "x": 144, "y": 0, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 0, "w": 47, "h": 36 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 47, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 37, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0028.png", + "frame": { "x": 0, "y": 111, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0029.png", + "frame": { "x": 47, "y": 111, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0030.png", + "frame": { "x": 47, "y": 37, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0031.png", + "frame": { "x": 94, "y": 37, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0032.png", + "frame": { "x": 141, "y": 74, "w": 45, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 45, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0033.png", + "frame": { "x": 144, "y": 0, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0034.png", + "frame": { "x": 0, "y": 0, "w": 47, "h": 36 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 47, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0035.png", + "frame": { "x": 0, "y": 37, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0036.png", + "frame": { "x": 94, "y": 111, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0037.png", + "frame": { "x": 141, "y": 111, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0038.png", + "frame": { "x": 141, "y": 37, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0039.png", + "frame": { "x": 188, "y": 37, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0040.png", + "frame": { "x": 144, "y": 0, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0041.png", + "frame": { "x": 48, "y": 0, "w": 47, "h": 36 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 47, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0042.png", + "frame": { "x": 0, "y": 74, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0043.png", + "frame": { "x": 188, "y": 111, "w": 46, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 46, "h": 33 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0044.png", + "frame": { "x": 0, "y": 145, "w": 45, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 45, "h": 33 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0045.png", + "frame": { "x": 96, "y": 0, "w": 47, "h": 36 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 47, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0046.png", + "frame": { "x": 47, "y": 74, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0047.png", + "frame": { "x": 94, "y": 74, "w": 46, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 46, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + }, + { + "filename": "0048.png", + "frame": { "x": 187, "y": 74, "w": 45, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 45, "h": 36 }, + "sourceSize": { "w": 47, "h": 36 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "702.png", + "format": "I8", + "size": { "w": 234, "h": 178 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/702.png b/public/images/pokemon/exp/shiny/702.png index b7e117c9473..2f7b735a1dc 100644 Binary files a/public/images/pokemon/exp/shiny/702.png and b/public/images/pokemon/exp/shiny/702.png differ diff --git a/public/images/pokemon/exp/shiny/703.json b/public/images/pokemon/exp/shiny/703.json deleted file mode 100644 index 4762fa91a2c..00000000000 --- a/public/images/pokemon/exp/shiny/703.json +++ /dev/null @@ -1,356 +0,0 @@ -{ - "textures": [ - { - "image": "703.png", - "format": "RGBA8888", - "size": { - "w": 120, - "h": 120 - }, - "scale": 1, - "frames": [ - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 41 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 41 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 37, - "h": 41 - }, - "frame": { - "x": 0, - "y": 41, - "w": 37, - "h": 41 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 37, - "h": 41 - }, - "frame": { - "x": 0, - "y": 41, - "w": 37, - "h": 41 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 37, - "h": 40 - }, - "frame": { - "x": 37, - "y": 0, - "w": 37, - "h": 40 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 37, - "h": 40 - }, - "frame": { - "x": 37, - "y": 0, - "w": 37, - "h": 40 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 37, - "h": 40 - }, - "frame": { - "x": 37, - "y": 0, - "w": 37, - "h": 40 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 37, - "h": 40 - }, - "frame": { - "x": 37, - "y": 0, - "w": 37, - "h": 40 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 37, - "h": 40 - }, - "frame": { - "x": 37, - "y": 0, - "w": 37, - "h": 40 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 37, - "h": 40 - }, - "frame": { - "x": 37, - "y": 0, - "w": 37, - "h": 40 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 37, - "h": 40 - }, - "frame": { - "x": 37, - "y": 0, - "w": 37, - "h": 40 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 37, - "h": 40 - }, - "frame": { - "x": 74, - "y": 0, - "w": 37, - "h": 40 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 51 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 35, - "h": 41 - }, - "frame": { - "x": 37, - "y": 40, - "w": 35, - "h": 41 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 51 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 35, - "h": 41 - }, - "frame": { - "x": 37, - "y": 40, - "w": 35, - "h": 41 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 51 - }, - "spriteSourceSize": { - "x": 1, - "y": 12, - "w": 35, - "h": 39 - }, - "frame": { - "x": 37, - "y": 81, - "w": 35, - "h": 39 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 40 - }, - "frame": { - "x": 72, - "y": 40, - "w": 37, - "h": 40 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 37, - "h": 51 - }, - "spriteSourceSize": { - "x": 1, - "y": 7, - "w": 35, - "h": 40 - }, - "frame": { - "x": 72, - "y": 80, - "w": 35, - "h": 40 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:253ca4296d88ee81990e3297ca0f62aa:8f78420201adcea5fb7920c60446c81d:721af8c322ff60159262e9b3017c784d$" - } -} diff --git a/public/images/pokemon/exp/shiny/703.png b/public/images/pokemon/exp/shiny/703.png deleted file mode 100644 index 4e4064509ae..00000000000 Binary files a/public/images/pokemon/exp/shiny/703.png and /dev/null differ diff --git a/public/images/pokemon/exp/shiny/704.json b/public/images/pokemon/exp/shiny/704.json index d14609ad74c..4241b2d2a8d 100644 --- a/public/images/pokemon/exp/shiny/704.json +++ b/public/images/pokemon/exp/shiny/704.json @@ -1,1784 +1,371 @@ -{ - "textures": [ - { - "image": "704.png", - "format": "RGBA8888", - "size": { - "w": 288, - "h": 288 - }, - "scale": 1, - "frames": [ - { - "filename": "0040.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 0, - "y": 48, - "w": 43, - "h": 48 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 0, - "y": 48, - "w": 43, - "h": 48 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 0, - "y": 96, - "w": 43, - "h": 48 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 0, - "y": 96, - "w": 43, - "h": 48 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 43, - "h": 47 - }, - "frame": { - "x": 0, - "y": 144, - "w": 43, - "h": 47 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 43, - "h": 47 - }, - "frame": { - "x": 0, - "y": 144, - "w": 43, - "h": 47 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 46 - }, - "frame": { - "x": 0, - "y": 191, - "w": 41, - "h": 46 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 41, - "h": 46 - }, - "frame": { - "x": 0, - "y": 191, - "w": 41, - "h": 46 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 39, - "h": 45 - }, - "frame": { - "x": 0, - "y": 237, - "w": 39, - "h": 45 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 39, - "h": 45 - }, - "frame": { - "x": 0, - "y": 237, - "w": 39, - "h": 45 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 41, - "h": 44 - }, - "frame": { - "x": 39, - "y": 237, - "w": 41, - "h": 44 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 41, - "h": 44 - }, - "frame": { - "x": 39, - "y": 237, - "w": 41, - "h": 44 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 41, - "h": 44 - }, - "frame": { - "x": 39, - "y": 237, - "w": 41, - "h": 44 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 41, - "h": 44 - }, - "frame": { - "x": 39, - "y": 237, - "w": 41, - "h": 44 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 41, - "h": 44 - }, - "frame": { - "x": 41, - "y": 191, - "w": 41, - "h": 44 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 41, - "h": 44 - }, - "frame": { - "x": 41, - "y": 191, - "w": 41, - "h": 44 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 41, - "h": 44 - }, - "frame": { - "x": 80, - "y": 235, - "w": 41, - "h": 44 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 42, - "h": 43 - }, - "frame": { - "x": 121, - "y": 0, - "w": 42, - "h": 43 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 42, - "h": 43 - }, - "frame": { - "x": 121, - "y": 0, - "w": 42, - "h": 43 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 39, - "h": 44 - }, - "frame": { - "x": 82, - "y": 0, - "w": 39, - "h": 44 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 39, - "h": 44 - }, - "frame": { - "x": 82, - "y": 0, - "w": 39, - "h": 44 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 39, - "h": 44 - }, - "frame": { - "x": 82, - "y": 0, - "w": 39, - "h": 44 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 39, - "h": 44 - }, - "frame": { - "x": 43, - "y": 0, - "w": 39, - "h": 44 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 42, - "h": 43 - }, - "frame": { - "x": 163, - "y": 0, - "w": 42, - "h": 43 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 42, - "h": 43 - }, - "frame": { - "x": 163, - "y": 0, - "w": 42, - "h": 43 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 42, - "h": 43 - }, - "frame": { - "x": 163, - "y": 0, - "w": 42, - "h": 43 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 42, - "h": 43 - }, - "frame": { - "x": 163, - "y": 0, - "w": 42, - "h": 43 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 42, - "h": 43 - }, - "frame": { - "x": 163, - "y": 0, - "w": 42, - "h": 43 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 42, - "h": 43 - }, - "frame": { - "x": 205, - "y": 0, - "w": 42, - "h": 43 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 41, - "h": 44 - }, - "frame": { - "x": 247, - "y": 0, - "w": 41, - "h": 44 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 42, - "h": 42 - }, - "frame": { - "x": 121, - "y": 43, - "w": 42, - "h": 42 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 42, - "h": 42 - }, - "frame": { - "x": 121, - "y": 43, - "w": 42, - "h": 42 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 42, - "h": 42 - }, - "frame": { - "x": 121, - "y": 43, - "w": 42, - "h": 42 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 42, - "h": 42 - }, - "frame": { - "x": 121, - "y": 43, - "w": 42, - "h": 42 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 42, - "h": 42 - }, - "frame": { - "x": 121, - "y": 43, - "w": 42, - "h": 42 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 42, - "h": 42 - }, - "frame": { - "x": 121, - "y": 43, - "w": 42, - "h": 42 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 42, - "h": 42 - }, - "frame": { - "x": 121, - "y": 43, - "w": 42, - "h": 42 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 39, - "h": 44 - }, - "frame": { - "x": 82, - "y": 44, - "w": 39, - "h": 44 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 39, - "h": 44 - }, - "frame": { - "x": 82, - "y": 44, - "w": 39, - "h": 44 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 39, - "h": 44 - }, - "frame": { - "x": 43, - "y": 44, - "w": 39, - "h": 44 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 39, - "h": 44 - }, - "frame": { - "x": 43, - "y": 44, - "w": 39, - "h": 44 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 42, - "h": 42 - }, - "frame": { - "x": 163, - "y": 43, - "w": 42, - "h": 42 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 42, - "h": 41 - }, - "frame": { - "x": 205, - "y": 43, - "w": 42, - "h": 41 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 42, - "h": 41 - }, - "frame": { - "x": 205, - "y": 43, - "w": 42, - "h": 41 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 42, - "h": 41 - }, - "frame": { - "x": 205, - "y": 43, - "w": 42, - "h": 41 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 42, - "h": 41 - }, - "frame": { - "x": 205, - "y": 43, - "w": 42, - "h": 41 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 42, - "h": 41 - }, - "frame": { - "x": 205, - "y": 43, - "w": 42, - "h": 41 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 42, - "h": 41 - }, - "frame": { - "x": 205, - "y": 43, - "w": 42, - "h": 41 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 42, - "h": 41 - }, - "frame": { - "x": 205, - "y": 43, - "w": 42, - "h": 41 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 42, - "h": 41 - }, - "frame": { - "x": 205, - "y": 43, - "w": 42, - "h": 41 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 38, - "h": 44 - }, - "frame": { - "x": 247, - "y": 44, - "w": 38, - "h": 44 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 42, - "h": 40 - }, - "frame": { - "x": 205, - "y": 84, - "w": 42, - "h": 40 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 42, - "h": 40 - }, - "frame": { - "x": 205, - "y": 84, - "w": 42, - "h": 40 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 42, - "h": 40 - }, - "frame": { - "x": 205, - "y": 84, - "w": 42, - "h": 40 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 38, - "h": 44 - }, - "frame": { - "x": 247, - "y": 88, - "w": 38, - "h": 44 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 38, - "h": 44 - }, - "frame": { - "x": 247, - "y": 88, - "w": 38, - "h": 44 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 38, - "h": 44 - }, - "frame": { - "x": 43, - "y": 132, - "w": 38, - "h": 44 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 38, - "h": 44 - }, - "frame": { - "x": 43, - "y": 88, - "w": 38, - "h": 44 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 38, - "h": 44 - }, - "frame": { - "x": 43, - "y": 88, - "w": 38, - "h": 44 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 37, - "h": 44 - }, - "frame": { - "x": 81, - "y": 132, - "w": 37, - "h": 44 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 37, - "h": 44 - }, - "frame": { - "x": 81, - "y": 132, - "w": 37, - "h": 44 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 37, - "h": 44 - }, - "frame": { - "x": 81, - "y": 132, - "w": 37, - "h": 44 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 37, - "h": 44 - }, - "frame": { - "x": 81, - "y": 88, - "w": 37, - "h": 44 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 36, - "h": 44 - }, - "frame": { - "x": 82, - "y": 176, - "w": 36, - "h": 44 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 36, - "h": 44 - }, - "frame": { - "x": 82, - "y": 176, - "w": 36, - "h": 44 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 42, - "h": 40 - }, - "frame": { - "x": 121, - "y": 85, - "w": 42, - "h": 40 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 36, - "h": 44 - }, - "frame": { - "x": 163, - "y": 85, - "w": 36, - "h": 44 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 36, - "h": 44 - }, - "frame": { - "x": 121, - "y": 125, - "w": 36, - "h": 44 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 36, - "h": 44 - }, - "frame": { - "x": 199, - "y": 124, - "w": 36, - "h": 44 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 36, - "h": 44 - }, - "frame": { - "x": 199, - "y": 124, - "w": 36, - "h": 44 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 36, - "h": 44 - }, - "frame": { - "x": 157, - "y": 129, - "w": 36, - "h": 44 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 36, - "h": 44 - }, - "frame": { - "x": 121, - "y": 169, - "w": 36, - "h": 44 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 5, - "w": 36, - "h": 43 - }, - "frame": { - "x": 235, - "y": 132, - "w": 36, - "h": 43 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 5, - "w": 36, - "h": 43 - }, - "frame": { - "x": 235, - "y": 132, - "w": 36, - "h": 43 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 5, - "w": 36, - "h": 43 - }, - "frame": { - "x": 193, - "y": 168, - "w": 36, - "h": 43 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 5, - "w": 36, - "h": 43 - }, - "frame": { - "x": 157, - "y": 173, - "w": 36, - "h": 43 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 5, - "w": 36, - "h": 43 - }, - "frame": { - "x": 121, - "y": 213, - "w": 36, - "h": 43 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 5, - "w": 36, - "h": 43 - }, - "frame": { - "x": 229, - "y": 175, - "w": 36, - "h": 43 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 5, - "w": 36, - "h": 43 - }, - "frame": { - "x": 193, - "y": 211, - "w": 36, - "h": 43 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 5, - "w": 36, - "h": 43 - }, - "frame": { - "x": 157, - "y": 216, - "w": 36, - "h": 43 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 5, - "w": 36, - "h": 43 - }, - "frame": { - "x": 229, - "y": 218, - "w": 36, - "h": 43 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 43, - "h": 48 - }, - "spriteSourceSize": { - "x": 3, - "y": 5, - "w": 36, - "h": 43 - }, - "frame": { - "x": 229, - "y": 218, - "w": 36, - "h": 43 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:c2301c17b022e36ed40b13f27d705543:87a73272ea48477e6b25b210421da5ec:45bb13be23ae6e2a6654a2a00c450d62$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 34, "w": 26, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 26, "h": 33 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0003.png", + "frame": { "x": 78, "y": 0, "w": 28, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 28, "h": 31 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0004.png", + "frame": { "x": 0, "y": 34, "w": 26, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 26, "h": 33 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0007.png", + "frame": { "x": 78, "y": 62, "w": 26, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 26, "h": 32 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0008.png", + "frame": { "x": 52, "y": 94, "w": 28, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 28, "h": 29 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0009.png", + "frame": { "x": 78, "y": 62, "w": 26, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 26, "h": 32 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 34, "w": 26, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 26, "h": 33 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0013.png", + "frame": { "x": 78, "y": 0, "w": 28, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 28, "h": 31 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0014.png", + "frame": { "x": 0, "y": 34, "w": 26, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 26, "h": 33 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0015.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0017.png", + "frame": { "x": 78, "y": 62, "w": 26, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 26, "h": 32 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0018.png", + "frame": { "x": 52, "y": 94, "w": 28, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 28, "h": 29 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0019.png", + "frame": { "x": 78, "y": 62, "w": 26, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 26, "h": 32 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0020.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0021.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0022.png", + "frame": { "x": 0, "y": 34, "w": 26, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 26, "h": 33 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0023.png", + "frame": { "x": 78, "y": 0, "w": 28, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 28, "h": 31 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0024.png", + "frame": { "x": 0, "y": 34, "w": 26, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 26, "h": 33 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0026.png", + "frame": { "x": 26, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 67, "w": 26, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 26, "h": 32 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0028.png", + "frame": { "x": 80, "y": 94, "w": 28, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 28, "h": 29 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0029.png", + "frame": { "x": 78, "y": 62, "w": 26, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 26, "h": 32 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0030.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0031.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0032.png", + "frame": { "x": 26, "y": 34, "w": 26, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 26, "h": 33 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0033.png", + "frame": { "x": 78, "y": 31, "w": 28, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 28, "h": 31 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0034.png", + "frame": { "x": 52, "y": 34, "w": 26, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 26, "h": 33 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0035.png", + "frame": { "x": 52, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0036.png", + "frame": { "x": 52, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0037.png", + "frame": { "x": 26, "y": 67, "w": 26, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 26, "h": 32 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0038.png", + "frame": { "x": 0, "y": 99, "w": 28, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 28, "h": 29 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0039.png", + "frame": { "x": 78, "y": 62, "w": 26, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 26, "h": 32 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + }, + { + "filename": "0040.png", + "frame": { "x": 0, "y": 0, "w": 26, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 26, "h": 34 }, + "sourceSize": { "w": 28, "h": 34 }, + "duration": 150 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "704.png", + "format": "RGBA8888", + "size": { "w": 108, "h": 128 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/704.png b/public/images/pokemon/exp/shiny/704.png index ac31e9da30c..d630d161de1 100644 Binary files a/public/images/pokemon/exp/shiny/704.png and b/public/images/pokemon/exp/shiny/704.png differ diff --git a/public/images/pokemon/exp/shiny/705.json b/public/images/pokemon/exp/shiny/705.json index 1d18b10d3a0..bc7b5ff15d3 100644 --- a/public/images/pokemon/exp/shiny/705.json +++ b/public/images/pokemon/exp/shiny/705.json @@ -1,272 +1,596 @@ -{ - "textures": [ - { - "image": "705.png", - "format": "RGBA8888", - "size": { - "w": 154, - "h": 154 - }, - "scale": 1, - "frames": [ - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 46, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 58 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 46, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 58 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 45, - "h": 58 - }, - "frame": { - "x": 46, - "y": 0, - "w": 45, - "h": 58 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 45, - "h": 58 - }, - "frame": { - "x": 46, - "y": 0, - "w": 45, - "h": 58 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 45, - "h": 58 - }, - "frame": { - "x": 91, - "y": 0, - "w": 45, - "h": 58 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 42, - "h": 58 - }, - "frame": { - "x": 0, - "y": 58, - "w": 42, - "h": 58 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 42, - "h": 58 - }, - "frame": { - "x": 0, - "y": 58, - "w": 42, - "h": 58 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 58 - }, - "frame": { - "x": 42, - "y": 58, - "w": 41, - "h": 58 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 58 - }, - "frame": { - "x": 42, - "y": 58, - "w": 41, - "h": 58 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 36, - "h": 58 - }, - "frame": { - "x": 83, - "y": 58, - "w": 36, - "h": 58 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 36, - "h": 58 - }, - "frame": { - "x": 83, - "y": 58, - "w": 36, - "h": 58 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 119, - "y": 58, - "w": 35, - "h": 58 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:eb2c6abdfceb0458f6389a25d31f9dab:0ef587160e8636cec6566f480554985e:6b57e983626c7fc9144ab67f30c66814$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 38, "y": 186, "w": 40, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 40, "h": 60 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 78, "y": 189, "w": 40, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 40, "h": 59 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 77, "y": 304, "w": 39, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 39, "h": 57 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 197, "y": 246, "w": 41, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 41, "h": 56 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 158, "y": 302, "w": 41, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 41, "h": 55 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 155, "y": 246, "w": 42, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 42, "h": 55 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 199, "y": 302, "w": 41, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 41, "h": 55 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 77, "y": 248, "w": 41, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 41, "h": 56 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 118, "y": 301, "w": 40, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 40, "h": 57 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 38, "y": 246, "w": 39, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 39, "h": 59 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 253, "w": 37, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 37, "h": 60 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 191, "w": 38, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 38, "h": 62 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 118, "y": 189, "w": 37, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 37, "h": 63 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 0, "y": 64, "w": 39, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 39, "h": 63 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 194, "y": 184, "w": 39, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 39, "h": 62 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 156, "y": 120, "w": 40, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 61 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 38, "y": 186, "w": 40, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 40, "h": 60 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 78, "y": 189, "w": 40, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 40, "h": 59 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 77, "y": 304, "w": 39, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 39, "h": 57 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 197, "y": 246, "w": 41, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 41, "h": 56 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 158, "y": 302, "w": 41, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 41, "h": 55 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 155, "y": 246, "w": 42, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 42, "h": 55 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 199, "y": 302, "w": 41, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 41, "h": 55 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 77, "y": 248, "w": 41, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 41, "h": 56 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 118, "y": 301, "w": 40, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 40, "h": 57 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 38, "y": 246, "w": 39, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 39, "h": 59 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 253, "w": 37, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 37, "h": 60 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 0, "y": 191, "w": 38, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 38, "h": 62 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 118, "y": 189, "w": 37, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 37, "h": 63 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 0, "y": 64, "w": 39, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 39, "h": 63 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 194, "y": 184, "w": 39, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 39, "h": 62 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 156, "y": 120, "w": 40, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 61 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 38, "y": 186, "w": 40, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 40, "h": 60 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 78, "y": 189, "w": 40, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 40, "h": 59 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 77, "y": 304, "w": 39, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 39, "h": 57 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 197, "y": 246, "w": 41, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 41, "h": 56 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 158, "y": 302, "w": 41, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 41, "h": 55 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 155, "y": 246, "w": 42, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 42, "h": 55 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 199, "y": 302, "w": 41, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 41, "h": 55 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 77, "y": 248, "w": 41, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 41, "h": 56 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 118, "y": 301, "w": 40, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 40, "h": 57 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 38, "y": 246, "w": 39, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 39, "h": 59 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 253, "w": 37, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 37, "h": 60 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 0, "y": 191, "w": 38, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 38, "h": 62 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 118, "y": 189, "w": 37, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 37, "h": 63 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 0, "y": 64, "w": 39, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 39, "h": 63 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 194, "y": 184, "w": 39, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 39, "h": 62 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 156, "y": 120, "w": 40, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 61 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 159, "y": 0, "w": 41, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 41, "h": 60 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 39, "y": 125, "w": 40, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 61 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 200, "y": 60, "w": 39, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 39, "h": 63 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 39, "y": 62, "w": 39, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 39, "h": 63 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 79, "y": 125, "w": 38, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 38, "h": 64 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 117, "y": 125, "w": 38, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 38, "h": 64 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 127, "w": 38, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 38, "h": 64 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 0, "w": 39, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 39, "h": 64 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 78, "y": 62, "w": 39, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 39, "h": 63 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 117, "y": 62, "w": 39, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 39, "h": 63 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 155, "y": 181, "w": 39, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 39, "h": 62 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 119, "y": 0, "w": 40, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 62 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 79, "y": 0, "w": 40, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 62 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 39, "y": 0, "w": 40, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 62 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 196, "y": 123, "w": 40, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 40, "h": 61 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 200, "y": 0, "w": 41, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 41, "h": 60 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 159, "y": 60, "w": 41, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 41, "h": 60 }, + "sourceSize": { "w": 44, "h": 64 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "705.png", + "format": "I8", + "size": { "w": 241, "h": 361 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/705.png b/public/images/pokemon/exp/shiny/705.png index 8653de923ec..7fed21b3583 100644 Binary files a/public/images/pokemon/exp/shiny/705.png and b/public/images/pokemon/exp/shiny/705.png differ diff --git a/public/images/pokemon/exp/shiny/707.json b/public/images/pokemon/exp/shiny/707.json deleted file mode 100644 index cdc3064d8aa..00000000000 --- a/public/images/pokemon/exp/shiny/707.json +++ /dev/null @@ -1,1931 +0,0 @@ -{ - "textures": [ - { - "image": "707.png", - "format": "RGBA8888", - "size": { - "w": 283, - "h": 283 - }, - "scale": 1, - "frames": [ - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 69 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 69 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 69 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 39, - "h": 69 - }, - "frame": { - "x": 41, - "y": 0, - "w": 39, - "h": 69 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 39, - "h": 69 - }, - "frame": { - "x": 41, - "y": 0, - "w": 39, - "h": 69 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 39, - "h": 69 - }, - "frame": { - "x": 41, - "y": 0, - "w": 39, - "h": 69 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 69 - }, - "frame": { - "x": 80, - "y": 0, - "w": 37, - "h": 69 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 69 - }, - "frame": { - "x": 80, - "y": 0, - "w": 37, - "h": 69 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 69 - }, - "frame": { - "x": 80, - "y": 0, - "w": 37, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 117, - "y": 0, - "w": 42, - "h": 70 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 117, - "y": 0, - "w": 42, - "h": 70 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 117, - "y": 0, - "w": 42, - "h": 70 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 117, - "y": 0, - "w": 42, - "h": 70 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 159, - "y": 0, - "w": 42, - "h": 70 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 159, - "y": 0, - "w": 42, - "h": 70 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 159, - "y": 0, - "w": 42, - "h": 70 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 159, - "y": 0, - "w": 42, - "h": 70 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 44, - "h": 70 - }, - "frame": { - "x": 201, - "y": 0, - "w": 44, - "h": 70 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 44, - "h": 70 - }, - "frame": { - "x": 201, - "y": 0, - "w": 44, - "h": 70 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 44, - "h": 70 - }, - "frame": { - "x": 201, - "y": 0, - "w": 44, - "h": 70 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 70 - }, - "frame": { - "x": 245, - "y": 0, - "w": 38, - "h": 70 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 38, - "h": 70 - }, - "frame": { - "x": 245, - "y": 0, - "w": 38, - "h": 70 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 70 - }, - "frame": { - "x": 245, - "y": 0, - "w": 38, - "h": 70 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 38, - "h": 70 - }, - "frame": { - "x": 245, - "y": 0, - "w": 38, - "h": 70 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 70 - }, - "frame": { - "x": 245, - "y": 0, - "w": 38, - "h": 70 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 38, - "h": 70 - }, - "frame": { - "x": 245, - "y": 0, - "w": 38, - "h": 70 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 44, - "h": 70 - }, - "frame": { - "x": 0, - "y": 69, - "w": 44, - "h": 70 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 44, - "h": 70 - }, - "frame": { - "x": 0, - "y": 69, - "w": 44, - "h": 70 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 44, - "h": 70 - }, - "frame": { - "x": 0, - "y": 69, - "w": 44, - "h": 70 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 70 - }, - "frame": { - "x": 44, - "y": 69, - "w": 44, - "h": 70 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 70 - }, - "frame": { - "x": 44, - "y": 69, - "w": 44, - "h": 70 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 70 - }, - "frame": { - "x": 44, - "y": 69, - "w": 44, - "h": 70 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 38, - "h": 70 - }, - "frame": { - "x": 88, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 38, - "h": 70 - }, - "frame": { - "x": 88, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 38, - "h": 70 - }, - "frame": { - "x": 88, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 38, - "h": 70 - }, - "frame": { - "x": 88, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 38, - "h": 70 - }, - "frame": { - "x": 88, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 38, - "h": 70 - }, - "frame": { - "x": 88, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 38, - "h": 70 - }, - "frame": { - "x": 126, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 38, - "h": 70 - }, - "frame": { - "x": 126, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 38, - "h": 70 - }, - "frame": { - "x": 126, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 70 - }, - "frame": { - "x": 164, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 70 - }, - "frame": { - "x": 164, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 70 - }, - "frame": { - "x": 164, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 70 - }, - "frame": { - "x": 202, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 70 - }, - "frame": { - "x": 202, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 70 - }, - "frame": { - "x": 202, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 70 - }, - "frame": { - "x": 240, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 70 - }, - "frame": { - "x": 240, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 70 - }, - "frame": { - "x": 240, - "y": 70, - "w": 38, - "h": 70 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 70 - }, - "frame": { - "x": 0, - "y": 139, - "w": 38, - "h": 70 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 70 - }, - "frame": { - "x": 0, - "y": 139, - "w": 38, - "h": 70 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 70 - }, - "frame": { - "x": 0, - "y": 139, - "w": 38, - "h": 70 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 40, - "h": 70 - }, - "frame": { - "x": 38, - "y": 139, - "w": 40, - "h": 70 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 40, - "h": 70 - }, - "frame": { - "x": 38, - "y": 139, - "w": 40, - "h": 70 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 40, - "h": 70 - }, - "frame": { - "x": 38, - "y": 139, - "w": 40, - "h": 70 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 42, - "h": 70 - }, - "frame": { - "x": 78, - "y": 140, - "w": 42, - "h": 70 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 42, - "h": 70 - }, - "frame": { - "x": 78, - "y": 140, - "w": 42, - "h": 70 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 42, - "h": 70 - }, - "frame": { - "x": 78, - "y": 140, - "w": 42, - "h": 70 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 42, - "h": 70 - }, - "frame": { - "x": 78, - "y": 140, - "w": 42, - "h": 70 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 42, - "h": 70 - }, - "frame": { - "x": 78, - "y": 140, - "w": 42, - "h": 70 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 42, - "h": 70 - }, - "frame": { - "x": 78, - "y": 140, - "w": 42, - "h": 70 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 42, - "h": 70 - }, - "frame": { - "x": 78, - "y": 140, - "w": 42, - "h": 70 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 45, - "h": 70 - }, - "frame": { - "x": 120, - "y": 140, - "w": 45, - "h": 70 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 43, - "h": 70 - }, - "frame": { - "x": 165, - "y": 140, - "w": 43, - "h": 70 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 43, - "h": 70 - }, - "frame": { - "x": 165, - "y": 140, - "w": 43, - "h": 70 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 71 - }, - "frame": { - "x": 208, - "y": 140, - "w": 45, - "h": 71 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 71 - }, - "frame": { - "x": 208, - "y": 140, - "w": 45, - "h": 71 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 71 - }, - "frame": { - "x": 208, - "y": 140, - "w": 45, - "h": 71 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 71 - }, - "frame": { - "x": 0, - "y": 209, - "w": 37, - "h": 71 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 71 - }, - "frame": { - "x": 0, - "y": 209, - "w": 37, - "h": 71 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 71 - }, - "frame": { - "x": 0, - "y": 209, - "w": 37, - "h": 71 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 38, - "h": 71 - }, - "frame": { - "x": 37, - "y": 209, - "w": 38, - "h": 71 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 38, - "h": 71 - }, - "frame": { - "x": 37, - "y": 209, - "w": 38, - "h": 71 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 38, - "h": 71 - }, - "frame": { - "x": 37, - "y": 209, - "w": 38, - "h": 71 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 38, - "h": 71 - }, - "frame": { - "x": 75, - "y": 210, - "w": 38, - "h": 71 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 38, - "h": 71 - }, - "frame": { - "x": 75, - "y": 210, - "w": 38, - "h": 71 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 38, - "h": 71 - }, - "frame": { - "x": 75, - "y": 210, - "w": 38, - "h": 71 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 38, - "h": 71 - }, - "frame": { - "x": 113, - "y": 210, - "w": 38, - "h": 71 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 38, - "h": 71 - }, - "frame": { - "x": 113, - "y": 210, - "w": 38, - "h": 71 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 71 - }, - "frame": { - "x": 113, - "y": 210, - "w": 38, - "h": 71 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 38, - "h": 71 - }, - "frame": { - "x": 113, - "y": 210, - "w": 38, - "h": 71 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 38, - "h": 71 - }, - "frame": { - "x": 113, - "y": 210, - "w": 38, - "h": 71 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 71 - }, - "frame": { - "x": 113, - "y": 210, - "w": 38, - "h": 71 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 38, - "h": 71 - }, - "frame": { - "x": 113, - "y": 210, - "w": 38, - "h": 71 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 38, - "h": 71 - }, - "frame": { - "x": 113, - "y": 210, - "w": 38, - "h": 71 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 71 - }, - "frame": { - "x": 113, - "y": 210, - "w": 38, - "h": 71 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 45, - "h": 71 - }, - "frame": { - "x": 151, - "y": 210, - "w": 45, - "h": 71 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 39, - "h": 71 - }, - "frame": { - "x": 196, - "y": 211, - "w": 39, - "h": 71 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 39, - "h": 71 - }, - "frame": { - "x": 196, - "y": 211, - "w": 39, - "h": 71 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 73 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 44, - "h": 71 - }, - "frame": { - "x": 235, - "y": 211, - "w": 44, - "h": 71 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:26c493d70c41c4104147194dfbbab5b9:b12f3eb3fdd1a69bbf055a44f9557395:8e96b9056ea81e44ced99c97f472a528$" - } -} diff --git a/public/images/pokemon/exp/shiny/707.png b/public/images/pokemon/exp/shiny/707.png deleted file mode 100644 index ee0fec17e8c..00000000000 Binary files a/public/images/pokemon/exp/shiny/707.png and /dev/null differ diff --git a/public/images/pokemon/exp/shiny/708.png b/public/images/pokemon/exp/shiny/708.png deleted file mode 100644 index bb896a0214c..00000000000 Binary files a/public/images/pokemon/exp/shiny/708.png and /dev/null differ diff --git a/public/images/pokemon/exp/shiny/712.json b/public/images/pokemon/exp/shiny/712.json index 80e4e6a13b9..88a49637b7c 100644 --- a/public/images/pokemon/exp/shiny/712.json +++ b/public/images/pokemon/exp/shiny/712.json @@ -1,2771 +1,1433 @@ -{ - "textures": [ - { - "image": "712.png", - "format": "RGBA8888", - "size": { - "w": 209, - "h": 209 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 38, - "h": 44 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 38, - "h": 44 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 38, - "h": 44 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 38, - "h": 44 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 38, - "h": 44 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 38, - "h": 44 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 38, - "h": 44 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 38, - "h": 44 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 38, - "h": 44 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 44, - "w": 38, - "h": 44 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 38, - "h": 44 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 38, - "h": 44 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 38, - "h": 44 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 38, - "h": 44 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 38, - "h": 44 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 38, - "h": 44 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 38, - "h": 44 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 38, - "h": 44 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 38, - "h": 44 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 88, - "w": 38, - "h": 44 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 38, - "h": 44 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 38, - "h": 44 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 38, - "h": 44 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 38, - "h": 44 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 38, - "h": 44 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 38, - "h": 44 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 38, - "h": 44 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 38, - "h": 44 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 38, - "h": 44 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 0, - "y": 132, - "w": 38, - "h": 44 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 38, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 38, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 38, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 38, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 38, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 38, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 38, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 38, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 38, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 44 - }, - "frame": { - "x": 38, - "y": 0, - "w": 38, - "h": 44 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 76, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 76, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 76, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 76, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 76, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 76, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 76, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 76, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 76, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 76, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 114, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 114, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 114, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 114, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 114, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 114, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 114, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 114, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 114, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 114, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 152, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 152, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 152, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 152, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 152, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 152, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 152, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 152, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 152, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 152, - "y": 0, - "w": 38, - "h": 43 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 76, - "y": 43, - "w": 38, - "h": 43 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 76, - "y": 43, - "w": 38, - "h": 43 - } - }, - { - "filename": "0131.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 43 - }, - "frame": { - "x": 76, - "y": 43, - "w": 38, - "h": 43 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 38, - "h": 42 - }, - "frame": { - "x": 38, - "y": 44, - "w": 38, - "h": 42 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 38, - "h": 42 - }, - "frame": { - "x": 38, - "y": 44, - "w": 38, - "h": 42 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 38, - "h": 42 - }, - "frame": { - "x": 38, - "y": 44, - "w": 38, - "h": 42 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 38, - "h": 42 - }, - "frame": { - "x": 38, - "y": 44, - "w": 38, - "h": 42 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 38, - "h": 42 - }, - "frame": { - "x": 38, - "y": 44, - "w": 38, - "h": 42 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 38, - "h": 42 - }, - "frame": { - "x": 38, - "y": 44, - "w": 38, - "h": 42 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 38, - "h": 42 - }, - "frame": { - "x": 38, - "y": 44, - "w": 38, - "h": 42 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 38, - "h": 42 - }, - "frame": { - "x": 38, - "y": 44, - "w": 38, - "h": 42 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 38, - "h": 42 - }, - "frame": { - "x": 38, - "y": 44, - "w": 38, - "h": 42 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 38, - "h": 42 - }, - "frame": { - "x": 38, - "y": 44, - "w": 38, - "h": 42 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 38, - "h": 42 - }, - "frame": { - "x": 114, - "y": 43, - "w": 38, - "h": 42 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 38, - "h": 42 - }, - "frame": { - "x": 114, - "y": 43, - "w": 38, - "h": 42 - } - }, - { - "filename": "0129.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 38, - "h": 42 - }, - "frame": { - "x": 114, - "y": 43, - "w": 38, - "h": 42 - } - }, - { - "filename": "0130.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 38, - "h": 42 - }, - "frame": { - "x": 114, - "y": 43, - "w": 38, - "h": 42 - } - }, - { - "filename": "0124.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 38, - "h": 42 - }, - "frame": { - "x": 152, - "y": 43, - "w": 38, - "h": 42 - } - }, - { - "filename": "0125.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 38, - "h": 42 - }, - "frame": { - "x": 152, - "y": 43, - "w": 38, - "h": 42 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 114, - "y": 85, - "w": 38, - "h": 41 - } - }, - { - "filename": "0127.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 114, - "y": 85, - "w": 38, - "h": 41 - } - }, - { - "filename": "0128.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 114, - "y": 85, - "w": 38, - "h": 41 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 152, - "y": 85, - "w": 38, - "h": 41 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 152, - "y": 85, - "w": 38, - "h": 41 - } - }, - { - "filename": "0126.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 152, - "y": 85, - "w": 38, - "h": 41 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 38, - "y": 86, - "w": 38, - "h": 41 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 38, - "y": 86, - "w": 38, - "h": 41 - } - }, - { - "filename": "0112.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 38, - "y": 86, - "w": 38, - "h": 41 - } - }, - { - "filename": "0113.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 38, - "y": 86, - "w": 38, - "h": 41 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 76, - "y": 86, - "w": 38, - "h": 41 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 76, - "y": 86, - "w": 38, - "h": 41 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 76, - "y": 86, - "w": 38, - "h": 41 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 76, - "y": 86, - "w": 38, - "h": 41 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 38, - "y": 127, - "w": 38, - "h": 41 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 38, - "y": 127, - "w": 38, - "h": 41 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 38, - "y": 127, - "w": 38, - "h": 41 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 38, - "y": 127, - "w": 38, - "h": 41 - } - }, - { - "filename": "0114.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 38, - "y": 168, - "w": 38, - "h": 41 - } - }, - { - "filename": "0115.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 38, - "y": 168, - "w": 38, - "h": 41 - } - }, - { - "filename": "0116.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 76, - "y": 127, - "w": 38, - "h": 41 - } - }, - { - "filename": "0117.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 76, - "y": 127, - "w": 38, - "h": 41 - } - }, - { - "filename": "0118.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 76, - "y": 168, - "w": 38, - "h": 41 - } - }, - { - "filename": "0119.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 76, - "y": 168, - "w": 38, - "h": 41 - } - }, - { - "filename": "0120.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 114, - "y": 126, - "w": 38, - "h": 41 - } - }, - { - "filename": "0121.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 38, - "h": 41 - }, - "frame": { - "x": 114, - "y": 126, - "w": 38, - "h": 41 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 114, - "y": 167, - "w": 37, - "h": 41 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 114, - "y": 167, - "w": 37, - "h": 41 - } - }, - { - "filename": "0122.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 151, - "y": 167, - "w": 37, - "h": 41 - } - }, - { - "filename": "0123.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 42, - "h": 44 - }, - "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 37, - "h": 41 - }, - "frame": { - "x": 151, - "y": 167, - "w": 37, - "h": 41 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:90506cc63998ae2867a3e57df229bc50:f8b5635f0ab8bc294bdbf4d4b4782548:3a1cc69824960d920ca43f8c9376d136$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 74, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0002.png", + "frame": { "x": 74, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0003.png", + "frame": { "x": 74, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0004.png", + "frame": { "x": 111, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0005.png", + "frame": { "x": 111, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0006.png", + "frame": { "x": 112, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0007.png", + "frame": { "x": 112, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0008.png", + "frame": { "x": 149, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0009.png", + "frame": { "x": 149, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 45, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 45, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0012.png", + "frame": { "x": 74, "y": 86, "w": 36, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 36, "h": 41 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0013.png", + "frame": { "x": 74, "y": 86, "w": 36, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 36, "h": 41 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0014.png", + "frame": { "x": 148, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0015.png", + "frame": { "x": 148, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0018.png", + "frame": { "x": 37, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0019.png", + "frame": { "x": 37, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0020.png", + "frame": { "x": 74, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0021.png", + "frame": { "x": 74, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0022.png", + "frame": { "x": 74, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0023.png", + "frame": { "x": 74, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0024.png", + "frame": { "x": 74, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0025.png", + "frame": { "x": 74, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0026.png", + "frame": { "x": 111, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0027.png", + "frame": { "x": 111, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0028.png", + "frame": { "x": 112, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0029.png", + "frame": { "x": 112, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0030.png", + "frame": { "x": 149, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0031.png", + "frame": { "x": 149, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 45, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0033.png", + "frame": { "x": 0, "y": 45, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0034.png", + "frame": { "x": 74, "y": 86, "w": 36, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 36, "h": 41 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0035.png", + "frame": { "x": 74, "y": 86, "w": 36, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 36, "h": 41 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0036.png", + "frame": { "x": 148, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0037.png", + "frame": { "x": 148, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0038.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0039.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0040.png", + "frame": { "x": 37, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0041.png", + "frame": { "x": 37, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0042.png", + "frame": { "x": 74, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0043.png", + "frame": { "x": 74, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0044.png", + "frame": { "x": 74, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0045.png", + "frame": { "x": 74, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0046.png", + "frame": { "x": 74, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0047.png", + "frame": { "x": 74, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0048.png", + "frame": { "x": 111, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0049.png", + "frame": { "x": 111, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0050.png", + "frame": { "x": 112, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0051.png", + "frame": { "x": 112, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0052.png", + "frame": { "x": 149, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0053.png", + "frame": { "x": 149, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 45, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 45, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0056.png", + "frame": { "x": 74, "y": 86, "w": 36, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 36, "h": 41 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0057.png", + "frame": { "x": 74, "y": 86, "w": 36, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 36, "h": 41 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0058.png", + "frame": { "x": 148, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0059.png", + "frame": { "x": 148, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0060.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 37, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0063.png", + "frame": { "x": 37, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0064.png", + "frame": { "x": 74, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0065.png", + "frame": { "x": 74, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0066.png", + "frame": { "x": 74, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0067.png", + "frame": { "x": 74, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0068.png", + "frame": { "x": 74, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0069.png", + "frame": { "x": 74, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0070.png", + "frame": { "x": 111, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0071.png", + "frame": { "x": 111, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0072.png", + "frame": { "x": 112, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0073.png", + "frame": { "x": 112, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0074.png", + "frame": { "x": 149, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0075.png", + "frame": { "x": 149, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0076.png", + "frame": { "x": 0, "y": 45, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0077.png", + "frame": { "x": 0, "y": 45, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0078.png", + "frame": { "x": 74, "y": 86, "w": 36, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 36, "h": 41 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0079.png", + "frame": { "x": 74, "y": 86, "w": 36, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 36, "h": 41 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0080.png", + "frame": { "x": 148, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0081.png", + "frame": { "x": 148, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0082.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0083.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0084.png", + "frame": { "x": 37, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0085.png", + "frame": { "x": 37, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0086.png", + "frame": { "x": 74, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0087.png", + "frame": { "x": 74, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0088.png", + "frame": { "x": 74, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0089.png", + "frame": { "x": 74, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0090.png", + "frame": { "x": 74, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0091.png", + "frame": { "x": 74, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0092.png", + "frame": { "x": 111, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0093.png", + "frame": { "x": 111, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0094.png", + "frame": { "x": 112, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0095.png", + "frame": { "x": 112, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0096.png", + "frame": { "x": 149, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0097.png", + "frame": { "x": 149, "y": 44, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0098.png", + "frame": { "x": 0, "y": 45, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0099.png", + "frame": { "x": 0, "y": 45, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0100.png", + "frame": { "x": 74, "y": 86, "w": 36, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 36, "h": 41 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0101.png", + "frame": { "x": 74, "y": 86, "w": 36, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 36, "h": 41 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0102.png", + "frame": { "x": 148, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0103.png", + "frame": { "x": 148, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0104.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0105.png", + "frame": { "x": 0, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0106.png", + "frame": { "x": 37, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0107.png", + "frame": { "x": 37, "y": 0, "w": 36, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 36, "h": 44 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0108.png", + "frame": { "x": 74, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0109.png", + "frame": { "x": 74, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0110.png", + "frame": { "x": 74, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0111.png", + "frame": { "x": 74, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0112.png", + "frame": { "x": 74, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0113.png", + "frame": { "x": 74, "y": 0, "w": 36, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 43 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0114.png", + "frame": { "x": 37, "y": 45, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0115.png", + "frame": { "x": 37, "y": 45, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0116.png", + "frame": { "x": 111, "y": 87, "w": 36, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 36, "h": 41 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0117.png", + "frame": { "x": 111, "y": 87, "w": 36, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 36, "h": 41 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0118.png", + "frame": { "x": 148, "y": 87, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0119.png", + "frame": { "x": 148, "y": 87, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0120.png", + "frame": { "x": 0, "y": 88, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0121.png", + "frame": { "x": 0, "y": 88, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0122.png", + "frame": { "x": 0, "y": 88, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0123.png", + "frame": { "x": 0, "y": 88, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0124.png", + "frame": { "x": 37, "y": 88, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0125.png", + "frame": { "x": 37, "y": 88, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0126.png", + "frame": { "x": 74, "y": 128, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0127.png", + "frame": { "x": 74, "y": 128, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0128.png", + "frame": { "x": 148, "y": 128, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0129.png", + "frame": { "x": 148, "y": 128, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0130.png", + "frame": { "x": 0, "y": 129, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0131.png", + "frame": { "x": 0, "y": 129, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0132.png", + "frame": { "x": 148, "y": 128, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0133.png", + "frame": { "x": 148, "y": 128, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0134.png", + "frame": { "x": 74, "y": 128, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0135.png", + "frame": { "x": 74, "y": 128, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0136.png", + "frame": { "x": 37, "y": 88, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0137.png", + "frame": { "x": 37, "y": 88, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0138.png", + "frame": { "x": 37, "y": 129, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0139.png", + "frame": { "x": 37, "y": 129, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0140.png", + "frame": { "x": 111, "y": 129, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0141.png", + "frame": { "x": 111, "y": 129, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0142.png", + "frame": { "x": 74, "y": 169, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0143.png", + "frame": { "x": 74, "y": 169, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0144.png", + "frame": { "x": 148, "y": 169, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0145.png", + "frame": { "x": 148, "y": 169, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0146.png", + "frame": { "x": 0, "y": 170, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0147.png", + "frame": { "x": 0, "y": 170, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0148.png", + "frame": { "x": 74, "y": 44, "w": 37, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 37, "h": 41 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0149.png", + "frame": { "x": 74, "y": 44, "w": 37, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 37, "h": 41 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0150.png", + "frame": { "x": 0, "y": 88, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0151.png", + "frame": { "x": 0, "y": 88, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0152.png", + "frame": { "x": 0, "y": 88, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0153.png", + "frame": { "x": 148, "y": 87, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0154.png", + "frame": { "x": 148, "y": 87, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0155.png", + "frame": { "x": 111, "y": 87, "w": 36, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 36, "h": 41 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0156.png", + "frame": { "x": 111, "y": 87, "w": 36, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 36, "h": 41 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0157.png", + "frame": { "x": 37, "y": 45, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + }, + { + "filename": "0158.png", + "frame": { "x": 37, "y": 45, "w": 36, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 36, "h": 42 }, + "sourceSize": { "w": 42, "h": 44 }, + "duration": 50 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "712.png", + "format": "I8", + "size": { "w": 185, "h": 210 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/712.png b/public/images/pokemon/exp/shiny/712.png index 66e28efacd9..2ba0434ad7a 100644 Binary files a/public/images/pokemon/exp/shiny/712.png and b/public/images/pokemon/exp/shiny/712.png differ diff --git a/public/images/pokemon/exp/shiny/713.json b/public/images/pokemon/exp/shiny/713.json index c2aab871871..f4fcfa1ff85 100644 --- a/public/images/pokemon/exp/shiny/713.json +++ b/public/images/pokemon/exp/shiny/713.json @@ -1,146 +1,1100 @@ -{ - "textures": [ - { - "image": "713.png", - "format": "RGBA8888", - "size": { - "w": 174, - "h": 174 - }, - "scale": 1, - "frames": [ - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 87, - "h": 71 - }, - "frame": { - "x": 0, - "y": 0, - "w": 87, - "h": 71 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 87, - "h": 72 - }, - "frame": { - "x": 87, - "y": 0, - "w": 87, - "h": 72 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 87, - "h": 72 - }, - "frame": { - "x": 87, - "y": 0, - "w": 87, - "h": 72 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 87, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 87, - "h": 73 - }, - "frame": { - "x": 0, - "y": 71, - "w": 87, - "h": 73 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 87, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 87, - "h": 73 - }, - "frame": { - "x": 0, - "y": 71, - "w": 87, - "h": 73 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 87, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 87, - "h": 73 - }, - "frame": { - "x": 87, - "y": 72, - "w": 87, - "h": 73 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:ce42146f2549b65131ae1e38620ec02e:c360691d0dff3de5f5058a576fd05ded:625f70bcfe9c7f2437cb9cad6d2b863c$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 166, "y": 64, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 249, "y": 64, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 332, "y": 126, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 166, "y": 127, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 83, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 83, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 83, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 0, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 166, "y": 127, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 332, "y": 126, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 249, "y": 64, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 166, "y": 64, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 166, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 249, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 83, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 83, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 83, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 83, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 0, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 249, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 166, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 166, "y": 64, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 249, "y": 64, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 332, "y": 126, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 166, "y": 127, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 0, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 83, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 83, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 83, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 166, "y": 127, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 332, "y": 126, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 249, "y": 64, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 166, "y": 64, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 166, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 249, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 0, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 83, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 83, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 83, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 83, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 0, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 249, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 166, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 166, "y": 64, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 249, "y": 64, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 332, "y": 126, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 166, "y": 127, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 0, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 83, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 83, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 83, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 166, "y": 127, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 332, "y": 126, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 249, "y": 64, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 166, "y": 64, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 166, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 249, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 0, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 83, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 83, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 83, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 83, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 0, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 249, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 166, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 166, "y": 64, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 249, "y": 64, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 332, "y": 126, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 166, "y": 127, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 0, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 83, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 83, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 83, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 0, "y": 128, "w": 83, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 83, "h": 61 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 166, "y": 127, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 332, "y": 126, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 249, "y": 64, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 166, "y": 64, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 166, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 249, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 0, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 83, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 83, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 83, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 83, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 0, "y": 0, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 249, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 166, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 166, "y": 0, "w": 83, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 64 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 0, "y": 65, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 0, "y": 65, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 0, "y": 65, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 0, "y": 65, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 83, "y": 65, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 83, "y": 65, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 332, "y": 0, "w": 84, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 84, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 332, "y": 0, "w": 84, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 84, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 332, "y": 63, "w": 84, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 84, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 332, "y": 63, "w": 84, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 84, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 332, "y": 63, "w": 84, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 84, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 332, "y": 63, "w": 84, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 84, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 332, "y": 0, "w": 84, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 84, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0107.png", + "frame": { "x": 0, "y": 65, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0108.png", + "frame": { "x": 0, "y": 65, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0109.png", + "frame": { "x": 249, "y": 127, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0110.png", + "frame": { "x": 249, "y": 127, "w": 83, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 62 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0111.png", + "frame": { "x": 332, "y": 188, "w": 83, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 59 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0112.png", + "frame": { "x": 332, "y": 188, "w": 83, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 59 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0113.png", + "frame": { "x": 0, "y": 189, "w": 83, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 58 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0114.png", + "frame": { "x": 0, "y": 189, "w": 83, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 58 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0115.png", + "frame": { "x": 0, "y": 189, "w": 83, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 58 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0116.png", + "frame": { "x": 0, "y": 189, "w": 83, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 58 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0117.png", + "frame": { "x": 332, "y": 188, "w": 83, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 59 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0118.png", + "frame": { "x": 0, "y": 65, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0119.png", + "frame": { "x": 0, "y": 65, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0120.png", + "frame": { "x": 0, "y": 65, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + }, + { + "filename": "0121.png", + "frame": { "x": 0, "y": 65, "w": 83, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 83, "h": 63 }, + "sourceSize": { "w": 84, "h": 66 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "713.png", + "format": "I8", + "size": { "w": 416, "h": 247 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/713.png b/public/images/pokemon/exp/shiny/713.png index ded180bdefc..72c06f1d750 100644 Binary files a/public/images/pokemon/exp/shiny/713.png and b/public/images/pokemon/exp/shiny/713.png differ diff --git a/public/images/pokemon/exp/shiny/714.json b/public/images/pokemon/exp/shiny/714.json deleted file mode 100644 index dc8d580d33b..00000000000 --- a/public/images/pokemon/exp/shiny/714.json +++ /dev/null @@ -1,314 +0,0 @@ -{ - "textures": [ - { - "image": "714.png", - "format": "RGBA8888", - "size": { - "w": 179, - "h": 179 - }, - "scale": 1, - "frames": [ - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 64, - "h": 63 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 63, - "h": 60 - }, - "frame": { - "x": 0, - "y": 0, - "w": 63, - "h": 60 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 64, - "h": 63 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 63, - "h": 60 - }, - "frame": { - "x": 0, - "y": 0, - "w": 63, - "h": 60 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 64, - "h": 63 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 64, - "h": 59 - }, - "frame": { - "x": 0, - "y": 60, - "w": 64, - "h": 59 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 64, - "h": 63 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 64, - "h": 59 - }, - "frame": { - "x": 0, - "y": 60, - "w": 64, - "h": 59 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 64, - "h": 63 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 64, - "h": 58 - }, - "frame": { - "x": 63, - "y": 0, - "w": 64, - "h": 58 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 64, - "h": 63 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 60, - "h": 61 - }, - "frame": { - "x": 64, - "y": 58, - "w": 60, - "h": 61 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 64, - "h": 63 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 60, - "h": 61 - }, - "frame": { - "x": 64, - "y": 58, - "w": 60, - "h": 61 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 64, - "h": 63 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 54, - "h": 58 - }, - "frame": { - "x": 124, - "y": 58, - "w": 54, - "h": 58 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 64, - "h": 63 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 54, - "h": 58 - }, - "frame": { - "x": 124, - "y": 58, - "w": 54, - "h": 58 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 64, - "h": 63 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 54, - "h": 58 - }, - "frame": { - "x": 124, - "y": 116, - "w": 54, - "h": 58 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 64, - "h": 63 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 60, - "h": 60 - }, - "frame": { - "x": 0, - "y": 119, - "w": 60, - "h": 60 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 64, - "h": 63 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 60, - "h": 60 - }, - "frame": { - "x": 0, - "y": 119, - "w": 60, - "h": 60 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 64, - "h": 63 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 56, - "h": 60 - }, - "frame": { - "x": 60, - "y": 119, - "w": 56, - "h": 60 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 64, - "h": 63 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 56, - "h": 60 - }, - "frame": { - "x": 60, - "y": 119, - "w": 56, - "h": 60 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:f10fb65b088005bbceee81a7323b3d04:cc45de39527285e86e95e3dc2425b833:1a07d46e710b0568ec824f54fbc4fe6a$" - } -} diff --git a/public/images/pokemon/exp/shiny/714.png b/public/images/pokemon/exp/shiny/714.png deleted file mode 100644 index 53e4a6348be..00000000000 Binary files a/public/images/pokemon/exp/shiny/714.png and /dev/null differ diff --git a/public/images/pokemon/exp/shiny/718-10.json b/public/images/pokemon/exp/shiny/718-10.json deleted file mode 100644 index 98f6bbb0f01..00000000000 --- a/public/images/pokemon/exp/shiny/718-10.json +++ /dev/null @@ -1,692 +0,0 @@ -{ - "textures": [ - { - "image": "718-10.png", - "format": "RGBA8888", - "size": { - "w": 239, - "h": 239 - }, - "scale": 1, - "frames": [ - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 61, - "h": 65 - }, - "frame": { - "x": 0, - "y": 0, - "w": 61, - "h": 65 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 59, - "h": 67 - }, - "frame": { - "x": 0, - "y": 65, - "w": 59, - "h": 67 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 59, - "h": 67 - }, - "frame": { - "x": 0, - "y": 65, - "w": 59, - "h": 67 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 59, - "h": 67 - }, - "frame": { - "x": 0, - "y": 65, - "w": 59, - "h": 67 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 64, - "h": 61 - }, - "frame": { - "x": 0, - "y": 132, - "w": 64, - "h": 61 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 65, - "h": 60 - }, - "frame": { - "x": 59, - "y": 65, - "w": 65, - "h": 60 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 59, - "h": 65 - }, - "frame": { - "x": 61, - "y": 0, - "w": 59, - "h": 65 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 59, - "h": 65 - }, - "frame": { - "x": 61, - "y": 0, - "w": 59, - "h": 65 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 59, - "h": 65 - }, - "frame": { - "x": 61, - "y": 0, - "w": 59, - "h": 65 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 59, - "h": 65 - }, - "frame": { - "x": 120, - "y": 0, - "w": 59, - "h": 65 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 59, - "h": 65 - }, - "frame": { - "x": 120, - "y": 0, - "w": 59, - "h": 65 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 59, - "h": 65 - }, - "frame": { - "x": 120, - "y": 0, - "w": 59, - "h": 65 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 59, - "h": 66 - }, - "frame": { - "x": 179, - "y": 0, - "w": 59, - "h": 66 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 58, - "h": 67 - }, - "frame": { - "x": 124, - "y": 66, - "w": 58, - "h": 67 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 58, - "h": 67 - }, - "frame": { - "x": 124, - "y": 66, - "w": 58, - "h": 67 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 58, - "h": 67 - }, - "frame": { - "x": 124, - "y": 66, - "w": 58, - "h": 67 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 59, - "h": 65 - }, - "frame": { - "x": 64, - "y": 125, - "w": 59, - "h": 65 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 57, - "h": 67 - }, - "frame": { - "x": 182, - "y": 66, - "w": 57, - "h": 67 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 57, - "h": 67 - }, - "frame": { - "x": 182, - "y": 66, - "w": 57, - "h": 67 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 57, - "h": 67 - }, - "frame": { - "x": 182, - "y": 66, - "w": 57, - "h": 67 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 57, - "h": 67 - }, - "frame": { - "x": 182, - "y": 66, - "w": 57, - "h": 67 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 57, - "h": 67 - }, - "frame": { - "x": 182, - "y": 66, - "w": 57, - "h": 67 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 57, - "h": 67 - }, - "frame": { - "x": 182, - "y": 66, - "w": 57, - "h": 67 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 57, - "h": 67 - }, - "frame": { - "x": 182, - "y": 66, - "w": 57, - "h": 67 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 57, - "h": 67 - }, - "frame": { - "x": 182, - "y": 66, - "w": 57, - "h": 67 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 57, - "h": 67 - }, - "frame": { - "x": 182, - "y": 66, - "w": 57, - "h": 67 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 58, - "h": 66 - }, - "frame": { - "x": 123, - "y": 133, - "w": 58, - "h": 66 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 58, - "h": 66 - }, - "frame": { - "x": 123, - "y": 133, - "w": 58, - "h": 66 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 58, - "h": 66 - }, - "frame": { - "x": 123, - "y": 133, - "w": 58, - "h": 66 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 57, - "h": 67 - }, - "frame": { - "x": 181, - "y": 133, - "w": 57, - "h": 67 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 57, - "h": 67 - }, - "frame": { - "x": 181, - "y": 133, - "w": 57, - "h": 67 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 67 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 57, - "h": 67 - }, - "frame": { - "x": 181, - "y": 133, - "w": 57, - "h": 67 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:f59f7684ea1f2b8bb14e98d16b18e3e0:a1fa21d4b2b42982b0f0546116b38791:82195cf2a6db620c5643b8162d6e8c5c$" - } -} diff --git a/public/images/pokemon/exp/shiny/718-10.png b/public/images/pokemon/exp/shiny/718-10.png deleted file mode 100644 index 26bc2cdc580..00000000000 Binary files a/public/images/pokemon/exp/shiny/718-10.png and /dev/null differ diff --git a/public/images/pokemon/exp/shiny/718.json b/public/images/pokemon/exp/shiny/718.json deleted file mode 100644 index 29211eba621..00000000000 --- a/public/images/pokemon/exp/shiny/718.json +++ /dev/null @@ -1,230 +0,0 @@ -{ - "textures": [ - { - "image": "718.png", - "format": "RGBA8888", - "size": { - "w": 219, - "h": 219 - }, - "scale": 1, - "frames": [ - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 71, - "h": 88 - }, - "frame": { - "x": 0, - "y": 0, - "w": 71, - "h": 88 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 89 - }, - "frame": { - "x": 71, - "y": 0, - "w": 73, - "h": 89 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 74, - "h": 89 - }, - "frame": { - "x": 144, - "y": 0, - "w": 74, - "h": 89 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 74, - "h": 89 - }, - "frame": { - "x": 144, - "y": 0, - "w": 74, - "h": 89 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 74, - "h": 89 - }, - "frame": { - "x": 0, - "y": 89, - "w": 74, - "h": 89 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 74, - "h": 89 - }, - "frame": { - "x": 0, - "y": 89, - "w": 74, - "h": 89 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 73, - "h": 89 - }, - "frame": { - "x": 74, - "y": 89, - "w": 73, - "h": 89 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 73, - "h": 89 - }, - "frame": { - "x": 74, - "y": 89, - "w": 73, - "h": 89 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 72, - "h": 89 - }, - "frame": { - "x": 147, - "y": 89, - "w": 72, - "h": 89 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 89 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 72, - "h": 89 - }, - "frame": { - "x": 147, - "y": 89, - "w": 72, - "h": 89 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:5e3b138302e8798c9cc3072d564e3004:76aca0c13999f6d287f1b28f7f386fed:7b4a06b06cbac24b3f39727b0238661b$" - } -} diff --git a/public/images/pokemon/exp/shiny/718.png b/public/images/pokemon/exp/shiny/718.png deleted file mode 100644 index 59dde9d4c05..00000000000 Binary files a/public/images/pokemon/exp/shiny/718.png and /dev/null differ diff --git a/public/images/pokemon/exp/shiny/719.json b/public/images/pokemon/exp/shiny/719.json deleted file mode 100644 index 9bf72888c33..00000000000 --- a/public/images/pokemon/exp/shiny/719.json +++ /dev/null @@ -1,1091 +0,0 @@ -{ - "textures": [ - { - "image": "719.png", - "format": "RGBA8888", - "size": { - "w": 210, - "h": 210 - }, - "scale": 1, - "frames": [ - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 24, - "y": 10, - "w": 49, - "h": 67 - }, - "frame": { - "x": 0, - "y": 0, - "w": 49, - "h": 67 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 24, - "y": 6, - "w": 49, - "h": 67 - }, - "frame": { - "x": 0, - "y": 0, - "w": 49, - "h": 67 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 24, - "y": 10, - "w": 49, - "h": 67 - }, - "frame": { - "x": 0, - "y": 0, - "w": 49, - "h": 67 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 24, - "y": 6, - "w": 49, - "h": 67 - }, - "frame": { - "x": 0, - "y": 0, - "w": 49, - "h": 67 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 24, - "y": 10, - "w": 49, - "h": 67 - }, - "frame": { - "x": 0, - "y": 0, - "w": 49, - "h": 67 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 24, - "y": 6, - "w": 49, - "h": 67 - }, - "frame": { - "x": 0, - "y": 0, - "w": 49, - "h": 67 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 34, - "y": 9, - "w": 48, - "h": 67 - }, - "frame": { - "x": 49, - "y": 0, - "w": 48, - "h": 67 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 22, - "y": 5, - "w": 48, - "h": 67 - }, - "frame": { - "x": 49, - "y": 0, - "w": 48, - "h": 67 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 16, - "y": 3, - "w": 48, - "h": 67 - }, - "frame": { - "x": 49, - "y": 0, - "w": 48, - "h": 67 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 48, - "h": 67 - }, - "frame": { - "x": 49, - "y": 0, - "w": 48, - "h": 67 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 8, - "w": 47, - "h": 67 - }, - "frame": { - "x": 97, - "y": 0, - "w": 47, - "h": 67 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 8, - "w": 47, - "h": 67 - }, - "frame": { - "x": 97, - "y": 0, - "w": 47, - "h": 67 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 4, - "w": 47, - "h": 67 - }, - "frame": { - "x": 97, - "y": 0, - "w": 47, - "h": 67 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 6, - "w": 47, - "h": 67 - }, - "frame": { - "x": 97, - "y": 0, - "w": 47, - "h": 67 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 8, - "w": 47, - "h": 67 - }, - "frame": { - "x": 97, - "y": 0, - "w": 47, - "h": 67 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 8, - "w": 47, - "h": 67 - }, - "frame": { - "x": 97, - "y": 0, - "w": 47, - "h": 67 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 4, - "w": 47, - "h": 67 - }, - "frame": { - "x": 97, - "y": 0, - "w": 47, - "h": 67 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 6, - "w": 47, - "h": 67 - }, - "frame": { - "x": 97, - "y": 0, - "w": 47, - "h": 67 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 8, - "w": 47, - "h": 67 - }, - "frame": { - "x": 97, - "y": 0, - "w": 47, - "h": 67 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 8, - "w": 47, - "h": 67 - }, - "frame": { - "x": 97, - "y": 0, - "w": 47, - "h": 67 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 4, - "w": 47, - "h": 67 - }, - "frame": { - "x": 97, - "y": 0, - "w": 47, - "h": 67 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 6, - "w": 47, - "h": 67 - }, - "frame": { - "x": 97, - "y": 0, - "w": 47, - "h": 67 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 46, - "h": 67 - }, - "frame": { - "x": 144, - "y": 0, - "w": 46, - "h": 67 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 48, - "h": 66 - }, - "frame": { - "x": 0, - "y": 67, - "w": 48, - "h": 66 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 48, - "y": 12, - "w": 46, - "h": 66 - }, - "frame": { - "x": 48, - "y": 67, - "w": 46, - "h": 66 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 45, - "y": 1, - "w": 45, - "h": 67 - }, - "frame": { - "x": 94, - "y": 67, - "w": 45, - "h": 67 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 12, - "y": 8, - "w": 45, - "h": 67 - }, - "frame": { - "x": 94, - "y": 67, - "w": 45, - "h": 67 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 19, - "y": 5, - "w": 45, - "h": 67 - }, - "frame": { - "x": 94, - "y": 67, - "w": 45, - "h": 67 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 6, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 6, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 4, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 2, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 6, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 6, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 6, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 4, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 2, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 6, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 6, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 6, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 4, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 2, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 6, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 27, - "y": 4, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 25, - "y": 6, - "w": 44, - "h": 67 - }, - "frame": { - "x": 0, - "y": 133, - "w": 44, - "h": 67 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 36, - "y": 2, - "w": 42, - "h": 67 - }, - "frame": { - "x": 44, - "y": 133, - "w": 42, - "h": 67 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 54, - "y": 3, - "w": 42, - "h": 67 - }, - "frame": { - "x": 139, - "y": 67, - "w": 42, - "h": 67 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 23, - "y": 6, - "w": 42, - "h": 67 - }, - "frame": { - "x": 139, - "y": 67, - "w": 42, - "h": 67 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 1, - "y": 12, - "w": 42, - "h": 66 - }, - "frame": { - "x": 86, - "y": 134, - "w": 42, - "h": 66 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 55, - "y": 6, - "w": 41, - "h": 67 - }, - "frame": { - "x": 128, - "y": 134, - "w": 41, - "h": 67 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 41, - "h": 67 - }, - "frame": { - "x": 169, - "y": 134, - "w": 41, - "h": 67 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:a418188ec41514bd9ae14eb24912795a:ee144292ee551fc92c6c10944cfe21d9:17a705bb924916761be2495822a53735$" - } -} diff --git a/public/images/pokemon/exp/shiny/719.png b/public/images/pokemon/exp/shiny/719.png deleted file mode 100644 index a733b44e4b3..00000000000 Binary files a/public/images/pokemon/exp/shiny/719.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/707.json b/public/images/pokemon/exp/shiny/female/6215.json similarity index 62% rename from public/images/pokemon/exp/back/707.json rename to public/images/pokemon/exp/shiny/female/6215.json index b8db4ac17f3..8c8b4e0cf73 100644 --- a/public/images/pokemon/exp/back/707.json +++ b/public/images/pokemon/exp/shiny/female/6215.json @@ -1,2007 +1,33 @@ { "textures": [ { - "image": "707.png", + "image": "6215.png", "format": "RGBA8888", "size": { - "w": 286, - "h": 286 + "w": 230, + "h": 230 }, "scale": 1, "frames": [ - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 10, - "y": 1, - "w": 38, - "h": 72 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 72 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 10, - "y": 1, - "w": 38, - "h": 72 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 72 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 10, - "y": 1, - "w": 38, - "h": 72 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 72 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 9, - "y": 2, - "w": 38, - "h": 72 - }, - "frame": { - "x": 0, - "y": 72, - "w": 38, - "h": 72 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 9, - "y": 2, - "w": 38, - "h": 72 - }, - "frame": { - "x": 0, - "y": 72, - "w": 38, - "h": 72 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 9, - "y": 2, - "w": 38, - "h": 72 - }, - "frame": { - "x": 0, - "y": 72, - "w": 38, - "h": 72 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 38, - "h": 72 - }, - "frame": { - "x": 0, - "y": 144, - "w": 38, - "h": 72 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 72 - }, - "frame": { - "x": 0, - "y": 144, - "w": 38, - "h": 72 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 72 - }, - "frame": { - "x": 0, - "y": 144, - "w": 38, - "h": 72 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 38, - "h": 72 - }, - "frame": { - "x": 0, - "y": 144, - "w": 38, - "h": 72 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 72 - }, - "frame": { - "x": 0, - "y": 144, - "w": 38, - "h": 72 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 72 - }, - "frame": { - "x": 0, - "y": 144, - "w": 38, - "h": 72 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 38, - "h": 72 - }, - "frame": { - "x": 0, - "y": 144, - "w": 38, - "h": 72 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 38, - "h": 72 - }, - "frame": { - "x": 0, - "y": 144, - "w": 38, - "h": 72 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 72 - }, - "frame": { - "x": 0, - "y": 144, - "w": 38, - "h": 72 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 0, - "y": 216, - "w": 42, - "h": 70 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 0, - "y": 216, - "w": 42, - "h": 70 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 0, - "y": 216, - "w": 42, - "h": 70 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 0, - "y": 216, - "w": 42, - "h": 70 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 0, - "y": 216, - "w": 42, - "h": 70 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 0, - "y": 216, - "w": 42, - "h": 70 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 38, - "h": 72 - }, - "frame": { - "x": 38, - "y": 0, - "w": 38, - "h": 72 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 38, - "h": 72 - }, - "frame": { - "x": 38, - "y": 0, - "w": 38, - "h": 72 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 37, - "h": 72 - }, - "frame": { - "x": 38, - "y": 72, - "w": 37, - "h": 72 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 37, - "h": 72 - }, - "frame": { - "x": 38, - "y": 72, - "w": 37, - "h": 72 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 37, - "h": 72 - }, - "frame": { - "x": 38, - "y": 72, - "w": 37, - "h": 72 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 39, - "h": 71 - }, - "frame": { - "x": 38, - "y": 144, - "w": 39, - "h": 71 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 39, - "h": 71 - }, - "frame": { - "x": 38, - "y": 144, - "w": 39, - "h": 71 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 39, - "h": 71 - }, - "frame": { - "x": 38, - "y": 144, - "w": 39, - "h": 71 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 38, - "h": 71 - }, - "frame": { - "x": 42, - "y": 215, - "w": 38, - "h": 71 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 38, - "h": 71 - }, - "frame": { - "x": 42, - "y": 215, - "w": 38, - "h": 71 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 38, - "h": 71 - }, - "frame": { - "x": 42, - "y": 215, - "w": 38, - "h": 71 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 38, - "h": 71 - }, - "frame": { - "x": 42, - "y": 215, - "w": 38, - "h": 71 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 38, - "h": 71 - }, - "frame": { - "x": 42, - "y": 215, - "w": 38, - "h": 71 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 38, - "h": 71 - }, - "frame": { - "x": 42, - "y": 215, - "w": 38, - "h": 71 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 38, - "h": 71 - }, - "frame": { - "x": 75, - "y": 72, - "w": 38, - "h": 71 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 38, - "h": 71 - }, - "frame": { - "x": 75, - "y": 72, - "w": 38, - "h": 71 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 38, - "h": 71 - }, - "frame": { - "x": 75, - "y": 72, - "w": 38, - "h": 71 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 38, - "h": 71 - }, - "frame": { - "x": 75, - "y": 72, - "w": 38, - "h": 71 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 38, - "h": 71 - }, - "frame": { - "x": 75, - "y": 72, - "w": 38, - "h": 71 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 38, - "h": 71 - }, - "frame": { - "x": 75, - "y": 72, - "w": 38, - "h": 71 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 38, - "h": 71 - }, - "frame": { - "x": 77, - "y": 143, - "w": 38, - "h": 71 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 38, - "h": 71 - }, - "frame": { - "x": 77, - "y": 143, - "w": 38, - "h": 71 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 38, - "h": 71 - }, - "frame": { - "x": 77, - "y": 143, - "w": 38, - "h": 71 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 71 - }, - "frame": { - "x": 80, - "y": 214, - "w": 38, - "h": 71 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 71 - }, - "frame": { - "x": 80, - "y": 214, - "w": 38, - "h": 71 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 71 - }, - "frame": { - "x": 80, - "y": 214, - "w": 38, - "h": 71 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 71 - }, - "frame": { - "x": 80, - "y": 214, - "w": 38, - "h": 71 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 71 - }, - "frame": { - "x": 80, - "y": 214, - "w": 38, - "h": 71 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 71 - }, - "frame": { - "x": 80, - "y": 214, - "w": 38, - "h": 71 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 71 - }, - "frame": { - "x": 76, - "y": 0, - "w": 38, - "h": 71 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 71 - }, - "frame": { - "x": 76, - "y": 0, - "w": 38, - "h": 71 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 71 - }, - "frame": { - "x": 76, - "y": 0, - "w": 38, - "h": 71 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 71 - }, - "frame": { - "x": 113, - "y": 71, - "w": 38, - "h": 71 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 71 - }, - "frame": { - "x": 113, - "y": 71, - "w": 38, - "h": 71 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 71 - }, - "frame": { - "x": 113, - "y": 71, - "w": 38, - "h": 71 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 114, - "y": 0, - "w": 42, - "h": 70 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 114, - "y": 0, - "w": 42, - "h": 70 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 114, - "y": 0, - "w": 42, - "h": 70 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 42, - "h": 70 - }, - "frame": { - "x": 115, - "y": 142, - "w": 42, - "h": 70 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 41, - "h": 70 - }, - "frame": { - "x": 151, - "y": 70, - "w": 41, - "h": 70 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 41, - "h": 70 - }, - "frame": { - "x": 151, - "y": 70, - "w": 41, - "h": 70 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 41, - "h": 70 - }, - "frame": { - "x": 151, - "y": 70, - "w": 41, - "h": 70 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 40, - "h": 70 - }, - "frame": { - "x": 156, - "y": 0, - "w": 40, - "h": 70 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 40, - "h": 70 - }, - "frame": { - "x": 156, - "y": 0, - "w": 40, - "h": 70 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 40, - "h": 70 - }, - "frame": { - "x": 156, - "y": 0, - "w": 40, - "h": 70 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 70 - }, - "frame": { - "x": 118, - "y": 212, - "w": 38, - "h": 70 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 70 - }, - "frame": { - "x": 118, - "y": 212, - "w": 38, - "h": 70 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 38, - "h": 70 - }, - "frame": { - "x": 118, - "y": 212, - "w": 38, - "h": 70 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 44, - "h": 69 - }, - "frame": { - "x": 156, - "y": 212, - "w": 44, - "h": 69 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 44, - "h": 69 - }, - "frame": { - "x": 156, - "y": 212, - "w": 44, - "h": 69 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 44, - "h": 69 - }, - "frame": { - "x": 156, - "y": 212, - "w": 44, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 69 - }, - "frame": { - "x": 157, - "y": 140, - "w": 43, - "h": 69 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 69 - }, - "frame": { - "x": 157, - "y": 140, - "w": 43, - "h": 69 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 43, - "h": 69 - }, - "frame": { - "x": 157, - "y": 140, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 43, - "h": 69 - }, - "frame": { - "x": 192, - "y": 70, - "w": 43, - "h": 69 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 43, - "h": 69 - }, - "frame": { - "x": 192, - "y": 70, - "w": 43, - "h": 69 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 43, - "h": 69 - }, - "frame": { - "x": 192, - "y": 70, - "w": 43, - "h": 69 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 69 - }, - "frame": { - "x": 192, - "y": 70, - "w": 43, - "h": 69 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 69 - }, - "frame": { - "x": 192, - "y": 70, - "w": 43, - "h": 69 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 69 - }, - "frame": { - "x": 192, - "y": 70, - "w": 43, - "h": 69 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 69 - }, - "frame": { - "x": 192, - "y": 70, - "w": 43, - "h": 69 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 192, - "y": 70, - "w": 43, - "h": 69 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 43, - "h": 69 - }, - "frame": { - "x": 196, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 43, - "h": 69 - }, - "frame": { - "x": 196, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 43, - "h": 69 - }, - "frame": { - "x": 196, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 43, - "h": 69 - }, - "frame": { - "x": 239, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 43, - "h": 69 - }, - "frame": { - "x": 239, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 235, - "y": 69, - "w": 43, - "h": 69 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 43, - "h": 69 - }, - "frame": { - "x": 235, - "y": 69, - "w": 43, - "h": 69 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 42, - "h": 69 - }, - "frame": { - "x": 235, - "y": 138, - "w": 42, - "h": 69 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 42, - "h": 69 - }, - "frame": { - "x": 235, - "y": 138, - "w": 42, - "h": 69 - } - }, { "filename": "0007.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 48, - "h": 74 + "w": 56, + "h": 54 }, "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 41, - "h": 69 + "x": 1, + "y": 1, + "w": 55, + "h": 50 }, "frame": { - "x": 200, - "y": 207, - "w": 41, - "h": 69 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, + "x": 0, "y": 0, - "w": 41, - "h": 69 - }, - "frame": { - "x": 200, - "y": 207, - "w": 41, - "h": 69 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 41, - "h": 69 - }, - "frame": { - "x": 200, - "y": 207, - "w": 41, - "h": 69 + "w": 55, + "h": 50 } }, { @@ -2009,20 +35,1175 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 48, - "h": 74 + "w": 56, + "h": 54 }, "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 40, - "h": 69 + "x": 1, + "y": 1, + "w": 55, + "h": 50 }, "frame": { - "x": 241, - "y": 207, - "w": 40, - "h": 69 + "x": 0, + "y": 0, + "w": 55, + "h": 50 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 55, + "h": 50 + }, + "frame": { + "x": 0, + "y": 0, + "w": 55, + "h": 50 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 55, + "h": 50 + }, + "frame": { + "x": 0, + "y": 0, + "w": 55, + "h": 50 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 55, + "h": 50 + }, + "frame": { + "x": 0, + "y": 0, + "w": 55, + "h": 50 + } + }, + { + "filename": "0032.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 55, + "h": 50 + }, + "frame": { + "x": 0, + "y": 0, + "w": 55, + "h": 50 + } + }, + { + "filename": "0043.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 55, + "h": 50 + }, + "frame": { + "x": 0, + "y": 0, + "w": 55, + "h": 50 + } + }, + { + "filename": "0044.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 55, + "h": 50 + }, + "frame": { + "x": 0, + "y": 0, + "w": 55, + "h": 50 + } + }, + { + "filename": "0055.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 55, + "h": 50 + }, + "frame": { + "x": 0, + "y": 0, + "w": 55, + "h": 50 + } + }, + { + "filename": "0056.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 55, + "h": 50 + }, + "frame": { + "x": 0, + "y": 0, + "w": 55, + "h": 50 + } + }, + { + "filename": "0067.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 55, + "h": 50 + }, + "frame": { + "x": 0, + "y": 0, + "w": 55, + "h": 50 + } + }, + { + "filename": "0068.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 55, + "h": 50 + }, + "frame": { + "x": 0, + "y": 0, + "w": 55, + "h": 50 + } + }, + { + "filename": "0079.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 55, + "h": 50 + }, + "frame": { + "x": 0, + "y": 50, + "w": 55, + "h": 50 + } + }, + { + "filename": "0080.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 55, + "h": 50 + }, + "frame": { + "x": 0, + "y": 50, + "w": 55, + "h": 50 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 51 + }, + "frame": { + "x": 55, + "y": 0, + "w": 52, + "h": 51 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 51 + }, + "frame": { + "x": 55, + "y": 0, + "w": 52, + "h": 51 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 51 + }, + "frame": { + "x": 55, + "y": 0, + "w": 52, + "h": 51 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 51 + }, + "frame": { + "x": 55, + "y": 0, + "w": 52, + "h": 51 + } + }, + { + "filename": "0027.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 51 + }, + "frame": { + "x": 55, + "y": 0, + "w": 52, + "h": 51 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 51 + }, + "frame": { + "x": 55, + "y": 0, + "w": 52, + "h": 51 + } + }, + { + "filename": "0047.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 51 + }, + "frame": { + "x": 55, + "y": 0, + "w": 52, + "h": 51 + } + }, + { + "filename": "0048.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 51 + }, + "frame": { + "x": 55, + "y": 0, + "w": 52, + "h": 51 + } + }, + { + "filename": "0051.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 51 + }, + "frame": { + "x": 55, + "y": 0, + "w": 52, + "h": 51 + } + }, + { + "filename": "0052.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 51 + }, + "frame": { + "x": 55, + "y": 0, + "w": 52, + "h": 51 + } + }, + { + "filename": "0071.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 51 + }, + "frame": { + "x": 55, + "y": 0, + "w": 52, + "h": 51 + } + }, + { + "filename": "0072.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 51 + }, + "frame": { + "x": 55, + "y": 0, + "w": 52, + "h": 51 + } + }, + { + "filename": "0075.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 51 + }, + "frame": { + "x": 55, + "y": 0, + "w": 52, + "h": 51 + } + }, + { + "filename": "0076.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 51 + }, + "frame": { + "x": 55, + "y": 0, + "w": 52, + "h": 51 + } + }, + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 53, + "h": 50 + }, + "frame": { + "x": 0, + "y": 100, + "w": 53, + "h": 50 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 53, + "h": 50 + }, + "frame": { + "x": 0, + "y": 100, + "w": 53, + "h": 50 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 53, + "h": 50 + }, + "frame": { + "x": 0, + "y": 100, + "w": 53, + "h": 50 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 53, + "h": 50 + }, + "frame": { + "x": 0, + "y": 100, + "w": 53, + "h": 50 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 53, + "h": 50 + }, + "frame": { + "x": 0, + "y": 100, + "w": 53, + "h": 50 + } + }, + { + "filename": "0030.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 53, + "h": 50 + }, + "frame": { + "x": 0, + "y": 100, + "w": 53, + "h": 50 + } + }, + { + "filename": "0045.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 53, + "h": 50 + }, + "frame": { + "x": 0, + "y": 100, + "w": 53, + "h": 50 + } + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 53, + "h": 50 + }, + "frame": { + "x": 0, + "y": 100, + "w": 53, + "h": 50 + } + }, + { + "filename": "0069.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 53, + "h": 50 + }, + "frame": { + "x": 0, + "y": 100, + "w": 53, + "h": 50 + } + }, + { + "filename": "0070.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 53, + "h": 50 + }, + "frame": { + "x": 0, + "y": 100, + "w": 53, + "h": 50 + } + }, + { + "filename": "0077.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 53, + "h": 50 + }, + "frame": { + "x": 0, + "y": 100, + "w": 53, + "h": 50 + } + }, + { + "filename": "0078.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 53, + "h": 50 + }, + "frame": { + "x": 0, + "y": 100, + "w": 53, + "h": 50 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 107, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 107, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 107, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 107, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 107, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 107, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 107, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 107, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0057.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 107, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0058.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 107, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0065.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 107, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0066.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 107, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 161, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 161, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 161, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 161, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 161, + "y": 0, + "w": 54, + "h": 49 } }, { @@ -2030,20 +1211,125 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 48, - "h": 74 + "w": 56, + "h": 54 }, "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 40, - "h": 69 + "x": 2, + "y": 2, + "w": 54, + "h": 49 }, "frame": { - "x": 241, - "y": 207, - "w": 40, - "h": 69 + "x": 161, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 161, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0040.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 161, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0059.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 161, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0060.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 161, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0063.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 54, + "h": 49 + }, + "frame": { + "x": 161, + "y": 0, + "w": 54, + "h": 49 } }, { @@ -2051,20 +1337,734 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 48, - "h": 74 + "w": 56, + "h": 54 }, "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 40, - "h": 69 + "x": 2, + "y": 2, + "w": 54, + "h": 49 }, "frame": { - "x": 241, - "y": 207, - "w": 40, - "h": 69 + "x": 161, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0053.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 53, + "h": 50 + }, + "frame": { + "x": 0, + "y": 150, + "w": 53, + "h": 50 + } + }, + { + "filename": "0054.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 53, + "h": 50 + }, + "frame": { + "x": 0, + "y": 150, + "w": 53, + "h": 50 + } + }, + { + "filename": "0081.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 53, + "h": 50 + }, + "frame": { + "x": 55, + "y": 51, + "w": 53, + "h": 50 + } + }, + { + "filename": "0082.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 53, + "h": 50 + }, + "frame": { + "x": 55, + "y": 51, + "w": 53, + "h": 50 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 54, + "h": 48 + }, + "frame": { + "x": 53, + "y": 101, + "w": 54, + "h": 48 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 54, + "h": 48 + }, + "frame": { + "x": 53, + "y": 101, + "w": 54, + "h": 48 + } + }, + { + "filename": "0037.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 54, + "h": 48 + }, + "frame": { + "x": 53, + "y": 101, + "w": 54, + "h": 48 + } + }, + { + "filename": "0038.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 54, + "h": 48 + }, + "frame": { + "x": 53, + "y": 101, + "w": 54, + "h": 48 + } + }, + { + "filename": "0061.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 54, + "h": 48 + }, + "frame": { + "x": 53, + "y": 101, + "w": 54, + "h": 48 + } + }, + { + "filename": "0062.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 54, + "h": 48 + }, + "frame": { + "x": 53, + "y": 101, + "w": 54, + "h": 48 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 4, + "y": 0, + "w": 50, + "h": 51 + }, + "frame": { + "x": 53, + "y": 149, + "w": 50, + "h": 51 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 4, + "y": 0, + "w": 50, + "h": 51 + }, + "frame": { + "x": 53, + "y": 149, + "w": 50, + "h": 51 + } + }, + { + "filename": "0025.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 4, + "y": 0, + "w": 50, + "h": 51 + }, + "frame": { + "x": 53, + "y": 149, + "w": 50, + "h": 51 + } + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 4, + "y": 0, + "w": 50, + "h": 51 + }, + "frame": { + "x": 53, + "y": 149, + "w": 50, + "h": 51 + } + }, + { + "filename": "0049.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 4, + "y": 0, + "w": 50, + "h": 51 + }, + "frame": { + "x": 53, + "y": 149, + "w": 50, + "h": 51 + } + }, + { + "filename": "0050.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 4, + "y": 0, + "w": 50, + "h": 51 + }, + "frame": { + "x": 53, + "y": 149, + "w": 50, + "h": 51 + } + }, + { + "filename": "0073.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 4, + "y": 0, + "w": 50, + "h": 51 + }, + "frame": { + "x": 53, + "y": 149, + "w": 50, + "h": 51 + } + }, + { + "filename": "0074.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 4, + "y": 0, + "w": 50, + "h": 51 + }, + "frame": { + "x": 53, + "y": 149, + "w": 50, + "h": 51 + } + }, + { + "filename": "0083.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 47, + "h": 47 + }, + "frame": { + "x": 108, + "y": 49, + "w": 47, + "h": 47 + } + }, + { + "filename": "0084.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 47, + "h": 47 + }, + "frame": { + "x": 108, + "y": 49, + "w": 47, + "h": 47 + } + }, + { + "filename": "0097.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 47, + "h": 47 + }, + "frame": { + "x": 155, + "y": 49, + "w": 47, + "h": 47 + } + }, + { + "filename": "0098.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 47, + "h": 47 + }, + "frame": { + "x": 155, + "y": 49, + "w": 47, + "h": 47 + } + }, + { + "filename": "0087.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 47, + "h": 44 + }, + "frame": { + "x": 108, + "y": 96, + "w": 47, + "h": 44 + } + }, + { + "filename": "0088.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 47, + "h": 44 + }, + "frame": { + "x": 108, + "y": 96, + "w": 47, + "h": 44 + } + }, + { + "filename": "0085.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 45, + "h": 46 + }, + "frame": { + "x": 155, + "y": 96, + "w": 45, + "h": 46 + } + }, + { + "filename": "0086.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 45, + "h": 46 + }, + "frame": { + "x": 155, + "y": 96, + "w": 45, + "h": 46 + } + }, + { + "filename": "0089.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 1, + "y": 8, + "w": 45, + "h": 44 + }, + "frame": { + "x": 107, + "y": 140, + "w": 45, + "h": 44 + } + }, + { + "filename": "0090.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 1, + "y": 8, + "w": 45, + "h": 44 + }, + "frame": { + "x": 107, + "y": 140, + "w": 45, + "h": 44 + } + }, + { + "filename": "0091.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 39, + "h": 46 + }, + "frame": { + "x": 103, + "y": 184, + "w": 39, + "h": 46 + } + }, + { + "filename": "0092.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 39, + "h": 46 + }, + "frame": { + "x": 103, + "y": 184, + "w": 39, + "h": 46 + } + }, + { + "filename": "0093.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 38, + "h": 46 + }, + "frame": { + "x": 142, + "y": 184, + "w": 38, + "h": 46 + } + }, + { + "filename": "0094.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 38, + "h": 46 + }, + "frame": { + "x": 142, + "y": 184, + "w": 38, + "h": 46 + } + }, + { + "filename": "0095.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 5, + "y": 8, + "w": 41, + "h": 44 + }, + "frame": { + "x": 180, + "y": 142, + "w": 41, + "h": 44 + } + }, + { + "filename": "0096.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 56, + "h": 54 + }, + "spriteSourceSize": { + "x": 5, + "y": 8, + "w": 41, + "h": 44 + }, + "frame": { + "x": 180, + "y": 142, + "w": 41, + "h": 44 } } ] @@ -2073,6 +2073,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:923b4bcae7da04f16b46037df8433fd0:1631bc30b61a1b4a910dd4510c8733ca:8e96b9056ea81e44ced99c97f472a528$" + "smartupdate": "$TexturePacker:SmartUpdate:edaed3da1123a782356b1ac83d1afd7c:cb0e0681f4dbf68283437f5581a20bb3:736cd88647e79ba7896fc74f9406c2fe$" } } diff --git a/public/images/pokemon/exp/shiny/female/6215.png b/public/images/pokemon/exp/shiny/female/6215.png new file mode 100644 index 00000000000..4e7ea06c60a Binary files /dev/null and b/public/images/pokemon/exp/shiny/female/6215.png differ diff --git a/public/images/pokemon/exp/shiny/female/668.json b/public/images/pokemon/exp/shiny/female/668.json new file mode 100644 index 00000000000..443f13c0b54 --- /dev/null +++ b/public/images/pokemon/exp/shiny/female/668.json @@ -0,0 +1,820 @@ +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 219, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 291, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 62, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 453, "y": 289, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 62, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 441, "y": 360, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 309, "y": 359, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 380, "y": 358, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 317, "y": 289, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 390, "y": 288, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 254, "y": 220, "w": 63, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 63, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 63, "y": 220, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 399, "y": 216, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 64, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 138, "y": 74, "w": 63, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 63, "h": 78 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 201, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 264, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 219, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 291, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 62, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 453, "y": 289, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 62, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 441, "y": 360, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 309, "y": 359, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 380, "y": 358, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 317, "y": 289, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 390, "y": 288, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 254, "y": 220, "w": 63, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 63, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 63, "y": 220, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 399, "y": 216, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 64, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 138, "y": 74, "w": 63, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 63, "h": 78 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 201, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 264, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 0, "y": 219, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 291, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 62, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 453, "y": 289, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 62, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 441, "y": 360, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 309, "y": 359, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 380, "y": 358, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 317, "y": 289, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 390, "y": 288, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 254, "y": 220, "w": 63, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 63, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 63, "y": 220, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 399, "y": 216, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 64, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 138, "y": 74, "w": 63, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 63, "h": 78 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 201, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 264, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 0, "y": 219, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 0, "y": 291, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 62, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 453, "y": 289, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 62, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 441, "y": 360, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 309, "y": 359, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 380, "y": 358, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 317, "y": 289, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 390, "y": 288, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 254, "y": 220, "w": 63, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 63, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 63, "y": 220, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 399, "y": 216, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 64, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 138, "y": 74, "w": 63, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 63, "h": 78 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 201, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 264, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 0, "y": 219, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 0, "y": 147, "w": 64, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 64, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 127, "y": 152, "w": 64, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 64, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 465, "y": 146, "w": 65, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 65, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 399, "y": 146, "w": 66, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 66, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 334, "y": 74, "w": 66, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 66, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 191, "y": 220, "w": 63, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 63, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 126, "y": 223, "w": 62, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 62, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 462, "y": 217, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 188, "y": 291, "w": 61, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 61, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 249, "y": 291, "w": 60, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 60, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 62, "y": 292, "w": 60, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 60, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 122, "y": 295, "w": 60, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 60, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 182, "y": 363, "w": 59, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 59, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 60, "y": 364, "w": 59, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 59, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 0, "y": 362, "w": 60, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 7, "w": 60, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 327, "y": 217, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 268, "y": 74, "w": 66, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 66, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 0, "y": 74, "w": 69, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 69, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 376, "y": 0, "w": 73, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 73, "h": 74 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 227, "y": 0, "w": 75, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 75, "h": 74 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 76, "y": 0, "w": 76, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 76, "h": 74 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 0, "y": 0, "w": 76, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 76, "h": 74 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 152, "y": 0, "w": 75, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 75, "h": 74 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 302, "y": 0, "w": 74, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 74, "h": 74 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 449, "y": 0, "w": 72, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 72, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 449, "y": 73, "w": 71, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 71, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 69, "y": 74, "w": 69, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 69, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 201, "y": 74, "w": 67, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 67, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 334, "y": 145, "w": 65, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 65, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "format": "I8", + "size": { "w": 530, "h": 436 }, + "scale": "1" + } +} diff --git a/public/images/pokemon/exp/shiny/female/668.png b/public/images/pokemon/exp/shiny/female/668.png new file mode 100644 index 00000000000..ad84dc50460 Binary files /dev/null and b/public/images/pokemon/exp/shiny/female/668.png differ diff --git a/public/images/pokemon/female/3.png b/public/images/pokemon/female/3.png index 646157beb32..e21b53dfd57 100644 Binary files a/public/images/pokemon/female/3.png and b/public/images/pokemon/female/3.png differ diff --git a/public/images/pokemon/icons/7/802-zenith.png b/public/images/pokemon/icons/7/802-zenith.png new file mode 100644 index 00000000000..7e0fee2d609 Binary files /dev/null and b/public/images/pokemon/icons/7/802-zenith.png differ diff --git a/public/images/pokemon/icons/7/802s-zenith.png b/public/images/pokemon/icons/7/802s-zenith.png new file mode 100644 index 00000000000..7e0fee2d609 Binary files /dev/null and b/public/images/pokemon/icons/7/802s-zenith.png differ diff --git a/public/images/pokemon/shiny/261.png b/public/images/pokemon/shiny/261.png index 6ae6e5838ce..6976a0747e1 100644 Binary files a/public/images/pokemon/shiny/261.png and b/public/images/pokemon/shiny/261.png differ diff --git a/public/images/pokemon/shiny/3-gigantamax.png b/public/images/pokemon/shiny/3-gigantamax.png index ee4705de701..acc57a41671 100644 Binary files a/public/images/pokemon/shiny/3-gigantamax.png and b/public/images/pokemon/shiny/3-gigantamax.png differ diff --git a/public/images/pokemon/shiny/3.png b/public/images/pokemon/shiny/3.png index fb4545e3019..4afd3847484 100644 Binary files a/public/images/pokemon/shiny/3.png and b/public/images/pokemon/shiny/3.png differ diff --git a/public/images/pokemon/shiny/335.json b/public/images/pokemon/shiny/335.json index ca797f1d7a4..80c43b41c12 100644 --- a/public/images/pokemon/shiny/335.json +++ b/public/images/pokemon/shiny/335.json @@ -1,1910 +1,523 @@ -{ - "textures": [ - { - "image": "335.png", - "format": "RGBA8888", - "size": { - "w": 366, - "h": 366 - }, - "scale": 1, - "frames": [ - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 68, - "h": 63 - }, - "frame": { - "x": 0, - "y": 0, - "w": 68, - "h": 63 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 68, - "h": 63 - }, - "frame": { - "x": 0, - "y": 0, - "w": 68, - "h": 63 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 68, - "h": 63 - }, - "frame": { - "x": 0, - "y": 0, - "w": 68, - "h": 63 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 68, - "h": 63 - }, - "frame": { - "x": 0, - "y": 0, - "w": 68, - "h": 63 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 65, - "h": 66 - }, - "frame": { - "x": 0, - "y": 63, - "w": 65, - "h": 66 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 67, - "h": 63 - }, - "frame": { - "x": 68, - "y": 0, - "w": 67, - "h": 63 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 67, - "h": 63 - }, - "frame": { - "x": 68, - "y": 0, - "w": 67, - "h": 63 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 68, - "h": 61 - }, - "frame": { - "x": 65, - "y": 63, - "w": 68, - "h": 61 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 68, - "h": 61 - }, - "frame": { - "x": 65, - "y": 63, - "w": 68, - "h": 61 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 68, - "h": 61 - }, - "frame": { - "x": 65, - "y": 63, - "w": 68, - "h": 61 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 68, - "h": 61 - }, - "frame": { - "x": 65, - "y": 63, - "w": 68, - "h": 61 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 64, - "h": 63 - }, - "frame": { - "x": 0, - "y": 129, - "w": 64, - "h": 63 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 64, - "h": 63 - }, - "frame": { - "x": 0, - "y": 129, - "w": 64, - "h": 63 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 64, - "h": 63 - }, - "frame": { - "x": 0, - "y": 129, - "w": 64, - "h": 63 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 64, - "h": 63 - }, - "frame": { - "x": 0, - "y": 129, - "w": 64, - "h": 63 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 61, - "h": 66 - }, - "frame": { - "x": 0, - "y": 192, - "w": 61, - "h": 66 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 61, - "h": 66 - }, - "frame": { - "x": 0, - "y": 258, - "w": 61, - "h": 66 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 61, - "h": 66 - }, - "frame": { - "x": 0, - "y": 258, - "w": 61, - "h": 66 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 64, - "h": 62 - }, - "frame": { - "x": 135, - "y": 0, - "w": 64, - "h": 62 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 64, - "h": 62 - }, - "frame": { - "x": 135, - "y": 0, - "w": 64, - "h": 62 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 65, - "h": 61 - }, - "frame": { - "x": 199, - "y": 0, - "w": 65, - "h": 61 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 1, - "y": 8, - "w": 67, - "h": 58 - }, - "frame": { - "x": 264, - "y": 0, - "w": 67, - "h": 58 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 1, - "y": 8, - "w": 67, - "h": 58 - }, - "frame": { - "x": 264, - "y": 0, - "w": 67, - "h": 58 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 1, - "y": 8, - "w": 67, - "h": 58 - }, - "frame": { - "x": 264, - "y": 0, - "w": 67, - "h": 58 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 1, - "y": 8, - "w": 67, - "h": 58 - }, - "frame": { - "x": 264, - "y": 0, - "w": 67, - "h": 58 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 64, - "h": 59 - }, - "frame": { - "x": 65, - "y": 124, - "w": 64, - "h": 59 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 64, - "h": 59 - }, - "frame": { - "x": 65, - "y": 124, - "w": 64, - "h": 59 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 64, - "h": 59 - }, - "frame": { - "x": 65, - "y": 124, - "w": 64, - "h": 59 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 64, - "h": 59 - }, - "frame": { - "x": 65, - "y": 124, - "w": 64, - "h": 59 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 64, - "h": 61 - }, - "frame": { - "x": 64, - "y": 183, - "w": 64, - "h": 61 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 62, - "h": 65 - }, - "frame": { - "x": 61, - "y": 244, - "w": 62, - "h": 65 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 6, - "y": 9, - "w": 63, - "h": 57 - }, - "frame": { - "x": 61, - "y": 309, - "w": 63, - "h": 57 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 61, - "h": 64 - }, - "frame": { - "x": 123, - "y": 244, - "w": 61, - "h": 64 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 1, - "y": 8, - "w": 63, - "h": 58 - }, - "frame": { - "x": 124, - "y": 308, - "w": 63, - "h": 58 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 3, - "y": 5, - "w": 61, - "h": 61 - }, - "frame": { - "x": 128, - "y": 183, - "w": 61, - "h": 61 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 3, - "y": 5, - "w": 61, - "h": 61 - }, - "frame": { - "x": 128, - "y": 183, - "w": 61, - "h": 61 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 3, - "y": 5, - "w": 61, - "h": 61 - }, - "frame": { - "x": 128, - "y": 183, - "w": 61, - "h": 61 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 3, - "y": 5, - "w": 61, - "h": 61 - }, - "frame": { - "x": 128, - "y": 183, - "w": 61, - "h": 61 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 184, - "y": 244, - "w": 60, - "h": 63 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 9, - "w": 62, - "h": 57 - }, - "frame": { - "x": 187, - "y": 307, - "w": 62, - "h": 57 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 9, - "w": 62, - "h": 57 - }, - "frame": { - "x": 187, - "y": 307, - "w": 62, - "h": 57 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 62, - "h": 63 - }, - "frame": { - "x": 264, - "y": 58, - "w": 62, - "h": 63 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 55, - "h": 63 - }, - "frame": { - "x": 133, - "y": 63, - "w": 55, - "h": 63 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 55, - "h": 63 - }, - "frame": { - "x": 133, - "y": 63, - "w": 55, - "h": 63 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 55, - "h": 63 - }, - "frame": { - "x": 133, - "y": 63, - "w": 55, - "h": 63 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 55, - "h": 63 - }, - "frame": { - "x": 133, - "y": 63, - "w": 55, - "h": 63 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 55, - "h": 66 - }, - "frame": { - "x": 188, - "y": 62, - "w": 55, - "h": 66 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 55, - "h": 66 - }, - "frame": { - "x": 188, - "y": 62, - "w": 55, - "h": 66 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 58, - "h": 66 - }, - "frame": { - "x": 189, - "y": 128, - "w": 58, - "h": 66 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 60, - "h": 66 - }, - "frame": { - "x": 247, - "y": 121, - "w": 60, - "h": 66 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 59, - "h": 63 - }, - "frame": { - "x": 307, - "y": 121, - "w": 59, - "h": 63 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 59, - "h": 63 - }, - "frame": { - "x": 307, - "y": 121, - "w": 59, - "h": 63 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 59, - "h": 63 - }, - "frame": { - "x": 307, - "y": 121, - "w": 59, - "h": 63 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 59, - "h": 63 - }, - "frame": { - "x": 307, - "y": 121, - "w": 59, - "h": 63 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 247, - "y": 187, - "w": 60, - "h": 63 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 247, - "y": 187, - "w": 60, - "h": 63 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 247, - "y": 187, - "w": 60, - "h": 63 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 247, - "y": 187, - "w": 60, - "h": 63 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 58, - "h": 63 - }, - "frame": { - "x": 307, - "y": 184, - "w": 58, - "h": 63 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 58, - "h": 63 - }, - "frame": { - "x": 307, - "y": 184, - "w": 58, - "h": 63 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 58, - "h": 63 - }, - "frame": { - "x": 307, - "y": 184, - "w": 58, - "h": 63 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 58, - "h": 63 - }, - "frame": { - "x": 307, - "y": 184, - "w": 58, - "h": 63 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 66 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 60, - "h": 63 - }, - "frame": { - "x": 249, - "y": 250, - "w": 60, - "h": 63 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:0df67af080306e793f3e63687a642a63:bd66cef8682173381b002070c3411214:40bb9f4809624b12bf79bbfe664bea73$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0002.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0003.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0004.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0005.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 185, "w": 59, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 7, "w": 59, "h": 59 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0007.png", + "frame": { "x": 119, "y": 182, "w": 62, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 62, "h": 57 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0008.png", + "frame": { "x": 119, "y": 125, "w": 64, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 64, "h": 57 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0009.png", + "frame": { "x": 195, "y": 0, "w": 66, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 66, "h": 60 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0010.png", + "frame": { "x": 129, "y": 0, "w": 66, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 66, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0011.png", + "frame": { "x": 320, "y": 0, "w": 62, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 62, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0012.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0013.png", + "frame": { "x": 0, "y": 244, "w": 53, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 53, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0014.png", + "frame": { "x": 59, "y": 188, "w": 56, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 56, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0015.png", + "frame": { "x": 306, "y": 187, "w": 57, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 57, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0016.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0017.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0018.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0019.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0020.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0021.png", + "frame": { "x": 0, "y": 185, "w": 59, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 7, "w": 59, "h": 59 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0022.png", + "frame": { "x": 119, "y": 182, "w": 62, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 62, "h": 57 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0023.png", + "frame": { "x": 119, "y": 125, "w": 64, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 64, "h": 57 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0024.png", + "frame": { "x": 195, "y": 0, "w": 66, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 66, "h": 60 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0025.png", + "frame": { "x": 129, "y": 0, "w": 66, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 66, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0026.png", + "frame": { "x": 320, "y": 0, "w": 62, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 62, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0027.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0028.png", + "frame": { "x": 0, "y": 244, "w": 53, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 53, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0029.png", + "frame": { "x": 59, "y": 188, "w": 56, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 56, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0030.png", + "frame": { "x": 306, "y": 187, "w": 57, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 57, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0031.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0032.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0033.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0034.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0035.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 185, "w": 59, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 7, "w": 59, "h": 59 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0037.png", + "frame": { "x": 119, "y": 182, "w": 62, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 62, "h": 57 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0038.png", + "frame": { "x": 119, "y": 125, "w": 64, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 64, "h": 57 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0039.png", + "frame": { "x": 195, "y": 0, "w": 66, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 66, "h": 60 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0040.png", + "frame": { "x": 129, "y": 0, "w": 66, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 66, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0041.png", + "frame": { "x": 320, "y": 0, "w": 62, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 62, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0042.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 244, "w": 53, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 53, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0044.png", + "frame": { "x": 59, "y": 188, "w": 56, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 56, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0045.png", + "frame": { "x": 306, "y": 187, "w": 57, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 57, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0046.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0047.png", + "frame": { "x": 314, "y": 126, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0048.png", + "frame": { "x": 248, "y": 129, "w": 58, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 58, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0049.png", + "frame": { "x": 188, "y": 123, "w": 60, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 60, "h": 61 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0050.png", + "frame": { "x": 0, "y": 125, "w": 61, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 61, "h": 60 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0051.png", + "frame": { "x": 0, "y": 66, "w": 63, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 63, "h": 59 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0052.png", + "frame": { "x": 234, "y": 190, "w": 61, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 61, "h": 56 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0053.png", + "frame": { "x": 234, "y": 246, "w": 60, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 11, "w": 60, "h": 55 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0054.png", + "frame": { "x": 115, "y": 239, "w": 61, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 11, "w": 61, "h": 56 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0055.png", + "frame": { "x": 63, "y": 62, "w": 62, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 7, "w": 62, "h": 60 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0056.png", + "frame": { "x": 63, "y": 0, "w": 66, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 4, "w": 66, "h": 62 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0057.png", + "frame": { "x": 0, "y": 0, "w": 63, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 63, "h": 66 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0058.png", + "frame": { "x": 261, "y": 0, "w": 59, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 59, "h": 66 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0059.png", + "frame": { "x": 181, "y": 184, "w": 53, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 53, "h": 66 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0060.png", + "frame": { "x": 63, "y": 122, "w": 56, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 56, "h": 66 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0061.png", + "frame": { "x": 320, "y": 61, "w": 58, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 58, "h": 65 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0062.png", + "frame": { "x": 129, "y": 61, "w": 59, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 59, "h": 64 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0063.png", + "frame": { "x": 195, "y": 60, "w": 60, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 60, "h": 63 }, + "sourceSize": { "w": 74, "h": 67 } + }, + { + "filename": "0064.png", + "frame": { "x": 255, "y": 66, "w": 59, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 59, "h": 63 }, + "sourceSize": { "w": 74, "h": 67 } + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.9.2-x64", + "image": "335.png", + "format": "I8", + "size": { "w": 382, "h": 305 }, + "scale": "1" + } } diff --git a/public/images/pokemon/shiny/335.png b/public/images/pokemon/shiny/335.png index 765344af6fd..fc7c325a469 100644 Binary files a/public/images/pokemon/shiny/335.png and b/public/images/pokemon/shiny/335.png differ diff --git a/public/images/pokemon/shiny/656.json b/public/images/pokemon/shiny/656.json index be71c2199a3..3776b4ed7e5 100644 --- a/public/images/pokemon/shiny/656.json +++ b/public/images/pokemon/shiny/656.json @@ -1,41 +1,20 @@ -{ - "textures": [ - { - "image": "656.png", - "format": "RGBA8888", - "size": { - "w": 35, - "h": 35 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 35 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:272c02df78d2de4eac23552f4c031224:82f806bb336ca1c034951e96a72caaf5:9c4d208e6c2f857bfb0b23b8eea3326c$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 1, "y": 1, "w": 32, "h": 35 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 32, "h": 35 }, + "sourceSize": { "w": 32, "h": 35 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "656.png", + "format": "I8", + "size": { "w": 34, "h": 37 }, + "scale": "1" + } } diff --git a/public/images/pokemon/shiny/656.png b/public/images/pokemon/shiny/656.png index 7779f40d332..d65d9ab857d 100644 Binary files a/public/images/pokemon/shiny/656.png and b/public/images/pokemon/shiny/656.png differ diff --git a/public/images/pokemon/shiny/658-ash.png b/public/images/pokemon/shiny/658-ash.png index f5de608708e..b25693fd24e 100644 Binary files a/public/images/pokemon/shiny/658-ash.png and b/public/images/pokemon/shiny/658-ash.png differ diff --git a/public/images/pokemon/shiny/668-female.json b/public/images/pokemon/shiny/668-female.json deleted file mode 100644 index ce08b281a62..00000000000 --- a/public/images/pokemon/shiny/668-female.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "textures": [ - { - "image": "668-female.png", - "format": "RGBA8888", - "size": { - "w": 72, - "h": 72 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 63, - "h": 72 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 63, - "h": 72 - }, - "frame": { - "x": 0, - "y": 0, - "w": 63, - "h": 72 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:bf61792d4b290b767953cfbbc5b6234f:c16e73a6866720618f3b4f8e3e0a0877:d99ed0e84a0695b54e479aa98271aba1$" - } -} diff --git a/public/images/pokemon/shiny/668-female.png b/public/images/pokemon/shiny/668-female.png deleted file mode 100644 index 1f56d13bc4c..00000000000 Binary files a/public/images/pokemon/shiny/668-female.png and /dev/null differ diff --git a/public/images/pokemon/shiny/668.png b/public/images/pokemon/shiny/668.png index c8ec7c9caf9..73c11b9a7c7 100644 Binary files a/public/images/pokemon/shiny/668.png and b/public/images/pokemon/shiny/668.png differ diff --git a/public/images/pokemon/shiny/674.json b/public/images/pokemon/shiny/674.json index 0ce6a2d9018..86d6cba1b01 100644 --- a/public/images/pokemon/shiny/674.json +++ b/public/images/pokemon/shiny/674.json @@ -1,41 +1,506 @@ -{ - "textures": [ - { - "image": "674.png", - "format": "RGBA8888", - "size": { - "w": 42, - "h": 42 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 28, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 28, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 28, - "h": 42 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:3a00525649c00ed79ef7fff441994eb0:17d95f774222b5d9946bcc63782468e3:b823d10f1c9b4d501296982088ba63d6$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 58, "y": 0, "w": 28, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 28, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 42, "w": 28, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 28, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 83, "w": 28, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 28, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0004.png", + "frame": { "x": 28, "y": 120, "w": 28, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 28, "h": 39 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 83, "w": 28, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 28, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 42, "w": 28, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 28, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0007.png", + "frame": { "x": 58, "y": 0, "w": 28, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 28, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 42, "w": 28, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 28, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0009.png", + "frame": { "x": 0, "y": 83, "w": 28, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 28, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0010.png", + "frame": { "x": 28, "y": 120, "w": 28, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 28, "h": 39 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 83, "w": 28, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 28, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 42, "w": 28, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 28, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0013.png", + "frame": { "x": 58, "y": 0, "w": 28, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 28, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0014.png", + "frame": { "x": 0, "y": 42, "w": 28, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 28, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0015.png", + "frame": { "x": 0, "y": 83, "w": 28, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 28, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0016.png", + "frame": { "x": 28, "y": 120, "w": 28, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 28, "h": 39 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 83, "w": 28, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 28, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 42, "w": 28, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 28, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0019.png", + "frame": { "x": 58, "y": 0, "w": 28, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 28, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0020.png", + "frame": { "x": 0, "y": 42, "w": 28, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 28, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0021.png", + "frame": { "x": 0, "y": 83, "w": 28, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 28, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0022.png", + "frame": { "x": 28, "y": 120, "w": 28, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 28, "h": 39 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0023.png", + "frame": { "x": 0, "y": 83, "w": 28, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 28, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0024.png", + "frame": { "x": 0, "y": 42, "w": 28, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 28, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0025.png", + "frame": { "x": 58, "y": 0, "w": 28, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 28, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 42, "w": 28, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 28, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 83, "w": 28, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 28, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0028.png", + "frame": { "x": 28, "y": 120, "w": 28, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 28, "h": 39 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0029.png", + "frame": { "x": 0, "y": 83, "w": 28, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 28, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0030.png", + "frame": { "x": 0, "y": 42, "w": 28, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 28, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0031.png", + "frame": { "x": 58, "y": 0, "w": 28, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 28, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0032.png", + "frame": { "x": 58, "y": 42, "w": 28, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 28, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0033.png", + "frame": { "x": 57, "y": 83, "w": 28, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 28, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0034.png", + "frame": { "x": 0, "y": 123, "w": 28, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 28, "h": 39 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0035.png", + "frame": { "x": 57, "y": 83, "w": 28, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 28, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0036.png", + "frame": { "x": 86, "y": 42, "w": 28, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 28, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0038.png", + "frame": { "x": 29, "y": 0, "w": 29, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 29, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0039.png", + "frame": { "x": 29, "y": 41, "w": 29, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 29, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0040.png", + "frame": { "x": 28, "y": 81, "w": 29, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 29, "h": 39 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0041.png", + "frame": { "x": 29, "y": 41, "w": 29, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 29, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0042.png", + "frame": { "x": 29, "y": 0, "w": 29, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 29, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0044.png", + "frame": { "x": 29, "y": 0, "w": 29, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 29, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0045.png", + "frame": { "x": 29, "y": 41, "w": 29, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 29, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0046.png", + "frame": { "x": 28, "y": 81, "w": 29, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 29, "h": 39 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0047.png", + "frame": { "x": 29, "y": 41, "w": 29, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 29, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0048.png", + "frame": { "x": 29, "y": 0, "w": 29, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 29, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 29, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0050.png", + "frame": { "x": 86, "y": 42, "w": 28, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 28, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0051.png", + "frame": { "x": 57, "y": 83, "w": 28, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 28, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0052.png", + "frame": { "x": 0, "y": 123, "w": 28, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 28, "h": 39 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 210 + }, + { + "filename": "0053.png", + "frame": { "x": 85, "y": 83, "w": 28, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 28, "h": 40 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 42, "w": 28, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 28, "h": 41 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 140 + }, + { + "filename": "0055.png", + "frame": { "x": 86, "y": 0, "w": 28, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 28, "h": 42 }, + "sourceSize": { "w": 29, "h": 42 }, + "duration": 70 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "674.png", + "format": "I8", + "size": { "w": 114, "h": 162 }, + "scale": "1" + } } diff --git a/public/images/pokemon/shiny/674.png b/public/images/pokemon/shiny/674.png index 097368405fc..7c8e71d5988 100644 Binary files a/public/images/pokemon/shiny/674.png and b/public/images/pokemon/shiny/674.png differ diff --git a/public/images/pokemon/shiny/694.json b/public/images/pokemon/shiny/694.json index 0893d62dc10..48e9623d7f4 100644 --- a/public/images/pokemon/shiny/694.json +++ b/public/images/pokemon/shiny/694.json @@ -1,41 +1,767 @@ -{ - "textures": [ - { - "image": "694.png", - "format": "RGBA8888", - "size": { - "w": 41, - "h": 41 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 38 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 38 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 38 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:bc6e45d13f38b4219ae03e14bb0999b9:7eab0806a2282a4facdb9684c54189e5:b0990f9650cfe63b836cbed33f0b44d8$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 41, "y": 176, "w": 41, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 41, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 158, "y": 137, "w": 42, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 12, "w": 42, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 133, "w": 43, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 12, "w": 43, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 114, "y": 132, "w": 44, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 12, "w": 44, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 95, "w": 45, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 45, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 227, "y": 131, "w": 46, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 46, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 273, "y": 136, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 13, "w": 44, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 82, "y": 208, "w": 41, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 13, "w": 41, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 246, "y": 211, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 13, "w": 39, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 207, "y": 211, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 13, "w": 39, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 285, "y": 211, "w": 38, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 13, "w": 38, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 123, "y": 213, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 14, "w": 39, "h": 36 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 0, "y": 209, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 13, "w": 40, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 167, "y": 206, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 12, "w": 40, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 200, "y": 168, "w": 41, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 41, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 41, "y": 176, "w": 41, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 41, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 158, "y": 137, "w": 42, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 12, "w": 42, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 133, "w": 43, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 12, "w": 43, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 114, "y": 132, "w": 44, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 12, "w": 44, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 0, "y": 95, "w": 45, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 45, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 227, "y": 131, "w": 46, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 46, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 273, "y": 136, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 13, "w": 44, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 82, "y": 208, "w": 41, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 13, "w": 41, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 246, "y": 211, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 13, "w": 39, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 207, "y": 211, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 13, "w": 39, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 285, "y": 211, "w": 38, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 13, "w": 38, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 123, "y": 213, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 14, "w": 39, "h": 36 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 0, "y": 209, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 13, "w": 40, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 167, "y": 206, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 12, "w": 40, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 200, "y": 168, "w": 41, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 41, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 41, "y": 176, "w": 41, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 41, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 158, "y": 137, "w": 42, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 12, "w": 42, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 0, "y": 133, "w": 43, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 12, "w": 43, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 114, "y": 132, "w": 44, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 12, "w": 44, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 0, "y": 95, "w": 45, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 45, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 227, "y": 131, "w": 46, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 46, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 273, "y": 136, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 13, "w": 44, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 82, "y": 208, "w": 41, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 13, "w": 41, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 246, "y": 211, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 13, "w": 39, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 207, "y": 211, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 13, "w": 39, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 285, "y": 211, "w": 38, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 13, "w": 38, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 123, "y": 213, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 14, "w": 39, "h": 36 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 209, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 13, "w": 40, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 167, "y": 206, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 12, "w": 40, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 200, "y": 168, "w": 41, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 41, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 41, "y": 176, "w": 41, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 41, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 158, "y": 137, "w": 42, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 12, "w": 42, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 0, "y": 133, "w": 43, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 12, "w": 43, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 114, "y": 132, "w": 44, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 12, "w": 44, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 0, "y": 95, "w": 45, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 45, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 227, "y": 131, "w": 46, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 46, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 273, "y": 136, "w": 44, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 13, "w": 44, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 82, "y": 208, "w": 41, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 13, "w": 41, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 246, "y": 211, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 13, "w": 39, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 207, "y": 211, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 13, "w": 39, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 285, "y": 211, "w": 38, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 13, "w": 38, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 123, "y": 213, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 14, "w": 39, "h": 36 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 0, "y": 209, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 13, "w": 40, "h": 37 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 167, "y": 206, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 12, "w": 40, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 200, "y": 168, "w": 41, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 41, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 41, "y": 176, "w": 41, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 41, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 282, "y": 173, "w": 41, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 41, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 241, "y": 173, "w": 41, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 41, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 0, "y": 171, "w": 41, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 41, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 85, "y": 170, "w": 41, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 41, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 227, "y": 93, "w": 52, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 12, "w": 52, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 57, "y": 50, "w": 55, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 55, "h": 39 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 56, "y": 0, "w": 56, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 56, "h": 50 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 112, "y": 0, "w": 56, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 56, "h": 49 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 0, "y": 0, "w": 56, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 56, "h": 50 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 224, "y": 47, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 281, "y": 46, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 168, "y": 0, "w": 56, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 56, "h": 48 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 281, "y": 0, "w": 57, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 57, "h": 46 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 170, "y": 93, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 57, "h": 44 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 224, "y": 0, "w": 57, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 57, "h": 47 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 0, "y": 50, "w": 57, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 45 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 281, "y": 92, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 57, "h": 44 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 57, "y": 94, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 57, "h": 44 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 112, "y": 49, "w": 58, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 58, "h": 45 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 114, "y": 94, "w": 56, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 56, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 170, "y": 48, "w": 53, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 53, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 126, "y": 175, "w": 41, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 12, "w": 41, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 43, "y": 138, "w": 42, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 12, "w": 42, "h": 38 }, + "sourceSize": { "w": 62, "h": 50 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "694.png", + "format": "I8", + "size": { "w": 338, "h": 249 }, + "scale": "1" + } } diff --git a/public/images/pokemon/shiny/694.png b/public/images/pokemon/shiny/694.png index a6c87937252..5f65aa5d4ff 100644 Binary files a/public/images/pokemon/shiny/694.png and b/public/images/pokemon/shiny/694.png differ diff --git a/public/images/pokemon/shiny/698.json b/public/images/pokemon/shiny/698.json index 707a84c8ca1..6baf41b0ce7 100644 --- a/public/images/pokemon/shiny/698.json +++ b/public/images/pokemon/shiny/698.json @@ -1,41 +1,1415 @@ -{ - "textures": [ - { - "image": "698.png", - "format": "RGBA8888", - "size": { - "w": 57, - "h": 57 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 57 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 57 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 57 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:46f728cad32ec7681d76168817f7001a:a044b85c8682cf2b3ce52dd5cb859583:198087d69fed44d4a642fa3ba5c077d6$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0002.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0003.png", + "frame": { "x": 30, "y": 114, "w": 31, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 31, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0004.png", + "frame": { "x": 30, "y": 114, "w": 31, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 31, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0005.png", + "frame": { "x": 123, "y": 113, "w": 29, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 29, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0006.png", + "frame": { "x": 123, "y": 113, "w": 29, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 29, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0007.png", + "frame": { "x": 123, "y": 169, "w": 28, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 28, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0008.png", + "frame": { "x": 123, "y": 169, "w": 28, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 28, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0009.png", + "frame": { "x": 125, "y": 56, "w": 27, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 27, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0010.png", + "frame": { "x": 125, "y": 56, "w": 27, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 27, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0011.png", + "frame": { "x": 125, "y": 56, "w": 27, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 27, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0012.png", + "frame": { "x": 123, "y": 169, "w": 28, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 28, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0013.png", + "frame": { "x": 123, "y": 169, "w": 28, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 28, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0014.png", + "frame": { "x": 123, "y": 113, "w": 29, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 29, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0015.png", + "frame": { "x": 123, "y": 113, "w": 29, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 29, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0016.png", + "frame": { "x": 30, "y": 114, "w": 31, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 31, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0017.png", + "frame": { "x": 30, "y": 114, "w": 31, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 31, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0018.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0019.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0020.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0021.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0022.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0023.png", + "frame": { "x": 111, "y": 0, "w": 34, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 34, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0024.png", + "frame": { "x": 111, "y": 0, "w": 34, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 34, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0025.png", + "frame": { "x": 75, "y": 0, "w": 36, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 36, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0026.png", + "frame": { "x": 75, "y": 0, "w": 36, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 36, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0027.png", + "frame": { "x": 38, "y": 0, "w": 37, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 37, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0028.png", + "frame": { "x": 38, "y": 0, "w": 37, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 37, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0029.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 38, "h": 53 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0030.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 38, "h": 53 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0031.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 38, "h": 53 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0032.png", + "frame": { "x": 38, "y": 0, "w": 37, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 37, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0033.png", + "frame": { "x": 38, "y": 0, "w": 37, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 37, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0034.png", + "frame": { "x": 75, "y": 0, "w": 36, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 36, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0035.png", + "frame": { "x": 75, "y": 0, "w": 36, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 36, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0036.png", + "frame": { "x": 111, "y": 0, "w": 34, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 34, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0037.png", + "frame": { "x": 111, "y": 0, "w": 34, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 34, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0038.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0039.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0040.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0041.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0042.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0043.png", + "frame": { "x": 30, "y": 114, "w": 31, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 31, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0044.png", + "frame": { "x": 30, "y": 114, "w": 31, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 31, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0045.png", + "frame": { "x": 123, "y": 113, "w": 29, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 29, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0046.png", + "frame": { "x": 123, "y": 113, "w": 29, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 29, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0047.png", + "frame": { "x": 123, "y": 169, "w": 28, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 28, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0048.png", + "frame": { "x": 123, "y": 169, "w": 28, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 28, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0049.png", + "frame": { "x": 125, "y": 56, "w": 27, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 27, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0050.png", + "frame": { "x": 125, "y": 56, "w": 27, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 27, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0051.png", + "frame": { "x": 125, "y": 56, "w": 27, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 27, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0052.png", + "frame": { "x": 123, "y": 169, "w": 28, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 28, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0053.png", + "frame": { "x": 123, "y": 169, "w": 28, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 28, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0054.png", + "frame": { "x": 123, "y": 113, "w": 29, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 29, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0055.png", + "frame": { "x": 123, "y": 113, "w": 29, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 29, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0056.png", + "frame": { "x": 30, "y": 114, "w": 31, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 31, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0057.png", + "frame": { "x": 30, "y": 114, "w": 31, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 31, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0058.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0059.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0060.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0063.png", + "frame": { "x": 111, "y": 0, "w": 34, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 34, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0064.png", + "frame": { "x": 111, "y": 0, "w": 34, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 34, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0065.png", + "frame": { "x": 75, "y": 0, "w": 36, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 36, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0066.png", + "frame": { "x": 75, "y": 0, "w": 36, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 36, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0067.png", + "frame": { "x": 38, "y": 0, "w": 37, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 37, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0068.png", + "frame": { "x": 38, "y": 0, "w": 37, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 37, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0069.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 38, "h": 53 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0070.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 38, "h": 53 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0071.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 38, "h": 53 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0072.png", + "frame": { "x": 38, "y": 0, "w": 37, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 37, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0073.png", + "frame": { "x": 38, "y": 0, "w": 37, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 37, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0074.png", + "frame": { "x": 75, "y": 0, "w": 36, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 36, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0075.png", + "frame": { "x": 75, "y": 0, "w": 36, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 36, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0076.png", + "frame": { "x": 111, "y": 0, "w": 34, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 34, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0077.png", + "frame": { "x": 111, "y": 0, "w": 34, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 34, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0078.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0079.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0080.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0081.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0082.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0083.png", + "frame": { "x": 30, "y": 114, "w": 31, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 31, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0084.png", + "frame": { "x": 30, "y": 114, "w": 31, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 31, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0085.png", + "frame": { "x": 123, "y": 113, "w": 29, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 29, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0086.png", + "frame": { "x": 123, "y": 113, "w": 29, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 29, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0087.png", + "frame": { "x": 123, "y": 169, "w": 28, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 28, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0088.png", + "frame": { "x": 123, "y": 169, "w": 28, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 28, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0089.png", + "frame": { "x": 125, "y": 56, "w": 27, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 27, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0090.png", + "frame": { "x": 125, "y": 56, "w": 27, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 27, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0091.png", + "frame": { "x": 125, "y": 56, "w": 27, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 27, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0092.png", + "frame": { "x": 123, "y": 169, "w": 28, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 28, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0093.png", + "frame": { "x": 123, "y": 169, "w": 28, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 28, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0094.png", + "frame": { "x": 123, "y": 113, "w": 29, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 29, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0095.png", + "frame": { "x": 123, "y": 113, "w": 29, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 29, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0096.png", + "frame": { "x": 30, "y": 114, "w": 31, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 31, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0097.png", + "frame": { "x": 30, "y": 114, "w": 31, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 31, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0098.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0099.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0100.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0101.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0102.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0103.png", + "frame": { "x": 111, "y": 0, "w": 34, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 34, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0104.png", + "frame": { "x": 111, "y": 0, "w": 34, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 34, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0105.png", + "frame": { "x": 75, "y": 0, "w": 36, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 36, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0106.png", + "frame": { "x": 75, "y": 0, "w": 36, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 36, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0107.png", + "frame": { "x": 38, "y": 0, "w": 37, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 37, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0108.png", + "frame": { "x": 38, "y": 0, "w": 37, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 37, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0109.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 38, "h": 53 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0110.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 38, "h": 53 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0111.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 38, "h": 53 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0112.png", + "frame": { "x": 38, "y": 0, "w": 37, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 37, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0113.png", + "frame": { "x": 38, "y": 0, "w": 37, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 37, "h": 54 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0114.png", + "frame": { "x": 75, "y": 0, "w": 36, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 36, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0115.png", + "frame": { "x": 75, "y": 0, "w": 36, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 36, "h": 55 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0116.png", + "frame": { "x": 111, "y": 0, "w": 34, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 34, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0117.png", + "frame": { "x": 111, "y": 0, "w": 34, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 34, "h": 56 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0118.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0119.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0120.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0121.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0122.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0123.png", + "frame": { "x": 61, "y": 115, "w": 30, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 30, "h": 58 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0124.png", + "frame": { "x": 61, "y": 115, "w": 30, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 30, "h": 58 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0125.png", + "frame": { "x": 93, "y": 113, "w": 30, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 30, "h": 59 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0126.png", + "frame": { "x": 93, "y": 113, "w": 30, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 30, "h": 59 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0127.png", + "frame": { "x": 0, "y": 113, "w": 30, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 30, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0128.png", + "frame": { "x": 0, "y": 113, "w": 30, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 30, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0129.png", + "frame": { "x": 0, "y": 53, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0130.png", + "frame": { "x": 0, "y": 53, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0131.png", + "frame": { "x": 31, "y": 54, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0132.png", + "frame": { "x": 31, "y": 54, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0133.png", + "frame": { "x": 62, "y": 55, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0134.png", + "frame": { "x": 62, "y": 55, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0135.png", + "frame": { "x": 0, "y": 53, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0136.png", + "frame": { "x": 0, "y": 53, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0137.png", + "frame": { "x": 31, "y": 54, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0138.png", + "frame": { "x": 31, "y": 54, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0139.png", + "frame": { "x": 62, "y": 55, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0140.png", + "frame": { "x": 62, "y": 55, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0141.png", + "frame": { "x": 0, "y": 53, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0142.png", + "frame": { "x": 0, "y": 53, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0143.png", + "frame": { "x": 31, "y": 54, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0144.png", + "frame": { "x": 31, "y": 54, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0145.png", + "frame": { "x": 62, "y": 55, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0146.png", + "frame": { "x": 62, "y": 55, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0147.png", + "frame": { "x": 0, "y": 53, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0148.png", + "frame": { "x": 0, "y": 53, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0149.png", + "frame": { "x": 31, "y": 54, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0150.png", + "frame": { "x": 31, "y": 54, "w": 31, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 31, "h": 60 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0151.png", + "frame": { "x": 93, "y": 113, "w": 30, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 30, "h": 59 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0152.png", + "frame": { "x": 93, "y": 113, "w": 30, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 30, "h": 59 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0153.png", + "frame": { "x": 61, "y": 115, "w": 30, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 30, "h": 58 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0154.png", + "frame": { "x": 61, "y": 115, "w": 30, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 30, "h": 58 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0155.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + }, + { + "filename": "0156.png", + "frame": { "x": 93, "y": 56, "w": 32, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 32, "h": 57 }, + "sourceSize": { "w": 38, "h": 60 }, + "duration": 50 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "698.png", + "format": "I8", + "size": { "w": 152, "h": 224 }, + "scale": "1" + } } diff --git a/public/images/pokemon/shiny/698.png b/public/images/pokemon/shiny/698.png index c04cc11875d..a861e0c14d5 100644 Binary files a/public/images/pokemon/shiny/698.png and b/public/images/pokemon/shiny/698.png differ diff --git a/public/images/pokemon/shiny/703.json b/public/images/pokemon/shiny/703.json index bc3c40dd555..5c0a6230108 100644 --- a/public/images/pokemon/shiny/703.json +++ b/public/images/pokemon/shiny/703.json @@ -1,41 +1,569 @@ -{ - "textures": [ - { - "image": "703.png", - "format": "RGBA8888", - "size": { - "w": 38, - "h": 38 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 37, - "h": 38 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 38 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 38 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:3b9620097a6f8beec26187d7454b0493:5bb102b3070894423e8dff3d1f98cd21:721af8c322ff60159262e9b3017c784d$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 37, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 35, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 71, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 107, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 148, "y": 0, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 38, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 143, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 143, "y": 40, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 35, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 71, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0013.png", + "frame": { "x": 0, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0014.png", + "frame": { "x": 37, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0015.png", + "frame": { "x": 35, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0016.png", + "frame": { "x": 71, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0017.png", + "frame": { "x": 107, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0019.png", + "frame": { "x": 148, "y": 0, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0020.png", + "frame": { "x": 0, "y": 38, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0021.png", + "frame": { "x": 143, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0022.png", + "frame": { "x": 143, "y": 40, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0023.png", + "frame": { "x": 35, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0024.png", + "frame": { "x": 71, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0026.png", + "frame": { "x": 37, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0027.png", + "frame": { "x": 35, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0028.png", + "frame": { "x": 71, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0029.png", + "frame": { "x": 107, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0030.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0031.png", + "frame": { "x": 148, "y": 0, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 38, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0033.png", + "frame": { "x": 143, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0034.png", + "frame": { "x": 143, "y": 40, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0035.png", + "frame": { "x": 35, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0036.png", + "frame": { "x": 71, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0038.png", + "frame": { "x": 37, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0039.png", + "frame": { "x": 35, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0040.png", + "frame": { "x": 71, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0041.png", + "frame": { "x": 107, "y": 38, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0042.png", + "frame": { "x": 0, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0043.png", + "frame": { "x": 148, "y": 0, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0044.png", + "frame": { "x": 0, "y": 38, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 35, "h": 40 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0045.png", + "frame": { "x": 143, "y": 78, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0046.png", + "frame": { "x": 143, "y": 40, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0047.png", + "frame": { "x": 35, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0048.png", + "frame": { "x": 71, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0050.png", + "frame": { "x": 74, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0051.png", + "frame": { "x": 35, "y": 114, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0052.png", + "frame": { "x": 70, "y": 114, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0053.png", + "frame": { "x": 105, "y": 114, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 117, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0055.png", + "frame": { "x": 140, "y": 117, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 117, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0057.png", + "frame": { "x": 0, "y": 117, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0058.png", + "frame": { "x": 0, "y": 117, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0059.png", + "frame": { "x": 35, "y": 153, "w": 35, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 35, "h": 39 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0060.png", + "frame": { "x": 111, "y": 0, "w": 37, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 37, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0061.png", + "frame": { "x": 107, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + }, + { + "filename": "0062.png", + "frame": { "x": 107, "y": 76, "w": 36, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 36, "h": 38 }, + "sourceSize": { "w": 40, "h": 49 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "703.png", + "format": "I8", + "size": { "w": 183, "h": 192 }, + "scale": "1" + } } diff --git a/public/images/pokemon/shiny/703.png b/public/images/pokemon/shiny/703.png index 7d0d7999166..44ac529283c 100644 Binary files a/public/images/pokemon/shiny/703.png and b/public/images/pokemon/shiny/703.png differ diff --git a/public/images/pokemon/shiny/707.json b/public/images/pokemon/shiny/707.json index f0e0b2053ac..ee5036fb541 100644 --- a/public/images/pokemon/shiny/707.json +++ b/public/images/pokemon/shiny/707.json @@ -1,41 +1,1559 @@ -{ - "textures": [ - { - "image": "707.png", - "format": "RGBA8888", - "size": { - "w": 77, - "h": 77 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 77 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 77 - }, - "frame": { - "x": 0, - "y": 0, - "w": 43, - "h": 77 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:f2be0784fdc424d853cf61d4ff5ef128:c0a67b3382e00d7635b97e14ca444b8e:8e96b9056ea81e44ced99c97f472a528$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 335, "y": 370, "w": 43, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 18, "w": 43, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 88, "y": 429, "w": 42, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 17, "w": 42, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 532, "y": 448, "w": 41, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 33, "y": 16, "w": 41, "h": 76 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 490, "y": 432, "w": 42, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 31, "y": 16, "w": 42, "h": 76 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 566, "y": 373, "w": 44, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 15, "w": 44, "h": 75 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 652, "y": 426, "w": 44, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 15, "w": 44, "h": 74 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 289, "y": 330, "w": 46, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 13, "w": 46, "h": 74 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 49, "y": 354, "w": 47, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 14, "w": 47, "h": 72 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 195, "y": 280, "w": 49, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 13, "w": 49, "h": 72 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 629, "y": 153, "w": 53, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 12, "w": 53, "h": 71 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 692, "y": 151, "w": 54, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 13, "w": 54, "h": 70 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 195, "y": 209, "w": 52, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 14, "w": 52, "h": 71 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 247, "y": 215, "w": 51, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 13, "w": 51, "h": 72 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 522, "y": 219, "w": 50, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 50, "h": 72 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 618, "y": 224, "w": 49, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 15, "w": 49, "h": 73 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 352, "y": 296, "w": 47, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 16, "w": 47, "h": 74 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 96, "y": 354, "w": 45, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 29, "y": 16, "w": 45, "h": 75 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 378, "y": 372, "w": 44, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 32, "y": 17, "w": 44, "h": 75 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 276, "y": 404, "w": 43, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 34, "y": 18, "w": 43, "h": 76 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 361, "y": 447, "w": 41, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 17, "w": 41, "h": 76 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 233, "y": 365, "w": 43, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 38, "y": 16, "w": 43, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 618, "y": 297, "w": 44, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 41, "y": 16, "w": 44, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 144, "y": 282, "w": 45, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 42, "y": 15, "w": 45, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 378, "y": 218, "w": 47, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 43, "y": 14, "w": 47, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 100, "y": 199, "w": 48, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 45, "y": 13, "w": 48, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 474, "y": 141, "w": 50, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 47, "y": 13, "w": 50, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 422, "y": 69, "w": 52, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 48, "y": 12, "w": 52, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 707, "y": 2, "w": 54, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 50, "y": 11, "w": 54, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 651, "y": 2, "w": 56, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 48, "y": 12, "w": 56, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 2, "y": 65, "w": 54, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 47, "y": 13, "w": 54, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 273, "y": 69, "w": 53, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 45, "y": 13, "w": 53, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 586, "y": 71, "w": 52, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 43, "y": 14, "w": 52, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 2, "y": 142, "w": 50, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 42, "y": 15, "w": 50, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 52, "y": 199, "w": 48, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 41, "y": 16, "w": 48, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 98, "y": 277, "w": 46, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 39, "y": 16, "w": 46, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 712, "y": 296, "w": 45, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 17, "w": 45, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 335, "y": 370, "w": 43, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 18, "w": 43, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 88, "y": 429, "w": 42, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 17, "w": 42, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 532, "y": 448, "w": 41, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 33, "y": 16, "w": 41, "h": 76 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 490, "y": 432, "w": 42, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 31, "y": 16, "w": 42, "h": 76 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 566, "y": 373, "w": 44, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 15, "w": 44, "h": 75 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 652, "y": 426, "w": 44, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 15, "w": 44, "h": 74 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 289, "y": 330, "w": 46, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 13, "w": 46, "h": 74 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 49, "y": 354, "w": 47, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 14, "w": 47, "h": 72 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 195, "y": 280, "w": 49, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 13, "w": 49, "h": 72 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 629, "y": 153, "w": 53, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 12, "w": 53, "h": 71 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 692, "y": 151, "w": 54, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 13, "w": 54, "h": 70 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 195, "y": 209, "w": 52, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 14, "w": 52, "h": 71 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 247, "y": 215, "w": 51, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 13, "w": 51, "h": 72 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 522, "y": 219, "w": 50, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 50, "h": 72 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 618, "y": 224, "w": 49, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 15, "w": 49, "h": 73 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 352, "y": 296, "w": 47, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 16, "w": 47, "h": 74 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 96, "y": 354, "w": 45, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 29, "y": 16, "w": 45, "h": 75 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 378, "y": 372, "w": 44, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 32, "y": 17, "w": 44, "h": 75 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 276, "y": 404, "w": 43, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 34, "y": 18, "w": 43, "h": 76 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 361, "y": 447, "w": 41, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 17, "w": 41, "h": 76 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 233, "y": 365, "w": 43, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 38, "y": 16, "w": 43, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 618, "y": 297, "w": 44, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 41, "y": 16, "w": 44, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 144, "y": 282, "w": 45, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 42, "y": 15, "w": 45, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 378, "y": 218, "w": 47, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 43, "y": 14, "w": 47, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 100, "y": 199, "w": 48, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 45, "y": 13, "w": 48, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 474, "y": 141, "w": 50, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 47, "y": 13, "w": 50, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 422, "y": 69, "w": 52, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 48, "y": 12, "w": 52, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 707, "y": 2, "w": 54, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 50, "y": 11, "w": 54, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 651, "y": 2, "w": 56, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 48, "y": 12, "w": 56, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 2, "y": 65, "w": 54, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 47, "y": 13, "w": 54, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 273, "y": 69, "w": 53, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 45, "y": 13, "w": 53, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 586, "y": 71, "w": 52, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 43, "y": 14, "w": 52, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 2, "y": 142, "w": 50, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 42, "y": 15, "w": 50, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 52, "y": 199, "w": 48, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 41, "y": 16, "w": 48, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 98, "y": 277, "w": 46, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 39, "y": 16, "w": 46, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 712, "y": 296, "w": 45, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 17, "w": 45, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 335, "y": 370, "w": 43, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 18, "w": 43, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 88, "y": 429, "w": 42, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 17, "w": 42, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 532, "y": 448, "w": 41, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 33, "y": 16, "w": 41, "h": 76 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 490, "y": 432, "w": 42, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 31, "y": 16, "w": 42, "h": 76 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 566, "y": 373, "w": 44, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 15, "w": 44, "h": 75 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 652, "y": 426, "w": 44, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 15, "w": 44, "h": 74 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 289, "y": 330, "w": 46, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 13, "w": 46, "h": 74 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 49, "y": 354, "w": 47, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 14, "w": 47, "h": 72 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 195, "y": 280, "w": 49, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 13, "w": 49, "h": 72 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 629, "y": 153, "w": 53, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 12, "w": 53, "h": 71 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 692, "y": 151, "w": 54, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 13, "w": 54, "h": 70 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 195, "y": 209, "w": 52, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 14, "w": 52, "h": 71 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 247, "y": 215, "w": 51, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 13, "w": 51, "h": 72 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 522, "y": 219, "w": 50, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 50, "h": 72 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 618, "y": 224, "w": 49, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 15, "w": 49, "h": 73 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 352, "y": 296, "w": 47, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 16, "w": 47, "h": 74 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 96, "y": 354, "w": 45, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 29, "y": 16, "w": 45, "h": 75 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 378, "y": 372, "w": 44, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 32, "y": 17, "w": 44, "h": 75 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 276, "y": 404, "w": 43, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 34, "y": 18, "w": 43, "h": 76 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 361, "y": 447, "w": 41, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 17, "w": 41, "h": 76 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 233, "y": 365, "w": 43, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 38, "y": 16, "w": 43, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 618, "y": 297, "w": 44, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 41, "y": 16, "w": 44, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 144, "y": 282, "w": 45, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 42, "y": 15, "w": 45, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 378, "y": 218, "w": 47, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 43, "y": 14, "w": 47, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 100, "y": 199, "w": 48, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 45, "y": 13, "w": 48, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 474, "y": 141, "w": 50, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 47, "y": 13, "w": 50, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 422, "y": 69, "w": 52, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 48, "y": 12, "w": 52, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 707, "y": 2, "w": 54, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 50, "y": 11, "w": 54, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 651, "y": 2, "w": 56, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 48, "y": 12, "w": 56, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 2, "y": 65, "w": 54, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 47, "y": 13, "w": 54, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 273, "y": 69, "w": 53, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 45, "y": 13, "w": 53, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 586, "y": 71, "w": 52, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 43, "y": 14, "w": 52, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 2, "y": 142, "w": 50, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 42, "y": 15, "w": 50, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 52, "y": 199, "w": 48, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 41, "y": 16, "w": 48, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0107.png", + "frame": { "x": 98, "y": 277, "w": 46, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 39, "y": 16, "w": 46, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0108.png", + "frame": { "x": 712, "y": 296, "w": 45, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 17, "w": 45, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0109.png", + "frame": { "x": 335, "y": 370, "w": 43, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 18, "w": 43, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0110.png", + "frame": { "x": 578, "y": 149, "w": 51, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 32, "y": 17, "w": 51, "h": 75 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0111.png", + "frame": { "x": 95, "y": 62, "w": 59, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 14, "w": 59, "h": 73 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0112.png", + "frame": { "x": 519, "y": 2, "w": 67, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 11, "w": 67, "h": 71 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0113.png", + "frame": { "x": 280, "y": 2, "w": 82, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 6, "w": 82, "h": 67 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0114.png", + "frame": { "x": 2, "y": 2, "w": 93, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 93, "h": 63 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0115.png", + "frame": { "x": 95, "y": 2, "w": 95, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 95, "h": 60 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0116.png", + "frame": { "x": 190, "y": 2, "w": 90, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 90, "h": 62 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0117.png", + "frame": { "x": 362, "y": 2, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 83, "h": 65 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0118.png", + "frame": { "x": 445, "y": 2, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 1, "w": 74, "h": 67 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0119.png", + "frame": { "x": 586, "y": 2, "w": 65, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 2, "w": 65, "h": 69 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0120.png", + "frame": { "x": 2, "y": 220, "w": 50, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 4, "w": 50, "h": 72 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0121.png", + "frame": { "x": 319, "y": 447, "w": 42, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 34, "y": 5, "w": 42, "h": 75 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0122.png", + "frame": { "x": 447, "y": 489, "w": 41, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 7, "w": 41, "h": 75 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0123.png", + "frame": { "x": 614, "y": 500, "w": 41, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 10, "w": 41, "h": 75 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0124.png", + "frame": { "x": 573, "y": 453, "w": 41, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 11, "w": 41, "h": 76 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0125.png", + "frame": { "x": 267, "y": 480, "w": 41, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 14, "w": 41, "h": 76 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0126.png", + "frame": { "x": 184, "y": 429, "w": 42, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 14, "w": 42, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0127.png", + "frame": { "x": 2, "y": 443, "w": 41, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 16, "w": 41, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0128.png", + "frame": { "x": 226, "y": 442, "w": 41, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 17, "w": 41, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0129.png", + "frame": { "x": 130, "y": 438, "w": 41, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 18, "w": 41, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0130.png", + "frame": { "x": 2, "y": 366, "w": 43, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 18, "w": 43, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0131.png", + "frame": { "x": 52, "y": 277, "w": 46, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 18, "w": 46, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0132.png", + "frame": { "x": 682, "y": 221, "w": 48, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 18, "w": 48, "h": 75 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0133.png", + "frame": { "x": 519, "y": 361, "w": 47, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 32, "y": 19, "w": 47, "h": 71 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0134.png", + "frame": { "x": 43, "y": 502, "w": 44, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 20, "w": 44, "h": 66 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0135.png", + "frame": { "x": 714, "y": 505, "w": 41, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 29, "y": 20, "w": 41, "h": 67 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0136.png", + "frame": { "x": 402, "y": 489, "w": 45, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 20, "w": 45, "h": 69 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0137.png", + "frame": { "x": 471, "y": 219, "w": 51, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 19, "w": 51, "h": 71 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0138.png", + "frame": { "x": 692, "y": 80, "w": 56, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 19, "w": 56, "h": 71 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0139.png", + "frame": { "x": 389, "y": 147, "w": 54, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 18, "w": 54, "h": 71 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0140.png", + "frame": { "x": 399, "y": 297, "w": 46, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 31, "y": 18, "w": 46, "h": 75 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0141.png", + "frame": { "x": 610, "y": 375, "w": 42, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 18, "w": 42, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0142.png", + "frame": { "x": 141, "y": 360, "w": 43, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 39, "y": 18, "w": 43, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0143.png", + "frame": { "x": 638, "y": 79, "w": 54, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 41, "y": 19, "w": 54, "h": 74 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0144.png", + "frame": { "x": 362, "y": 67, "w": 60, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 42, "y": 19, "w": 60, "h": 69 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0145.png", + "frame": { "x": 474, "y": 73, "w": 59, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 41, "y": 19, "w": 59, "h": 68 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0146.png", + "frame": { "x": 264, "y": 147, "w": 57, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 39, "y": 18, "w": 57, "h": 68 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0147.png", + "frame": { "x": 298, "y": 264, "w": 54, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 18, "w": 54, "h": 66 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0148.png", + "frame": { "x": 524, "y": 148, "w": 54, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 18, "w": 54, "h": 71 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0149.png", + "frame": { "x": 211, "y": 135, "w": 53, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 34, "y": 18, "w": 53, "h": 74 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0150.png", + "frame": { "x": 471, "y": 290, "w": 48, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 32, "y": 19, "w": 48, "h": 73 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0151.png", + "frame": { "x": 569, "y": 302, "w": 48, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 19, "w": 48, "h": 71 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0152.png", + "frame": { "x": 154, "y": 134, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 20, "w": 57, "h": 69 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0153.png", + "frame": { "x": 154, "y": 64, "w": 60, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 20, "w": 60, "h": 70 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0154.png", + "frame": { "x": 214, "y": 64, "w": 59, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 19, "w": 59, "h": 71 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0155.png", + "frame": { "x": 2, "y": 292, "w": 47, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 29, "y": 18, "w": 47, "h": 74 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0156.png", + "frame": { "x": 696, "y": 426, "w": 41, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 39, "y": 18, "w": 41, "h": 79 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0157.png", + "frame": { "x": 533, "y": 73, "w": 53, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 42, "y": 19, "w": 53, "h": 75 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0158.png", + "frame": { "x": 56, "y": 135, "w": 62, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 45, "y": 21, "w": 62, "h": 64 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0159.png", + "frame": { "x": 662, "y": 373, "w": 62, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 45, "y": 22, "w": 62, "h": 53 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0160.png", + "frame": { "x": 655, "y": 505, "w": 59, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 44, "y": 22, "w": 59, "h": 47 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0161.png", + "frame": { "x": 422, "y": 437, "w": 61, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 45, "y": 22, "w": 61, "h": 52 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0162.png", + "frame": { "x": 326, "y": 136, "w": 63, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 45, "y": 21, "w": 63, "h": 62 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0163.png", + "frame": { "x": 321, "y": 198, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 45, "y": 21, "w": 57, "h": 66 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0164.png", + "frame": { "x": 519, "y": 291, "w": 50, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 44, "y": 20, "w": 50, "h": 70 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0165.png", + "frame": { "x": 445, "y": 363, "w": 45, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 43, "y": 20, "w": 45, "h": 74 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0166.png", + "frame": { "x": 45, "y": 426, "w": 43, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 42, "y": 19, "w": 43, "h": 76 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0167.png", + "frame": { "x": 189, "y": 352, "w": 44, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 41, "y": 19, "w": 44, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0168.png", + "frame": { "x": 667, "y": 296, "w": 45, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 41, "y": 19, "w": 45, "h": 77 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0169.png", + "frame": { "x": 425, "y": 218, "w": 46, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 40, "y": 18, "w": 46, "h": 79 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0170.png", + "frame": { "x": 148, "y": 203, "w": 47, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 39, "y": 18, "w": 47, "h": 79 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0171.png", + "frame": { "x": 572, "y": 224, "w": 46, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 38, "y": 18, "w": 46, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + }, + { + "filename": "0172.png", + "frame": { "x": 244, "y": 287, "w": 45, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 18, "w": 45, "h": 78 }, + "sourceSize": { "w": 108, "h": 97 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "707.png", + "format": "I8", + "size": { "w": 763, "h": 577 }, + "scale": "1" + } } diff --git a/public/images/pokemon/shiny/707.png b/public/images/pokemon/shiny/707.png index 2f4efb3e8cb..7aed21b7873 100644 Binary files a/public/images/pokemon/shiny/707.png and b/public/images/pokemon/shiny/707.png differ diff --git a/public/images/pokemon/shiny/708.json b/public/images/pokemon/shiny/708.json index 06631af7cb8..abc8d24db2b 100644 --- a/public/images/pokemon/shiny/708.json +++ b/public/images/pokemon/shiny/708.json @@ -1,41 +1,1091 @@ -{ - "textures": [ - { - "image": "708.png", - "format": "RGBA8888", - "size": { - "w": 44, - "h": 44 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 44, - "h": 40 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 44, - "h": 40 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:5ae7df27c9e36b2c06c09056297b74ab:efbc3a2251be2a5a300a0c333bce242b:796c82c5076b122f2663381836c65843$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 270, "y": 124, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 45, "y": 166, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 207, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 7, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 0, "y": 84, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 8, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 45, "y": 84, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 8, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 180, "y": 42, "w": 45, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 45, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 226, "y": 42, "w": 45, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 45, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 90, "y": 84, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 135, "y": 84, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 180, "y": 124, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 225, "y": 124, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 45, "y": 42, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 90, "y": 42, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 135, "y": 42, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 0, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 6, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 45, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 7, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 90, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 8, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 272, "y": 42, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 8, "w": 43, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 180, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 8, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 225, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 5, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 270, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 3, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 0, "y": 42, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 0, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 135, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 0, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 0, "y": 125, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 0, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 45, "y": 125, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 2, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 270, "y": 124, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 45, "y": 166, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 0, "y": 207, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 7, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 0, "y": 84, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 8, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 45, "y": 84, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 8, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 180, "y": 42, "w": 45, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 45, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 226, "y": 42, "w": 45, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 45, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 90, "y": 84, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 135, "y": 84, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 180, "y": 124, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 225, "y": 124, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 45, "y": 42, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 90, "y": 42, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 135, "y": 42, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 0, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 6, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 45, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 7, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 90, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 8, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 272, "y": 42, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 8, "w": 43, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 180, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 8, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 225, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 5, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 270, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 3, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 0, "y": 42, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 0, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 135, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 0, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 125, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 0, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 45, "y": 125, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 2, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 270, "y": 124, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 45, "y": 166, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 0, "y": 207, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 7, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 84, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 8, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 45, "y": 84, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 8, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 180, "y": 42, "w": 45, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 45, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 226, "y": 42, "w": 45, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 45, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 90, "y": 84, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 135, "y": 84, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 180, "y": 124, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 225, "y": 124, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 45, "y": 42, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 90, "y": 42, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 135, "y": 42, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 0, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 6, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 45, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 7, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 90, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 8, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 272, "y": 42, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 8, "w": 43, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 180, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 8, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 225, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 5, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 270, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 3, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 0, "y": 42, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 0, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 135, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 0, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 0, "y": 125, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 0, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 45, "y": 125, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 2, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 270, "y": 124, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 45, "y": 166, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 0, "y": 207, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 7, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 0, "y": 84, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 8, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 45, "y": 84, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 8, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 180, "y": 42, "w": 45, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 45, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 226, "y": 42, "w": 45, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 45, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 90, "y": 84, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 135, "y": 84, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 180, "y": 124, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 225, "y": 124, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 45, "y": 42, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 90, "y": 42, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 135, "y": 42, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 0, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 6, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 45, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 7, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 90, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 8, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 272, "y": 42, "w": 43, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 8, "w": 43, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 180, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 8, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 225, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 5, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 270, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 3, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 0, "y": 42, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 0, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 135, "y": 0, "w": 44, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 0, "w": 44, "h": 41 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 0, "y": 125, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 0, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 45, "y": 125, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 2, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 270, "y": 124, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 90, "y": 125, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 135, "y": 125, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 8, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 90, "y": 207, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 10, "w": 43, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 134, "y": 207, "w": 43, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 12, "w": 43, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 180, "y": 165, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 14, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0107.png", + "frame": { "x": 225, "y": 165, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 15, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0108.png", + "frame": { "x": 270, "y": 165, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 17, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0109.png", + "frame": { "x": 0, "y": 166, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 19, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0110.png", + "frame": { "x": 270, "y": 206, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 21, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0111.png", + "frame": { "x": 90, "y": 166, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 23, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0112.png", + "frame": { "x": 135, "y": 166, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 21, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0113.png", + "frame": { "x": 180, "y": 206, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 20, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0114.png", + "frame": { "x": 225, "y": 206, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 18, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0115.png", + "frame": { "x": 268, "y": 247, "w": 44, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 16, "w": 44, "h": 39 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0116.png", + "frame": { "x": 178, "y": 247, "w": 44, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 15, "w": 44, "h": 39 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0117.png", + "frame": { "x": 223, "y": 247, "w": 44, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 13, "w": 44, "h": 39 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0118.png", + "frame": { "x": 226, "y": 83, "w": 45, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 10, "w": 45, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0119.png", + "frame": { "x": 45, "y": 207, "w": 44, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 8, "w": 44, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + }, + { + "filename": "0120.png", + "frame": { "x": 180, "y": 83, "w": 45, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 6, "w": 45, "h": 40 }, + "sourceSize": { "w": 70, "h": 63 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "708.png", + "format": "I8", + "size": { "w": 315, "h": 286 }, + "scale": "1" + } } diff --git a/public/images/pokemon/shiny/708.png b/public/images/pokemon/shiny/708.png index 1da0441109b..d94b1286590 100644 Binary files a/public/images/pokemon/shiny/708.png and b/public/images/pokemon/shiny/708.png differ diff --git a/public/images/pokemon/shiny/714.json b/public/images/pokemon/shiny/714.json index 992ff63a393..b43aebd68a1 100644 --- a/public/images/pokemon/shiny/714.json +++ b/public/images/pokemon/shiny/714.json @@ -1,41 +1,263 @@ -{ - "textures": [ - { - "image": "714.png", - "format": "RGBA8888", - "size": { - "w": 64, - "h": 64 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 64, - "h": 57 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 64, - "h": 57 - }, - "frame": { - "x": 0, - "y": 0, - "w": 64, - "h": 57 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:0faf41a70733397a2e765b77d2cf3124:ed661ea37221a00e42647a088e380efd:1a07d46e710b0568ec824f54fbc4fe6a$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 1, "y": 1, "w": 64, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 64, "h": 57 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0002.png", + "frame": { "x": 133, "y": 1, "w": 64, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 64, "h": 56 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0003.png", + "frame": { "x": 1, "y": 60, "w": 61, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 61, "h": 55 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0004.png", + "frame": { "x": 184, "y": 117, "w": 32, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 32, "h": 67 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0005.png", + "frame": { "x": 50, "y": 119, "w": 33, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 33, "h": 63 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0006.png", + "frame": { "x": 199, "y": 1, "w": 47, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 47, "h": 56 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0007.png", + "frame": { "x": 64, "y": 60, "w": 47, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 47, "h": 57 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0008.png", + "frame": { "x": 1, "y": 1, "w": 64, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 64, "h": 57 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0009.png", + "frame": { "x": 133, "y": 1, "w": 64, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 64, "h": 56 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0010.png", + "frame": { "x": 1, "y": 60, "w": 61, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 8, "w": 61, "h": 55 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0011.png", + "frame": { "x": 184, "y": 117, "w": 32, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 3, "w": 32, "h": 67 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0012.png", + "frame": { "x": 50, "y": 119, "w": 33, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 3, "w": 33, "h": 63 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0013.png", + "frame": { "x": 199, "y": 1, "w": 47, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 1, "w": 47, "h": 56 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0014.png", + "frame": { "x": 64, "y": 60, "w": 47, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 47, "h": 57 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0015.png", + "frame": { "x": 1, "y": 1, "w": 64, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 64, "h": 57 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0016.png", + "frame": { "x": 133, "y": 1, "w": 64, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 64, "h": 56 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0017.png", + "frame": { "x": 133, "y": 59, "w": 61, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 61, "h": 56 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0018.png", + "frame": { "x": 113, "y": 117, "w": 33, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 33, "h": 68 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0019.png", + "frame": { "x": 148, "y": 117, "w": 34, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 34, "h": 64 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0020.png", + "frame": { "x": 1, "y": 117, "w": 47, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 47, "h": 57 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0021.png", + "frame": { "x": 64, "y": 60, "w": 47, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 47, "h": 57 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0022.png", + "frame": { "x": 1, "y": 1, "w": 64, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 64, "h": 57 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0023.png", + "frame": { "x": 67, "y": 1, "w": 64, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 64, "h": 57 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0024.png", + "frame": { "x": 196, "y": 59, "w": 61, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 7, "w": 61, "h": 56 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0025.png", + "frame": { "x": 113, "y": 117, "w": 33, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 2, "w": 33, "h": 68 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0026.png", + "frame": { "x": 218, "y": 117, "w": 33, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 2, "w": 33, "h": 64 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0027.png", + "frame": { "x": 199, "y": 1, "w": 47, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 1, "w": 47, "h": 56 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + }, + { + "filename": "0028.png", + "frame": { "x": 64, "y": 60, "w": 47, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 47, "h": 57 }, + "sourceSize": { "w": 66, "h": 70 }, + "duration": 50 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "714.png", + "format": "I8", + "size": { "w": 258, "h": 186 }, + "scale": "1" + } } diff --git a/public/images/pokemon/shiny/714.png b/public/images/pokemon/shiny/714.png index 2cde838873a..924c67d3c85 100644 Binary files a/public/images/pokemon/shiny/714.png and b/public/images/pokemon/shiny/714.png differ diff --git a/public/images/pokemon/shiny/718-10.json b/public/images/pokemon/shiny/718-10.json index 05c86055ce7..ad273c9ea79 100644 --- a/public/images/pokemon/shiny/718-10.json +++ b/public/images/pokemon/shiny/718-10.json @@ -1,41 +1,686 @@ -{ - "textures": [ - { - "image": "718-10.png", - "format": "RGBA8888", - "size": { - "w": 66, - "h": 66 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 56, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 66 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 66 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:ddb567f3553fb8f8477733fc8b91dfb8:21520f234fc9684cd172bbced8ed083b:82195cf2a6db620c5643b8162d6e8c5c$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 57, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 57, "h": 67 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 173, "y": 0, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 230, "y": 0, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 57, "y": 0, "w": 58, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 58, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 115, "y": 0, "w": 58, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 58, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 171, "y": 66, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 229, "y": 66, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 287, "y": 66, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 171, "y": 130, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 229, "y": 130, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 67, "w": 57, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 57, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 287, "y": 0, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 57, "y": 65, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 114, "y": 65, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 0, "y": 0, "w": 57, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 57, "h": 67 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 173, "y": 0, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 230, "y": 0, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 57, "y": 0, "w": 58, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 58, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 115, "y": 0, "w": 58, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 58, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 171, "y": 66, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 229, "y": 66, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 287, "y": 66, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 171, "y": 130, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 229, "y": 130, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 67, "w": 57, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 57, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 287, "y": 0, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 57, "y": 65, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 114, "y": 65, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 0, "y": 0, "w": 57, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 57, "h": 67 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 173, "y": 0, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 230, "y": 0, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 57, "y": 0, "w": 58, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 58, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 115, "y": 0, "w": 58, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 58, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 171, "y": 66, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 229, "y": 66, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 287, "y": 66, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 171, "y": 130, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 229, "y": 130, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 0, "y": 67, "w": 57, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 57, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 287, "y": 0, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 57, "y": 65, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 114, "y": 65, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 0, "w": 57, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 57, "h": 67 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 173, "y": 0, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 230, "y": 0, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 57, "y": 0, "w": 58, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 58, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 115, "y": 0, "w": 58, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 58, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 171, "y": 66, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 229, "y": 66, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 287, "y": 66, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 171, "y": 130, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 229, "y": 130, "w": 58, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 58, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 0, "y": 67, "w": 57, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 57, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 287, "y": 0, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 57, "y": 65, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 114, "y": 65, "w": 57, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 57, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 287, "y": 130, "w": 56, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 56, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 57, "y": 131, "w": 56, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 56, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 164, "y": 261, "w": 56, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 56, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 0, "y": 327, "w": 56, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 56, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 56, "y": 327, "w": 56, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 56, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 169, "y": 329, "w": 57, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 57, "h": 62 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 112, "y": 326, "w": 57, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 57, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 54, "y": 265, "w": 58, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 58, "h": 62 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 226, "y": 332, "w": 56, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 56, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 220, "y": 261, "w": 53, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 53, "h": 68 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 273, "y": 264, "w": 53, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 53, "h": 68 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 279, "y": 196, "w": 54, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 54, "h": 68 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 56, "y": 197, "w": 54, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 54, "h": 68 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 110, "y": 197, "w": 54, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 54, "h": 68 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 0, "y": 198, "w": 54, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 54, "h": 68 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 169, "y": 194, "w": 55, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 55, "h": 67 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 224, "y": 194, "w": 55, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 55, "h": 67 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 0, "y": 132, "w": 56, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 56, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 113, "y": 131, "w": 56, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 56, "h": 66 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "718-10.png", + "format": "I8", + "size": { "w": 345, "h": 395 }, + "scale": "1" + } } diff --git a/public/images/pokemon/shiny/718-10.png b/public/images/pokemon/shiny/718-10.png index bee16c7ec63..f976d91b4f6 100644 Binary files a/public/images/pokemon/shiny/718-10.png and b/public/images/pokemon/shiny/718-10.png differ diff --git a/public/images/pokemon/shiny/718.json b/public/images/pokemon/shiny/718.json index 00e4c68ba00..98053a226cb 100644 --- a/public/images/pokemon/shiny/718.json +++ b/public/images/pokemon/shiny/718.json @@ -1,41 +1,803 @@ -{ - "textures": [ - { - "image": "718.png", - "format": "RGBA8888", - "size": { - "w": 88, - "h": 88 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 72, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 72, - "h": 88 - }, - "frame": { - "x": 0, - "y": 0, - "w": 72, - "h": 88 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:6daa10e13b8729f3ebc27b1a8eb1c6cb:65f7940d781324b41eba39e9e5565cb7:7b4a06b06cbac24b3f39727b0238661b$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 294, "y": 438, "w": 72, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 72, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 442, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 71, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 437, "y": 441, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 71, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 145, "y": 441, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 71, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 366, "y": 440, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 71, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 223, "y": 267, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 73, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 296, "y": 350, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 73, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 384, "y": 177, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 459, "y": 177, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 452, "y": 265, "w": 74, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 74, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 76, "y": 178, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 233, "y": 90, "w": 75, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 75, "h": 89 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 151, "y": 178, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 0, "y": 179, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 75, "y": 266, "w": 74, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 74, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 369, "y": 352, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 73, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 294, "y": 438, "w": 72, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 72, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 442, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 71, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 437, "y": 441, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 71, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 145, "y": 441, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 71, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 366, "y": 440, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 71, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 223, "y": 267, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 73, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 296, "y": 350, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 73, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 384, "y": 177, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 459, "y": 177, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 452, "y": 265, "w": 74, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 74, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 76, "y": 178, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 233, "y": 90, "w": 75, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 75, "h": 89 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 151, "y": 178, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 0, "y": 179, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 75, "y": 266, "w": 74, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 74, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 369, "y": 352, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 73, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 294, "y": 438, "w": 72, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 72, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 0, "y": 442, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 71, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 437, "y": 441, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 71, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 145, "y": 441, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 71, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 366, "y": 440, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 71, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 223, "y": 267, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 73, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 296, "y": 350, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 73, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 384, "y": 177, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 459, "y": 177, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 452, "y": 265, "w": 74, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 74, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 76, "y": 178, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 233, "y": 90, "w": 75, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 75, "h": 89 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 151, "y": 178, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 0, "y": 179, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 75, "y": 266, "w": 74, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 74, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 369, "y": 352, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 73, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 294, "y": 438, "w": 72, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 72, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 0, "y": 442, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 71, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 437, "y": 441, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 71, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 145, "y": 441, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 71, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 366, "y": 440, "w": 71, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 71, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 223, "y": 267, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 73, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 296, "y": 350, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 73, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 384, "y": 177, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 459, "y": 177, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 452, "y": 265, "w": 74, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 74, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 76, "y": 178, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 233, "y": 90, "w": 75, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 75, "h": 89 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 151, "y": 178, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 0, "y": 179, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 75, "y": 266, "w": 74, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 74, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 369, "y": 352, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 73, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 222, "y": 355, "w": 72, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 72, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 73, "y": 354, "w": 72, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 72, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 149, "y": 353, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 73, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 442, "y": 353, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 73, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 149, "y": 266, "w": 74, "h": 87 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 74, "h": 87 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 377, "y": 265, "w": 75, "h": 87 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 75, "h": 87 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 308, "y": 177, "w": 76, "h": 87 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 76, "h": 87 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 76, "y": 91, "w": 76, "h": 87 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 76, "h": 87 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 301, "y": 264, "w": 76, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 76, "h": 86 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 0, "y": 267, "w": 74, "h": 87 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 74, "h": 87 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 0, "y": 90, "w": 76, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 76, "h": 89 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 391, "y": 88, "w": 77, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 77, "h": 89 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 79, "y": 0, "w": 78, "h": 91 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 78, "h": 91 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 468, "y": 88, "w": 77, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 77, "h": 89 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 157, "y": 0, "w": 78, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 78, "h": 90 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 313, "y": 0, "w": 78, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 78, "h": 89 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 0, "y": 0, "w": 79, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 79, "h": 90 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 391, "y": 0, "w": 78, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 78, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 235, "y": 0, "w": 78, "h": 90 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 1, "w": 78, "h": 90 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 469, "y": 0, "w": 78, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 78, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 313, "y": 89, "w": 77, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 77, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 157, "y": 90, "w": 76, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 76, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 226, "y": 179, "w": 75, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 75, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 0, "y": 354, "w": 73, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 73, "h": 88 }, + "sourceSize": { "w": 88, "h": 92 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "718.png", + "format": "I8", + "size": { "w": 547, "h": 530 }, + "scale": "1" + } } diff --git a/public/images/pokemon/shiny/718.png b/public/images/pokemon/shiny/718.png index cdfa42ccec7..778ae8bff07 100644 Binary files a/public/images/pokemon/shiny/718.png and b/public/images/pokemon/shiny/718.png differ diff --git a/public/images/pokemon/shiny/719.json b/public/images/pokemon/shiny/719.json index 29e48d3b3be..12a679f029f 100644 --- a/public/images/pokemon/shiny/719.json +++ b/public/images/pokemon/shiny/719.json @@ -1,41 +1,875 @@ -{ - "textures": [ - { - "image": "719.png", - "format": "RGBA8888", - "size": { - "w": 65, - "h": 65 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 42, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 42, - "h": 65 - }, - "frame": { - "x": 0, - "y": 0, - "w": 42, - "h": 65 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:f62b9cce190b10d691ae00fdc87df448:371601e6d1aa56d47c80c70305627ce1:17a705bb924916761be2495822a53735$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 11, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 41, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 82, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 8, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 123, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 164, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 6, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 40, "y": 140, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 39, "y": 210, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 77, "y": 210, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 79, "y": 140, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 118, "y": 140, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 82, "y": 70, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 40, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 205, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 0, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 11, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 41, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 82, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 8, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 123, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 164, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 6, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 40, "y": 140, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 39, "y": 210, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 77, "y": 210, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 79, "y": 140, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 118, "y": 140, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 82, "y": 70, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 40, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 205, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 11, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 41, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 82, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 8, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 123, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 164, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 6, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 40, "y": 140, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 39, "y": 210, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 77, "y": 210, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 79, "y": 140, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 118, "y": 140, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 82, "y": 70, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 40, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 205, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 11, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 41, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 82, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 8, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 123, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 164, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 6, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 40, "y": 140, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 39, "y": 210, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 3, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 77, "y": 210, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 79, "y": 140, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 118, "y": 140, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 82, "y": 70, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 40, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 205, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 11, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 122, "y": 70, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 9, "w": 40, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 162, "y": 70, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 7, "w": 40, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 115, "y": 210, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 153, "y": 210, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 74, "y": 350, "w": 37, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 37, "h": 69 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 37, "y": 350, "w": 37, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 37, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 111, "y": 350, "w": 35, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 35, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 190, "y": 280, "w": 37, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 191, "y": 210, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 157, "y": 140, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 8, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 202, "y": 70, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 10, "w": 40, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 0, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 11, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 0, "y": 70, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 10, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 0, "y": 140, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 9, "w": 40, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 196, "y": 140, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 8, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 0, "y": 280, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 6, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 38, "y": 280, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 5, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 76, "y": 280, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 4, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 0, "y": 350, "w": 37, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 4, "w": 37, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 114, "y": 280, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 6, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 152, "y": 280, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 7, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 0, "y": 210, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 9, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 41, "y": 70, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 0, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 11, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 122, "y": 70, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 9, "w": 40, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 162, "y": 70, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 7, "w": 40, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 115, "y": 210, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 153, "y": 210, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 74, "y": 350, "w": 37, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 37, "h": 69 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 37, "y": 350, "w": 37, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 37, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 111, "y": 350, "w": 35, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 35, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 190, "y": 280, "w": 37, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 37, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 191, "y": 210, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 157, "y": 140, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 8, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 202, "y": 70, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 10, "w": 40, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 0, "y": 0, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 11, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 0, "y": 70, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 10, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 0, "y": 140, "w": 40, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 9, "w": 40, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 196, "y": 140, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 8, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 0, "y": 280, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 6, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 38, "y": 280, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 5, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 76, "y": 280, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 4, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 0, "y": 350, "w": 37, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 4, "w": 37, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 114, "y": 280, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 6, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 152, "y": 280, "w": 38, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 7, "w": 38, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 0, "y": 210, "w": 39, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 9, "w": 39, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 41, "y": 70, "w": 41, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 41, "h": 70 }, + "sourceSize": { "w": 63, "h": 81 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "719.png", + "format": "I8", + "size": { "w": 246, "h": 420 }, + "scale": "1" + } } diff --git a/public/images/pokemon/shiny/719.png b/public/images/pokemon/shiny/719.png index f17e9b23ca8..c466201632a 100644 Binary files a/public/images/pokemon/shiny/719.png and b/public/images/pokemon/shiny/719.png differ diff --git a/public/images/pokemon/shiny/female/3.png b/public/images/pokemon/shiny/female/3.png index aeacf461779..ec5a9849e60 100644 Binary files a/public/images/pokemon/shiny/female/3.png and b/public/images/pokemon/shiny/female/3.png differ diff --git a/public/images/pokemon/shiny/female/668.png b/public/images/pokemon/shiny/female/668.png index 1f56d13bc4c..ec0d2338fac 100644 Binary files a/public/images/pokemon/shiny/female/668.png and b/public/images/pokemon/shiny/female/668.png differ diff --git a/public/images/pokemon/variant/248-mega.json b/public/images/pokemon/variant/248-mega.json index f515868233f..589b3616079 100644 --- a/public/images/pokemon/variant/248-mega.json +++ b/public/images/pokemon/variant/248-mega.json @@ -1,17 +1,34 @@ { + "1": { +"4a5a39": "533334", +"821610": "004194", +"942900": "004194", +"d0243b": "006fb3", +"d55200": "0098fc", +"ff3e40": "0098fc", +"f24159": "088a72", +"f55e72": "18b8a0", +"ff6668": "1cd9ff", +"739c62": "915957", +"ff8385": "00e0fc", +"ffa3a4": "00ffc8", +"accd9c": "c78482", +"dee6cd": "dbb1b5" + }, "2": { - "4a5a39": "06092f", - "101010": "101010", - "dee6cd": "7068b2", - "accd9c": "625695", - "739c62": "2c3071", - "942900": "ee7b06", - "fefefe": "fefefe", - "c5c5c5": "c5c5c5", - "d55200": "ffa904", - "d0243b": "ffa904", - "ff3e40": "ffef76", - "821610": "ee7b06", - "737373": "737373" +"4a5a39": "06092f", +"821610": "ee7b06", +"942900": "ee7b06", +"d0243b": "ffa904", +"d55200": "ffa904", +"ff3e40": "ffef76", +"f24159": "ff9224", +"f55e72": "ffba36", +"ff6668": "fff28f", +"739c62": "2c3071", +"ff8385": "fff49a", +"ffa3a4": "fff9ce", +"accd9c": "625695", +"dee6cd": "7068b2" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/248-mega_2.json b/public/images/pokemon/variant/248-mega_2.json deleted file mode 100644 index 9ef7d417209..00000000000 --- a/public/images/pokemon/variant/248-mega_2.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "textures": [ - { - "image": "248-mega_2.png", - "format": "RGBA8888", - "size": { - "w": 90, - "h": 90 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 90, - "h": 84 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 90, - "h": 84 - }, - "frame": { - "x": 0, - "y": 0, - "w": 90, - "h": 84 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:e4a1fe4fbac618754df7eb3fcf91b617:0e98725eab652ee45ee2526551c77350:90df97eb431b7162252516cb937a0b9e$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/248-mega_2.png b/public/images/pokemon/variant/248-mega_2.png deleted file mode 100644 index 1aade727abf..00000000000 Binary files a/public/images/pokemon/variant/248-mega_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/3-gigantamax.json b/public/images/pokemon/variant/3-gigantamax.json index 7b341b367aa..9b74b1131ba 100644 --- a/public/images/pokemon/variant/3-gigantamax.json +++ b/public/images/pokemon/variant/3-gigantamax.json @@ -4,6 +4,8 @@ "ffee52": "37d6de", "debd29": "078a8f", "833100": "002112", + "830009": "23033b", + "189d87": "c2247b", "ff7b73": "712f8f", "de4141": "3f1375", "ffbdbd": "a266b0", @@ -11,6 +13,7 @@ "107b6a": "9e1976", "105241": "4f2800", "83de7b": "a37707", + "2e5529": "38001c", "5a9c39": "705207", "20b49c": "de3592", "fdfdfd": "fdfdfd", @@ -21,14 +24,17 @@ "ffee52": "f75ea8", "debd29": "a30a66", "833100": "0b2e01", + "830009": "154205", + "189d87": "f17f05", "ff7b73": "9db042", "de4141": "3c8227", "ffbdbd": "e7e385", "101010": "101010", "107b6a": "d44300", - "105241": "030129", - "83de7b": "433d99", - "5a9c39": "19164f", + "105241": "381601", + "83de7b": "80ced9", + "2e5519": "011c38", + "5a9c39": "446b94", "20b49c": "fa8405", "fdfdfd": "fdfdfd", "5ad5c5": "faa405" diff --git a/public/images/pokemon/variant/3-mega_2.png b/public/images/pokemon/variant/3-mega_2.png index ddc2bd976ad..54ca687d1c3 100644 Binary files a/public/images/pokemon/variant/3-mega_2.png and b/public/images/pokemon/variant/3-mega_2.png differ diff --git a/public/images/pokemon/variant/3-mega_3.png b/public/images/pokemon/variant/3-mega_3.png index 56945d383e6..07ddb5ae7ed 100644 Binary files a/public/images/pokemon/variant/3-mega_3.png and b/public/images/pokemon/variant/3-mega_3.png differ diff --git a/public/images/pokemon/variant/3.json b/public/images/pokemon/variant/3.json index 83a13fdca0e..bdcc30edcbf 100644 --- a/public/images/pokemon/variant/3.json +++ b/public/images/pokemon/variant/3.json @@ -1,6 +1,7 @@ { "1": { "843100": "033b22", + "830009": "23033b", "ff7b73": "712f8f", "ffbdbd": "a266b0", "debd29": "078a8f", @@ -13,11 +14,13 @@ "5a9c3a": "b34952", "84de7b": "ff745e", "5ad6c5": "f062a4", + "2e5519": "38001c", "21b59c": "de3592", "ffffff": "ffffff" }, "2": { "843100": "420514", + "830009": "154205", "ff7b73": "9db042", "ffbdbd": "e7e385", "debd29": "a30a66", @@ -30,6 +33,7 @@ "5a9c3a": "446b94", "84de7b": "80ced9", "5ad6c5": "faa405", + "2e5519": "011c38", "21b59c": "fa8405", "ffffff": "ffffff" } diff --git a/public/images/pokemon/variant/656.json b/public/images/pokemon/variant/656.json index 68743a4c9f1..5037f86f22a 100644 --- a/public/images/pokemon/variant/656.json +++ b/public/images/pokemon/variant/656.json @@ -3,12 +3,12 @@ "838394": "4d7dc5", "62ace6": "8363af", "7bcdff": "9c75c2", - "ffec8c": "ddfff9", + "fdea88": "ddfff9", "a1a1c4": "7ab7ec", "c9b241": "97d6e2", - "dfcf77": "bae7e8", + "ccbd70": "bae7e8", "174592": "37408c", - "fdfdfd": "b1e5ff", + "f8f8f8": "b1e5ff", "9c9cc5": "5385c7", "cdcde6": "7eb7e8", "396a83": "362864", @@ -18,12 +18,12 @@ "838394": "cc6845", "62ace6": "c44848", "7bcdff": "dd6155", - "ffec8c": "ddfff9", + "fdea88": "ddfff9", "a1a1c4": "f7c685", "c9b241": "97d6e2", - "dfcf77": "bae7e8", + "ccbd70": "bae7e8", "174592": "198158", - "fdfdfd": "fff4bd", + "f8f8f8": "fff4bd", "9c9cc5": "c96a48", "cdcde6": "f7b785", "396a83": "5c0d33", diff --git a/public/images/pokemon/variant/658-ash.json b/public/images/pokemon/variant/658-ash.json index 29b5bd2560b..1845b2b1bea 100644 --- a/public/images/pokemon/variant/658-ash.json +++ b/public/images/pokemon/variant/658-ash.json @@ -4,6 +4,7 @@ "3f4447": "466698", "de3431": "3fca9f", "f8f8f8": "a1e9f0", + "f4f4f4": "d7eff4", "7b282e": "0e3e81", "6b1d1d": "206d74", "4ebdd9": "41a7b0", @@ -11,7 +12,7 @@ "bfbfbf": "8cc7d4", "ffb2bf": "b7e9ff", "bf4c60": "4386df", - "fff0a6": "271f4c", + "fff0a6": "208698", "3e7acc": "6b4592", "18335c": "170738", "f2798d": "8dcfff", @@ -25,6 +26,7 @@ "3f4447": "466698", "de3431": "9ceec6", "f8f8f8": "89d2b8", + "f4f4f4": "d7eff4", "7b282e": "152a5c", "6b1d1d": "356e8d", "4ebdd9": "2f6e74", diff --git a/public/images/pokemon/variant/666-continental.json b/public/images/pokemon/variant/666-continental.json index 67e25fc79b4..92614fb346c 100644 --- a/public/images/pokemon/variant/666-continental.json +++ b/public/images/pokemon/variant/666-continental.json @@ -2,6 +2,7 @@ "1": { "101010": "101010", "595959": "724b7a", + "555353": "724b7a", "d18257": "d18257", "f9bd55": "f9bd55", "303030": "402746", @@ -15,5 +16,23 @@ "c3c3c3": "ffeaff", "811c1c": "811c1c", "e08528": "e08528" + }, + "2": { + "101010": "101010", + "595959": "8f551e", + "555353": "e99b44", + "d18257": "d18257", + "f9bd55": "f9bd55", + "303030": "6d2d0d", + "f8f05e": "f8f05e", + "d24c3e": "d24c3e", + "675220": "9c5c19", + "ceab62": "e99b44", + "707068": "e99b44", + "504a4a": "9c5c19", + "aa5844": "aa5844", + "c3c3c3": "f8f27f", + "811c1c": "811c1c", + "308528": "308528" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/666-continental_3.json b/public/images/pokemon/variant/666-continental_3.json deleted file mode 100644 index ed0fee105bb..00000000000 --- a/public/images/pokemon/variant/666-continental_3.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "textures": [ - { - "image": "666-continental_3.png", - "format": "RGBA8888", - "size": { - "w": 67, - "h": 67 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 67, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 67 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 67 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:70eae64f87d7226958d0443e262bab16:5ea86607863e872365dc956f4d819752:23aaac2256d564b9d8a58d7de70397c3$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/666-continental_3.png b/public/images/pokemon/variant/666-continental_3.png deleted file mode 100644 index 24e4c9ab37c..00000000000 Binary files a/public/images/pokemon/variant/666-continental_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/666-fancy.json b/public/images/pokemon/variant/666-fancy.json new file mode 100644 index 00000000000..1f31ac6983d --- /dev/null +++ b/public/images/pokemon/variant/666-fancy.json @@ -0,0 +1,38 @@ +{ + "1": { + "101010": "101010", + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "811c1c": "811c1c", + "de4040": "de4040", + "5faa3e": "5faa3e", + "ceab62": "d9edd4", + "b6d26d": "b6d26d", + "e9e052": "e9e052", + "cf7ef3": "cf7ef3", + "c3c3c3": "ffeaff", + "f2d4e3": "f2d4e3", + "ead2e3": "ffeaff" + }, + "2": { + "101010": "101010", + "303030": "00771b", + "675220": "b9c05a", + "504a4a": "b9c05a", + "595959": "6f9f42", + "707068": "e3e982", + "811c1c": "811c1c", + "de4040": "de4040", + "5faa3e": "5faa3e", + "ceab62": "e3e982", + "b6d26d": "b6d26d", + "e9e052": "e9e052", + "cf7ef3": "cf7ef3", + "c3c3c3": "fcf1ff", + "f2d4e3": "f2d4e3", + "ead2e3": "fcf1ff" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/666-fancy_2.json b/public/images/pokemon/variant/666-fancy_2.json deleted file mode 100644 index d2dd365d3ed..00000000000 --- a/public/images/pokemon/variant/666-fancy_2.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "textures": [ - { - "image": "666-fancy_2.png", - "format": "RGBA8888", - "size": { - "w": 67, - "h": 67 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 67, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 67 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 67 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:2d5276d8c199bae070dbaa73293fd554:a099f55391d8e4bbae565d4a170574c9:6d5edff9a806f43feff031c9919c9aca$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/666-fancy_2.png b/public/images/pokemon/variant/666-fancy_2.png deleted file mode 100644 index 100ba90d7e4..00000000000 Binary files a/public/images/pokemon/variant/666-fancy_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/666-fancy_3.json b/public/images/pokemon/variant/666-fancy_3.json deleted file mode 100644 index be0625b1360..00000000000 --- a/public/images/pokemon/variant/666-fancy_3.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "textures": [ - { - "image": "666-fancy_3.png", - "format": "RGBA8888", - "size": { - "w": 67, - "h": 67 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 67, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 67 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 67 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:2d5276d8c199bae070dbaa73293fd554:a099f55391d8e4bbae565d4a170574c9:6d5edff9a806f43feff031c9919c9aca$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/666-fancy_3.png b/public/images/pokemon/variant/666-fancy_3.png deleted file mode 100644 index a8453d6cbce..00000000000 Binary files a/public/images/pokemon/variant/666-fancy_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/666-high-plains.json b/public/images/pokemon/variant/666-high-plains.json index fd26a077f34..85a5eb24cc3 100644 --- a/public/images/pokemon/variant/666-high-plains.json +++ b/public/images/pokemon/variant/666-high-plains.json @@ -14,7 +14,8 @@ "c3c3c3": "ffeaff", "811c1c": "811c1c", "337543": "337543", - "e8c815": "e8c815" + "e8c815": "e8c815", + "773d21": "773d21" }, "2": { "101010": "101010", @@ -31,6 +32,7 @@ "c3c3c3": "edc67c", "811c1c": "811c1c", "337543": "337543", - "e8c815": "e8c815" + "e8c815": "e8c815", + "773d21": "773d21" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/666-monsoon.json b/public/images/pokemon/variant/666-monsoon.json index 8aaedab67ca..915d471b2b1 100644 --- a/public/images/pokemon/variant/666-monsoon.json +++ b/public/images/pokemon/variant/666-monsoon.json @@ -1,36 +1,33 @@ { - "1": { - "101010": "101010", - "595959": "724b7a", - "f0f0f8": "f0f0f8", - "303030": "402746", - "675220": "958c8a", - "ceab62": "d9edd4", + "1": { + "101010": "101010", + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", "807676": "807676", - "92f4f4": "92f4f4", - "989898": "989898", - "707068": "a97cbc", - "504a4a": "7f6991", - "4eccd6": "4eccd6", + "ceab62": "d9edd4", "5676de": "5676de", - "c3c3c3": "ffeaff", - "811c1c": "811c1c" - }, - "2": { - "101010": "101010", - "595959": "656565", - "f0f0f8": "f0f0f8", - "303030": "4f4645", - "675220": "2c3593", - "ceab62": "5857bc", - "807676": "807676", - "92f4f4": "92f4f4", - "989898": "989898", - "707068": "5857bc", - "504a4a": "2c3593", - "4eccd6": "4eccd6", - "5676de": "5676de", - "c3c3c3": "b8f9f9", - "811c1c": "811c1c" - } + "4eccd6": "4eccd6", + "989898": "989898", + "c3c3c3": "c3c3c3", + "f0f0f8": "f0f0f8" + }, + "2": { + "101010": "101010", + "303030": "3d3231", + "675220": "2c3593", + "504a4a": "2c3593", + "595959": "4f4645", + "707068": "5857bc", + "807676": "807676", + "ceab62": "5857bc", + "5676de": "5676de", + "4eccd6": "4eccd6", + "989898": "989898", + "92f4f4": "92f4f4", + "c3c3c3": "b8f9f9", + "f0f0f8": "f0f0f8" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/666-ocean.json b/public/images/pokemon/variant/666-ocean.json index 975602c6f9e..23f8d48c681 100644 --- a/public/images/pokemon/variant/666-ocean.json +++ b/public/images/pokemon/variant/666-ocean.json @@ -22,7 +22,7 @@ "e1384d": "e1384d", "f4ad61": "f4ad61", "f8ef6a": "f8ef6a", - "303030": "b56208", + "303030": "b54908", "675220": "bc601c", "ceab62": "ea8742", "707068": "ea8742", diff --git a/public/images/pokemon/variant/666-poke-ball.json b/public/images/pokemon/variant/666-poke-ball.json index e83072c51a5..fe6b42f6ef3 100644 --- a/public/images/pokemon/variant/666-poke-ball.json +++ b/public/images/pokemon/variant/666-poke-ball.json @@ -14,6 +14,25 @@ "504a4a": "7f6991", "c3c3c3": "ffeaff", "811c1c": "811c1c", - "a9a99e": "a9a99e" + "a9a99e": "a9a99e", + "2c2b2b": "402746" + }, + "2": { + "101010": "101010", + "f8f8f8": "00006d", + "303030": "ae001a", + "2c2b2b": "660000", + "504a4a": "a70038", + "595959": "df0036", + "c3c3c3": "f0a6bf", + "707068": "d5375a", + "a9a99e": "000050", + "811c1c": "811c1c", + "971d1d": "040046", + "b72c2c": "00005e", + "dc4b4b": "19007d", + "e97e7e": "2e2095", + "675220": "a70038", + "ceab62": "d5375a" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/666-poke-ball_3.json b/public/images/pokemon/variant/666-poke-ball_3.json deleted file mode 100644 index d506cef780e..00000000000 --- a/public/images/pokemon/variant/666-poke-ball_3.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "textures": [ - { - "image": "666-poke-ball_3.png", - "format": "RGBA8888", - "size": { - "w": 67, - "h": 67 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 67, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 67 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 67 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:7ff5b539e59b71fa67f66f26bb0f2e9d:45bec6d118350401c25850e5f12a25af:8ec14f129d1691b8da504a13b661abed$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/666-poke-ball_3.png b/public/images/pokemon/variant/666-poke-ball_3.png deleted file mode 100644 index e6056246fce..00000000000 Binary files a/public/images/pokemon/variant/666-poke-ball_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/666-river.json b/public/images/pokemon/variant/666-river.json index 818e1ee3989..c7e5e288d05 100644 --- a/public/images/pokemon/variant/666-river.json +++ b/public/images/pokemon/variant/666-river.json @@ -1,19 +1,40 @@ { - "2": { - "101010": "101010", - "595959": "8a5702", - "ceab62": "d9a666", - "303030": "7b2800", - "625841": "625841", - "bc813f": "bc813f", - "9c9143": "9c9143", - "675220": "ae7f41", - "707068": "d9a666", - "504a4a": "ae7f41", - "c3c3c3": "e3c384", - "811c1c": "811c1c", - "279ec2": "279ec2", - "59c9d3": "59c9d3", - "1d726a": "1d726a" - } + "1": { + "101010": "101010", + "303030": "402746", + "4a412c": "4a412c", + "675220": "958c8a", + "634d20": "634d20", + "1d726a": "1d726a", + "504a4a": "7f6991", + "595959": "724b7a", + "625841": "625841", + "707068": "a97cbc", + "bc813f": "bc813f", + "9c9143": "9c9143", + "ceab62": "ceab62", + "279ec2": "279ec2", + "59c9d3": "59c9d3", + "c3c3c3": "c3c3c3", + "d2a862": "d9edd4" + }, + "2": { + "101010": "101010", + "303030": "7b2800", + "4a412c": "4a412c", + "675220": "ae7f41", + "634d20": "634d20", + "1d726a": "1d726a", + "504a4a": "ae7f41", + "595959": "8a5702", + "625841": "625841", + "707068": "d9a666", + "bc813f": "bc813f", + "9c9143": "9c9143", + "ceab62": "ceab62", + "279ec2": "279ec2", + "59c9d3": "59c9d3", + "c3c3c3": "e3c384", + "d2a862": "d2a862" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/666-river_2.json b/public/images/pokemon/variant/666-river_2.json deleted file mode 100644 index 0da0f00b0be..00000000000 --- a/public/images/pokemon/variant/666-river_2.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "textures": [ - { - "image": "666-river_2.png", - "format": "RGBA8888", - "size": { - "w": 67, - "h": 67 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 67, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 67 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 67 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:39f778a45b20cfcfded5a350ee1a02e9:5d7e7e891b7da588a2ebd23733da6c2d:fa23dc87fc53ba2cfa532cf440553cf5$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/666-river_2.png b/public/images/pokemon/variant/666-river_2.png deleted file mode 100644 index a5a65f4933b..00000000000 Binary files a/public/images/pokemon/variant/666-river_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/669-red.json b/public/images/pokemon/variant/669-red.json index 627fdbeb44f..145228a41c2 100644 --- a/public/images/pokemon/variant/669-red.json +++ b/public/images/pokemon/variant/669-red.json @@ -1,4 +1,22 @@ { + "1": { + "101010": "101010", + "3d6629": "094740", + "665a1f": "3e0547", + "595959": "595959", + "686868": "686868", + "802d2d": "55061c", + "d94c4c": "aa263c", + "e15455": "dc6295", + "ff7373": "cd4a4a", + "65a943": "e493a1", + "6bb347": "1d8057", + "ccb43d": "6a094f", + "ffe14c": "9c235f", + "bfbfbf": "bfbfbf", + "f8f8f8": "f8f8f8", + "fffbfb": "fffbfb" + }, "2": { "665a1f": "393833", "ffe14c": "fdfffb", diff --git a/public/images/pokemon/variant/669-red_2.json b/public/images/pokemon/variant/669-red_2.json deleted file mode 100644 index 33816135db6..00000000000 --- a/public/images/pokemon/variant/669-red_2.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "textures": [ - { - "image": "669-red_2.png", - "format": "RGBA8888", - "size": { - "w": 46, - "h": 46 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 43, - "h": 46 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 46 - }, - "frame": { - "x": 0, - "y": 0, - "w": 43, - "h": 46 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:30be9438b4a7afb54dfbdae88661c2ed:ba8475f09ea3d2213c2462b54bc4a3e0:9f8ada9cf46c4e29f954b2eb815bc4e5$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/669-red_2.png b/public/images/pokemon/variant/669-red_2.png deleted file mode 100644 index 5d30b38b1d4..00000000000 Binary files a/public/images/pokemon/variant/669-red_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/715.json b/public/images/pokemon/variant/715.json new file mode 100644 index 00000000000..e43af20a0de --- /dev/null +++ b/public/images/pokemon/variant/715.json @@ -0,0 +1,42 @@ +{ + "1": { + "101010": "101010", + "2b2b2b": "43167f", + "343333": "563d8f", + "3b3b3b": "5f32b1", + "6a3f73": "0f103c", + "287366": "731338", + "575757": "7a5ccc", + "555454": "9166c8", + "801a1a": "5d173d", + "e52e2e": "903b78", + "ffe14c": "ff8a58", + "8e5499": "202558", + "bd70cc": "2f386b", + "3aa694": "a42c54", + "4cd9c1": "d04b6c", + "bfbfbf": "bb9adc", + "f8f8f8": "f8f8f8", + "f7f3f3": "d6c8f1" + }, + "2": { + "101010": "101010", + "2b2b2b": "5e3932", + "343333": "1d060c", + "3b3b3b": "c29484", + "6a3f73": "3b0c18", + "287366": "832714", + "575757": "ecd3c3", + "555454": "2f0d13", + "801a1a": "7c0907", + "e52e2e": "ad3419", + "ffe14c": "49ffcd", + "8e5499": "5b1922", + "bd70cc": "7c2928", + "3aa694": "b8552c", + "4cd9c1": "dd834c", + "bfbfbf": "43191e", + "f8f8f8": "f8f8f8", + "f7f3f3": "5a2a2b" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/859.json b/public/images/pokemon/variant/859.json new file mode 100644 index 00000000000..703d5d67218 --- /dev/null +++ b/public/images/pokemon/variant/859.json @@ -0,0 +1,30 @@ +{ + "1": { + "e65984": "619544", + "8d3856": "376b2d", + "ffbff5": "dbe797", + "f589c2": "9aba6d", + "45366d": "5b1d15", + "735aac": "a4332d", + "947cd8": "cd643d", + "f42252": "f55c14", + "101010": "101010", + "fdfdfd": "fdfdfd", + "c9c9c9": "c9c9c9", + "8b73d5": "cc5836" + }, + "2": { + "e65984": "4b1736", + "8d3856": "30082d", + "ffbff5": "904f55", + "f589c2": "6b2b3e", + "45366d": "794935", + "735aac": "f0c475", + "947cd8": "d9975b", + "f42252": "fc645a", + "101010": "101010", + "fdfdfd": "fdfdfd", + "c9c9c9": "dad6bf", + "8b73d5": "f9e9a4" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/859_2.json b/public/images/pokemon/variant/859_2.json deleted file mode 100644 index 1494c4909f7..00000000000 --- a/public/images/pokemon/variant/859_2.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "textures": [ - { - "image": "859_2.png", - "format": "RGBA8888", - "size": { - "w": 51, - "h": 51 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 51, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 51, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 51, - "h": 47 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:214cad7b549c6f4fdfaf238d82156c4e:50dda7cd3a060b6b559148b2a281e2fe:40139ec0718e207e11a4ee81c686e004$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/859_2.png b/public/images/pokemon/variant/859_2.png deleted file mode 100644 index 82e8be45c39..00000000000 Binary files a/public/images/pokemon/variant/859_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/859_3.json b/public/images/pokemon/variant/859_3.json deleted file mode 100644 index e0d6c3779a8..00000000000 --- a/public/images/pokemon/variant/859_3.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "textures": [ - { - "image": "859_3.png", - "format": "RGBA8888", - "size": { - "w": 51, - "h": 51 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 51, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 51, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 51, - "h": 47 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:214cad7b549c6f4fdfaf238d82156c4e:50dda7cd3a060b6b559148b2a281e2fe:40139ec0718e207e11a4ee81c686e004$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/859_3.png b/public/images/pokemon/variant/859_3.png deleted file mode 100644 index 800063f08aa..00000000000 Binary files a/public/images/pokemon/variant/859_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/_masterlist.json b/public/images/pokemon/variant/_masterlist.json index 11f8e9cb7ec..6d2da0ed0ee 100644 --- a/public/images/pokemon/variant/_masterlist.json +++ b/public/images/pokemon/variant/_masterlist.json @@ -221,7 +221,7 @@ "246": [0, 1, 1], "247": [0, 1, 1], "248": [0, 1, 1], - "248-mega": [0, 2, 1], + "248-mega": [0, 1, 1], "249": [0, 2, 2], "250": [0, 2, 2], "251": [0, 1, 1], @@ -526,9 +526,9 @@ "664": [0, 1, 1], "665": [0, 1, 1], "666-archipelago": [0, 1, 1], - "666-continental": [0, 1, 2], + "666-continental": [0, 1, 1], "666-elegant": [0, 1, 1], - "666-fancy": [0, 2, 2], + "666-fancy": [0, 1, 1], "666-garden": [0, 1, 1], "666-high-plains": [0, 1, 1], "666-icy-snow": [0, 1, 1], @@ -538,14 +538,14 @@ "666-modern": [0, 1, 1], "666-monsoon": [0, 1, 1], "666-ocean": [0, 1, 1], - "666-poke-ball": [0, 1, 2], + "666-poke-ball": [0, 1, 1], "666-polar": [0, 1, 1], - "666-river": [0, 2, 1], + "666-river": [0, 1, 1], "666-sandstorm": [0, 1, 1], "666-savanna": [0, 1, 1], "666-sun": [0, 1, 1], "666-tundra": [0, 1, 1], - "669-red": [0, 2, 1], + "669-red": [0, 1, 1], "669-blue": [0, 2, 2], "669-white": [0, 1, 1], "669-yellow": [0, 2, 1], @@ -600,7 +600,7 @@ "712": [0, 1, 1], "713": [0, 1, 1], "714": [0, 1, 1], - "715": [0, 2, 2], + "715": [0, 1, 1], "716-active": [0, 1, 1], "716-neutral": [0, 1, 1], "717": [0, 1, 1], @@ -692,7 +692,7 @@ "857": [0, 2, 2], "858-gigantamax": [0, 1, 1], "858": [0, 1, 1], - "859": [0, 2, 2], + "859": [0, 1, 1], "860": [0, 1, 1], "861-gigantamax": [0, 1, 1], "861": [0, 1, 1], @@ -835,7 +835,7 @@ "6713": [0, 1, 1], "8901": [1, 1, 1], "female": { - "3": [0, 2, 1], + "3": [0, 1, 1], "19": [0, 1, 1], "20": [0, 1, 1], "25": [0, 1, 1], @@ -869,6 +869,7 @@ "198": [0, 1, 1], "203": [0, 1, 1], "207": [0, 1, 1], + "212": [1, 1, 1], "215": [0, 1, 1], "217": [1, 1, 1], "229": [0, 1, 1], @@ -1396,7 +1397,7 @@ "612": [0, 1, 1], "616": [0, 1, 1], "617": [0, 1, 1], - "618": [0, 2, 2], + "618": [0, 1, 1], "619": [0, 1, 1], "620": [0, 1, 1], "621": [0, 1, 1], @@ -1437,7 +1438,7 @@ "666-archipelago": [0, 1, 1], "666-continental": [0, 1, 1], "666-elegant": [0, 1, 1], - "666-fancy": [0, 2, 2], + "666-fancy": [0, 1, 1], "666-garden": [0, 1, 1], "666-high-plains": [0, 1, 1], "666-icy-snow": [0, 1, 1], @@ -1449,7 +1450,7 @@ "666-ocean": [0, 1, 1], "666-poke-ball": [0, 1, 1], "666-polar": [0, 1, 1], - "666-river": [0, 2, 1], + "666-river": [0, 1, 1], "666-sandstorm": [0, 1, 1], "666-savanna": [0, 1, 1], "666-sun": [0, 1, 1], @@ -1509,7 +1510,7 @@ "712": [0, 1, 1], "713": [0, 1, 1], "714": [0, 1, 1], - "715": [0, 2, 2], + "715": [0, 1, 1], "716-active": [0, 1, 1], "716-neutral": [0, 1, 1], "717": [0, 1, 1], @@ -1616,7 +1617,7 @@ "877-hangry": [1, 1, 1], "877": [1, 1, 1], "880": [0, 1, 1], - "881": [0, 2, 2], + "881": [0, 1, 1], "882": [0, 1, 1], "883": [0, 1, 1], "884-gigantamax": [0, 1, 1], @@ -1778,6 +1779,7 @@ "198": [0, 1, 1], "203": [0, 1, 1], "207": [0, 1, 1], + "212": [1, 1, 1], "215": [0, 1, 1], "217": [1, 1, 1], "229": [0, 1, 1], @@ -1862,19 +1864,19 @@ "666-archipelago": [0, 1, 1], "666-continental": [0, 1, 1], "666-elegant": [0, 1, 1], - "666-fancy": [0, 2, 2], + "666-fancy": [0, 1, 1], "666-garden": [0, 1, 1], "666-high-plains": [0, 1, 1], "666-icy-snow": [0, 1, 1], "666-jungle": [0, 1, 1], "666-marine": [0, 1, 1], - "666-meadow": [0, 2, 2], + "666-meadow": [0, 1, 1], "666-modern": [0, 1, 1], "666-monsoon": [0, 1, 1], "666-ocean": [0, 1, 1], - "666-poke-ball": [0, 1, 2], + "666-poke-ball": [0, 1, 1], "666-polar": [0, 1, 1], - "666-river": [0, 2, 1], + "666-river": [0, 1, 1], "666-sandstorm": [0, 1, 1], "666-savanna": [0, 1, 1], "666-sun": [0, 1, 1], @@ -1925,7 +1927,7 @@ "712": [0, 1, 1], "713": [0, 1, 1], "714": [0, 1, 1], - "715": [0, 2, 1], + "715": [0, 1, 1], "716-active": [0, 1, 1], "716-neutral": [0, 1, 1], "717": [0, 2, 2], @@ -2141,7 +2143,9 @@ "6705": [0, 1, 1], "6706": [0, 1, 1], "6713": [0, 1, 1], - "female": {}, + "female": { + "6215": [0, 1, 1] + }, "back": { "3-mega": [0, 2, 2], "6-mega-x": [0, 2, 2], @@ -2156,7 +2160,7 @@ "181-mega": [0, 1, 2], "212-mega": [1, 2, 2], "229-mega": [0, 1, 1], - "248-mega": [0, 2, 1], + "248-mega": [0, 1, 1], "257-mega": [0, 1, 1], "282-mega": [0, 1, 1], "302-mega": [0, 1, 1], @@ -2188,27 +2192,27 @@ "658": [0, 1, 1], "658-ash": [0, 1, 1], "664": [0, 1, 1], - "665": [0, 2, 1], - "666-archipelago": [0, 2, 2], - "666-continental": [0, 2, 2], - "666-elegant": [0, 2, 2], - "666-fancy": [0, 2, 2], - "666-garden": [0, 2, 2], - "666-high-plains": [0, 2, 2], - "666-icy-snow": [0, 2, 2], - "666-jungle": [0, 2, 2], - "666-marine": [0, 2, 2], - "666-meadow": [0, 2, 2], - "666-modern": [0, 2, 2], - "666-monsoon": [0, 2, 2], - "666-ocean": [0, 2, 2], - "666-poke-ball": [0, 2, 2], - "666-polar": [0, 2, 2], - "666-river": [0, 2, 2], - "666-sandstorm": [0, 2, 2], - "666-savanna": [0, 2, 2], - "666-sun": [0, 2, 2], - "666-tundra": [0, 2, 2], + "665": [0, 1, 1], + "666-archipelago": [0, 1, 1], + "666-continental": [0, 1, 1], + "666-elegant": [0, 1, 1], + "666-fancy": [0, 1, 1], + "666-garden": [0, 1, 1], + "666-high-plains": [0, 1, 1], + "666-icy-snow": [0, 1, 1], + "666-jungle": [0, 1, 1], + "666-marine": [0, 1, 1], + "666-meadow": [0, 1, 1], + "666-modern": [0, 1, 1], + "666-monsoon": [0, 1, 1], + "666-ocean": [0, 1, 1], + "666-poke-ball": [0, 1, 1], + "666-polar": [0, 1, 1], + "666-river": [0, 1, 1], + "666-sandstorm": [0, 1, 1], + "666-savanna": [0, 1, 1], + "666-sun": [0, 1, 1], + "666-tundra": [0, 1, 1], "669-red": [0, 2, 2], "669-blue": [0, 2, 2], "669-white": [0, 2, 2], @@ -2468,7 +2472,10 @@ "6571": [0, 1, 1], "6705": [0, 1, 1], "6706": [0, 1, 1], - "6713": [0, 1, 1] + "6713": [0, 1, 1], + "female": { + "6215": [0, 1, 1] + } } } -} +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/248-mega.json b/public/images/pokemon/variant/back/248-mega.json index 5def1f5a316..c63b19d7c29 100644 --- a/public/images/pokemon/variant/back/248-mega.json +++ b/public/images/pokemon/variant/back/248-mega.json @@ -1,28 +1,28 @@ { "1": { - "101010": "101010", - "4a5a39": "533334", - "accd9c": "c78482", - "739c62": "915957", - "c5c5c5": "c5c5c5", - "942900": "006fbe", - "fefefe": "fefefe", - "d55200": "0098fc", - "737373": "737373", - "821610": "004194", - "d0243b": "006fbe" + "171717": "101010", + "4a5a39": "533334", + "4b5a3b": "533334", + "727272": "727272", + "801c17": "533334", + "922d00": "004194", + "ce283d": "006fb3", + "d35200": "0098fc", + "729a62": "915957", + "739c62": "915957", + "aacb9a": "c78482" }, "2": { - "101010": "101010", - "4a5a39": "06092f", - "accd9c": "625695", - "739c62": "2c3071", - "c5c5c5": "c5c5c5", - "942900": "ee7b06", - "fefefe": "fefefe", - "d55200": "ffa904", - "737373": "737373", - "821610": "ee7b06", - "d0243b": "ffa904" + "171717": "101010", + "4a5a39": "06092f", + "4b5a3b": "06092f", + "727272": "727272", + "801c17": "ee7b06", + "922d00": "ee7b06", + "ce283d": "ffa904", + "d35200": "ffa904", + "729a62": "59417c", + "739c62": "59417c", + "aacb9a": "625695" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/3-gigantamax.json b/public/images/pokemon/variant/back/3-gigantamax.json index a8cd61c3419..b618abecbcc 100644 --- a/public/images/pokemon/variant/back/3-gigantamax.json +++ b/public/images/pokemon/variant/back/3-gigantamax.json @@ -1,6 +1,7 @@ { "1": { "833100": "180136", + "830009": "23033b", "bd6a31": "012729", "ffee52": "37d6de", "debd29": "078a8f", @@ -8,15 +9,18 @@ "de4141": "3f1375", "ff7b73": "712f8f", "ffbdbd": "a266b0", - "5a9c39": "705207", - "105241": "4f2800", - "83de7b": "a37707", + "e8a3a3": "91579e", + "5a9c39": "b34952", + "105241": "190038", + "2e5519": "38001c", + "83de7b": "ff745e", "107b6a": "b80479", "20b49c": "de3592", "fdfdfd": "fdfdfd" }, "2": { "833100": "0b2e01", + "830009": "154205", "bd6a31": "420514", "ffee52": "f75ea8", "debd29": "a30a66", @@ -24,9 +28,11 @@ "de4141": "3c8227", "ff7b73": "9db042", "ffbdbd": "e7e385", - "5a9c39": "19164f", - "105241": "030129", - "83de7b": "433d99", + "e8a3a3": "ced76f", + "5a9c39": "446b94", + "105241": "381601", + "2e5519": "011c38", + "83de7b": "80ced9", "107b6a": "d15d04", "20b49c": "fa8405", "fdfdfd": "fdfdfd" diff --git a/public/images/pokemon/variant/back/3-mega_2.png b/public/images/pokemon/variant/back/3-mega_2.png index 7bb201ef984..90eeb6d84f2 100644 Binary files a/public/images/pokemon/variant/back/3-mega_2.png and b/public/images/pokemon/variant/back/3-mega_2.png differ diff --git a/public/images/pokemon/variant/back/3-mega_3.png b/public/images/pokemon/variant/back/3-mega_3.png index 5d7fb8ad798..77d6c7f12fa 100644 Binary files a/public/images/pokemon/variant/back/3-mega_3.png and b/public/images/pokemon/variant/back/3-mega_3.png differ diff --git a/public/images/pokemon/variant/back/3.json b/public/images/pokemon/variant/back/3.json index 616efac7d3c..0c179dd5e4a 100644 --- a/public/images/pokemon/variant/back/3.json +++ b/public/images/pokemon/variant/back/3.json @@ -1,6 +1,7 @@ { "1": { "843100": "033b22", + "830009": "23033b", "ffbdbd": "a266b0", "ff7b73": "712f8f", "debd29": "078a8f", @@ -11,6 +12,7 @@ "105242": "190038", "107b6b": "c21f7e", "5a9c3a": "b34952", + "2e5519": "38001c", "5ad6c5": "f062a4", "21b59c": "de3592", "84de7b": "ff745e", @@ -18,6 +20,7 @@ }, "2": { "843100": "420514", + "830009": "154205", "ffbdbd": "e7e385", "ff7b73": "9db042", "debd29": "a30a66", @@ -25,7 +28,8 @@ "de4242": "3c8227", "101010": "101010", "ffef52": "f75ea8", - "105242": "001a33", + "105242": "381601", + "2e5519": "011c38", "107b6b": "d15d04", "5a9c3a": "446b94", "5ad6c5": "faa405", diff --git a/public/images/pokemon/variant/back/618.json b/public/images/pokemon/variant/back/618.json new file mode 100644 index 00000000000..d4db4967946 --- /dev/null +++ b/public/images/pokemon/variant/back/618.json @@ -0,0 +1,40 @@ +{ + "1": { + "cebd00": "bdac99", + "ffff00": "f3e6dd", + "6b6319": "987b6d", + "081019": "081019", + "52423a": "312118", + "6b524a": "4a342a", + "bd846b": "8c3841", + "846b63": "6b3838", + "d69c84": "ad4c4c", + "efce42": "eac2bd", + "d6cec5": "d6cec5", + "ffffff": "ffffff", + "081018": "081018", + "735a52": "564038", + "735a53": "564038", + "9c8473": "a08773", + "bda59c": "e6dbd6" + }, + "2": { + "cebd00": "58536b", + "ffff00": "707488", + "6b6319": "39314a", + "081019": "081019", + "52423a": "5a2e2e", + "6b524a": "804e48", + "bd846b": "cec9b1", + "846b63": "9c7765", + "d69c84": "f0ead6", + "efce42": "9fadb9", + "d6cec5": "4c8c4c", + "ffffff": "79a962", + "081018": "204a29", + "735a52": "885011", + "735a53": "735555", + "9c8473": "c18a2c", + "bda59c": "efc44b" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/618_2.json b/public/images/pokemon/variant/back/618_2.json deleted file mode 100644 index d82c52e26e2..00000000000 --- a/public/images/pokemon/variant/back/618_2.json +++ /dev/null @@ -1,2750 +0,0 @@ -{ - "textures": [ - { - "image": "618_2.png", - "format": "RGBA8888", - "size": { - "w": 221, - "h": 221 - }, - "scale": 1, - "frames": [ - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 30 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 30 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 30 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 30 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 30 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 30 - } - }, - { - "filename": "0123.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 30 - } - }, - { - "filename": "0124.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 30 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 77, - "h": 26 - }, - "frame": { - "x": 77, - "y": 0, - "w": 77, - "h": 26 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 77, - "h": 26 - }, - "frame": { - "x": 77, - "y": 0, - "w": 77, - "h": 26 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 77, - "h": 26 - }, - "frame": { - "x": 77, - "y": 0, - "w": 77, - "h": 26 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 77, - "h": 26 - }, - "frame": { - "x": 77, - "y": 0, - "w": 77, - "h": 26 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 77, - "h": 26 - }, - "frame": { - "x": 77, - "y": 0, - "w": 77, - "h": 26 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 77, - "h": 26 - }, - "frame": { - "x": 77, - "y": 0, - "w": 77, - "h": 26 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 77, - "h": 26 - }, - "frame": { - "x": 77, - "y": 0, - "w": 77, - "h": 26 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 77, - "h": 26 - }, - "frame": { - "x": 77, - "y": 0, - "w": 77, - "h": 26 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 32 - }, - "frame": { - "x": 77, - "y": 26, - "w": 76, - "h": 32 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 32 - }, - "frame": { - "x": 77, - "y": 26, - "w": 76, - "h": 32 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 32 - }, - "frame": { - "x": 77, - "y": 26, - "w": 76, - "h": 32 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 32 - }, - "frame": { - "x": 77, - "y": 26, - "w": 76, - "h": 32 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 32 - }, - "frame": { - "x": 77, - "y": 26, - "w": 76, - "h": 32 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 32 - }, - "frame": { - "x": 77, - "y": 26, - "w": 76, - "h": 32 - } - }, - { - "filename": "0119.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 32 - }, - "frame": { - "x": 77, - "y": 26, - "w": 76, - "h": 32 - } - }, - { - "filename": "0120.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 32 - }, - "frame": { - "x": 77, - "y": 26, - "w": 76, - "h": 32 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 31 - }, - "frame": { - "x": 0, - "y": 30, - "w": 76, - "h": 31 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 31 - }, - "frame": { - "x": 0, - "y": 30, - "w": 76, - "h": 31 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 31 - }, - "frame": { - "x": 0, - "y": 30, - "w": 76, - "h": 31 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 31 - }, - "frame": { - "x": 0, - "y": 30, - "w": 76, - "h": 31 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 31 - }, - "frame": { - "x": 0, - "y": 30, - "w": 76, - "h": 31 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 31 - }, - "frame": { - "x": 0, - "y": 30, - "w": 76, - "h": 31 - } - }, - { - "filename": "0121.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 31 - }, - "frame": { - "x": 0, - "y": 30, - "w": 76, - "h": 31 - } - }, - { - "filename": "0122.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 31 - }, - "frame": { - "x": 0, - "y": 30, - "w": 76, - "h": 31 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 29 - }, - "frame": { - "x": 76, - "y": 58, - "w": 76, - "h": 29 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 29 - }, - "frame": { - "x": 76, - "y": 58, - "w": 76, - "h": 29 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 29 - }, - "frame": { - "x": 76, - "y": 58, - "w": 76, - "h": 29 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 29 - }, - "frame": { - "x": 76, - "y": 58, - "w": 76, - "h": 29 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 29 - }, - "frame": { - "x": 76, - "y": 58, - "w": 76, - "h": 29 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 29 - }, - "frame": { - "x": 76, - "y": 58, - "w": 76, - "h": 29 - } - }, - { - "filename": "0125.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 29 - }, - "frame": { - "x": 76, - "y": 58, - "w": 76, - "h": 29 - } - }, - { - "filename": "0126.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 29 - }, - "frame": { - "x": 76, - "y": 58, - "w": 76, - "h": 29 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 76, - "h": 27 - }, - "frame": { - "x": 0, - "y": 61, - "w": 76, - "h": 27 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 76, - "h": 27 - }, - "frame": { - "x": 0, - "y": 61, - "w": 76, - "h": 27 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 76, - "h": 27 - }, - "frame": { - "x": 0, - "y": 61, - "w": 76, - "h": 27 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 76, - "h": 27 - }, - "frame": { - "x": 0, - "y": 61, - "w": 76, - "h": 27 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 76, - "h": 26 - }, - "frame": { - "x": 76, - "y": 87, - "w": 76, - "h": 26 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 76, - "h": 26 - }, - "frame": { - "x": 76, - "y": 87, - "w": 76, - "h": 26 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 76, - "h": 26 - }, - "frame": { - "x": 76, - "y": 87, - "w": 76, - "h": 26 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 76, - "h": 26 - }, - "frame": { - "x": 76, - "y": 87, - "w": 76, - "h": 26 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 88, - "w": 75, - "h": 32 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 88, - "w": 75, - "h": 32 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 88, - "w": 75, - "h": 32 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 88, - "w": 75, - "h": 32 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 88, - "w": 75, - "h": 32 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 88, - "w": 75, - "h": 32 - } - }, - { - "filename": "0115.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 88, - "w": 75, - "h": 32 - } - }, - { - "filename": "0116.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 88, - "w": 75, - "h": 32 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 120, - "w": 75, - "h": 32 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 120, - "w": 75, - "h": 32 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 120, - "w": 75, - "h": 32 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 120, - "w": 75, - "h": 32 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 120, - "w": 75, - "h": 32 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 120, - "w": 75, - "h": 32 - } - }, - { - "filename": "0117.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 120, - "w": 75, - "h": 32 - } - }, - { - "filename": "0118.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 120, - "w": 75, - "h": 32 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 32 - }, - "frame": { - "x": 0, - "y": 152, - "w": 73, - "h": 32 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 32 - }, - "frame": { - "x": 0, - "y": 152, - "w": 73, - "h": 32 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 32 - }, - "frame": { - "x": 0, - "y": 152, - "w": 73, - "h": 32 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 32 - }, - "frame": { - "x": 0, - "y": 152, - "w": 73, - "h": 32 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 32 - }, - "frame": { - "x": 0, - "y": 152, - "w": 73, - "h": 32 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 32 - }, - "frame": { - "x": 0, - "y": 152, - "w": 73, - "h": 32 - } - }, - { - "filename": "0113.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 32 - }, - "frame": { - "x": 0, - "y": 152, - "w": 73, - "h": 32 - } - }, - { - "filename": "0114.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 32 - }, - "frame": { - "x": 0, - "y": 152, - "w": 73, - "h": 32 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 73, - "h": 31 - }, - "frame": { - "x": 0, - "y": 184, - "w": 73, - "h": 31 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 73, - "h": 31 - }, - "frame": { - "x": 0, - "y": 184, - "w": 73, - "h": 31 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 73, - "h": 31 - }, - "frame": { - "x": 0, - "y": 184, - "w": 73, - "h": 31 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 73, - "h": 31 - }, - "frame": { - "x": 0, - "y": 184, - "w": 73, - "h": 31 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 73, - "h": 31 - }, - "frame": { - "x": 0, - "y": 184, - "w": 73, - "h": 31 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 73, - "h": 31 - }, - "frame": { - "x": 0, - "y": 184, - "w": 73, - "h": 31 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 73, - "h": 31 - }, - "frame": { - "x": 0, - "y": 184, - "w": 73, - "h": 31 - } - }, - { - "filename": "0112.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 73, - "h": 31 - }, - "frame": { - "x": 0, - "y": 184, - "w": 73, - "h": 31 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 73, - "h": 30 - }, - "frame": { - "x": 73, - "y": 152, - "w": 73, - "h": 30 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 73, - "h": 30 - }, - "frame": { - "x": 73, - "y": 152, - "w": 73, - "h": 30 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 73, - "h": 30 - }, - "frame": { - "x": 73, - "y": 152, - "w": 73, - "h": 30 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 73, - "h": 30 - }, - "frame": { - "x": 73, - "y": 152, - "w": 73, - "h": 30 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 73, - "h": 30 - }, - "frame": { - "x": 73, - "y": 152, - "w": 73, - "h": 30 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 73, - "h": 30 - }, - "frame": { - "x": 73, - "y": 152, - "w": 73, - "h": 30 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 73, - "h": 30 - }, - "frame": { - "x": 73, - "y": 152, - "w": 73, - "h": 30 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 73, - "h": 30 - }, - "frame": { - "x": 73, - "y": 152, - "w": 73, - "h": 30 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 28 - }, - "frame": { - "x": 146, - "y": 140, - "w": 74, - "h": 28 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 28 - }, - "frame": { - "x": 146, - "y": 140, - "w": 74, - "h": 28 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 28 - }, - "frame": { - "x": 146, - "y": 140, - "w": 74, - "h": 28 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 28 - }, - "frame": { - "x": 146, - "y": 140, - "w": 74, - "h": 28 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 28 - }, - "frame": { - "x": 146, - "y": 140, - "w": 74, - "h": 28 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 28 - }, - "frame": { - "x": 146, - "y": 140, - "w": 74, - "h": 28 - } - }, - { - "filename": "0127.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 28 - }, - "frame": { - "x": 146, - "y": 140, - "w": 74, - "h": 28 - } - }, - { - "filename": "0128.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 28 - }, - "frame": { - "x": 146, - "y": 140, - "w": 74, - "h": 28 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 29 - }, - "frame": { - "x": 146, - "y": 168, - "w": 73, - "h": 29 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 29 - }, - "frame": { - "x": 146, - "y": 168, - "w": 73, - "h": 29 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 29 - }, - "frame": { - "x": 146, - "y": 168, - "w": 73, - "h": 29 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 29 - }, - "frame": { - "x": 146, - "y": 168, - "w": 73, - "h": 29 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 29 - }, - "frame": { - "x": 146, - "y": 168, - "w": 73, - "h": 29 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 29 - }, - "frame": { - "x": 146, - "y": 168, - "w": 73, - "h": 29 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 29 - }, - "frame": { - "x": 146, - "y": 168, - "w": 73, - "h": 29 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 29 - }, - "frame": { - "x": 146, - "y": 168, - "w": 73, - "h": 29 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0129.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0130.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:7ed241f9d4e0679b62ab26da17057d65:739de537da7171a9caf5769b4458f68f:22e585907b89e90c4fc3ab2512d175fd$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/618_2.png b/public/images/pokemon/variant/back/618_2.png deleted file mode 100644 index a0077a1f023..00000000000 Binary files a/public/images/pokemon/variant/back/618_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/back/618_3.json b/public/images/pokemon/variant/back/618_3.json deleted file mode 100644 index 17c49c5e59b..00000000000 --- a/public/images/pokemon/variant/back/618_3.json +++ /dev/null @@ -1,2750 +0,0 @@ -{ - "textures": [ - { - "image": "618_3.png", - "format": "RGBA8888", - "size": { - "w": 221, - "h": 221 - }, - "scale": 1, - "frames": [ - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 30 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 30 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 30 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 30 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 30 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 30 - } - }, - { - "filename": "0123.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 30 - } - }, - { - "filename": "0124.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 30 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 77, - "h": 26 - }, - "frame": { - "x": 77, - "y": 0, - "w": 77, - "h": 26 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 77, - "h": 26 - }, - "frame": { - "x": 77, - "y": 0, - "w": 77, - "h": 26 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 77, - "h": 26 - }, - "frame": { - "x": 77, - "y": 0, - "w": 77, - "h": 26 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 77, - "h": 26 - }, - "frame": { - "x": 77, - "y": 0, - "w": 77, - "h": 26 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 77, - "h": 26 - }, - "frame": { - "x": 77, - "y": 0, - "w": 77, - "h": 26 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 77, - "h": 26 - }, - "frame": { - "x": 77, - "y": 0, - "w": 77, - "h": 26 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 77, - "h": 26 - }, - "frame": { - "x": 77, - "y": 0, - "w": 77, - "h": 26 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 77, - "h": 26 - }, - "frame": { - "x": 77, - "y": 0, - "w": 77, - "h": 26 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 32 - }, - "frame": { - "x": 77, - "y": 26, - "w": 76, - "h": 32 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 32 - }, - "frame": { - "x": 77, - "y": 26, - "w": 76, - "h": 32 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 32 - }, - "frame": { - "x": 77, - "y": 26, - "w": 76, - "h": 32 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 32 - }, - "frame": { - "x": 77, - "y": 26, - "w": 76, - "h": 32 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 32 - }, - "frame": { - "x": 77, - "y": 26, - "w": 76, - "h": 32 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 32 - }, - "frame": { - "x": 77, - "y": 26, - "w": 76, - "h": 32 - } - }, - { - "filename": "0119.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 32 - }, - "frame": { - "x": 77, - "y": 26, - "w": 76, - "h": 32 - } - }, - { - "filename": "0120.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 32 - }, - "frame": { - "x": 77, - "y": 26, - "w": 76, - "h": 32 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 31 - }, - "frame": { - "x": 0, - "y": 30, - "w": 76, - "h": 31 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 31 - }, - "frame": { - "x": 0, - "y": 30, - "w": 76, - "h": 31 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 31 - }, - "frame": { - "x": 0, - "y": 30, - "w": 76, - "h": 31 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 31 - }, - "frame": { - "x": 0, - "y": 30, - "w": 76, - "h": 31 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 31 - }, - "frame": { - "x": 0, - "y": 30, - "w": 76, - "h": 31 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 31 - }, - "frame": { - "x": 0, - "y": 30, - "w": 76, - "h": 31 - } - }, - { - "filename": "0121.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 31 - }, - "frame": { - "x": 0, - "y": 30, - "w": 76, - "h": 31 - } - }, - { - "filename": "0122.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 31 - }, - "frame": { - "x": 0, - "y": 30, - "w": 76, - "h": 31 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 29 - }, - "frame": { - "x": 76, - "y": 58, - "w": 76, - "h": 29 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 29 - }, - "frame": { - "x": 76, - "y": 58, - "w": 76, - "h": 29 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 29 - }, - "frame": { - "x": 76, - "y": 58, - "w": 76, - "h": 29 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 29 - }, - "frame": { - "x": 76, - "y": 58, - "w": 76, - "h": 29 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 29 - }, - "frame": { - "x": 76, - "y": 58, - "w": 76, - "h": 29 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 29 - }, - "frame": { - "x": 76, - "y": 58, - "w": 76, - "h": 29 - } - }, - { - "filename": "0125.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 29 - }, - "frame": { - "x": 76, - "y": 58, - "w": 76, - "h": 29 - } - }, - { - "filename": "0126.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 29 - }, - "frame": { - "x": 76, - "y": 58, - "w": 76, - "h": 29 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 76, - "h": 27 - }, - "frame": { - "x": 0, - "y": 61, - "w": 76, - "h": 27 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 76, - "h": 27 - }, - "frame": { - "x": 0, - "y": 61, - "w": 76, - "h": 27 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 76, - "h": 27 - }, - "frame": { - "x": 0, - "y": 61, - "w": 76, - "h": 27 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 76, - "h": 27 - }, - "frame": { - "x": 0, - "y": 61, - "w": 76, - "h": 27 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 76, - "h": 26 - }, - "frame": { - "x": 76, - "y": 87, - "w": 76, - "h": 26 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 76, - "h": 26 - }, - "frame": { - "x": 76, - "y": 87, - "w": 76, - "h": 26 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 76, - "h": 26 - }, - "frame": { - "x": 76, - "y": 87, - "w": 76, - "h": 26 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 76, - "h": 26 - }, - "frame": { - "x": 76, - "y": 87, - "w": 76, - "h": 26 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 88, - "w": 75, - "h": 32 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 88, - "w": 75, - "h": 32 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 88, - "w": 75, - "h": 32 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 88, - "w": 75, - "h": 32 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 88, - "w": 75, - "h": 32 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 88, - "w": 75, - "h": 32 - } - }, - { - "filename": "0115.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 88, - "w": 75, - "h": 32 - } - }, - { - "filename": "0116.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 88, - "w": 75, - "h": 32 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 120, - "w": 75, - "h": 32 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 120, - "w": 75, - "h": 32 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 120, - "w": 75, - "h": 32 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 120, - "w": 75, - "h": 32 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 120, - "w": 75, - "h": 32 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 120, - "w": 75, - "h": 32 - } - }, - { - "filename": "0117.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 120, - "w": 75, - "h": 32 - } - }, - { - "filename": "0118.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 120, - "w": 75, - "h": 32 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 32 - }, - "frame": { - "x": 0, - "y": 152, - "w": 73, - "h": 32 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 32 - }, - "frame": { - "x": 0, - "y": 152, - "w": 73, - "h": 32 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 32 - }, - "frame": { - "x": 0, - "y": 152, - "w": 73, - "h": 32 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 32 - }, - "frame": { - "x": 0, - "y": 152, - "w": 73, - "h": 32 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 32 - }, - "frame": { - "x": 0, - "y": 152, - "w": 73, - "h": 32 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 32 - }, - "frame": { - "x": 0, - "y": 152, - "w": 73, - "h": 32 - } - }, - { - "filename": "0113.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 32 - }, - "frame": { - "x": 0, - "y": 152, - "w": 73, - "h": 32 - } - }, - { - "filename": "0114.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 32 - }, - "frame": { - "x": 0, - "y": 152, - "w": 73, - "h": 32 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 73, - "h": 31 - }, - "frame": { - "x": 0, - "y": 184, - "w": 73, - "h": 31 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 73, - "h": 31 - }, - "frame": { - "x": 0, - "y": 184, - "w": 73, - "h": 31 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 73, - "h": 31 - }, - "frame": { - "x": 0, - "y": 184, - "w": 73, - "h": 31 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 73, - "h": 31 - }, - "frame": { - "x": 0, - "y": 184, - "w": 73, - "h": 31 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 73, - "h": 31 - }, - "frame": { - "x": 0, - "y": 184, - "w": 73, - "h": 31 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 73, - "h": 31 - }, - "frame": { - "x": 0, - "y": 184, - "w": 73, - "h": 31 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 73, - "h": 31 - }, - "frame": { - "x": 0, - "y": 184, - "w": 73, - "h": 31 - } - }, - { - "filename": "0112.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 73, - "h": 31 - }, - "frame": { - "x": 0, - "y": 184, - "w": 73, - "h": 31 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 73, - "h": 30 - }, - "frame": { - "x": 73, - "y": 152, - "w": 73, - "h": 30 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 73, - "h": 30 - }, - "frame": { - "x": 73, - "y": 152, - "w": 73, - "h": 30 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 73, - "h": 30 - }, - "frame": { - "x": 73, - "y": 152, - "w": 73, - "h": 30 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 73, - "h": 30 - }, - "frame": { - "x": 73, - "y": 152, - "w": 73, - "h": 30 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 73, - "h": 30 - }, - "frame": { - "x": 73, - "y": 152, - "w": 73, - "h": 30 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 73, - "h": 30 - }, - "frame": { - "x": 73, - "y": 152, - "w": 73, - "h": 30 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 73, - "h": 30 - }, - "frame": { - "x": 73, - "y": 152, - "w": 73, - "h": 30 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 73, - "h": 30 - }, - "frame": { - "x": 73, - "y": 152, - "w": 73, - "h": 30 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 28 - }, - "frame": { - "x": 146, - "y": 140, - "w": 74, - "h": 28 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 28 - }, - "frame": { - "x": 146, - "y": 140, - "w": 74, - "h": 28 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 28 - }, - "frame": { - "x": 146, - "y": 140, - "w": 74, - "h": 28 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 28 - }, - "frame": { - "x": 146, - "y": 140, - "w": 74, - "h": 28 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 28 - }, - "frame": { - "x": 146, - "y": 140, - "w": 74, - "h": 28 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 28 - }, - "frame": { - "x": 146, - "y": 140, - "w": 74, - "h": 28 - } - }, - { - "filename": "0127.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 28 - }, - "frame": { - "x": 146, - "y": 140, - "w": 74, - "h": 28 - } - }, - { - "filename": "0128.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 28 - }, - "frame": { - "x": 146, - "y": 140, - "w": 74, - "h": 28 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 29 - }, - "frame": { - "x": 146, - "y": 168, - "w": 73, - "h": 29 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 29 - }, - "frame": { - "x": 146, - "y": 168, - "w": 73, - "h": 29 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 29 - }, - "frame": { - "x": 146, - "y": 168, - "w": 73, - "h": 29 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 29 - }, - "frame": { - "x": 146, - "y": 168, - "w": 73, - "h": 29 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 29 - }, - "frame": { - "x": 146, - "y": 168, - "w": 73, - "h": 29 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 29 - }, - "frame": { - "x": 146, - "y": 168, - "w": 73, - "h": 29 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 29 - }, - "frame": { - "x": 146, - "y": 168, - "w": 73, - "h": 29 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 29 - }, - "frame": { - "x": 146, - "y": 168, - "w": 73, - "h": 29 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0129.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0130.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:7ed241f9d4e0679b62ab26da17057d65:739de537da7171a9caf5769b4458f68f:22e585907b89e90c4fc3ab2512d175fd$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/618_3.png b/public/images/pokemon/variant/back/618_3.png deleted file mode 100644 index aaba24cfc58..00000000000 Binary files a/public/images/pokemon/variant/back/618_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/back/656.json b/public/images/pokemon/variant/back/656.json index 34b11bfab78..f41398f3154 100644 --- a/public/images/pokemon/variant/back/656.json +++ b/public/images/pokemon/variant/back/656.json @@ -1,17 +1,17 @@ { "1": { - "838394": "4d7dc5", + "848496": "4d7dc5", "7bcdff": "9c75c2", "62ace6": "8363af", "ffffff": "b1e5ff", "396a83": "362864", "9c9cc5": "5385c7", "cdcde6": "7eb7e8", - "174592": "198158", + "174592": "37408c", "5a94cd": "7054a4" }, "2": { - "838394": "cc6845", + "848496": "cc6845", "7bcdff": "dd6155", "62ace6": "c44848", "ffffff": "fff4bd", diff --git a/public/images/pokemon/variant/back/666-fancy.json b/public/images/pokemon/variant/back/666-fancy.json new file mode 100644 index 00000000000..5d368667ae3 --- /dev/null +++ b/public/images/pokemon/variant/back/666-fancy.json @@ -0,0 +1,36 @@ +{ + "1": { + "101010": "101010", + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "de4040": "de4040", + "5faa3e": "5faa3e", + "ceab62": "d9edd4", + "b6d26d": "b6d26d", + "e9e052": "e9e052", + "cf7ef3": "cf7ef3", + "c3c3c3": "ffeaff", + "f2d4e3": "f2d4e3", + "ead2e3": "ffeaff" + }, + "2": { + "101010": "101010", + "303030": "00771b", + "675220": "b9c05a", + "504a4a": "b9c05a", + "595959": "6f9f42", + "707068": "6f9f42", + "de4040": "de4040", + "5faa3e": "5faa3e", + "ceab62": "e3e982", + "b6d26d": "b6d26d", + "e9e052": "e9e052", + "cf7ef3": "cf7ef3", + "c3c3c3": "fcf1ff", + "f2d4e3": "f2d4e3", + "ead2e3": "fcf1ff" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/666-fancy_2.json b/public/images/pokemon/variant/back/666-fancy_2.json deleted file mode 100644 index 49478186fd7..00000000000 --- a/public/images/pokemon/variant/back/666-fancy_2.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "textures": [ - { - "image": "666-fancy_2.png", - "format": "RGBA8888", - "size": { - "w": 67, - "h": 67 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 67, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 67 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 67 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:c0935d72f3dd919dfad1f00ce1550c3c:4c9a4c435b13a6c8dbd3fa6eacd260d8:6d5edff9a806f43feff031c9919c9aca$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/666-fancy_2.png b/public/images/pokemon/variant/back/666-fancy_2.png deleted file mode 100644 index a1e23edd659..00000000000 Binary files a/public/images/pokemon/variant/back/666-fancy_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/back/666-fancy_3.json b/public/images/pokemon/variant/back/666-fancy_3.json deleted file mode 100644 index f060b4b02c6..00000000000 --- a/public/images/pokemon/variant/back/666-fancy_3.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "textures": [ - { - "image": "666-fancy_3.png", - "format": "RGBA8888", - "size": { - "w": 67, - "h": 67 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 67, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 67 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 67 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:c0935d72f3dd919dfad1f00ce1550c3c:4c9a4c435b13a6c8dbd3fa6eacd260d8:6d5edff9a806f43feff031c9919c9aca$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/666-fancy_3.png b/public/images/pokemon/variant/back/666-fancy_3.png deleted file mode 100644 index 6d15bc3f680..00000000000 Binary files a/public/images/pokemon/variant/back/666-fancy_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/back/666-high-plains.json b/public/images/pokemon/variant/back/666-high-plains.json index acd62e863c1..6ee5c78e6ca 100644 --- a/public/images/pokemon/variant/back/666-high-plains.json +++ b/public/images/pokemon/variant/back/666-high-plains.json @@ -13,7 +13,8 @@ "504a4a": "7f6991", "c3c3c3": "c3c3c3", "337543": "337543", - "e8c815": "e8c815" + "e8c815": "e8c815", + "773d21": "773d21" }, "2": { "101010": "101010", @@ -29,6 +30,7 @@ "504a4a": "c97034", "c3c3c3": "edc67c", "337543": "337543", - "e8c815": "e8c815" + "e8c815": "e8c815", + "773d21": "773d21" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/666-monsoon.json b/public/images/pokemon/variant/back/666-monsoon.json index afb60e0f5ae..915d471b2b1 100644 --- a/public/images/pokemon/variant/back/666-monsoon.json +++ b/public/images/pokemon/variant/back/666-monsoon.json @@ -1,34 +1,33 @@ { - "1": { - "101010": "101010", - "595959": "724b7a", - "f0f0f8": "f0f0f8", - "303030": "402746", - "ceab62": "d9edd4", - "675220": "958c8a", + "1": { + "101010": "101010", + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", "807676": "807676", - "92f4f4": "92f4f4", - "989898": "989898", - "707068": "a97cbc", + "ceab62": "d9edd4", "5676de": "5676de", - "4eccd6": "4eccd6", - "504a4a": "7f6991", - "c3c3c3": "c3c3c3" - }, - "2": { - "101010": "101010", - "595959": "656565", - "f0f0f8": "f0f0f8", - "303030": "4f4645", - "ceab62": "5857bc", - "675220": "2c3593", - "807676": "807676", - "92f4f4": "92f4f4", - "989898": "989898", - "707068": "5857bc", - "5676de": "5676de", - "4eccd6": "4eccd6", - "504a4a": "2c3593", - "c3c3c3": "b8f9f9" - } + "4eccd6": "4eccd6", + "989898": "989898", + "c3c3c3": "c3c3c3", + "f0f0f8": "f0f0f8" + }, + "2": { + "101010": "101010", + "303030": "3d3231", + "675220": "2c3593", + "504a4a": "2c3593", + "595959": "4f4645", + "707068": "5857bc", + "807676": "807676", + "ceab62": "5857bc", + "5676de": "5676de", + "4eccd6": "4eccd6", + "989898": "989898", + "92f4f4": "92f4f4", + "c3c3c3": "b8f9f9", + "f0f0f8": "f0f0f8" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/666-ocean.json b/public/images/pokemon/variant/back/666-ocean.json index 51a99de1ea8..8b62b4a8072 100644 --- a/public/images/pokemon/variant/back/666-ocean.json +++ b/public/images/pokemon/variant/back/666-ocean.json @@ -21,7 +21,7 @@ "e1384d": "e1384d", "f4ad61": "f4ad61", "f8ef6a": "f8ef6a", - "303030": "b56208", + "303030": "b54908", "ceb362": "ea8742", "675220": "bc601c", "ebcf3f": "ebcf3f", diff --git a/public/images/pokemon/variant/back/666-river.json b/public/images/pokemon/variant/back/666-river.json index b3b9671ee75..c7e5e288d05 100644 --- a/public/images/pokemon/variant/back/666-river.json +++ b/public/images/pokemon/variant/back/666-river.json @@ -1,18 +1,40 @@ { - "2": { - "101010": "101010", - "595959": "8a5702", - "ceab62": "d9a666", - "625841": "625841", - "303030": "7b2800", - "bc813f": "bc813f", - "9c9143": "9c9143", - "675220": "ae7f41", - "707068": "d9a666", - "504a4a": "ae7f41", - "c3c3c3": "e3c384", - "279ec2": "279ec2", - "59c9d3": "59c9d3", - "1d726a": "1d726a" - } + "1": { + "101010": "101010", + "303030": "402746", + "4a412c": "4a412c", + "675220": "958c8a", + "634d20": "634d20", + "1d726a": "1d726a", + "504a4a": "7f6991", + "595959": "724b7a", + "625841": "625841", + "707068": "a97cbc", + "bc813f": "bc813f", + "9c9143": "9c9143", + "ceab62": "ceab62", + "279ec2": "279ec2", + "59c9d3": "59c9d3", + "c3c3c3": "c3c3c3", + "d2a862": "d9edd4" + }, + "2": { + "101010": "101010", + "303030": "7b2800", + "4a412c": "4a412c", + "675220": "ae7f41", + "634d20": "634d20", + "1d726a": "1d726a", + "504a4a": "ae7f41", + "595959": "8a5702", + "625841": "625841", + "707068": "d9a666", + "bc813f": "bc813f", + "9c9143": "9c9143", + "ceab62": "ceab62", + "279ec2": "279ec2", + "59c9d3": "59c9d3", + "c3c3c3": "e3c384", + "d2a862": "d2a862" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/666-river_2.json b/public/images/pokemon/variant/back/666-river_2.json deleted file mode 100644 index 710513e4626..00000000000 --- a/public/images/pokemon/variant/back/666-river_2.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "textures": [ - { - "image": "666-river_2.png", - "format": "RGBA8888", - "size": { - "w": 67, - "h": 67 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 67, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 67 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 67 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:c5c96b8025cde94330c424121707d6d1:0eb4b25134091aa2435bee846468e099:fa23dc87fc53ba2cfa532cf440553cf5$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/666-river_2.png b/public/images/pokemon/variant/back/666-river_2.png deleted file mode 100644 index 8d829e974f4..00000000000 Binary files a/public/images/pokemon/variant/back/666-river_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/back/715.json b/public/images/pokemon/variant/back/715.json new file mode 100644 index 00000000000..7ca4d81e5dc --- /dev/null +++ b/public/images/pokemon/variant/back/715.json @@ -0,0 +1,38 @@ +{ + "1": { + "101010": "101010", + "287366": "731338", + "3aa694": "a42c54", + "404040": "542f98", + "343434": "3e107b", + "252525": "260447", + "4cd9c1": "d04b6c", + "595959": "7a5ccc", + "6a3f73": "0f103c", + "737373": "563d8f", + "801a1a": "801a1a", + "8e5499": "202558", + "bd70cc": "2f386b", + "bfbfbf": "ab83dd", + "e52e2e": "e52e2e", + "f8f8f8": "d5bdec" + }, + "2": { + "101010": "101010", + "287366": "832714", + "3aa694": "b8552c", + "404040": "b18373", + "343434": "906152", + "252525": "6c3f39", + "4cd9c1": "dd834c", + "595959": "e2c7b5", + "6a3f73": "3b0c18", + "737373": "280911", + "801a1a": "801a1a", + "8e5499": "5b1922", + "bd70cc": "7c2928", + "bfbfbf": "43191e", + "e52e2e": "e52e2e", + "f8f8f8": "5a2a2b" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/881.json b/public/images/pokemon/variant/back/881.json new file mode 100644 index 00000000000..3efad4efe60 --- /dev/null +++ b/public/images/pokemon/variant/back/881.json @@ -0,0 +1,42 @@ +{ + "1": { + "e39e1e": "9c1430", + "975e17": "5b0610", + "ffff84": "ee8563", + "ead900": "c6362b", + "101010": "101010", + "2abbfc": "ceb16f", + "09354d": "271014", + "9ab8ba": "cea5b9", + "edf3f2": "faebc8", + "5c7996": "a57185", + "07305f": "4d254a", + "085d94": "714363", + "0981ae": "45242e", + "27aed6": "6e4145", + "072241": "301636", + "097da8": "43222c", + "0a3463": "492146", + "23abd3": "b59795" + }, + "2": { + "e39e1e": "35365e", + "975e17": "211b3d", + "ffff84": "dceeeb", + "ead900": "636287", + "101010": "101010", + "2abbfc": "26c248", + "09354d": "09354d", + "9ab8ba": "a3c465", + "edf3f2": "fcffe4", + "5c7996": "50a751", + "07305f": "7b1a5e", + "085d94": "ad3b6c", + "0981ae": "205e5d", + "27aed6": "2d7b65", + "072241": "5d0e54", + "097da8": "185453", + "0a3463": "721957", + "23abd3": "d49da9" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/881_2.json b/public/images/pokemon/variant/back/881_2.json deleted file mode 100644 index 568946ee9f9..00000000000 --- a/public/images/pokemon/variant/back/881_2.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "textures": [ - { - "image": "881_2.png", - "format": "RGBA8888", - "size": { - "w": 80, - "h": 80 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 66, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 66, - "h": 80 - }, - "frame": { - "x": 0, - "y": 0, - "w": 66, - "h": 80 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:08f9e60b28adb0f1c25487a3423af005:e78d63b8a44825ae516935d669e48f61:1f7350865753535cbb572c579820f817$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/881_2.png b/public/images/pokemon/variant/back/881_2.png deleted file mode 100644 index 2060481d855..00000000000 Binary files a/public/images/pokemon/variant/back/881_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/back/881_3.json b/public/images/pokemon/variant/back/881_3.json deleted file mode 100644 index b9101d9b13f..00000000000 --- a/public/images/pokemon/variant/back/881_3.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "textures": [ - { - "image": "881_3.png", - "format": "RGBA8888", - "size": { - "w": 80, - "h": 80 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 66, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 66, - "h": 80 - }, - "frame": { - "x": 0, - "y": 0, - "w": 66, - "h": 80 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:08f9e60b28adb0f1c25487a3423af005:e78d63b8a44825ae516935d669e48f61:1f7350865753535cbb572c579820f817$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/881_3.png b/public/images/pokemon/variant/back/881_3.png deleted file mode 100644 index 6ed3c2495ba..00000000000 Binary files a/public/images/pokemon/variant/back/881_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/back/987.json b/public/images/pokemon/variant/back/987.json index 1773ba70c36..e28a34d5435 100644 --- a/public/images/pokemon/variant/back/987.json +++ b/public/images/pokemon/variant/back/987.json @@ -9,7 +9,7 @@ "de62a4": "ffc668", "4a83a4": "387fa7", "314a62": "244260", - "70bbb4": "f8d371", + "548e88": "2d60bb", "a4295a": "cc762f" }, "1": { @@ -22,7 +22,7 @@ "de62a4": "ffdf90", "4a83a4": "a1c8db", "314a62": "7396b4", - "70bbb4": "70bbb4", + "548e88": "a9c0c6", "a4295a": "e28c27" }, "2": { @@ -35,7 +35,7 @@ "de62a4": "e25038", "4a83a4": "e6aa47", "314a62": "b56f2a", - "70bbb4": "f8d371", + "548e88": "e0b544", "a4295a": "a62a21" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/212.json b/public/images/pokemon/variant/back/female/212.json new file mode 100644 index 00000000000..84f12bf1434 --- /dev/null +++ b/public/images/pokemon/variant/back/female/212.json @@ -0,0 +1,41 @@ +{ + "0": { + "632929": "215a2d", + "f76b6b": "8cce73", + "a52929": "2f794e", + "101010": "101010", + "d63a3a": "4a9c53", + "9494a5": "9494a5", + "ffffff": "ffffff", + "b5b5ce": "b5b5ce", + "3a3a4a": "3a3a4a", + "9c6b21": "9c6b21", + "dec510": "dec510" + }, + "1": { + "632929": "2f2962", + "f76b6b": "639cf7", + "a52929": "29429c", + "101010": "101010", + "d63a3a": "4263ef", + "9494a5": "6262a4", + "ffffff": "ffffff", + "b5b5ce": "b5b5ce", + "3a3a4a": "3c3c50", + "9c6b21": "131387", + "dec510": "10bdde" + }, + "2": { + "632929": "645117", + "f76b6b": "c59f29", + "a52929": "b88619", + "101010": "101010", + "d63a3a": "ffca2a", + "9494a5": "3c4543", + "ffffff": "ffffff", + "b5b5ce": "b5b5ce", + "3a3a4a": "282d2c", + "9c6b21": "9c6b21", + "dec510": "dec510" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/3.json b/public/images/pokemon/variant/back/female/3.json index 567479d58d0..49fe726b084 100644 --- a/public/images/pokemon/variant/back/female/3.json +++ b/public/images/pokemon/variant/back/female/3.json @@ -1,6 +1,7 @@ { "1": { "843100": "033b22", + "830009": "23033b", "ffbdbd": "a266b0", "ffef52": "37d6de", "debd29": "078a8f", @@ -10,6 +11,7 @@ "101010": "101010", "105242": "190038", "107b6b": "9e1976", + "2e5519": "38001c", "5a9c3a": "b34952", "5ad6c5": "f062a4", "21b59c": "de3592", @@ -18,6 +20,7 @@ }, "2": { "843100": "420514", + "830009": "154205", "ffbdbd": "e7e385", "ffef52": "f75ea8", "debd29": "a30a66", @@ -27,6 +30,7 @@ "101010": "101010", "105242": "381601", "107b6b": "d15d04", + "2e5519": "011c38", "5a9c3a": "446b94", "5ad6c5": "faa405", "21b59c": "fa8405", diff --git a/public/images/pokemon/variant/exp/248-mega.json b/public/images/pokemon/variant/exp/248-mega.json index f6a6d5bf7ed..0a46ac40a4a 100644 --- a/public/images/pokemon/variant/exp/248-mega.json +++ b/public/images/pokemon/variant/exp/248-mega.json @@ -1,32 +1,34 @@ { "1": { - "4a5a39": "533334", - "dee6cd": "dbb1b5", - "101010": "101010", - "accd9c": "c78482", - "ffffff": "ffffff", - "c5c5c5": "c5c5c5", - "739c62": "915957", - "d55200": "006fbe", - "942900": "004194", - "ee5229": "0098fc", - "bd3920": "006fbe", - "737373": "737373", - "6a2000": "004194" +"4a5a39": "533334", +"821610": "004194", +"942900": "004194", +"d0243b": "006fb3", +"d55200": "0098fc", +"ff3e40": "0098fc", +"f24159": "088a72", +"f55e72": "18b8a0", +"ff6668": "1cd9ff", +"739c62": "915957", +"ff8385": "00e0fc", +"ffa3a4": "00ffc8", +"accd9c": "c78482", +"dee6cd": "dbb1b5" }, "2": { - "4a5a39": "06092f", - "dee6cd": "7068b2", - "101010": "101010", - "accd9c": "625695", - "ffffff": "ffffff", - "c5c5c5": "c5c5c5", - "739c62": "2c3071", - "d55200": "ffa904", - "942900": "ee7b06", - "ee5229": "ffef76", - "bd3920": "ffa904", - "737373": "737373", - "6a2000": "ee7b06" +"4a5a39": "06092f", +"821610": "ee7b06", +"942900": "ee7b06", +"d0243b": "ffa904", +"d55200": "ffa904", +"ff3e40": "ffef76", +"f24159": "ffbf44", +"f55e72": "ffd380", +"ff6668": "fef3a1", +"739c62": "2c3071", +"ff8385": "fff8c1", +"ffa3a4": "fffbdd", +"accd9c": "625695", +"dee6cd": "7068b2" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/362-mega.json b/public/images/pokemon/variant/exp/362-mega.json index 27f5d6f5afc..3b6e39436e6 100644 --- a/public/images/pokemon/variant/exp/362-mega.json +++ b/public/images/pokemon/variant/exp/362-mega.json @@ -1,38 +1,35 @@ -{ - "1": { - "000000": "000000", +{"1": { + "010101": "000000", "2b74a8": "84073c", - "a4deff": "ffd287", - "7b7b83": "151a57", - "62bdee": "fd9b44", - "58585f": "0d1146", - "faf9fb": "ff937b", + "bbeeff": "f9383e", "393941": "0d1146", + "7dbbee": "b7113a", + "fefefe": "ff937b", "e6e6f6": "a2b7e5", "7b7b94": "151a57", "c5cde6": "6076c6", "acaccd": "2f3c84", - "52526a": "0d1146", + "2983bd": "d54f14", + "62bdee": "fd9b44", "a82f37": "f9ff3d", - "324c67": "460025", - "ffffff": "ff937b" + "afe3f8": "ffd287", + "20315e": "460025" }, "2": { - "000000": "010101", + "010101": "010101", "2b74a8": "0c4b3a", - "a4deff": "f2ff87", - "7b7b83": "4a282a", - "62bdee": "c0ee46", - "58585f": "221315", - "faf9fb": "c8ff9c", + "bbeeff": "5ce11a", "393941": "221315", + "7dbbee": "009325", + "fefefe": "c8ff9c", "e6e6f6": "9b6146", "7b7b94": "4a282a", "c5cde6": "7e4a3f", "acaccd": "613735", - "52526a": "221315", + "2983bd": "6bb61a", + "62bdee": "c0ee46", "a82f37": "ff36b3", - "324c67": "0a2a2e", - "ffffff": "c8ff9c" + "afe3f8": "f2ff87", + "20315e": "0a2a2e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/653.json b/public/images/pokemon/variant/exp/653.json index aa8c032d4e3..be967d6c9c2 100644 --- a/public/images/pokemon/variant/exp/653.json +++ b/public/images/pokemon/variant/exp/653.json @@ -1,28 +1,28 @@ { "1": { - "796934": "9f398a", - "fee772": "e190c3", "101010": "101010", - "cfb458": "c35ba3", - "7f2d1b": "3c195c", - "ec5631": "794cb7", - "b64126": "502c81", - "736a65": "68326b", - "ffffff": "fbecff", - "c5c5ce": "c093c3", - "524e4e": "404040" + "736028": "9f398a", + "ffd659": "e190c3", + "ccab47": "c35ba3", + "732e17": "3c195c", + "f26130": "794cb7", + "b34724": "502c81", + "737373": "68326b", + "f8f8f8": "fbecff", + "bfbfbf": "c093c3", + "404040": "404040" }, "2": { - "796934": "172547", - "fee772": "3a6a93", "101010": "101010", - "cfb458": "264166", - "7f2d1b": "005646", - "ec5631": "21d170", - "b64126": "0aaa77", - "736a65": "75553c", - "ffffff": "fff8ec", - "c5c5ce": "d4b996", - "524e4e": "404040" + "736028": "172547", + "ffd659": "3a6a93", + "ccab47": "264166", + "732e17": "005646", + "f26130": "21d170", + "b34724": "0aaa77", + "737373": "75553c", + "f8f8f8": "fff8ec", + "bfbfbf": "d4b996", + "404040": "404040" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/654.json b/public/images/pokemon/variant/exp/654.json index a413295bc6c..0f3b2bf3d4e 100644 --- a/public/images/pokemon/variant/exp/654.json +++ b/public/images/pokemon/variant/exp/654.json @@ -1,38 +1,38 @@ { "1": { - "983a29": "6231a5", - "f07944": "ab6ce0", "101010": "101010", - "bf5633": "6231a5", - "987028": "061530", - "f7e77a": "b55390", - "e8b848": "872b59", - "56301f": "471b70", - "af7045": "6231a5", - "8d452e": "c5b3ca", - "969696": "262424", - "414141": "404040", + "736028": "061530", + "ffd659": "b55390", + "ccab47": "872b59", + "732e17": "471b70", + "f26130": "ab6ce0", + "b34724": "6231a5", "f8f8f8": "f7e4fc", - "d8d8c8": "c093c3", - "5c5c5c": "262424", - "000000": "101010" + "737373": "5c255f", + "bfbfbf": "c093c3", + "804913": "c5b3ca", + "262626": "262626", + "404040": "404040", + "f8cf52": "80f37b", + "ffc000": "4fcb61", + "ff8700": "207d4e" }, "2": { - "983a29": "0aaa77", - "f07944": "21d170", "101010": "101010", - "bf5633": "0aaa77", - "987028": "061530", - "f7e77a": "2b5f8a", - "e8b848": "173864", - "56301f": "005646", - "af7045": "0aaa77", - "8d452e": "098794", - "969696": "1a1a22", - "414141": "404040", + "736028": "061530", + "ffd659": "2b5f8a", + "ccab47": "173864", + "732e17": "005646", + "f26130": "21d170", + "b34724": "0aaa77", "f8f8f8": "fff2dd", - "d8d8c8": "d4b996", - "5c5c5c": "1a1a22", - "000000": "101010" + "737373": "75553c", + "bfbfbf": "d4b996", + "804913": "098794", + "262626": "262626", + "404040": "404040", + "f8cf52": "c858a4", + "ffc000": "75308e", + "ff8700": "521364" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/656.json b/public/images/pokemon/variant/exp/656.json index 68743a4c9f1..1d1003f739c 100644 --- a/public/images/pokemon/variant/exp/656.json +++ b/public/images/pokemon/variant/exp/656.json @@ -3,12 +3,12 @@ "838394": "4d7dc5", "62ace6": "8363af", "7bcdff": "9c75c2", - "ffec8c": "ddfff9", + "fdea88": "ddfff9", "a1a1c4": "7ab7ec", "c9b241": "97d6e2", "dfcf77": "bae7e8", "174592": "37408c", - "fdfdfd": "b1e5ff", + "ffffff": "b1e5ff", "9c9cc5": "5385c7", "cdcde6": "7eb7e8", "396a83": "362864", @@ -18,12 +18,12 @@ "838394": "cc6845", "62ace6": "c44848", "7bcdff": "dd6155", - "ffec8c": "ddfff9", + "fdea88": "ddfff9", "a1a1c4": "f7c685", "c9b241": "97d6e2", "dfcf77": "bae7e8", "174592": "198158", - "fdfdfd": "fff4bd", + "ffffff": "fff4bd", "9c9cc5": "c96a48", "cdcde6": "f7b785", "396a83": "5c0d33", diff --git a/public/images/pokemon/variant/exp/658-ash.json b/public/images/pokemon/variant/exp/658-ash.json index 96b60b02adf..79cad7ea42d 100644 --- a/public/images/pokemon/variant/exp/658-ash.json +++ b/public/images/pokemon/variant/exp/658-ash.json @@ -4,6 +4,7 @@ "3f4447": "466698", "de3431": "3fca9f", "f8f8f8": "a1e9f0", + "f4f4f4": "d7effa", "7b282e": "0e3e81", "6b1d1d": "206d74", "4ebdd9": "41a7b0", @@ -25,6 +26,7 @@ "3f4447": "466698", "de3431": "9ceec6", "f8f8f8": "89d2b8", + "f4f4f4": "d7effa", "7b282e": "152a5c", "6b1d1d": "356e8d", "4ebdd9": "2f6e74", diff --git a/public/images/pokemon/variant/exp/664.json b/public/images/pokemon/variant/exp/664.json index 02633098521..bd4164ca7db 100644 --- a/public/images/pokemon/variant/exp/664.json +++ b/public/images/pokemon/variant/exp/664.json @@ -1,30 +1,30 @@ { "1": { - "797987": "9d6260", - "f9f8fa": "ffffff", - "000000": "000000", - "cdcdcd": "e9c7c4", - "54544e": "895a9f", - "383830": "4c2855", - "727272": "a97dbb", - "8e5136": "838b53", - "f0d5b9": "a0c896", - "d8a465": "838b53", - "653925": "626649", - "383834": "383834" + "4d4d4d": "9d6260", + "f8f8f8": "ffffff", + "101010": "101010", + "b3b3b3": "e9c7c4", + "363636": "4c2855", + "747474": "a97dbb", + "4e4e4e": "895a9f", + "9d7247": "838b53", + "d1bf6b": "a0c896", + "b2b2b2": "b2b2b2", + "f7f7f7": "f7f7f7", + "855d31": "626649" }, "2": { - "797987": "590015", - "f9f8fa": "c83e4c", - "000000": "000000", - "cdcdcd": "a70d37", - "54544e": "377772", - "383830": "05312f", - "727272": "73bdae", - "8e5136": "bf8961", - "f0d5b9": "ffe0ba", - "d8a465": "dda476", - "653925": "05312f", - "383834": "383834" + "4d4d4d": "590015", + "f8f8f8": "c83e4c", + "101010": "101010", + "b3b3b3": "a70d37", + "363636": "05312f", + "747474": "73bdae", + "4e4e4e": "377772", + "9d7247": "dda476", + "d1bf6b": "ffe0ba", + "b2b2b2": "b2b2b2", + "f7f7f7": "f7f7f7", + "855d31": "bf8961" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/665.json b/public/images/pokemon/variant/exp/665.json index 02e88015c15..6d828dadb5d 100644 --- a/public/images/pokemon/variant/exp/665.json +++ b/public/images/pokemon/variant/exp/665.json @@ -1,36 +1,36 @@ { "1": { - "8e5136": "838b53", - "653925": "626649", - "52524b": "4c2855", - "f0d5b9": "a0c896", - "d8a465": "838b53", - "838392": "9c615f", - "8b8b8b": "a97dbb", - "000000": "000000", - "cdcdcd": "e9c7c4", - "6a6a6a": "895a9f", - "ffffff": "ffffff", - "f9f8fa": "f9f8fa", - "94416a": "005361", - "ff94b4": "008aac", - "ee5a62": "00aacd" + "363636": "4c2855", + "d1bf6b": "a0c896", + "9d7247": "838b53", + "4e4e4e": "895a9f", + "747474": "a97dbb", + "bfbfbf": "b294be", + "101010": "101010", + "fdfdfd": "fdfdfd", + "8c8c8c": "895a9f", + "4d4d4d": "9c615f", + "f8f8f8": "ffffff", + "b3b3b3": "e9c7c4", + "802626": "005361", + "ff4c4c": "00aacd", + "eed83e": "cae2c3" }, "2": { - "8e5136": "bf8961", - "653925": "bf8961", - "52524b": "05312f", - "f0d5b9": "ffe0ba", - "d8a465": "dda476", - "838392": "590015", - "8b8b8b": "73bdae", - "000000": "000000", - "cdcdcd": "a70d37", - "6a6a6a": "377772", - "ffffff": "c83e4c", - "f9f8fa": "c83e4c", - "94416a": "004270", - "ff94b4": "0092dd", - "ee5a62": "0092dd" + "363636": "05312f", + "d1bf6b": "ffe0ba", + "9d7247": "dda476", + "4e4e4e": "377772", + "747474": "73bdae", + "bfbfbf": "a70d37", + "101010": "101010", + "fdfdfd": "fdfdfd", + "8c8c8c": "590015", + "4d4d4d": "590015", + "f8f8f8": "c83e4c", + "b3b3b3": "a70d37", + "802626": "004270", + "ff4c4c": "0092dd", + "eed83e": "ffe0ba" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/666-fancy.json b/public/images/pokemon/variant/exp/666-fancy.json new file mode 100644 index 00000000000..1f31ac6983d --- /dev/null +++ b/public/images/pokemon/variant/exp/666-fancy.json @@ -0,0 +1,38 @@ +{ + "1": { + "101010": "101010", + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "811c1c": "811c1c", + "de4040": "de4040", + "5faa3e": "5faa3e", + "ceab62": "d9edd4", + "b6d26d": "b6d26d", + "e9e052": "e9e052", + "cf7ef3": "cf7ef3", + "c3c3c3": "ffeaff", + "f2d4e3": "f2d4e3", + "ead2e3": "ffeaff" + }, + "2": { + "101010": "101010", + "303030": "00771b", + "675220": "b9c05a", + "504a4a": "b9c05a", + "595959": "6f9f42", + "707068": "e3e982", + "811c1c": "811c1c", + "de4040": "de4040", + "5faa3e": "5faa3e", + "ceab62": "e3e982", + "b6d26d": "b6d26d", + "e9e052": "e9e052", + "cf7ef3": "cf7ef3", + "c3c3c3": "fcf1ff", + "f2d4e3": "f2d4e3", + "ead2e3": "fcf1ff" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/666-fancy_2.json b/public/images/pokemon/variant/exp/666-fancy_2.json deleted file mode 100644 index bcfde0b3dd4..00000000000 --- a/public/images/pokemon/variant/exp/666-fancy_2.json +++ /dev/null @@ -1,1280 +0,0 @@ -{ - "textures": [ - { - "image": "666-fancy_2.png", - "format": "RGBA8888", - "size": { - "w": 346, - "h": 346 - }, - "scale": 1, - "frames": [ - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 138, - "w": 67, - "h": 69 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 207, - "w": 67, - "h": 69 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 276, - "w": 67, - "h": 69 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 134, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 201, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 268, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 67, - "h": 69 - }, - "frame": { - "x": 67, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 67, - "y": 138, - "w": 67, - "h": 69 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 67, - "y": 207, - "w": 67, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 67, - "y": 276, - "w": 67, - "h": 68 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 67, - "y": 276, - "w": 67, - "h": 68 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 67, - "y": 276, - "w": 67, - "h": 68 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 67, - "y": 276, - "w": 67, - "h": 68 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 68 - }, - "frame": { - "x": 134, - "y": 69, - "w": 67, - "h": 68 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 68 - }, - "frame": { - "x": 134, - "y": 69, - "w": 67, - "h": 68 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 68 - }, - "frame": { - "x": 134, - "y": 69, - "w": 67, - "h": 68 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 201, - "y": 69, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 240, - "y": 138, - "w": 53, - "h": 69 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 293, - "y": 138, - "w": 53, - "h": 69 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 293, - "y": 138, - "w": 53, - "h": 69 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 206, - "w": 53, - "h": 69 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 206, - "w": 53, - "h": 69 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 206, - "w": 53, - "h": 69 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 240, - "y": 207, - "w": 53, - "h": 69 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 275, - "w": 53, - "h": 69 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 275, - "w": 53, - "h": 69 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 53, - "h": 69 - }, - "frame": { - "x": 240, - "y": 276, - "w": 53, - "h": 69 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 293, - "y": 207, - "w": 53, - "h": 69 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 293, - "y": 276, - "w": 53, - "h": 69 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:370e4a87d9d988b8133d25e0b97db22c:d173344c5e41aaa90de937ec3e1b167f:6d5edff9a806f43feff031c9919c9aca$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/666-fancy_2.png b/public/images/pokemon/variant/exp/666-fancy_2.png deleted file mode 100644 index 68af4d0a07a..00000000000 Binary files a/public/images/pokemon/variant/exp/666-fancy_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/666-fancy_3.json b/public/images/pokemon/variant/exp/666-fancy_3.json deleted file mode 100644 index 60fd0634e79..00000000000 --- a/public/images/pokemon/variant/exp/666-fancy_3.json +++ /dev/null @@ -1,1280 +0,0 @@ -{ - "textures": [ - { - "image": "666-fancy_3.png", - "format": "RGBA8888", - "size": { - "w": 346, - "h": 346 - }, - "scale": 1, - "frames": [ - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 138, - "w": 67, - "h": 69 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 207, - "w": 67, - "h": 69 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 276, - "w": 67, - "h": 69 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 134, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 201, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 268, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 67, - "h": 69 - }, - "frame": { - "x": 67, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 67, - "y": 138, - "w": 67, - "h": 69 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 67, - "y": 207, - "w": 67, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 67, - "y": 276, - "w": 67, - "h": 68 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 67, - "y": 276, - "w": 67, - "h": 68 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 67, - "y": 276, - "w": 67, - "h": 68 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 67, - "y": 276, - "w": 67, - "h": 68 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 68 - }, - "frame": { - "x": 134, - "y": 69, - "w": 67, - "h": 68 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 68 - }, - "frame": { - "x": 134, - "y": 69, - "w": 67, - "h": 68 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 68 - }, - "frame": { - "x": 134, - "y": 69, - "w": 67, - "h": 68 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 201, - "y": 69, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 240, - "y": 138, - "w": 53, - "h": 69 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 293, - "y": 138, - "w": 53, - "h": 69 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 293, - "y": 138, - "w": 53, - "h": 69 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 206, - "w": 53, - "h": 69 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 206, - "w": 53, - "h": 69 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 206, - "w": 53, - "h": 69 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 240, - "y": 207, - "w": 53, - "h": 69 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 275, - "w": 53, - "h": 69 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 275, - "w": 53, - "h": 69 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 53, - "h": 69 - }, - "frame": { - "x": 240, - "y": 276, - "w": 53, - "h": 69 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 293, - "y": 207, - "w": 53, - "h": 69 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 293, - "y": 276, - "w": 53, - "h": 69 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:370e4a87d9d988b8133d25e0b97db22c:d173344c5e41aaa90de937ec3e1b167f:6d5edff9a806f43feff031c9919c9aca$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/666-fancy_3.png b/public/images/pokemon/variant/exp/666-fancy_3.png deleted file mode 100644 index a8e39976f2a..00000000000 Binary files a/public/images/pokemon/variant/exp/666-fancy_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/666-high-plains.json b/public/images/pokemon/variant/exp/666-high-plains.json index 330d1c39772..f63bb4f81f3 100644 --- a/public/images/pokemon/variant/exp/666-high-plains.json +++ b/public/images/pokemon/variant/exp/666-high-plains.json @@ -14,7 +14,8 @@ "c3c3c3": "ffeaff", "811c1c": "811c1c", "337543": "337543", - "e8c815": "e8c815" + "e8c815": "e8c815", + "773d21": "773d21" }, "2": { "101010": "101010", @@ -31,6 +32,7 @@ "c3c3c3": "edc67c", "811c1c": "811c1c", "337543": "337543", - "e8c815": "e8c815" + "e8c815": "e8c815", + "773d21": "773d21" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/666-icy-snow.json b/public/images/pokemon/variant/exp/666-icy-snow.json index 9cae71418ce..d69d48d89e9 100644 --- a/public/images/pokemon/variant/exp/666-icy-snow.json +++ b/public/images/pokemon/variant/exp/666-icy-snow.json @@ -6,12 +6,13 @@ "303030": "402746", "cfd9cf": "cfd9cf", "c5c5da": "c5c5da", - "ceab62": "d9edd4", "675220": "958c8a", - "504a4a": "7f6991", + "ceab62": "d9edd4", "707068": "a97cbc", + "504a4a": "7f6991", "c3c3c3": "ffeaff", "acacc2": "acacc2", + "95a1a1": "95a1a1", "811c1c": "811c1c" }, "2": { @@ -21,12 +22,13 @@ "303030": "364051", "cfd9cf": "cfd9cf", "c5c5da": "c5c5da", - "ceab62": "8c91a4", "675220": "666b7d", - "504a4a": "666b7d", + "ceab62": "8c91a4", "707068": "8c91a4", + "504a4a": "666b7d", "c3c3c3": "fefeff", "acacc2": "acacc2", + "95a1a1": "95a1a1", "811c1c": "811c1c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/666-meadow.json b/public/images/pokemon/variant/exp/666-meadow.json new file mode 100644 index 00000000000..c766325427b --- /dev/null +++ b/public/images/pokemon/variant/exp/666-meadow.json @@ -0,0 +1,36 @@ +{ + "1": { + "101010": "101010", + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "811c1c": "811c1c", + "b4295a": "b4295a", + "da6b7e": "da6b7e", + "ceab62": "d9edd4", + "e66fad": "e66fad", + "2d9b9b": "2d9b9b", + "f3a0ca": "f3a0ca", + "c3c3c3": "ffeaff", + "f2f2f2": "f2f2f2" + }, + "2": { + "101010": "101010", + "303030": "770921", + "675220": "a2275e", + "504a4a": "a2275e", + "595959": "9e3941", + "707068": "ce5283", + "811c1c": "811c1c", + "b4295a": "b4295a", + "da6b7e": "da6b7e", + "ceab62": "ce5283", + "e66fad": "e66fad", + "2d9b9b": "2d9b9b", + "f3a0ca": "f3a0ca", + "c3c3c3": "f4c2ec", + "f2f2f2": "f2f2f2" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/666-meadow_2.json b/public/images/pokemon/variant/exp/666-meadow_2.json deleted file mode 100644 index 4d4d4d16147..00000000000 --- a/public/images/pokemon/variant/exp/666-meadow_2.json +++ /dev/null @@ -1,1280 +0,0 @@ -{ - "textures": [ - { - "image": "666-meadow_2.png", - "format": "RGBA8888", - "size": { - "w": 346, - "h": 346 - }, - "scale": 1, - "frames": [ - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 138, - "w": 67, - "h": 69 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 207, - "w": 67, - "h": 69 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 276, - "w": 67, - "h": 69 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 134, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 201, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 268, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 67, - "h": 69 - }, - "frame": { - "x": 67, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 67, - "y": 138, - "w": 67, - "h": 69 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 67, - "y": 207, - "w": 67, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 67, - "y": 276, - "w": 67, - "h": 68 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 67, - "y": 276, - "w": 67, - "h": 68 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 67, - "y": 276, - "w": 67, - "h": 68 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 67, - "y": 276, - "w": 67, - "h": 68 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 68 - }, - "frame": { - "x": 134, - "y": 69, - "w": 67, - "h": 68 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 68 - }, - "frame": { - "x": 134, - "y": 69, - "w": 67, - "h": 68 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 68 - }, - "frame": { - "x": 134, - "y": 69, - "w": 67, - "h": 68 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 201, - "y": 69, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 240, - "y": 138, - "w": 53, - "h": 69 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 293, - "y": 138, - "w": 53, - "h": 69 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 293, - "y": 138, - "w": 53, - "h": 69 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 206, - "w": 53, - "h": 69 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 206, - "w": 53, - "h": 69 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 206, - "w": 53, - "h": 69 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 240, - "y": 207, - "w": 53, - "h": 69 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 275, - "w": 53, - "h": 69 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 275, - "w": 53, - "h": 69 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 53, - "h": 69 - }, - "frame": { - "x": 240, - "y": 276, - "w": 53, - "h": 69 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 293, - "y": 207, - "w": 53, - "h": 69 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 293, - "y": 276, - "w": 53, - "h": 69 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:223ce33721ef8da9ff40286099c20de4:b82acd304c2a8b8cebeda2043a3e1f96:f8ac4807b4d6eef2256fa1b93e0f89ba$" - } -} diff --git a/public/images/pokemon/variant/exp/666-meadow_2.png b/public/images/pokemon/variant/exp/666-meadow_2.png deleted file mode 100644 index 8aada72636f..00000000000 Binary files a/public/images/pokemon/variant/exp/666-meadow_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/666-meadow_3.json b/public/images/pokemon/variant/exp/666-meadow_3.json deleted file mode 100644 index 8af56626a35..00000000000 --- a/public/images/pokemon/variant/exp/666-meadow_3.json +++ /dev/null @@ -1,1280 +0,0 @@ -{ - "textures": [ - { - "image": "666-meadow_3.png", - "format": "RGBA8888", - "size": { - "w": 346, - "h": 346 - }, - "scale": 1, - "frames": [ - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 138, - "w": 67, - "h": 69 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 207, - "w": 67, - "h": 69 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 276, - "w": 67, - "h": 69 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 134, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 201, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 268, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 67, - "h": 69 - }, - "frame": { - "x": 67, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 67, - "y": 138, - "w": 67, - "h": 69 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 67, - "y": 207, - "w": 67, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 67, - "y": 276, - "w": 67, - "h": 68 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 67, - "y": 276, - "w": 67, - "h": 68 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 67, - "y": 276, - "w": 67, - "h": 68 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 67, - "y": 276, - "w": 67, - "h": 68 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 68 - }, - "frame": { - "x": 134, - "y": 69, - "w": 67, - "h": 68 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 68 - }, - "frame": { - "x": 134, - "y": 69, - "w": 67, - "h": 68 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 68 - }, - "frame": { - "x": 134, - "y": 69, - "w": 67, - "h": 68 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 201, - "y": 69, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 240, - "y": 138, - "w": 53, - "h": 69 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 293, - "y": 138, - "w": 53, - "h": 69 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 293, - "y": 138, - "w": 53, - "h": 69 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 206, - "w": 53, - "h": 69 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 206, - "w": 53, - "h": 69 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 206, - "w": 53, - "h": 69 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 240, - "y": 207, - "w": 53, - "h": 69 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 275, - "w": 53, - "h": 69 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 275, - "w": 53, - "h": 69 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 53, - "h": 69 - }, - "frame": { - "x": 240, - "y": 276, - "w": 53, - "h": 69 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 293, - "y": 207, - "w": 53, - "h": 69 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 293, - "y": 276, - "w": 53, - "h": 69 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:223ce33721ef8da9ff40286099c20de4:b82acd304c2a8b8cebeda2043a3e1f96:f8ac4807b4d6eef2256fa1b93e0f89ba$" - } -} diff --git a/public/images/pokemon/variant/exp/666-meadow_3.png b/public/images/pokemon/variant/exp/666-meadow_3.png deleted file mode 100644 index 146ea5e2ba9..00000000000 Binary files a/public/images/pokemon/variant/exp/666-meadow_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/666-monsoon.json b/public/images/pokemon/variant/exp/666-monsoon.json index edc2e86427e..915d471b2b1 100644 --- a/public/images/pokemon/variant/exp/666-monsoon.json +++ b/public/images/pokemon/variant/exp/666-monsoon.json @@ -1,36 +1,33 @@ { - "1": { - "101010": "101010", - "595959": "724b7a", - "f0f0f8": "f0f0f8", - "303030": "402746", - "ceab62": "d9edd4", - "675220": "958c8a", + "1": { + "101010": "101010", + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", "807676": "807676", - "92f4f4": "92f4f4", - "989898": "989898", - "504a4a": "7f6991", - "707068": "a97cbc", - "4eccd6": "4eccd6", + "ceab62": "d9edd4", "5676de": "5676de", - "c3c3c3": "ffeaff", - "811c1c": "811c1c" - }, - "2": { - "101010": "101010", - "595959": "656565", - "f0f0f8": "f0f0f8", - "303030": "4f4645", - "ceab62": "5857bc", - "675220": "2c3593", - "807676": "807676", - "92f4f4": "92f4f4", - "989898": "989898", - "504a4a": "2c3593", - "707068": "5857bc", - "4eccd6": "4eccd6", - "5676de": "5676de", - "c3c3c3": "b8f9f9", - "811c1c": "811c1c" - } + "4eccd6": "4eccd6", + "989898": "989898", + "c3c3c3": "c3c3c3", + "f0f0f8": "f0f0f8" + }, + "2": { + "101010": "101010", + "303030": "3d3231", + "675220": "2c3593", + "504a4a": "2c3593", + "595959": "4f4645", + "707068": "5857bc", + "807676": "807676", + "ceab62": "5857bc", + "5676de": "5676de", + "4eccd6": "4eccd6", + "989898": "989898", + "92f4f4": "92f4f4", + "c3c3c3": "b8f9f9", + "f0f0f8": "f0f0f8" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/666-ocean.json b/public/images/pokemon/variant/exp/666-ocean.json index 26a38bad7a8..c468bbcbf1e 100644 --- a/public/images/pokemon/variant/exp/666-ocean.json +++ b/public/images/pokemon/variant/exp/666-ocean.json @@ -22,7 +22,7 @@ "e1384d": "e1384d", "f3a861": "f3a861", "fcf372": "fcf372", - "303030": "b56208", + "303030": "b54908", "ceab62": "ea8742", "675220": "bc601c", "504a4a": "bc601c", diff --git a/public/images/pokemon/variant/exp/666-poke-ball.json b/public/images/pokemon/variant/exp/666-poke-ball.json index 36cd38b95f0..fe6b42f6ef3 100644 --- a/public/images/pokemon/variant/exp/666-poke-ball.json +++ b/public/images/pokemon/variant/exp/666-poke-ball.json @@ -3,17 +3,36 @@ "101010": "101010", "595959": "724b7a", "b72c2c": "b72c2c", - "303030": "402746", "dc4b4b": "dc4b4b", - "ceab62": "d9edd4", + "303030": "402746", "675220": "958c8a", + "ceab62": "d9edd4", "e97e7e": "e97e7e", "971d1d": "971d1d", "f8f8f8": "f8f8f8", - "504a4a": "7f6991", "707068": "a97cbc", + "504a4a": "7f6991", "c3c3c3": "ffeaff", "811c1c": "811c1c", - "a9a99e": "a9a99e" + "a9a99e": "a9a99e", + "2c2b2b": "402746" + }, + "2": { + "101010": "101010", + "f8f8f8": "00006d", + "303030": "ae001a", + "2c2b2b": "660000", + "504a4a": "a70038", + "595959": "df0036", + "c3c3c3": "f0a6bf", + "707068": "d5375a", + "a9a99e": "000050", + "811c1c": "811c1c", + "971d1d": "040046", + "b72c2c": "00005e", + "dc4b4b": "19007d", + "e97e7e": "2e2095", + "675220": "a70038", + "ceab62": "d5375a" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/666-poke-ball_3.json b/public/images/pokemon/variant/exp/666-poke-ball_3.json deleted file mode 100644 index 3d133124358..00000000000 --- a/public/images/pokemon/variant/exp/666-poke-ball_3.json +++ /dev/null @@ -1,1280 +0,0 @@ -{ - "textures": [ - { - "image": "666-poke-ball_3.png", - "format": "RGBA8888", - "size": { - "w": 346, - "h": 346 - }, - "scale": 1, - "frames": [ - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 138, - "w": 67, - "h": 69 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 207, - "w": 67, - "h": 69 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 276, - "w": 67, - "h": 69 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 134, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 201, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 268, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 67, - "h": 69 - }, - "frame": { - "x": 67, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 67, - "y": 138, - "w": 67, - "h": 69 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 67, - "y": 207, - "w": 67, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 67, - "y": 276, - "w": 67, - "h": 68 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 67, - "y": 276, - "w": 67, - "h": 68 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 67, - "y": 276, - "w": 67, - "h": 68 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 67, - "y": 276, - "w": 67, - "h": 68 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 68 - }, - "frame": { - "x": 134, - "y": 69, - "w": 67, - "h": 68 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 68 - }, - "frame": { - "x": 134, - "y": 69, - "w": 67, - "h": 68 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 68 - }, - "frame": { - "x": 134, - "y": 69, - "w": 67, - "h": 68 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 201, - "y": 69, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 240, - "y": 138, - "w": 53, - "h": 69 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 293, - "y": 138, - "w": 53, - "h": 69 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 293, - "y": 138, - "w": 53, - "h": 69 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 206, - "w": 53, - "h": 69 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 206, - "w": 53, - "h": 69 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 206, - "w": 53, - "h": 69 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 240, - "y": 207, - "w": 53, - "h": 69 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 275, - "w": 53, - "h": 69 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 275, - "w": 53, - "h": 69 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 53, - "h": 69 - }, - "frame": { - "x": 240, - "y": 276, - "w": 53, - "h": 69 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 293, - "y": 207, - "w": 53, - "h": 69 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 293, - "y": 276, - "w": 53, - "h": 69 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:9b0791af9130022168ad784a59e299ce:b180b141bed2ea965d6f07d9e2cd7ecc:8ec14f129d1691b8da504a13b661abed$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/666-poke-ball_3.png b/public/images/pokemon/variant/exp/666-poke-ball_3.png deleted file mode 100644 index 767a55ab849..00000000000 Binary files a/public/images/pokemon/variant/exp/666-poke-ball_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/666-river.json b/public/images/pokemon/variant/exp/666-river.json index df10a73d783..c7e5e288d05 100644 --- a/public/images/pokemon/variant/exp/666-river.json +++ b/public/images/pokemon/variant/exp/666-river.json @@ -1,19 +1,40 @@ { - "2": { - "101010": "101010", - "595959": "8a5702", - "ceab62": "d9a666", - "303030": "7b2800", - "625843": "625843", - "bc813f": "bc813f", - "9c9143": "9c9143", - "675220": "ae7f41", - "504a4a": "ae7f41", - "707068": "d9a666", - "c3c3c3": "e3c384", - "811c1c": "811c1c", - "59c9d3": "59c9d3", - "279ec2": "279ec2", - "1d726a": "1d726a" - } + "1": { + "101010": "101010", + "303030": "402746", + "4a412c": "4a412c", + "675220": "958c8a", + "634d20": "634d20", + "1d726a": "1d726a", + "504a4a": "7f6991", + "595959": "724b7a", + "625841": "625841", + "707068": "a97cbc", + "bc813f": "bc813f", + "9c9143": "9c9143", + "ceab62": "ceab62", + "279ec2": "279ec2", + "59c9d3": "59c9d3", + "c3c3c3": "c3c3c3", + "d2a862": "d9edd4" + }, + "2": { + "101010": "101010", + "303030": "7b2800", + "4a412c": "4a412c", + "675220": "ae7f41", + "634d20": "634d20", + "1d726a": "1d726a", + "504a4a": "ae7f41", + "595959": "8a5702", + "625841": "625841", + "707068": "d9a666", + "bc813f": "bc813f", + "9c9143": "9c9143", + "ceab62": "ceab62", + "279ec2": "279ec2", + "59c9d3": "59c9d3", + "c3c3c3": "e3c384", + "d2a862": "d2a862" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/666-river_2.json b/public/images/pokemon/variant/exp/666-river_2.json deleted file mode 100644 index f840b39ccfd..00000000000 --- a/public/images/pokemon/variant/exp/666-river_2.json +++ /dev/null @@ -1,1280 +0,0 @@ -{ - "textures": [ - { - "image": "666-river_2.png", - "format": "RGBA8888", - "size": { - "w": 346, - "h": 346 - }, - "scale": 1, - "frames": [ - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 138, - "w": 67, - "h": 69 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 207, - "w": 67, - "h": 69 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 276, - "w": 67, - "h": 69 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 134, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 201, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 268, - "y": 0, - "w": 67, - "h": 69 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 67, - "h": 69 - }, - "frame": { - "x": 67, - "y": 69, - "w": 67, - "h": 69 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 69 - }, - "frame": { - "x": 67, - "y": 138, - "w": 67, - "h": 69 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 69 - }, - "frame": { - "x": 67, - "y": 207, - "w": 67, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 67, - "y": 276, - "w": 67, - "h": 68 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 67, - "y": 276, - "w": 67, - "h": 68 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 67, - "y": 276, - "w": 67, - "h": 68 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 67, - "y": 276, - "w": 67, - "h": 68 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 68 - }, - "frame": { - "x": 134, - "y": 69, - "w": 67, - "h": 68 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 68 - }, - "frame": { - "x": 134, - "y": 69, - "w": 67, - "h": 68 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 68 - }, - "frame": { - "x": 134, - "y": 69, - "w": 67, - "h": 68 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 201, - "y": 69, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 268, - "y": 69, - "w": 53, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 137, - "w": 53, - "h": 69 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 240, - "y": 138, - "w": 53, - "h": 69 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 293, - "y": 138, - "w": 53, - "h": 69 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 293, - "y": 138, - "w": 53, - "h": 69 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 206, - "w": 53, - "h": 69 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 206, - "w": 53, - "h": 69 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 206, - "w": 53, - "h": 69 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 240, - "y": 207, - "w": 53, - "h": 69 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 134, - "y": 275, - "w": 53, - "h": 69 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 187, - "y": 275, - "w": 53, - "h": 69 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 53, - "h": 69 - }, - "frame": { - "x": 240, - "y": 276, - "w": 53, - "h": 69 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 53, - "h": 69 - }, - "frame": { - "x": 293, - "y": 207, - "w": 53, - "h": 69 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 53, - "h": 69 - }, - "frame": { - "x": 293, - "y": 276, - "w": 53, - "h": 69 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:3ecaf6e3ae563f3da9598e7b18b87b05:e4ece90a3e9880c6499c363b000de8dd:fa23dc87fc53ba2cfa532cf440553cf5$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/666-river_2.png b/public/images/pokemon/variant/exp/666-river_2.png deleted file mode 100644 index 863acbbdc76..00000000000 Binary files a/public/images/pokemon/variant/exp/666-river_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/696.json b/public/images/pokemon/variant/exp/696.json index 3a4b4480673..677f5d98578 100644 --- a/public/images/pokemon/variant/exp/696.json +++ b/public/images/pokemon/variant/exp/696.json @@ -1,40 +1,38 @@ { "1": { - "774411":"5e0b0b", - "101010":"101010", - "ff8f1f":"a50d0d", - "4f2e1d":"023425", - "5f4f4f":"0b4c29", - "af8f7f":"478136", - "3f3f44":"4c3216", - "8f6f5f":"1b6430", - "f8f7f9":"dfdea7", - "bfbfcc":"cbbe8c", - "121212":"121212", - "8f8f99":"ad8c63", - "c2c2cf":"c9bc87", - "fbfafc":"dddca1", - "772d34":"77452d", - "ff9bd5":"c98c68" - }, - "2": { - "774411":"395cb7", - "101010":"101010", - "ff8f1f":"d2e9ff", - "4f2e1d":"3e1f18", - "5f4f4f":"644943", - "af8f7f":"a59e9a", - "3f3f44":"250860", - "8f6f5f":"83726e", - "f8f7f9":"6e46a7", - "bfbfcc":"593097", - "121212":"decaff", - "8f8f99":"411684", - "c2c2cf":"7ccad5", - "fbfafc":"fbfafc", - "772d34":"375ab3", - "ff9bd5":"79c8d3" - } +"734517": "5e0b0b", +"ffa64c": "a50d0d", +"4a322c": "023425", +"404040": "4c3216", +"101010": "101010", +"65483a": "0b4c29", +"966858": "1b6430", +"f8f8f8": "dfdea7", +"8c8c8c": "ad8c63", +"bfbfbf": "cbbe8c", +"000000": "000000", +"b73b6b": "4c3216", +"ff949e": "c98c68", +"b3b9b9": "cbbe8c", +"3f3d3d": "4c3216" +}, +"2": { +"734517": "395cb7", +"ffa64c": "d2e9ff", +"4a322c": "3e1f18", +"404040": "250860", +"101010": "101010", +"65483a": "644943", +"966858": "83726e", +"f8f8f8": "6e46a7", +"8c8c8c": "411684", +"bfbfbf": "593097", +"000000": "decaff", +"b73b6b": "395cb7", +"ff949e": "79c8d3", +"b3b9b9": "79c8d3", +"3f3d3d": "395cb7" +} } diff --git a/public/images/pokemon/variant/exp/697.json b/public/images/pokemon/variant/exp/697.json index dae4554a1b7..b8d305022f5 100644 --- a/public/images/pokemon/variant/exp/697.json +++ b/public/images/pokemon/variant/exp/697.json @@ -1,42 +1,42 @@ { - "1": { - "1f0a0a":"1f0a0a", - "471515":"0a1b17", - "621e1d":"0b241e", - "902e2c":"153626", - "b45250":"285234", - "d16c6b":"416a45", - "653510":"5e0b0b", - "b56726":"971c1c", - "e39f33":"b52424", - "756b66":"ad8c63", - "b1b0b5":"cbbe8c", - "f0f0f2":"dfdea7", - "573b43":"4c3216", - "736964":"ab885f", - "ac628a":"9d5d18", - "aeadb3":"a88860", - "ededf0":"dbdaa4" - }, - "2": { - "1f0a0a":"1f0a0a", - "471515":"191124", - "621e1d":"52352f", - "902e2c":"83726e", - "b45250":"ab9b97", - "d16c6b":"c7bcb9", - "653510":"9d5390", - "b56726":"ce7ecc", - "e39f33":"f4dbf6", - "756b66":"26173b", - "b1b0b5":"33214f", - "f0f0f2":"4b2e64", - "573b43":"cc7cc9", - "736964":"f6dcf7", - "ac628a":"eed5f0", - "aeadb3":"c779c4", - "ededf0":"f8defa" - } +"1": { +"080808": "080808", +"32252c": "3e1e17", +"50131e": "0b241e", +"722533": "153626", +"54434c": "4c3216", +"964b1c": "5e0b0b", +"963e4e": "285234", +"bf7545": "971c1c", +"f19d5a": "b52424", +"9f9d98": "ad8c63", +"cccccc": "cbbe8c", +"fafafa": "dfdea7", +"cac2c2": "cbbe8c", +"f7eeee": "dfdea7", +"53414b": "4c3216", +"30222a": "3e1e17", +"53454d": "4c3216" +}, +"2": { +"080808": "080808", +"32252c": "0d0124", +"50131e": "573b36", +"722533": "83726e", +"54434c": "170c25", +"964b1c": "9d5390", +"963e4e": "ab9b97", +"bf7545": "ce7ecc", +"f19d5a": "f4dbf6", +"9f9d98": "26173b", +"cccccc": "33214f", +"fafafa": "4b2e64", +"cac2c2": "ce7ecc", +"f7eeee": "f4dbf6", +"53414b": "dea5dd", +"30222a": "ce7ecc", +"53454d": "f4dbf6" +} } diff --git a/public/images/pokemon/variant/exp/700.json b/public/images/pokemon/variant/exp/700.json index 0b6071ad765..1189d463f2b 100644 --- a/public/images/pokemon/variant/exp/700.json +++ b/public/images/pokemon/variant/exp/700.json @@ -1,34 +1,32 @@ { - "1": { - "9a4557": "452f89", - "19657b": "a63071", - "fb9cc3": "c7a6ee", - "52cbee": "e974db", - "000000": "000000", - "cb628d": "996cd2", - "f7bbd4": "e1cff3", - "0d146e": "0d146e", - "3744e5": "d648b7", - "584f4f": "5c6889", - "ffffff": "f7f5ff", - "1f337b": "a63071", - "cbc0c0": "c3c5d9", - "2999b9": "d648b7" - }, - "2": { - "9a4557": "197d46", - "19657b": "c72537", - "fb9cc3": "7dec9d", - "52cbee": "ff9a68", - "000000": "000000", - "cb628d": "5dae7d", - "f7bbd4": "f7bbd4", - "0d146e": "0d146e", - "3744e5": "eb5244", - "584f4f": "7f5c89", - "ffffff": "fff5fc", - "1f337b": "c72537", - "cbc0c0": "d9c3d6", - "2999b9": "eb5244" - } +"1": { +"101010": "101010", +"8a2843": "452f89", +"235a99": "a63071", +"895c72": "5c6889", +"d85a7a": "996cd2", +"528fcc": "d648b7", +"a88d8c": "8c8fa8", +"f18a78": "b52d27", +"fa8caa": "c7a6ee", +"64c8f3": "e974db", +"d9c3c3": "c3c5d9", +"fff5f5": "f7f5ff", +"65798c": "65798c" +}, +"2": { +"101010": "101010", +"8a2843": "0e6134", +"235a99": "900d1b", +"895c72": "7f5c89", +"d85a7a": "5dae7d", +"528fcc": "dd3d4f", +"a88d8c": "7f5c89", +"f18a78": "d14ea4", +"fa8caa": "7dec9d", +"64c8f3": "ff9a68", +"d9c3c3": "d9c3d6", +"fff5f5": "fff5fc", +"65798c": "65798c" +} } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/702.json b/public/images/pokemon/variant/exp/702.json index 1edd126264e..12feb29a0fd 100644 --- a/public/images/pokemon/variant/exp/702.json +++ b/public/images/pokemon/variant/exp/702.json @@ -3,30 +3,30 @@ "101010": "101010", "262626": "2a3b5e", "4d4d4d": "6789b3", - "ccbb99": "a3d1cc", - "efefcf": "ddfff5", - "704030": "a53c42", - "906030": "c9685f", - "efbf5f": "ffd3b6", - "cf8f4f": "e49f84", + "bfbf86": "a3d1cc", + "f2f2aa": "ddfff5", + "735c2e": "a53c42", + "997a3d": "c9685f", + "f2c261": "ffd3b6", + "bf994c": "e49f84", "1d1d1d": "1a1c45", - "fefefe": "fefefe", + "f8f8f8": "f8f8f8", "464646": "424b8f", - "df7f5f": "7cd6a1" + "d97d21": "7cd6a1" }, "2": { "101010": "101010", "262626": "072d38", "4d4d4d": "197870", - "ccbb99": "aaa8d6", - "efefcf": "ece5ff", - "704030": "1e0e27", - "906030": "2d1533", - "efbf5f": "5f3662", - "cf8f4f": "432249", + "bfbf86": "aaa8d6", + "f2f2aa": "ece5ff", + "735c2e": "1e0e27", + "997a3d": "2d1533", + "f2c261": "5f3662", + "bf994c": "432249", "1d1d1d": "02172d", - "fefefe": "fefefe", + "f8f8f8": "f8f8f8", "464646": "17646c", - "df7f5f": "d2fff1" + "d97d21": "d2fff1" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/704.json b/public/images/pokemon/variant/exp/704.json index 38e5cdaf70d..e292d6fb41f 100644 --- a/public/images/pokemon/variant/exp/704.json +++ b/public/images/pokemon/variant/exp/704.json @@ -1,30 +1,30 @@ { "1": { - "6f5e80": "4e4094", - "e0d3e0": "fbb3d2", - "010202": "101010", - "bbafc4": "c7a1e5", - "2f6b38": "4e4094", - "74d457": "3aa8c4", - "3da84d": "197497", - "3f3d5e": "4e4094", - "a497c2": "c7a1e5", - "766fa6": "8b69c3", - "4c3143": "4e4094", - "cc93ab": "c7a1e5" + "807380": "b93f84", + "f2daf2": "fbb3d2", + "bfacbf": "e56ca6", + "4d454d": "8a2166", + "101010": "101010", + "4d993d": "197497", + "66cc52": "3aa8c4", + "b8a1e5": "c7a1e5", + "8f7db3": "8b69c3", + "665980": "4e4094", + "c25054": "c68260", + "de817e": "e5e1a1" }, "2": { - "6f5e80": "274159", - "e0d3e0": "92d8c8", - "010202": "101010", - "bbafc4": "63a99e", - "2f6b38": "134557", - "74d457": "d27e26", - "3da84d": "a34205", - "3f3d5e": "134557", - "a497c2": "63a99e", - "766fa6": "2f667c", - "4c3143": "134557", - "cc93ab": "63a99e" + "807380": "237e7f", + "f2daf2": "92d8c8", + "bfacbf": "63a99e", + "4d454d": "134557", + "101010": "101010", + "4d993d": "a34205", + "66cc52": "d27e26", + "b8a1e5": "4a9699", + "8f7db3": "2f667c", + "665980": "274159", + "c25054": "9268a4", + "de817e": "f2daf2" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/705.json b/public/images/pokemon/variant/exp/705.json index a29b8f124dc..bf9aa91eb4b 100644 --- a/public/images/pokemon/variant/exp/705.json +++ b/public/images/pokemon/variant/exp/705.json @@ -1,33 +1,34 @@ { "1": { - "101010":"101010", - "4d454d":"8a2166", - "807380":"b93f84", - "bfacbf":"e56ca6", - "f2daf2":"fbb3d2", - "665980":"4e4094", - "8f7db3":"8b69c3", - "b8a1e5":"c7a1e5", - "4d993d":"aa6a00", - "66cc52":"ffd047", - "4e9c3e":"0c5474", - "67cf53":"3aa8c4", - "b6f2aa":"63cee1" + "807380": "b93f84", + "bfacbf": "e56ca6", + "f2daf2": "fbb3d2", + "4d454d": "8a2166", + "307922": "aa6a00", + "46b030": "ffd047", + "101010": "101010", + "98bd51": "197497", + "d2e79e": "3aa8c4", + "647543": "0c5474", + "b8a1e5": "c7a1e5", + "665980": "4e4094", + "8f7db3": "8b69c3", + "ef6f8f": "b93f84" }, "2": { - "101010":"101010", - "4d454d":"194f51", - "807380":"2b736f", - "bfacbf":"5db6a9", - "f2daf2":"9cead8", - "665980":"274159", - "8f7db3":"2f667c", - "b8a1e5":"4a9699", - "4d993d":"007d61", - "66cc52":"49ffbf", - "4e9c3e":"842401", - "67cf53":"a34205", - "b6f2aa":"d27e26" + "807380": "2b736f", + "bfacbf": "5db6a9", + "f2daf2": "9cead8", + "4d454d": "194f51", + "307922": "007d61", + "46b030": "49ffbf", + "101010": "101010", + "98bd51": "a34205", + "d2e79e": "d27e26", + "647543": "842401", + "b8a1e5": "4a9699", + "665980": "274159", + "8f7db3": "2f667c", + "3f6f8f": "9268a4" } -} - +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/713.json b/public/images/pokemon/variant/exp/713.json index d18009819f4..ca45360ecea 100644 --- a/public/images/pokemon/variant/exp/713.json +++ b/public/images/pokemon/variant/exp/713.json @@ -1,26 +1,32 @@ { "1": { - "42575f": "994255", - "bbeef9": "ffbfda", - "ffffff": "ffebf2", - "473552": "4c131f", - "9e7ac1": "994255", - "6a4e7a": "732334", - "8db7c7": "d97389", - "000000": "000000", - "698e9c": "bf566d", - "e6c81e": "9dcc3e" + "608cba": "bf566d", + "bff4ff": "ffbfda", + "85d7f2": "f29eb3", + "967acc": "732334", + "77b8d9": "d97389", + "335980": "994255", + "f2ffff": "ffebf2", + "101010": "101010", + "737373": "737373", + "bfbfbf": "bfbfbf", + "efab34": "9dcc3e", + "ffe46a": "cbe696", + "f8f8f8": "f8f8f8" }, "2": { - "42575f": "42575f", - "bbeef9": "fcc95c", - "ffffff": "fff2ad", - "473552": "473552", - "9e7ac1": "6cb3ae", - "6a4e7a": "006761", - "8db7c7": "cc7b1e", - "000000": "000000", - "698e9c": "a8632a", - "e6c81e": "8dd9d4" + "608cba": "a8632a", + "bff4ff": "fcc95c", + "85d7f2": "e69e2b", + "967acc": "2c7a75", + "77b8d9": "cc7b1e", + "335980": "824628", + "f2ffff": "fff2ad", + "101010": "101010", + "737373": "737373", + "bfbfbf": "6cb3ae", + "efab34": "6cb3ae", + "ffe46a": "b9f2ee", + "f8f8f8": "b9f2ee" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/715.json b/public/images/pokemon/variant/exp/715.json index 4ca2bcad56a..0e97862f10b 100644 --- a/public/images/pokemon/variant/exp/715.json +++ b/public/images/pokemon/variant/exp/715.json @@ -1,20 +1,38 @@ { + "1": { + "101010": "101010", + "404040": "5f32b1", + "6a3f73": "0f103c", + "287366": "731338", + "3aa694": "a42c54", + "8e5499": "202558", + "bfbfbf": "bb9adc", + "595959": "7a5ccc", + "801a1a": "5d173d", + "4cd9c1": "d04b6c", + "bd70cc": "2f386b", + "737373": "563d8f", + "f8f8f8": "d6c8f1", + "e52e2e": "903b78", + "000000": "000000", + "ffe14c": "ff8a58" + }, "2": { - "404040": "c29484", - "595959": "ecd3c3", "101010": "101010", - "287366": "832714", - "4cd9c1": "dd834c", - "3aa694": "b8552c", - "801a1a": "7c0907", - "e52e2e": "ad3419", - "bd70cc": "5b1922", - "6a3f73": "3b0c18", - "737373": "1d060c", - "8e5499": "7c2928", - "bfbfbf": "43191e", - "f8f8f8": "5a2a2b", - "ffe14c": "49ffcd", - "000000": "000000" + "404040": "c29484", + "6a3f73": "3b0c18", + "287366": "832714", + "3aa694": "b8552c", + "8e5499": "7c2928", + "bfbfbf": "43191e", + "595959": "ecd3c3", + "801a1a": "7c0907", + "4cd9c1": "dd834c", + "bd70cc": "5b1922", + "737373": "1d060c", + "f8f8f8": "5a2a2b", + "e52e2e": "ad3419", + "000000": "000000", + "ffe14c": "49ffcd" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/248-mega.json b/public/images/pokemon/variant/exp/back/248-mega.json index f1770cfc32f..f5b58bf5f10 100644 --- a/public/images/pokemon/variant/exp/back/248-mega.json +++ b/public/images/pokemon/variant/exp/back/248-mega.json @@ -1,13 +1,28 @@ { + "1": { + "171717": "101010", + "4a5a39": "533334", + "4b5a3b": "533334", + "727272": "727272", + "801c17": "004194", + "922d00": "004194", + "ce283d": "006fb3", + "d35200": "0098fc", + "729a62": "915957", + "739c62": "915957", + "aacb9a": "c78482" + }, "2": { - "4a5a39": "06092f", - "101010": "101010", - "accd9c": "625695", - "739c62": "2c3071", - "ffffff": "ffffff", - "6a2000": "ee7b06", - "bd3920": "ffa904", - "737373": "737373", - "000000": "000000" + "171717": "101010", + "4a5a39": "06092f", + "4b5a3b": "06092f", + "727272": "727272", + "801c17": "ee7b06", + "922d00": "ee7b06", + "ce283d": "ffa904", + "d35200": "ffa904", + "729a62": "2c3071", + "739c62": "2c3071", + "aacb9a": "625695" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/248-mega_2.json b/public/images/pokemon/variant/exp/back/248-mega_2.json deleted file mode 100644 index 7f236a6bb87..00000000000 --- a/public/images/pokemon/variant/exp/back/248-mega_2.json +++ /dev/null @@ -1,272 +0,0 @@ -{ - "textures": [ - { - "image": "248-mega_2.png", - "format": "RGBA8888", - "size": { - "w": 292, - "h": 292 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 74 - }, - "frame": { - "x": 0, - "y": 0, - "w": 80, - "h": 74 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 74 - }, - "frame": { - "x": 0, - "y": 74, - "w": 80, - "h": 74 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 74 - }, - "frame": { - "x": 0, - "y": 148, - "w": 79, - "h": 74 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 74 - }, - "frame": { - "x": 79, - "y": 148, - "w": 79, - "h": 74 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 73 - }, - "frame": { - "x": 80, - "y": 0, - "w": 79, - "h": 73 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 73 - }, - "frame": { - "x": 80, - "y": 73, - "w": 79, - "h": 73 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 75, - "h": 73 - }, - "frame": { - "x": 158, - "y": 146, - "w": 75, - "h": 73 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 75, - "h": 73 - }, - "frame": { - "x": 158, - "y": 146, - "w": 75, - "h": 73 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 75, - "h": 73 - }, - "frame": { - "x": 158, - "y": 219, - "w": 75, - "h": 73 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 75, - "h": 73 - }, - "frame": { - "x": 158, - "y": 219, - "w": 75, - "h": 73 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 73, - "h": 73 - }, - "frame": { - "x": 159, - "y": 0, - "w": 73, - "h": 73 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 74 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 73, - "h": 73 - }, - "frame": { - "x": 159, - "y": 73, - "w": 73, - "h": 73 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:625e35ec9f8e731e89fa37587ffb4738:07d356e18baf0312a4e8a36adb76fdd5:90df97eb431b7162252516cb937a0b9e$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/248-mega_2.png b/public/images/pokemon/variant/exp/back/248-mega_2.png deleted file mode 100644 index 7971c22d8fe..00000000000 Binary files a/public/images/pokemon/variant/exp/back/248-mega_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/362-mega.json b/public/images/pokemon/variant/exp/back/362-mega.json index 3eddfcb3ef0..2f3d13a6944 100644 --- a/public/images/pokemon/variant/exp/back/362-mega.json +++ b/public/images/pokemon/variant/exp/back/362-mega.json @@ -1,28 +1,26 @@ { "1": { - "000000": "010101", "393941": "050832", + "010101": "010101", "2b74a8": "84073c", - "7b7b83": "1b205d", - "ffffff": "ff937b", - "a4deff": "f9383e", - "62bdee": "b7113a", - "e6e6f6": "a2b7e5", - "c5cde6": "6076c6", + "bbeeff": "f9383e", + "7dbbee": "b7113a", + "fefefe": "ff937b", "7b7b94": "1b205d", - "acaccd": "2f3c84" + "e6e6f6": "a2b7e5", + "acaccd": "2f3c84", + "c5cde6": "6076c6" }, "2": { - "000000": "010101", "393941": "221315", + "010101": "010101", "2b74a8": "0c4b3a", - "7b7b83": "4a282a", - "ffffff": "c8ff9c", - "a4deff": "5ce11a", - "62bdee": "009325", - "e6e6f6": "a76344", - "c5cde6": "7e4a3f", + "bbeeff": "5ce11a", + "7dbbee": "009325", + "fefefe": "c8ff9c", "7b7b94": "4a282a", - "acaccd": "613735" + "e6e6f6": "a76344", + "acaccd": "613735", + "c5cde6": "7e4a3f" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/654.json b/public/images/pokemon/variant/exp/back/654.json index c7524e01b9a..0f3b2bf3d4e 100644 --- a/public/images/pokemon/variant/exp/back/654.json +++ b/public/images/pokemon/variant/exp/back/654.json @@ -1,34 +1,38 @@ { "1": { - "907020": "481332", - "ffe060": "a85789", - "e0ad10": "682546", - "040404": "101010", - "803020": "471b70", - "f06030": "ab6ce0", - "bf4020": "6231a5", - "202020": "262626", - "cccccc": "c093c3", - "3c3c3c": "404040", - "fdfdfd": "e7caef", - "a4583e": "6231a5", - "414141": "404040", - "606060": "5c255f" + "101010": "101010", + "736028": "061530", + "ffd659": "b55390", + "ccab47": "872b59", + "732e17": "471b70", + "f26130": "ab6ce0", + "b34724": "6231a5", + "f8f8f8": "f7e4fc", + "737373": "5c255f", + "bfbfbf": "c093c3", + "804913": "c5b3ca", + "262626": "262626", + "404040": "404040", + "f8cf52": "80f37b", + "ffc000": "4fcb61", + "ff8700": "207d4e" }, "2": { - "907020": "061530", - "ffe060": "2b5f8a", - "e0ad10": "173864", - "040404": "101010", - "803020": "005646", - "f06030": "21d170", - "bf4020": "0aaa77", - "202020": "262626", - "cccccc": "d4b996", - "3c3c3c": "404040", - "fdfdfd": "fff2dd", - "a4583e": "0aaa77", - "414141": "404040", - "606060": "75553c" + "101010": "101010", + "736028": "061530", + "ffd659": "2b5f8a", + "ccab47": "173864", + "732e17": "005646", + "f26130": "21d170", + "b34724": "0aaa77", + "f8f8f8": "fff2dd", + "737373": "75553c", + "bfbfbf": "d4b996", + "804913": "098794", + "262626": "262626", + "404040": "404040", + "f8cf52": "c858a4", + "ffc000": "75308e", + "ff8700": "521364" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/656.json b/public/images/pokemon/variant/exp/back/656.json index 34b11bfab78..f41398f3154 100644 --- a/public/images/pokemon/variant/exp/back/656.json +++ b/public/images/pokemon/variant/exp/back/656.json @@ -1,17 +1,17 @@ { "1": { - "838394": "4d7dc5", + "848496": "4d7dc5", "7bcdff": "9c75c2", "62ace6": "8363af", "ffffff": "b1e5ff", "396a83": "362864", "9c9cc5": "5385c7", "cdcde6": "7eb7e8", - "174592": "198158", + "174592": "37408c", "5a94cd": "7054a4" }, "2": { - "838394": "cc6845", + "848496": "cc6845", "7bcdff": "dd6155", "62ace6": "c44848", "ffffff": "fff4bd", diff --git a/public/images/pokemon/variant/exp/back/664.json b/public/images/pokemon/variant/exp/back/664.json index 65474e240f3..ae0ec9fc792 100644 --- a/public/images/pokemon/variant/exp/back/664.json +++ b/public/images/pokemon/variant/exp/back/664.json @@ -1,28 +1,26 @@ { "1": { - "797987": "9c615f", - "f9f8fa": "f9f8fa", - "000000": "000000", - "ffffff": "ffffff", - "cdcdcd": "e9c7c4", - "383830": "4c2855", - "54544e": "895a9f", - "727272": "a97dbb", - "d8a465": "838b53", - "f0d5b9": "a0c896", - "653925": "626649" + "101010": "101010", + "363636": "4c2855", + "4d4d4d": "9d6260", + "4e4e4e": "895a9f", + "747474": "a97dbb", + "855d31": "626649", + "9d7247": "838b53", + "d1bf6b": "a0c896", + "b3b3b3": "e9c7c4", + "f8f8f8": "ffffff" }, "2": { - "797987": "590015", - "f9f8fa": "c83e4c", - "000000": "000000", - "ffffff": "c83e4c", - "cdcdcd": "a70d37", - "383830": "05312f", - "54544e": "377772", - "727272": "73bdae", - "d8a465": "dda476", - "f0d5b9": "ffe0ba", - "653925": "bf8961" + "101010": "101010", + "363636": "05312f", + "4d4d4d": "590015", + "4e4e4e": "377772", + "747474": "73bdae", + "855d31": "bf8961", + "9d7247": "dda476", + "d1bf6b": "ffe0ba", + "b3b3b3": "a70d37", + "f8f8f8": "c83e4c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/665.json b/public/images/pokemon/variant/exp/back/665.json index 876adeed0ea..c5defbab5b7 100644 --- a/public/images/pokemon/variant/exp/back/665.json +++ b/public/images/pokemon/variant/exp/back/665.json @@ -1,16 +1,30 @@ { + "1": { + "363636": "363636", + "d1bf6b": "a0c896", + "8c8c8c": "895a9f", + "bfbfbf": "a97dbb", + "9d7247": "838b53", + "101010": "101010", + "4d4d4d": "9c615f", + "b3b3b3": "e9c7c4", + "f8f8f8": "ffffff", + "802626": "005361", + "ff4c4c": "00aacd", + "eed83e": "cae2c3" + }, "2": { - "8e5136": "bf8961", - "838392": "590015", - "d8a465": "dda476", - "f0d5b9": "ffe0ba", - "cdcdcd": "a70d37", - "52524b": "360000", - "653925": "bf8961", - "000000": "000000", - "f9f8fa": "c83e4c", - "94416a": "004270", - "ee5a62": "0092dd", - "6a6a6a": "590015" + "363636": "360000", + "d1bf6b": "ffe0ba", + "8c8c8c": "590015", + "bfbfbf": "a70d37", + "9d7247": "dda476", + "101010": "101010", + "4d4d4d": "590015", + "b3b3b3": "a70d37", + "f8f8f8": "c83e4c", + "802626": "004270", + "ff4c4c": "0092dd", + "eed83e": "ffe0ba" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-archipelago.json b/public/images/pokemon/variant/exp/back/666-archipelago.json new file mode 100644 index 00000000000..6386464b74e --- /dev/null +++ b/public/images/pokemon/variant/exp/back/666-archipelago.json @@ -0,0 +1,35 @@ +{ + "1": { + "101010": "101010", + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "c8373c": "c8373c", + "a2523b": "a2523b", + "c27351": "c27351", + "30c171": "30c171", + "b28e67": "b28e67", + "ceab62": "d9edd4", + "d2bf96": "d2bf96", + "c3c3c3": "c3c3c3" + }, + "2": { + "101010": "101010", + "303030": "642703", + "675220": "741300", + "504a4a": "741300", + "595959": "824719", + "707068": "a22414", + "c8373c": "c8373c", + "a2523b": "a2523b", + "c27351": "c27351", + "30c171": "30c171", + "b28e67": "b28e67", + "ceab62": "a22414", + "d2bf96": "d2bf96", + "c3c3c3": "e7caa5" + + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-archipelago_2.json b/public/images/pokemon/variant/exp/back/666-archipelago_2.json deleted file mode 100644 index 8c6fd7bcb91..00000000000 --- a/public/images/pokemon/variant/exp/back/666-archipelago_2.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-archipelago_2.png", - "format": "RGBA8888", - "size": { - "w": 136, - "h": 136 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 42, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 42, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 42, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 42, - "y": 68, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:223e2a75aa192f3fb67e18f7f0d6c4c7:ba854fe0d08f005e9aa52e55cdc7eb4e:80cdb6dd219378a41ccf5c2acc7e7786$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-archipelago_2.png b/public/images/pokemon/variant/exp/back/666-archipelago_2.png deleted file mode 100644 index 86e17e33f11..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-archipelago_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-archipelago_3.json b/public/images/pokemon/variant/exp/back/666-archipelago_3.json deleted file mode 100644 index 3f9c86ecd75..00000000000 --- a/public/images/pokemon/variant/exp/back/666-archipelago_3.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-archipelago_3.png", - "format": "RGBA8888", - "size": { - "w": 136, - "h": 136 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 42, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 42, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 42, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 42, - "y": 68, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:223e2a75aa192f3fb67e18f7f0d6c4c7:ba854fe0d08f005e9aa52e55cdc7eb4e:80cdb6dd219378a41ccf5c2acc7e7786$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-archipelago_3.png b/public/images/pokemon/variant/exp/back/666-archipelago_3.png deleted file mode 100644 index 7028f550d45..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-archipelago_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-continental.json b/public/images/pokemon/variant/exp/back/666-continental.json new file mode 100644 index 00000000000..92614fb346c --- /dev/null +++ b/public/images/pokemon/variant/exp/back/666-continental.json @@ -0,0 +1,38 @@ +{ + "1": { + "101010": "101010", + "595959": "724b7a", + "555353": "724b7a", + "d18257": "d18257", + "f9bd55": "f9bd55", + "303030": "402746", + "f8f05e": "f8f05e", + "d24c3e": "d24c3e", + "675220": "958c8a", + "ceab62": "d9edd4", + "707068": "a97cbc", + "504a4a": "7f6991", + "aa5844": "aa5844", + "c3c3c3": "ffeaff", + "811c1c": "811c1c", + "e08528": "e08528" + }, + "2": { + "101010": "101010", + "595959": "8f551e", + "555353": "e99b44", + "d18257": "d18257", + "f9bd55": "f9bd55", + "303030": "6d2d0d", + "f8f05e": "f8f05e", + "d24c3e": "d24c3e", + "675220": "9c5c19", + "ceab62": "e99b44", + "707068": "e99b44", + "504a4a": "9c5c19", + "aa5844": "aa5844", + "c3c3c3": "f8f27f", + "811c1c": "811c1c", + "308528": "308528" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-continental_2.json b/public/images/pokemon/variant/exp/back/666-continental_2.json deleted file mode 100644 index 371e157ff8a..00000000000 --- a/public/images/pokemon/variant/exp/back/666-continental_2.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-continental_2.png", - "format": "RGBA8888", - "size": { - "w": 136, - "h": 136 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 13, - "y": 1, - "w": 46, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 13, - "y": 1, - "w": 46, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 46, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 46, - "y": 68, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:89725e18f2e4d97217076ac82b40230b:c83c3d03ad1200fc71d95ecafb54bc03:23aaac2256d564b9d8a58d7de70397c3$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-continental_2.png b/public/images/pokemon/variant/exp/back/666-continental_2.png deleted file mode 100644 index 3b9a31469af..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-continental_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-continental_3.json b/public/images/pokemon/variant/exp/back/666-continental_3.json deleted file mode 100644 index ec9c98e6312..00000000000 --- a/public/images/pokemon/variant/exp/back/666-continental_3.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-continental_3.png", - "format": "RGBA8888", - "size": { - "w": 136, - "h": 136 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 13, - "y": 1, - "w": 46, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 13, - "y": 1, - "w": 46, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 46, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 46, - "y": 68, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:89725e18f2e4d97217076ac82b40230b:c83c3d03ad1200fc71d95ecafb54bc03:23aaac2256d564b9d8a58d7de70397c3$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-continental_3.png b/public/images/pokemon/variant/exp/back/666-continental_3.png deleted file mode 100644 index b61b16538eb..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-continental_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-elegant.json b/public/images/pokemon/variant/exp/back/666-elegant.json new file mode 100644 index 00000000000..1b7b9838005 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/666-elegant.json @@ -0,0 +1,34 @@ +{ + "1": { + "101010": "101010", + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "de4040": "de4040", + "f8de3f": "f8de3f", + "ceab62": "d9edd4", + "56479d": "56479d", + "875fb5": "875fb5", + "cf7ef3": "cf7ef3", + "c3c3c3": "c3c3c3", + "e6ddf8": "e6ddf8" + }, + "2": { + "101010": "101010", + "303030": "351262", + "675220": "7d1083", + "504a4a": "7d1083", + "595959": "612776", + "707068": "a73fab", + "de4040": "de4040", + "f8de3f": "f8de3f", + "ceab62": "a73fab", + "56479d": "56479d", + "875fb5": "875fb5", + "cf7ef3": "cf7ef3", + "c3c3c3": "f0ecff", + "e6ddf8": "e6ddf8" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-elegant_2.json b/public/images/pokemon/variant/exp/back/666-elegant_2.json deleted file mode 100644 index 0894ba3672b..00000000000 --- a/public/images/pokemon/variant/exp/back/666-elegant_2.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-elegant_2.png", - "format": "RGBA8888", - "size": { - "w": 136, - "h": 136 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 44, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 44, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 44, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 44, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 44, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 44, - "y": 68, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:bbba66d69955866664e782205a4af88d:66e99814147be780756a4d4ccd8b31dc:d6b035048c66474f6236a3bc923faa7b$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-elegant_2.png b/public/images/pokemon/variant/exp/back/666-elegant_2.png deleted file mode 100644 index 315b2fe859d..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-elegant_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-elegant_3.json b/public/images/pokemon/variant/exp/back/666-elegant_3.json deleted file mode 100644 index 20501609416..00000000000 --- a/public/images/pokemon/variant/exp/back/666-elegant_3.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-elegant_3.png", - "format": "RGBA8888", - "size": { - "w": 136, - "h": 136 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 44, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 44, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 44, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 44, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 44, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 44, - "y": 68, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:bbba66d69955866664e782205a4af88d:66e99814147be780756a4d4ccd8b31dc:d6b035048c66474f6236a3bc923faa7b$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-elegant_3.png b/public/images/pokemon/variant/exp/back/666-elegant_3.png deleted file mode 100644 index 490bbb5951c..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-elegant_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-fancy.json b/public/images/pokemon/variant/exp/back/666-fancy.json new file mode 100644 index 00000000000..5d368667ae3 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/666-fancy.json @@ -0,0 +1,36 @@ +{ + "1": { + "101010": "101010", + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "de4040": "de4040", + "5faa3e": "5faa3e", + "ceab62": "d9edd4", + "b6d26d": "b6d26d", + "e9e052": "e9e052", + "cf7ef3": "cf7ef3", + "c3c3c3": "ffeaff", + "f2d4e3": "f2d4e3", + "ead2e3": "ffeaff" + }, + "2": { + "101010": "101010", + "303030": "00771b", + "675220": "b9c05a", + "504a4a": "b9c05a", + "595959": "6f9f42", + "707068": "6f9f42", + "de4040": "de4040", + "5faa3e": "5faa3e", + "ceab62": "e3e982", + "b6d26d": "b6d26d", + "e9e052": "e9e052", + "cf7ef3": "cf7ef3", + "c3c3c3": "fcf1ff", + "f2d4e3": "f2d4e3", + "ead2e3": "fcf1ff" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-fancy_2.json b/public/images/pokemon/variant/exp/back/666-fancy_2.json deleted file mode 100644 index 5f8f29308d3..00000000000 --- a/public/images/pokemon/variant/exp/back/666-fancy_2.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-fancy_2.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 43, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:570d1bf9b987c1bf5ebfe39e485464dd:a3c8bebd39c1c84b1bf0fdf600026ea5:6d5edff9a806f43feff031c9919c9aca$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-fancy_2.png b/public/images/pokemon/variant/exp/back/666-fancy_2.png deleted file mode 100644 index a92f1e7eecf..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-fancy_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-fancy_3.json b/public/images/pokemon/variant/exp/back/666-fancy_3.json deleted file mode 100644 index c1c35bf083a..00000000000 --- a/public/images/pokemon/variant/exp/back/666-fancy_3.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-fancy_3.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 43, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:570d1bf9b987c1bf5ebfe39e485464dd:a3c8bebd39c1c84b1bf0fdf600026ea5:6d5edff9a806f43feff031c9919c9aca$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-fancy_3.png b/public/images/pokemon/variant/exp/back/666-fancy_3.png deleted file mode 100644 index 7a54e9bb6cd..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-fancy_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-garden.json b/public/images/pokemon/variant/exp/back/666-garden.json new file mode 100644 index 00000000000..16fec8bc537 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/666-garden.json @@ -0,0 +1,32 @@ +{ + "1": { + "101010": "101010", + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "de4040": "de4040", + "398351": "398351", + "ceab62": "d9edd4", + "88d254": "88d254", + "3f919a": "3f919a", + "3dba96": "3dba96", + "c3c3c3": "c3c3c3" + }, + "2": { + "101010": "101010", + "303030": "044553", + "675220": "055160", + "504a4a": "055160", + "595959": "006b55", + "707068": "227687", + "de4040": "de4040", + "398351": "398351", + "ceab62": "227687", + "88d254": "88d254", + "3f919a": "3f919a", + "3dba96": "3dba96", + "c3c3c3": "72d0a3" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-garden_2.json b/public/images/pokemon/variant/exp/back/666-garden_2.json deleted file mode 100644 index 1c3840b900c..00000000000 --- a/public/images/pokemon/variant/exp/back/666-garden_2.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-garden_2.png", - "format": "RGBA8888", - "size": { - "w": 136, - "h": 136 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 42, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 42, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 42, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 42, - "y": 68, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:4b2ac69ef7a99f6cef35d3fd38c74d01:8a4c29615f3bf20e9c5d0bb372a5b210:f13a1a8fa0a411aa91fccb833ac8719c$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-garden_2.png b/public/images/pokemon/variant/exp/back/666-garden_2.png deleted file mode 100644 index c56ff652c7d..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-garden_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-garden_3.json b/public/images/pokemon/variant/exp/back/666-garden_3.json deleted file mode 100644 index 5fbdd2097fd..00000000000 --- a/public/images/pokemon/variant/exp/back/666-garden_3.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-garden_3.png", - "format": "RGBA8888", - "size": { - "w": 136, - "h": 136 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 42, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 42, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 42, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 42, - "y": 68, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:4b2ac69ef7a99f6cef35d3fd38c74d01:8a4c29615f3bf20e9c5d0bb372a5b210:f13a1a8fa0a411aa91fccb833ac8719c$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-garden_3.png b/public/images/pokemon/variant/exp/back/666-garden_3.png deleted file mode 100644 index 60c7f5b7d01..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-garden_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-high-plains.json b/public/images/pokemon/variant/exp/back/666-high-plains.json new file mode 100644 index 00000000000..984055b6a24 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/666-high-plains.json @@ -0,0 +1,38 @@ +{ + "1": { + "101010": "101010", + "303030": "402746", + "675220": "958c8a", + "337543": "337543", + "504a4a": "7f6991", + "595959": "724b7a", + "7d4428": "7d4428", + "707068": "a97cbc", + "9a5a3b": "9a5a3b", + "aa4343": "aa4343", + "e1764e": "e1764e", + "e8c815": "e8c815", + "ceab62": "d9edd4", + "f3a861": "f3a861", + "c3c3c3": "c3c3c3", + "773d21": "773d21" + }, + "2": { + "101010": "101010", + "303030": "8f1d19", + "675220": "c97034", + "337543": "337543", + "504a4a": "c97034", + "595959": "a55422", + "7d4428": "7d4428", + "707068": "f2975a", + "9a5a3b": "9a5a3b", + "aa4343": "aa4343", + "e1764e": "e1764e", + "e8c815": "e8c815", + "ceab62": "f2975a", + "f3a861": "f3a861", + "c3c3c3": "edc67c", + "773d21": "773d21" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-high-plains_2.json b/public/images/pokemon/variant/exp/back/666-high-plains_2.json deleted file mode 100644 index 405f2657c8a..00000000000 --- a/public/images/pokemon/variant/exp/back/666-high-plains_2.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-high-plains_2.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 43, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:410c759185f779797422e8f2ce55db4f:6afd0d04b6138fdd57d12681e967b48c:2abdb5d19b2754e3daa24b6ff3ed2c2c$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-high-plains_2.png b/public/images/pokemon/variant/exp/back/666-high-plains_2.png deleted file mode 100644 index d53634ed092..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-high-plains_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-high-plains_3.json b/public/images/pokemon/variant/exp/back/666-high-plains_3.json deleted file mode 100644 index 4c91b8fb5a0..00000000000 --- a/public/images/pokemon/variant/exp/back/666-high-plains_3.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-high-plains_3.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 43, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:410c759185f779797422e8f2ce55db4f:6afd0d04b6138fdd57d12681e967b48c:2abdb5d19b2754e3daa24b6ff3ed2c2c$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-high-plains_3.png b/public/images/pokemon/variant/exp/back/666-high-plains_3.png deleted file mode 100644 index d6c577be131..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-high-plains_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-icy-snow.json b/public/images/pokemon/variant/exp/back/666-icy-snow.json new file mode 100644 index 00000000000..ec52af1302a --- /dev/null +++ b/public/images/pokemon/variant/exp/back/666-icy-snow.json @@ -0,0 +1,32 @@ +{ + "1": { + "101010": "101010", + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "ceab62": "d9edd4", + "95a1a1": "95a1a1", + "acacc2": "acacc2", + "c3c3c3": "c3c3c3", + "cfd9cf": "cfd9cf", + "c5c5da": "c5c5da", + "ffffff": "ffffff" + }, + "2": { + "101010": "101010", + "303030": "364051", + "675220": "666b7d", + "504a4a": "666b7d", + "595959": "60646a", + "707068": "8c91a4", + "ceab62": "8c91a4", + "95a1a1": "95a1a1", + "acacc2": "acacc2", + "c3c3c3": "c3c3c3", + "cfd9cf": "cfd9cf", + "c5c5da": "c5c5da", + "ffffff": "ffffff" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-icy-snow_2.json b/public/images/pokemon/variant/exp/back/666-icy-snow_2.json deleted file mode 100644 index a456b34be45..00000000000 --- a/public/images/pokemon/variant/exp/back/666-icy-snow_2.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-icy-snow_2.png", - "format": "RGBA8888", - "size": { - "w": 136, - "h": 136 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 68, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:9f47e6de00b727163c2ffb6870af9c6b:16bfd68007c3798294c7d690e075f679:fb1e8b97806dc5c60ac6adf0ae48199b$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-icy-snow_2.png b/public/images/pokemon/variant/exp/back/666-icy-snow_2.png deleted file mode 100644 index 02e7e2e61af..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-icy-snow_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-icy-snow_3.json b/public/images/pokemon/variant/exp/back/666-icy-snow_3.json deleted file mode 100644 index c1b2ff5791d..00000000000 --- a/public/images/pokemon/variant/exp/back/666-icy-snow_3.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-icy-snow_3.png", - "format": "RGBA8888", - "size": { - "w": 136, - "h": 136 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 68, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:9f47e6de00b727163c2ffb6870af9c6b:16bfd68007c3798294c7d690e075f679:fb1e8b97806dc5c60ac6adf0ae48199b$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-icy-snow_3.png b/public/images/pokemon/variant/exp/back/666-icy-snow_3.png deleted file mode 100644 index 3c247e0d43a..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-icy-snow_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-jungle.json b/public/images/pokemon/variant/exp/back/666-jungle.json new file mode 100644 index 00000000000..63b998e284e --- /dev/null +++ b/public/images/pokemon/variant/exp/back/666-jungle.json @@ -0,0 +1,34 @@ +{ + "1": { + "101010": "101010", + "303030": "402746", + "724e28": "724e28", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "567456": "567456", + "707068": "a97cbc", + "9a653e": "9a653e", + "638c63": "638c63", + "c29566": "c29566", + "ceab62": "d9edd4", + "7cc48b": "7cc48b", + "c3c3c3": "c3c3c3" + }, + "2": { + "101010": "101010", + "303030": "20452e", + "724e28": "724e28", + "675220": "153922", + "504a4a": "153922", + "595959": "285b3b", + "567456": "567456", + "707068": "385c43", + "9a653e": "9a653e", + "638c63": "638c63", + "c29566": "c29566", + "ceab62": "385c43", + "7cc48b": "7cc48b", + "c3c3c3": "a9d9a0" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-jungle_2.json b/public/images/pokemon/variant/exp/back/666-jungle_2.json deleted file mode 100644 index e941cffbb5e..00000000000 --- a/public/images/pokemon/variant/exp/back/666-jungle_2.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-jungle_2.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 43, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:4d8913bd65ce0b63c5354717532a7d60:39392afb8d9fb30f37b8d68b6cd368ad:c8686bcc5493911384853d54c85bfea1$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-jungle_2.png b/public/images/pokemon/variant/exp/back/666-jungle_2.png deleted file mode 100644 index d6023a6500f..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-jungle_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-jungle_3.json b/public/images/pokemon/variant/exp/back/666-jungle_3.json deleted file mode 100644 index 8bbc5571373..00000000000 --- a/public/images/pokemon/variant/exp/back/666-jungle_3.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-jungle_3.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 43, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:4d8913bd65ce0b63c5354717532a7d60:39392afb8d9fb30f37b8d68b6cd368ad:c8686bcc5493911384853d54c85bfea1$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-jungle_3.png b/public/images/pokemon/variant/exp/back/666-jungle_3.png deleted file mode 100644 index 0f4ca358601..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-jungle_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-marine.json b/public/images/pokemon/variant/exp/back/666-marine.json new file mode 100644 index 00000000000..0bae2c2067e --- /dev/null +++ b/public/images/pokemon/variant/exp/back/666-marine.json @@ -0,0 +1,32 @@ +{ + "1": { + "101010": "101010", + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "ceab62": "d9edd4", + "315382": "315382", + "367cb9": "367cb9", + "2f8dc9": "2f8dc9", + "5acdf1": "5acdf1", + "c3c3c3": "c3c3c3", + "f2f2f2": "f2f2f2" + }, + "2": { + "101010": "101010", + "303030": "16244f", + "675220": "264c85", + "504a4a": "264c85", + "595959": "2a5894", + "707068": "3070af", + "ceab62": "3070af", + "315382": "315382", + "367cb9": "367cb9", + "2f8dc9": "2f8dc9", + "5acdf1": "5acdf1", + "c3c3c3": "3070af", + "f2f2f2": "f2f2f2" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-marine_2.json b/public/images/pokemon/variant/exp/back/666-marine_2.json deleted file mode 100644 index 7f85f0176f9..00000000000 --- a/public/images/pokemon/variant/exp/back/666-marine_2.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-marine_2.png", - "format": "RGBA8888", - "size": { - "w": 136, - "h": 136 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 42, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 42, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 42, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 42, - "y": 68, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:b061fec5d665439da49159647e0a7d71:7cac8aa51d4531fbcf0f9ea9bf644452:dc240f0acbf3d56fe8729dd1f703009f$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-marine_2.png b/public/images/pokemon/variant/exp/back/666-marine_2.png deleted file mode 100644 index ffa21823012..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-marine_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-marine_3.json b/public/images/pokemon/variant/exp/back/666-marine_3.json deleted file mode 100644 index f61b5ed14a9..00000000000 --- a/public/images/pokemon/variant/exp/back/666-marine_3.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-marine_3.png", - "format": "RGBA8888", - "size": { - "w": 136, - "h": 136 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 42, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 42, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 42, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 42, - "y": 68, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:b061fec5d665439da49159647e0a7d71:7cac8aa51d4531fbcf0f9ea9bf644452:dc240f0acbf3d56fe8729dd1f703009f$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-marine_3.png b/public/images/pokemon/variant/exp/back/666-marine_3.png deleted file mode 100644 index ee4c51543ee..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-marine_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-meadow.json b/public/images/pokemon/variant/exp/back/666-meadow.json new file mode 100644 index 00000000000..4f567cb29ee --- /dev/null +++ b/public/images/pokemon/variant/exp/back/666-meadow.json @@ -0,0 +1,34 @@ +{ + "1": { + "101010": "101010", + "f2f2f2": "f2f2f2", + "303030": "402746", + "504a4a": "7f6991", + "595959": "724b7a", + "c3c3c3": "c3c3c3", + "707068": "a97cbc", + "675220": "958c8a", + "ceab62": "d9edd4", + "2d9b9b": "2d9b9b", + "e66fad": "e66fad", + "b4295a": "b4295a", + "f3a0ca": "f3a0ca", + "da6b7e": "da6b7e" + }, + "2": { + "101010": "101010", + "f2f2f2": "f2f2f2", + "303030": "770921", + "504a4a": "a2275e", + "595959": "9e3941", + "c3c3c3": "f4c2ec", + "707068": "ce5283", + "675220": "a2275e", + "ceab62": "ce5283", + "2d9b9b": "2d9b9b", + "e66fad": "e66fad", + "b4295a": "b4295a", + "f3a0ca": "f3a0ca", + "da6b7e": "da6b7e" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-meadow_2.json b/public/images/pokemon/variant/exp/back/666-meadow_2.json deleted file mode 100644 index 7c2cbd58134..00000000000 --- a/public/images/pokemon/variant/exp/back/666-meadow_2.json +++ /dev/null @@ -1,524 +0,0 @@ -{ - "textures": [ - { - "image": "666-meadow_2.png", - "format": "RGBA8888", - "size": { - "w": 234, - "h": 234 - }, - "scale": 1, - "frames": [ - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 78, - "h": 87 - }, - "frame": { - "x": 0, - "y": 0, - "w": 78, - "h": 87 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 78, - "h": 87 - }, - "frame": { - "x": 0, - "y": 0, - "w": 78, - "h": 87 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 78, - "h": 87 - }, - "frame": { - "x": 0, - "y": 0, - "w": 78, - "h": 87 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 78, - "h": 87 - }, - "frame": { - "x": 0, - "y": 0, - "w": 78, - "h": 87 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 70, - "h": 87 - }, - "frame": { - "x": 0, - "y": 87, - "w": 70, - "h": 87 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 70, - "h": 87 - }, - "frame": { - "x": 0, - "y": 87, - "w": 70, - "h": 87 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 70, - "h": 87 - }, - "frame": { - "x": 0, - "y": 87, - "w": 70, - "h": 87 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 70, - "h": 87 - }, - "frame": { - "x": 0, - "y": 87, - "w": 70, - "h": 87 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 11, - "y": 2, - "w": 63, - "h": 87 - }, - "frame": { - "x": 70, - "y": 87, - "w": 63, - "h": 87 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 11, - "y": 2, - "w": 63, - "h": 87 - }, - "frame": { - "x": 70, - "y": 87, - "w": 63, - "h": 87 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 11, - "y": 2, - "w": 63, - "h": 87 - }, - "frame": { - "x": 70, - "y": 87, - "w": 63, - "h": 87 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 11, - "y": 2, - "w": 63, - "h": 87 - }, - "frame": { - "x": 70, - "y": 87, - "w": 63, - "h": 87 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 14, - "y": 1, - "w": 57, - "h": 87 - }, - "frame": { - "x": 78, - "y": 0, - "w": 57, - "h": 87 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 14, - "y": 1, - "w": 57, - "h": 87 - }, - "frame": { - "x": 78, - "y": 0, - "w": 57, - "h": 87 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 14, - "y": 1, - "w": 57, - "h": 87 - }, - "frame": { - "x": 78, - "y": 0, - "w": 57, - "h": 87 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 14, - "y": 1, - "w": 57, - "h": 87 - }, - "frame": { - "x": 78, - "y": 0, - "w": 57, - "h": 87 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 84, - "h": 86 - }, - "frame": { - "x": 135, - "y": 0, - "w": 84, - "h": 86 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 84, - "h": 86 - }, - "frame": { - "x": 135, - "y": 0, - "w": 84, - "h": 86 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 52, - "h": 87 - }, - "frame": { - "x": 135, - "y": 86, - "w": 52, - "h": 87 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 52, - "h": 87 - }, - "frame": { - "x": 135, - "y": 86, - "w": 52, - "h": 87 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 52, - "h": 87 - }, - "frame": { - "x": 135, - "y": 86, - "w": 52, - "h": 87 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 52, - "h": 87 - }, - "frame": { - "x": 135, - "y": 86, - "w": 52, - "h": 87 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 20, - "y": 0, - "w": 47, - "h": 85 - }, - "frame": { - "x": 187, - "y": 86, - "w": 47, - "h": 85 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 20, - "y": 0, - "w": 47, - "h": 85 - }, - "frame": { - "x": 187, - "y": 86, - "w": 47, - "h": 85 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:49698fe6f96ff24d2fe1c7a365f79f1b:f15ccef05dfd7ebb03ac6c66ae05dcef:f8ac4807b4d6eef2256fa1b93e0f89ba$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-meadow_2.png b/public/images/pokemon/variant/exp/back/666-meadow_2.png deleted file mode 100644 index bb54cac34cd..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-meadow_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-meadow_3.json b/public/images/pokemon/variant/exp/back/666-meadow_3.json deleted file mode 100644 index 6dcce66c44e..00000000000 --- a/public/images/pokemon/variant/exp/back/666-meadow_3.json +++ /dev/null @@ -1,524 +0,0 @@ -{ - "textures": [ - { - "image": "666-meadow_3.png", - "format": "RGBA8888", - "size": { - "w": 234, - "h": 234 - }, - "scale": 1, - "frames": [ - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 78, - "h": 87 - }, - "frame": { - "x": 0, - "y": 0, - "w": 78, - "h": 87 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 78, - "h": 87 - }, - "frame": { - "x": 0, - "y": 0, - "w": 78, - "h": 87 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 78, - "h": 87 - }, - "frame": { - "x": 0, - "y": 0, - "w": 78, - "h": 87 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 78, - "h": 87 - }, - "frame": { - "x": 0, - "y": 0, - "w": 78, - "h": 87 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 70, - "h": 87 - }, - "frame": { - "x": 0, - "y": 87, - "w": 70, - "h": 87 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 70, - "h": 87 - }, - "frame": { - "x": 0, - "y": 87, - "w": 70, - "h": 87 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 70, - "h": 87 - }, - "frame": { - "x": 0, - "y": 87, - "w": 70, - "h": 87 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 70, - "h": 87 - }, - "frame": { - "x": 0, - "y": 87, - "w": 70, - "h": 87 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 11, - "y": 2, - "w": 63, - "h": 87 - }, - "frame": { - "x": 70, - "y": 87, - "w": 63, - "h": 87 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 11, - "y": 2, - "w": 63, - "h": 87 - }, - "frame": { - "x": 70, - "y": 87, - "w": 63, - "h": 87 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 11, - "y": 2, - "w": 63, - "h": 87 - }, - "frame": { - "x": 70, - "y": 87, - "w": 63, - "h": 87 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 11, - "y": 2, - "w": 63, - "h": 87 - }, - "frame": { - "x": 70, - "y": 87, - "w": 63, - "h": 87 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 14, - "y": 1, - "w": 57, - "h": 87 - }, - "frame": { - "x": 78, - "y": 0, - "w": 57, - "h": 87 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 14, - "y": 1, - "w": 57, - "h": 87 - }, - "frame": { - "x": 78, - "y": 0, - "w": 57, - "h": 87 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 14, - "y": 1, - "w": 57, - "h": 87 - }, - "frame": { - "x": 78, - "y": 0, - "w": 57, - "h": 87 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 14, - "y": 1, - "w": 57, - "h": 87 - }, - "frame": { - "x": 78, - "y": 0, - "w": 57, - "h": 87 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 84, - "h": 86 - }, - "frame": { - "x": 135, - "y": 0, - "w": 84, - "h": 86 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 84, - "h": 86 - }, - "frame": { - "x": 135, - "y": 0, - "w": 84, - "h": 86 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 52, - "h": 87 - }, - "frame": { - "x": 135, - "y": 86, - "w": 52, - "h": 87 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 52, - "h": 87 - }, - "frame": { - "x": 135, - "y": 86, - "w": 52, - "h": 87 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 52, - "h": 87 - }, - "frame": { - "x": 135, - "y": 86, - "w": 52, - "h": 87 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 52, - "h": 87 - }, - "frame": { - "x": 135, - "y": 86, - "w": 52, - "h": 87 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 20, - "y": 0, - "w": 47, - "h": 85 - }, - "frame": { - "x": 187, - "y": 86, - "w": 47, - "h": 85 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 91 - }, - "spriteSourceSize": { - "x": 20, - "y": 0, - "w": 47, - "h": 85 - }, - "frame": { - "x": 187, - "y": 86, - "w": 47, - "h": 85 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:49698fe6f96ff24d2fe1c7a365f79f1b:f15ccef05dfd7ebb03ac6c66ae05dcef:f8ac4807b4d6eef2256fa1b93e0f89ba$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-meadow_3.png b/public/images/pokemon/variant/exp/back/666-meadow_3.png deleted file mode 100644 index 865e404c1cd..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-meadow_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-modern.json b/public/images/pokemon/variant/exp/back/666-modern.json new file mode 100644 index 00000000000..5572a58bfa9 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/666-modern.json @@ -0,0 +1,32 @@ +{ + "1": { + "101010": "101010", + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "b83c3c": "b83c3c", + "f44f4f": "f44f4f", + "ceab62": "d9edd4", + "3b6cbb": "3b6cbb", + "405793": "405793", + "c3c3c3": "c3c3c3", + "cfc5d9": "cfc5d9" + }, + "2":{ + "101010": "101010", + "303030": "4e0000", + "675220": "801521", + "504a4a": "801521", + "595959": "830012", + "707068": "ad2640", + "b83c3c": "b83c3c", + "f44f4f": "f44f4f", + "ceab62": "ad2640", + "3b6cbb": "3b6cbb", + "405793": "405793", + "c3c3c3": "ffeae8", + "cfc5d9": "cfc5d9" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-modern_2.json b/public/images/pokemon/variant/exp/back/666-modern_2.json deleted file mode 100644 index 4b0ef1a8a59..00000000000 --- a/public/images/pokemon/variant/exp/back/666-modern_2.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-modern_2.png", - "format": "RGBA8888", - "size": { - "w": 136, - "h": 136 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 42, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 42, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 42, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 42, - "y": 68, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:deb5b8b4295c15b4c8718bf2ed9791d1:bbe309a34a59a4e2f74eeba5769476f4:5fc0e8f9a0750c2f3cfb5d6e7eca0d45$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-modern_2.png b/public/images/pokemon/variant/exp/back/666-modern_2.png deleted file mode 100644 index 4cd5d770881..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-modern_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-modern_3.json b/public/images/pokemon/variant/exp/back/666-modern_3.json deleted file mode 100644 index 78c496fc208..00000000000 --- a/public/images/pokemon/variant/exp/back/666-modern_3.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-modern_3.png", - "format": "RGBA8888", - "size": { - "w": 136, - "h": 136 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 42, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 42, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 42, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 42, - "y": 68, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:deb5b8b4295c15b4c8718bf2ed9791d1:bbe309a34a59a4e2f74eeba5769476f4:5fc0e8f9a0750c2f3cfb5d6e7eca0d45$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-modern_3.png b/public/images/pokemon/variant/exp/back/666-modern_3.png deleted file mode 100644 index 5795174404f..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-modern_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-monsoon.json b/public/images/pokemon/variant/exp/back/666-monsoon.json new file mode 100644 index 00000000000..915d471b2b1 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/666-monsoon.json @@ -0,0 +1,33 @@ +{ + "1": { + "101010": "101010", + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "807676": "807676", + "ceab62": "d9edd4", + "5676de": "5676de", + "4eccd6": "4eccd6", + "989898": "989898", + "c3c3c3": "c3c3c3", + "f0f0f8": "f0f0f8" + }, + "2": { + "101010": "101010", + "303030": "3d3231", + "675220": "2c3593", + "504a4a": "2c3593", + "595959": "4f4645", + "707068": "5857bc", + "807676": "807676", + "ceab62": "5857bc", + "5676de": "5676de", + "4eccd6": "4eccd6", + "989898": "989898", + "92f4f4": "92f4f4", + "c3c3c3": "b8f9f9", + "f0f0f8": "f0f0f8" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-monsoon_2.json b/public/images/pokemon/variant/exp/back/666-monsoon_2.json deleted file mode 100644 index 344344ec0b2..00000000000 --- a/public/images/pokemon/variant/exp/back/666-monsoon_2.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-monsoon_2.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 42, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 42, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 42, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:71a24b11bc54be921b67b4376d798e05:f5358aac113e1f7af7eddf984d9692b3:637bea52b465abfb8e5a576310b4dacc$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-monsoon_2.png b/public/images/pokemon/variant/exp/back/666-monsoon_2.png deleted file mode 100644 index 8f091f4d1de..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-monsoon_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-monsoon_3.json b/public/images/pokemon/variant/exp/back/666-monsoon_3.json deleted file mode 100644 index 4f7304f6c0c..00000000000 --- a/public/images/pokemon/variant/exp/back/666-monsoon_3.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-monsoon_3.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 42, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 42, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 42, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 42, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:71a24b11bc54be921b67b4376d798e05:f5358aac113e1f7af7eddf984d9692b3:637bea52b465abfb8e5a576310b4dacc$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-monsoon_3.png b/public/images/pokemon/variant/exp/back/666-monsoon_3.png deleted file mode 100644 index f216010ca99..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-monsoon_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-ocean.json b/public/images/pokemon/variant/exp/back/666-ocean.json new file mode 100644 index 00000000000..70e7a51c21f --- /dev/null +++ b/public/images/pokemon/variant/exp/back/666-ocean.json @@ -0,0 +1,34 @@ +{ + "1": { + "101010": "101010", + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "e1384d": "e1384d", + "ebcf3f": "ebcf3f", + "ceab62": "d9edd4", + "f4ad61": "f4ad61", + "f8ef6a": "f8ef6a", + "4482c9": "4482c9", + "6bb2e9": "6bb2e9", + "c3c3c3": "c3c3c3" + }, + "2": { + "101010": "101010", + "303030": "b54908", + "675220": "bc601c", + "504a4a": "bc601c", + "595959": "e99a26", + "707068": "ea8742", + "e1384d": "e1384d", + "ebcf3f": "ebcf3f", + "ceab62": "ea8742", + "f4ad61": "f4ad61", + "f8ef6a": "f8ef6a", + "4482c9": "4482c9", + "6bb2e9": "6bb2e9", + "c3c3c3": "f3c86b" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-ocean_2.json b/public/images/pokemon/variant/exp/back/666-ocean_2.json deleted file mode 100644 index d5bb27bf592..00000000000 --- a/public/images/pokemon/variant/exp/back/666-ocean_2.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-ocean_2.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 43, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:a1a0079c64e9d91336d227b1380cd9d2:cf159e4653ad9208c0f4633a498a6cd1:e7a0e68eab89c2013a3eb7f3b6fc0b33$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-ocean_2.png b/public/images/pokemon/variant/exp/back/666-ocean_2.png deleted file mode 100644 index 6f4fefc99f8..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-ocean_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-ocean_3.json b/public/images/pokemon/variant/exp/back/666-ocean_3.json deleted file mode 100644 index 4ca1832c359..00000000000 --- a/public/images/pokemon/variant/exp/back/666-ocean_3.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-ocean_3.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 43, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:a1a0079c64e9d91336d227b1380cd9d2:cf159e4653ad9208c0f4633a498a6cd1:e7a0e68eab89c2013a3eb7f3b6fc0b33$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-ocean_3.png b/public/images/pokemon/variant/exp/back/666-ocean_3.png deleted file mode 100644 index 554fcb7b510..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-ocean_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-poke-ball.json b/public/images/pokemon/variant/exp/back/666-poke-ball.json new file mode 100644 index 00000000000..e21ba03fc1e --- /dev/null +++ b/public/images/pokemon/variant/exp/back/666-poke-ball.json @@ -0,0 +1,34 @@ +{ + "1": { + "101010": "101010", + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "971d1d": "971d1d", + "b72c2c": "b72c2c", + "dc4b4b": "dc4b4b", + "e97e7e": "e97e7e", + "ceab62": "d9edd4", + "a9a99e": "a9a99e", + "c3c3c3": "c3c3c3", + "f8f8f8": "f8f8f8" + }, + "2": { + "101010": "101010", + "303030": "ae001a", + "675220": "a70038", + "504a4a": "a70038", + "595959": "df0036", + "707068": "d5375a", + "971d1d": "040046", + "b72c2c": "00005e", + "dc4b4b": "19007d", + "e97e7e": "2e2095", + "ceab62": "d5375a", + "a9a99e": "000050", + "c3c3c3": "f0a6bf", + "f8f8f8": "00006d" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-poke-ball_2.json b/public/images/pokemon/variant/exp/back/666-poke-ball_2.json deleted file mode 100644 index 99da9b9ac29..00000000000 --- a/public/images/pokemon/variant/exp/back/666-poke-ball_2.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-poke-ball_2.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 43, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:e744396a3b647429d050d678017c05ce:ec812f719dffcd362f0481d7d83c3476:8ec14f129d1691b8da504a13b661abed$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-poke-ball_2.png b/public/images/pokemon/variant/exp/back/666-poke-ball_2.png deleted file mode 100644 index a1bd953a1b3..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-poke-ball_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-poke-ball_3.json b/public/images/pokemon/variant/exp/back/666-poke-ball_3.json deleted file mode 100644 index de222894738..00000000000 --- a/public/images/pokemon/variant/exp/back/666-poke-ball_3.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-poke-ball_3.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 43, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:e744396a3b647429d050d678017c05ce:ec812f719dffcd362f0481d7d83c3476:8ec14f129d1691b8da504a13b661abed$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-poke-ball_3.png b/public/images/pokemon/variant/exp/back/666-poke-ball_3.png deleted file mode 100644 index 9e7ff12912d..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-poke-ball_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-polar.json b/public/images/pokemon/variant/exp/back/666-polar.json new file mode 100644 index 00000000000..f86b4df3dcc --- /dev/null +++ b/public/images/pokemon/variant/exp/back/666-polar.json @@ -0,0 +1,34 @@ +{ + "1": { + "101010": "101010", + "303030": "402746", + "675220": "958c8a", + "2d2d61": "2d2d61", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "ceab62": "d9edd4", + "3b4b8a": "3b4b8a", + "4d6cc1": "4d6cc1", + "6aa2dc": "6aa2dc", + "bfbfbf": "bfbfbf", + "c3c3c3": "c3c3c3", + "f0f0f8": "f0f0f8" + }, + "2": { + "101010": "101010", + "303030": "191b54", + "675220": "366098", + "2d2d61": "2d2d61", + "504a4a": "366098", + "595959": "2f3887", + "707068": "5f85c1", + "ceab62": "5f85c1", + "3b4b8a": "3b4b8a", + "4d6cc1": "4d6cc1", + "6aa2dc": "6aa2dc", + "bfbfbf": "bfbfbf", + "c3c3c3": "ffffff", + "f0f0f8": "f0f0f8" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-polar_2.json b/public/images/pokemon/variant/exp/back/666-polar_2.json deleted file mode 100644 index e30095c2299..00000000000 --- a/public/images/pokemon/variant/exp/back/666-polar_2.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-polar_2.png", - "format": "RGBA8888", - "size": { - "w": 136, - "h": 136 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 14, - "y": 1, - "w": 45, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 14, - "y": 1, - "w": 45, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 45, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 45, - "y": 68, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:a3b0453f2d03b9c62472f57a438298a4:81a5a3455ae0c378bdb1dbe3c3323463:eb7086e98f867c6592e4b161835da18b$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-polar_2.png b/public/images/pokemon/variant/exp/back/666-polar_2.png deleted file mode 100644 index b66daac7d2c..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-polar_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-polar_3.json b/public/images/pokemon/variant/exp/back/666-polar_3.json deleted file mode 100644 index 76df03f7d08..00000000000 --- a/public/images/pokemon/variant/exp/back/666-polar_3.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-polar_3.png", - "format": "RGBA8888", - "size": { - "w": 136, - "h": 136 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 14, - "y": 1, - "w": 45, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 14, - "y": 1, - "w": 45, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 45, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 45, - "y": 68, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:a3b0453f2d03b9c62472f57a438298a4:81a5a3455ae0c378bdb1dbe3c3323463:eb7086e98f867c6592e4b161835da18b$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-polar_3.png b/public/images/pokemon/variant/exp/back/666-polar_3.png deleted file mode 100644 index cab4822a306..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-polar_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-river.json b/public/images/pokemon/variant/exp/back/666-river.json new file mode 100644 index 00000000000..c7e5e288d05 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/666-river.json @@ -0,0 +1,40 @@ +{ + "1": { + "101010": "101010", + "303030": "402746", + "4a412c": "4a412c", + "675220": "958c8a", + "634d20": "634d20", + "1d726a": "1d726a", + "504a4a": "7f6991", + "595959": "724b7a", + "625841": "625841", + "707068": "a97cbc", + "bc813f": "bc813f", + "9c9143": "9c9143", + "ceab62": "ceab62", + "279ec2": "279ec2", + "59c9d3": "59c9d3", + "c3c3c3": "c3c3c3", + "d2a862": "d9edd4" + }, + "2": { + "101010": "101010", + "303030": "7b2800", + "4a412c": "4a412c", + "675220": "ae7f41", + "634d20": "634d20", + "1d726a": "1d726a", + "504a4a": "ae7f41", + "595959": "8a5702", + "625841": "625841", + "707068": "d9a666", + "bc813f": "bc813f", + "9c9143": "9c9143", + "ceab62": "ceab62", + "279ec2": "279ec2", + "59c9d3": "59c9d3", + "c3c3c3": "e3c384", + "d2a862": "d2a862" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-river_2.json b/public/images/pokemon/variant/exp/back/666-river_2.json deleted file mode 100644 index 4edb4a188f8..00000000000 --- a/public/images/pokemon/variant/exp/back/666-river_2.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-river_2.png", - "format": "RGBA8888", - "size": { - "w": 136, - "h": 136 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 68, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:2bb6d375761e6690eba12cf4d2bc99c9:9db30ec1cf68fe8c1026c243086573f3:fa23dc87fc53ba2cfa532cf440553cf5$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-river_2.png b/public/images/pokemon/variant/exp/back/666-river_2.png deleted file mode 100644 index c689a6c7150..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-river_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-river_3.json b/public/images/pokemon/variant/exp/back/666-river_3.json deleted file mode 100644 index 69623e13034..00000000000 --- a/public/images/pokemon/variant/exp/back/666-river_3.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-river_3.png", - "format": "RGBA8888", - "size": { - "w": 136, - "h": 136 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 68, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:2bb6d375761e6690eba12cf4d2bc99c9:9db30ec1cf68fe8c1026c243086573f3:fa23dc87fc53ba2cfa532cf440553cf5$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-river_3.png b/public/images/pokemon/variant/exp/back/666-river_3.png deleted file mode 100644 index a163e179d0e..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-river_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-sandstorm.json b/public/images/pokemon/variant/exp/back/666-sandstorm.json new file mode 100644 index 00000000000..6bc91afb34d --- /dev/null +++ b/public/images/pokemon/variant/exp/back/666-sandstorm.json @@ -0,0 +1,34 @@ +{ + "1": { + "101010": "101010", + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "625843": "625843", + "72604d": "72604d", + "707068": "a97cbc", + "9b9148": "9b9148", + "ba8d68": "ba8d68", + "ceab62": "d9edd4", + "d9b674": "d9b674", + "f1d69e": "f1d69e", + "c3c3c3": "c3c3c3" + }, + "2": { + "101010": "101010", + "303030": "443123", + "675220": "9c703b", + "504a4a": "9c703b", + "595959": "88583e", + "625843": "625843", + "72604d": "72604d", + "707068": "c6975f", + "9b9148": "9b9148", + "ba8d68": "ba8d68", + "ceab62": "c6975f", + "d9b674": "d9b674", + "f1d69e": "f1d69e", + "c3c3c3": "ece1a9" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-sandstorm_2.json b/public/images/pokemon/variant/exp/back/666-sandstorm_2.json deleted file mode 100644 index 5651485f6d0..00000000000 --- a/public/images/pokemon/variant/exp/back/666-sandstorm_2.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-sandstorm_2.png", - "format": "RGBA8888", - "size": { - "w": 136, - "h": 136 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 68, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 17, - "y": 2, - "w": 40, - "h": 68 - }, - "frame": { - "x": 67, - "y": 0, - "w": 40, - "h": 68 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 17, - "y": 2, - "w": 40, - "h": 68 - }, - "frame": { - "x": 67, - "y": 68, - "w": 40, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:e35abed8cd9d0bbf1556fa684995d930:8d765a06a769bbf3d1639f361548cd6f:12f47e779927411662912d6094a9782d$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-sandstorm_2.png b/public/images/pokemon/variant/exp/back/666-sandstorm_2.png deleted file mode 100644 index 534e96bee13..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-sandstorm_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-sandstorm_3.json b/public/images/pokemon/variant/exp/back/666-sandstorm_3.json deleted file mode 100644 index d43381578cb..00000000000 --- a/public/images/pokemon/variant/exp/back/666-sandstorm_3.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-sandstorm_3.png", - "format": "RGBA8888", - "size": { - "w": 136, - "h": 136 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 68, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 17, - "y": 2, - "w": 40, - "h": 68 - }, - "frame": { - "x": 67, - "y": 0, - "w": 40, - "h": 68 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 17, - "y": 2, - "w": 40, - "h": 68 - }, - "frame": { - "x": 67, - "y": 68, - "w": 40, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:e35abed8cd9d0bbf1556fa684995d930:8d765a06a769bbf3d1639f361548cd6f:12f47e779927411662912d6094a9782d$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-sandstorm_3.png b/public/images/pokemon/variant/exp/back/666-sandstorm_3.png deleted file mode 100644 index 649fa83e025..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-sandstorm_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-savanna.json b/public/images/pokemon/variant/exp/back/666-savanna.json new file mode 100644 index 00000000000..c261f52dced --- /dev/null +++ b/public/images/pokemon/variant/exp/back/666-savanna.json @@ -0,0 +1,34 @@ +{ + "1": { + "101010": "101010", + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "dcc433": "dcc433", + "ceab62": "d9edd4", + "3b67ac": "3b67ac", + "61a0f5": "61a0f5", + "55d3d9": "55d3d9", + "6cc6c6": "6cc6c6", + "fffd77": "fffd77", + "c3c3c3": "c3c3c3" + }, + "2": { + "101010": "101010", + "303030": "183576", + "675220": "1d828b", + "504a4a": "1d828b", + "595959": "4168bb", + "707068": "4faab3", + "dcc433": "dcc433", + "ceab62": "4faab3", + "fffd77": "fffd77", + "3b67ac": "3b67ac", + "61a0f5": "61a0f5", + "55d3d9": "55d3d9", + "6cc6c6": "6cc6c6", + "c3c3c3": "81e7e1" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-savanna_2.json b/public/images/pokemon/variant/exp/back/666-savanna_2.json deleted file mode 100644 index c1f73f6efc7..00000000000 --- a/public/images/pokemon/variant/exp/back/666-savanna_2.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-savanna_2.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 43, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:1ad0c7c841409c3fd4cb50b399d6e13c:b9406b41d37bc72c57260f9a01a352c8:625a4f0dc001069326a75c6a381f93e6$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-savanna_2.png b/public/images/pokemon/variant/exp/back/666-savanna_2.png deleted file mode 100644 index b4b8ecedb9e..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-savanna_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-savanna_3.json b/public/images/pokemon/variant/exp/back/666-savanna_3.json deleted file mode 100644 index 49ab66f6855..00000000000 --- a/public/images/pokemon/variant/exp/back/666-savanna_3.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-savanna_3.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 43, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:1ad0c7c841409c3fd4cb50b399d6e13c:b9406b41d37bc72c57260f9a01a352c8:625a4f0dc001069326a75c6a381f93e6$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-savanna_3.png b/public/images/pokemon/variant/exp/back/666-savanna_3.png deleted file mode 100644 index 6bc0a0b8363..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-savanna_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-sun.json b/public/images/pokemon/variant/exp/back/666-sun.json new file mode 100644 index 00000000000..21cf5787ba4 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/666-sun.json @@ -0,0 +1,34 @@ +{ + "1": { + "101010": "101010", + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "c94971": "c94971", + "e18248": "e18248", + "ceab62": "d9edd4", + "f1a26a": "f1a26a", + "f0ce44": "f0ce44", + "fcf372": "fcf372", + "f47491": "f47491", + "c3c3c3": "c3c3c3" + }, + "2": { + "101010": "101010", + "303030": "640000", + "675220": "8c1850", + "504a4a": "8c1850", + "595959": "750500", + "707068": "b83b74", + "c94971": "c94971", + "e18248": "e18248", + "ceab62": "b83b74", + "f1a26a": "f1a26a", + "f0ce44": "f0ce44", + "fcf372": "fcf372", + "f47491": "f47491", + "c3c3c3": "fee3e7" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-sun_2.json b/public/images/pokemon/variant/exp/back/666-sun_2.json deleted file mode 100644 index d7c995a1bc0..00000000000 --- a/public/images/pokemon/variant/exp/back/666-sun_2.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-sun_2.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 43, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:1d3a140bac5951725915aa0b64d1fdc6:e322510cf8386dcc7834a05d57e5368e:8f5fdd0a698701f5391c5a3f67e303d6$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-sun_2.png b/public/images/pokemon/variant/exp/back/666-sun_2.png deleted file mode 100644 index c9168d5a1c5..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-sun_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-sun_3.json b/public/images/pokemon/variant/exp/back/666-sun_3.json deleted file mode 100644 index a3f755a4e7c..00000000000 --- a/public/images/pokemon/variant/exp/back/666-sun_3.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-sun_3.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 67, - "y": 0, - "w": 43, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 15, - "y": 1, - "w": 43, - "h": 69 - }, - "frame": { - "x": 0, - "y": 68, - "w": 43, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 43, - "y": 69, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:1d3a140bac5951725915aa0b64d1fdc6:e322510cf8386dcc7834a05d57e5368e:8f5fdd0a698701f5391c5a3f67e303d6$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-sun_3.png b/public/images/pokemon/variant/exp/back/666-sun_3.png deleted file mode 100644 index 1a36299851e..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-sun_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-tundra.json b/public/images/pokemon/variant/exp/back/666-tundra.json new file mode 100644 index 00000000000..b098f776c00 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/666-tundra.json @@ -0,0 +1,32 @@ +{ + "1": { + "101010": "101010", + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "ceab62": "d9edd4", + "539ad9": "539ad9", + "74bbe9": "74bbe9", + "a3def1": "a3def1", + "c3c3c3": "c3c3c3", + "d0d0d0": "d0d0d0", + "f0f0f8": "f0f0f8" + }, + "2": { + "101010": "101010", + "303030": "003d69", + "675220": "3a76a7", + "504a4a": "3a76a7", + "595959": "225b72", + "707068": "659dd0", + "ceab62": "659dd0", + "539ad9": "539ad9", + "74bbe9": "74bbe9", + "a3def1": "a3def1", + "c3c3c3": "cbfbfb", + "d0d0d0": "d0d0d0", + "f0f0f8": "f0f0f8" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-tundra_2.json b/public/images/pokemon/variant/exp/back/666-tundra_2.json deleted file mode 100644 index 3d8ae45a641..00000000000 --- a/public/images/pokemon/variant/exp/back/666-tundra_2.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-tundra_2.png", - "format": "RGBA8888", - "size": { - "w": 136, - "h": 136 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 13, - "y": 1, - "w": 46, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 13, - "y": 1, - "w": 46, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 46, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 46, - "y": 68, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:40f74f8757cb0f5a2ab7b5f68ea979a0:d062f67571674668b47f6fab68361105:9779ed3adebc298af537dd64dc25fe00$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-tundra_2.png b/public/images/pokemon/variant/exp/back/666-tundra_2.png deleted file mode 100644 index 49325397d8a..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-tundra_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/666-tundra_3.json b/public/images/pokemon/variant/exp/back/666-tundra_3.json deleted file mode 100644 index 65be2910a02..00000000000 --- a/public/images/pokemon/variant/exp/back/666-tundra_3.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "textures": [ - { - "image": "666-tundra_3.png", - "format": "RGBA8888", - "size": { - "w": 136, - "h": 136 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 13, - "y": 1, - "w": 46, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 13, - "y": 1, - "w": 46, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 68 - }, - "frame": { - "x": 46, - "y": 0, - "w": 67, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 67, - "h": 68 - }, - "frame": { - "x": 46, - "y": 68, - "w": 67, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:40f74f8757cb0f5a2ab7b5f68ea979a0:d062f67571674668b47f6fab68361105:9779ed3adebc298af537dd64dc25fe00$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-tundra_3.png b/public/images/pokemon/variant/exp/back/666-tundra_3.png deleted file mode 100644 index 3284e1e637b..00000000000 Binary files a/public/images/pokemon/variant/exp/back/666-tundra_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/697.json b/public/images/pokemon/variant/exp/back/697.json index 61a5f16551b..5303995a117 100644 --- a/public/images/pokemon/variant/exp/back/697.json +++ b/public/images/pokemon/variant/exp/back/697.json @@ -1,37 +1,34 @@ { - "1": { - "080808":"080808", - "621e1d":"0b241e", - "902f2d":"153626", - "b45250":"285234", - "653510":"5e0b0b", - "b56827":"971c1c", - "e39f33":"b52424", - "46413f":"4c3216", - "766c67":"ad8c63", - "adaaae":"cbbe8c", - "f0f0f2":"dfdea7", - "3d3937":"ab8a61", - "786d68":"cfc28f", - "afacb0":"c9bd8b", - "ededf0":"e0dfa8" - }, - "2": { - "080808":"080808", - "621e1d":"52352f", - "902f2d":"83726e", - "b45250":"ab9b97", - "653510":"9d5390", - "b56827":"ce7ecc", - "e39f33":"f4dbf6", - "46413f":"170c25", - "766c67":"26173b", - "adaaae":"33214f", - "f0f0f2":"4b2e64", - "3d3937":"c97bc7", - "786d68":"e5a9ea", - "afacb0":"d180ce", - "ededf0":"ededf0" - } + +"1": { +"080808": "080808", +"32252c": "3e1e17", +"50131e": "0b241e", +"722533": "153626", +"54434c": "4c3216", +"964b1c": "5e0b0b", +"963e4e": "285234", +"bf7545": "971c1c", +"f19d5a": "b52424", +"9f9d98": "ad8c63", +"cccccc": "cbbe8c", +"fafafa": "dfdea7", +"53454d":"4c3216" +}, +"2": { +"080808": "080808", +"32252c": "0d0124", +"50131e": "573b36", +"722533": "83726e", +"54434c": "170c25", +"964b1c": "9d5390", +"963e4e": "ab9b97", +"bf7545": "ce7ecc", +"f19d5a": "f4dbf6", +"9f9d98": "26173b", +"cccccc": "33214f", +"fafafa": "4b2e64", +"53454d": "f4dbf6" +} } diff --git a/public/images/pokemon/variant/exp/back/700.json b/public/images/pokemon/variant/exp/back/700.json index 4b65fb00405..1189d463f2b 100644 --- a/public/images/pokemon/variant/exp/back/700.json +++ b/public/images/pokemon/variant/exp/back/700.json @@ -1,26 +1,32 @@ { - "1": { - "107090": "c72537", - "af4f6f": "452f89", - "7fcfdf": "ff9a68", - "ffaebb": "c7a6ee", - "101010": "101010", - "807070": "5c6889", - "ef6f8f": "996cd2", - "ffffff": "f7f5ff", - "ddcccc": "c3c5d9", - "6f8faf": "eb5244" - }, - "2": { - "107090": "c72537", - "af4f6f": "197d46", - "7fcfdf": "ff9a68", - "ffaebb": "7dec9d", - "101010": "101010", - "807070": "7f5c89", - "ef6f8f": "5dae7d", - "ffffff": "fff5fc", - "ddcccc": "d9c3d6", - "6f8faf": "eb5244" - } +"1": { +"101010": "101010", +"8a2843": "452f89", +"235a99": "a63071", +"895c72": "5c6889", +"d85a7a": "996cd2", +"528fcc": "d648b7", +"a88d8c": "8c8fa8", +"f18a78": "b52d27", +"fa8caa": "c7a6ee", +"64c8f3": "e974db", +"d9c3c3": "c3c5d9", +"fff5f5": "f7f5ff", +"65798c": "65798c" +}, +"2": { +"101010": "101010", +"8a2843": "0e6134", +"235a99": "900d1b", +"895c72": "7f5c89", +"d85a7a": "5dae7d", +"528fcc": "dd3d4f", +"a88d8c": "7f5c89", +"f18a78": "d14ea4", +"fa8caa": "7dec9d", +"64c8f3": "ff9a68", +"d9c3c3": "d9c3d6", +"fff5f5": "fff5fc", +"65798c": "65798c" +} } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/702.json b/public/images/pokemon/variant/exp/back/702.json index a5bb32bb790..12feb29a0fd 100644 --- a/public/images/pokemon/variant/exp/back/702.json +++ b/public/images/pokemon/variant/exp/back/702.json @@ -1,22 +1,32 @@ { "1": { "101010": "101010", - "4d4d4d": "6789b3", "262626": "2a3b5e", + "4d4d4d": "6789b3", + "bfbf86": "a3d1cc", + "f2f2aa": "ddfff5", "735c2e": "a53c42", + "997a3d": "c9685f", "f2c261": "ffd3b6", "bf994c": "e49f84", - "997a3d": "c9685f", - "000000": "000000" + "1d1d1d": "1a1c45", + "f8f8f8": "f8f8f8", + "464646": "424b8f", + "d97d21": "7cd6a1" }, "2": { "101010": "101010", - "4d4d4d": "197870", "262626": "072d38", + "4d4d4d": "197870", + "bfbf86": "aaa8d6", + "f2f2aa": "ece5ff", "735c2e": "1e0e27", + "997a3d": "2d1533", "f2c261": "5f3662", "bf994c": "432249", - "997a3d": "2d1533", - "000000": "000000" + "1d1d1d": "02172d", + "f8f8f8": "f8f8f8", + "464646": "17646c", + "d97d21": "d2fff1" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/704.json b/public/images/pokemon/variant/exp/back/704.json index 179c06d54ac..1955f425b26 100644 --- a/public/images/pokemon/variant/exp/back/704.json +++ b/public/images/pokemon/variant/exp/back/704.json @@ -1,26 +1,30 @@ { "1": { - "766fa6": "7d699d", - "010202": "101010", - "6f5e80": "4e4094", - "e0d3e0": "fbb3d2", - "bbafc4": "da75a5", - "2f6b38": "033c55", - "a497c2": "da75a5", - "74d457": "348fa6", - "3da84d": "185d83", - "3f3d5e": "033c55" + "807380": "b93f84", + "f2daf2": "fbb3d2", + "bfacbf": "e56ca6", + "4d454d": "8a2166", + "101010": "101010", + "4d993d": "197497", + "66cc52": "3aa8c4", + "b8a1e5": "c7a1e5", + "8f7db3": "8b69c3", + "665980": "4e4094", + "de817e": "e5e1a1", + "c25054": "c68260" }, "2": { - "766fa6": "2f5d6f", - "010202": "101010", - "6f5e80": "274159", - "e0d3e0": "92d8c8", - "bbafc4": "5f8d86", - "2f6b38": "681b00", - "a497c2": "5f8d86", - "74d457": "bb7935", - "3da84d": "a34205", - "3f3d5e": "681b00" + "807380": "237e7f", + "f2daf2": "92d8c8", + "bfacbf": "63a99e", + "4d454d": "134557", + "101010": "101010", + "4d993d": "a34205", + "66cc52": "d27e26", + "b8a1e5": "4a9699", + "8f7db3": "2f667c", + "665980": "274159", + "de817e": "f2daf2", + "c25054": "9268a4" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/705.json b/public/images/pokemon/variant/exp/back/705.json index 93f270c6976..72dd07123ea 100644 --- a/public/images/pokemon/variant/exp/back/705.json +++ b/public/images/pokemon/variant/exp/back/705.json @@ -1,28 +1,26 @@ { "1": { - "807380": "b93f84", - "f2daf2": "fbb3d2", - "101010": "101010", - "4d454d": "8a2166", - "bfacbf": "ca719c", - "66cc52": "197497", - "b6f2aa": "197497", - "4d993d": "0c5474", - "665980": "4e4094", - "b8a1e5": "c7a1e5", - "8f7db3": "8b69c3" + "101010": "101010", + "4d454d": "8a2166", + "647543": "197497", + "98bd51": "3aa8c4", + "665980": "4e4094", + "807380": "b93f84", + "8f7db3": "8b69c3", + "bfacbf": "e56ca6", + "b8a1e5": "c7a1e5", + "f2daf2": "fbb3d2" }, "2": { - "807380": "20615e", - "f2daf2": "9cead8", - "101010": "101010", - "4d454d": "124143", - "bfacbf": "4e9b8f", - "66cc52": "a34205", - "b6f2aa": "a34205", - "4d993d": "842401", - "665980": "274159", - "b8a1e5": "4a9699", - "8f7db3": "2f667c" + "101010": "101010", + "4d454d": "194f51", + "647543": "a34205", + "98bd51": "d27e26", + "665980": "274159", + "807380": "2b736f", + "8f7db3": "2f667c", + "bfacbf": "5db6a9", + "b8a1e5": "4a9699", + "f2daf2": "9cead8" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/713.json b/public/images/pokemon/variant/exp/back/713.json index 8c54b0ab776..61977f60470 100644 --- a/public/images/pokemon/variant/exp/back/713.json +++ b/public/images/pokemon/variant/exp/back/713.json @@ -1,22 +1,22 @@ { "1": { - "6994bf": "bf566d", - "f2ffff": "ffebf2", - "335980": "994255", + "608cba": "bf566d", "967acc": "732334", - "77b8d9": "d97389", "85d7f2": "f29eb3", "bff4ff": "ffbfda", + "335980": "994255", + "f2ffff": "ffebf2", + "77b8d9": "d97389", "101010": "101010" }, "2": { - "6994bf": "a8632a", - "f2ffff": "fff2ad", - "335980": "824628", + "608cba": "a8632a", "967acc": "2c7a75", - "77b8d9": "cc7b1e", "85d7f2": "e69e2b", "bff4ff": "fcc95c", + "335980": "824628", + "f2ffff": "fff2ad", + "77b8d9": "cc7b1e", "101010": "101010" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/987.json b/public/images/pokemon/variant/exp/back/987.json index 385a9eeb29f..5fb59f6979d 100644 --- a/public/images/pokemon/variant/exp/back/987.json +++ b/public/images/pokemon/variant/exp/back/987.json @@ -8,7 +8,7 @@ "0f0f0f": "0f0f0f", "314a62": "244260", "621841": "71370f", - "70bbb4": "f8d371", + "548e88": "2d60bb", "de62a4": "ffc668", "a4295a": "cc762f" }, @@ -21,7 +21,7 @@ "0f0f0f": "0f0f0f", "314a62": "7396b4", "621841": "7b3c08", - "70bbb4": "70bbb4", + "548e88": "a9c0c6", "de62a4": "ffdf90", "a4295a": "e28c27" }, @@ -34,7 +34,7 @@ "0f0f0f": "0f0f0f", "314a62": "b56f2a", "621841": "5a0a05", - "70bbb4": "f8d371", + "548e88": "e0b544", "de62a4": "e25038", "a4295a": "a62a21" } diff --git a/public/images/pokemon/variant/exp/back/female/6215.json b/public/images/pokemon/variant/exp/back/female/6215.json new file mode 100644 index 00000000000..a66e3780d12 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/female/6215.json @@ -0,0 +1,32 @@ +{ + "1": { + "724ca2": "12968b", + "9c9bce": "ae8976", + "503678": "0f5d6d", + "956cbe": "31dabb", + "514a80": "402010", + "dcdbf7": "d0b3a4", + "080808": "080808", + "28234b": "220d0a", + "7d6ca4": "672e26", + "584d80": "401914", + "f6f6ff": "f6f6ff", + "bdbdc5": "bdbdc5", + "c52973": "ea903f" + }, + "2": { + "724ca2": "982e33", + "9c9bce": "3c8775", + "503678": "601522", + "956cbe": "cc5427", + "514a80": "14273a", + "dcdbf7": "60ae7e", + "080808": "080808", + "28234b": "0a191e", + "7d6ca4": "395962", + "584d80": "1c3942", + "f6f6ff": "f6f6ff", + "bdbdc5": "bdbdc5", + "c52973": "f49633" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/female/6215.json b/public/images/pokemon/variant/exp/female/6215.json new file mode 100644 index 00000000000..3198424563b --- /dev/null +++ b/public/images/pokemon/variant/exp/female/6215.json @@ -0,0 +1,38 @@ +{ + "1": { + "503678": "0f5d6d", + "080808": "080808", + "514a80": "402010", + "956cbe": "31dabb", + "9c9bce": "ae8976", + "724ca2": "12968b", + "dcdbf7": "d0b3a4", + "7d6ca4": "853a36", + "c58b08": "6e6f6f", + "ffde7b": "a7a7a7", + "584d80": "562627", + "28234b": "220d0a", + "c52973": "ea903f", + "bdbdc5": "bdbdc5", + "f6f6ff": "f6f6ff", + "000000": "000000" + }, + "2": { + "503678": "601522", + "080808": "080808", + "514a80": "14273a", + "956cbe": "cc5427", + "9c9bce": "3c8775", + "724ca2": "982e33", + "dcdbf7": "60ae7e", + "7d6ca4": "395962", + "c58b08": "ffa341", + "ffde7b": "ffe07e", + "584d80": "1c3942", + "28234b": "0a191e", + "c52973": "f49633", + "bdbdc5": "bdbdc5", + "f6f6ff": "f6f6ff", + "000000": "000000" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/female/212.json b/public/images/pokemon/variant/female/212.json new file mode 100644 index 00000000000..55fcc0858ac --- /dev/null +++ b/public/images/pokemon/variant/female/212.json @@ -0,0 +1,41 @@ +{ + "0": { + "632929": "215a2d", + "f76b6b": "8cce73", + "101010": "101010", + "3a3a4a": "3a3a4a", + "ffffff": "ffffff", + "d63a3a": "4a9c53", + "b5b5ce": "b5b5ce", + "9494a5": "9494a5", + "a52929": "2f794e", + "dec510": "dec510", + "9c6b21": "9c6b21" + }, + "1": { + "632929": "2f2962", + "f76b6b": "639cf7", + "101010": "101010", + "3a3a4a": "3c3c50", + "ffffff": "ffffff", + "d63a3a": "4263ef", + "b5b5ce": "b5b5ce", + "9494a5": "6262a4", + "a52929": "29429c", + "dec510": "10bdde", + "9c6b21": "131387" + }, + "2": { + "632929": "645117", + "f76b6b": "c59f29", + "101010": "101010", + "3a3a4a": "282d2c", + "ffffff": "ffffff", + "d63a3a": "ffca2a", + "b5b5ce": "b5b5ce", + "9494a5": "3c4543", + "a52929": "b88619", + "dec510": "dec510", + "9c6b21": "9c6b21" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/female/3.json b/public/images/pokemon/variant/female/3.json index 515cd2e93e5..de2c52f6003 100644 --- a/public/images/pokemon/variant/female/3.json +++ b/public/images/pokemon/variant/female/3.json @@ -1,19 +1,41 @@ { + "1": { + "843100": "033b22", + "830009": "23033b", + "ffbdbd": "a266b0", + "ffef52": "37d6de", + "debd29": "078a8f", + "ff7b73": "712f8f", + "bd6b31": "168a69", + "de4242": "3f1375", + "101010": "101010", + "105242": "190038", + "107b6b": "9e1976", + "2e5519": "38001c", + "5a9c3a": "b34952", + "5ad6c5": "f062a4", + "21b59c": "de3592", + "84de7b": "ff745e", + "ffffff": "ffffff" + }, "2": { "843100": "420514", - "ff7b73": "9db042", + "830009": "154205", "ffbdbd": "e7e385", "ffef52": "f75ea8", "debd29": "a30a66", + "ff7b73": "9db042", "bd6b31": "852a41", "de4242": "3c8227", "101010": "101010", "105242": "381601", - "107b6b": "d44300", + "107b6b": "d15d04", + "2e5519": "011c38", "5a9c3a": "446b94", - "84de7b": "80ced9", "5ad6c5": "faa405", "21b59c": "fa8405", - "ffffff": "ffffff" + "84de7b": "80ced9", + "ffffff": "ffffff", + "2f561a": "011b34" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/female/3_2.json b/public/images/pokemon/variant/female/3_2.json deleted file mode 100644 index 8c89faed762..00000000000 --- a/public/images/pokemon/variant/female/3_2.json +++ /dev/null @@ -1,4136 +0,0 @@ -{ - "textures": [ - { - "image": "3_2.png", - "format": "RGBA8888", - "size": { - "w": 569, - "h": 569 - }, - "scale": 1, - "frames": [ - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 81, - "h": 66 - }, - "frame": { - "x": 0, - "y": 0, - "w": 81, - "h": 66 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 81, - "h": 66 - }, - "frame": { - "x": 0, - "y": 0, - "w": 81, - "h": 66 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 81, - "h": 66 - }, - "frame": { - "x": 0, - "y": 0, - "w": 81, - "h": 66 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 81, - "h": 66 - }, - "frame": { - "x": 0, - "y": 0, - "w": 81, - "h": 66 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 81, - "h": 66 - }, - "frame": { - "x": 81, - "y": 0, - "w": 81, - "h": 66 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 81, - "h": 66 - }, - "frame": { - "x": 81, - "y": 0, - "w": 81, - "h": 66 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 81, - "h": 66 - }, - "frame": { - "x": 81, - "y": 0, - "w": 81, - "h": 66 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 81, - "h": 66 - }, - "frame": { - "x": 81, - "y": 0, - "w": 81, - "h": 66 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 81, - "h": 66 - }, - "frame": { - "x": 81, - "y": 0, - "w": 81, - "h": 66 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 81, - "h": 66 - }, - "frame": { - "x": 162, - "y": 0, - "w": 81, - "h": 66 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 81, - "h": 66 - }, - "frame": { - "x": 162, - "y": 0, - "w": 81, - "h": 66 - } - }, - { - "filename": "0125.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 81, - "h": 66 - }, - "frame": { - "x": 162, - "y": 0, - "w": 81, - "h": 66 - } - }, - { - "filename": "0126.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 81, - "h": 66 - }, - "frame": { - "x": 162, - "y": 0, - "w": 81, - "h": 66 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 81, - "h": 67 - }, - "frame": { - "x": 243, - "y": 0, - "w": 81, - "h": 67 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 81, - "h": 67 - }, - "frame": { - "x": 243, - "y": 0, - "w": 81, - "h": 67 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 81, - "h": 67 - }, - "frame": { - "x": 243, - "y": 0, - "w": 81, - "h": 67 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 81, - "h": 67 - }, - "frame": { - "x": 243, - "y": 0, - "w": 81, - "h": 67 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 81, - "h": 67 - }, - "frame": { - "x": 243, - "y": 0, - "w": 81, - "h": 67 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 81, - "h": 67 - }, - "frame": { - "x": 324, - "y": 0, - "w": 81, - "h": 67 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 81, - "h": 67 - }, - "frame": { - "x": 324, - "y": 0, - "w": 81, - "h": 67 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 81, - "h": 67 - }, - "frame": { - "x": 324, - "y": 0, - "w": 81, - "h": 67 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 81, - "h": 67 - }, - "frame": { - "x": 324, - "y": 0, - "w": 81, - "h": 67 - } - }, - { - "filename": "0139.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 81, - "h": 67 - }, - "frame": { - "x": 405, - "y": 0, - "w": 81, - "h": 67 - } - }, - { - "filename": "0140.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 81, - "h": 67 - }, - "frame": { - "x": 405, - "y": 0, - "w": 81, - "h": 67 - } - }, - { - "filename": "0141.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 81, - "h": 67 - }, - "frame": { - "x": 486, - "y": 0, - "w": 81, - "h": 67 - } - }, - { - "filename": "0142.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 81, - "h": 67 - }, - "frame": { - "x": 486, - "y": 0, - "w": 81, - "h": 67 - } - }, - { - "filename": "0143.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 81, - "h": 67 - }, - "frame": { - "x": 486, - "y": 0, - "w": 81, - "h": 67 - } - }, - { - "filename": "0172.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 67 - }, - "frame": { - "x": 0, - "y": 66, - "w": 81, - "h": 67 - } - }, - { - "filename": "0173.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 67 - }, - "frame": { - "x": 0, - "y": 66, - "w": 81, - "h": 67 - } - }, - { - "filename": "0190.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 84, - "h": 67 - }, - "frame": { - "x": 81, - "y": 66, - "w": 84, - "h": 67 - } - }, - { - "filename": "0191.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 84, - "h": 67 - }, - "frame": { - "x": 81, - "y": 66, - "w": 84, - "h": 67 - } - }, - { - "filename": "0192.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 84, - "h": 67 - }, - "frame": { - "x": 81, - "y": 66, - "w": 84, - "h": 67 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 81, - "h": 68 - }, - "frame": { - "x": 165, - "y": 67, - "w": 81, - "h": 68 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 81, - "h": 68 - }, - "frame": { - "x": 165, - "y": 67, - "w": 81, - "h": 68 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 81, - "h": 68 - }, - "frame": { - "x": 165, - "y": 67, - "w": 81, - "h": 68 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 81, - "h": 68 - }, - "frame": { - "x": 165, - "y": 67, - "w": 81, - "h": 68 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 81, - "h": 68 - }, - "frame": { - "x": 165, - "y": 67, - "w": 81, - "h": 68 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 81, - "h": 68 - }, - "frame": { - "x": 246, - "y": 67, - "w": 81, - "h": 68 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 81, - "h": 68 - }, - "frame": { - "x": 246, - "y": 67, - "w": 81, - "h": 68 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 81, - "h": 68 - }, - "frame": { - "x": 246, - "y": 67, - "w": 81, - "h": 68 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 81, - "h": 68 - }, - "frame": { - "x": 246, - "y": 67, - "w": 81, - "h": 68 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 81, - "h": 68 - }, - "frame": { - "x": 246, - "y": 67, - "w": 81, - "h": 68 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 81, - "h": 68 - }, - "frame": { - "x": 327, - "y": 67, - "w": 81, - "h": 68 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 81, - "h": 68 - }, - "frame": { - "x": 327, - "y": 67, - "w": 81, - "h": 68 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 81, - "h": 68 - }, - "frame": { - "x": 327, - "y": 67, - "w": 81, - "h": 68 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 81, - "h": 68 - }, - "frame": { - "x": 327, - "y": 67, - "w": 81, - "h": 68 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 81, - "h": 68 - }, - "frame": { - "x": 408, - "y": 67, - "w": 81, - "h": 68 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 81, - "h": 68 - }, - "frame": { - "x": 408, - "y": 67, - "w": 81, - "h": 68 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 81, - "h": 68 - }, - "frame": { - "x": 408, - "y": 67, - "w": 81, - "h": 68 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 81, - "h": 68 - }, - "frame": { - "x": 408, - "y": 67, - "w": 81, - "h": 68 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 81, - "h": 68 - }, - "frame": { - "x": 408, - "y": 67, - "w": 81, - "h": 68 - } - }, - { - "filename": "0144.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 80, - "h": 68 - }, - "frame": { - "x": 489, - "y": 67, - "w": 80, - "h": 68 - } - }, - { - "filename": "0145.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 80, - "h": 68 - }, - "frame": { - "x": 489, - "y": 67, - "w": 80, - "h": 68 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 81, - "h": 68 - }, - "frame": { - "x": 0, - "y": 133, - "w": 81, - "h": 68 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 81, - "h": 68 - }, - "frame": { - "x": 0, - "y": 133, - "w": 81, - "h": 68 - } - }, - { - "filename": "0127.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 81, - "h": 68 - }, - "frame": { - "x": 0, - "y": 133, - "w": 81, - "h": 68 - } - }, - { - "filename": "0128.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 81, - "h": 68 - }, - "frame": { - "x": 0, - "y": 133, - "w": 81, - "h": 68 - } - }, - { - "filename": "0129.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 81, - "h": 68 - }, - "frame": { - "x": 0, - "y": 133, - "w": 81, - "h": 68 - } - }, - { - "filename": "0153.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 84, - "h": 68 - }, - "frame": { - "x": 81, - "y": 133, - "w": 84, - "h": 68 - } - }, - { - "filename": "0154.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 84, - "h": 68 - }, - "frame": { - "x": 81, - "y": 133, - "w": 84, - "h": 68 - } - }, - { - "filename": "0155.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 84, - "h": 68 - }, - "frame": { - "x": 165, - "y": 135, - "w": 84, - "h": 68 - } - }, - { - "filename": "0156.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 84, - "h": 68 - }, - "frame": { - "x": 165, - "y": 135, - "w": 84, - "h": 68 - } - }, - { - "filename": "0157.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 84, - "h": 68 - }, - "frame": { - "x": 165, - "y": 135, - "w": 84, - "h": 68 - } - }, - { - "filename": "0174.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 81, - "h": 68 - }, - "frame": { - "x": 249, - "y": 135, - "w": 81, - "h": 68 - } - }, - { - "filename": "0175.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 81, - "h": 68 - }, - "frame": { - "x": 249, - "y": 135, - "w": 81, - "h": 68 - } - }, - { - "filename": "0188.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 84, - "h": 68 - }, - "frame": { - "x": 330, - "y": 135, - "w": 84, - "h": 68 - } - }, - { - "filename": "0189.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 84, - "h": 68 - }, - "frame": { - "x": 330, - "y": 135, - "w": 84, - "h": 68 - } - }, - { - "filename": "0193.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 83, - "h": 68 - }, - "frame": { - "x": 414, - "y": 135, - "w": 83, - "h": 68 - } - }, - { - "filename": "0194.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 83, - "h": 68 - }, - "frame": { - "x": 414, - "y": 135, - "w": 83, - "h": 68 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 0, - "y": 201, - "w": 81, - "h": 69 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 0, - "y": 201, - "w": 81, - "h": 69 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 0, - "y": 201, - "w": 81, - "h": 69 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 0, - "y": 201, - "w": 81, - "h": 69 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 0, - "y": 201, - "w": 81, - "h": 69 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 81, - "y": 201, - "w": 81, - "h": 69 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 81, - "y": 201, - "w": 81, - "h": 69 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 81, - "y": 201, - "w": 81, - "h": 69 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 81, - "y": 201, - "w": 81, - "h": 69 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 81, - "y": 201, - "w": 81, - "h": 69 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 162, - "y": 203, - "w": 81, - "h": 69 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 162, - "y": 203, - "w": 81, - "h": 69 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 162, - "y": 203, - "w": 81, - "h": 69 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 162, - "y": 203, - "w": 81, - "h": 69 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 162, - "y": 203, - "w": 81, - "h": 69 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 243, - "y": 203, - "w": 81, - "h": 69 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 243, - "y": 203, - "w": 81, - "h": 69 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 243, - "y": 203, - "w": 81, - "h": 69 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 243, - "y": 203, - "w": 81, - "h": 69 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 243, - "y": 203, - "w": 81, - "h": 69 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 324, - "y": 203, - "w": 81, - "h": 69 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 324, - "y": 203, - "w": 81, - "h": 69 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 324, - "y": 203, - "w": 81, - "h": 69 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 324, - "y": 203, - "w": 81, - "h": 69 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 324, - "y": 203, - "w": 81, - "h": 69 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 405, - "y": 203, - "w": 81, - "h": 69 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 405, - "y": 203, - "w": 81, - "h": 69 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 405, - "y": 203, - "w": 81, - "h": 69 - } - }, - { - "filename": "0112.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 405, - "y": 203, - "w": 81, - "h": 69 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 81, - "h": 69 - }, - "frame": { - "x": 486, - "y": 203, - "w": 81, - "h": 69 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 81, - "h": 69 - }, - "frame": { - "x": 486, - "y": 203, - "w": 81, - "h": 69 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 81, - "h": 69 - }, - "frame": { - "x": 486, - "y": 203, - "w": 81, - "h": 69 - } - }, - { - "filename": "0123.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 81, - "h": 69 - }, - "frame": { - "x": 486, - "y": 203, - "w": 81, - "h": 69 - } - }, - { - "filename": "0124.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 81, - "h": 69 - }, - "frame": { - "x": 486, - "y": 203, - "w": 81, - "h": 69 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 0, - "y": 270, - "w": 81, - "h": 69 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 0, - "y": 270, - "w": 81, - "h": 69 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 0, - "y": 270, - "w": 81, - "h": 69 - } - }, - { - "filename": "0130.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 0, - "y": 270, - "w": 81, - "h": 69 - } - }, - { - "filename": "0131.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 0, - "y": 270, - "w": 81, - "h": 69 - } - }, - { - "filename": "0137.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 81, - "y": 270, - "w": 81, - "h": 69 - } - }, - { - "filename": "0138.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 81, - "h": 69 - }, - "frame": { - "x": 81, - "y": 270, - "w": 81, - "h": 69 - } - }, - { - "filename": "0146.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 80, - "h": 69 - }, - "frame": { - "x": 162, - "y": 272, - "w": 80, - "h": 69 - } - }, - { - "filename": "0147.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 80, - "h": 69 - }, - "frame": { - "x": 162, - "y": 272, - "w": 80, - "h": 69 - } - }, - { - "filename": "0151.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 83, - "h": 69 - }, - "frame": { - "x": 242, - "y": 272, - "w": 83, - "h": 69 - } - }, - { - "filename": "0152.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 83, - "h": 69 - }, - "frame": { - "x": 242, - "y": 272, - "w": 83, - "h": 69 - } - }, - { - "filename": "0167.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 80, - "h": 69 - }, - "frame": { - "x": 325, - "y": 272, - "w": 80, - "h": 69 - } - }, - { - "filename": "0168.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 80, - "h": 69 - }, - "frame": { - "x": 325, - "y": 272, - "w": 80, - "h": 69 - } - }, - { - "filename": "0169.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 81, - "h": 69 - }, - "frame": { - "x": 405, - "y": 272, - "w": 81, - "h": 69 - } - }, - { - "filename": "0170.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 81, - "h": 69 - }, - "frame": { - "x": 405, - "y": 272, - "w": 81, - "h": 69 - } - }, - { - "filename": "0171.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 81, - "h": 69 - }, - "frame": { - "x": 405, - "y": 272, - "w": 81, - "h": 69 - } - }, - { - "filename": "0176.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 80, - "h": 69 - }, - "frame": { - "x": 486, - "y": 272, - "w": 80, - "h": 69 - } - }, - { - "filename": "0177.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 80, - "h": 69 - }, - "frame": { - "x": 486, - "y": 272, - "w": 80, - "h": 69 - } - }, - { - "filename": "0178.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 80, - "h": 69 - }, - "frame": { - "x": 486, - "y": 272, - "w": 80, - "h": 69 - } - }, - { - "filename": "0195.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 82, - "h": 69 - }, - "frame": { - "x": 0, - "y": 339, - "w": 82, - "h": 69 - } - }, - { - "filename": "0196.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 82, - "h": 69 - }, - "frame": { - "x": 0, - "y": 339, - "w": 82, - "h": 69 - } - }, - { - "filename": "0134.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 80, - "h": 70 - }, - "frame": { - "x": 82, - "y": 339, - "w": 80, - "h": 70 - } - }, - { - "filename": "0135.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 80, - "h": 70 - }, - "frame": { - "x": 82, - "y": 339, - "w": 80, - "h": 70 - } - }, - { - "filename": "0136.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 80, - "h": 70 - }, - "frame": { - "x": 82, - "y": 339, - "w": 80, - "h": 70 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 162, - "y": 341, - "w": 81, - "h": 70 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 162, - "y": 341, - "w": 81, - "h": 70 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 162, - "y": 341, - "w": 81, - "h": 70 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 162, - "y": 341, - "w": 81, - "h": 70 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 162, - "y": 341, - "w": 81, - "h": 70 - } - }, - { - "filename": "0132.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 162, - "y": 341, - "w": 81, - "h": 70 - } - }, - { - "filename": "0133.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 162, - "y": 341, - "w": 81, - "h": 70 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 243, - "y": 341, - "w": 81, - "h": 70 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 243, - "y": 341, - "w": 81, - "h": 70 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 243, - "y": 341, - "w": 81, - "h": 70 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 243, - "y": 341, - "w": 81, - "h": 70 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 324, - "y": 341, - "w": 81, - "h": 70 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 324, - "y": 341, - "w": 81, - "h": 70 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 324, - "y": 341, - "w": 81, - "h": 70 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 324, - "y": 341, - "w": 81, - "h": 70 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 405, - "y": 341, - "w": 81, - "h": 70 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 405, - "y": 341, - "w": 81, - "h": 70 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 405, - "y": 341, - "w": 81, - "h": 70 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 405, - "y": 341, - "w": 81, - "h": 70 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 405, - "y": 341, - "w": 81, - "h": 70 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 486, - "y": 341, - "w": 81, - "h": 70 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 486, - "y": 341, - "w": 81, - "h": 70 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 486, - "y": 341, - "w": 81, - "h": 70 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 486, - "y": 341, - "w": 81, - "h": 70 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 0, - "y": 408, - "w": 81, - "h": 70 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 0, - "y": 408, - "w": 81, - "h": 70 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 0, - "y": 408, - "w": 81, - "h": 70 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 0, - "y": 408, - "w": 81, - "h": 70 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 0, - "y": 408, - "w": 81, - "h": 70 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 81, - "y": 409, - "w": 81, - "h": 70 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 81, - "y": 409, - "w": 81, - "h": 70 - } - }, - { - "filename": "0113.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 81, - "y": 409, - "w": 81, - "h": 70 - } - }, - { - "filename": "0114.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 81, - "y": 409, - "w": 81, - "h": 70 - } - }, - { - "filename": "0115.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 81, - "y": 409, - "w": 81, - "h": 70 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 162, - "y": 411, - "w": 81, - "h": 70 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 162, - "y": 411, - "w": 81, - "h": 70 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 162, - "y": 411, - "w": 81, - "h": 70 - } - }, - { - "filename": "0116.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 162, - "y": 411, - "w": 81, - "h": 70 - } - }, - { - "filename": "0117.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 162, - "y": 411, - "w": 81, - "h": 70 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 243, - "y": 411, - "w": 81, - "h": 70 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 243, - "y": 411, - "w": 81, - "h": 70 - } - }, - { - "filename": "0118.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 243, - "y": 411, - "w": 81, - "h": 70 - } - }, - { - "filename": "0119.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 243, - "y": 411, - "w": 81, - "h": 70 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 70 - }, - "frame": { - "x": 324, - "y": 411, - "w": 81, - "h": 70 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 70 - }, - "frame": { - "x": 324, - "y": 411, - "w": 81, - "h": 70 - } - }, - { - "filename": "0120.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 70 - }, - "frame": { - "x": 324, - "y": 411, - "w": 81, - "h": 70 - } - }, - { - "filename": "0121.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 70 - }, - "frame": { - "x": 324, - "y": 411, - "w": 81, - "h": 70 - } - }, - { - "filename": "0122.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 81, - "h": 70 - }, - "frame": { - "x": 324, - "y": 411, - "w": 81, - "h": 70 - } - }, - { - "filename": "0148.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 405, - "y": 411, - "w": 81, - "h": 70 - } - }, - { - "filename": "0149.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 405, - "y": 411, - "w": 81, - "h": 70 - } - }, - { - "filename": "0150.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 405, - "y": 411, - "w": 81, - "h": 70 - } - }, - { - "filename": "0181.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 405, - "y": 411, - "w": 81, - "h": 70 - } - }, - { - "filename": "0182.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 405, - "y": 411, - "w": 81, - "h": 70 - } - }, - { - "filename": "0160.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 83, - "h": 70 - }, - "frame": { - "x": 486, - "y": 411, - "w": 83, - "h": 70 - } - }, - { - "filename": "0161.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 83, - "h": 70 - }, - "frame": { - "x": 486, - "y": 411, - "w": 83, - "h": 70 - } - }, - { - "filename": "0165.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 0, - "y": 478, - "w": 81, - "h": 70 - } - }, - { - "filename": "0166.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 70 - }, - "frame": { - "x": 0, - "y": 478, - "w": 81, - "h": 70 - } - }, - { - "filename": "0179.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 80, - "h": 70 - }, - "frame": { - "x": 81, - "y": 479, - "w": 80, - "h": 70 - } - }, - { - "filename": "0180.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 80, - "h": 70 - }, - "frame": { - "x": 81, - "y": 479, - "w": 80, - "h": 70 - } - }, - { - "filename": "0158.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 84, - "h": 70 - }, - "frame": { - "x": 161, - "y": 481, - "w": 84, - "h": 70 - } - }, - { - "filename": "0159.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 84, - "h": 70 - }, - "frame": { - "x": 161, - "y": 481, - "w": 84, - "h": 70 - } - }, - { - "filename": "0162.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 82, - "h": 70 - }, - "frame": { - "x": 245, - "y": 481, - "w": 82, - "h": 70 - } - }, - { - "filename": "0163.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 82, - "h": 70 - }, - "frame": { - "x": 245, - "y": 481, - "w": 82, - "h": 70 - } - }, - { - "filename": "0164.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 82, - "h": 70 - }, - "frame": { - "x": 245, - "y": 481, - "w": 82, - "h": 70 - } - }, - { - "filename": "0183.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 83, - "h": 70 - }, - "frame": { - "x": 327, - "y": 481, - "w": 83, - "h": 70 - } - }, - { - "filename": "0184.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 83, - "h": 70 - }, - "frame": { - "x": 327, - "y": 481, - "w": 83, - "h": 70 - } - }, - { - "filename": "0185.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 83, - "h": 70 - }, - "frame": { - "x": 327, - "y": 481, - "w": 83, - "h": 70 - } - }, - { - "filename": "0186.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 84, - "h": 70 - }, - "frame": { - "x": 410, - "y": 481, - "w": 84, - "h": 70 - } - }, - { - "filename": "0187.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 71 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 84, - "h": 70 - }, - "frame": { - "x": 410, - "y": 481, - "w": 84, - "h": 70 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:45b1919b351dad733f7b88701725e98a:30341f5f924f3632d0e938277cc51026:4e25ec866a209ce3a44bf419a5862c0c$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/female/3_2.png b/public/images/pokemon/variant/female/3_2.png deleted file mode 100644 index 8e955e2c82f..00000000000 Binary files a/public/images/pokemon/variant/female/3_2.png and /dev/null differ diff --git a/public/images/pokemon_icons_7.json b/public/images/pokemon_icons_7.json index 0523a232d79..03eeba88a70 100644 --- a/public/images/pokemon_icons_7.json +++ b/public/images/pokemon_icons_7.json @@ -5,7 +5,7 @@ "format": "RGBA8888", "size": { "w": 502, - "h": 323 + "h": 325 }, "scale": 1, "frames": [ @@ -324,48 +324,6 @@ "h": 29 } }, - { - "filename": "795", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 28, - "h": 30 - }, - "frame": { - "x": 0, - "y": 293, - "w": 28, - "h": 30 - } - }, - { - "filename": "795s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 28, - "h": 30 - }, - "frame": { - "x": 28, - "y": 293, - "w": 28, - "h": 30 - } - }, { "filename": "798s", "rotated": false, @@ -381,8 +339,8 @@ "h": 29 }, "frame": { - "x": 112, - "y": 0, + "x": 0, + "y": 293, "w": 31, "h": 29 } @@ -402,7 +360,7 @@ "h": 28 }, "frame": { - "x": 143, + "x": 112, "y": 0, "w": 30, "h": 28 @@ -423,8 +381,8 @@ "h": 28 }, "frame": { - "x": 173, - "y": 0, + "x": 108, + "y": 28, "w": 30, "h": 28 } @@ -444,7 +402,7 @@ "h": 28 }, "frame": { - "x": 203, + "x": 142, "y": 0, "w": 29, "h": 28 @@ -465,8 +423,8 @@ "h": 28 }, "frame": { - "x": 232, - "y": 0, + "x": 138, + "y": 28, "w": 29, "h": 28 } @@ -486,7 +444,7 @@ "h": 27 }, "frame": { - "x": 261, + "x": 171, "y": 0, "w": 29, "h": 27 @@ -507,7 +465,7 @@ "h": 27 }, "frame": { - "x": 290, + "x": 200, "y": 0, "w": 29, "h": 27 @@ -528,7 +486,7 @@ "h": 27 }, "frame": { - "x": 319, + "x": 229, "y": 0, "w": 28, "h": 27 @@ -549,7 +507,7 @@ "h": 27 }, "frame": { - "x": 347, + "x": 257, "y": 0, "w": 28, "h": 27 @@ -570,7 +528,7 @@ "h": 23 }, "frame": { - "x": 375, + "x": 285, "y": 0, "w": 32, "h": 23 @@ -591,14 +549,14 @@ "h": 23 }, "frame": { - "x": 407, + "x": 317, "y": 0, "w": 32, "h": 23 } }, { - "filename": "800", + "filename": "795", "rotated": false, "trimmed": true, "sourceSize": { @@ -619,7 +577,7 @@ } }, { - "filename": "800s", + "filename": "795s", "rotated": false, "trimmed": true, "sourceSize": { @@ -639,6 +597,48 @@ "h": 30 } }, + { + "filename": "800", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 28, + "h": 30 + }, + "frame": { + "x": 32, + "y": 145, + "w": 28, + "h": 30 + } + }, + { + "filename": "800s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 28, + "h": 30 + }, + "frame": { + "x": 32, + "y": 175, + "w": 28, + "h": 30 + } + }, { "filename": "805", "rotated": false, @@ -654,8 +654,8 @@ "h": 30 }, "frame": { - "x": 32, - "y": 145, + "x": 31, + "y": 205, "w": 28, "h": 30 } @@ -674,31 +674,10 @@ "w": 28, "h": 30 }, - "frame": { - "x": 32, - "y": 175, - "w": 28, - "h": 30 - } - }, - { - "filename": "773", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, "frame": { "x": 31, - "y": 205, - "w": 26, + "y": 235, + "w": 28, "h": 30 } }, @@ -718,32 +697,11 @@ }, "frame": { "x": 31, - "y": 235, + "y": 265, "w": 26, "h": 30 } }, - { - "filename": "792", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 28, - "h": 28 - }, - "frame": { - "x": 31, - "y": 265, - "w": 28, - "h": 28 - } - }, { "filename": "773-dark", "rotated": false, @@ -759,8 +717,8 @@ "h": 30 }, "frame": { - "x": 56, - "y": 293, + "x": 31, + "y": 295, "w": 26, "h": 30 } @@ -780,7 +738,7 @@ "h": 25 }, "frame": { - "x": 439, + "x": 349, "y": 0, "w": 30, "h": 25 @@ -801,12 +759,75 @@ "h": 25 }, "frame": { - "x": 469, + "x": 379, "y": 0, "w": 30, "h": 25 } }, + { + "filename": "785", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 3, + "w": 28, + "h": 26 + }, + "frame": { + "x": 409, + "y": 0, + "w": 28, + "h": 26 + } + }, + { + "filename": "785s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 3, + "w": 28, + "h": 26 + }, + "frame": { + "x": 437, + "y": 0, + "w": 28, + "h": 26 + } + }, + { + "filename": "792", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 1, + "w": 28, + "h": 28 + }, + "frame": { + "x": 465, + "y": 0, + "w": 28, + "h": 28 + } + }, { "filename": "792s", "rotated": false, @@ -822,8 +843,8 @@ "h": 28 }, "frame": { - "x": 108, - "y": 29, + "x": 70, + "y": 57, "w": 28, "h": 28 } @@ -843,8 +864,8 @@ "h": 30 }, "frame": { - "x": 70, - "y": 57, + "x": 62, + "y": 85, "w": 26, "h": 30 } @@ -864,8 +885,8 @@ "h": 30 }, "frame": { - "x": 96, - "y": 57, + "x": 62, + "y": 115, "w": 26, "h": 30 } @@ -885,8 +906,8 @@ "h": 30 }, "frame": { - "x": 62, - "y": 87, + "x": 60, + "y": 145, "w": 26, "h": 30 } @@ -906,8 +927,8 @@ "h": 30 }, "frame": { - "x": 88, - "y": 87, + "x": 60, + "y": 175, "w": 26, "h": 30 } @@ -927,8 +948,8 @@ "h": 30 }, "frame": { - "x": 62, - "y": 117, + "x": 59, + "y": 205, "w": 26, "h": 30 } @@ -948,8 +969,8 @@ "h": 30 }, "frame": { - "x": 88, - "y": 117, + "x": 59, + "y": 235, "w": 26, "h": 30 } @@ -969,8 +990,8 @@ "h": 30 }, "frame": { - "x": 60, - "y": 147, + "x": 57, + "y": 265, "w": 26, "h": 30 } @@ -990,12 +1011,54 @@ "h": 30 }, "frame": { - "x": 86, - "y": 147, + "x": 57, + "y": 295, "w": 26, "h": 30 } }, + { + "filename": "764", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 0, + "w": 25, + "h": 30 + }, + "frame": { + "x": 88, + "y": 85, + "w": 25, + "h": 30 + } + }, + { + "filename": "764s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 0, + "w": 25, + "h": 30 + }, + "frame": { + "x": 88, + "y": 115, + "w": 25, + "h": 30 + } + }, { "filename": "773-ground", "rotated": false, @@ -1011,8 +1074,8 @@ "h": 30 }, "frame": { - "x": 60, - "y": 177, + "x": 86, + "y": 145, "w": 26, "h": 30 } @@ -1033,7 +1096,7 @@ }, "frame": { "x": 86, - "y": 177, + "y": 175, "w": 26, "h": 30 } @@ -1053,8 +1116,8 @@ "h": 30 }, "frame": { - "x": 57, - "y": 207, + "x": 85, + "y": 205, "w": 26, "h": 30 } @@ -1074,54 +1137,12 @@ "h": 30 }, "frame": { - "x": 83, - "y": 207, + "x": 85, + "y": 235, "w": 26, "h": 30 } }, - { - "filename": "2026", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 26, - "h": 28 - }, - "frame": { - "x": 57, - "y": 237, - "w": 26, - "h": 28 - } - }, - { - "filename": "772", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 25, - "h": 28 - }, - "frame": { - "x": 59, - "y": 265, - "w": 25, - "h": 28 - } - }, { "filename": "773-rock", "rotated": false, @@ -1136,53 +1157,11 @@ "w": 26, "h": 30 }, - "frame": { - "x": 82, - "y": 293, - "w": 26, - "h": 30 - } - }, - { - "filename": "2026s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 26, - "h": 28 - }, "frame": { "x": 83, - "y": 237, - "w": 26, - "h": 28 - } - }, - { - "filename": "772s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 25, - "h": 28 - }, - "frame": { - "x": 84, "y": 265, - "w": 25, - "h": 28 + "w": 26, + "h": 30 } }, { @@ -1200,14 +1179,14 @@ "h": 30 }, "frame": { - "x": 108, - "y": 293, + "x": 83, + "y": 295, "w": 26, "h": 30 } }, { - "filename": "764", + "filename": "772", "rotated": false, "trimmed": true, "sourceSize": { @@ -1215,16 +1194,16 @@ "h": 30 }, "spriteSourceSize": { - "x": 10, - "y": 0, + "x": 8, + "y": 2, "w": 25, - "h": 30 + "h": 28 }, "frame": { - "x": 122, + "x": 98, "y": 57, "w": 25, - "h": 30 + "h": 28 } }, { @@ -1242,14 +1221,14 @@ "h": 30 }, "frame": { - "x": 114, - "y": 87, + "x": 123, + "y": 56, "w": 26, "h": 30 } }, { - "filename": "773s", + "filename": "773", "rotated": false, "trimmed": true, "sourceSize": { @@ -1263,8 +1242,8 @@ "h": 30 }, "frame": { - "x": 114, - "y": 117, + "x": 149, + "y": 56, "w": 26, "h": 30 } @@ -1284,8 +1263,8 @@ "h": 30 }, "frame": { - "x": 112, - "y": 147, + "x": 113, + "y": 86, "w": 26, "h": 30 } @@ -1305,8 +1284,8 @@ "h": 30 }, "frame": { - "x": 112, - "y": 177, + "x": 139, + "y": 86, "w": 26, "h": 30 } @@ -1326,8 +1305,8 @@ "h": 30 }, "frame": { - "x": 109, - "y": 207, + "x": 113, + "y": 116, "w": 26, "h": 30 } @@ -1347,33 +1326,12 @@ "h": 30 }, "frame": { - "x": 109, - "y": 237, + "x": 139, + "y": 116, "w": 26, "h": 30 } }, - { - "filename": "785", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 28, - "h": 26 - }, - "frame": { - "x": 109, - "y": 267, - "w": 28, - "h": 26 - } - }, { "filename": "773s-fairy", "rotated": false, @@ -1389,33 +1347,12 @@ "h": 30 }, "frame": { - "x": 134, - "y": 293, + "x": 112, + "y": 146, "w": 26, "h": 30 } }, - { - "filename": "801", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 2, - "w": 20, - "h": 28 - }, - "frame": { - "x": 136, - "y": 29, - "w": 20, - "h": 28 - } - }, { "filename": "773s-fighting", "rotated": false, @@ -1431,8 +1368,8 @@ "h": 30 }, "frame": { - "x": 156, - "y": 28, + "x": 138, + "y": 146, "w": 26, "h": 30 } @@ -1452,8 +1389,8 @@ "h": 30 }, "frame": { - "x": 182, - "y": 28, + "x": 112, + "y": 176, "w": 26, "h": 30 } @@ -1473,8 +1410,8 @@ "h": 30 }, "frame": { - "x": 208, - "y": 28, + "x": 138, + "y": 176, "w": 26, "h": 30 } @@ -1494,8 +1431,8 @@ "h": 30 }, "frame": { - "x": 234, - "y": 28, + "x": 111, + "y": 206, "w": 26, "h": 30 } @@ -1515,8 +1452,8 @@ "h": 30 }, "frame": { - "x": 147, - "y": 58, + "x": 137, + "y": 206, "w": 26, "h": 30 } @@ -1536,8 +1473,8 @@ "h": 30 }, "frame": { - "x": 173, - "y": 58, + "x": 111, + "y": 236, "w": 26, "h": 30 } @@ -1557,8 +1494,8 @@ "h": 30 }, "frame": { - "x": 199, - "y": 58, + "x": 137, + "y": 236, "w": 26, "h": 30 } @@ -1578,12 +1515,33 @@ "h": 30 }, "frame": { - "x": 225, - "y": 58, + "x": 109, + "y": 266, "w": 26, "h": 30 } }, + { + "filename": "794", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 1, + "w": 25, + "h": 29 + }, + "frame": { + "x": 109, + "y": 296, + "w": 25, + "h": 29 + } + }, { "filename": "773s-psychic", "rotated": false, @@ -1599,12 +1557,54 @@ "h": 30 }, "frame": { - "x": 140, - "y": 88, + "x": 135, + "y": 266, "w": 26, "h": 30 } }, + { + "filename": "794s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 1, + "w": 25, + "h": 29 + }, + "frame": { + "x": 134, + "y": 296, + "w": 25, + "h": 29 + } + }, + { + "filename": "796", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 1, + "w": 18, + "h": 29 + }, + "frame": { + "x": 159, + "y": 296, + "w": 18, + "h": 29 + } + }, { "filename": "773s-rock", "rotated": false, @@ -1620,12 +1620,54 @@ "h": 30 }, "frame": { - "x": 166, - "y": 88, + "x": 161, + "y": 266, "w": 26, "h": 30 } }, + { + "filename": "796s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 1, + "w": 18, + "h": 29 + }, + "frame": { + "x": 177, + "y": 296, + "w": 18, + "h": 29 + } + }, + { + "filename": "772s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 25, + "h": 28 + }, + "frame": { + "x": 167, + "y": 28, + "w": 25, + "h": 28 + } + }, { "filename": "773s-steel", "rotated": false, @@ -1642,7 +1684,7 @@ }, "frame": { "x": 192, - "y": 88, + "y": 27, "w": 26, "h": 30 } @@ -1663,13 +1705,13 @@ }, "frame": { "x": 218, - "y": 88, + "y": 27, "w": 26, "h": 30 } }, { - "filename": "764s", + "filename": "773s", "rotated": false, "trimmed": true, "sourceSize": { @@ -1677,123 +1719,18 @@ "h": 30 }, "spriteSourceSize": { - "x": 10, + "x": 7, "y": 0, - "w": 25, + "w": 26, "h": 30 }, "frame": { - "x": 140, - "y": 118, - "w": 25, + "x": 244, + "y": 27, + "w": 26, "h": 30 } }, - { - "filename": "785s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 28, - "h": 26 - }, - "frame": { - "x": 165, - "y": 118, - "w": 28, - "h": 26 - } - }, - { - "filename": "2075", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 29, - "h": 24 - }, - "frame": { - "x": 193, - "y": 118, - "w": 29, - "h": 24 - } - }, - { - "filename": "794", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 1, - "w": 25, - "h": 29 - }, - "frame": { - "x": 138, - "y": 148, - "w": 25, - "h": 29 - } - }, - { - "filename": "794s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 1, - "w": 25, - "h": 29 - }, - "frame": { - "x": 138, - "y": 177, - "w": 25, - "h": 29 - } - }, - { - "filename": "726", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 23, - "h": 24 - }, - "frame": { - "x": 222, - "y": 118, - "w": 23, - "h": 24 - } - }, { "filename": "2103", "rotated": false, @@ -1809,12 +1746,75 @@ "h": 30 }, "frame": { - "x": 251, - "y": 58, + "x": 270, + "y": 27, "w": 21, "h": 30 } }, + { + "filename": "2026", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 1, + "w": 26, + "h": 28 + }, + "frame": { + "x": 291, + "y": 23, + "w": 26, + "h": 28 + } + }, + { + "filename": "2026s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 1, + "w": 26, + "h": 28 + }, + "frame": { + "x": 317, + "y": 23, + "w": 26, + "h": 28 + } + }, + { + "filename": "2075", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 29, + "h": 24 + }, + "frame": { + "x": 343, + "y": 25, + "w": 29, + "h": 24 + } + }, { "filename": "2075s", "rotated": false, @@ -1830,180 +1830,12 @@ "h": 24 }, "frame": { - "x": 244, - "y": 88, + "x": 372, + "y": 25, "w": 29, "h": 24 } }, - { - "filename": "748", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 26, - "h": 25 - }, - "frame": { - "x": 245, - "y": 112, - "w": 26, - "h": 25 - } - }, - { - "filename": "2103s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 21, - "h": 30 - }, - "frame": { - "x": 260, - "y": 28, - "w": 21, - "h": 30 - } - }, - { - "filename": "748s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 26, - "h": 25 - }, - "frame": { - "x": 281, - "y": 27, - "w": 26, - "h": 25 - } - }, - { - "filename": "2089", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 26, - "h": 25 - }, - "frame": { - "x": 307, - "y": 27, - "w": 26, - "h": 25 - } - }, - { - "filename": "2089s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 26, - "h": 25 - }, - "frame": { - "x": 333, - "y": 27, - "w": 26, - "h": 25 - } - }, - { - "filename": "724", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 4, - "w": 19, - "h": 25 - }, - "frame": { - "x": 359, - "y": 27, - "w": 19, - "h": 25 - } - }, - { - "filename": "745-dusk", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 25, - "h": 25 - }, - "frame": { - "x": 378, - "y": 23, - "w": 25, - "h": 25 - } - }, - { - "filename": "745s-dusk", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 25, - "h": 25 - }, - "frame": { - "x": 403, - "y": 23, - "w": 25, - "h": 25 - } - }, { "filename": "746-school", "rotated": false, @@ -2019,8 +1851,8 @@ "h": 22 }, "frame": { - "x": 428, - "y": 25, + "x": 401, + "y": 26, "w": 28, "h": 22 } @@ -2040,14 +1872,14 @@ "h": 22 }, "frame": { - "x": 456, - "y": 25, + "x": 429, + "y": 26, "w": 28, "h": 22 } }, { - "filename": "796", + "filename": "760", "rotated": false, "trimmed": true, "sourceSize": { @@ -2055,20 +1887,20 @@ "h": 30 }, "spriteSourceSize": { - "x": 10, - "y": 1, - "w": 18, - "h": 29 + "x": 13, + "y": 4, + "w": 17, + "h": 24 }, "frame": { - "x": 484, - "y": 25, - "w": 18, - "h": 29 + "x": 175, + "y": 56, + "w": 17, + "h": 24 } }, { - "filename": "796s", + "filename": "748", "rotated": false, "trimmed": true, "sourceSize": { @@ -2076,16 +1908,121 @@ "h": 30 }, "spriteSourceSize": { - "x": 10, - "y": 1, - "w": 18, - "h": 29 + "x": 7, + "y": 5, + "w": 26, + "h": 25 }, "frame": { - "x": 272, - "y": 58, - "w": 18, - "h": 29 + "x": 192, + "y": 57, + "w": 26, + "h": 25 + } + }, + { + "filename": "748s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 26, + "h": 25 + }, + "frame": { + "x": 218, + "y": 57, + "w": 26, + "h": 25 + } + }, + { + "filename": "2089", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 3, + "w": 26, + "h": 25 + }, + "frame": { + "x": 244, + "y": 57, + "w": 26, + "h": 25 + } + }, + { + "filename": "745-dusk", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 25, + "h": 25 + }, + "frame": { + "x": 270, + "y": 57, + "w": 25, + "h": 25 + } + }, + { + "filename": "2089s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 3, + "w": 26, + "h": 25 + }, + "frame": { + "x": 295, + "y": 51, + "w": 26, + "h": 25 + } + }, + { + "filename": "745s-dusk", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 25, + "h": 25 + }, + "frame": { + "x": 321, + "y": 51, + "w": 25, + "h": 25 } }, { @@ -2103,8 +2040,8 @@ "h": 26 }, "frame": { - "x": 290, - "y": 52, + "x": 346, + "y": 49, "w": 24, "h": 26 } @@ -2124,159 +2061,12 @@ "h": 26 }, "frame": { - "x": 314, - "y": 52, + "x": 370, + "y": 49, "w": 24, "h": 26 } }, - { - "filename": "750", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 25, - "h": 24 - }, - "frame": { - "x": 338, - "y": 52, - "w": 25, - "h": 24 - } - }, - { - "filename": "724s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 4, - "w": 19, - "h": 25 - }, - "frame": { - "x": 273, - "y": 87, - "w": 19, - "h": 25 - } - }, - { - "filename": "776", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 23, - "h": 26 - }, - "frame": { - "x": 271, - "y": 112, - "w": 23, - "h": 26 - } - }, - { - "filename": "750s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 25, - "h": 24 - }, - "frame": { - "x": 292, - "y": 78, - "w": 25, - "h": 24 - } - }, - { - "filename": "726s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 23, - "h": 24 - }, - "frame": { - "x": 317, - "y": 78, - "w": 23, - "h": 24 - } - }, - { - "filename": "776s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 23, - "h": 26 - }, - "frame": { - "x": 340, - "y": 76, - "w": 23, - "h": 26 - } - }, - { - "filename": "801-original", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 2, - "w": 20, - "h": 28 - }, - "frame": { - "x": 363, - "y": 52, - "w": 20, - "h": 28 - } - }, { "filename": "765", "rotated": false, @@ -2292,14 +2082,56 @@ "h": 21 }, "frame": { - "x": 383, - "y": 48, + "x": 457, + "y": 28, "w": 28, "h": 21 } }, { - "filename": "727", + "filename": "760s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 4, + "w": 17, + "h": 24 + }, + "frame": { + "x": 485, + "y": 28, + "w": 17, + "h": 24 + } + }, + { + "filename": "2103s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 0, + "w": 21, + "h": 30 + }, + "frame": { + "x": 165, + "y": 86, + "w": 21, + "h": 30 + } + }, + { + "filename": "783", "rotated": false, "trimmed": true, "sourceSize": { @@ -2308,14 +2140,56 @@ }, "spriteSourceSize": { "x": 9, + "y": 3, + "w": 21, + "h": 27 + }, + "frame": { + "x": 165, + "y": 116, + "w": 21, + "h": 27 + } + }, + { + "filename": "750", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, "y": 4, - "w": 23, + "w": 25, "h": 24 }, "frame": { - "x": 363, - "y": 80, - "w": 23, + "x": 186, + "y": 82, + "w": 25, + "h": 24 + } + }, + { + "filename": "750s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 25, + "h": 24 + }, + "frame": { + "x": 211, + "y": 82, + "w": 25, "h": 24 } }, @@ -2334,159 +2208,12 @@ "h": 21 }, "frame": { - "x": 294, - "y": 102, + "x": 186, + "y": 106, "w": 28, "h": 21 } }, - { - "filename": "725", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 7, - "w": 25, - "h": 21 - }, - "frame": { - "x": 322, - "y": 102, - "w": 25, - "h": 21 - } - }, - { - "filename": "780", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 27, - "h": 19 - }, - "frame": { - "x": 294, - "y": 123, - "w": 27, - "h": 19 - } - }, - { - "filename": "780s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 27, - "h": 19 - }, - "frame": { - "x": 321, - "y": 123, - "w": 27, - "h": 19 - } - }, - { - "filename": "723", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 5, - "w": 17, - "h": 22 - }, - "frame": { - "x": 411, - "y": 48, - "w": 17, - "h": 22 - } - }, - { - "filename": "745", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 6, - "w": 25, - "h": 23 - }, - "frame": { - "x": 428, - "y": 47, - "w": 25, - "h": 23 - } - }, - { - "filename": "745s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 6, - "w": 25, - "h": 23 - }, - "frame": { - "x": 453, - "y": 47, - "w": 25, - "h": 23 - } - }, - { - "filename": "768", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 24, - "h": 23 - }, - "frame": { - "x": 478, - "y": 54, - "w": 24, - "h": 23 - } - }, { "filename": "2028", "rotated": false, @@ -2502,8 +2229,8 @@ "h": 24 }, "frame": { - "x": 386, - "y": 69, + "x": 236, + "y": 82, "w": 25, "h": 24 } @@ -2523,56 +2250,14 @@ "h": 24 }, "frame": { - "x": 411, - "y": 70, + "x": 261, + "y": 82, "w": 25, "h": 24 } }, { - "filename": "727s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 23, - "h": 24 - }, - "frame": { - "x": 436, - "y": 70, - "w": 23, - "h": 24 - } - }, - { - "filename": "781", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 3, - "w": 19, - "h": 25 - }, - "frame": { - "x": 459, - "y": 70, - "w": 19, - "h": 25 - } - }, - { - "filename": "768s", + "filename": "725", "rotated": false, "trimmed": true, "sourceSize": { @@ -2581,15 +2266,15 @@ }, "spriteSourceSize": { "x": 8, - "y": 5, - "w": 24, - "h": 23 + "y": 7, + "w": 25, + "h": 21 }, "frame": { - "x": 478, - "y": 77, - "w": 24, - "h": 23 + "x": 214, + "y": 106, + "w": 25, + "h": 21 } }, { @@ -2607,14 +2292,14 @@ "h": 21 }, "frame": { - "x": 386, - "y": 93, + "x": 239, + "y": 106, "w": 25, "h": 21 } }, { - "filename": "2020", + "filename": "726", "rotated": false, "trimmed": true, "sourceSize": { @@ -2623,40 +2308,19 @@ }, "spriteSourceSize": { "x": 8, - "y": 6, - "w": 25, - "h": 22 - }, - "frame": { - "x": 411, - "y": 94, - "w": 25, - "h": 22 - } - }, - { - "filename": "729", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 5, + "y": 4, "w": 23, "h": 24 }, "frame": { - "x": 436, - "y": 94, + "x": 264, + "y": 106, "w": 23, "h": 24 } }, { - "filename": "781s", + "filename": "780", "rotated": false, "trimmed": true, "sourceSize": { @@ -2664,62 +2328,20 @@ "h": 30 }, "spriteSourceSize": { - "x": 11, - "y": 3, - "w": 19, - "h": 25 - }, - "frame": { - "x": 459, - "y": 95, - "w": 19, - "h": 25 - } - }, - { - "filename": "2105", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 24, - "h": 23 - }, - "frame": { - "x": 478, - "y": 100, - "w": 24, - "h": 23 - } - }, - { - "filename": "761", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 8, - "w": 16, + "x": 7, + "y": 7, + "w": 27, "h": 19 }, "frame": { - "x": 347, - "y": 102, - "w": 16, + "x": 186, + "y": 127, + "w": 27, "h": 19 } }, { - "filename": "729s", + "filename": "780s", "rotated": false, "trimmed": true, "sourceSize": { @@ -2727,184 +2349,16 @@ "h": 30 }, "spriteSourceSize": { - "x": 11, - "y": 5, - "w": 23, - "h": 24 - }, - "frame": { - "x": 363, - "y": 104, - "w": 23, - "h": 24 - } - }, - { - "filename": "734", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 10, - "w": 25, - "h": 16 - }, - "frame": { - "x": 386, - "y": 114, - "w": 25, - "h": 16 - } - }, - { - "filename": "734s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 10, - "w": 25, - "h": 16 - }, - "frame": { - "x": 411, - "y": 116, - "w": 25, - "h": 16 - } - }, - { - "filename": "733", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, + "x": 7, "y": 7, - "w": 23, - "h": 21 + "w": 27, + "h": 19 }, "frame": { - "x": 436, - "y": 118, - "w": 23, - "h": 21 - } - }, - { - "filename": "732", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 6, - "w": 19, - "h": 22 - }, - "frame": { - "x": 459, - "y": 120, - "w": 19, - "h": 22 - } - }, - { - "filename": "2105s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 24, - "h": 23 - }, - "frame": { - "x": 478, - "y": 123, - "w": 24, - "h": 23 - } - }, - { - "filename": "2050", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 10, - "w": 15, - "h": 18 - }, - "frame": { - "x": 348, - "y": 121, - "w": 15, - "h": 18 - } - }, - { - "filename": "733s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 7, - "w": 23, - "h": 21 - }, - "frame": { - "x": 363, - "y": 128, - "w": 23, - "h": 21 - } - }, - { - "filename": "2020s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 6, - "w": 25, - "h": 22 - }, - "frame": { - "x": 386, - "y": 130, - "w": 25, - "h": 22 + "x": 213, + "y": 127, + "w": 27, + "h": 19 } }, { @@ -2922,14 +2376,14 @@ "h": 22 }, "frame": { - "x": 411, - "y": 132, + "x": 240, + "y": 127, "w": 24, "h": 22 } }, { - "filename": "758s", + "filename": "726s", "rotated": false, "trimmed": true, "sourceSize": { @@ -2937,104 +2391,20 @@ "h": 30 }, "spriteSourceSize": { - "x": 11, - "y": 6, - "w": 24, - "h": 22 + "x": 8, + "y": 4, + "w": 23, + "h": 24 }, "frame": { - "x": 435, - "y": 139, - "w": 24, - "h": 22 + "x": 264, + "y": 130, + "w": 23, + "h": 24 } }, { - "filename": "732s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 6, - "w": 19, - "h": 22 - }, - "frame": { - "x": 459, - "y": 142, - "w": 19, - "h": 22 - } - }, - { - "filename": "2053", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 24, - "h": 22 - }, - "frame": { - "x": 478, - "y": 146, - "w": 24, - "h": 22 - } - }, - { - "filename": "801s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 2, - "w": 20, - "h": 28 - }, - "frame": { - "x": 135, - "y": 207, - "w": 20, - "h": 28 - } - }, - { - "filename": "801s-original", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 2, - "w": 20, - "h": 28 - }, - "frame": { - "x": 135, - "y": 235, - "w": 20, - "h": 28 - } - }, - { - "filename": "783", + "filename": "727", "rotated": false, "trimmed": true, "sourceSize": { @@ -3043,15 +2413,78 @@ }, "spriteSourceSize": { "x": 9, - "y": 3, - "w": 21, - "h": 27 + "y": 4, + "w": 23, + "h": 24 }, "frame": { - "x": 137, - "y": 263, - "w": 21, - "h": 27 + "x": 286, + "y": 82, + "w": 23, + "h": 24 + } + }, + { + "filename": "776", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 23, + "h": 26 + }, + "frame": { + "x": 287, + "y": 106, + "w": 23, + "h": 26 + } + }, + { + "filename": "727s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 4, + "w": 23, + "h": 24 + }, + "frame": { + "x": 287, + "y": 132, + "w": 23, + "h": 24 + } + }, + { + "filename": "776s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 23, + "h": 26 + }, + "frame": { + "x": 309, + "y": 76, + "w": 23, + "h": 26 } }, { @@ -3069,8 +2502,8 @@ "h": 27 }, "frame": { - "x": 155, - "y": 206, + "x": 310, + "y": 102, "w": 21, "h": 27 } @@ -3090,8 +2523,8 @@ "h": 26 }, "frame": { - "x": 155, - "y": 233, + "x": 310, + "y": 129, "w": 22, "h": 26 } @@ -3111,8 +2544,8 @@ "h": 26 }, "frame": { - "x": 158, - "y": 259, + "x": 332, + "y": 76, "w": 22, "h": 26 } @@ -3132,12 +2565,306 @@ "h": 26 }, "frame": { - "x": 160, - "y": 285, + "x": 331, + "y": 102, "w": 22, "h": 26 } }, + { + "filename": "745", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 6, + "w": 25, + "h": 23 + }, + "frame": { + "x": 354, + "y": 75, + "w": 25, + "h": 23 + } + }, + { + "filename": "788s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 2, + "w": 22, + "h": 26 + }, + "frame": { + "x": 332, + "y": 128, + "w": 22, + "h": 26 + } + }, + { + "filename": "724", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 4, + "w": 19, + "h": 25 + }, + "frame": { + "x": 379, + "y": 75, + "w": 19, + "h": 25 + } + }, + { + "filename": "724s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 4, + "w": 19, + "h": 25 + }, + "frame": { + "x": 394, + "y": 49, + "w": 19, + "h": 25 + } + }, + { + "filename": "745s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 6, + "w": 25, + "h": 23 + }, + "frame": { + "x": 413, + "y": 48, + "w": 25, + "h": 23 + } + }, + { + "filename": "781", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 3, + "w": 19, + "h": 25 + }, + "frame": { + "x": 438, + "y": 48, + "w": 19, + "h": 25 + } + }, + { + "filename": "729", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 5, + "w": 23, + "h": 24 + }, + "frame": { + "x": 457, + "y": 49, + "w": 23, + "h": 24 + } + }, + { + "filename": "806", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 3, + "w": 22, + "h": 25 + }, + "frame": { + "x": 480, + "y": 52, + "w": 22, + "h": 25 + } + }, + { + "filename": "801-original", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 2, + "w": 20, + "h": 28 + }, + "frame": { + "x": 398, + "y": 74, + "w": 20, + "h": 28 + } + }, + { + "filename": "801", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 2, + "w": 20, + "h": 28 + }, + "frame": { + "x": 418, + "y": 71, + "w": 20, + "h": 28 + } + }, + { + "filename": "803", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 3, + "w": 23, + "h": 25 + }, + "frame": { + "x": 438, + "y": 73, + "w": 23, + "h": 25 + } + }, + { + "filename": "781s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 3, + "w": 19, + "h": 25 + }, + "frame": { + "x": 461, + "y": 73, + "w": 19, + "h": 25 + } + }, + { + "filename": "806s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 3, + "w": 22, + "h": 25 + }, + "frame": { + "x": 480, + "y": 77, + "w": 22, + "h": 25 + } + }, + { + "filename": "734", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 10, + "w": 25, + "h": 16 + }, + "frame": { + "x": 354, + "y": 98, + "w": 25, + "h": 16 + } + }, { "filename": "767", "rotated": false, @@ -3153,14 +2880,35 @@ "h": 14 }, "frame": { - "x": 245, - "y": 137, + "x": 353, + "y": 114, "w": 24, "h": 14 } }, { - "filename": "767s", + "filename": "803s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 3, + "w": 23, + "h": 25 + }, + "frame": { + "x": 354, + "y": 128, + "w": 23, + "h": 25 + } + }, + { + "filename": "732", "rotated": false, "trimmed": true, "sourceSize": { @@ -3169,15 +2917,603 @@ }, "spriteSourceSize": { "x": 10, - "y": 11, - "w": 24, - "h": 14 + "y": 6, + "w": 19, + "h": 22 }, "frame": { - "x": 269, - "y": 138, + "x": 379, + "y": 100, + "w": 19, + "h": 22 + } + }, + { + "filename": "801s-original", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 2, + "w": 20, + "h": 28 + }, + "frame": { + "x": 377, + "y": 122, + "w": 20, + "h": 28 + } + }, + { + "filename": "729s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 5, + "w": 23, + "h": 24 + }, + "frame": { + "x": 398, + "y": 102, + "w": 23, + "h": 24 + } + }, + { + "filename": "768", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, "w": 24, - "h": 14 + "h": 23 + }, + "frame": { + "x": 397, + "y": 126, + "w": 24, + "h": 23 + } + }, + { + "filename": "801s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 2, + "w": 20, + "h": 28 + }, + "frame": { + "x": 421, + "y": 99, + "w": 20, + "h": 28 + } + }, + { + "filename": "768s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 24, + "h": 23 + }, + "frame": { + "x": 441, + "y": 98, + "w": 24, + "h": 23 + } + }, + { + "filename": "735", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 4, + "w": 20, + "h": 24 + }, + "frame": { + "x": 421, + "y": 127, + "w": 20, + "h": 24 + } + }, + { + "filename": "770", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 4, + "w": 23, + "h": 24 + }, + "frame": { + "x": 441, + "y": 121, + "w": 23, + "h": 24 + } + }, + { + "filename": "2050", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 10, + "w": 15, + "h": 18 + }, + "frame": { + "x": 465, + "y": 98, + "w": 15, + "h": 18 + } + }, + { + "filename": "756", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 5, + "w": 22, + "h": 24 + }, + "frame": { + "x": 480, + "y": 102, + "w": 22, + "h": 24 + } + }, + { + "filename": "2050s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 10, + "w": 15, + "h": 18 + }, + "frame": { + "x": 465, + "y": 116, + "w": 15, + "h": 18 + } + }, + { + "filename": "756s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 5, + "w": 22, + "h": 24 + }, + "frame": { + "x": 480, + "y": 126, + "w": 22, + "h": 24 + } + }, + { + "filename": "761", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 8, + "w": 16, + "h": 19 + }, + "frame": { + "x": 464, + "y": 134, + "w": 16, + "h": 19 + } + }, + { + "filename": "802-zenith", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 4, + "w": 22, + "h": 24 + }, + "frame": { + "x": 480, + "y": 150, + "w": 22, + "h": 24 + } + }, + { + "filename": "733", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 7, + "w": 23, + "h": 21 + }, + "frame": { + "x": 441, + "y": 145, + "w": 23, + "h": 21 + } + }, + { + "filename": "761s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 8, + "w": 16, + "h": 19 + }, + "frame": { + "x": 464, + "y": 153, + "w": 16, + "h": 19 + } + }, + { + "filename": "745-midnight", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 4, + "w": 21, + "h": 24 + }, + "frame": { + "x": 165, + "y": 143, + "w": 21, + "h": 24 + } + }, + { + "filename": "2020", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 6, + "w": 25, + "h": 22 + }, + "frame": { + "x": 186, + "y": 146, + "w": 25, + "h": 22 + } + }, + { + "filename": "2020s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 6, + "w": 25, + "h": 22 + }, + "frame": { + "x": 211, + "y": 146, + "w": 25, + "h": 22 + } + }, + { + "filename": "802", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 4, + "w": 22, + "h": 24 + }, + "frame": { + "x": 164, + "y": 167, + "w": 22, + "h": 24 + } + }, + { + "filename": "2105", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 24, + "h": 23 + }, + "frame": { + "x": 186, + "y": 168, + "w": 24, + "h": 23 + } + }, + { + "filename": "2105s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 24, + "h": 23 + }, + "frame": { + "x": 210, + "y": 168, + "w": 24, + "h": 23 + } + }, + { + "filename": "734s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 10, + "w": 25, + "h": 16 + }, + "frame": { + "x": 164, + "y": 191, + "w": 25, + "h": 16 + } + }, + { + "filename": "770s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 4, + "w": 23, + "h": 24 + }, + "frame": { + "x": 163, + "y": 207, + "w": 23, + "h": 24 + } + }, + { + "filename": "2051", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 4, + "w": 23, + "h": 24 + }, + "frame": { + "x": 163, + "y": 231, + "w": 23, + "h": 24 + } + }, + { + "filename": "758s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 6, + "w": 24, + "h": 22 + }, + "frame": { + "x": 189, + "y": 191, + "w": 24, + "h": 22 + } + }, + { + "filename": "2051s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 4, + "w": 23, + "h": 24 + }, + "frame": { + "x": 186, + "y": 213, + "w": 23, + "h": 24 + } + }, + { + "filename": "745s-midnight", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 4, + "w": 21, + "h": 24 + }, + "frame": { + "x": 213, + "y": 191, + "w": 21, + "h": 24 + } + }, + { + "filename": "2053", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 24, + "h": 22 + }, + "frame": { + "x": 209, + "y": 215, + "w": 24, + "h": 22 } }, { @@ -3195,8 +3531,8 @@ "h": 22 }, "frame": { - "x": 293, - "y": 142, + "x": 186, + "y": 237, "w": 24, "h": 22 } @@ -3216,14 +3552,14 @@ "h": 22 }, "frame": { - "x": 317, - "y": 142, + "x": 210, + "y": 237, "w": 23, "h": 22 } }, { - "filename": "769s", + "filename": "802s-zenith", "rotated": false, "trimmed": true, "sourceSize": { @@ -3231,125 +3567,20 @@ "h": 30 }, "spriteSourceSize": { - "x": 8, - "y": 6, - "w": 23, - "h": 22 - }, - "frame": { - "x": 340, - "y": 142, - "w": 23, - "h": 22 - } - }, - { - "filename": "752", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 23, - "h": 18 - }, - "frame": { - "x": 363, - "y": 149, - "w": 23, - "h": 18 - } - }, - { - "filename": "2074", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 13, - "w": 24, - "h": 15 - }, - "frame": { - "x": 386, - "y": 152, - "w": 24, - "h": 15 - } - }, - { - "filename": "2074s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 13, - "w": 24, - "h": 15 - }, - "frame": { - "x": 410, - "y": 154, - "w": 24, - "h": 15 - } - }, - { - "filename": "752s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 23, - "h": 18 - }, - "frame": { - "x": 434, - "y": 161, - "w": 23, - "h": 18 - } - }, - { - "filename": "745-midnight", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, + "x": 13, "y": 4, - "w": 21, + "w": 22, "h": 24 }, "frame": { - "x": 457, - "y": 164, - "w": 21, + "x": 187, + "y": 259, + "w": 22, "h": 24 } }, { - "filename": "770", + "filename": "802s", "rotated": false, "trimmed": true, "sourceSize": { @@ -3357,20 +3588,20 @@ "h": 30 }, "spriteSourceSize": { - "x": 9, + "x": 13, "y": 4, - "w": 23, + "w": 22, "h": 24 }, "frame": { - "x": 478, - "y": 168, - "w": 23, + "x": 209, + "y": 259, + "w": 22, "h": 24 } }, { - "filename": "722", + "filename": "746", "rotated": false, "trimmed": true, "sourceSize": { @@ -3379,19 +3610,40 @@ }, "spriteSourceSize": { "x": 12, - "y": 8, - "w": 17, - "h": 18 + "y": 11, + "w": 18, + "h": 13 }, "frame": { - "x": 163, - "y": 188, - "w": 17, - "h": 18 + "x": 187, + "y": 283, + "w": 18, + "h": 13 } }, { - "filename": "735", + "filename": "733s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 7, + "w": 23, + "h": 21 + }, + "frame": { + "x": 236, + "y": 149, + "w": 23, + "h": 21 + } + }, + { + "filename": "807", "rotated": false, "trimmed": true, "sourceSize": { @@ -3401,308 +3653,14 @@ "spriteSourceSize": { "x": 11, "y": 4, - "w": 20, - "h": 24 - }, - "frame": { - "x": 163, - "y": 164, - "w": 20, - "h": 24 - } - }, - { - "filename": "789", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 6, - "w": 23, - "h": 20 - }, - "frame": { - "x": 165, - "y": 144, - "w": 23, - "h": 20 - } - }, - { - "filename": "788s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 2, "w": 22, - "h": 26 + "h": 24 }, "frame": { - "x": 176, - "y": 206, + "x": 234, + "y": 170, "w": 22, - "h": 26 - } - }, - { - "filename": "803", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 3, - "w": 23, - "h": 25 - }, - "frame": { - "x": 177, - "y": 232, - "w": 23, - "h": 25 - } - }, - { - "filename": "786", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 3, - "w": 20, - "h": 25 - }, - "frame": { - "x": 180, - "y": 257, - "w": 20, - "h": 25 - } - }, - { - "filename": "786s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 3, - "w": 20, - "h": 25 - }, - "frame": { - "x": 182, - "y": 282, - "w": 20, - "h": 25 - } - }, - { - "filename": "778-busted", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 12, - "w": 21, - "h": 16 - }, - "frame": { - "x": 182, - "y": 307, - "w": 21, - "h": 16 - } - }, - { - "filename": "757", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 9, - "w": 19, - "h": 18 - }, - "frame": { - "x": 180, - "y": 188, - "w": 19, - "h": 18 - } - }, - { - "filename": "735s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 4, - "w": 20, "h": 24 - }, - "frame": { - "x": 183, - "y": 164, - "w": 20, - "h": 24 - } - }, - { - "filename": "728", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 8, - "w": 17, - "h": 20 - }, - "frame": { - "x": 188, - "y": 144, - "w": 17, - "h": 20 - } - }, - { - "filename": "770s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 23, - "h": 24 - }, - "frame": { - "x": 205, - "y": 142, - "w": 23, - "h": 24 - } - }, - { - "filename": "760", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 4, - "w": 17, - "h": 24 - }, - "frame": { - "x": 228, - "y": 142, - "w": 17, - "h": 24 - } - }, - { - "filename": "803s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 3, - "w": 23, - "h": 25 - }, - "frame": { - "x": 203, - "y": 166, - "w": 23, - "h": 25 - } - }, - { - "filename": "806", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 3, - "w": 22, - "h": 25 - }, - "frame": { - "x": 226, - "y": 166, - "w": 22, - "h": 25 - } - }, - { - "filename": "789s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 6, - "w": 23, - "h": 20 - }, - "frame": { - "x": 199, - "y": 191, - "w": 23, - "h": 20 } }, { @@ -3720,14 +3678,14 @@ "h": 21 }, "frame": { - "x": 198, - "y": 211, + "x": 234, + "y": 194, "w": 22, "h": 21 } }, { - "filename": "806s", + "filename": "807s", "rotated": false, "trimmed": true, "sourceSize": { @@ -3735,125 +3693,20 @@ "h": 30 }, "spriteSourceSize": { - "x": 9, - "y": 3, - "w": 22, - "h": 25 - }, - "frame": { - "x": 200, - "y": 232, - "w": 22, - "h": 25 - } - }, - { - "filename": "756", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 5, - "w": 22, - "h": 24 - }, - "frame": { - "x": 200, - "y": 257, - "w": 22, - "h": 24 - } - }, - { - "filename": "745s-midnight", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, + "x": 11, "y": 4, - "w": 21, + "w": 22, "h": 24 }, "frame": { - "x": 202, - "y": 281, - "w": 21, - "h": 24 - } - }, - { - "filename": "2027", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 10, - "w": 21, - "h": 18 - }, - "frame": { - "x": 203, - "y": 305, - "w": 21, - "h": 18 - } - }, - { - "filename": "2051", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 23, - "h": 24 - }, - "frame": { - "x": 222, - "y": 191, - "w": 23, - "h": 24 - } - }, - { - "filename": "778s-busted", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 12, - "w": 21, - "h": 16 - }, - "frame": { - "x": 220, + "x": 233, "y": 215, - "w": 21, - "h": 16 + "w": 22, + "h": 24 } }, { - "filename": "756s", + "filename": "738s", "rotated": false, "trimmed": true, "sourceSize": { @@ -3862,19 +3715,19 @@ }, "spriteSourceSize": { "x": 9, - "y": 5, + "y": 6, "w": 22, - "h": 24 + "h": 21 }, "frame": { - "x": 222, - "y": 231, + "x": 233, + "y": 239, "w": 22, - "h": 24 + "h": 21 } }, { - "filename": "802", + "filename": "769s", "rotated": false, "trimmed": true, "sourceSize": { @@ -3882,16 +3735,37 @@ "h": 30 }, "spriteSourceSize": { - "x": 13, - "y": 4, - "w": 22, - "h": 24 + "x": 8, + "y": 6, + "w": 23, + "h": 22 }, "frame": { - "x": 222, - "y": 255, - "w": 22, - "h": 24 + "x": 231, + "y": 260, + "w": 23, + "h": 22 + } + }, + { + "filename": "767s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 11, + "w": 24, + "h": 14 + }, + "frame": { + "x": 205, + "y": 283, + "w": 24, + "h": 14 } }, { @@ -3909,8 +3783,71 @@ "h": 24 }, "frame": { - "x": 223, - "y": 279, + "x": 195, + "y": 297, + "w": 21, + "h": 24 + } + }, + { + "filename": "735s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 4, + "w": 20, + "h": 24 + }, + "frame": { + "x": 216, + "y": 297, + "w": 20, + "h": 24 + } + }, + { + "filename": "752", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 8, + "w": 23, + "h": 18 + }, + "frame": { + "x": 259, + "y": 154, + "w": 23, + "h": 18 + } + }, + { + "filename": "763s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 4, + "w": 21, + "h": 24 + }, + "frame": { + "x": 256, + "y": 172, "w": 21, "h": 24 } @@ -3930,134 +3867,8 @@ "h": 20 }, "frame": { - "x": 224, - "y": 303, - "w": 22, - "h": 20 - } - }, - { - "filename": "746", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 11, - "w": 18, - "h": 13 - }, - "frame": { - "x": 245, - "y": 151, - "w": 18, - "h": 13 - } - }, - { - "filename": "760s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 4, - "w": 17, - "h": 24 - }, - "frame": { - "x": 248, - "y": 164, - "w": 17, - "h": 24 - } - }, - { - "filename": "2051s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 23, - "h": 24 - }, - "frame": { - "x": 265, - "y": 152, - "w": 23, - "h": 24 - } - }, - { - "filename": "738s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 6, - "w": 22, - "h": 21 - }, - "frame": { - "x": 265, - "y": 176, - "w": 22, - "h": 21 - } - }, - { - "filename": "743", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 5, - "w": 20, - "h": 22 - }, - "frame": { - "x": 245, - "y": 191, - "w": 20, - "h": 22 - } - }, - { - "filename": "747s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 7, - "w": 22, - "h": 20 - }, - "frame": { - "x": 265, - "y": 197, + "x": 256, + "y": 196, "w": 22, "h": 20 } @@ -4077,8 +3888,8 @@ "h": 23 }, "frame": { - "x": 288, - "y": 164, + "x": 255, + "y": 216, "w": 22, "h": 23 } @@ -4098,77 +3909,14 @@ "h": 23 }, "frame": { - "x": 310, - "y": 164, + "x": 255, + "y": 239, "w": 22, "h": 23 } }, { - "filename": "802s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 4, - "w": 22, - "h": 24 - }, - "frame": { - "x": 287, - "y": 187, - "w": 22, - "h": 24 - } - }, - { - "filename": "807", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 4, - "w": 22, - "h": 24 - }, - "frame": { - "x": 309, - "y": 187, - "w": 22, - "h": 24 - } - }, - { - "filename": "807s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 4, - "w": 22, - "h": 24 - }, - "frame": { - "x": 332, - "y": 164, - "w": 22, - "h": 24 - } - }, - { - "filename": "749", + "filename": "789", "rotated": false, "trimmed": true, "sourceSize": { @@ -4177,19 +3925,61 @@ }, "spriteSourceSize": { "x": 10, + "y": 6, + "w": 23, + "h": 20 + }, + "frame": { + "x": 254, + "y": 262, + "w": 23, + "h": 20 + } + }, + { + "filename": "752s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 8, + "w": 23, + "h": 18 + }, + "frame": { + "x": 282, + "y": 156, + "w": 23, + "h": 18 + } + }, + { + "filename": "743", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, "y": 5, - "w": 21, - "h": 23 + "w": 20, + "h": 22 }, "frame": { - "x": 331, - "y": 188, - "w": 21, - "h": 23 + "x": 277, + "y": 174, + "w": 20, + "h": 22 } }, { - "filename": "2037", + "filename": "732s", "rotated": false, "trimmed": true, "sourceSize": { @@ -4198,61 +3988,19 @@ }, "spriteSourceSize": { "x": 10, - "y": 7, - "w": 22, - "h": 21 + "y": 6, + "w": 19, + "h": 22 }, "frame": { - "x": 354, - "y": 167, - "w": 22, - "h": 21 + "x": 278, + "y": 196, + "w": 19, + "h": 22 } }, { - "filename": "749s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 5, - "w": 21, - "h": 23 - }, - "frame": { - "x": 352, - "y": 188, - "w": 21, - "h": 23 - } - }, - { - "filename": "2037s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 7, - "w": 22, - "h": 21 - }, - "frame": { - "x": 376, - "y": 167, - "w": 22, - "h": 21 - } - }, - { - "filename": "763s", + "filename": "786", "rotated": false, "trimmed": true, "sourceSize": { @@ -4261,15 +4009,57 @@ }, "spriteSourceSize": { "x": 11, - "y": 4, - "w": 21, - "h": 24 + "y": 3, + "w": 20, + "h": 25 }, "frame": { - "x": 373, - "y": 188, - "w": 21, - "h": 24 + "x": 277, + "y": 218, + "w": 20, + "h": 25 + } + }, + { + "filename": "786s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 3, + "w": 20, + "h": 25 + }, + "frame": { + "x": 277, + "y": 243, + "w": 20, + "h": 25 + } + }, + { + "filename": "739", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 6, + "w": 20, + "h": 21 + }, + "frame": { + "x": 277, + "y": 268, + "w": 20, + "h": 21 } }, { @@ -4287,54 +4077,12 @@ "h": 24 }, "frame": { - "x": 394, - "y": 188, + "x": 297, + "y": 174, "w": 13, "h": 24 } }, - { - "filename": "790", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 7, - "w": 21, - "h": 19 - }, - "frame": { - "x": 398, - "y": 169, - "w": 21, - "h": 19 - } - }, - { - "filename": "2050s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 10, - "w": 15, - "h": 18 - }, - "frame": { - "x": 419, - "y": 169, - "w": 15, - "h": 18 - } - }, { "filename": "755s", "rotated": false, @@ -4350,8 +4098,8 @@ "h": 24 }, "frame": { - "x": 407, - "y": 188, + "x": 297, + "y": 198, "w": 13, "h": 24 } @@ -4371,180 +4119,12 @@ "h": 24 }, "frame": { - "x": 420, - "y": 187, + "x": 297, + "y": 222, "w": 21, "h": 24 } }, - { - "filename": "761s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 8, - "w": 16, - "h": 19 - }, - "frame": { - "x": 441, - "y": 179, - "w": 16, - "h": 19 - } - }, - { - "filename": "775", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 6, - "w": 21, - "h": 20 - }, - "frame": { - "x": 457, - "y": 188, - "w": 21, - "h": 20 - } - }, - { - "filename": "775s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 6, - "w": 21, - "h": 20 - }, - "frame": { - "x": 478, - "y": 192, - "w": 21, - "h": 20 - } - }, - { - "filename": "751", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 8, - "w": 14, - "h": 20 - }, - "frame": { - "x": 441, - "y": 198, - "w": 14, - "h": 20 - } - }, - { - "filename": "779", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 7, - "w": 21, - "h": 20 - }, - "frame": { - "x": 420, - "y": 211, - "w": 21, - "h": 20 - } - }, - { - "filename": "779s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 7, - "w": 21, - "h": 20 - }, - "frame": { - "x": 455, - "y": 208, - "w": 21, - "h": 20 - } - }, - { - "filename": "751s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 8, - "w": 14, - "h": 20 - }, - "frame": { - "x": 441, - "y": 218, - "w": 14, - "h": 20 - } - }, - { - "filename": "790s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 7, - "w": 21, - "h": 19 - }, - "frame": { - "x": 476, - "y": 212, - "w": 21, - "h": 19 - } - }, { "filename": "793s", "rotated": false, @@ -4560,14 +4140,161 @@ "h": 24 }, "frame": { - "x": 455, - "y": 228, + "x": 297, + "y": 246, "w": 21, "h": 24 } }, { - "filename": "2019", + "filename": "747s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 7, + "w": 22, + "h": 20 + }, + "frame": { + "x": 297, + "y": 270, + "w": 22, + "h": 20 + } + }, + { + "filename": "2074", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 13, + "w": 24, + "h": 15 + }, + "frame": { + "x": 231, + "y": 282, + "w": 24, + "h": 15 + } + }, + { + "filename": "2037", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 7, + "w": 22, + "h": 21 + }, + "frame": { + "x": 255, + "y": 282, + "w": 22, + "h": 21 + } + }, + { + "filename": "744", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 6, + "w": 19, + "h": 22 + }, + "frame": { + "x": 236, + "y": 297, + "w": 19, + "h": 22 + } + }, + { + "filename": "743s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 5, + "w": 20, + "h": 22 + }, + "frame": { + "x": 255, + "y": 303, + "w": 20, + "h": 22 + } + }, + { + "filename": "754", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 6, + "w": 20, + "h": 22 + }, + "frame": { + "x": 275, + "y": 303, + "w": 20, + "h": 22 + } + }, + { + "filename": "746s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 18, + "h": 13 + }, + "frame": { + "x": 277, + "y": 290, + "w": 18, + "h": 13 + } + }, + { + "filename": "749", "rotated": false, "trimmed": true, "sourceSize": { @@ -4578,17 +4305,101 @@ "x": 10, "y": 5, "w": 21, - "h": 21 + "h": 23 }, "frame": { - "x": 476, - "y": 231, + "x": 295, + "y": 290, "w": 21, - "h": 21 + "h": 23 } }, { - "filename": "2019s", + "filename": "722", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 8, + "w": 17, + "h": 18 + }, + "frame": { + "x": 305, + "y": 156, + "w": 17, + "h": 18 + } + }, + { + "filename": "741-sensu", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 5, + "w": 17, + "h": 23 + }, + "frame": { + "x": 310, + "y": 174, + "w": 17, + "h": 23 + } + }, + { + "filename": "741s-sensu", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 5, + "w": 17, + "h": 23 + }, + "frame": { + "x": 310, + "y": 197, + "w": 17, + "h": 23 + } + }, + { + "filename": "737", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 8, + "w": 18, + "h": 19 + }, + "frame": { + "x": 322, + "y": 155, + "w": 18, + "h": 19 + } + }, + { + "filename": "749s", "rotated": false, "trimmed": true, "sourceSize": { @@ -4599,55 +4410,13 @@ "x": 10, "y": 5, "w": 21, - "h": 21 + "h": 23 }, "frame": { - "x": 287, - "y": 211, + "x": 327, + "y": 174, "w": 21, - "h": 21 - } - }, - { - "filename": "2052", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 7, - "w": 21, - "h": 21 - }, - "frame": { - "x": 308, - "y": 211, - "w": 21, - "h": 21 - } - }, - { - "filename": "2052s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 7, - "w": 21, - "h": 21 - }, - "frame": { - "x": 329, - "y": 211, - "w": 21, - "h": 21 + "h": 23 } }, { @@ -4665,8 +4434,8 @@ "h": 23 }, "frame": { - "x": 350, - "y": 211, + "x": 327, + "y": 197, "w": 21, "h": 23 } @@ -4686,75 +4455,12 @@ "h": 23 }, "frame": { - "x": 371, - "y": 212, + "x": 318, + "y": 220, "w": 21, "h": 23 } }, - { - "filename": "743s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 5, - "w": 20, - "h": 22 - }, - "frame": { - "x": 392, - "y": 212, - "w": 20, - "h": 22 - } - }, - { - "filename": "739", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 6, - "w": 20, - "h": 21 - }, - "frame": { - "x": 245, - "y": 213, - "w": 20, - "h": 21 - } - }, - { - "filename": "754", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 6, - "w": 20, - "h": 22 - }, - "frame": { - "x": 244, - "y": 234, - "w": 20, - "h": 22 - } - }, { "filename": "754s", "rotated": false, @@ -4770,12 +4476,33 @@ "h": 22 }, "frame": { - "x": 244, - "y": 256, + "x": 318, + "y": 243, "w": 20, "h": 22 } }, + { + "filename": "728", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 8, + "w": 17, + "h": 20 + }, + "frame": { + "x": 340, + "y": 154, + "w": 17, + "h": 20 + } + }, { "filename": "739s", "rotated": false, @@ -4791,14 +4518,14 @@ "h": 21 }, "frame": { - "x": 244, - "y": 278, + "x": 357, + "y": 153, "w": 20, "h": 21 } }, { - "filename": "2027s", + "filename": "789s", "rotated": false, "trimmed": true, "sourceSize": { @@ -4807,19 +4534,19 @@ }, "spriteSourceSize": { "x": 10, - "y": 10, - "w": 21, - "h": 18 + "y": 6, + "w": 23, + "h": 20 }, "frame": { - "x": 265, - "y": 217, - "w": 21, - "h": 18 + "x": 348, + "y": 174, + "w": 23, + "h": 20 } }, { - "filename": "744", + "filename": "2037s", "rotated": false, "trimmed": true, "sourceSize": { @@ -4827,16 +4554,16 @@ "h": 30 }, "spriteSourceSize": { - "x": 11, - "y": 6, - "w": 19, - "h": 22 + "x": 10, + "y": 7, + "w": 22, + "h": 21 }, "frame": { - "x": 264, - "y": 235, - "w": 19, - "h": 22 + "x": 348, + "y": 194, + "w": 22, + "h": 21 } }, { @@ -4854,33 +4581,12 @@ "h": 22 }, "frame": { - "x": 264, - "y": 257, + "x": 377, + "y": 150, "w": 19, "h": 22 } }, - { - "filename": "741-pompom", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 7, - "w": 20, - "h": 20 - }, - "frame": { - "x": 264, - "y": 279, - "w": 20, - "h": 20 - } - }, { "filename": "762", "rotated": false, @@ -4896,8 +4602,8 @@ "h": 23 }, "frame": { - "x": 246, - "y": 299, + "x": 319, + "y": 265, "w": 18, "h": 23 } @@ -4917,54 +4623,12 @@ "h": 23 }, "frame": { - "x": 264, - "y": 299, + "x": 339, + "y": 220, "w": 18, "h": 23 } }, - { - "filename": "741-sensu", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 5, - "w": 17, - "h": 23 - }, - "frame": { - "x": 283, - "y": 235, - "w": 17, - "h": 23 - } - }, - { - "filename": "728s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 8, - "w": 17, - "h": 20 - }, - "frame": { - "x": 283, - "y": 258, - "w": 17, - "h": 20 - } - }, { "filename": "741-pau", "rotated": false, @@ -4980,8 +4644,8 @@ "h": 22 }, "frame": { - "x": 300, - "y": 232, + "x": 338, + "y": 243, "w": 18, "h": 22 } @@ -5001,35 +4665,14 @@ "h": 22 }, "frame": { - "x": 318, - "y": 232, + "x": 337, + "y": 265, "w": 18, "h": 22 } }, { - "filename": "741s-pompom", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 7, - "w": 20, - "h": 20 - }, - "frame": { - "x": 300, - "y": 254, - "w": 20, - "h": 20 - } - }, - { - "filename": "723s", + "filename": "723", "rotated": false, "trimmed": true, "sourceSize": { @@ -5043,14 +4686,14 @@ "h": 22 }, "frame": { - "x": 284, - "y": 278, + "x": 357, + "y": 215, "w": 17, "h": 22 } }, { - "filename": "741s-sensu", + "filename": "2074s", "rotated": false, "trimmed": true, "sourceSize": { @@ -5058,20 +4701,20 @@ "h": 30 }, "spriteSourceSize": { - "x": 13, - "y": 5, - "w": 17, - "h": 23 + "x": 8, + "y": 13, + "w": 24, + "h": 15 }, "frame": { - "x": 282, - "y": 300, - "w": 17, - "h": 23 + "x": 397, + "y": 149, + "w": 24, + "h": 15 } }, { - "filename": "731", + "filename": "741-pompom", "rotated": false, "trimmed": true, "sourceSize": { @@ -5079,16 +4722,37 @@ "h": 30 }, "spriteSourceSize": { - "x": 12, + "x": 10, + "y": 7, + "w": 20, + "h": 20 + }, + "frame": { + "x": 421, + "y": 151, + "w": 20, + "h": 20 + } + }, + { + "filename": "775", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, "y": 6, - "w": 17, - "h": 22 + "w": 21, + "h": 20 }, "frame": { - "x": 320, - "y": 254, - "w": 17, - "h": 22 + "x": 396, + "y": 164, + "w": 21, + "h": 20 } }, { @@ -5106,14 +4770,119 @@ "h": 20 }, "frame": { - "x": 301, - "y": 274, + "x": 377, + "y": 172, "w": 19, "h": 20 } }, { - "filename": "722s", + "filename": "775s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 6, + "w": 21, + "h": 20 + }, + "frame": { + "x": 417, + "y": 171, + "w": 21, + "h": 20 + } + }, + { + "filename": "778-busted", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 12, + "w": 21, + "h": 16 + }, + "frame": { + "x": 396, + "y": 184, + "w": 21, + "h": 16 + } + }, + { + "filename": "778s-busted", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 12, + "w": 21, + "h": 16 + }, + "frame": { + "x": 417, + "y": 191, + "w": 21, + "h": 16 + } + }, + { + "filename": "779", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 7, + "w": 21, + "h": 20 + }, + "frame": { + "x": 441, + "y": 166, + "w": 21, + "h": 20 + } + }, + { + "filename": "2019", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 5, + "w": 21, + "h": 21 + }, + "frame": { + "x": 438, + "y": 186, + "w": 21, + "h": 21 + } + }, + { + "filename": "737s", "rotated": false, "trimmed": true, "sourceSize": { @@ -5123,18 +4892,18 @@ "spriteSourceSize": { "x": 12, "y": 8, - "w": 17, - "h": 18 + "w": 18, + "h": 19 }, "frame": { - "x": 320, - "y": 276, - "w": 17, - "h": 18 + "x": 462, + "y": 172, + "w": 18, + "h": 19 } }, { - "filename": "753", + "filename": "779s", "rotated": false, "trimmed": true, "sourceSize": { @@ -5142,20 +4911,125 @@ "h": 30 }, "spriteSourceSize": { - "x": 14, - "y": 8, - "w": 14, + "x": 10, + "y": 7, + "w": 21, + "h": 20 + }, + "frame": { + "x": 480, + "y": 174, + "w": 21, + "h": 20 + } + }, + { + "filename": "790", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 7, + "w": 21, "h": 19 }, "frame": { - "x": 336, - "y": 232, - "w": 14, + "x": 459, + "y": 191, + "w": 21, "h": 19 } }, { - "filename": "2088", + "filename": "790s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 7, + "w": 21, + "h": 19 + }, + "frame": { + "x": 480, + "y": 194, + "w": 21, + "h": 19 + } + }, + { + "filename": "2019s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 5, + "w": 21, + "h": 21 + }, + "frame": { + "x": 370, + "y": 194, + "w": 21, + "h": 21 + } + }, + { + "filename": "723s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 5, + "w": 17, + "h": 22 + }, + "frame": { + "x": 374, + "y": 215, + "w": 17, + "h": 22 + } + }, + { + "filename": "2052", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 7, + "w": 21, + "h": 21 + }, + "frame": { + "x": 391, + "y": 200, + "w": 21, + "h": 21 + } + }, + { + "filename": "2027", "rotated": false, "trimmed": true, "sourceSize": { @@ -5169,14 +5043,56 @@ "h": 18 }, "frame": { - "x": 350, - "y": 234, + "x": 391, + "y": 221, "w": 21, "h": 18 } }, { - "filename": "2088s", + "filename": "2052s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 7, + "w": 21, + "h": 21 + }, + "frame": { + "x": 412, + "y": 207, + "w": 21, + "h": 21 + } + }, + { + "filename": "741s-pompom", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 7, + "w": 20, + "h": 20 + }, + "frame": { + "x": 433, + "y": 207, + "w": 20, + "h": 20 + } + }, + { + "filename": "2027s", "rotated": false, "trimmed": true, "sourceSize": { @@ -5190,8 +5106,8 @@ "h": 18 }, "frame": { - "x": 371, - "y": 235, + "x": 412, + "y": 228, "w": 21, "h": 18 } @@ -5211,12 +5127,75 @@ "h": 20 }, "frame": { - "x": 392, - "y": 234, + "x": 433, + "y": 227, "w": 19, "h": 20 } }, + { + "filename": "2088", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 10, + "w": 21, + "h": 18 + }, + "frame": { + "x": 453, + "y": 210, + "w": 21, + "h": 18 + } + }, + { + "filename": "2088s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 10, + "w": 21, + "h": 18 + }, + "frame": { + "x": 452, + "y": 228, + "w": 21, + "h": 18 + } + }, + { + "filename": "757", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 9, + "w": 19, + "h": 18 + }, + "frame": { + "x": 474, + "y": 213, + "w": 19, + "h": 18 + } + }, { "filename": "757s", "rotated": false, @@ -5232,12 +5211,54 @@ "h": 18 }, "frame": { - "x": 301, - "y": 294, + "x": 473, + "y": 231, "w": 19, "h": 18 } }, + { + "filename": "731", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 6, + "w": 17, + "h": 22 + }, + "frame": { + "x": 316, + "y": 290, + "w": 17, + "h": 22 + } + }, + { + "filename": "771", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 11, + "w": 18, + "h": 13 + }, + "frame": { + "x": 316, + "y": 312, + "w": 18, + "h": 13 + } + }, { "filename": "731s", "rotated": false, @@ -5253,12 +5274,33 @@ "h": 22 }, "frame": { - "x": 320, - "y": 294, + "x": 333, + "y": 288, "w": 17, "h": 22 } }, + { + "filename": "736", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 12, + "w": 17, + "h": 13 + }, + "frame": { + "x": 334, + "y": 310, + "w": 17, + "h": 13 + } + }, { "filename": "778-disguised", "rotated": false, @@ -5274,8 +5316,8 @@ "h": 22 }, "frame": { - "x": 337, - "y": 252, + "x": 350, + "y": 287, "w": 17, "h": 22 } @@ -5295,54 +5337,12 @@ "h": 22 }, "frame": { - "x": 354, - "y": 252, + "x": 355, + "y": 265, "w": 17, "h": 22 } }, - { - "filename": "737", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 8, - "w": 18, - "h": 19 - }, - "frame": { - "x": 337, - "y": 274, - "w": 18, - "h": 19 - } - }, - { - "filename": "737s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 8, - "w": 18, - "h": 19 - }, - "frame": { - "x": 371, - "y": 253, - "w": 18, - "h": 19 - } - }, { "filename": "741", "rotated": false, @@ -5358,12 +5358,96 @@ "h": 19 }, "frame": { - "x": 337, - "y": 293, + "x": 356, + "y": 246, "w": 17, "h": 19 } }, + { + "filename": "728s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 8, + "w": 17, + "h": 20 + }, + "frame": { + "x": 373, + "y": 237, + "w": 17, + "h": 20 + } + }, + { + "filename": "722s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 8, + "w": 17, + "h": 18 + }, + "frame": { + "x": 390, + "y": 239, + "w": 17, + "h": 18 + } + }, + { + "filename": "736s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 12, + "w": 17, + "h": 13 + }, + "frame": { + "x": 351, + "y": 309, + "w": 17, + "h": 13 + } + }, + { + "filename": "771s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 11, + "w": 18, + "h": 13 + }, + "frame": { + "x": 373, + "y": 257, + "w": 18, + "h": 13 + } + }, { "filename": "741s", "rotated": false, @@ -5379,8 +5463,8 @@ "h": 19 }, "frame": { - "x": 355, - "y": 274, + "x": 372, + "y": 270, "w": 17, "h": 19 } @@ -5400,12 +5484,33 @@ "h": 19 }, "frame": { - "x": 354, - "y": 293, + "x": 367, + "y": 289, "w": 17, "h": 19 } }, + { + "filename": "808", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 17, + "h": 17 + }, + "frame": { + "x": 368, + "y": 308, + "w": 17, + "h": 17 + } + }, { "filename": "759s", "rotated": false, @@ -5421,96 +5526,12 @@ "h": 19 }, "frame": { - "x": 372, - "y": 272, + "x": 391, + "y": 257, "w": 17, "h": 19 } }, - { - "filename": "777", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 8, - "w": 17, - "h": 19 - }, - "frame": { - "x": 389, - "y": 254, - "w": 17, - "h": 19 - } - }, - { - "filename": "774", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 8, - "w": 17, - "h": 18 - }, - "frame": { - "x": 389, - "y": 273, - "w": 17, - "h": 18 - } - }, - { - "filename": "774s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 8, - "w": 17, - "h": 18 - }, - "frame": { - "x": 389, - "y": 273, - "w": 17, - "h": 18 - } - }, - { - "filename": "753s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 14, - "y": 8, - "w": 14, - "h": 19 - }, - "frame": { - "x": 406, - "y": 254, - "w": 14, - "h": 19 - } - }, { "filename": "774-blue", "rotated": false, @@ -5526,35 +5547,14 @@ "h": 18 }, "frame": { - "x": 406, - "y": 273, + "x": 389, + "y": 276, "w": 17, "h": 18 } }, { - "filename": "746s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 11, - "w": 18, - "h": 13 - }, - "frame": { - "x": 423, - "y": 231, - "w": 18, - "h": 13 - } - }, - { - "filename": "777s", + "filename": "777", "rotated": false, "trimmed": true, "sourceSize": { @@ -5568,54 +5568,12 @@ "h": 19 }, "frame": { - "x": 420, - "y": 244, + "x": 408, + "y": 246, "w": 17, "h": 19 } }, - { - "filename": "771", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 11, - "w": 18, - "h": 13 - }, - "frame": { - "x": 437, - "y": 244, - "w": 18, - "h": 13 - } - }, - { - "filename": "771s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 11, - "w": 18, - "h": 13 - }, - "frame": { - "x": 437, - "y": 257, - "w": 18, - "h": 13 - } - }, { "filename": "774-green", "rotated": false, @@ -5631,12 +5589,33 @@ "h": 18 }, "frame": { - "x": 455, - "y": 252, + "x": 408, + "y": 265, "w": 17, "h": 18 } }, + { + "filename": "777s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 8, + "w": 17, + "h": 19 + }, + "frame": { + "x": 425, + "y": 247, + "w": 17, + "h": 19 + } + }, { "filename": "774-indigo", "rotated": false, @@ -5652,14 +5631,14 @@ "h": 18 }, "frame": { - "x": 472, - "y": 252, + "x": 425, + "y": 266, "w": 17, "h": 18 } }, { - "filename": "736", + "filename": "751", "rotated": false, "trimmed": true, "sourceSize": { @@ -5667,37 +5646,16 @@ "h": 30 }, "spriteSourceSize": { - "x": 12, - "y": 12, - "w": 17, - "h": 13 + "x": 13, + "y": 8, + "w": 14, + "h": 20 }, "frame": { - "x": 372, - "y": 291, - "w": 17, - "h": 13 - } - }, - { - "filename": "736s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 12, - "w": 17, - "h": 13 - }, - "frame": { - "x": 389, - "y": 291, - "w": 17, - "h": 13 + "x": 442, + "y": 247, + "w": 14, + "h": 20 } }, { @@ -5715,8 +5673,8 @@ "h": 18 }, "frame": { - "x": 406, - "y": 291, + "x": 456, + "y": 246, "w": 17, "h": 18 } @@ -5736,12 +5694,33 @@ "h": 18 }, "frame": { - "x": 371, - "y": 304, + "x": 473, + "y": 249, "w": 17, "h": 18 } }, + { + "filename": "751s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 8, + "w": 14, + "h": 20 + }, + "frame": { + "x": 442, + "y": 267, + "w": 14, + "h": 20 + } + }, { "filename": "774-violet", "rotated": false, @@ -5757,8 +5736,8 @@ "h": 18 }, "frame": { - "x": 388, - "y": 304, + "x": 456, + "y": 264, "w": 17, "h": 18 } @@ -5778,8 +5757,29 @@ "h": 18 }, "frame": { - "x": 423, - "y": 270, + "x": 473, + "y": 267, + "w": 17, + "h": 18 + } + }, + { + "filename": "774", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 8, + "w": 17, + "h": 18 + }, + "frame": { + "x": 406, + "y": 283, "w": 17, "h": 18 } @@ -5800,32 +5800,11 @@ }, "frame": { "x": 423, - "y": 288, + "y": 284, "w": 17, "h": 18 } }, - { - "filename": "808", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 11, - "w": 17, - "h": 17 - }, - "frame": { - "x": 423, - "y": 306, - "w": 17, - "h": 17 - } - }, { "filename": "774s-green", "rotated": false, @@ -5842,11 +5821,32 @@ }, "frame": { "x": 440, - "y": 270, + "y": 287, "w": 17, "h": 18 } }, + { + "filename": "753", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 14, + "y": 8, + "w": 14, + "h": 19 + }, + "frame": { + "x": 457, + "y": 282, + "w": 14, + "h": 19 + } + }, { "filename": "774s-indigo", "rotated": false, @@ -5862,14 +5862,14 @@ "h": 18 }, "frame": { - "x": 440, - "y": 288, + "x": 471, + "y": 285, "w": 17, "h": 18 } }, { - "filename": "808s", + "filename": "753s", "rotated": false, "trimmed": true, "sourceSize": { @@ -5877,16 +5877,16 @@ "h": 30 }, "spriteSourceSize": { - "x": 12, - "y": 11, - "w": 17, - "h": 17 + "x": 14, + "y": 8, + "w": 14, + "h": 19 }, "frame": { - "x": 440, - "y": 306, - "w": 17, - "h": 17 + "x": 488, + "y": 285, + "w": 14, + "h": 19 } }, { @@ -5904,8 +5904,8 @@ "h": 18 }, "frame": { - "x": 457, - "y": 270, + "x": 385, + "y": 294, "w": 17, "h": 18 } @@ -5925,8 +5925,8 @@ "h": 18 }, "frame": { - "x": 457, - "y": 288, + "x": 402, + "y": 301, "w": 17, "h": 18 } @@ -5946,8 +5946,8 @@ "h": 18 }, "frame": { - "x": 474, - "y": 270, + "x": 419, + "y": 302, "w": 17, "h": 18 } @@ -5967,11 +5967,53 @@ "h": 18 }, "frame": { - "x": 474, - "y": 288, + "x": 436, + "y": 305, "w": 17, "h": 18 } + }, + { + "filename": "774s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 8, + "w": 17, + "h": 18 + }, + "frame": { + "x": 453, + "y": 305, + "w": 17, + "h": 18 + } + }, + { + "filename": "808s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 17, + "h": 17 + }, + "frame": { + "x": 470, + "y": 303, + "w": 17, + "h": 17 + } } ] } @@ -5979,6 +6021,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:a4de8d1c4f7d4f58c929b8b5479e03f1:3c8ac308e19a7f9420a4df8a78188490:2e7c5873ead8fd8fce82a0b3fcc86b42$" + "smartupdate": "$TexturePacker:SmartUpdate:5861cb99c3db0943f1ccef3b0e1b4683:26656a692718930d92be5b6aba391ced:2e7c5873ead8fd8fce82a0b3fcc86b42$" } } diff --git a/public/images/pokemon_icons_7.png b/public/images/pokemon_icons_7.png index c9a396ed5c6..5e6421360fd 100644 Binary files a/public/images/pokemon_icons_7.png and b/public/images/pokemon_icons_7.png differ diff --git a/public/images/trainer/aether_grunt_f.json b/public/images/trainer/aether_grunt_f.json index c43bdae9b2e..26ae177bd21 100644 --- a/public/images/trainer/aether_grunt_f.json +++ b/public/images/trainer/aether_grunt_f.json @@ -4,8 +4,8 @@ "image": "aether_grunt_f.png", "format": "RGBA8888", "size": { - "w": 69, - "h": 69 + "w": 70, + "h": 70 }, "scale": 1, "frames": [ @@ -14,20 +14,20 @@ "rotated": false, "trimmed": false, "sourceSize": { - "w": 80, - "h": 80 + "w": 39, + "h": 70 }, "spriteSourceSize": { - "x": 23, - "y": 10, - "w": 35, - "h": 69 + "x": 0, + "y": 0, + "w": 39, + "h": 70 }, "frame": { "x": 0, "y": 0, - "w": 35, - "h": 69 + "w": 39, + "h": 70 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:0c9e77856d3b434e719021572bcb93de:f9c45dc5d67009b134dd1bbc5593f6ec:a694f8828aff21c718e5161e2fd63ade$" + "smartupdate": "$TexturePacker:SmartUpdate:0a678d2035c82d3741f2de29e01d42d3:374042fde99a4ff05c5e90cedbc5bd1f:a694f8828aff21c718e5161e2fd63ade$" } } diff --git a/public/images/trainer/aether_grunt_f.png b/public/images/trainer/aether_grunt_f.png index b43c5e71a51..a5088c9e1de 100644 Binary files a/public/images/trainer/aether_grunt_f.png and b/public/images/trainer/aether_grunt_f.png differ diff --git a/public/images/trainer/aether_grunt_m.json b/public/images/trainer/aether_grunt_m.json index eba00096f8d..74195b97dde 100644 --- a/public/images/trainer/aether_grunt_m.json +++ b/public/images/trainer/aether_grunt_m.json @@ -4,8 +4,8 @@ "image": "aether_grunt_m.png", "format": "RGBA8888", "size": { - "w": 65, - "h": 65 + "w": 69, + "h": 69 }, "scale": 1, "frames": [ @@ -14,20 +14,20 @@ "rotated": false, "trimmed": false, "sourceSize": { - "w": 80, - "h": 80 + "w": 45, + "h": 69 }, "spriteSourceSize": { - "x": 16, - "y": 14, - "w": 47, - "h": 65 + "x": 0, + "y": 0, + "w": 45, + "h": 69 }, "frame": { "x": 0, "y": 0, - "w": 47, - "h": 65 + "w": 45, + "h": 69 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:963887cf29549ad3c123b8055cb4d701:68004c4a6e04c93bd21c26a6f8921f0c:d2241fc11d0fc31b26ecbedae6da74f4$" + "smartupdate": "$TexturePacker:SmartUpdate:f7ad29bea8c4a179c08958890cadb04b:741fc1b2e43d2da720c249c6f81910bc:d2241fc11d0fc31b26ecbedae6da74f4$" } } diff --git a/public/images/trainer/aether_grunt_m.png b/public/images/trainer/aether_grunt_m.png index f4df26ef007..1b1e092a340 100644 Binary files a/public/images/trainer/aether_grunt_m.png and b/public/images/trainer/aether_grunt_m.png differ diff --git a/public/images/trainer/aqua_grunt_f.json b/public/images/trainer/aqua_grunt_f.json index 20515f30e5e..23f118927f1 100644 --- a/public/images/trainer/aqua_grunt_f.json +++ b/public/images/trainer/aqua_grunt_f.json @@ -4,8 +4,8 @@ "image": "aqua_grunt_f.png", "format": "RGBA8888", "size": { - "w": 71, - "h": 71 + "w": 73, + "h": 73 }, "scale": 1, "frames": [ @@ -14,20 +14,20 @@ "rotated": false, "trimmed": false, "sourceSize": { - "w": 80, - "h": 80 + "w": 34, + "h": 73 }, "spriteSourceSize": { - "x": 22, - "y": 8, - "w": 36, - "h": 71 + "x": 0, + "y": 0, + "w": 34, + "h": 73 }, "frame": { "x": 0, "y": 0, - "w": 36, - "h": 71 + "w": 34, + "h": 73 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:6db25cb5753163d19bca8e2db45849ae:7d8f51509862bfdf8a78bf42dd0005cd:af0aa9494be37941522487032b556989$" + "smartupdate": "$TexturePacker:SmartUpdate:99d76e35df4b09fc9d312218d8fa8cc7:8ad846929ea03b5fb70fd16144e5e2fa:af0aa9494be37941522487032b556989$" } } diff --git a/public/images/trainer/aqua_grunt_f.png b/public/images/trainer/aqua_grunt_f.png index 132d239c0b8..4db237bf9e7 100644 Binary files a/public/images/trainer/aqua_grunt_f.png and b/public/images/trainer/aqua_grunt_f.png differ diff --git a/public/images/trainer/aqua_grunt_m.json b/public/images/trainer/aqua_grunt_m.json index 93408cc40c8..3a120f7d20c 100644 --- a/public/images/trainer/aqua_grunt_m.json +++ b/public/images/trainer/aqua_grunt_m.json @@ -4,8 +4,8 @@ "image": "aqua_grunt_m.png", "format": "RGBA8888", "size": { - "w": 73, - "h": 73 + "w": 74, + "h": 74 }, "scale": 1, "frames": [ @@ -14,20 +14,20 @@ "rotated": false, "trimmed": false, "sourceSize": { - "w": 80, - "h": 80 + "w": 38, + "h": 74 }, "spriteSourceSize": { - "x": 17, - "y": 6, - "w": 46, - "h": 73 + "x": 0, + "y": 0, + "w": 38, + "h": 74 }, "frame": { "x": 0, "y": 0, - "w": 46, - "h": 73 + "w": 38, + "h": 74 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:efd07ff3ed1e610150a4b8ca18974343:d9b85b9eb11182e9e4669e2bd8b08694:72b7b50231708a9486d5f315824e4df1$" + "smartupdate": "$TexturePacker:SmartUpdate:ea2cdca90584089079af92307948ecdc:331e1f5314abbfcf58331ab0b9fd1c40:72b7b50231708a9486d5f315824e4df1$" } } diff --git a/public/images/trainer/aqua_grunt_m.png b/public/images/trainer/aqua_grunt_m.png index 87dbfd566a1..4fe230ca119 100644 Binary files a/public/images/trainer/aqua_grunt_m.png and b/public/images/trainer/aqua_grunt_m.png differ diff --git a/public/images/trainer/archie.json b/public/images/trainer/archie.json index 63837d40847..3718bcffd0c 100644 --- a/public/images/trainer/archie.json +++ b/public/images/trainer/archie.json @@ -4,8 +4,8 @@ "image": "archie.png", "format": "RGBA8888", "size": { - "w": 80, - "h": 80 + "w": 79, + "h": 79 }, "scale": 1, "frames": [ @@ -14,20 +14,20 @@ "rotated": false, "trimmed": false, "sourceSize": { - "w": 80, - "h": 80 + "w": 58, + "h": 79 }, "spriteSourceSize": { - "x": 21, + "x": 0, "y": 0, - "w": 42, - "h": 80 + "w": 58, + "h": 79 }, "frame": { "x": 0, "y": 0, - "w": 42, - "h": 80 + "w": 58, + "h": 79 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:bfa7fdd7b6ac9be68dc9dc562fb8339f:06f87a279450b21b19294ba956b69c26:4b7980be4e3ac1d20c9eaf970913ec63$" + "smartupdate": "$TexturePacker:SmartUpdate:1edc051db037c1742819ac8674ebe4be:bfaa715c0faf707c1b20ab8259d42a35:4b7980be4e3ac1d20c9eaf970913ec63$" } } diff --git a/public/images/trainer/archie.png b/public/images/trainer/archie.png index c83975c0690..d4c003fd348 100644 Binary files a/public/images/trainer/archie.png and b/public/images/trainer/archie.png differ diff --git a/public/images/trainer/atticus.json b/public/images/trainer/atticus.json index 95621998bf2..8b1ebdd63f2 100644 --- a/public/images/trainer/atticus.json +++ b/public/images/trainer/atticus.json @@ -4,8 +4,8 @@ "image": "atticus.png", "format": "RGBA8888", "size": { - "w": 46, - "h": 46 + "w": 55, + "h": 55 }, "scale": 1, "frames": [ @@ -14,20 +14,20 @@ "rotated": false, "trimmed": false, "sourceSize": { - "w": 80, - "h": 80 + "w": 55, + "h": 49 }, "spriteSourceSize": { - "x": 21, - "y": 33, - "w": 43, - "h": 46 + "x": 0, + "y": 0, + "w": 55, + "h": 49 }, "frame": { "x": 0, "y": 0, - "w": 43, - "h": 46 + "w": 55, + "h": 49 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:6dcd7c3d3982793cbca0d6fcd1f9260e:19c44634629fadd9d039d23dc71ec987:d26ede35f15aa571d5a7a2dd2fb868e1$" + "smartupdate": "$TexturePacker:SmartUpdate:2c1a2ecebeac4770c51422bede6add57:5c82bf231c27d62e440081f186eb1da9:d26ede35f15aa571d5a7a2dd2fb868e1$" } } diff --git a/public/images/trainer/atticus.png b/public/images/trainer/atticus.png index e3e7e870f2b..75cd70b72d8 100644 Binary files a/public/images/trainer/atticus.png and b/public/images/trainer/atticus.png differ diff --git a/public/images/trainer/courtney.json b/public/images/trainer/courtney.json index de55e91eb85..1da3e08b107 100644 --- a/public/images/trainer/courtney.json +++ b/public/images/trainer/courtney.json @@ -4,8 +4,8 @@ "image": "courtney.png", "format": "RGBA8888", "size": { - "w": 52, - "h": 80 + "w": 72, + "h": 72 }, "scale": 1, "frames": [ @@ -14,20 +14,20 @@ "rotated": false, "trimmed": false, "sourceSize": { - "w": 52, - "h": 80 + "w": 44, + "h": 72 }, "spriteSourceSize": { "x": 0, "y": 0, - "w": 52, - "h": 80 + "w": 44, + "h": 72 }, "frame": { "x": 0, "y": 0, - "w": 52, - "h": 80 + "w": 44, + "h": 72 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:831f5748dad92911b10a1cb358ee2dae:a3bf81bbaa3b49cad5e0e549cf94563b:bb6befc9383c9c08837183ae2a7a80c1$" + "smartupdate": "$TexturePacker:SmartUpdate:c39b0f300dc09114fba490e6ab68b2b5:a24a6dbdd0e3f4d4b7a567673b73316a:b0c7d3a5747d1c7edafa00c8e6d1257e$" } } diff --git a/public/images/trainer/courtney.png b/public/images/trainer/courtney.png index 0efdb615fcd..3db5151e61c 100644 Binary files a/public/images/trainer/courtney.png and b/public/images/trainer/courtney.png differ diff --git a/public/images/trainer/eri.json b/public/images/trainer/eri.json index fd4daf60437..08312d7a310 100644 --- a/public/images/trainer/eri.json +++ b/public/images/trainer/eri.json @@ -4,8 +4,8 @@ "image": "eri.png", "format": "RGBA8888", "size": { - "w": 74, - "h": 74 + "w": 78, + "h": 78 }, "scale": 1, "frames": [ @@ -14,20 +14,20 @@ "rotated": false, "trimmed": false, "sourceSize": { - "w": 80, - "h": 80 + "w": 52, + "h": 78 }, "spriteSourceSize": { - "x": 15, - "y": 5, - "w": 45, - "h": 74 + "x": 0, + "y": 0, + "w": 52, + "h": 78 }, "frame": { "x": 0, "y": 0, - "w": 45, - "h": 74 + "w": 52, + "h": 78 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:59594ac27e74ec85e2949d12ff680dc2:d65b6b00858ac47b26ef8393a8fa6795:d7f4cd3ff755f8074c14d3006b0c8301$" + "smartupdate": "$TexturePacker:SmartUpdate:d413fdffea2ec50087a67019a6ce4063:66a18e7a21ca3a1953778dbc09074ab6:d7f4cd3ff755f8074c14d3006b0c8301$" } } diff --git a/public/images/trainer/eri.png b/public/images/trainer/eri.png index 0c9bdf7b47b..cb38f96b030 100644 Binary files a/public/images/trainer/eri.png and b/public/images/trainer/eri.png differ diff --git a/public/images/trainer/faba.json b/public/images/trainer/faba.json index 0e9544e2529..a419c782d87 100644 --- a/public/images/trainer/faba.json +++ b/public/images/trainer/faba.json @@ -4,8 +4,8 @@ "image": "faba.png", "format": "RGBA8888", "size": { - "w": 74, - "h": 74 + "w": 76, + "h": 76 }, "scale": 1, "frames": [ @@ -14,20 +14,20 @@ "rotated": false, "trimmed": false, "sourceSize": { - "w": 80, - "h": 80 + "w": 29, + "h": 76 }, "spriteSourceSize": { - "x": 25, - "y": 5, - "w": 31, - "h": 74 + "x": 0, + "y": 0, + "w": 29, + "h": 76 }, "frame": { "x": 0, "y": 0, - "w": 31, - "h": 74 + "w": 29, + "h": 76 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:47622708d99a504998950bd9c389a504:fe1c51be191dd9fafb5b6f309c08ae1a:8d64db18930325b8b513740c1d83ce4c$" + "smartupdate": "$TexturePacker:SmartUpdate:bbfce6e1ed69401694ce8c2537dd1fea:a2c9351e4ba08d44cafa66ecdf509866:8d64db18930325b8b513740c1d83ce4c$" } } diff --git a/public/images/trainer/faba.png b/public/images/trainer/faba.png index a7fa0fb4879..1c509da8a78 100644 Binary files a/public/images/trainer/faba.png and b/public/images/trainer/faba.png differ diff --git a/public/images/trainer/flare_grunt_f.json b/public/images/trainer/flare_grunt_f.json index e536d28a1aa..a8ebf9a8a4a 100644 --- a/public/images/trainer/flare_grunt_f.json +++ b/public/images/trainer/flare_grunt_f.json @@ -4,8 +4,8 @@ "image": "flare_grunt_f.png", "format": "RGBA8888", "size": { - "w": 80, - "h": 80 + "w": 85, + "h": 85 }, "scale": 1, "frames": [ @@ -14,20 +14,20 @@ "rotated": false, "trimmed": false, "sourceSize": { - "w": 80, - "h": 80 + "w": 23, + "h": 85 }, "spriteSourceSize": { - "x": 31, + "x": 0, "y": 0, "w": 23, - "h": 80 + "h": 85 }, "frame": { "x": 0, "y": 0, "w": 23, - "h": 80 + "h": 85 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:c30bf82452209a923f4becf13d275a9a:a6355b09f92c9c0388d0b919010f587f:0638dbf213f8a974eb5af76eb1e5ddeb$" + "smartupdate": "$TexturePacker:SmartUpdate:88d242a8c3b9859307ecdd290c30ce7d:acd04d60ab09f18e86e4e5727132dac2:0638dbf213f8a974eb5af76eb1e5ddeb$" } } diff --git a/public/images/trainer/flare_grunt_f.png b/public/images/trainer/flare_grunt_f.png index 4446675dc44..e2a4dd7fe92 100644 Binary files a/public/images/trainer/flare_grunt_f.png and b/public/images/trainer/flare_grunt_f.png differ diff --git a/public/images/trainer/flare_grunt_m.json b/public/images/trainer/flare_grunt_m.json index 4d54acbf810..226257ef84a 100644 --- a/public/images/trainer/flare_grunt_m.json +++ b/public/images/trainer/flare_grunt_m.json @@ -14,12 +14,12 @@ "rotated": false, "trimmed": false, "sourceSize": { - "w": 80, - "h": 80 + "w": 31, + "h": 77 }, "spriteSourceSize": { - "x": 24, - "y": 2, + "x": 0, + "y": 0, "w": 31, "h": 77 }, @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:a26606e70778f88a1a7053b2f2420dde:84abf0d0f6bc90c6a60f660567b2d641:adc35a4070bac9fe828c2605a3b15744$" + "smartupdate": "$TexturePacker:SmartUpdate:8683e52bbd1a42992f4d7ab8aa65a2a1:e8279cd322279bc5f8e2bb5797e6f818:adc35a4070bac9fe828c2605a3b15744$" } } diff --git a/public/images/trainer/flare_grunt_m.png b/public/images/trainer/flare_grunt_m.png index 79eb98449ca..eb14dbed0e2 100644 Binary files a/public/images/trainer/flare_grunt_m.png and b/public/images/trainer/flare_grunt_m.png differ diff --git a/public/images/trainer/giacomo.json b/public/images/trainer/giacomo.json index 5eeb2cd685b..f61d5b64901 100644 --- a/public/images/trainer/giacomo.json +++ b/public/images/trainer/giacomo.json @@ -4,8 +4,8 @@ "image": "giacomo.png", "format": "RGBA8888", "size": { - "w": 75, - "h": 75 + "w": 71, + "h": 71 }, "scale": 1, "frames": [ @@ -14,20 +14,20 @@ "rotated": false, "trimmed": false, "sourceSize": { - "w": 80, - "h": 80 + "w": 37, + "h": 71 }, "spriteSourceSize": { - "x": 23, - "y": 4, + "x": 0, + "y": 0, "w": 37, - "h": 75 + "h": 71 }, "frame": { "x": 0, "y": 0, "w": 37, - "h": 75 + "h": 71 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:8c4e7da48e5667abc6d364330268c092:0fa43e58d8a746d3b86cb2dd763719f4:8603cc19e888c8c8de62177f4011577c$" + "smartupdate": "$TexturePacker:SmartUpdate:8d4b9bca01f3729556cd02a8795c3e89:cb2840cbbd1e5a614bfa6bcb23db5b62:8603cc19e888c8c8de62177f4011577c$" } } diff --git a/public/images/trainer/giacomo.png b/public/images/trainer/giacomo.png index 275f47fad3c..352acaddf95 100644 Binary files a/public/images/trainer/giacomo.png and b/public/images/trainer/giacomo.png differ diff --git a/public/images/trainer/guzma.json b/public/images/trainer/guzma.json index c278d68be24..1b75915c088 100644 --- a/public/images/trainer/guzma.json +++ b/public/images/trainer/guzma.json @@ -4,8 +4,8 @@ "image": "guzma.png", "format": "RGBA8888", "size": { - "w": 58, - "h": 58 + "w": 64, + "h": 64 }, "scale": 1, "frames": [ @@ -14,20 +14,20 @@ "rotated": false, "trimmed": false, "sourceSize": { - "w": 80, - "h": 80 + "w": 34, + "h": 64 }, "spriteSourceSize": { - "x": 21, - "y": 20, - "w": 37, - "h": 58 + "x": 0, + "y": 0, + "w": 34, + "h": 64 }, "frame": { "x": 0, "y": 0, - "w": 37, - "h": 58 + "w": 34, + "h": 64 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:c3b08a562a2882d1ca8b5e031e245da9:72a8305e547f091d15abccd2b142e401:3b302c7f9eb6ea81b65bcaeead4a95a9$" + "smartupdate": "$TexturePacker:SmartUpdate:90cfe8ae514c30ddf48840678b251141:87a93d268c61327ad913bba3b052686b:3b302c7f9eb6ea81b65bcaeead4a95a9$" } } diff --git a/public/images/trainer/guzma.png b/public/images/trainer/guzma.png index 6afd6f3b34a..1ae6d8eb8d1 100644 Binary files a/public/images/trainer/guzma.png and b/public/images/trainer/guzma.png differ diff --git a/public/images/trainer/hala.json b/public/images/trainer/hala.json index f909ebe7684..5fcea739488 100644 --- a/public/images/trainer/hala.json +++ b/public/images/trainer/hala.json @@ -4,8 +4,8 @@ "image": "hala.png", "format": "RGBA8888", "size": { - "w": 78, - "h": 78 + "w": 82, + "h": 82 }, "scale": 1, "frames": [ @@ -14,20 +14,20 @@ "rotated": false, "trimmed": false, "sourceSize": { - "w": 59, - "h": 78 + "w": 58, + "h": 82 }, "spriteSourceSize": { "x": 0, "y": 0, - "w": 59, - "h": 78 + "w": 58, + "h": 82 }, "frame": { "x": 0, "y": 0, - "w": 59, - "h": 78 + "w": 58, + "h": 82 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:b6547cc9975d92a02b99fd63122d740b:0a72e0ac4fcbfe4329a7dcdad284ab36:7c2af56b9a9851f2e2eaeaf0cdca9370$" + "smartupdate": "$TexturePacker:SmartUpdate:57dc13db648785ad4694bf67c40fa21d:ee2bc7184f4f48ab8ba3c10c89bfc8f0:7c2af56b9a9851f2e2eaeaf0cdca9370$" } } diff --git a/public/images/trainer/hala.png b/public/images/trainer/hala.png index 0a72be4113b..4f26cbb8ff3 100644 Binary files a/public/images/trainer/hala.png and b/public/images/trainer/hala.png differ diff --git a/public/images/trainer/hau.json b/public/images/trainer/hau.json index 5f2ef8bcec8..351283ff0ad 100644 --- a/public/images/trainer/hau.json +++ b/public/images/trainer/hau.json @@ -4,8 +4,8 @@ "image": "hau.png", "format": "RGBA8888", "size": { - "w": 70, - "h": 70 + "w": 71, + "h": 71 }, "scale": 1, "frames": [ @@ -14,20 +14,20 @@ "rotated": false, "trimmed": false, "sourceSize": { - "w": 80, - "h": 80 + "w": 24, + "h": 71 }, "spriteSourceSize": { - "x": 27, - "y": 9, - "w": 29, - "h": 70 + "x": 0, + "y": 0, + "w": 24, + "h": 71 }, "frame": { "x": 0, "y": 0, - "w": 29, - "h": 70 + "w": 24, + "h": 71 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:688d6d27e686efec45b144ba4544f248:676457a4e9dfbcad0510f6e7bfa73514:d4c7e8b349477c2295b49b0e99b91bb3$" + "smartupdate": "$TexturePacker:SmartUpdate:0d500afd9a36f32a23b5a316dcf397d9:aa5d3e58d6df67b90e484ec7f345a4cf:d4c7e8b349477c2295b49b0e99b91bb3$" } } diff --git a/public/images/trainer/hau.png b/public/images/trainer/hau.png index 1ce2c98f6af..7aa673a6fe9 100644 Binary files a/public/images/trainer/hau.png and b/public/images/trainer/hau.png differ diff --git a/public/images/trainer/korrina.json b/public/images/trainer/korrina.json index cc1ba59bd55..7c258fa4927 100644 --- a/public/images/trainer/korrina.json +++ b/public/images/trainer/korrina.json @@ -4,8 +4,8 @@ "image": "korrina.png", "format": "RGBA8888", "size": { - "w": 75, - "h": 75 + "w": 83, + "h": 83 }, "scale": 1, "frames": [ @@ -14,20 +14,20 @@ "rotated": false, "trimmed": false, "sourceSize": { - "w": 80, - "h": 80 + "w": 57, + "h": 83 }, "spriteSourceSize": { - "x": 10, - "y": 4, - "w": 56, - "h": 75 + "x": 0, + "y": 0, + "w": 57, + "h": 83 }, "frame": { "x": 0, "y": 0, - "w": 56, - "h": 75 + "w": 57, + "h": 83 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:43a6564beec2569a58110232e9752b64:0decef066ae75dc7f3bd0c811f9a92d1:ed5be09cd8b82ed6439ff8617ffa74c0$" + "smartupdate": "$TexturePacker:SmartUpdate:1dc28e18e99698fbfd8a110a1dc737f2:79d24176afd3059dc69ce785ce672bbb:ed5be09cd8b82ed6439ff8617ffa74c0$" } } diff --git a/public/images/trainer/korrina.png b/public/images/trainer/korrina.png index 6d6817faf94..8994afdddb1 100644 Binary files a/public/images/trainer/korrina.png and b/public/images/trainer/korrina.png differ diff --git a/public/images/pokemon/back/shiny/668-female.json b/public/images/trainer/kukui.json similarity index 63% rename from public/images/pokemon/back/shiny/668-female.json rename to public/images/trainer/kukui.json index 7b4adc1a94d..139a1456cc5 100644 --- a/public/images/pokemon/back/shiny/668-female.json +++ b/public/images/trainer/kukui.json @@ -1,7 +1,7 @@ { "textures": [ { - "image": "668-female.png", + "image": "kukui.png", "format": "RGBA8888", "size": { "w": 74, @@ -14,20 +14,20 @@ "rotated": false, "trimmed": false, "sourceSize": { - "w": 74, - "h": 72 + "w": 37, + "h": 74 }, "spriteSourceSize": { "x": 0, "y": 0, - "w": 74, - "h": 72 + "w": 37, + "h": 74 }, "frame": { "x": 0, "y": 0, - "w": 74, - "h": 72 + "w": 37, + "h": 74 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:a3f814ea1f5b062df0ecc4e7c343d89b:769178f31dc2505ae0e67b72b1319828:d99ed0e84a0695b54e479aa98271aba1$" + "smartupdate": "$TexturePacker:SmartUpdate:bccd7af37a8608585716e34d0acb49af:8e1ebc6f022707fbb1e6b4f7d1dbb00c:70bdbf4bca082082ae121aa8ef03c2be$" } } diff --git a/public/images/trainer/kukui.png b/public/images/trainer/kukui.png new file mode 100644 index 00000000000..aacf1c197ee Binary files /dev/null and b/public/images/trainer/kukui.png differ diff --git a/public/images/trainer/lusamine.json b/public/images/trainer/lusamine.json index 55a711a21fb..c2e9b2f2356 100644 --- a/public/images/trainer/lusamine.json +++ b/public/images/trainer/lusamine.json @@ -4,8 +4,8 @@ "image": "lusamine.png", "format": "RGBA8888", "size": { - "w": 74, - "h": 74 + "w": 80, + "h": 80 }, "scale": 1, "frames": [ @@ -14,20 +14,20 @@ "rotated": false, "trimmed": false, "sourceSize": { - "w": 80, + "w": 52, "h": 80 }, "spriteSourceSize": { - "x": 22, - "y": 5, - "w": 36, - "h": 74 + "x": 0, + "y": 0, + "w": 52, + "h": 80 }, "frame": { "x": 0, "y": 0, - "w": 36, - "h": 74 + "w": 52, + "h": 80 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:41da3a1299e3831be70016dc91e49313:2413ba06767fb10fdc6fde8cc736c51c:4012333084c529872232c8d052561dc1$" + "smartupdate": "$TexturePacker:SmartUpdate:52c5f9beccbfe68b9861b8fc393ba674:35d25e8bad6c7212e330a0e3d0c88315:4012333084c529872232c8d052561dc1$" } } diff --git a/public/images/trainer/lusamine.png b/public/images/trainer/lusamine.png index 8b835a2d0be..1619dc11e2d 100644 Binary files a/public/images/trainer/lusamine.png and b/public/images/trainer/lusamine.png differ diff --git a/public/images/trainer/lysandre.json b/public/images/trainer/lysandre.json index 931b1633a32..1dcb9c8c710 100644 --- a/public/images/trainer/lysandre.json +++ b/public/images/trainer/lysandre.json @@ -4,8 +4,8 @@ "image": "lysandre.png", "format": "RGBA8888", "size": { - "w": 80, - "h": 80 + "w": 82, + "h": 82 }, "scale": 1, "frames": [ @@ -14,20 +14,20 @@ "rotated": false, "trimmed": false, "sourceSize": { - "w": 80, - "h": 80 + "w": 50, + "h": 82 }, "spriteSourceSize": { - "x": 14, + "x": 0, "y": 0, - "w": 52, - "h": 80 + "w": 50, + "h": 82 }, "frame": { "x": 0, "y": 0, - "w": 52, - "h": 80 + "w": 50, + "h": 82 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:6b887c8bab74885a1b05f2b382759db6:ba102d9d25ddd794a3a17f029b971daf:e6066149f6ec4ccb9fc28faea3d64a7f$" + "smartupdate": "$TexturePacker:SmartUpdate:b09528fe2d3137bba8ce5c667d2a962f:7c522eefcc85ee87df485d34b58e814b:e6066149f6ec4ccb9fc28faea3d64a7f$" } } diff --git a/public/images/trainer/lysandre.png b/public/images/trainer/lysandre.png index b83b649d142..fe6dafb00f8 100644 Binary files a/public/images/trainer/lysandre.png and b/public/images/trainer/lysandre.png differ diff --git a/public/images/trainer/macro_grunt_f.json b/public/images/trainer/macro_grunt_f.json index 04b30ec4ca5..8a9a3943a27 100644 --- a/public/images/trainer/macro_grunt_f.json +++ b/public/images/trainer/macro_grunt_f.json @@ -14,19 +14,19 @@ "rotated": false, "trimmed": false, "sourceSize": { - "w": 80, - "h": 80 + "w": 33, + "h": 74 }, "spriteSourceSize": { - "x": 24, - "y": 5, - "w": 31, + "x": 0, + "y": 0, + "w": 33, "h": 74 }, "frame": { "x": 0, "y": 0, - "w": 31, + "w": 33, "h": 74 } } @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:a015c43d80f8fd1932758e0e2cfcec61:59fc8205ea5ca04295831b4a2eb623ec:30df2ea8e9dac9e95f70534ec43d5ecd$" + "smartupdate": "$TexturePacker:SmartUpdate:7449212fcdbfb4a600364bd3761e4fb6:37c81a387501a047cff84cabdeedb496:d1412ef32f1904a102cf70569806f3b7$" } } diff --git a/public/images/trainer/macro_grunt_f.png b/public/images/trainer/macro_grunt_f.png index 892299d701e..85586126da1 100644 Binary files a/public/images/trainer/macro_grunt_f.png and b/public/images/trainer/macro_grunt_f.png differ diff --git a/public/images/trainer/macro_grunt_m.json b/public/images/trainer/macro_grunt_m.json index 5357fdb0767..f9a8736c4d1 100644 --- a/public/images/trainer/macro_grunt_m.json +++ b/public/images/trainer/macro_grunt_m.json @@ -4,8 +4,8 @@ "image": "macro_grunt_m.png", "format": "RGBA8888", "size": { - "w": 75, - "h": 75 + "w": 76, + "h": 76 }, "scale": 1, "frames": [ @@ -14,20 +14,20 @@ "rotated": false, "trimmed": false, "sourceSize": { - "w": 80, - "h": 80 + "w": 35, + "h": 76 }, "spriteSourceSize": { - "x": 15, - "y": 4, - "w": 48, - "h": 75 + "x": 0, + "y": 0, + "w": 35, + "h": 76 }, "frame": { "x": 0, "y": 0, - "w": 48, - "h": 75 + "w": 35, + "h": 76 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:52fccff2a0675b4e10139ddb7067d4cf:10d254175d2d8a9111cce096ffb55fa3:d57016467aa07cafdfaf13e0ff643c1b$" + "smartupdate": "$TexturePacker:SmartUpdate:5800bf6888eb6dd61ea39e1c9a1f93e3:25a930b7c50e2d7832bd3c30402d7544:1f76f2e682f472208a45e187250a6a3d$" } } diff --git a/public/images/trainer/macro_grunt_m.png b/public/images/trainer/macro_grunt_m.png index aa6b3607a87..464c735c75d 100644 Binary files a/public/images/trainer/macro_grunt_m.png and b/public/images/trainer/macro_grunt_m.png differ diff --git a/public/images/trainer/magma_grunt_f.json b/public/images/trainer/magma_grunt_f.json index 05c0512bbf0..d7a3d214317 100644 --- a/public/images/trainer/magma_grunt_f.json +++ b/public/images/trainer/magma_grunt_f.json @@ -4,30 +4,30 @@ "image": "magma_grunt_f.png", "format": "RGBA8888", "size": { - "w": 80, - "h": 80 + "w": 72, + "h": 72 }, "scale": 1, "frames": [ { "filename": "0001.png", "rotated": false, - "trimmed": true, + "trimmed": false, "sourceSize": { - "w": 80, - "h": 80 + "w": 43, + "h": 72 }, "spriteSourceSize": { - "x": 10, + "x": 0, "y": 0, - "w": 60, - "h": 80 + "w": 43, + "h": 72 }, "frame": { - "x": 10, + "x": 0, "y": 0, - "w": 60, - "h": 80 + "w": 43, + "h": 72 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:f63ad48affc076f60fae78992c96a2bf:80928b32710abcb28c07c6fc5a425d99:3b961d8852b62aaf24ceb2030c036515$" + "smartupdate": "$TexturePacker:SmartUpdate:219462e400564a65012cda9dbc31ab22:4e0070239d24311df52a263271698c59:3b961d8852b62aaf24ceb2030c036515$" } } diff --git a/public/images/trainer/magma_grunt_f.png b/public/images/trainer/magma_grunt_f.png index 215ad83eea1..5ea582ad067 100644 Binary files a/public/images/trainer/magma_grunt_f.png and b/public/images/trainer/magma_grunt_f.png differ diff --git a/public/images/trainer/magma_grunt_m.json b/public/images/trainer/magma_grunt_m.json index ac8cd838c5a..57ac7c40da9 100644 --- a/public/images/trainer/magma_grunt_m.json +++ b/public/images/trainer/magma_grunt_m.json @@ -4,30 +4,30 @@ "image": "magma_grunt_m.png", "format": "RGBA8888", "size": { - "w": 80, - "h": 80 + "w": 72, + "h": 72 }, "scale": 1, "frames": [ { "filename": "0001.png", "rotated": false, - "trimmed": true, + "trimmed": false, "sourceSize": { - "w": 80, - "h": 80 + "w": 44, + "h": 72 }, "spriteSourceSize": { - "x": 10, + "x": 0, "y": 0, - "w": 60, - "h": 80 + "w": 44, + "h": 72 }, "frame": { - "x": 10, + "x": 0, "y": 0, - "w": 60, - "h": 80 + "w": 44, + "h": 72 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:96aa833d987a01bcdcb6f0e7809f5daf:791cce8d026f92b2e52f0b66df8b8e11:35532fd5d9aea30957d50d06f2d2f9a6$" + "smartupdate": "$TexturePacker:SmartUpdate:46f6e6e1aef8e2e7640c67116e548c5d:34cb6b7f64b0d3c294fcdde45097575d:35532fd5d9aea30957d50d06f2d2f9a6$" } } diff --git a/public/images/trainer/magma_grunt_m.png b/public/images/trainer/magma_grunt_m.png index a37b9acbb52..b2432a79d28 100644 Binary files a/public/images/trainer/magma_grunt_m.png and b/public/images/trainer/magma_grunt_m.png differ diff --git a/public/images/trainer/mela.json b/public/images/trainer/mela.json index c9db18acc5a..1d242d50074 100644 --- a/public/images/trainer/mela.json +++ b/public/images/trainer/mela.json @@ -4,8 +4,8 @@ "image": "mela.png", "format": "RGBA8888", "size": { - "w": 78, - "h": 78 + "w": 75, + "h": 75 }, "scale": 1, "frames": [ @@ -14,20 +14,20 @@ "rotated": false, "trimmed": false, "sourceSize": { - "w": 80, - "h": 80 + "w": 41, + "h": 75 }, "spriteSourceSize": { - "x": 18, - "y": 1, - "w": 46, - "h": 78 + "x": 0, + "y": 0, + "w": 41, + "h": 75 }, "frame": { "x": 0, "y": 0, - "w": 46, - "h": 78 + "w": 41, + "h": 75 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:e26d8c926c54c848cef673b3f59f35e7:ff040c2cebb1a92d2ef61dc91c018390:68668cf06383ff459cccaafb6bf56215$" + "smartupdate": "$TexturePacker:SmartUpdate:96e97b165e8ca706b7838616d32ab81f:89c577db41f4b610520823e876066e35:68668cf06383ff459cccaafb6bf56215$" } } diff --git a/public/images/trainer/mela.png b/public/images/trainer/mela.png index fbb08ed69cf..a98547d6380 100644 Binary files a/public/images/trainer/mela.png and b/public/images/trainer/mela.png differ diff --git a/public/images/trainer/molayne.json b/public/images/trainer/molayne.json index ae80a12f012..8a0b1b3534e 100644 --- a/public/images/trainer/molayne.json +++ b/public/images/trainer/molayne.json @@ -4,8 +4,8 @@ "image": "molayne.png", "format": "RGBA8888", "size": { - "w": 79, - "h": 79 + "w": 78, + "h": 78 }, "scale": 1, "frames": [ @@ -15,19 +15,19 @@ "trimmed": false, "sourceSize": { "w": 31, - "h": 79 + "h": 78 }, "spriteSourceSize": { "x": 0, "y": 0, "w": 31, - "h": 79 + "h": 78 }, "frame": { "x": 0, "y": 0, "w": 31, - "h": 79 + "h": 78 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:056720ae56077b81375b258850332053:774e1c8463f26fac3be55ed88c8b48b9:11092260a376b1a46e696927361b6498$" + "smartupdate": "$TexturePacker:SmartUpdate:190386db101d4bd1ef5ed1f4f7b5bb1c:c8bc1b069ceb2707738b9178fb6aea0f:11092260a376b1a46e696927361b6498$" } } diff --git a/public/images/trainer/molayne.png b/public/images/trainer/molayne.png index 75f9569370e..c400e5be33d 100644 Binary files a/public/images/trainer/molayne.png and b/public/images/trainer/molayne.png differ diff --git a/public/images/pokemon/668-female.json b/public/images/trainer/mustard.json similarity index 59% rename from public/images/pokemon/668-female.json rename to public/images/trainer/mustard.json index 13d67c90194..5c3a73f0a0b 100644 --- a/public/images/pokemon/668-female.json +++ b/public/images/trainer/mustard.json @@ -1,11 +1,11 @@ { "textures": [ { - "image": "668-female.png", + "image": "mustard.png", "format": "RGBA8888", "size": { - "w": 72, - "h": 72 + "w": 71, + "h": 71 }, "scale": 1, "frames": [ @@ -14,20 +14,20 @@ "rotated": false, "trimmed": false, "sourceSize": { - "w": 63, - "h": 72 + "w": 57, + "h": 71 }, "spriteSourceSize": { "x": 0, "y": 0, - "w": 63, - "h": 72 + "w": 57, + "h": 71 }, "frame": { "x": 0, "y": 0, - "w": 63, - "h": 72 + "w": 57, + "h": 71 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:3f88e039152d4a967a218cb721938610:e6991ce9c3bad348cbc05ebf9b440302:d99ed0e84a0695b54e479aa98271aba1$" + "smartupdate": "$TexturePacker:SmartUpdate:8e2d109ee2cb1b2a6dda840c5bba1d4e:8116b1de2fd7bc0ca08e2d3e618b3dae:ac5d03e7cabff8ff660969c2bc2f3b36$" } } diff --git a/public/images/trainer/mustard.png b/public/images/trainer/mustard.png new file mode 100644 index 00000000000..0acba02db45 Binary files /dev/null and b/public/images/trainer/mustard.png differ diff --git a/public/images/trainer/oleana.json b/public/images/trainer/oleana.json index 7219b640c38..d9344226819 100644 --- a/public/images/trainer/oleana.json +++ b/public/images/trainer/oleana.json @@ -4,8 +4,8 @@ "image": "oleana.png", "format": "RGBA8888", "size": { - "w": 79, - "h": 79 + "w": 78, + "h": 78 }, "scale": 1, "frames": [ @@ -14,20 +14,20 @@ "rotated": false, "trimmed": false, "sourceSize": { - "w": 80, - "h": 80 + "w": 56, + "h": 78 }, "spriteSourceSize": { - "x": 10, - "y": 1, - "w": 53, - "h": 79 + "x": 0, + "y": 0, + "w": 56, + "h": 78 }, "frame": { "x": 0, "y": 0, - "w": 53, - "h": 79 + "w": 56, + "h": 78 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:30987a671771127a38491a588c465964:38b28effcfd5c6cbc0f358912a775af3:82e2a1f8afed29be57f6c2473f4c5be2$" + "smartupdate": "$TexturePacker:SmartUpdate:3f088913cab1db14067e247bd92e82ce:b32e1ef6ef289564b39fd326346002c6:82e2a1f8afed29be57f6c2473f4c5be2$" } } diff --git a/public/images/trainer/oleana.png b/public/images/trainer/oleana.png index 3252c67ab8e..e74fb6ab2eb 100644 Binary files a/public/images/trainer/oleana.png and b/public/images/trainer/oleana.png differ diff --git a/public/images/trainer/ortega.json b/public/images/trainer/ortega.json index 53bab5dba40..082817344e0 100644 --- a/public/images/trainer/ortega.json +++ b/public/images/trainer/ortega.json @@ -4,8 +4,8 @@ "image": "ortega.png", "format": "RGBA8888", "size": { - "w": 69, - "h": 69 + "w": 70, + "h": 70 }, "scale": 1, "frames": [ @@ -14,20 +14,20 @@ "rotated": false, "trimmed": false, "sourceSize": { - "w": 80, - "h": 80 + "w": 47, + "h": 70 }, "spriteSourceSize": { - "x": 8, - "y": 10, - "w": 53, - "h": 69 + "x": 0, + "y": 0, + "w": 47, + "h": 70 }, "frame": { "x": 0, "y": 0, - "w": 53, - "h": 69 + "w": 47, + "h": 70 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:c6ff92d90ed884222095de81d1db9166:a91cf3c83a063f549c52afb42f7ba3b0:c3f9fcec121c8bc93f2b230b20b79c57$" + "smartupdate": "$TexturePacker:SmartUpdate:f69a1067315885ed736a07362122f371:717e3f134eb10424f0f0fa724500ba63:c3f9fcec121c8bc93f2b230b20b79c57$" } } diff --git a/public/images/trainer/ortega.png b/public/images/trainer/ortega.png index 7f694c6ded6..cede7b6c311 100644 Binary files a/public/images/trainer/ortega.png and b/public/images/trainer/ortega.png differ diff --git a/public/images/trainer/penny.json b/public/images/trainer/penny.json index da64efffa3b..bb74e43da89 100644 --- a/public/images/trainer/penny.json +++ b/public/images/trainer/penny.json @@ -4,8 +4,8 @@ "image": "penny.png", "format": "RGBA8888", "size": { - "w": 75, - "h": 75 + "w": 67, + "h": 67 }, "scale": 1, "frames": [ @@ -14,20 +14,20 @@ "rotated": false, "trimmed": false, "sourceSize": { - "w": 80, - "h": 80 + "w": 30, + "h": 67 }, "spriteSourceSize": { - "x": 24, - "y": 4, - "w": 34, - "h": 75 + "x": 0, + "y": 0, + "w": 30, + "h": 67 }, "frame": { "x": 0, "y": 0, - "w": 34, - "h": 75 + "w": 30, + "h": 67 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:54f184bf1995a94a78aff33c9a851e6b:a6c9b3fe428b0cd0344b5cf14b999f36:cf221da9747cb8cb356053d3042d8d22$" + "smartupdate": "$TexturePacker:SmartUpdate:cb4d76912d528afe986ac5cad775f455:cc70d9738c9c7347b2ac9afec4ec9290:cf221da9747cb8cb356053d3042d8d22$" } } diff --git a/public/images/trainer/penny.png b/public/images/trainer/penny.png index 0e36760e21b..67c90a41462 100644 Binary files a/public/images/trainer/penny.png and b/public/images/trainer/penny.png differ diff --git a/public/images/trainer/plasma_grunt_f.json b/public/images/trainer/plasma_grunt_f.json index 4d23eeeb483..4a73a55e24b 100644 --- a/public/images/trainer/plasma_grunt_f.json +++ b/public/images/trainer/plasma_grunt_f.json @@ -4,30 +4,408 @@ "image": "plasma_grunt_f.png", "format": "RGBA8888", "size": { - "w": 75, - "h": 75 + "w": 186, + "h": 186 }, "scale": 1, "frames": [ { - "filename": "0001.png", + "filename": "0002.png", "rotated": false, - "trimmed": false, + "trimmed": true, "sourceSize": { "w": 80, "h": 80 }, "spriteSourceSize": { - "x": 21, - "y": 4, - "w": 37, - "h": 75 + "x": 16, + "y": 31, + "w": 49, + "h": 49 }, "frame": { "x": 0, "y": 0, - "w": 37, - "h": 75 + "w": 49, + "h": 49 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 16, + "y": 31, + "w": 49, + "h": 49 + }, + "frame": { + "x": 0, + "y": 0, + "w": 49, + "h": 49 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 17, + "y": 27, + "w": 46, + "h": 53 + }, + "frame": { + "x": 49, + "y": 0, + "w": 46, + "h": 53 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 17, + "y": 27, + "w": 45, + "h": 53 + }, + "frame": { + "x": 0, + "y": 49, + "w": 45, + "h": 53 + } + }, + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 17, + "y": 27, + "w": 45, + "h": 53 + }, + "frame": { + "x": 0, + "y": 49, + "w": 45, + "h": 53 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 17, + "y": 27, + "w": 45, + "h": 53 + }, + "frame": { + "x": 0, + "y": 49, + "w": 45, + "h": 53 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 17, + "y": 27, + "w": 45, + "h": 53 + }, + "frame": { + "x": 0, + "y": 49, + "w": 45, + "h": 53 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 15, + "y": 33, + "w": 50, + "h": 47 + }, + "frame": { + "x": 45, + "y": 53, + "w": 50, + "h": 47 + } + }, + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 15, + "y": 33, + "w": 50, + "h": 47 + }, + "frame": { + "x": 45, + "y": 53, + "w": 50, + "h": 47 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 15, + "y": 36, + "w": 50, + "h": 44 + }, + "frame": { + "x": 45, + "y": 100, + "w": 50, + "h": 44 + } + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 15, + "y": 36, + "w": 50, + "h": 44 + }, + "frame": { + "x": 45, + "y": 100, + "w": 50, + "h": 44 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 17, + "y": 27, + "w": 45, + "h": 53 + }, + "frame": { + "x": 0, + "y": 102, + "w": 45, + "h": 53 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 15, + "y": 38, + "w": 50, + "h": 42 + }, + "frame": { + "x": 45, + "y": 144, + "w": 50, + "h": 42 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 15, + "y": 38, + "w": 50, + "h": 42 + }, + "frame": { + "x": 45, + "y": 144, + "w": 50, + "h": 42 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 17, + "y": 27, + "w": 43, + "h": 53 + }, + "frame": { + "x": 95, + "y": 0, + "w": 43, + "h": 53 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 17, + "y": 27, + "w": 43, + "h": 53 + }, + "frame": { + "x": 95, + "y": 53, + "w": 43, + "h": 53 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 16, + "y": 31, + "w": 49, + "h": 49 + }, + "frame": { + "x": 95, + "y": 106, + "w": 49, + "h": 49 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 16, + "y": 31, + "w": 49, + "h": 49 + }, + "frame": { + "x": 95, + "y": 106, + "w": 49, + "h": 49 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 16, + "y": 29, + "w": 46, + "h": 51 + }, + "frame": { + "x": 138, + "y": 0, + "w": 46, + "h": 51 } } ] @@ -36,6 +414,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:c3001e18f1878c01a4825697200e823e:2003e0d4db249f7020c3471872198ac8:b01645b9e941158814978f2126e7e995$" + "smartupdate": "$TexturePacker:SmartUpdate:e8e867ad78b993918fba435e10511740:758a95ecd97e2607ff6ab81f85e665e6:b01645b9e941158814978f2126e7e995$" } } diff --git a/public/images/trainer/plasma_grunt_f.png b/public/images/trainer/plasma_grunt_f.png index 95b065f4360..7fa804cc39d 100644 Binary files a/public/images/trainer/plasma_grunt_f.png and b/public/images/trainer/plasma_grunt_f.png differ diff --git a/public/images/trainer/plasma_grunt_m.json b/public/images/trainer/plasma_grunt_m.json index 7c34b16790f..8fda1bd947b 100644 --- a/public/images/trainer/plasma_grunt_m.json +++ b/public/images/trainer/plasma_grunt_m.json @@ -4,30 +4,555 @@ "image": "plasma_grunt_m.png", "format": "RGBA8888", "size": { - "w": 72, - "h": 72 + "w": 262, + "h": 262 }, "scale": 1, "frames": [ { - "filename": "0001.png", + "filename": "0021.png", "rotated": false, - "trimmed": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 13, + "y": 11, + "w": 54, + "h": 69 + }, + "frame": { + "x": 0, + "y": 0, + "w": 54, + "h": 69 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 13, + "y": 11, + "w": 54, + "h": 69 + }, + "frame": { + "x": 0, + "y": 0, + "w": 54, + "h": 69 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, "sourceSize": { "w": 80, "h": 80 }, "spriteSourceSize": { "x": 16, - "y": 7, - "w": 47, - "h": 72 + "y": 11, + "w": 51, + "h": 69 }, "frame": { "x": 0, + "y": 69, + "w": 51, + "h": 69 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 17, + "y": 11, + "w": 50, + "h": 69 + }, + "frame": { + "x": 0, + "y": 138, + "w": 50, + "h": 69 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 17, + "y": 11, + "w": 50, + "h": 69 + }, + "frame": { + "x": 0, + "y": 138, + "w": 50, + "h": 69 + } + }, + { + "filename": "0025.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 17, + "y": 11, + "w": 50, + "h": 69 + }, + "frame": { + "x": 0, + "y": 138, + "w": 50, + "h": 69 + } + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 17, + "y": 11, + "w": 50, + "h": 69 + }, + "frame": { + "x": 0, + "y": 138, + "w": 50, + "h": 69 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 17, + "y": 11, + "w": 50, + "h": 69 + }, + "frame": { + "x": 50, + "y": 138, + "w": 50, + "h": 69 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 17, + "y": 11, + "w": 50, + "h": 69 + }, + "frame": { + "x": 50, + "y": 138, + "w": 50, + "h": 69 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 17, + "y": 11, + "w": 50, + "h": 69 + }, + "frame": { + "x": 51, + "y": 69, + "w": 50, + "h": 69 + } + }, + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 17, + "y": 11, + "w": 50, + "h": 69 + }, + "frame": { + "x": 54, "y": 0, - "w": 47, - "h": 72 + "w": 50, + "h": 69 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 17, + "y": 11, + "w": 50, + "h": 69 + }, + "frame": { + "x": 54, + "y": 0, + "w": 50, + "h": 69 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 18, + "y": 11, + "w": 49, + "h": 69 + }, + "frame": { + "x": 100, + "y": 138, + "w": 49, + "h": 69 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 18, + "y": 11, + "w": 49, + "h": 69 + }, + "frame": { + "x": 100, + "y": 138, + "w": 49, + "h": 69 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 14, + "y": 13, + "w": 52, + "h": 67 + }, + "frame": { + "x": 101, + "y": 69, + "w": 52, + "h": 67 + } + }, + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 14, + "y": 13, + "w": 52, + "h": 67 + }, + "frame": { + "x": 101, + "y": 69, + "w": 52, + "h": 67 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 14, + "y": 13, + "w": 52, + "h": 67 + }, + "frame": { + "x": 104, + "y": 0, + "w": 52, + "h": 67 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 12, + "y": 15, + "w": 53, + "h": 65 + }, + "frame": { + "x": 156, + "y": 0, + "w": 53, + "h": 65 + } + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 12, + "y": 15, + "w": 53, + "h": 65 + }, + "frame": { + "x": 156, + "y": 0, + "w": 53, + "h": 65 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 12, + "y": 15, + "w": 53, + "h": 65 + }, + "frame": { + "x": 209, + "y": 0, + "w": 53, + "h": 65 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 12, + "y": 15, + "w": 53, + "h": 65 + }, + "frame": { + "x": 156, + "y": 65, + "w": 53, + "h": 65 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 12, + "y": 15, + "w": 53, + "h": 65 + }, + "frame": { + "x": 209, + "y": 65, + "w": 53, + "h": 65 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 12, + "y": 15, + "w": 53, + "h": 65 + }, + "frame": { + "x": 153, + "y": 130, + "w": 53, + "h": 65 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 12, + "y": 15, + "w": 53, + "h": 65 + }, + "frame": { + "x": 149, + "y": 195, + "w": 53, + "h": 65 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 12, + "y": 15, + "w": 53, + "h": 65 + }, + "frame": { + "x": 202, + "y": 195, + "w": 53, + "h": 65 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 12, + "y": 15, + "w": 53, + "h": 65 + }, + "frame": { + "x": 206, + "y": 130, + "w": 53, + "h": 65 } } ] @@ -36,6 +561,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:61f195ebbcde93ab7442408edad7fe7a:28ae203b3cb42a94c4ba4420fdebdccc:9ae0ee174d431d48052a2f6b74e9d40c$" + "smartupdate": "$TexturePacker:SmartUpdate:8e214218a81b826b2cecce3e41f6eee8:2b88638dcf4559e6aad7c14cd730b7c3:9ae0ee174d431d48052a2f6b74e9d40c$" } } diff --git a/public/images/trainer/plasma_grunt_m.png b/public/images/trainer/plasma_grunt_m.png index e3ec6dd8c35..801e91b1d6d 100644 Binary files a/public/images/trainer/plasma_grunt_m.png and b/public/images/trainer/plasma_grunt_m.png differ diff --git a/public/images/trainer/plumeria.json b/public/images/trainer/plumeria.json index 936a8766750..4175fe5d716 100644 --- a/public/images/trainer/plumeria.json +++ b/public/images/trainer/plumeria.json @@ -4,8 +4,8 @@ "image": "plumeria.png", "format": "RGBA8888", "size": { - "w": 72, - "h": 72 + "w": 76, + "h": 76 }, "scale": 1, "frames": [ @@ -14,20 +14,20 @@ "rotated": false, "trimmed": false, "sourceSize": { - "w": 80, - "h": 80 + "w": 40, + "h": 76 }, "spriteSourceSize": { - "x": 23, - "y": 7, - "w": 36, - "h": 72 + "x": 0, + "y": 0, + "w": 40, + "h": 76 }, "frame": { "x": 0, "y": 0, - "w": 36, - "h": 72 + "w": 40, + "h": 76 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:5527e7b646932d429928b53f055e9d27:c0640510780d2974f9b74a7f8e6b29aa:7bfec029bae78c9d483f59c35b73afad$" + "smartupdate": "$TexturePacker:SmartUpdate:d0e080a4dcc30b39616c49dfd96c98f7:47c6a714be68fabdf11801166e154db6:7bfec029bae78c9d483f59c35b73afad$" } } diff --git a/public/images/trainer/plumeria.png b/public/images/trainer/plumeria.png index b7382f6afde..4528c3e2053 100644 Binary files a/public/images/trainer/plumeria.png and b/public/images/trainer/plumeria.png differ diff --git a/public/images/trainer/rose.json b/public/images/trainer/rose.json index 86869257b63..883aa128e50 100644 --- a/public/images/trainer/rose.json +++ b/public/images/trainer/rose.json @@ -4,8 +4,8 @@ "image": "rose.png", "format": "RGBA8888", "size": { - "w": 79, - "h": 79 + "w": 77, + "h": 77 }, "scale": 1, "frames": [ @@ -14,20 +14,20 @@ "rotated": false, "trimmed": false, "sourceSize": { - "w": 80, - "h": 80 + "w": 31, + "h": 77 }, "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 52, - "h": 79 + "x": 0, + "y": 0, + "w": 31, + "h": 77 }, "frame": { "x": 0, "y": 0, - "w": 52, - "h": 79 + "w": 31, + "h": 77 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:2b4ccaff7255c7d72661eac13de83ff8:72ee3660cdf470bd67375d355307e19d:8d35b104fc841baa4443581e6cea979e$" + "smartupdate": "$TexturePacker:SmartUpdate:be2215e7232e2260242613e54c91c3c4:852fb3fda379db104106f8888649d9d5:8d35b104fc841baa4443581e6cea979e$" } } diff --git a/public/images/trainer/rose.png b/public/images/trainer/rose.png index f90da7568d4..4c448e3302b 100644 Binary files a/public/images/trainer/rose.png and b/public/images/trainer/rose.png differ diff --git a/public/images/trainer/shelly.json b/public/images/trainer/shelly.json index 7761779864a..bac17e2885e 100644 --- a/public/images/trainer/shelly.json +++ b/public/images/trainer/shelly.json @@ -4,8 +4,8 @@ "image": "shelly.png", "format": "RGBA8888", "size": { - "w": 80, - "h": 80 + "w": 78, + "h": 78 }, "scale": 1, "frames": [ @@ -14,20 +14,20 @@ "rotated": false, "trimmed": false, "sourceSize": { - "w": 80, - "h": 80 + "w": 45, + "h": 78 }, "spriteSourceSize": { "x": 0, "y": 0, - "w": 80, - "h": 80 + "w": 45, + "h": 78 }, "frame": { "x": 0, "y": 0, - "w": 80, - "h": 80 + "w": 45, + "h": 78 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:831f5748dad92911b10a1cb358ee2dae:a3bf81bbaa3b49cad5e0e549cf94563b:bb6befc9383c9c08837183ae2a7a80c1$" + "smartupdate": "$TexturePacker:SmartUpdate:601dbcee82b14bde5072df26ddd7d684:a0d576e65d8e3ff549dde75f0a82bc94:a277ff67eb669e1dac57ad29940004ac$" } } diff --git a/public/images/trainer/shelly.png b/public/images/trainer/shelly.png index 505dce1b110..95e6a07310d 100644 Binary files a/public/images/trainer/shelly.png and b/public/images/trainer/shelly.png differ diff --git a/public/images/trainer/skull_grunt_f.json b/public/images/trainer/skull_grunt_f.json index 182f9300ad5..b8c42ffafdd 100644 --- a/public/images/trainer/skull_grunt_f.json +++ b/public/images/trainer/skull_grunt_f.json @@ -4,8 +4,8 @@ "image": "skull_grunt_f.png", "format": "RGBA8888", "size": { - "w": 74, - "h": 74 + "w": 69, + "h": 69 }, "scale": 1, "frames": [ @@ -14,20 +14,20 @@ "rotated": false, "trimmed": false, "sourceSize": { - "w": 31, - "h": 74 + "w": 44, + "h": 69 }, "spriteSourceSize": { "x": 0, "y": 0, - "w": 31, - "h": 74 + "w": 44, + "h": 69 }, "frame": { "x": 0, "y": 0, - "w": 31, - "h": 74 + "w": 44, + "h": 69 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:71a1f5b1981674c6e81163ac8ea576c3:a5e612d58e5f0a1489e111212baea09d:dd369353af16e4c5eb6547e129dfac18$" + "smartupdate": "$TexturePacker:SmartUpdate:b9685517b9674887653c84a03f3781c0:894dcd88bf117d48750df82b7bfac644:9035f560a0ab0d45bcc084aba7172990$" } } diff --git a/public/images/trainer/skull_grunt_f.png b/public/images/trainer/skull_grunt_f.png index fe7834ba4a8..c26e8d7f882 100644 Binary files a/public/images/trainer/skull_grunt_f.png and b/public/images/trainer/skull_grunt_f.png differ diff --git a/public/images/trainer/skull_grunt_m.json b/public/images/trainer/skull_grunt_m.json index 7c728e9d3fc..6a2d13ed8a3 100644 --- a/public/images/trainer/skull_grunt_m.json +++ b/public/images/trainer/skull_grunt_m.json @@ -4,8 +4,8 @@ "image": "skull_grunt_m.png", "format": "RGBA8888", "size": { - "w": 72, - "h": 72 + "w": 64, + "h": 64 }, "scale": 1, "frames": [ @@ -14,20 +14,20 @@ "rotated": false, "trimmed": false, "sourceSize": { - "w": 51, - "h": 72 + "w": 39, + "h": 64 }, "spriteSourceSize": { "x": 0, "y": 0, - "w": 51, - "h": 72 + "w": 39, + "h": 64 }, "frame": { "x": 0, "y": 0, - "w": 51, - "h": 72 + "w": 39, + "h": 64 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:4deb2a68e4d168bb1a40cb5d190a7d1f:be3d7b29f4b544ba51cf907691fef51d:df57ca2c9bf5f80d930306e15a851d4d$" + "smartupdate": "$TexturePacker:SmartUpdate:c39ac1d47c8cbe300cffe98bda48c590:b400e0c6286f0e20dfbc383f7453e35b:1ff10b395daf6ebfa377680a6404f816$" } } diff --git a/public/images/trainer/skull_grunt_m.png b/public/images/trainer/skull_grunt_m.png index f2b8acba984..8babb09ec74 100644 Binary files a/public/images/trainer/skull_grunt_m.png and b/public/images/trainer/skull_grunt_m.png differ diff --git a/public/images/trainer/star_grunt_f.json b/public/images/trainer/star_grunt_f.json index e26477e3512..a6b613f44cf 100644 --- a/public/images/trainer/star_grunt_f.json +++ b/public/images/trainer/star_grunt_f.json @@ -14,12 +14,12 @@ "rotated": false, "trimmed": false, "sourceSize": { - "w": 80, - "h": 80 + "w": 30, + "h": 68 }, "spriteSourceSize": { - "x": 24, - "y": 11, + "x": 0, + "y": 0, "w": 30, "h": 68 }, @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:b542a1bdd6995584fc776f75d578b434:f03fddece4494ab59698002fe6671972:c6f0e54e24ec5ffaa711700431b1955e$" + "smartupdate": "$TexturePacker:SmartUpdate:a5493363086a57d0f145cf61c42475de:2e4d3b330bb89e05e93f34d605eee203:c6f0e54e24ec5ffaa711700431b1955e$" } } diff --git a/public/images/trainer/star_grunt_f.png b/public/images/trainer/star_grunt_f.png index 6eb63ae1e03..ee0c25147cc 100644 Binary files a/public/images/trainer/star_grunt_f.png and b/public/images/trainer/star_grunt_f.png differ diff --git a/public/images/trainer/star_grunt_m.json b/public/images/trainer/star_grunt_m.json index bf49e3027e6..ba245e2eeb3 100644 --- a/public/images/trainer/star_grunt_m.json +++ b/public/images/trainer/star_grunt_m.json @@ -4,8 +4,8 @@ "image": "star_grunt_m.png", "format": "RGBA8888", "size": { - "w": 70, - "h": 70 + "w": 64, + "h": 64 }, "scale": 1, "frames": [ @@ -14,20 +14,20 @@ "rotated": false, "trimmed": false, "sourceSize": { - "w": 80, - "h": 80 + "w": 36, + "h": 64 }, "spriteSourceSize": { - "x": 24, - "y": 9, - "w": 31, - "h": 70 + "x": 0, + "y": 0, + "w": 36, + "h": 64 }, "frame": { "x": 0, "y": 0, - "w": 31, - "h": 70 + "w": 36, + "h": 64 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:abc4b0424c37fd55a2bf2e9f5142adce:41a140aa68a1eda61d9a00cab4e07721:a0796711f9e0333796b6629cd43ff8e8$" + "smartupdate": "$TexturePacker:SmartUpdate:11da63c3829d44356a3c26d094212d64:45ebf021548ac0e12b6f25093c5bf0db:a0796711f9e0333796b6629cd43ff8e8$" } } diff --git a/public/images/trainer/star_grunt_m.png b/public/images/trainer/star_grunt_m.png index a69359eda8e..13fd4e88510 100644 Binary files a/public/images/trainer/star_grunt_m.png and b/public/images/trainer/star_grunt_m.png differ diff --git a/public/images/ui/button_tera.json b/public/images/ui/button_tera.json new file mode 100644 index 00000000000..7b64db66ae6 --- /dev/null +++ b/public/images/ui/button_tera.json @@ -0,0 +1,158 @@ +{ "frames": { + "unknown": { + "frame": { "x": 0, "y": 0, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "bug": { + "frame": { "x": 18, "y": 0, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "dark": { + "frame": { "x": 36, "y": 0, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "dragon": { + "frame": { "x": 54, "y": 0, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "electric": { + "frame": { "x": 72, "y": 0, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "fairy": { + "frame": { "x": 0, "y": 21, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "fighting": { + "frame": { "x": 18, "y": 21, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "fire": { + "frame": { "x": 36, "y": 21, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "flying": { + "frame": { "x": 54, "y": 21, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "ghost": { + "frame": { "x": 72, "y": 21, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "grass": { + "frame": { "x": 0, "y": 42, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "ground": { + "frame": { "x": 18, "y": 42, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "ice": { + "frame": { "x": 36, "y": 42, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "normal": { + "frame": { "x": 54, "y": 42, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "poison": { + "frame": { "x": 72, "y": 42, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "psychic": { + "frame": { "x": 0, "y": 63, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "rock": { + "frame": { "x": 18, "y": 63, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "steel": { + "frame": { "x": 36, "y": 63, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "water": { + "frame": { "x": 54, "y": 63, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "stellar": { + "frame": { "x": 72, "y": 63, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + } + }, + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.7-dev", + "image": "button_tera.png", + "format": "RGBA8888", + "size": { "w": 90, "h": 84 }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { "name": "Sprite Sheet", "opacity": 255, "blendMode": "normal" } + ], + "slices": [ + ] + } +} diff --git a/public/images/ui/button_tera.png b/public/images/ui/button_tera.png new file mode 100644 index 00000000000..c9672bafa39 Binary files /dev/null and b/public/images/ui/button_tera.png differ diff --git a/public/images/ui/cursor_tera.png b/public/images/ui/cursor_tera.png new file mode 100644 index 00000000000..34cbe095895 Binary files /dev/null and b/public/images/ui/cursor_tera.png differ diff --git a/public/images/ui/legacy/button_tera.json b/public/images/ui/legacy/button_tera.json new file mode 100644 index 00000000000..7b64db66ae6 --- /dev/null +++ b/public/images/ui/legacy/button_tera.json @@ -0,0 +1,158 @@ +{ "frames": { + "unknown": { + "frame": { "x": 0, "y": 0, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "bug": { + "frame": { "x": 18, "y": 0, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "dark": { + "frame": { "x": 36, "y": 0, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "dragon": { + "frame": { "x": 54, "y": 0, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "electric": { + "frame": { "x": 72, "y": 0, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "fairy": { + "frame": { "x": 0, "y": 21, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "fighting": { + "frame": { "x": 18, "y": 21, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "fire": { + "frame": { "x": 36, "y": 21, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "flying": { + "frame": { "x": 54, "y": 21, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "ghost": { + "frame": { "x": 72, "y": 21, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "grass": { + "frame": { "x": 0, "y": 42, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "ground": { + "frame": { "x": 18, "y": 42, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "ice": { + "frame": { "x": 36, "y": 42, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "normal": { + "frame": { "x": 54, "y": 42, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "poison": { + "frame": { "x": 72, "y": 42, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "psychic": { + "frame": { "x": 0, "y": 63, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "rock": { + "frame": { "x": 18, "y": 63, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "steel": { + "frame": { "x": 36, "y": 63, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "water": { + "frame": { "x": 54, "y": 63, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + }, + "stellar": { + "frame": { "x": 72, "y": 63, "w": 18, "h": 21 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 18, "h": 21 }, + "sourceSize": { "w": 20, "h": 23 } + } + }, + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.7-dev", + "image": "button_tera.png", + "format": "RGBA8888", + "size": { "w": 90, "h": 84 }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { "name": "Sprite Sheet", "opacity": 255, "blendMode": "normal" } + ], + "slices": [ + ] + } +} diff --git a/public/images/ui/legacy/button_tera.png b/public/images/ui/legacy/button_tera.png new file mode 100644 index 00000000000..c9672bafa39 Binary files /dev/null and b/public/images/ui/legacy/button_tera.png differ diff --git a/public/images/ui/legacy/cursor_tera.png b/public/images/ui/legacy/cursor_tera.png new file mode 100644 index 00000000000..f2e77046137 Binary files /dev/null and b/public/images/ui/legacy/cursor_tera.png differ diff --git a/public/images/ui/legacy/mystery_egg.png b/public/images/ui/legacy/mystery_egg.png new file mode 100644 index 00000000000..bb117a137b0 Binary files /dev/null and b/public/images/ui/legacy/mystery_egg.png differ diff --git a/public/images/ui/legacy/normal_memory.png b/public/images/ui/legacy/normal_memory.png new file mode 100644 index 00000000000..ddc22d1d4ab Binary files /dev/null and b/public/images/ui/legacy/normal_memory.png differ diff --git a/public/images/ui/legacy/pokedex_summary_bg.png b/public/images/ui/legacy/pokedex_summary_bg.png new file mode 100644 index 00000000000..690df1547c0 Binary files /dev/null and b/public/images/ui/legacy/pokedex_summary_bg.png differ diff --git a/public/images/ui/legacy/summary_bg.png b/public/images/ui/legacy/summary_bg.png index e4da2dd5da2..c482b5a1bf1 100644 Binary files a/public/images/ui/legacy/summary_bg.png and b/public/images/ui/legacy/summary_bg.png differ diff --git a/public/images/ui/legacy/summary_profile.png b/public/images/ui/legacy/summary_profile.png index 1d184023ca8..77d59dac177 100644 Binary files a/public/images/ui/legacy/summary_profile.png and b/public/images/ui/legacy/summary_profile.png differ diff --git a/public/images/ui/mystery_egg.png b/public/images/ui/mystery_egg.png new file mode 100644 index 00000000000..bb117a137b0 Binary files /dev/null and b/public/images/ui/mystery_egg.png differ diff --git a/public/images/ui/normal_memory.png b/public/images/ui/normal_memory.png new file mode 100644 index 00000000000..ddc22d1d4ab Binary files /dev/null and b/public/images/ui/normal_memory.png differ diff --git a/public/images/ui/pokedex_summary_bg.png b/public/images/ui/pokedex_summary_bg.png new file mode 100644 index 00000000000..92e70bbee27 Binary files /dev/null and b/public/images/ui/pokedex_summary_bg.png differ diff --git a/public/images/ui/summary_bg.png b/public/images/ui/summary_bg.png index b77cdadd2ac..a86a94dd56e 100644 Binary files a/public/images/ui/summary_bg.png and b/public/images/ui/summary_bg.png differ diff --git a/public/images/ui/summary_profile.png b/public/images/ui/summary_profile.png index 38bb5e84dfd..55cc70dc4d0 100644 Binary files a/public/images/ui/summary_profile.png and b/public/images/ui/summary_profile.png differ diff --git a/public/locales b/public/locales index 7ad20e64caa..0e5c6096ba2 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit 7ad20e64caa9367b444712f10036fa9bbe4837a5 +Subproject commit 0e5c6096ba26f6b87aed1aab3fe9b0b23f6cbb7b diff --git a/src/@types/common.ts b/src/@types/common.ts index fcd946656dc..93d88a3b680 100644 --- a/src/@types/common.ts +++ b/src/@types/common.ts @@ -1,3 +1 @@ -import BattleScene from "#app/battle-scene"; - -export type ConditionFn = (scene: BattleScene, args?: any[]) => boolean; +export type ConditionFn = (args?: any[]) => boolean; diff --git a/src/@types/i18next.d.ts b/src/@types/i18next.d.ts index 3bd71bc6c61..0eaa1e6ff0f 100644 --- a/src/@types/i18next.d.ts +++ b/src/@types/i18next.d.ts @@ -1,4 +1,4 @@ -import { TOptions } from "i18next"; +import type { TOptions } from "i18next"; // Module declared to make referencing keys in the localization files type-safe. declare module "i18next" { diff --git a/src/account.ts b/src/account.ts index 316645b38ff..4c86595a5e6 100644 --- a/src/account.ts +++ b/src/account.ts @@ -11,8 +11,8 @@ export function initLoggedInUser(): void { loggedInUser = { username: "Guest", lastSessionSlot: -1, discordId: "", googleId: "", hasAdminRole: false }; } -export function updateUserInfo(): Promise<[boolean, integer]> { - return new Promise<[boolean, integer]>(resolve => { +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; diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 448b47cd385..55ba03f863e 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -1,42 +1,108 @@ import Phaser from "phaser"; import UI from "#app/ui/ui"; -import Pokemon, { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; -import PokemonSpecies, { allSpecies, getPokemonSpecies, PokemonSpeciesFilter } from "#app/data/pokemon-species"; -import { Constructor, isNullOrUndefined, randSeedInt } from "#app/utils"; +import type Pokemon from "#app/field/pokemon"; +import { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; +import type { PokemonSpeciesFilter } from "#app/data/pokemon-species"; +import type PokemonSpecies from "#app/data/pokemon-species"; +import { allSpecies, getPokemonSpecies } from "#app/data/pokemon-species"; +import type { Constructor } from "#app/utils"; +import { isNullOrUndefined, randSeedInt } from "#app/utils"; import * as Utils from "#app/utils"; -import { ConsumableModifier, ConsumablePokemonModifier, DoubleBattleChanceBoosterModifier, ExpBalanceModifier, ExpShareModifier, FusePokemonModifier, HealingBoosterModifier, Modifier, ModifierBar, ModifierPredicate, MultipleParticipantExpBonusModifier, PersistentModifier, PokemonExpBoosterModifier, PokemonFormChangeItemModifier, PokemonHeldItemModifier, PokemonHpRestoreModifier, PokemonIncrementingStatModifier, RememberMoveModifier, TerastallizeModifier, TurnHeldItemTransferModifier } from "./modifier/modifier"; +import type { + Modifier, + ModifierPredicate, + TurnHeldItemTransferModifier, +} from "./modifier/modifier"; +import { + ConsumableModifier, + ConsumablePokemonModifier, + DoubleBattleChanceBoosterModifier, + ExpBalanceModifier, + ExpShareModifier, + FusePokemonModifier, + HealingBoosterModifier, + ModifierBar, + MultipleParticipantExpBonusModifier, + PersistentModifier, + PokemonExpBoosterModifier, + PokemonFormChangeItemModifier, + PokemonHeldItemModifier, + PokemonHpRestoreModifier, + PokemonIncrementingStatModifier, + RememberMoveModifier, +} from "./modifier/modifier"; import { PokeballType } from "#enums/pokeball"; -import { initCommonAnims, initMoveAnim, loadCommonAnimAssets, loadMoveAnimAssets, populateAnims } from "#app/data/battle-anims"; -import { Phase } from "#app/phase"; +import { + initCommonAnims, + initMoveAnim, + loadCommonAnimAssets, + loadMoveAnimAssets, + populateAnims, +} from "#app/data/battle-anims"; +import type { Phase } from "#app/phase"; import { initGameSpeed } from "#app/system/game-speed"; import { Arena, ArenaBase } from "#app/field/arena"; import { GameData } from "#app/system/game-data"; import { addTextObject, getTextColor, TextStyle } from "#app/ui/text"; import { allMoves } from "#app/data/move"; import { MusicPreference } from "#app/system/settings/settings"; -import { getDefaultModifierTypeForTier, getEnemyModifierTypesForWave, getLuckString, getLuckTextTint, getModifierPoolForType, getModifierType, getPartyLuckValue, ModifierPoolType, modifierTypes, PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; +import { + getDefaultModifierTypeForTier, + getEnemyModifierTypesForWave, + getLuckString, + getLuckTextTint, + getModifierPoolForType, + getModifierType, + getPartyLuckValue, + ModifierPoolType, + modifierTypes, + PokemonHeldItemModifierType, +} from "#app/modifier/modifier-type"; import AbilityBar from "#app/ui/ability-bar"; -import { allAbilities, applyAbAttrs, applyPostBattleInitAbAttrs, applyPostItemLostAbAttrs, BlockItemTheftAbAttr, DoubleBattleChanceAbAttr, PostBattleInitAbAttr, PostItemLostAbAttr } from "#app/data/ability"; -import Battle, { BattleType, FixedBattleConfig } from "#app/battle"; -import { GameMode, GameModes, getGameMode } from "#app/game-mode"; +import { + allAbilities, + applyAbAttrs, + applyPostBattleInitAbAttrs, + applyPostItemLostAbAttrs, + BlockItemTheftAbAttr, + DoubleBattleChanceAbAttr, + PostBattleInitAbAttr, + PostItemLostAbAttr, +} from "#app/data/ability"; +import type { FixedBattleConfig } from "#app/battle"; +import Battle, { BattleType } from "#app/battle"; +import type { GameMode } from "#app/game-mode"; +import { GameModes, getGameMode } from "#app/game-mode"; import FieldSpritePipeline from "#app/pipelines/field-sprite"; import SpritePipeline from "#app/pipelines/sprite"; import PartyExpBar from "#app/ui/party-exp-bar"; -import { trainerConfigs, TrainerSlot } from "#app/data/trainer-config"; +import type { TrainerSlot } from "#app/data/trainer-config"; +import { trainerConfigs } from "#app/data/trainer-config"; import Trainer, { TrainerVariant } from "#app/field/trainer"; -import TrainerData from "#app/system/trainer-data"; +import type TrainerData from "#app/system/trainer-data"; import SoundFade from "phaser3-rex-plugins/plugins/soundfade"; import { pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; import PokeballTray from "#app/ui/pokeball-tray"; import InvertPostFX from "#app/pipelines/invert"; -import { Achv, achvs, ModifierAchv, MoneyAchv } from "#app/system/achv"; -import { Voucher, vouchers } from "#app/system/voucher"; +import type { Achv } from "#app/system/achv"; +import { achvs, ModifierAchv, MoneyAchv } from "#app/system/achv"; +import type { Voucher } from "#app/system/voucher"; +import { vouchers } from "#app/system/voucher"; import { Gender } from "#app/data/gender"; -import UIPlugin from "phaser3-rex-plugins/templates/ui/ui-plugin"; +import type UIPlugin from "phaser3-rex-plugins/templates/ui/ui-plugin"; import { addUiThemeOverrides } from "#app/ui/ui-theme"; -import PokemonData from "#app/system/pokemon-data"; +import type PokemonData from "#app/system/pokemon-data"; import { Nature } from "#enums/nature"; -import { FormChangeItem, pokemonFormChanges, SpeciesFormChange, SpeciesFormChangeManualTrigger, SpeciesFormChangeTimeOfDayTrigger, SpeciesFormChangeTrigger } from "#app/data/pokemon-forms"; +import type { + SpeciesFormChange, + SpeciesFormChangeTrigger, +} from "#app/data/pokemon-forms"; +import { + FormChangeItem, + pokemonFormChanges, + SpeciesFormChangeManualTrigger, + SpeciesFormChangeTimeOfDayTrigger, +} from "#app/data/pokemon-forms"; import { FormChangePhase } from "#app/phases/form-change-phase"; import { getTypeRgb } from "#app/data/type"; import { Type } from "#enums/type"; @@ -47,8 +113,9 @@ import PokemonInfoContainer from "#app/ui/pokemon-info-container"; import { biomeDepths, getBiomeName } from "#app/data/balance/biomes"; import { SceneBase } from "#app/scene-base"; import CandyBar from "#app/ui/candy-bar"; -import { Variant, variantColorCache, variantData, VariantSet } from "#app/data/variant"; -import { Localizable } from "#app/interfaces/locales"; +import type { Variant, VariantSet } from "#app/data/variant"; +import { variantColorCache, variantData } from "#app/data/variant"; +import type { Localizable } from "#app/interfaces/locales"; import Overrides from "#app/overrides"; import { InputsController } from "#app/inputs-controller"; import { UiInputs } from "#app/ui-inputs"; @@ -58,14 +125,14 @@ import { EaseType } from "#enums/ease-type"; import { BattleSpec } from "#enums/battle-spec"; import { BattleStyle } from "#enums/battle-style"; import { Biome } from "#enums/biome"; -import { ExpNotification } from "#enums/exp-notification"; +import type { ExpNotification } from "#enums/exp-notification"; import { MoneyFormat } from "#enums/money-format"; import { Moves } from "#enums/moves"; import { PlayerGender } from "#enums/player-gender"; import { Species } from "#enums/species"; import { UiTheme } from "#enums/ui-theme"; import { TimedEventManager } from "#app/timed-event-manager"; -import { PokemonAnimType } from "#enums/pokemon-anim-type"; +import type { PokemonAnimType } from "#enums/pokemon-anim-type"; import i18next from "i18next"; import { TrainerType } from "#enums/trainer-type"; import { battleSpecDialogue } from "#app/data/dialogue"; @@ -88,11 +155,18 @@ import { ToggleDoublePositionPhase } from "#app/phases/toggle-double-position-ph import { TurnInitPhase } from "#app/phases/turn-init-phase"; import { ShopCursorTarget } from "#app/enums/shop-cursor-target"; import MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; -import { allMysteryEncounters, ANTI_VARIANCE_WEIGHT_MODIFIER, AVERAGE_ENCOUNTERS_PER_RUN_TARGET, BASE_MYSTERY_ENCOUNTER_SPAWN_WEIGHT, MYSTERY_ENCOUNTER_SPAWN_MAX_WEIGHT, mysteryEncountersByBiome } from "#app/data/mystery-encounters/mystery-encounters"; +import { + allMysteryEncounters, + ANTI_VARIANCE_WEIGHT_MODIFIER, + AVERAGE_ENCOUNTERS_PER_RUN_TARGET, + BASE_MYSTERY_ENCOUNTER_SPAWN_WEIGHT, + MYSTERY_ENCOUNTER_SPAWN_MAX_WEIGHT, + mysteryEncountersByBiome, +} from "#app/data/mystery-encounters/mystery-encounters"; import { MysteryEncounterSaveData } from "#app/data/mystery-encounters/mystery-encounter-save-data"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; -import HeldModifierConfig from "#app/interfaces/held-modifier-config"; +import type HeldModifierConfig from "#app/interfaces/held-modifier-config"; import { ExpPhase } from "#app/phases/exp-phase"; import { ShowPartyExpBarPhase } from "#app/phases/show-party-exp-bar-phase"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; @@ -100,16 +174,17 @@ import { ExpGainsSpeed } from "#enums/exp-gains-speed"; import { BattlerTagType } from "#enums/battler-tag-type"; import { FRIENDSHIP_GAIN_FROM_BATTLE } from "#app/data/balance/starters"; import { StatusEffect } from "#enums/status-effect"; +import { initGlobalScene } from "#app/global-scene"; export const bypassLogin = import.meta.env.VITE_BYPASS_LOGIN === "1"; const DEBUG_RNG = false; -const OPP_IVS_OVERRIDE_VALIDATED : integer[] = ( - Array.isArray(Overrides.OPP_IVS_OVERRIDE) ? - Overrides.OPP_IVS_OVERRIDE : - new Array(6).fill(Overrides.OPP_IVS_OVERRIDE) -).map(iv => isNaN(iv) || iv === null || iv > 31 ? -1 : iv); +const OPP_IVS_OVERRIDE_VALIDATED: number[] = ( + Array.isArray(Overrides.OPP_IVS_OVERRIDE) + ? Overrides.OPP_IVS_OVERRIDE + : new Array(6).fill(Overrides.OPP_IVS_OVERRIDE) +).map((iv) => (isNaN(iv) || iv === null || iv > 31 ? -1 : iv)); export const startingWave = Overrides.STARTING_WAVE_OVERRIDE || 1; @@ -117,18 +192,21 @@ const expSpriteKeys: string[] = []; export let starterColors: StarterColors; interface StarterColors { - [key: string]: [string, string] + [key: string]: [string, string]; } export interface PokeballCounts { - [pb: string]: integer; + [pb: string]: number; } -export type AnySound = Phaser.Sound.WebAudioSound | Phaser.Sound.HTML5AudioSound | Phaser.Sound.NoAudioSound; +export type AnySound = + | Phaser.Sound.WebAudioSound + | Phaser.Sound.HTML5AudioSound + | Phaser.Sound.NoAudioSound; export interface InfoToggle { - toggleInfo(force?: boolean): void; - isActive(): boolean; + toggleInfo(force?: boolean): void; + isActive(): boolean; } export default class BattleScene extends SceneBase { @@ -136,23 +214,26 @@ export default class BattleScene extends SceneBase { public inputController: InputsController; public uiInputs: UiInputs; - public sessionPlayTime: integer | null = null; - public lastSavePlayTime: integer | null = null; + public sessionPlayTime: number | null = null; + public lastSavePlayTime: number | null = null; public masterVolume: number = 0.5; public bgmVolume: number = 1; public fieldVolume: number = 1; public seVolume: number = 1; public uiVolume: number = 1; - public gameSpeed: integer = 1; - public damageNumbersMode: integer = 0; + public gameSpeed: number = 1; + public damageNumbersMode: number = 0; public reroll: boolean = false; public shopCursorTarget: number = ShopCursorTarget.REWARDS; + public commandCursorMemory: boolean = false; + public dexForDevs: boolean = false; public showMovesetFlyout: boolean = true; public showArenaFlyout: boolean = true; public showTimeOfDayWidget: boolean = true; public timeOfDayAnimation: EaseType = EaseType.NONE; public showLevelUpStats: boolean = true; - public enableTutorials: boolean = import.meta.env.VITE_BYPASS_TUTORIAL === "1"; + public enableTutorials: boolean = + import.meta.env.VITE_BYPASS_TUTORIAL === "1"; public enableMoveInfo: boolean = true; public enableRetries: boolean = false; public hideIvs: boolean = false; @@ -162,18 +243,18 @@ export default class BattleScene extends SceneBase { * - 1 = 'Passives Only' * - 2 = 'On' */ - public candyUpgradeNotification: integer = 0; + public candyUpgradeNotification: number = 0; /** * Determines what type of notification is used for Candy Upgrades * - 0 = 'Icon' * - 1 = 'Animation' */ - public candyUpgradeDisplay: integer = 0; + public candyUpgradeDisplay: number = 0; public moneyFormat: MoneyFormat = MoneyFormat.NORMAL; public uiTheme: UiTheme = UiTheme.DEFAULT; - public windowType: integer = 0; + public windowType: number = 0; public experimentalSprites: boolean = false; - public musicPreference: number = MusicPreference.MIXED; + public musicPreference: number = MusicPreference.ALLGENS; public moveAnimations: boolean = true; public expGainsSpeed: ExpGainsSpeed = ExpGainsSpeed.DEFAULT; public skipSeenDialogues: boolean = false; @@ -186,19 +267,19 @@ export default class BattleScene extends SceneBase { public eggSkipPreference: number = 0; /** - * Defines the experience gain display mode. - * - * @remarks - * The `expParty` can have several modes: - * - `0` - Default: The normal experience gain display, nothing changed. - * - `1` - Level Up Notification: Displays the level up in the small frame instead of a message. - * - `2` - Skip: No level up frame nor message. - * - * Modes `1` and `2` are still compatible with stats display, level up, new move, etc. - * @default 0 - Uses the default normal experience gain display. - */ + * Defines the experience gain display mode. + * + * @remarks + * The `expParty` can have several modes: + * - `0` - Default: The normal experience gain display, nothing changed. + * - `1` - Level Up Notification: Displays the level up in the small frame instead of a message. + * - `2` - Skip: No level up frame nor message. + * + * Modes `1` and `2` are still compatible with stats display, level up, new move, etc. + * @default 0 - Uses the default normal experience gain display. + */ public expParty: ExpNotification = 0; - public hpBarSpeed: integer = 0; + public hpBarSpeed: number = 0; public fusionPaletteSwaps: boolean = true; public enableTouchControls: boolean = false; public enableVibration: boolean = false; @@ -209,19 +290,19 @@ export default class BattleScene extends SceneBase { * - 0 = 'Switch' * - 1 = 'Set' - The option to switch the active pokemon at the start of a battle will not display. */ - public battleStyle: integer = BattleStyle.SWITCH; + public battleStyle: number = BattleStyle.SWITCH; /** - * Defines whether or not to show type effectiveness hints - * - true: No hints - * - false: Show hints for moves + * Defines whether or not to show type effectiveness hints + * - true: No hints + * - false: Show hints for moves */ public typeHints: boolean = false; public disableMenu: boolean = false; public gameData: GameData; - public sessionSlotId: integer; + public sessionSlotId: number; /** PhaseQueue: dequeue/remove the first element to get the next phase */ public phaseQueue: Phase[]; @@ -230,7 +311,7 @@ export default class BattleScene extends SceneBase { private phaseQueuePrepend: Phase[]; /** overrides default of inserting phases to end of phaseQueuePrepend array, useful or inserting Phases "out of order" */ - private phaseQueuePrependSpliceIndex: integer; + private phaseQueuePrependSpliceIndex: number; private nextCommandPhaseQueue: Phase[]; private currentPhase: Phase | null; @@ -251,17 +332,18 @@ export default class BattleScene extends SceneBase { public arenaNextEnemy: ArenaBase; public arena: Arena; public gameMode: GameMode; - public score: integer; + public score: number; public lockModifierTiers: boolean; public trainer: Phaser.GameObjects.Sprite; public lastEnemyTrainer: Trainer | null; public currentBattle: Battle; public pokeballCounts: PokeballCounts; - public money: integer; + public money: number; public pokemonInfoContainer: PokemonInfoContainer; private party: PlayerPokemon[]; /** Session save data that pertains to Mystery Encounters */ - public mysteryEncounterSaveData: MysteryEncounterSaveData = new MysteryEncounterSaveData(); + public mysteryEncounterSaveData: MysteryEncounterSaveData = + new MysteryEncounterSaveData(); /** If the previous wave was a MysteryEncounter, tracks the object with this variable. Mostly used for visual object cleanup */ public lastMysteryEncounter?: MysteryEncounter; /** Combined Biome and Wave count text */ @@ -277,7 +359,7 @@ export default class BattleScene extends SceneBase { private fieldOverlay: Phaser.GameObjects.Rectangle; private shopOverlay: Phaser.GameObjects.Rectangle; private shopOverlayShown: boolean = false; - private shopOverlayOpacity: number = .8; + private shopOverlayOpacity: number = 0.8; public modifiers: PersistentModifier[]; private enemyModifiers: PersistentModifier[]; @@ -286,7 +368,7 @@ export default class BattleScene extends SceneBase { public seed: string; public waveSeed: string; - public waveCycleOffset: integer; + public waveCycleOffset: number; public offsetGym: boolean; public damageNumberHandler: DamageNumberHandler; @@ -300,9 +382,9 @@ export default class BattleScene extends SceneBase { private bgmCache: Set = new Set(); private playTimeTimer: Phaser.Time.TimerEvent; - public rngCounter: integer = 0; + public rngCounter: number = 0; public rngSeedOverride: string = ""; - public rngOffset: integer = 0; + public rngOffset: number = 0; public inputMethod: string; private infoToggles: InfoToggle[] = []; @@ -329,6 +411,7 @@ export default class BattleScene extends SceneBase { this.nextCommandPhaseQueue = []; this.eventManager = new TimedEventManager(); this.updateGameInfo(); + initGlobalScene(this); } loadPokemonAtlas(key: string, atlasPath: string, experimental?: boolean) { @@ -342,46 +425,68 @@ export default class BattleScene extends SceneBase { if (variant) { atlasPath = atlasPath.replace("variant/", ""); } - this.load.atlas(key, `images/pokemon/${variant ? "variant/" : ""}${experimental ? "exp/" : ""}${atlasPath}.png`, `images/pokemon/${variant ? "variant/" : ""}${experimental ? "exp/" : ""}${atlasPath}.json`); + this.load.atlas( + key, + `images/pokemon/${variant ? "variant/" : ""}${experimental ? "exp/" : ""}${atlasPath}.png`, + `images/pokemon/${variant ? "variant/" : ""}${experimental ? "exp/" : ""}${atlasPath}.json`, + ); } /** * Load the variant assets for the given sprite and stores them in {@linkcode variantColorCache} */ - loadPokemonVariantAssets(spriteKey: string, fileRoot: string, variant?: Variant) { - const useExpSprite = this.experimentalSprites && this.hasExpSprite(spriteKey); + public async loadPokemonVariantAssets( + spriteKey: string, + fileRoot: string, + variant?: Variant, + ): Promise { + const useExpSprite = + this.experimentalSprites && this.hasExpSprite(spriteKey); if (useExpSprite) { fileRoot = `exp/${fileRoot}`; } let variantConfig = variantData; - fileRoot.split("/").map(p => variantConfig ? variantConfig = variantConfig[p] : null); + fileRoot + .split("/") + .map((p) => (variantConfig ? (variantConfig = variantConfig[p]) : null)); const variantSet = variantConfig as VariantSet; - if (variantSet && (variant !== undefined && variantSet[variant] === 1)) { - const populateVariantColors = (key: string): Promise => { - return new Promise(resolve => { - if (variantColorCache.hasOwnProperty(key)) { - return resolve(); - } - this.cachedFetch(`./images/pokemon/variant/${fileRoot}.json`).then(res => res.json()).then(c => { - variantColorCache[key] = c; + + return new Promise((resolve) => { + if (variantSet && variant !== undefined && variantSet[variant] === 1) { + if (variantColorCache.hasOwnProperty(spriteKey)) { + return resolve(); + } + this.cachedFetch(`./images/pokemon/variant/${fileRoot}.json`) + .then((res) => res.json()) + .then((c) => { + variantColorCache[spriteKey] = c; resolve(); }); - }); - }; - populateVariantColors(spriteKey); - } + } else { + resolve(); + } + }); } async preload() { if (DEBUG_RNG) { - const scene = this; const originalRealInRange = Phaser.Math.RND.realInRange; - Phaser.Math.RND.realInRange = function (min: number, max: number): number { + Phaser.Math.RND.realInRange = function ( + min: number, + max: number, + ): number { const ret = originalRealInRange.apply(this, [ min, max ]); - const args = [ "RNG", ++scene.rngCounter, ret / (max - min), `min: ${min} / max: ${max}` ]; - args.push(`seed: ${scene.rngSeedOverride || scene.waveSeed || scene.seed}`); - if (scene.rngOffset) { - args.push(`offset: ${scene.rngOffset}`); + const args = [ + "RNG", + ++this.rngCounter, + ret / (max - min), + `min: ${min} / max: ${max}`, + ]; + args.push( + `seed: ${this.rngSeedOverride || this.waveSeed || this.seed}`, + ); + if (this.rngOffset) { + args.push(`offset: ${this.rngOffset}`); } console.log(...args); return ret; @@ -396,20 +501,26 @@ export default class BattleScene extends SceneBase { create() { this.scene.remove(LoadingScene.KEY); initGameSpeed.apply(this); - this.inputController = new InputsController(this); - this.uiInputs = new UiInputs(this, this.inputController); + this.inputController = new InputsController(); + this.uiInputs = new UiInputs(this.inputController); - this.gameData = new GameData(this); + this.gameData = new GameData(); - addUiThemeOverrides(this); + addUiThemeOverrides(); this.load.setBaseURL(); this.spritePipeline = new SpritePipeline(this.game); - (this.renderer as Phaser.Renderer.WebGL.WebGLRenderer).pipelines.add("Sprite", this.spritePipeline); + (this.renderer as Phaser.Renderer.WebGL.WebGLRenderer).pipelines.add( + "Sprite", + this.spritePipeline, + ); this.fieldSpritePipeline = new FieldSpritePipeline(this.game); - (this.renderer as Phaser.Renderer.WebGL.WebGLRenderer).pipelines.add("FieldSprite", this.fieldSpritePipeline); + (this.renderer as Phaser.Renderer.WebGL.WebGLRenderer).pipelines.add( + "FieldSprite", + this.fieldSpritePipeline, + ); this.launchBattle(); } @@ -424,7 +535,7 @@ export default class BattleScene extends SceneBase { this.arenaBgTransition = this.add.sprite(0, 0, "plains_bg"); this.arenaBgTransition.setName("sprite-arena-bg-transition"); - [ this.arenaBgTransition, this.arenaBg ].forEach(a => { + [ this.arenaBgTransition, this.arenaBg ].forEach((a) => { a.setPipeline(this.fieldSpritePipeline); a.setScale(6); a.setOrigin(0); @@ -444,13 +555,16 @@ export default class BattleScene extends SceneBase { this.fieldUI = fieldUI; - const transition = this.make.rexTransitionImagePack({ - x: 0, - y: 0, - scale: 6, - key: "loading_bg", - origin: { x: 0, y: 0 } - }, true); + const transition = this.make.rexTransitionImagePack( + { + x: 0, + y: 0, + scale: 6, + key: "loading_bg", + origin: { x: 0, y: 0 }, + }, + true, + ); //@ts-ignore (the defined types in the package are incromplete...) transition.transit({ @@ -472,14 +586,26 @@ export default class BattleScene extends SceneBase { this.uiContainer = uiContainer; const overlayWidth = this.game.canvas.width / 6; - const overlayHeight = (this.game.canvas.height / 6) - 48; - this.fieldOverlay = this.add.rectangle(0, overlayHeight * -1 - 48, overlayWidth, overlayHeight, 0x424242); + const overlayHeight = this.game.canvas.height / 6 - 48; + this.fieldOverlay = this.add.rectangle( + 0, + overlayHeight * -1 - 48, + overlayWidth, + overlayHeight, + 0x424242, + ); this.fieldOverlay.setName("rect-field-overlay"); this.fieldOverlay.setOrigin(0, 0); this.fieldOverlay.setAlpha(0); this.fieldUI.add(this.fieldOverlay); - this.shopOverlay = this.add.rectangle(0, overlayHeight * -1 - 48, overlayWidth, overlayHeight, 0x070707); + this.shopOverlay = this.add.rectangle( + 0, + overlayHeight * -1 - 48, + overlayWidth, + overlayHeight, + 0x070707, + ); this.shopOverlay.setName("rect-shop-overlay"); this.shopOverlay.setOrigin(0, 0); this.shopOverlay.setAlpha(0); @@ -488,87 +614,121 @@ export default class BattleScene extends SceneBase { this.modifiers = []; this.enemyModifiers = []; - this.modifierBar = new ModifierBar(this); + this.modifierBar = new ModifierBar(); this.modifierBar.setName("modifier-bar"); this.add.existing(this.modifierBar); uiContainer.add(this.modifierBar); - this.enemyModifierBar = new ModifierBar(this, true); + this.enemyModifierBar = new ModifierBar(true); this.enemyModifierBar.setName("enemy-modifier-bar"); this.add.existing(this.enemyModifierBar); uiContainer.add(this.enemyModifierBar); - this.charSprite = new CharSprite(this); + this.charSprite = new CharSprite(); this.charSprite.setName("sprite-char"); this.charSprite.setup(); this.fieldUI.add(this.charSprite); - this.pbTray = new PokeballTray(this, true); + this.pbTray = new PokeballTray(true); this.pbTray.setName("pb-tray"); this.pbTray.setup(); - this.pbTrayEnemy = new PokeballTray(this, false); + this.pbTrayEnemy = new PokeballTray(false); this.pbTrayEnemy.setName("enemy-pb-tray"); this.pbTrayEnemy.setup(); this.fieldUI.add(this.pbTray); this.fieldUI.add(this.pbTrayEnemy); - this.abilityBar = new AbilityBar(this); + this.abilityBar = new AbilityBar(); this.abilityBar.setName("ability-bar"); this.abilityBar.setup(); this.fieldUI.add(this.abilityBar); - this.partyExpBar = new PartyExpBar(this); + this.partyExpBar = new PartyExpBar(); this.partyExpBar.setName("party-exp-bar"); this.partyExpBar.setup(); this.fieldUI.add(this.partyExpBar); - this.candyBar = new CandyBar(this); + this.candyBar = new CandyBar(); this.candyBar.setName("candy-bar"); this.candyBar.setup(); this.fieldUI.add(this.candyBar); - this.biomeWaveText = addTextObject(this, (this.game.canvas.width / 6) - 2, 0, startingWave.toString(), TextStyle.BATTLE_INFO); + this.biomeWaveText = addTextObject( + this.game.canvas.width / 6 - 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, (this.game.canvas.width / 6) - 2, 0, "", TextStyle.MONEY); + this.moneyText = addTextObject( + this.game.canvas.width / 6 - 2, + 0, + "", + TextStyle.MONEY, + ); this.moneyText.setName("text-money"); this.moneyText.setOrigin(1, 0.5); this.fieldUI.add(this.moneyText); - this.scoreText = addTextObject(this, (this.game.canvas.width / 6) - 2, 0, "", TextStyle.PARTY, { fontSize: "54px" }); + this.scoreText = addTextObject( + this.game.canvas.width / 6 - 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, (this.game.canvas.width / 6) - 2, 0, "", TextStyle.PARTY, { fontSize: "54px" }); + this.luckText = addTextObject( + this.game.canvas.width / 6 - 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, (this.game.canvas.width / 6) - 2, 0, i18next.t("common:luckIndicator"), TextStyle.PARTY, { fontSize: "54px" }); + this.luckLabelText = addTextObject( + this.game.canvas.width / 6 - 2, + 0, + i18next.t("common:luckIndicator"), + TextStyle.PARTY, + { fontSize: "54px" }, + ); this.luckLabelText.setName("text-luck-label"); this.luckLabelText.setOrigin(1, 0.5); this.luckLabelText.setVisible(false); this.fieldUI.add(this.luckLabelText); - this.arenaFlyout = new ArenaFlyout(this); + this.arenaFlyout = new ArenaFlyout(); this.fieldUI.add(this.arenaFlyout); - this.fieldUI.moveBelow(this.arenaFlyout, this.fieldOverlay); + this.fieldUI.moveBelow( + this.arenaFlyout, + this.fieldOverlay, + ); this.updateUIPositions(); this.damageNumberHandler = new DamageNumberHandler(); this.spriteSparkleHandler = new PokemonSpriteSparkleHandler(); - this.spriteSparkleHandler.setup(this); + this.spriteSparkleHandler.setup(); - this.pokemonInfoContainer = new PokemonInfoContainer(this, (this.game.canvas.width / 6) + 52, -(this.game.canvas.height / 6) + 66); + this.pokemonInfoContainer = new PokemonInfoContainer( + this.game.canvas.width / 6 + 52, + -(this.game.canvas.height / 6) + 66, + ); this.pokemonInfoContainer.setup(); this.fieldUI.add(this.pokemonInfoContainer); @@ -577,27 +737,36 @@ export default class BattleScene extends SceneBase { const loadPokemonAssets = []; - this.arenaPlayer = new ArenaBase(this, true); + this.arenaPlayer = new ArenaBase(true); this.arenaPlayer.setName("arena-player"); - this.arenaPlayerTransition = new ArenaBase(this, true); + this.arenaPlayerTransition = new ArenaBase(true); this.arenaPlayerTransition.setName("arena-player-transition"); - this.arenaEnemy = new ArenaBase(this, false); + this.arenaEnemy = new ArenaBase(false); this.arenaEnemy.setName("arena-enemy"); - this.arenaNextEnemy = new ArenaBase(this, false); + this.arenaNextEnemy = new ArenaBase(false); this.arenaNextEnemy.setName("arena-next-enemy"); this.arenaBgTransition.setVisible(false); this.arenaPlayerTransition.setVisible(false); this.arenaNextEnemy.setVisible(false); - [ this.arenaPlayer, this.arenaPlayerTransition, this.arenaEnemy, this.arenaNextEnemy ].forEach(a => { + [ + this.arenaPlayer, + this.arenaPlayerTransition, + this.arenaEnemy, + this.arenaNextEnemy, + ].forEach((a) => { if (a instanceof Phaser.GameObjects.Sprite) { a.setOrigin(0, 0); } field.add(a); }); - const trainer = this.addFieldSprite(0, 0, `trainer_${this.gameData.gender === PlayerGender.FEMALE ? "f" : "m"}_back`); + const trainer = this.addFieldSprite( + 0, + 0, + `trainer_${this.gameData.gender === PlayerGender.FEMALE ? "f" : "m"}_back`, + ); trainer.setOrigin(0.5, 1); trainer.setName("sprite-trainer"); @@ -610,37 +779,49 @@ export default class BattleScene extends SceneBase { frames: this.anims.generateFrameNumbers("prompt", { start: 1, end: 4 }), frameRate: 6, repeat: -1, - showOnStart: true + showOnStart: true, }); this.anims.create({ key: "tera_sparkle", - frames: this.anims.generateFrameNumbers("tera_sparkle", { start: 0, end: 12 }), + frames: this.anims.generateFrameNumbers("tera_sparkle", { + start: 0, + end: 12, + }), frameRate: 18, repeat: 0, showOnStart: true, - hideOnComplete: true + hideOnComplete: true, }); this.reset(false, false, true); - const ui = new UI(this); + const ui = new UI(); this.uiContainer.add(ui); this.ui = ui; ui.setup(); - const defaultMoves = [ Moves.TACKLE, Moves.TAIL_WHIP, Moves.FOCUS_ENERGY, Moves.STRUGGLE ]; + const defaultMoves = [ + Moves.TACKLE, + Moves.TAIL_WHIP, + Moves.FOCUS_ENERGY, + Moves.STRUGGLE, + ]; Promise.all([ Promise.all(loadPokemonAssets), - initCommonAnims(this).then(() => loadCommonAnimAssets(this, true)), - Promise.all([ Moves.TACKLE, Moves.TAIL_WHIP, Moves.FOCUS_ENERGY, Moves.STRUGGLE ].map(m => initMoveAnim(this, m))).then(() => loadMoveAnimAssets(this, defaultMoves, true)), - this.initStarterColors() + initCommonAnims().then(() => loadCommonAnimAssets(true)), + Promise.all( + [ Moves.TACKLE, Moves.TAIL_WHIP, Moves.FOCUS_ENERGY, Moves.STRUGGLE ].map( + (m) => initMoveAnim(m), + ), + ).then(() => loadMoveAnimAssets(defaultMoves, true)), + this.initStarterColors(), ]).then(() => { - this.pushPhase(new LoginPhase(this)); - this.pushPhase(new TitlePhase(this)); + this.pushPhase(new LoginPhase()); + this.pushPhase(new TitlePhase()); this.shiftPhase(); }); @@ -671,7 +852,7 @@ export default class BattleScene extends SceneBase { if (this.lastSavePlayTime !== null) { this.lastSavePlayTime++; } - } + }, }); this.updateBiomeWaveText(); @@ -683,29 +864,35 @@ export default class BattleScene extends SceneBase { if (expSpriteKeys.length) { return; } - this.cachedFetch("./exp-sprites.json").then(res => res.json()).then(keys => { - if (Array.isArray(keys)) { - expSpriteKeys.push(...keys); - } - Promise.resolve(); - }); + this.cachedFetch("./exp-sprites.json") + .then((res) => res.json()) + .then((keys) => { + if (Array.isArray(keys)) { + expSpriteKeys.push(...keys); + } + Promise.resolve(); + }); } async initVariantData(): Promise { - Object.keys(variantData).forEach(key => delete variantData[key]); - await this.cachedFetch("./images/pokemon/variant/_masterlist.json").then(res => res.json()) - .then(v => { - Object.keys(v).forEach(k => variantData[k] = v[k]); + Object.keys(variantData).forEach((key) => delete variantData[key]); + await this.cachedFetch("./images/pokemon/variant/_masterlist.json") + .then((res) => res.json()) + .then((v) => { + Object.keys(v).forEach((k) => (variantData[k] = v[k])); if (this.experimentalSprites) { const expVariantData = variantData["exp"]; const traverseVariantData = (keys: string[]) => { let variantTree = variantData; let expTree = expVariantData; - keys.map((k: string, i: integer) => { + keys.map((k: string, i: number) => { if (i < keys.length - 1) { variantTree = variantTree[k]; expTree = expTree[k]; - } else if (variantTree.hasOwnProperty(k) && expTree.hasOwnProperty(k)) { + } else if ( + variantTree.hasOwnProperty(k) && + expTree.hasOwnProperty(k) + ) { if ([ "back", "female" ].includes(k)) { traverseVariantData(keys.concat(k)); } else { @@ -714,7 +901,9 @@ export default class BattleScene extends SceneBase { } }); }; - Object.keys(expVariantData).forEach(ek => traverseVariantData([ ek ])); + Object.keys(expVariantData).forEach((ek) => + traverseVariantData([ ek ]), + ); } Promise.resolve(); }); @@ -732,18 +921,20 @@ export default class BattleScene extends SceneBase { } initStarterColors(): Promise { - return new Promise(resolve => { + return new Promise((resolve) => { if (starterColors) { return resolve(); } - this.cachedFetch("./starter-colors.json").then(res => res.json()).then(sc => { - starterColors = {}; - Object.keys(sc).forEach(key => { - starterColors[key] = sc[key]; - }); + this.cachedFetch("./starter-colors.json") + .then((res) => res.json()) + .then((sc) => { + starterColors = {}; + Object.keys(sc).forEach((key) => { + starterColors[key] = sc[key]; + }); - /*const loadPokemonAssets: Promise[] = []; + /*const loadPokemonAssets: Promise[] = []; for (let s of Object.keys(speciesStarters)) { const species = getPokemonSpecies(parseInt(s)); @@ -765,13 +956,16 @@ export default class BattleScene extends SceneBase { resolve(); });*/ - resolve(); - }); + resolve(); + }); }); } hasExpSprite(key: string): boolean { - const keyMatch = /^pkmn__?(back__)?(shiny__)?(female__)?(\d+)(\-.*?)?(?:_[1-3])?$/g.exec(key); + const keyMatch = + /^pkmn__?(back__)?(shiny__)?(female__)?(\d+)(\-.*?)?(?:_[1-3])?$/g.exec( + key, + ); if (!keyMatch) { return false; } @@ -804,7 +998,7 @@ export default class BattleScene extends SceneBase { * that are {@linkcode Pokemon.isAllowedInBattle | allowed in battle}. */ public getPokemonAllowedInBattle(): PlayerPokemon[] { - return this.getPlayerParty().filter(p => p.isAllowedInBattle()); + return this.getPlayerParty().filter((p) => p.isAllowedInBattle()); } /** @@ -814,8 +1008,12 @@ export default class BattleScene extends SceneBase { * or `undefined` if there are no valid pokemon * @param includeSwitching Whether a pokemon that is currently switching out is valid, default `true` */ - public getPlayerPokemon(includeSwitching: boolean = true): PlayerPokemon | undefined { - return this.getPlayerField().find(p => p.isActive() && (includeSwitching || p.switchOutStatus === false)); + public getPlayerPokemon( + includeSwitching: boolean = true, + ): PlayerPokemon | undefined { + return this.getPlayerField().find( + (p) => p.isActive() && (includeSwitching || p.switchOutStatus === false), + ); } /** @@ -825,7 +1023,10 @@ export default class BattleScene extends SceneBase { */ public getPlayerField(): PlayerPokemon[] { const party = this.getPlayerParty(); - return party.slice(0, Math.min(party.length, this.currentBattle?.double ? 2 : 1)); + return party.slice( + 0, + Math.min(party.length, this.currentBattle?.double ? 2 : 1), + ); } public getEnemyParty(): EnemyPokemon[] { @@ -839,8 +1040,12 @@ export default class BattleScene extends SceneBase { * or `undefined` if there are no valid pokemon * @param includeSwitching Whether a pokemon that is currently switching out is valid, default `true` */ - public getEnemyPokemon(includeSwitching: boolean = true): EnemyPokemon | undefined { - return this.getEnemyField().find(p => p.isActive() && (includeSwitching || p.switchOutStatus === false)); + public getEnemyPokemon( + includeSwitching: boolean = true, + ): EnemyPokemon | undefined { + return this.getEnemyField().find( + (p) => p.isActive() && (includeSwitching || p.switchOutStatus === false), + ); } /** @@ -850,18 +1055,25 @@ export default class BattleScene extends SceneBase { */ public getEnemyField(): EnemyPokemon[] { const party = this.getEnemyParty(); - return party.slice(0, Math.min(party.length, this.currentBattle?.double ? 2 : 1)); + return party.slice( + 0, + Math.min(party.length, this.currentBattle?.double ? 2 : 1), + ); } + /** + * Returns an array of Pokemon on both sides of the battle - player first, then enemy. + * Does not actually check if the pokemon are on the field or not, and always has length 4 regardless of battle type. + * @param activeOnly Whether to consider only active pokemon + * @returns array of {@linkcode Pokemon} + */ public getField(activeOnly: boolean = false): Pokemon[] { const ret = new Array(4).fill(null); const playerField = this.getPlayerField(); const enemyField = this.getEnemyField(); ret.splice(0, playerField.length, ...playerField); ret.splice(2, enemyField.length, ...enemyField); - return activeOnly - ? ret.filter(p => p?.isActive()) - : ret; + return activeOnly ? ret.filter((p) => p?.isActive()) : ret; } /** @@ -877,8 +1089,17 @@ export default class BattleScene extends SceneBase { if (allyPokemon?.isActive(true)) { let targetingMovePhase: MovePhase; do { - targetingMovePhase = this.findPhase(mp => mp instanceof MovePhase && mp.targets.length === 1 && mp.targets[0] === removedPokemon.getBattlerIndex() && mp.pokemon.isPlayer() !== allyPokemon.isPlayer()) as MovePhase; - if (targetingMovePhase && targetingMovePhase.targets[0] !== allyPokemon.getBattlerIndex()) { + targetingMovePhase = this.findPhase( + (mp) => + mp instanceof MovePhase && + mp.targets.length === 1 && + mp.targets[0] === removedPokemon.getBattlerIndex() && + mp.pokemon.isPlayer() !== allyPokemon.isPlayer(), + ) as MovePhase; + if ( + targetingMovePhase && + targetingMovePhase.targets[0] !== allyPokemon.getBattlerIndex() + ) { targetingMovePhase.targets[0] = allyPokemon.getBattlerIndex(); } } while (targetingMovePhase); @@ -901,16 +1122,46 @@ export default class BattleScene extends SceneBase { // return the stored info toggles; used by ui-inputs getInfoToggles(activeOnly: boolean = false): InfoToggle[] { - return activeOnly ? this.infoToggles.filter(t => t?.isActive()) : this.infoToggles; + return activeOnly + ? this.infoToggles.filter((t) => t?.isActive()) + : this.infoToggles; } - getPokemonById(pokemonId: integer): Pokemon | null { - const findInParty = (party: Pokemon[]) => party.find(p => p.id === pokemonId); - return (findInParty(this.getPlayerParty()) || findInParty(this.getEnemyParty())) ?? null; + getPokemonById(pokemonId: number): Pokemon | null { + const findInParty = (party: Pokemon[]) => + party.find((p) => p.id === pokemonId); + return ( + (findInParty(this.getPlayerParty()) || + findInParty(this.getEnemyParty())) ?? + null + ); } - addPlayerPokemon(species: PokemonSpecies, level: integer, abilityIndex?: integer, formIndex?: integer, gender?: Gender, shiny?: boolean, variant?: Variant, ivs?: integer[], nature?: Nature, dataSource?: Pokemon | PokemonData, postProcess?: (playerPokemon: PlayerPokemon) => void): PlayerPokemon { - const pokemon = new PlayerPokemon(this, species, level, abilityIndex, formIndex, gender, shiny, variant, ivs, nature, dataSource); + addPlayerPokemon( + species: PokemonSpecies, + level: number, + abilityIndex?: number, + formIndex?: number, + gender?: Gender, + shiny?: boolean, + variant?: Variant, + ivs?: number[], + nature?: Nature, + dataSource?: Pokemon | PokemonData, + postProcess?: (playerPokemon: PlayerPokemon) => void, + ): PlayerPokemon { + const pokemon = new PlayerPokemon( + species, + level, + abilityIndex, + formIndex, + gender, + shiny, + variant, + ivs, + nature, + dataSource, + ); if (postProcess) { postProcess(pokemon); } @@ -918,17 +1169,37 @@ export default class BattleScene extends SceneBase { return pokemon; } - addEnemyPokemon(species: PokemonSpecies, level: integer, trainerSlot: TrainerSlot, boss: boolean = false, shinyLock: boolean = false, dataSource?: PokemonData, postProcess?: (enemyPokemon: EnemyPokemon) => void): EnemyPokemon { + addEnemyPokemon( + species: PokemonSpecies, + level: number, + trainerSlot: TrainerSlot, + boss: boolean = false, + shinyLock: boolean = false, + dataSource?: PokemonData, + postProcess?: (enemyPokemon: EnemyPokemon) => void, + ): EnemyPokemon { if (Overrides.OPP_LEVEL_OVERRIDE > 0) { level = Overrides.OPP_LEVEL_OVERRIDE; } if (Overrides.OPP_SPECIES_OVERRIDE) { species = getPokemonSpecies(Overrides.OPP_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; + boss = + this.getEncounterBossSegments( + this.currentBattle.waveIndex, + level, + species, + ) > 1; } - const pokemon = new EnemyPokemon(this, species, level, trainerSlot, boss, shinyLock, dataSource); + const pokemon = new EnemyPokemon( + species, + level, + trainerSlot, + boss, + shinyLock, + dataSource, + ); if (Overrides.OPP_FUSION_OVERRIDE) { pokemon.generateFusionSpecies(); } @@ -937,7 +1208,13 @@ export default class BattleScene extends SceneBase { const secondaryIvs = Utils.getIvsFromId(Utils.randSeedInt(4294967296)); for (let s = 0; s < pokemon.ivs.length; s++) { - pokemon.ivs[s] = Math.round(Phaser.Math.Linear(Math.min(pokemon.ivs[s], secondaryIvs[s]), Math.max(pokemon.ivs[s], secondaryIvs[s]), 0.75)); + pokemon.ivs[s] = Math.round( + Phaser.Math.Linear( + Math.min(pokemon.ivs[s], secondaryIvs[s]), + Math.max(pokemon.ivs[s], secondaryIvs[s]), + 0.75, + ), + ); } } if (postProcess) { @@ -960,7 +1237,10 @@ export default class BattleScene extends SceneBase { * @param pokemon * @param destroy Default true. If true, will destroy the {@linkcode PlayerPokemon} after removing */ - removePokemonFromPlayerParty(pokemon: PlayerPokemon, destroy: boolean = true) { + removePokemonFromPlayerParty( + pokemon: PlayerPokemon, + destroy: boolean = true, + ) { if (!pokemon) { return; } @@ -974,7 +1254,14 @@ export default class BattleScene extends SceneBase { this.updateModifiers(true); } - addPokemonIcon(pokemon: Pokemon, x: number, y: number, originX: number = 0.5, originY: number = 0.5, ignoreOverride: boolean = false): Phaser.GameObjects.Container { + addPokemonIcon( + pokemon: Pokemon, + x: number, + y: number, + originX: number = 0.5, + originY: number = 0.5, + ignoreOverride: boolean = false, + ): Phaser.GameObjects.Container { const container = this.add.container(x, y); container.setName(`${pokemon.name}-icon`); @@ -983,7 +1270,9 @@ export default class BattleScene extends SceneBase { icon.setFrame(pokemon.getIconId(true)); // Temporary fix to show pokemon's default icon if variant icon doesn't exist if (icon.frame.name !== pokemon.getIconId(true)) { - console.log(`${pokemon.name}'s variant icon does not exist. Replacing with default.`); + console.log( + `${pokemon.name}'s variant icon does not exist. Replacing with default.`, + ); const temp = pokemon.shiny; pokemon.shiny = false; icon.setTexture(pokemon.getIconAtlasKey(ignoreOverride)); @@ -995,7 +1284,11 @@ export default class BattleScene extends SceneBase { container.add(icon); if (pokemon.isFusion()) { - const fusionIcon = this.add.sprite(0, 0, pokemon.getFusionIconAtlasKey(ignoreOverride)); + const fusionIcon = this.add.sprite( + 0, + 0, + pokemon.getFusionIconAtlasKey(ignoreOverride), + ); fusionIcon.setName("sprite-fusion-icon"); fusionIcon.setOrigin(0.5, 0); fusionIcon.setFrame(pokemon.getFusionIconId(true)); @@ -1004,13 +1297,24 @@ export default class BattleScene extends SceneBase { const originalHeight = icon.height; const originalFrame = icon.frame; - const iconHeight = (icon.frame.cutHeight <= fusionIcon.frame.cutHeight ? Math.ceil : Math.floor)((icon.frame.cutHeight + fusionIcon.frame.cutHeight) / 4); + const iconHeight = ( + icon.frame.cutHeight <= fusionIcon.frame.cutHeight + ? Math.ceil + : Math.floor + )((icon.frame.cutHeight + fusionIcon.frame.cutHeight) / 4); // Inefficient, but for some reason didn't work with only the unique properties as part of the name const iconFrameId = `${icon.frame.name}f${fusionIcon.frame.name}`; if (!icon.frame.texture.has(iconFrameId)) { - icon.frame.texture.add(iconFrameId, icon.frame.sourceIndex, icon.frame.cutX, icon.frame.cutY, icon.frame.cutWidth, iconHeight); + icon.frame.texture.add( + iconFrameId, + icon.frame.sourceIndex, + icon.frame.cutX, + icon.frame.cutY, + icon.frame.cutWidth, + iconHeight, + ); } icon.setFrame(iconFrameId); @@ -1020,13 +1324,21 @@ export default class BattleScene extends SceneBase { const originalFusionFrame = fusionIcon.frame; const fusionIconY = fusionIcon.frame.cutY + icon.frame.cutHeight; - const fusionIconHeight = fusionIcon.frame.cutHeight - icon.frame.cutHeight; + const fusionIconHeight = + fusionIcon.frame.cutHeight - icon.frame.cutHeight; // Inefficient, but for some reason didn't work with only the unique properties as part of the name const fusionIconFrameId = `${fusionIcon.frame.name}f${icon.frame.name}`; if (!fusionIcon.frame.texture.has(fusionIconFrameId)) { - fusionIcon.frame.texture.add(fusionIconFrameId, fusionIcon.frame.sourceIndex, fusionIcon.frame.cutX, fusionIconY, fusionIcon.frame.cutWidth, fusionIconHeight); + fusionIcon.frame.texture.add( + fusionIconFrameId, + fusionIcon.frame.sourceIndex, + fusionIcon.frame.cutX, + fusionIconY, + fusionIcon.frame.cutWidth, + fusionIconHeight, + ); } fusionIcon.setFrame(fusionIconFrameId); @@ -1039,7 +1351,7 @@ export default class BattleScene extends SceneBase { container.x -= originalWidth * (originX - 0.5); } if (originY !== 0) { - container.y -= (originalHeight) * originY; + container.y -= originalHeight * originY; } } else { if (originX !== 0.5) { @@ -1063,20 +1375,24 @@ export default class BattleScene extends SceneBase { /** * Generates a random number using the current battle's seed * - * This calls {@linkcode Battle.randSeedInt}(`scene`, {@linkcode range}, {@linkcode min}) in `src/battle.ts` + * This calls {@linkcode Battle.randSeedInt}({@linkcode range}, {@linkcode min}) in `src/battle.ts` * which calls {@linkcode Utils.randSeedInt randSeedInt}({@linkcode range}, {@linkcode min}) in `src/utils.ts` * * @param range How large of a range of random numbers to choose from. If {@linkcode range} <= 1, returns {@linkcode min} * @param min The minimum integer to pick, default `0` * @returns A random integer between {@linkcode min} and ({@linkcode min} + {@linkcode range} - 1) */ - randBattleSeedInt(range: integer, min: integer = 0): integer { - return this.currentBattle?.randSeedInt(this, range, min); + randBattleSeedInt(range: number, min: number = 0): number { + return this.currentBattle?.randSeedInt(range, min); } - reset(clearScene: boolean = false, clearData: boolean = false, reloadI18n: boolean = false): void { + reset( + clearScene: boolean = false, + clearData: boolean = false, + reloadI18n: boolean = false, + ): void { if (clearData) { - this.gameData = new GameData(this); + this.gameData = new GameData(); } this.gameMode = getGameMode(GameModes.CLASSIC); @@ -1088,7 +1404,11 @@ export default class BattleScene extends SceneBase { this.lockModifierTiers = false; - this.pokeballCounts = Object.fromEntries(Utils.getEnumValues(PokeballType).filter(p => p <= PokeballType.MASTER_BALL).map(t => [ t, 0 ])); + this.pokeballCounts = Object.fromEntries( + Utils.getEnumValues(PokeballType) + .filter((p) => p <= PokeballType.MASTER_BALL) + .map((t) => [ t, 0 ]), + ); this.pokeballCounts[PokeballType.POKEBALL] += 5; if (Overrides.POKEBALL_OVERRIDE.active) { this.pokeballCounts = Overrides.POKEBALL_OVERRIDE.pokeballs; @@ -1109,7 +1429,10 @@ export default class BattleScene extends SceneBase { // If this is a ME, clear any residual visual sprites before reloading if (this.currentBattle?.mysteryEncounter?.introVisuals) { - this.field.remove(this.currentBattle.mysteryEncounter?.introVisuals, true); + this.field.remove( + this.currentBattle.mysteryEncounter?.introVisuals, + true, + ); } //@ts-ignore - allowing `null` for currentBattle causes a lot of trouble @@ -1130,7 +1453,7 @@ export default class BattleScene extends SceneBase { this.updateScoreText(); this.scoreText.setVisible(false); - [ this.luckLabelText, this.luckText ].map(t => t.setVisible(false)); + [ this.luckLabelText, this.luckText ].map((t) => t.setVisible(false)); this.newArena(Overrides.STARTING_BIOME_OVERRIDE || Biome.TOWN); @@ -1139,12 +1462,16 @@ export default class BattleScene extends SceneBase { this.arenaBgTransition.setPosition(0, 0); this.arenaPlayer.setPosition(300, 0); this.arenaPlayerTransition.setPosition(0, 0); - [ this.arenaEnemy, this.arenaNextEnemy ].forEach(a => a.setPosition(-280, 0)); + [ this.arenaEnemy, this.arenaNextEnemy ].forEach((a) => + a.setPosition(-280, 0), + ); this.arenaNextEnemy.setVisible(false); this.arena.init(); - this.trainer.setTexture(`trainer_${this.gameData.gender === PlayerGender.FEMALE ? "f" : "m"}_back`); + this.trainer.setTexture( + `trainer_${this.gameData.gender === PlayerGender.FEMALE ? "f" : "m"}_back`, + ); this.trainer.setPosition(406, 186); this.trainer.setVisible(true); @@ -1157,7 +1484,16 @@ export default class BattleScene extends SceneBase { ...allSpecies, ...allMoves, ...allAbilities, - ...Utils.getEnumValues(ModifierPoolType).map(mpt => getModifierPoolForType(mpt)).map(mp => Object.values(mp).flat().map(mt => mt.modifierType).filter(mt => "localize" in mt).map(lpb => lpb as unknown as Localizable)).flat() + ...Utils.getEnumValues(ModifierPoolType) + .map((mpt) => getModifierPoolForType(mpt)) + .map((mp) => + Object.values(mp) + .flat() + .map((mt) => mt.modifierType) + .filter((mt) => "localize" in mt) + .map((lpb) => lpb as unknown as Localizable), + ) + .flat(), ]; for (const item of localizable) { item.localize(); @@ -1177,24 +1513,38 @@ export default class BattleScene extends SceneBase { onComplete: () => { this.clearPhaseQueue(); + this.ui.freeUIData(); + this.uiContainer.remove(this.ui, true); + this.uiContainer.destroy(); this.children.removeAll(true); this.game.domContainer.innerHTML = ""; this.launchBattle(); - } + }, }); } } getDoubleBattleChance(newWaveIndex: number, playerField: PlayerPokemon[]) { - const doubleChance = new Utils.IntegerHolder(newWaveIndex % 10 === 0 ? 32 : 8); + const doubleChance = new Utils.NumberHolder( + newWaveIndex % 10 === 0 ? 32 : 8, + ); this.applyModifiers(DoubleBattleChanceBoosterModifier, true, doubleChance); - playerField.forEach(p => applyAbAttrs(DoubleBattleChanceAbAttr, p, null, false, doubleChance)); + playerField.forEach((p) => + applyAbAttrs(DoubleBattleChanceAbAttr, p, null, false, doubleChance), + ); return Math.max(doubleChance.value, 1); } - newBattle(waveIndex?: integer, battleType?: BattleType, trainerData?: TrainerData, double?: boolean, mysteryEncounterType?: MysteryEncounterType): Battle | null { + newBattle( + waveIndex?: number, + battleType?: BattleType, + trainerData?: TrainerData, + double?: boolean, + mysteryEncounterType?: MysteryEncounterType, + ): Battle | null { const _startingWave = Overrides.STARTING_WAVE_OVERRIDE || startingWave; - const newWaveIndex = waveIndex || ((this.currentBattle?.waveIndex || (_startingWave - 1)) + 1); + const newWaveIndex = + waveIndex || (this.currentBattle?.waveIndex || _startingWave - 1) + 1; let newDouble: boolean | undefined; let newBattleType: BattleType; let newTrainer: Trainer | undefined; @@ -1205,11 +1555,17 @@ export default class BattleScene extends SceneBase { const playerField = this.getPlayerField(); - if (this.gameMode.isFixedBattle(newWaveIndex) && trainerData === undefined) { + if ( + this.gameMode.isFixedBattle(newWaveIndex) && + trainerData === undefined + ) { battleConfig = this.gameMode.getFixedBattle(newWaveIndex); newDouble = battleConfig.double; newBattleType = battleConfig.battleType; - this.executeWithSeedOffset(() => newTrainer = battleConfig?.getTrainer(this), (battleConfig.seedOffsetWaveIndex || newWaveIndex) << 8); + this.executeWithSeedOffset( + () => (newTrainer = battleConfig?.getTrainer()), + (battleConfig.seedOffsetWaveIndex || newWaveIndex) << 8, + ); if (newTrainer) { this.field.add(newTrainer); } @@ -1217,7 +1573,9 @@ export default class BattleScene extends SceneBase { if (!this.gameMode.hasTrainers) { newBattleType = BattleType.WILD; } else if (battleType === undefined) { - newBattleType = this.gameMode.isWaveTrainer(newWaveIndex, this.arena) ? BattleType.TRAINER : BattleType.WILD; + newBattleType = this.gameMode.isWaveTrainer(newWaveIndex, this.arena) + ? BattleType.TRAINER + : BattleType.WILD; } else { newBattleType = battleType; } @@ -1228,29 +1586,50 @@ export default class BattleScene extends SceneBase { if (trainerConfigs[trainerType].doubleOnly) { doubleTrainer = true; } else if (trainerConfigs[trainerType].hasDouble) { - doubleTrainer = !Utils.randSeedInt(this.getDoubleBattleChance(newWaveIndex, playerField)); + doubleTrainer = !Utils.randSeedInt( + this.getDoubleBattleChance(newWaveIndex, playerField), + ); // Add a check that special trainers can't be double except for tate and liza - they should use the normal double chance - if (trainerConfigs[trainerType].trainerTypeDouble && ![ TrainerType.TATE, TrainerType.LIZA ].includes(trainerType)) { + if ( + trainerConfigs[trainerType].trainerTypeDouble && + ![ TrainerType.TATE, TrainerType.LIZA ].includes(trainerType) + ) { doubleTrainer = false; } } - const variant = doubleTrainer ? TrainerVariant.DOUBLE : (Utils.randSeedInt(2) ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT); - newTrainer = trainerData !== undefined ? trainerData.toTrainer(this) : new Trainer(this, trainerType, variant); + const variant = doubleTrainer + ? TrainerVariant.DOUBLE + : Utils.randSeedInt(2) + ? TrainerVariant.FEMALE + : TrainerVariant.DEFAULT; + newTrainer = + trainerData !== undefined + ? trainerData.toTrainer() + : new Trainer(trainerType, variant); this.field.add(newTrainer); } // Check for mystery encounter // Can only occur in place of a standard (non-boss) wild battle, waves 10-180 - if (this.isWaveMysteryEncounter(newBattleType, newWaveIndex) || newBattleType === BattleType.MYSTERY_ENCOUNTER) { + if ( + this.isWaveMysteryEncounter(newBattleType, newWaveIndex) || + newBattleType === BattleType.MYSTERY_ENCOUNTER + ) { newBattleType = BattleType.MYSTERY_ENCOUNTER; // Reset to base spawn weight - this.mysteryEncounterSaveData.encounterSpawnChance = BASE_MYSTERY_ENCOUNTER_SPAWN_WEIGHT; + this.mysteryEncounterSaveData.encounterSpawnChance = + BASE_MYSTERY_ENCOUNTER_SPAWN_WEIGHT; } } if (double === undefined && newWaveIndex > 1) { - if (newBattleType === BattleType.WILD && !this.gameMode.isWaveFinal(newWaveIndex)) { - newDouble = !Utils.randSeedInt(this.getDoubleBattleChance(newWaveIndex, playerField)); + if ( + newBattleType === BattleType.WILD && + !this.gameMode.isWaveFinal(newWaveIndex) + ) { + newDouble = !Utils.randSeedInt( + this.getDoubleBattleChance(newWaveIndex, playerField), + ); } else if (newBattleType === BattleType.TRAINER) { newDouble = newTrainer?.variant === TrainerVariant.DOUBLE; } @@ -1274,10 +1653,10 @@ export default class BattleScene extends SceneBase { doubleOverrideForWave = "single"; break; case "even-doubles": - doubleOverrideForWave = (newWaveIndex % 2) ? "single" : "double"; + doubleOverrideForWave = newWaveIndex % 2 ? "single" : "double"; break; case "odd-doubles": - doubleOverrideForWave = (newWaveIndex % 2) ? "double" : "single"; + doubleOverrideForWave = newWaveIndex % 2 ? "double" : "single"; break; } @@ -1288,7 +1667,10 @@ export default class BattleScene extends SceneBase { * Override battles into single only if not fighting with trainers. * @see {@link https://github.com/pagefaultgames/pokerogue/issues/1948 | GitHub Issue #1948} */ - if (newBattleType !== BattleType.TRAINER && doubleOverrideForWave === "single") { + if ( + newBattleType !== BattleType.TRAINER && + doubleOverrideForWave === "single" + ) { newDouble = false; } } @@ -1306,14 +1688,26 @@ export default class BattleScene extends SceneBase { } if (lastBattle?.double && !newDouble) { - this.tryRemovePhase(p => p instanceof SwitchPhase); - this.getPlayerField().forEach(p => p.lapseTag(BattlerTagType.COMMANDED)); + this.tryRemovePhase((p) => p instanceof SwitchPhase); + this.getPlayerField().forEach((p) => + p.lapseTag(BattlerTagType.COMMANDED), + ); } - this.executeWithSeedOffset(() => { - this.currentBattle = new Battle(this.gameMode, newWaveIndex, newBattleType, newTrainer, newDouble); - }, newWaveIndex << 3, this.waveSeed); - this.currentBattle.incrementTurn(this); + this.executeWithSeedOffset( + () => { + this.currentBattle = new Battle( + this.gameMode, + newWaveIndex, + newBattleType, + newTrainer, + newDouble, + ); + }, + newWaveIndex << 3, + this.waveSeed, + ); + this.currentBattle.incrementTurn(); if (newBattleType === BattleType.MYSTERY_ENCOUNTER) { // Will generate the actual Mystery Encounter during NextEncounterPhase, to ensure it uses proper biome @@ -1324,50 +1718,75 @@ export default class BattleScene extends SceneBase { if (!waveIndex && lastBattle) { const isWaveIndexMultipleOfTen = !(lastBattle.waveIndex % 10); - const isEndlessOrDaily = this.gameMode.hasShortBiomes || this.gameMode.isDaily; - const isEndlessFifthWave = this.gameMode.hasShortBiomes && (lastBattle.waveIndex % 5) === 0; - const isWaveIndexMultipleOfFiftyMinusOne = (lastBattle.waveIndex % 50) === 49; - const isNewBiome = isWaveIndexMultipleOfTen || isEndlessFifthWave || (isEndlessOrDaily && isWaveIndexMultipleOfFiftyMinusOne); - const resetArenaState = isNewBiome || [ BattleType.TRAINER, BattleType.MYSTERY_ENCOUNTER ].includes(this.currentBattle.battleType) || this.currentBattle.battleSpec === BattleSpec.FINAL_BOSS; - this.getEnemyParty().forEach(enemyPokemon => enemyPokemon.destroy()); + const isEndlessOrDaily = + this.gameMode.hasShortBiomes || this.gameMode.isDaily; + const isEndlessFifthWave = + this.gameMode.hasShortBiomes && lastBattle.waveIndex % 5 === 0; + const isWaveIndexMultipleOfFiftyMinusOne = + lastBattle.waveIndex % 50 === 49; + const isNewBiome = + isWaveIndexMultipleOfTen || + isEndlessFifthWave || + (isEndlessOrDaily && isWaveIndexMultipleOfFiftyMinusOne); + const resetArenaState = + isNewBiome || + [ BattleType.TRAINER, BattleType.MYSTERY_ENCOUNTER ].includes( + this.currentBattle.battleType, + ) || + this.currentBattle.battleSpec === BattleSpec.FINAL_BOSS; + this.getEnemyParty().forEach((enemyPokemon) => enemyPokemon.destroy()); this.trySpreadPokerus(); - if (!isNewBiome && (newWaveIndex % 10) === 5) { + if (!isNewBiome && newWaveIndex % 10 === 5) { this.arena.updatePoolsForTimeOfDay(); } if (resetArenaState) { this.arena.resetArenaEffects(); - playerField.forEach((pokemon) => pokemon.lapseTag(BattlerTagType.COMMANDED)); + playerField.forEach((pokemon) => + pokemon.lapseTag(BattlerTagType.COMMANDED), + ); playerField.forEach((pokemon, p) => { if (pokemon.isOnField()) { - this.pushPhase(new ReturnPhase(this, p)); + this.pushPhase(new ReturnPhase(p)); } }); for (const pokemon of this.getPlayerParty()) { pokemon.resetBattleData(); + pokemon.resetTera(); applyPostBattleInitAbAttrs(PostBattleInitAbAttr, pokemon); + if ( + pokemon.hasSpecies(Species.TERAPAGOS) || + (this.gameMode.isClassic && + this.currentBattle.waveIndex > 180 && + this.currentBattle.waveIndex <= 190) + ) { + this.arena.playerTerasUsed = 0; + } } if (!this.trainer.visible) { - this.pushPhase(new ShowTrainerPhase(this)); + this.pushPhase(new ShowTrainerPhase()); } } for (const pokemon of this.getPlayerParty()) { - this.triggerPokemonFormChange(pokemon, SpeciesFormChangeTimeOfDayTrigger); + this.triggerPokemonFormChange( + pokemon, + SpeciesFormChangeTimeOfDayTrigger, + ); } if (!this.gameMode.hasRandomBiomes && !isNewBiome) { - this.pushPhase(new NextEncounterPhase(this)); + this.pushPhase(new NextEncounterPhase()); } else { - this.pushPhase(new SelectBiomePhase(this)); - this.pushPhase(new NewBiomeEncounterPhase(this)); + this.pushPhase(new SelectBiomePhase()); + this.pushPhase(new NewBiomeEncounterPhase()); const newMaxExpLevel = this.getMaxExpLevel(); if (newMaxExpLevel > maxExpLevel) { - this.pushPhase(new LevelCapPhase(this)); + this.pushPhase(new LevelCapPhase()); } } } @@ -1375,27 +1794,39 @@ export default class BattleScene extends SceneBase { return this.currentBattle; } - newArena(biome: Biome): Arena { - this.arena = new Arena(this, biome, Biome[biome].toLowerCase()); + newArena(biome: Biome, playerFaints?: number): Arena { + this.arena = new Arena(biome, Biome[biome].toLowerCase(), playerFaints); this.eventTarget.dispatchEvent(new NewArenaEvent()); - this.arenaBg.pipelineData = { terrainColorRatio: this.arena.getBgTerrainColorRatioForBiome() }; + this.arenaBg.pipelineData = { + terrainColorRatio: this.arena.getBgTerrainColorRatioForBiome(), + }; return this.arena; } updateFieldScale(): Promise { - return new Promise(resolve => { - const fieldScale = Math.floor(Math.pow(1 / this.getField(true) - .map(p => p.getSpriteScale()) - .reduce((highestScale: number, scale: number) => highestScale = Math.max(scale, highestScale), 0), 0.7) * 40 - ) / 40; + return new Promise((resolve) => { + const fieldScale = + Math.floor( + Math.pow( + 1 / + this.getField(true) + .map((p) => p.getSpriteScale()) + .reduce( + (highestScale: number, scale: number) => + (highestScale = Math.max(scale, highestScale)), + 0, + ), + 0.7, + ) * 40, + ) / 40; this.setFieldScale(fieldScale).then(() => resolve()); }); } setFieldScale(scale: number, instant: boolean = false): Promise { - return new Promise(resolve => { + return new Promise((resolve) => { scale *= 6; if (this.field.scale === scale) { return resolve(); @@ -1411,18 +1842,81 @@ export default class BattleScene extends SceneBase { scale: scale, x: (defaultWidth - scaledWidth) / 2, y: defaultHeight - scaledHeight, - duration: !instant ? Utils.fixedInt(Math.abs(this.field.scale - scale) * 200) : 0, + duration: !instant + ? Utils.fixedInt(Math.abs(this.field.scale - scale) * 200) + : 0, ease: "Sine.easeInOut", - onComplete: () => resolve() + onComplete: () => resolve(), }); }); } - getSpeciesFormIndex(species: PokemonSpecies, gender?: Gender, nature?: Nature, ignoreArena?: boolean): integer { + getSpeciesFormIndex( + species: PokemonSpecies, + gender?: Gender, + nature?: Nature, + ignoreArena?: boolean, + ): number { if (!species.forms?.length) { return 0; } + const isEggPhase: boolean = [ "EggLapsePhase", "EggHatchPhase" ].includes( + this.getCurrentPhase()?.constructor.name ?? "", + ); + + if ( // Give trainers with specialty types an appropriately-typed form for Wormadam, Rotom, Arceus, Oricorio, Silvally, or Paldean Tauros. + !isEggPhase && + this.currentBattle?.battleType === BattleType.TRAINER && !isNullOrUndefined(this.currentBattle.trainer) && + this.currentBattle.trainer.config.hasSpecialtyType() + ) { + if (species.speciesId === Species.WORMADAM) { + switch (this.currentBattle.trainer.config.specialtyType) { + case Type.GROUND: + return 1; // Sandy Cloak + case Type.STEEL: + return 2; // Trash Cloak + case Type.GRASS: + return 0; // Plant Cloak + } + } else if (species.speciesId === Species.ROTOM) { + switch (this.currentBattle.trainer.config.specialtyType) { + case Type.FLYING: + return 4; // Fan Rotom + case Type.GHOST: + return 0; // Lightbulb Rotom + case Type.FIRE: + return 1; // Heat Rotom + case Type.GRASS: + return 5; // Mow Rotom + case Type.WATER: + return 2; // Wash Rotom + case Type.ICE: + return 3; // Frost Rotom + } + } else if (species.speciesId === Species.ORICORIO) { + switch (this.currentBattle.trainer.config.specialtyType) { + case Type.GHOST: + return 3; // Sensu Style + case Type.FIRE: + return 0; // Baile Style + case Type.ELECTRIC: + return 1; // Pom-Pom Style + case Type.PSYCHIC: + return 2; // Pa'u Style + } + } else if (species.speciesId === Species.PALDEA_TAUROS) { + switch (this.currentBattle.trainer.config.specialtyType) { + case Type.FIRE: + return 1; // Blaze Breed + case Type.WATER: + return 2; // Aqua Breed + } + } else if (species.speciesId === Species.SILVALLY || species.speciesId === Species.ARCEUS) { // Would probably never happen, but might as well + return this.currentBattle.trainer.config.specialtyType; + } + } + switch (species.speciesId) { case Species.UNOWN: case Species.SHELLOS: @@ -1430,8 +1924,6 @@ export default class BattleScene extends SceneBase { case Species.BASCULIN: case Species.DEERLING: case Species.SAWSBUCK: - case Species.FROAKIE: - case Species.FROGADIER: case Species.SCATTERBUG: case Species.SPEWPA: case Species.VIVILLON: @@ -1453,20 +1945,34 @@ export default class BattleScene extends SceneBase { case Species.PALDEA_TAUROS: return Utils.randSeedInt(species.forms.length); case Species.PIKACHU: - if (this.currentBattle?.battleType === BattleType.TRAINER && this.currentBattle?.waveIndex < 30) { + if ( + this.currentBattle?.battleType === BattleType.TRAINER && + this.currentBattle?.waveIndex < 30 + ) { return 0; // Ban Cosplay and Partner Pika from Trainers before wave 30 } return Utils.randSeedInt(8); case Species.EEVEE: - if (this.currentBattle?.battleType === BattleType.TRAINER && this.currentBattle?.waveIndex < 30) { + if ( + this.currentBattle?.battleType === BattleType.TRAINER && + this.currentBattle?.waveIndex < 30 && + !isEggPhase + ) { return 0; // No Partner Eevee for Wave 12 Preschoolers } return Utils.randSeedInt(2); + case Species.FROAKIE: + case Species.FROGADIER: case Species.GRENINJA: - if (this.currentBattle?.battleType === BattleType.TRAINER) { - return 0; // Don't give trainers Battle Bond Greninja + if ( + this.currentBattle?.battleType === BattleType.TRAINER && + !isEggPhase + ) { + return 0; // Don't give trainers Battle Bond Greninja, Froakie or Frogadier } return Utils.randSeedInt(2); + case Species.URSHIFU: + return Utils.randSeedInt(2); case Species.ZYGARDE: return Utils.randSeedInt(4); case Species.MINIOR: @@ -1479,14 +1985,27 @@ export default class BattleScene extends SceneBase { case Species.OINKOLOGNE: return gender === Gender.FEMALE ? 1 : 0; case Species.TOXTRICITY: - const lowkeyNatures = [ Nature.LONELY, Nature.BOLD, Nature.RELAXED, Nature.TIMID, Nature.SERIOUS, Nature.MODEST, Nature.MILD, Nature.QUIET, Nature.BASHFUL, Nature.CALM, Nature.GENTLE, Nature.CAREFUL ]; + const lowkeyNatures = [ + Nature.LONELY, + Nature.BOLD, + Nature.RELAXED, + Nature.TIMID, + Nature.SERIOUS, + Nature.MODEST, + Nature.MILD, + Nature.QUIET, + Nature.BASHFUL, + Nature.CALM, + Nature.GENTLE, + Nature.CAREFUL, + ]; if (nature !== undefined && lowkeyNatures.indexOf(nature) > -1) { return 1; } return 0; case Species.GIMMIGHOUL: - // Chest form can only be found in Mysterious Chest Encounter, if this is a game mode with MEs - if (this.gameMode.hasMysteryEncounters) { + // Chest form can only be found in Mysterious Chest Encounter, if this is a game mode with MEs + if (this.gameMode.hasMysteryEncounters && !isEggPhase) { return 1; // Wandering form } else { return Utils.randSeedInt(species.forms.length); @@ -1509,21 +2028,34 @@ export default class BattleScene extends SceneBase { private getGeneratedOffsetGym(): boolean { let ret = false; - this.executeWithSeedOffset(() => { - ret = !Utils.randSeedInt(2); - }, 0, this.seed.toString()); + this.executeWithSeedOffset( + () => { + ret = !Utils.randSeedInt(2); + }, + 0, + this.seed.toString(), + ); return ret; } - private getGeneratedWaveCycleOffset(): integer { + private getGeneratedWaveCycleOffset(): number { let ret = 0; - this.executeWithSeedOffset(() => { - ret = Utils.randSeedInt(8) * 5; - }, 0, this.seed.toString()); + this.executeWithSeedOffset( + () => { + ret = Utils.randSeedInt(8) * 5; + }, + 0, + this.seed.toString(), + ); return ret; } - getEncounterBossSegments(waveIndex: integer, level: integer, species?: PokemonSpecies, forceBoss: boolean = false): integer { + getEncounterBossSegments( + waveIndex: number, + level: number, + species?: PokemonSpecies, + forceBoss: boolean = false, + ): number { if (Overrides.OPP_HEALTH_SEGMENTS_OVERRIDE > 1) { return Overrides.OPP_HEALTH_SEGMENTS_OVERRIDE; } else if (Overrides.OPP_HEALTH_SEGMENTS_OVERRIDE === 1) { @@ -1536,18 +2068,26 @@ export default class BattleScene extends SceneBase { } let isBoss: boolean | undefined; - if (forceBoss || (species && (species.subLegendary || species.legendary || species.mythical))) { + if ( + forceBoss || + (species && + (species.subLegendary || species.legendary || species.mythical)) + ) { isBoss = true; } else { this.executeWithSeedOffset(() => { - isBoss = waveIndex % 10 === 0 || (this.gameMode.hasRandomBosses && Utils.randSeedInt(100) < Math.min(Math.max(Math.ceil((waveIndex - 250) / 50), 0) * 2, 30)); + isBoss = + waveIndex % 10 === 0 || + (this.gameMode.hasRandomBosses && + Utils.randSeedInt(100) < + Math.min(Math.max(Math.ceil((waveIndex - 250) / 50), 0) * 2, 30)); }, waveIndex << 2); } if (!isBoss) { return 0; } - let ret: integer = 2; + let ret: number = 2; if (level >= 100) { ret++; @@ -1564,7 +2104,7 @@ export default class BattleScene extends SceneBase { trySpreadPokerus(): void { const party = this.getPlayerParty(); - const infectedIndexes: integer[] = []; + const infectedIndexes: number[] = []; const spread = (index: number, spreadTo: number) => { const partyMember = party[index + spreadTo]; if (!partyMember.pokerus && !Utils.randSeedInt(10)) { @@ -1577,18 +2117,21 @@ export default class BattleScene extends SceneBase { return; } - this.executeWithSeedOffset(() => { - if (p) { - spread(p, -1); - } - if (p < party.length - 1) { - spread(p, 1); - } - }, this.currentBattle.waveIndex + (p << 8)); + this.executeWithSeedOffset( + () => { + if (p) { + spread(p, -1); + } + if (p < party.length - 1) { + spread(p, 1); + } + }, + this.currentBattle.waveIndex + (p << 8), + ); }); } - resetSeed(waveIndex?: integer): void { + resetSeed(waveIndex?: number): void { const wave = waveIndex || this.currentBattle?.waveIndex || 0; this.waveSeed = Utils.shiftCharCodes(this.seed, wave); Phaser.Math.RND.sow([ this.waveSeed ]); @@ -1596,7 +2139,11 @@ export default class BattleScene extends SceneBase { this.rngCounter = 0; } - executeWithSeedOffset(func: Function, offset: integer, seedOverride?: string): void { + executeWithSeedOffset( + func: Function, + offset: number, + seedOverride?: string, + ): void { if (!func) { return; } @@ -1604,7 +2151,9 @@ export default class BattleScene extends SceneBase { const tempRngOffset = this.rngOffset; const tempRngSeedOverride = this.rngSeedOverride; const state = Phaser.Math.RND.state(); - Phaser.Math.RND.sow([ Utils.shiftCharCodes(seedOverride || this.seed, offset) ]); + Phaser.Math.RND.sow([ + Utils.shiftCharCodes(seedOverride || this.seed, offset), + ]); this.rngCounter = 0; this.rngOffset = offset; this.rngSeedOverride = seedOverride || ""; @@ -1615,7 +2164,13 @@ export default class BattleScene extends SceneBase { this.rngSeedOverride = tempRngSeedOverride; } - addFieldSprite(x: number, y: number, texture: string | Phaser.Textures.Texture, frame?: string | number, terrainColorRatio: number = 0): Phaser.GameObjects.Sprite { + addFieldSprite( + x: number, + y: number, + texture: string | Phaser.Textures.Texture, + frame?: string | number, + terrainColorRatio: number = 0, + ): Phaser.GameObjects.Sprite { const ret = this.add.sprite(x, y, texture, frame); ret.setPipeline(this.fieldSpritePipeline); if (terrainColorRatio) { @@ -1625,14 +2180,33 @@ export default class BattleScene extends SceneBase { return ret; } - addPokemonSprite(pokemon: Pokemon, x: number, y: number, texture: string | Phaser.Textures.Texture, frame?: string | number, hasShadow: boolean = false, ignoreOverride: boolean = false): Phaser.GameObjects.Sprite { + addPokemonSprite( + pokemon: Pokemon, + x: number, + y: number, + texture: string | Phaser.Textures.Texture, + frame?: string | number, + hasShadow: boolean = false, + ignoreOverride: boolean = false, + ): Phaser.GameObjects.Sprite { const ret = this.addFieldSprite(x, y, texture, frame); this.initPokemonSprite(ret, pokemon, hasShadow, ignoreOverride); return ret; } - initPokemonSprite(sprite: Phaser.GameObjects.Sprite, pokemon?: Pokemon, hasShadow: boolean = false, ignoreOverride: boolean = false): Phaser.GameObjects.Sprite { - sprite.setPipeline(this.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], hasShadow: hasShadow, ignoreOverride: ignoreOverride, teraColor: pokemon ? getTypeRgb(pokemon.getTeraType()) : undefined }); + initPokemonSprite( + sprite: Phaser.GameObjects.Sprite, + pokemon?: Pokemon, + hasShadow: boolean = false, + ignoreOverride: boolean = false, + ): Phaser.GameObjects.Sprite { + sprite.setPipeline(this.spritePipeline, { + tone: [ 0.0, 0.0, 0.0, 0.0 ], + hasShadow: hasShadow, + ignoreOverride: ignoreOverride, + teraColor: pokemon ? getTypeRgb(pokemon.getTeraType()) : undefined, + isTerastallized: pokemon ? pokemon.isTerastallized : false, + }); this.spriteSparkleHandler.add(sprite); return sprite; } @@ -1644,26 +2218,26 @@ export default class BattleScene extends SceneBase { this.arenaFlyout.toggleFlyout(pressed); } - showFieldOverlay(duration: integer): Promise { - return new Promise(resolve => { + showFieldOverlay(duration: number): Promise { + return new Promise((resolve) => { this.tweens.add({ targets: this.fieldOverlay, alpha: 0.5, ease: "Sine.easeOut", duration: duration, - onComplete: () => resolve() + onComplete: () => resolve(), }); }); } - hideFieldOverlay(duration: integer): Promise { - return new Promise(resolve => { + hideFieldOverlay(duration: number): Promise { + return new Promise((resolve) => { this.tweens.add({ targets: this.fieldOverlay, alpha: 0, duration: duration, ease: "Cubic.easeIn", - onComplete: () => resolve() + onComplete: () => resolve(), }); }); } @@ -1676,28 +2250,28 @@ export default class BattleScene extends SceneBase { } } - showShopOverlay(duration: integer): Promise { + showShopOverlay(duration: number): Promise { this.shopOverlayShown = true; - return new Promise(resolve => { + return new Promise((resolve) => { this.tweens.add({ targets: this.shopOverlay, alpha: this.shopOverlayOpacity, ease: "Sine.easeOut", duration, - onComplete: () => resolve() + onComplete: () => resolve(), }); }); } - hideShopOverlay(duration: integer): Promise { + hideShopOverlay(duration: number): Promise { this.shopOverlayShown = false; - return new Promise(resolve => { + return new Promise((resolve) => { this.tweens.add({ targets: this.shopOverlay, alpha: 0, duration: duration, ease: "Cubic.easeIn", - onComplete: () => resolve() + onComplete: () => resolve(), }); }); } @@ -1714,7 +2288,9 @@ export default class BattleScene extends SceneBase { const isBoss = !(this.currentBattle.waveIndex % 10); const biomeString: string = getBiomeName(this.arena.biomeType); this.fieldUI.moveAbove(this.biomeWaveText, this.luckText); - this.biomeWaveText.setText( biomeString + " - " + this.currentBattle.waveIndex.toString()); + this.biomeWaveText.setText( + biomeString + " - " + this.currentBattle.waveIndex.toString(), + ); this.biomeWaveText.setColor(!isBoss ? "#ffffff" : "#f89890"); this.biomeWaveText.setShadowColor(!isBoss ? "#636363" : "#984038"); this.biomeWaveText.setVisible(true); @@ -1725,7 +2301,9 @@ export default class BattleScene extends SceneBase { return; } const formattedMoney = Utils.formatMoney(this.moneyFormat, this.money); - this.moneyText.setText(i18next.t("battleScene:moneyOwned", { formattedMoney })); + this.moneyText.setText( + i18next.t("battleScene:moneyOwned", { formattedMoney }), + ); this.fieldUI.moveAbove(this.moneyText, this.luckText); if (forceVisible) { this.moneyText.setVisible(true); @@ -1744,7 +2322,8 @@ export default class BattleScene extends SceneBase { scale: this.moneyText.scale + deltaScale, loop: 0, yoyo: true, - onComplete: (_) => this.moneyText.setShadowColor(getTextColor(TextStyle.MONEY, true)), + onComplete: (_) => + this.moneyText.setShadowColor(getTextColor(TextStyle.MONEY, true)), }); } @@ -1759,7 +2338,7 @@ export default class BattleScene extends SceneBase { */ updateAndShowText(duration: number): void { const labels = [ this.luckLabelText, this.luckText ]; - labels.forEach(t => t.setAlpha(0)); + labels.forEach((t) => t.setAlpha(0)); const luckValue = getPartyLuckValue(this.getPlayerParty()); this.luckText.setText(getLuckString(luckValue)); if (luckValue < 14) { @@ -1767,18 +2346,20 @@ export default 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.game.canvas.width / 6 - 2 - (this.luckText.displayWidth + 2), + ); this.tweens.add({ targets: labels, duration: duration, alpha: 1, onComplete: () => { - labels.forEach(t => t.setVisible(true)); - } + labels.forEach((t) => t.setVisible(true)); + }, }); } - hideLuckText(duration: integer): void { + hideLuckText(duration: number): void { if (this.reroll) { return; } @@ -1788,21 +2369,29 @@ export default class BattleScene extends SceneBase { duration: duration, alpha: 0, onComplete: () => { - labels.forEach(l => l.setVisible(false)); - } + labels.forEach((l) => l.setVisible(false)); + }, }); } updateUIPositions(): void { - const enemyModifierCount = this.enemyModifiers.filter(m => m.isIconVisible(this)).length; - const biomeWaveTextHeight = this.biomeWaveText.getBottomLeft().y - this.biomeWaveText.getTopLeft().y; + 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) + (enemyModifierCount ? enemyModifierCount <= 12 ? 15 : 24 : 0) + (biomeWaveTextHeight / 2) + -(this.game.canvas.height / 6) + + (enemyModifierCount ? (enemyModifierCount <= 12 ? 15 : 24) : 0) + + biomeWaveTextHeight / 2, ); this.moneyText.setY(this.biomeWaveText.y + 10); this.scoreText.setY(this.moneyText.y + 10); - [ this.luckLabelText, this.luckText ].map(l => l.setY((this.scoreText.visible ? this.scoreText : this.moneyText).y + 10)); - const offsetY = (this.scoreText.visible ? this.scoreText : this.moneyText).y + 15; + [ this.luckLabelText, this.luckText ].map((l) => + l.setY((this.scoreText.visible ? this.scoreText : this.moneyText).y + 10), + ); + 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); @@ -1818,57 +2407,104 @@ export default class BattleScene extends SceneBase { } addFaintedEnemyScore(enemy: EnemyPokemon): void { - let scoreIncrease = enemy.getSpeciesForm().getBaseExp() * (enemy.level / this.getMaxExpLevel()) * ((enemy.ivs.reduce((iv: integer, total: integer) => total += iv, 0) / 93) * 0.2 + 0.8); - this.findModifiers(m => m instanceof PokemonHeldItemModifier && m.pokemonId === enemy.id, false).map(m => scoreIncrease *= (m as PokemonHeldItemModifier).getScoreMultiplier()); + let scoreIncrease = + enemy.getSpeciesForm().getBaseExp() * + (enemy.level / this.getMaxExpLevel()) * + ((enemy.ivs.reduce((iv: number, total: number) => (total += iv), 0) / + 93) * + 0.2 + + 0.8); + this.findModifiers( + (m) => m instanceof PokemonHeldItemModifier && m.pokemonId === enemy.id, + false, + ).map( + (m) => + (scoreIncrease *= (m as PokemonHeldItemModifier).getScoreMultiplier()), + ); if (enemy.isBoss()) { scoreIncrease *= Math.sqrt(enemy.bossSegments); } this.currentBattle.battleScore += Math.ceil(scoreIncrease); } - getMaxExpLevel(ignoreLevelCap?: boolean): integer { - if (ignoreLevelCap) { + getMaxExpLevel(ignoreLevelCap: boolean = false): number { + if (Overrides.LEVEL_CAP_OVERRIDE > 0) { + return Overrides.LEVEL_CAP_OVERRIDE; + } else if (ignoreLevelCap || Overrides.LEVEL_CAP_OVERRIDE < 0) { return Number.MAX_SAFE_INTEGER; } const waveIndex = Math.ceil((this.currentBattle?.waveIndex || 1) / 10) * 10; const difficultyWaveIndex = this.gameMode.getWaveForDifficulty(waveIndex); - const baseLevel = (1 + difficultyWaveIndex / 2 + Math.pow(difficultyWaveIndex / 25, 2)) * 1.2; + const baseLevel = + (1 + difficultyWaveIndex / 2 + Math.pow(difficultyWaveIndex / 25, 2)) * + 1.2; return Math.ceil(baseLevel / 2) * 2 + 2; } - randomSpecies(waveIndex: integer, level: integer, fromArenaPool?: boolean, speciesFilter?: PokemonSpeciesFilter, filterAllEvolutions?: boolean): PokemonSpecies { + randomSpecies( + waveIndex: number, + level: number, + fromArenaPool?: boolean, + speciesFilter?: PokemonSpeciesFilter, + filterAllEvolutions?: boolean, + ): PokemonSpecies { if (fromArenaPool) { - return this.arena.randomSpecies(waveIndex, level, undefined, getPartyLuckValue(this.party)); + return this.arena.randomSpecies( + waveIndex, + level, + undefined, + getPartyLuckValue(this.party), + ); } - const filteredSpecies = speciesFilter ? [ ...new Set(allSpecies.filter(s => s.isCatchable()).filter(speciesFilter).map(s => { - if (!filterAllEvolutions) { - while (pokemonPrevolutions.hasOwnProperty(s.speciesId)) { - s = getPokemonSpecies(pokemonPrevolutions[s.speciesId]); - } - } - return s; - })) ] : allSpecies.filter(s => s.isCatchable()); + const filteredSpecies = speciesFilter + ? [ + ...new Set( + allSpecies + .filter((s) => s.isCatchable()) + .filter(speciesFilter) + .map((s) => { + if (!filterAllEvolutions) { + while (pokemonPrevolutions.hasOwnProperty(s.speciesId)) { + s = getPokemonSpecies(pokemonPrevolutions[s.speciesId]); + } + } + return s; + }), + ), + ] + : allSpecies.filter((s) => s.isCatchable()); return filteredSpecies[Utils.randSeedInt(filteredSpecies.length)]; } - generateRandomBiome(waveIndex: integer): Biome { + generateRandomBiome(waveIndex: number): Biome { const relWave = waveIndex % 250; - const biomes = Utils.getEnumValues(Biome).slice(1, Utils.getEnumValues(Biome).filter(b => b >= 40).length * -1); + const biomes = Utils.getEnumValues(Biome).filter( + (b) => b !== Biome.TOWN && b !== Biome.END, + ); const maxDepth = biomeDepths[Biome.END][0] - 2; - const depthWeights = new Array(maxDepth + 1).fill(null) - .map((_, i: integer) => ((1 - Math.min(Math.abs((i / (maxDepth - 1)) - (relWave / 250)) + 0.25, 1)) / 0.75) * 250); - const biomeThresholds: integer[] = []; + const depthWeights = new Array(maxDepth + 1) + .fill(null) + .map( + (_, i: number) => + ((1 - + Math.min(Math.abs(i / (maxDepth - 1) - relWave / 250) + 0.25, 1)) / + 0.75) * + 250, + ); + const biomeThresholds: number[] = []; let totalWeight = 0; for (const biome of biomes) { - totalWeight += Math.ceil(depthWeights[biomeDepths[biome][0] - 1] / biomeDepths[biome][1]); + totalWeight += Math.ceil( + depthWeights[biomeDepths[biome][0] - 1] / biomeDepths[biome][1], + ); biomeThresholds.push(totalWeight); } const randInt = Utils.randSeedInt(totalWeight); - for (const biome of biomes) { - if (randInt < biomeThresholds[biome]) { - return biome; + for (let i = 0; i < biomes.length; i++) { + if (randInt < biomeThresholds[i]) { + return biomes[i]; } } @@ -1881,12 +2517,12 @@ export default class BattleScene extends SceneBase { playBgm(bgmName?: string, fadeOut?: boolean): void { if (bgmName === undefined) { - bgmName = this.currentBattle?.getBgmOverride(this) || this.arena?.bgm; + bgmName = this.currentBattle?.getBgmOverride() || this.arena?.bgm; } if (this.bgm && bgmName === this.bgm.key) { if (!this.bgm.isPlaying) { this.bgm.play({ - volume: this.masterVolume * this.bgmVolume + volume: this.masterVolume * this.bgmVolume, }); } return; @@ -1897,15 +2533,16 @@ export default class BattleScene extends SceneBase { this.bgmCache.add(bgmName); this.loadBgm(bgmName); let loopPoint = 0; - loopPoint = bgmName === this.arena.bgm - ? this.arena.getBgmLoopPoint() - : this.getBgmLoopPoint(bgmName); + loopPoint = + bgmName === this.arena.bgm + ? this.arena.getBgmLoopPoint() + : this.getBgmLoopPoint(bgmName); let loaded = false; const playNewBgm = () => { this.ui.bgmBar.setBgmToBgmBar(bgmName); if (bgmName === null && this.bgm && !this.bgm.pendingRemove) { this.bgm.play({ - volume: this.masterVolume * this.bgmVolume + volume: this.masterVolume * this.bgmVolume, }); return; } @@ -1914,7 +2551,7 @@ export default class BattleScene extends SceneBase { } this.bgm = this.sound.add(bgmName, { loop: true }); this.bgm.play({ - volume: this.masterVolume * this.bgmVolume + volume: this.masterVolume * this.bgmVolume, }); if (loopPoint) { this.bgm.on("looped", () => this.bgm.play({ seek: loopPoint })); @@ -1963,7 +2600,6 @@ export default class BattleScene extends SceneBase { } else { const soundDetails = sound.key.split("/"); switch (soundDetails[0]) { - case "battle_anims": case "cry": if (soundDetails[1].startsWith("PRSFX- ")) { @@ -1981,11 +2617,13 @@ export default class BattleScene extends SceneBase { } } - fadeOutBgm(duration: integer = 500, destroy: boolean = true): boolean { + fadeOutBgm(duration: number = 500, destroy: boolean = true): boolean { if (!this.bgm) { return false; } - const bgm = this.sound.getAllPlaying().find(bgm => bgm.key === this.bgm.key); + const bgm = this.sound + .getAllPlaying() + .find((bgm) => bgm.key === this.bgm.key); if (bgm) { SoundFade.fadeOut(this, this.bgm, duration, destroy); return true; @@ -2000,7 +2638,11 @@ export default class BattleScene extends SceneBase { * @param destroy * @param delay */ - fadeAndSwitchBgm(newBgmKey: string, destroy: boolean = false, delay: number = 2000) { + fadeAndSwitchBgm( + newBgmKey: string, + destroy: boolean = false, + delay: number = 2000, + ) { this.fadeOutBgm(delay, destroy); this.time.delayedCall(delay, () => { this.playBgm(newBgmKey); @@ -2020,24 +2662,24 @@ export default class BattleScene extends SceneBase { case "heal": case "evolution": case "evolution_fanfare": - // These sounds are loaded in as BGM, but played as sound effects - // When these sounds are updated in updateVolume(), they are treated as BGM however because they are placed in the BGM Cache through being called by playSoundWithoutBGM() - config["volume"] *= (this.masterVolume * this.bgmVolume); + // These sounds are loaded in as BGM, but played as sound effects + // When these sounds are updated in updateVolume(), they are treated as BGM however because they are placed in the BGM Cache through being called by playSoundWithoutBGM() + config["volume"] *= this.masterVolume * this.bgmVolume; break; case "battle_anims": case "cry": - config["volume"] *= (this.masterVolume * this.fieldVolume); + config["volume"] *= this.masterVolume * this.fieldVolume; //PRSFX sound files are unusually loud if (keyDetails[1].startsWith("PRSFX- ")) { config["volume"] *= 0.5; } break; case "ui": - //As of, right now this applies to the "select", "menu_open", "error" sound effects - config["volume"] *= (this.masterVolume * this.uiVolume); + //As of, right now this applies to the "select", "menu_open", "error" sound effects + config["volume"] *= this.masterVolume * this.uiVolume; break; case "se": - config["volume"] *= (this.masterVolume * this.seVolume); + config["volume"] *= this.masterVolume * this.seVolume; break; } this.sound.play(key, config); @@ -2048,7 +2690,7 @@ export default class BattleScene extends SceneBase { } } - playSoundWithoutBgm(soundName: string, pauseDuration?: integer): AnySound { + playSoundWithoutBgm(soundName: string, pauseDuration?: number): AnySound { this.bgmCache.add(soundName); const resumeBgm = this.pauseBgm(); this.playSound(soundName); @@ -2057,18 +2699,24 @@ export default class BattleScene extends SceneBase { this.bgmResumeTimer.destroy(); } if (resumeBgm) { - this.bgmResumeTimer = this.time.delayedCall((pauseDuration || Utils.fixedInt(sound.totalDuration * 1000)), () => { - this.resumeBgm(); - this.bgmResumeTimer = null; - }); + this.bgmResumeTimer = this.time.delayedCall( + pauseDuration || Utils.fixedInt(sound.totalDuration * 1000), + () => { + this.resumeBgm(); + this.bgmResumeTimer = null; + }, + ); } return sound; } + /** The loop point of any given battle, mystery encounter, or title track, read as seconds and milliseconds. */ getBgmLoopPoint(bgmName: string): number { switch (bgmName) { + case "title": //Firel PokéRogue Title + return 46.5; case "battle_kanto_champion": //B2W2 Kanto Champion Battle - return 13.950; + return 13.95; case "battle_johto_champion": //B2W2 Johto Champion Battle return 23.498; case "battle_hoenn_champion_g5": //B2W2 Hoenn Champion Battle @@ -2082,11 +2730,15 @@ export default class BattleScene extends SceneBase { case "battle_champion_iris": //B2W2 Unova Champion Battle return 10.145; case "battle_kalos_champion": //XY Kalos Champion Battle - return 10.380; + return 10.38; + case "battle_champion_kukui": //SM Kukui Battle + return 15.784; case "battle_alola_champion": //USUM Alola Champion Battle return 13.025; case "battle_galar_champion": //SWSH Galar Champion Battle return 61.635; + case "battle_mustard": //SWSH Mustard Battle + return 22.442; case "battle_champion_geeta": //SV Champion Geeta Battle return 37.447; case "battle_champion_nemona": //SV Champion Nemona Battle @@ -2094,17 +2746,17 @@ export default class BattleScene extends SceneBase { case "battle_champion_kieran": //SV Champion Kieran Battle return 7.206; case "battle_hoenn_elite": //ORAS Elite Four Battle - return 11.350; + return 11.35; case "battle_unova_elite": //BW Elite Four Battle - return 17.730; + return 17.73; case "battle_kalos_elite": //XY Elite Four Battle - return 12.340; + return 12.34; case "battle_alola_elite": //SM Elite Four Battle return 19.212; case "battle_galar_elite": //SWSH League Tournament Battle return 164.069; case "battle_paldea_elite": //SV Elite Four Battle - return 12.770; + return 12.77; case "battle_bb_elite": //SV BB League Elite Four Battle return 19.434; case "battle_final_encounter": //PMD RTDX Rayquaza's Domain @@ -2122,7 +2774,7 @@ export default class BattleScene extends SceneBase { case "battle_unova_gym": //BW Unova Gym Battle return 19.145; case "battle_kalos_gym": //XY Kalos Gym Battle - return 44.810; + return 44.81; case "battle_galar_gym": //SWSH Galar Gym Battle return 171.262; case "battle_paldea_gym": //SV Paldea Gym Battle @@ -2136,13 +2788,13 @@ export default class BattleScene extends SceneBase { case "battle_legendary_suicune": //HGSS Suicune Battle return 12.636; case "battle_legendary_lugia": //HGSS Lugia Battle - return 19.770; + return 19.77; case "battle_legendary_ho_oh": //HGSS Ho-oh Battle return 17.668; case "battle_legendary_regis_g5": //B2W2 Legendary Titan Battle - return 49.500; + return 49.5; case "battle_legendary_regis_g6": //ORAS Legendary Titan Battle - return 21.130; + return 21.13; case "battle_legendary_gro_kyo": //ORAS Groudon & Kyogre Battle return 10.547; case "battle_legendary_rayquaza": //ORAS Rayquaza Battle @@ -2152,7 +2804,7 @@ export default class BattleScene extends SceneBase { case "battle_legendary_lake_trio": //ORAS Lake Guardians Battle return 16.887; case "battle_legendary_sinnoh": //ORAS Sinnoh Legendary Battle - return 22.770; + return 22.77; case "battle_legendary_dia_pal": //ORAS Dialga & Palkia Battle return 16.009; case "battle_legendary_origin_forme": //LA Origin Dialga & Palkia Battle @@ -2170,7 +2822,7 @@ export default class BattleScene extends SceneBase { case "battle_legendary_xern_yvel": //XY Xerneas & Yveltal Battle return 26.468; case "battle_legendary_tapu": //SM Tapu Battle - return 0.000; + return 0.0; case "battle_legendary_sol_lun": //SM Solgaleo & Lunala Battle return 6.525; case "battle_legendary_ub": //SM Ultra Beast Battle @@ -2194,7 +2846,7 @@ export default class BattleScene extends SceneBase { case "battle_legendary_kor_mir": //SV Depths of Area Zero Battle return 6.442; case "battle_legendary_loyal_three": //SV Loyal Three Battle - return 6.500; + return 6.5; case "battle_legendary_ogerpon": //SV Ogerpon Battle return 14.335; case "battle_legendary_terapagos": //SV Terapagos Battle @@ -2202,7 +2854,7 @@ export default class BattleScene extends SceneBase { case "battle_legendary_pecharunt": //SV Pecharunt Battle return 6.508; case "battle_rival": //BW Rival Battle - return 14.110; + return 14.11; case "battle_rival_2": //BW N Battle return 17.714; case "battle_rival_3": //BW Final N Battle @@ -2212,7 +2864,7 @@ export default class BattleScene extends SceneBase { case "battle_wild": //BW Wild Battle return 12.703; case "battle_wild_strong": //BW Strong Wild Battle - return 13.940; + return 13.94; case "end_summit": //PMD RTDX Sky Tower Summit return 30.025; case "battle_rocket_grunt": //HGSS Team Rocket Battle @@ -2221,12 +2873,12 @@ export default class BattleScene extends SceneBase { return 12.062; case "battle_galactic_grunt": //BDSP Team Galactic Battle return 13.043; - case "battle_plasma_grunt": //BW Team Plasma Battle - return 12.974; + case "battle_plasma_grunt": //B2W2 Team Plasma Battle + return 14.758; case "battle_flare_grunt": //XY Team Flare Battle return 4.228; case "battle_aether_grunt": // SM Aether Foundation Battle - return 16.00; + return 16.0; case "battle_skull_grunt": // SM Team Skull Battle return 20.87; case "battle_macro_grunt": // SWSH Trainer Battle @@ -2235,10 +2887,12 @@ export default class BattleScene extends SceneBase { return 133.362; case "battle_galactic_admin": //BDSP Team Galactic Admin Battle return 11.997; + case "battle_colress": //B2W2 Colress Battle + return 12.234; case "battle_skull_admin": //SM Team Skull Admin Battle return 15.463; case "battle_oleana": //SWSH Oleana Battle - return 14.110; + return 14.11; case "battle_star_admin": //SV Team Star Boss Battle return 9.493; case "battle_rocket_boss": //USUM Giovanni Battle @@ -2291,7 +2945,6 @@ export default class BattleScene extends SceneBase { return this.standbyPhase; } - /** * Adds a phase to the conditional queue and ensures it is executed only when the specified condition is met. * @@ -2316,14 +2969,18 @@ export default class BattleScene extends SceneBase { } /** - * Adds Phase to the end of phaseQueuePrepend, or at phaseQueuePrependSpliceIndex - * @param phase {@linkcode Phase} the phase to add + * Adds Phase(s) to the end of phaseQueuePrepend, or at phaseQueuePrependSpliceIndex + * @param phases {@linkcode Phase} the phase(s) to add */ - unshiftPhase(phase: Phase): void { + unshiftPhase(...phases: Phase[]): void { if (this.phaseQueuePrependSpliceIndex === -1) { - this.phaseQueuePrepend.push(phase); + this.phaseQueuePrepend.push(...phases); } else { - this.phaseQueuePrepend.splice(this.phaseQueuePrependSpliceIndex, 0, phase); + this.phaseQueuePrepend.splice( + this.phaseQueuePrependSpliceIndex, + 0, + ...phases, + ); } } @@ -2396,7 +3053,10 @@ export default class BattleScene extends SceneBase { } if (this.currentPhase) { - console.log(`%cStart Phase ${this.currentPhase.constructor.name}`, "color:green;"); + console.log( + `%cStart Phase ${this.currentPhase.constructor.name}`, + "color:green;", + ); this.currentPhase.start(); } } @@ -2420,11 +3080,16 @@ export default class BattleScene extends SceneBase { * @param phaseFilter filter function to use to find the wanted phase * @returns the found phase or undefined if none found */ - findPhase

(phaseFilter: (phase: P) => boolean): P | undefined { + findPhase

( + phaseFilter: (phase: P) => boolean, + ): P | undefined { return this.phaseQueue.find(phaseFilter) as P; } - tryReplacePhase(phaseFilter: (phase: Phase) => boolean, phase: Phase): boolean { + tryReplacePhase( + phaseFilter: (phase: Phase) => boolean, + phase: Phase, + ): boolean { const phaseIndex = this.phaseQueue.findIndex(phaseFilter); if (phaseIndex > -1) { this.phaseQueue[phaseIndex] = phase; @@ -2461,32 +3126,48 @@ export default class BattleScene extends SceneBase { * @param targetPhase {@linkcode Phase} the type of phase to search for in phaseQueue * @returns boolean if a targetPhase was found and added */ - prependToPhase(phase: Phase, targetPhase: Constructor): boolean { - const targetIndex = this.phaseQueue.findIndex(ph => ph instanceof targetPhase); + prependToPhase( + phase: Phase | Phase[], + targetPhase: Constructor, + ): boolean { + if (!Array.isArray(phase)) { + phase = [ phase ]; + } + const targetIndex = this.phaseQueue.findIndex( + (ph) => ph instanceof targetPhase, + ); if (targetIndex !== -1) { - this.phaseQueue.splice(targetIndex, 0, phase); + this.phaseQueue.splice(targetIndex, 0, ...phase); return true; } else { - this.unshiftPhase(phase); + this.unshiftPhase(...phase); return false; } } /** - * Tries to add the input phase to index after target phase in the {@linkcode phaseQueue}, else simply calls {@linkcode unshiftPhase()} - * @param phase {@linkcode Phase} the phase to be added + * Tries to add the input phase(s) to index after target phase in the {@linkcode phaseQueue}, else simply calls {@linkcode unshiftPhase()} + * @param phase {@linkcode Phase} the phase(s) to be added * @param targetPhase {@linkcode Phase} the type of phase to search for in {@linkcode phaseQueue} * @returns `true` if a `targetPhase` was found to append to */ - appendToPhase(phase: Phase, targetPhase: Constructor): boolean { - const targetIndex = this.phaseQueue.findIndex(ph => ph instanceof targetPhase); + appendToPhase( + phase: Phase | Phase[], + targetPhase: Constructor, + ): boolean { + if (!Array.isArray(phase)) { + phase = [ phase ]; + } + const targetIndex = this.phaseQueue.findIndex( + (ph) => ph instanceof targetPhase, + ); if (targetIndex !== -1 && this.phaseQueue.length > targetIndex) { - this.phaseQueue.splice(targetIndex + 1, 0, phase); + this.phaseQueue.splice(targetIndex + 1, 0, ...phase); return true; } else { - this.unshiftPhase(phase); + this.unshiftPhase(...phase); return false; } } @@ -2499,8 +3180,14 @@ export default class BattleScene extends SceneBase { * @param promptDelay optional param for MessagePhase constructor * @param defer boolean for which queue to add it to, false -> add to PhaseQueuePrepend, true -> nextCommandPhaseQueue */ - queueMessage(message: string, callbackDelay?: integer | null, prompt?: boolean | null, promptDelay?: integer | null, defer?: boolean | null) { - const phase = new MessagePhase(this, message, callbackDelay, prompt, promptDelay); + queueMessage( + message: string, + callbackDelay?: number | null, + prompt?: boolean | null, + promptDelay?: number | null, + defer?: boolean | null, + ) { + const phase = new MessagePhase(message, callbackDelay, prompt, promptDelay); if (!defer) { // adds to the end of PhaseQueuePrepend this.unshiftPhase(phase); @@ -2518,120 +3205,142 @@ export default class BattleScene extends SceneBase { this.phaseQueue.push(...this.nextCommandPhaseQueue); this.nextCommandPhaseQueue.splice(0, this.nextCommandPhaseQueue.length); } - this.phaseQueue.push(new TurnInitPhase(this)); + this.phaseQueue.push(new TurnInitPhase()); } - addMoney(amount: integer): void { + addMoney(amount: number): void { this.money = Math.min(this.money + amount, Number.MAX_SAFE_INTEGER); this.updateMoneyText(); this.animateMoneyChanged(true); this.validateAchvs(MoneyAchv); } - getWaveMoneyAmount(moneyMultiplier: number): integer { + getWaveMoneyAmount(moneyMultiplier: number): number { const waveIndex = this.currentBattle.waveIndex; const waveSetIndex = Math.ceil(waveIndex / 10) - 1; - const moneyValue = Math.pow((waveSetIndex + 1 + (0.75 + (((waveIndex - 1) % 10) + 1) / 10)) * 100, 1 + 0.005 * waveSetIndex) * moneyMultiplier; + const moneyValue = + Math.pow( + (waveSetIndex + 1 + (0.75 + (((waveIndex - 1) % 10) + 1) / 10)) * 100, + 1 + 0.005 * waveSetIndex, + ) * moneyMultiplier; return Math.floor(moneyValue / 10) * 10; } - addModifier(modifier: Modifier | null, ignoreUpdate?: boolean, playSound?: boolean, virtual?: boolean, instant?: boolean, cost?: number): Promise { + addModifier( + modifier: Modifier | null, + ignoreUpdate?: boolean, + playSound?: boolean, + virtual?: boolean, + instant?: boolean, + cost?: number, + ): boolean { if (!modifier) { - return Promise.resolve(false); + return false; } - return new Promise(resolve => { - let success = false; - const soundName = modifier.type.soundName; - this.validateAchvs(ModifierAchv, modifier); - const modifiersToRemove: PersistentModifier[] = []; - const modifierPromises: Promise[] = []; - if (modifier instanceof PersistentModifier) { - if (modifier instanceof TerastallizeModifier) { - modifiersToRemove.push(...(this.findModifiers(m => m instanceof TerastallizeModifier && m.pokemonId === modifier.pokemonId))); - } - if ((modifier as PersistentModifier).add(this.modifiers, !!virtual, this)) { - if (modifier instanceof PokemonFormChangeItemModifier || modifier instanceof TerastallizeModifier) { - const pokemon = this.getPokemonById(modifier.pokemonId); - if (pokemon) { - success = modifier.apply(pokemon, true); - } + let success = false; + const soundName = modifier.type.soundName; + this.validateAchvs(ModifierAchv, modifier); + const modifiersToRemove: PersistentModifier[] = []; + if (modifier instanceof PersistentModifier) { + if ((modifier as PersistentModifier).add(this.modifiers, !!virtual)) { + if (modifier instanceof PokemonFormChangeItemModifier) { + const pokemon = this.getPokemonById(modifier.pokemonId); + if (pokemon) { + success = modifier.apply(pokemon, true); } - if (playSound && !this.sound.get(soundName)) { - this.playSound(soundName); - } - } else if (!virtual) { - const defaultModifierType = getDefaultModifierTypeForTier(modifier.type.tier); - this.queueMessage(i18next.t("battle:itemStackFull", { fullItemName: modifier.type.name, itemName: defaultModifierType.name }), undefined, true); - return this.addModifier(defaultModifierType.newModifier(), ignoreUpdate, playSound, false, instant).then(success => resolve(success)); } - - for (const rm of modifiersToRemove) { - this.removeModifier(rm); - } - - if (!ignoreUpdate && !virtual) { - return this.updateModifiers(true, instant).then(() => resolve(success)); - } - } else if (modifier instanceof ConsumableModifier) { if (playSound && !this.sound.get(soundName)) { this.playSound(soundName); } + } else if (!virtual) { + const defaultModifierType = getDefaultModifierTypeForTier( + modifier.type.tier, + ); + this.queueMessage( + i18next.t("battle:itemStackFull", { + fullItemName: modifier.type.name, + itemName: defaultModifierType.name, + }), + undefined, + false, + 3000, + ); + return this.addModifier( + defaultModifierType.newModifier(), + ignoreUpdate, + playSound, + false, + instant, + ); + } - if (modifier instanceof ConsumablePokemonModifier) { - for (const p in this.party) { - const pokemon = this.party[p]; + for (const rm of modifiersToRemove) { + this.removeModifier(rm); + } - const args: unknown[] = []; - if (modifier instanceof PokemonHpRestoreModifier) { - if (!(modifier as PokemonHpRestoreModifier).fainted) { - const hpRestoreMultiplier = new Utils.IntegerHolder(1); - this.applyModifiers(HealingBoosterModifier, true, hpRestoreMultiplier); - args.push(hpRestoreMultiplier.value); - } else { - args.push(1); - } - } else if (modifier instanceof FusePokemonModifier) { - args.push(this.getPokemonById(modifier.fusePokemonId) as PlayerPokemon); - } else if (modifier instanceof RememberMoveModifier && !Utils.isNullOrUndefined(cost)) { - args.push(cost); - } - - if (modifier.shouldApply(pokemon, ...args)) { - const result = modifier.apply(pokemon, ...args); - if (result instanceof Promise) { - modifierPromises.push(result.then(s => success ||= s)); - } else { - success ||= result; - } + if (!ignoreUpdate && !virtual) { + this.updateModifiers(true, instant); + } + } else if (modifier instanceof ConsumableModifier) { + if (playSound && !this.sound.get(soundName)) { + this.playSound(soundName); + } + + if (modifier instanceof ConsumablePokemonModifier) { + for (const p in this.party) { + const pokemon = this.party[p]; + + const args: unknown[] = []; + if (modifier instanceof PokemonHpRestoreModifier) { + if (!(modifier as PokemonHpRestoreModifier).fainted) { + const hpRestoreMultiplier = new Utils.NumberHolder(1); + this.applyModifiers( + HealingBoosterModifier, + true, + hpRestoreMultiplier, + ); + args.push(hpRestoreMultiplier.value); + } else { + args.push(1); } + } else if (modifier instanceof FusePokemonModifier) { + args.push( + this.getPokemonById(modifier.fusePokemonId) as PlayerPokemon, + ); + } else if ( + modifier instanceof RememberMoveModifier && + !Utils.isNullOrUndefined(cost) + ) { + args.push(cost); } - return Promise.allSettled([ this.party.map(p => p.updateInfo(instant)), ...modifierPromises ]).then(() => resolve(success)); - } else { - const args = [ this ]; - if (modifier.shouldApply(...args)) { - const result = modifier.apply(...args); - if (result instanceof Promise) { - return result.then(success => resolve(success)); - } else { - success ||= result; - } + if (modifier.shouldApply(pokemon, ...args)) { + const result = modifier.apply(pokemon, ...args); + success ||= result; } } - } - resolve(success); - }); + this.party.map((p) => p.updateInfo(instant)); + } else { + const args = [ this ]; + if (modifier.shouldApply(...args)) { + const result = modifier.apply(...args); + success ||= result; + } + } + } + return success; } - addEnemyModifier(modifier: PersistentModifier, ignoreUpdate?: boolean, instant?: boolean): Promise { - return new Promise(resolve => { + addEnemyModifier( + modifier: PersistentModifier, + ignoreUpdate?: boolean, + instant?: boolean, + ): Promise { + return new Promise((resolve) => { const modifiersToRemove: PersistentModifier[] = []; - if (modifier instanceof TerastallizeModifier) { - modifiersToRemove.push(...(this.findModifiers(m => m instanceof TerastallizeModifier && m.pokemonId === modifier.pokemonId, false))); - } - if ((modifier as PersistentModifier).add(this.enemyModifiers, false, this)) { - if (modifier instanceof PokemonFormChangeItemModifier || modifier instanceof TerastallizeModifier) { + if ((modifier as PersistentModifier).add(this.enemyModifiers, false)) { + if (modifier instanceof PokemonFormChangeItemModifier) { const pokemon = this.getPokemonById(modifier.pokemonId); if (pokemon) { modifier.apply(pokemon, true); @@ -2642,7 +3351,8 @@ export default class BattleScene extends SceneBase { } } if (!ignoreUpdate) { - this.updateModifiers(false, instant).then(() => resolve()); + this.updateModifiers(false, instant); + resolve(); } else { resolve(); } @@ -2663,86 +3373,128 @@ export default class BattleScene extends SceneBase { * @param itemLost If `true`, treat the item's current holder as losing the item (for now, this simply enables Unburden). Default is `true`. * @returns `true` if the transfer was successful */ - tryTransferHeldItemModifier(itemModifier: PokemonHeldItemModifier, target: Pokemon, playSound: boolean, transferQuantity: number = 1, instant?: boolean, ignoreUpdate?: boolean, itemLost: boolean = true): Promise { - return new Promise(resolve => { - const source = itemModifier.pokemonId ? itemModifier.getPokemon(target.scene) : null; - const cancelled = new Utils.BooleanHolder(false); - Utils.executeIf(!!source && source.isPlayer() !== target.isPlayer(), () => applyAbAttrs(BlockItemTheftAbAttr, source! /* checked in condition*/, cancelled)).then(() => { - if (cancelled.value) { - return resolve(false); - } - const newItemModifier = itemModifier.clone() as PokemonHeldItemModifier; - newItemModifier.pokemonId = target.id; - const matchingModifier = target.scene.findModifier(m => m instanceof PokemonHeldItemModifier - && (m as PokemonHeldItemModifier).matchType(itemModifier) && m.pokemonId === target.id, target.isPlayer()) as PokemonHeldItemModifier; - let removeOld = true; - if (matchingModifier) { - const maxStackCount = matchingModifier.getMaxStackCount(target.scene); - if (matchingModifier.stackCount >= maxStackCount) { - return resolve(false); - } - const countTaken = Math.min(transferQuantity, itemModifier.stackCount, maxStackCount - matchingModifier.stackCount); - itemModifier.stackCount -= countTaken; - newItemModifier.stackCount = matchingModifier.stackCount + countTaken; - removeOld = !itemModifier.stackCount; - } else { - const countTaken = Math.min(transferQuantity, itemModifier.stackCount); - itemModifier.stackCount -= countTaken; - newItemModifier.stackCount = countTaken; - } - removeOld = !itemModifier.stackCount; - if (!removeOld || !source || this.removeModifier(itemModifier, !source.isPlayer())) { - const addModifier = () => { - if (!matchingModifier || this.removeModifier(matchingModifier, !target.isPlayer())) { - if (target.isPlayer()) { - this.addModifier(newItemModifier, ignoreUpdate, playSound, false, instant).then(() => { - if (source && itemLost) { - applyPostItemLostAbAttrs(PostItemLostAbAttr, source, false); - } - resolve(true); - }); - } else { - this.addEnemyModifier(newItemModifier, ignoreUpdate, instant).then(() => { - if (source && itemLost) { - applyPostItemLostAbAttrs(PostItemLostAbAttr, source, false); - } - resolve(true); - }); - } - } else { - resolve(false); + tryTransferHeldItemModifier( + itemModifier: PokemonHeldItemModifier, + target: Pokemon, + playSound: boolean, + transferQuantity: number = 1, + instant?: boolean, + ignoreUpdate?: boolean, + itemLost: boolean = true, + ): boolean { + const source = itemModifier.pokemonId ? itemModifier.getPokemon() : null; + const cancelled = new Utils.BooleanHolder(false); + + if (source && source.isPlayer() !== target.isPlayer()) { + applyAbAttrs(BlockItemTheftAbAttr, source, cancelled); + } + + if (cancelled.value) { + return false; + } + + const newItemModifier = itemModifier.clone() as PokemonHeldItemModifier; + newItemModifier.pokemonId = target.id; + const matchingModifier = this.findModifier( + (m) => + m instanceof PokemonHeldItemModifier && + m.matchType(itemModifier) && + m.pokemonId === target.id, + target.isPlayer(), + ) as PokemonHeldItemModifier; + + if (matchingModifier) { + const maxStackCount = matchingModifier.getMaxStackCount(); + if (matchingModifier.stackCount >= maxStackCount) { + return false; + } + const countTaken = Math.min( + transferQuantity, + itemModifier.stackCount, + maxStackCount - matchingModifier.stackCount, + ); + itemModifier.stackCount -= countTaken; + newItemModifier.stackCount = matchingModifier.stackCount + countTaken; + } else { + const countTaken = Math.min(transferQuantity, itemModifier.stackCount); + itemModifier.stackCount -= countTaken; + newItemModifier.stackCount = countTaken; + } + + const removeOld = itemModifier.stackCount === 0; + + if ( + !removeOld || + !source || + this.removeModifier(itemModifier, !source.isPlayer()) + ) { + const addModifier = () => { + if ( + !matchingModifier || + this.removeModifier(matchingModifier, !target.isPlayer()) + ) { + if (target.isPlayer()) { + this.addModifier( + newItemModifier, + ignoreUpdate, + playSound, + false, + instant, + ); + if (source && itemLost) { + applyPostItemLostAbAttrs(PostItemLostAbAttr, source, false); } - }; - if (source && source.isPlayer() !== target.isPlayer() && !ignoreUpdate) { - this.updateModifiers(source.isPlayer(), instant).then(() => addModifier()); + return true; } else { - addModifier(); + this.addEnemyModifier(newItemModifier, ignoreUpdate, instant); + if (source && itemLost) { + applyPostItemLostAbAttrs(PostItemLostAbAttr, source, false); + } + return true; } - return; } - resolve(false); - }); - }); + return false; + }; + if (source && source.isPlayer() !== target.isPlayer() && !ignoreUpdate) { + this.updateModifiers(source.isPlayer(), instant); + addModifier(); + } else { + addModifier(); + } + return true; + } + return false; } - removePartyMemberModifiers(partyMemberIndex: integer): Promise { - return new Promise(resolve => { + removePartyMemberModifiers(partyMemberIndex: number): Promise { + return new Promise((resolve) => { const pokemonId = this.getPlayerParty()[partyMemberIndex].id; - const modifiersToRemove = this.modifiers.filter(m => m instanceof PokemonHeldItemModifier && (m as PokemonHeldItemModifier).pokemonId === pokemonId); + const modifiersToRemove = this.modifiers.filter( + (m) => + m instanceof PokemonHeldItemModifier && + (m as PokemonHeldItemModifier).pokemonId === pokemonId, + ); for (const m of modifiersToRemove) { this.modifiers.splice(this.modifiers.indexOf(m), 1); } - this.updateModifiers().then(() => resolve()); + this.updateModifiers(); + resolve(); }); } - generateEnemyModifiers(heldModifiersConfigs?: HeldModifierConfig[][]): Promise { - return new Promise(resolve => { + generateEnemyModifiers( + heldModifiersConfigs?: HeldModifierConfig[][], + ): Promise { + return new Promise((resolve) => { if (this.currentBattle.battleSpec === BattleSpec.FINAL_BOSS) { return resolve(); } - const difficultyWaveIndex = this.gameMode.getWaveForDifficulty(this.currentBattle.waveIndex); - const isFinalBoss = this.gameMode.isWaveFinal(this.currentBattle.waveIndex); + const difficultyWaveIndex = this.gameMode.getWaveForDifficulty( + this.currentBattle.waveIndex, + ); + const isFinalBoss = this.gameMode.isWaveFinal( + this.currentBattle.waveIndex, + ); let chances = Math.ceil(difficultyWaveIndex / 10); if (isFinalBoss) { chances = Math.ceil(chances * 2.5); @@ -2757,9 +3509,13 @@ export default class BattleScene extends SceneBase { } } - party.forEach((enemyPokemon: EnemyPokemon, i: integer) => { - if (heldModifiersConfigs && i < heldModifiersConfigs.length && heldModifiersConfigs[i]) { - heldModifiersConfigs[i].forEach(mt => { + party.forEach((enemyPokemon: EnemyPokemon, i: number) => { + if ( + heldModifiersConfigs && + i < heldModifiersConfigs.length && + heldModifiersConfigs[i] + ) { + heldModifiersConfigs[i].forEach((mt) => { let modifier: PokemonHeldItemModifier; if (mt.modifier instanceof PokemonHeldItemModifierType) { modifier = mt.modifier.newModifier(enemyPokemon); @@ -2768,11 +3524,15 @@ export default class BattleScene extends SceneBase { modifier.pokemonId = enemyPokemon.id; } modifier.stackCount = mt.stackCount ?? 1; - modifier.isTransferable = mt.isTransferable ?? modifier.isTransferable; + modifier.isTransferable = + mt.isTransferable ?? modifier.isTransferable; this.addEnemyModifier(modifier, true); }); } else { - const isBoss = enemyPokemon.isBoss() || (this.currentBattle.battleType === BattleType.TRAINER && !!this.currentBattle.trainer?.config.isBoss); + const isBoss = + enemyPokemon.isBoss() || + (this.currentBattle.battleType === BattleType.TRAINER && + !!this.currentBattle.trainer?.config.isBoss); let upgradeChance = 32; if (isBoss) { upgradeChance /= 2; @@ -2780,98 +3540,115 @@ export default class BattleScene extends SceneBase { if (isFinalBoss) { upgradeChance /= 8; } - const modifierChance = this.gameMode.getEnemyModifierChance(isBoss); - let pokemonModifierChance = modifierChance; - if (this.currentBattle.battleType === BattleType.TRAINER && this.currentBattle.trainer) - pokemonModifierChance = Math.ceil(pokemonModifierChance * this.currentBattle.trainer.getPartyMemberModifierChanceMultiplier(i)); // eslint-disable-line let count = 0; for (let c = 0; c < chances; c++) { - if (!Utils.randSeedInt(modifierChance)) { + if (!Utils.randSeedInt(this.gameMode.getEnemyModifierChance(isBoss))) { count++; } } if (isBoss) { count = Math.max(count, Math.floor(chances / 2)); } - getEnemyModifierTypesForWave(difficultyWaveIndex, count, [ enemyPokemon ], this.currentBattle.battleType === BattleType.TRAINER ? ModifierPoolType.TRAINER : ModifierPoolType.WILD, upgradeChance) - .map(mt => mt.newModifier(enemyPokemon).add(this.enemyModifiers, false, this)); + getEnemyModifierTypesForWave( + difficultyWaveIndex, + count, + [ enemyPokemon ], + this.currentBattle.battleType === BattleType.TRAINER + ? ModifierPoolType.TRAINER + : ModifierPoolType.WILD, + upgradeChance, + ).map((mt) => + mt.newModifier(enemyPokemon).add(this.enemyModifiers, false), + ); } return true; }); - this.updateModifiers(false).then(() => resolve()); + this.updateModifiers(false); + resolve(); }); } /** - * Removes all modifiers from enemy pokemon of {@linkcode PersistentModifier} type - */ + * Removes all modifiers from enemy pokemon of {@linkcode PersistentModifier} type + */ clearEnemyModifiers(): void { - const modifiersToRemove = this.enemyModifiers.filter(m => m instanceof PersistentModifier); + const modifiersToRemove = this.enemyModifiers.filter( + (m) => m instanceof PersistentModifier, + ); for (const m of modifiersToRemove) { this.enemyModifiers.splice(this.enemyModifiers.indexOf(m), 1); } - this.updateModifiers(false).then(() => this.updateUIPositions()); + this.updateModifiers(false); + this.updateUIPositions(); } /** - * Removes all modifiers from enemy pokemon of {@linkcode PokemonHeldItemModifier} type - * @param pokemon - If specified, only removes held items from that {@linkcode Pokemon} - */ + * Removes all modifiers from enemy pokemon of {@linkcode PokemonHeldItemModifier} type + * @param pokemon - If specified, only removes held items from that {@linkcode Pokemon} + */ clearEnemyHeldItemModifiers(pokemon?: Pokemon): void { - const modifiersToRemove = this.enemyModifiers.filter(m => m instanceof PokemonHeldItemModifier && (!pokemon || m.getPokemon(this) === pokemon)); + const modifiersToRemove = this.enemyModifiers.filter( + (m) => + m instanceof PokemonHeldItemModifier && + (!pokemon || m.getPokemon() === pokemon), + ); for (const m of modifiersToRemove) { this.enemyModifiers.splice(this.enemyModifiers.indexOf(m), 1); } - this.updateModifiers(false).then(() => this.updateUIPositions()); + this.updateModifiers(false); + this.updateUIPositions(); } setModifiersVisible(visible: boolean) { - [ this.modifierBar, this.enemyModifierBar ].map(m => m.setVisible(visible)); + [ this.modifierBar, this.enemyModifierBar ].map((m) => m.setVisible(visible)); } - updateModifiers(player?: boolean, instant?: boolean): Promise { - if (player === undefined) { - player = true; + updateModifiers(player: boolean = true, instant?: boolean): void { + const modifiers = player + ? this.modifiers + : (this.enemyModifiers as PersistentModifier[]); + for (let m = 0; m < modifiers.length; m++) { + const modifier = modifiers[m]; + if ( + modifier instanceof PokemonHeldItemModifier && + !this.getPokemonById((modifier as PokemonHeldItemModifier).pokemonId) + ) { + modifiers.splice(m--, 1); + } } - return new Promise(resolve => { - const modifiers = player ? this.modifiers : this.enemyModifiers as PersistentModifier[]; - for (let m = 0; m < modifiers.length; m++) { - const modifier = modifiers[m]; - if (modifier instanceof PokemonHeldItemModifier && !this.getPokemonById((modifier as PokemonHeldItemModifier).pokemonId)) { - modifiers.splice(m--, 1); - } - } - for (const modifier of modifiers) { - if (modifier instanceof PersistentModifier) { - (modifier as PersistentModifier).virtualStackCount = 0; - } + for (const modifier of modifiers) { + if (modifier instanceof PersistentModifier) { + (modifier as PersistentModifier).virtualStackCount = 0; } + } - const modifiersClone = modifiers.slice(0); - for (const modifier of modifiersClone) { - if (!modifier.getStackCount()) { - modifiers.splice(modifiers.indexOf(modifier), 1); - } + const modifiersClone = modifiers.slice(0); + for (const modifier of modifiersClone) { + if (!modifier.getStackCount()) { + modifiers.splice(modifiers.indexOf(modifier), 1); } + } - this.updatePartyForModifiers(player ? this.getPlayerParty() : this.getEnemyParty(), instant).then(() => { - (player ? this.modifierBar : this.enemyModifierBar).updateModifiers(modifiers); - if (!player) { - this.updateUIPositions(); - } - resolve(); - }); - }); + this.updatePartyForModifiers( + player ? this.getPlayerParty() : this.getEnemyParty(), + instant, + ); + (player ? this.modifierBar : this.enemyModifierBar).updateModifiers( + modifiers, + ); + if (!player) { + this.updateUIPositions(); + } } updatePartyForModifiers(party: Pokemon[], instant?: boolean): Promise { - return new Promise(resolve => { - Promise.allSettled(party.map(p => { - if (p.scene) { + return new Promise((resolve) => { + Promise.allSettled( + party.map((p) => { p.calculateStats(); - } - return p.updateInfo(instant); - })).then(() => resolve()); + return p.updateInfo(instant); + }), + ).then(() => resolve()); }); } @@ -2883,12 +3660,15 @@ export default class BattleScene extends SceneBase { * @param enemy If `true`, remove an item owned by the enemy. If `false`, remove an item owned by the player. Default is `false`. * @returns `true` if the item exists and was successfully removed, `false` otherwise. */ - removeModifier(modifier: PersistentModifier, enemy: boolean = false): boolean { + removeModifier( + modifier: PersistentModifier, + enemy: boolean = false, + ): boolean { const modifiers = !enemy ? this.modifiers : this.enemyModifiers; const modifierIndex = modifiers.indexOf(modifier); if (modifierIndex > -1) { modifiers.splice(modifierIndex, 1); - if (modifier instanceof PokemonFormChangeItemModifier || modifier instanceof TerastallizeModifier) { + if (modifier instanceof PokemonFormChangeItemModifier) { const pokemon = this.getPokemonById(modifier.pokemonId); if (pokemon) { modifier.apply(pokemon, false); @@ -2906,8 +3686,13 @@ export default class BattleScene extends SceneBase { * @param player Whether to search the player (`true`) or the enemy (`false`); Defaults to `true` * @returns the list of all modifiers that matched `modifierType`. */ - getModifiers(modifierType: Constructor, player: boolean = true): T[] { - return (player ? this.modifiers : this.enemyModifiers).filter((m): m is T => m instanceof modifierType); + getModifiers( + modifierType: Constructor, + player: boolean = true, + ): T[] { + return (player ? this.modifiers : this.enemyModifiers).filter( + (m): m is T => m instanceof modifierType, + ); } /** @@ -2916,8 +3701,13 @@ export default class BattleScene extends SceneBase { * @param isPlayer Whether to search the player (`true`) or the enemy (`false`); Defaults to `true` * @returns the list of all modifiers that passed the `modifierFilter` function */ - findModifiers(modifierFilter: ModifierPredicate, isPlayer: boolean = true): PersistentModifier[] { - return (isPlayer ? this.modifiers : this.enemyModifiers).filter(modifierFilter); + findModifiers( + modifierFilter: ModifierPredicate, + isPlayer: boolean = true, + ): PersistentModifier[] { + return (isPlayer ? this.modifiers : this.enemyModifiers).filter( + modifierFilter, + ); } /** @@ -2926,30 +3716,45 @@ export default class BattleScene extends SceneBase { * @param player Whether to search the player (`true`) or the enemy (`false`); Defaults to `true` * @returns the first modifier that passed the `modifierFilter` function; `undefined` if none passed */ - findModifier(modifierFilter: ModifierPredicate, player: boolean = true): PersistentModifier | undefined { + findModifier( + modifierFilter: ModifierPredicate, + player: boolean = true, + ): PersistentModifier | undefined { return (player ? this.modifiers : this.enemyModifiers).find(modifierFilter); } /** * Apply all modifiers that match `modifierType` in a random order - * @param scene {@linkcode BattleScene} used to randomize the order of modifiers * @param modifierType The type of modifier to apply; must extend {@linkcode PersistentModifier} * @param player Whether to search the player (`true`) or the enemy (`false`); Defaults to `true` * @param ...args The list of arguments needed to invoke `modifierType.apply` * @returns the list of all modifiers that matched `modifierType` and were applied. */ - applyShuffledModifiers(scene: BattleScene, modifierType: Constructor, player: boolean = true, ...args: Parameters): T[] { - let modifiers = (player ? this.modifiers : this.enemyModifiers).filter((m): m is T => m instanceof modifierType && m.shouldApply(...args)); - scene.executeWithSeedOffset(() => { - const shuffleModifiers = mods => { - if (mods.length < 1) { - return mods; - } - const rand = Utils.randSeedInt(mods.length); - return [ mods[rand], ...shuffleModifiers(mods.filter((_, i) => i !== rand)) ]; - }; - modifiers = shuffleModifiers(modifiers); - }, scene.currentBattle.turn << 4, scene.waveSeed); + applyShuffledModifiers( + modifierType: Constructor, + player: boolean = true, + ...args: Parameters + ): T[] { + let modifiers = (player ? this.modifiers : this.enemyModifiers).filter( + (m): m is T => m instanceof modifierType && m.shouldApply(...args), + ); + this.executeWithSeedOffset( + () => { + const shuffleModifiers = (mods) => { + if (mods.length < 1) { + return mods; + } + const rand = Utils.randSeedInt(mods.length); + return [ + mods[rand], + ...shuffleModifiers(mods.filter((_, i) => i !== rand)), + ]; + }; + modifiers = shuffleModifiers(modifiers); + }, + this.currentBattle.turn << 4, + this.waveSeed, + ); return this.applyModifiersInternal(modifiers, player, args); } @@ -2960,13 +3765,23 @@ export default class BattleScene extends SceneBase { * @param ...args The list of arguments needed to invoke `modifierType.apply` * @returns the list of all modifiers that matched `modifierType` and were applied. */ - applyModifiers(modifierType: Constructor, player: boolean = true, ...args: Parameters): T[] { - const modifiers = (player ? this.modifiers : this.enemyModifiers).filter((m): m is T => m instanceof modifierType && m.shouldApply(...args)); + applyModifiers( + modifierType: Constructor, + player: boolean = true, + ...args: Parameters + ): T[] { + const modifiers = (player ? this.modifiers : this.enemyModifiers).filter( + (m): m is T => m instanceof modifierType && m.shouldApply(...args), + ); return this.applyModifiersInternal(modifiers, player, args); } /** Helper function to apply all passed modifiers */ - applyModifiersInternal(modifiers: T[], player: boolean, args: Parameters): T[] { + applyModifiersInternal( + modifiers: T[], + player: boolean, + args: Parameters, + ): T[] { const appliedModifiers: T[] = []; for (const modifier of modifiers) { if (modifier.apply(...args)) { @@ -2985,8 +3800,14 @@ export default class BattleScene extends SceneBase { * @param ...args The list of arguments needed to invoke `modifierType.apply` * @returns the first modifier that matches `modifierType` and was applied; return `null` if none matched */ - applyModifier(modifierType: Constructor, player: boolean = true, ...args: Parameters): T | null { - const modifiers = (player ? this.modifiers : this.enemyModifiers).filter((m): m is T => m instanceof modifierType && m.shouldApply(...args)); + applyModifier( + modifierType: Constructor, + player: boolean = true, + ...args: Parameters + ): T | null { + const modifiers = (player ? this.modifiers : this.enemyModifiers).filter( + (m): m is T => m instanceof modifierType && m.shouldApply(...args), + ); for (const modifier of modifiers) { if (modifier.apply(...args)) { console.log("Applied", modifier.type.name, !player ? "(enemy)" : ""); @@ -2997,33 +3818,57 @@ export default class BattleScene extends SceneBase { return null; } - triggerPokemonFormChange(pokemon: Pokemon, formChangeTriggerType: Constructor, delayed: boolean = false, modal: boolean = false): boolean { + triggerPokemonFormChange( + pokemon: Pokemon, + formChangeTriggerType: Constructor, + delayed: boolean = false, + modal: boolean = false, + ): boolean { if (pokemonFormChanges.hasOwnProperty(pokemon.species.speciesId)) { - // in case this is NECROZMA, determine which forms this - const matchingFormChangeOpts = pokemonFormChanges[pokemon.species.speciesId].filter(fc => fc.findTrigger(formChangeTriggerType) && fc.canChange(pokemon)); + const matchingFormChangeOpts = pokemonFormChanges[ + pokemon.species.speciesId + ].filter( + (fc) => fc.findTrigger(formChangeTriggerType) && fc.canChange(pokemon), + ); let matchingFormChange: SpeciesFormChange | null; - if (pokemon.species.speciesId === Species.NECROZMA && matchingFormChangeOpts.length > 1) { + if ( + pokemon.species.speciesId === Species.NECROZMA && + matchingFormChangeOpts.length > 1 + ) { // Ultra Necrozma is changing its form back, so we need to figure out into which form it devolves. - const formChangeItemModifiers = (this.findModifiers(m => m instanceof PokemonFormChangeItemModifier && m.pokemonId === pokemon.id) as PokemonFormChangeItemModifier[]).filter(m => m.active).map(m => m.formChangeItem); + const formChangeItemModifiers = ( + this.findModifiers( + (m) => + m instanceof PokemonFormChangeItemModifier && + m.pokemonId === pokemon.id, + ) as PokemonFormChangeItemModifier[] + ) + .filter((m) => m.active) + .map((m) => m.formChangeItem); - - matchingFormChange = formChangeItemModifiers.includes(FormChangeItem.N_LUNARIZER) ? - matchingFormChangeOpts[0] : - formChangeItemModifiers.includes(FormChangeItem.N_SOLARIZER) ? - matchingFormChangeOpts[1] : - null; + matchingFormChange = formChangeItemModifiers.includes( + FormChangeItem.N_LUNARIZER, + ) + ? matchingFormChangeOpts[0] + : formChangeItemModifiers.includes(FormChangeItem.N_SOLARIZER) + ? matchingFormChangeOpts[1] + : null; } else { matchingFormChange = matchingFormChangeOpts[0]; } if (matchingFormChange) { let phase: Phase; if (pokemon instanceof PlayerPokemon && !matchingFormChange.quiet) { - phase = new FormChangePhase(this, pokemon, matchingFormChange, modal); + phase = new FormChangePhase(pokemon, matchingFormChange, modal); } else { - phase = new QuietFormChangePhase(this, pokemon, matchingFormChange); + phase = new QuietFormChangePhase(pokemon, matchingFormChange); } - if (pokemon instanceof PlayerPokemon && !matchingFormChange.quiet && modal) { + if ( + pokemon instanceof PlayerPokemon && + !matchingFormChange.quiet && + modal + ) { this.overridePhase(phase); } else if (delayed) { this.pushPhase(phase); @@ -3037,8 +3882,17 @@ export default class BattleScene extends SceneBase { return false; } - triggerPokemonBattleAnim(pokemon: Pokemon, battleAnimType: PokemonAnimType, fieldAssets?: Phaser.GameObjects.Sprite[], delayed: boolean = false): boolean { - const phase: Phase = new PokemonAnimPhase(this, battleAnimType, pokemon, fieldAssets); + triggerPokemonBattleAnim( + pokemon: Pokemon, + battleAnimType: PokemonAnimType, + fieldAssets?: Phaser.GameObjects.Sprite[], + delayed: boolean = false, + ): boolean { + const phase: Phase = new PokemonAnimPhase( + battleAnimType, + pokemon, + fieldAssets, + ); if (delayed) { this.pushPhase(phase); } else { @@ -3048,15 +3902,20 @@ export default class BattleScene extends SceneBase { } validateAchvs(achvType: Constructor, ...args: unknown[]): void { - const filteredAchvs = Object.values(achvs).filter(a => a instanceof achvType); + const filteredAchvs = Object.values(achvs).filter( + (a) => a instanceof achvType, + ); for (const achv of filteredAchvs) { this.validateAchv(achv, args); } } validateAchv(achv: Achv, args?: unknown[]): boolean { - if ((!this.gameData.achvUnlocks.hasOwnProperty(achv.id) || Overrides.ACHIEVEMENTS_REUNLOCK_OVERRIDE) - && achv.validate(this, args)) { + if ( + (!this.gameData.achvUnlocks.hasOwnProperty(achv.id) || + Overrides.ACHIEVEMENTS_REUNLOCK_OVERRIDE) && + achv.validate(args) + ) { this.gameData.achvUnlocks[achv.id] = new Date().getTime(); this.ui.achvBar.showAchv(achv); if (vouchers.hasOwnProperty(achv.id)) { @@ -3069,7 +3928,10 @@ export default class BattleScene extends SceneBase { } validateVoucher(voucher: Voucher, args?: unknown[]): boolean { - if (!this.gameData.voucherUnlocks.hasOwnProperty(voucher.id) && voucher.validate(this, args)) { + if ( + !this.gameData.voucherUnlocks.hasOwnProperty(voucher.id) && + voucher.validate(args) + ) { this.gameData.voucherUnlocks[voucher.id] = new Date().getTime(); this.ui.achvBar.showAchv(voucher); this.gameData.voucherCounts[voucher.voucherType]++; @@ -3085,18 +3947,21 @@ export default class BattleScene extends SceneBase { gameMode: this.currentBattle ? this.gameMode.getName() : "Title", biome: this.currentBattle ? getBiomeName(this.arena.biomeType) : "", wave: this.currentBattle?.waveIndex ?? 0, - party: this.party ? this.party.map((p) => { - return { - name: p.name, - form: p.getFormKey(), - types: p.getTypes().map((type) => Type[type]), - teraType: p.getTeraType() !== Type.UNKNOWN ? Type[p.getTeraType()] : "", - level: p.level, - currentHP: p.hp, - maxHP: p.getMaxHp(), - status: p.status?.effect ? StatusEffect[p.status.effect] : "" - }; - }) : [], + party: this.party + ? this.party.map((p) => { + return { + name: p.name, + form: p.getFormKey(), + types: p.getTypes().map((type) => Type[type]), + teraType: Type[p.getTeraType()], + isTerastallized: p.isTerastallized, + level: p.level, + currentHP: p.hp, + maxHP: p.getMaxHp(), + status: p.status?.effect ? StatusEffect[p.status.effect] : "", + }; + }) + : [], modeChain: this.ui?.getModeChain() ?? [], }; (window as any).gameInfo = gameInfo; @@ -3130,26 +3995,44 @@ export default class BattleScene extends SceneBase { * @param pokemon The (enemy) pokemon */ initFinalBossPhaseTwo(pokemon: Pokemon): void { - if (pokemon instanceof EnemyPokemon && pokemon.isBoss() && !pokemon.formIndex && pokemon.bossSegmentIndex < 1) { + if ( + pokemon instanceof EnemyPokemon && + pokemon.isBoss() && + !pokemon.formIndex && + pokemon.bossSegmentIndex < 1 + ) { this.fadeOutBgm(Utils.fixedInt(2000), false); - this.ui.showDialogue(battleSpecDialogue[BattleSpec.FINAL_BOSS].firstStageWin, pokemon.species.name, undefined, () => { - const finalBossMBH = getModifierType(modifierTypes.MINI_BLACK_HOLE).newModifier(pokemon) as TurnHeldItemTransferModifier; - finalBossMBH.setTransferrableFalse(); - this.addEnemyModifier(finalBossMBH, false, true); - pokemon.generateAndPopulateMoveset(1); - this.setFieldScale(0.75); - this.triggerPokemonFormChange(pokemon, SpeciesFormChangeManualTrigger, false); - this.currentBattle.double = true; - const availablePartyMembers = this.getPlayerParty().filter((p) => p.isAllowedInBattle()); - if (availablePartyMembers.length > 1) { - this.pushPhase(new ToggleDoublePositionPhase(this, true)); - if (!availablePartyMembers[1].isOnField()) { - this.pushPhase(new SummonPhase(this, 1)); + this.ui.showDialogue( + battleSpecDialogue[BattleSpec.FINAL_BOSS].firstStageWin, + pokemon.species.name, + undefined, + () => { + const finalBossMBH = getModifierType( + modifierTypes.MINI_BLACK_HOLE, + ).newModifier(pokemon) as TurnHeldItemTransferModifier; + finalBossMBH.setTransferrableFalse(); + this.addEnemyModifier(finalBossMBH, false, true); + pokemon.generateAndPopulateMoveset(1); + this.setFieldScale(0.75); + this.triggerPokemonFormChange( + pokemon, + SpeciesFormChangeManualTrigger, + false, + ); + this.currentBattle.double = true; + const availablePartyMembers = this.getPlayerParty().filter((p) => + p.isAllowedInBattle(), + ); + if (availablePartyMembers.length > 1) { + this.pushPhase(new ToggleDoublePositionPhase(true)); + if (!availablePartyMembers[1].isOnField()) { + this.pushPhase(new SummonPhase(1)); + } } - } - this.shiftPhase(); - }); + this.shiftPhase(); + }, + ); return; } @@ -3163,33 +4046,62 @@ export default class BattleScene extends SceneBase { * @param useWaveIndexMultiplier Default false. If true, will multiply expValue by a scaling waveIndex multiplier. Not needed if expValue is already scaled by level/wave * @param pokemonParticipantIds Participants. If none are defined, no exp will be given. To spread evenly among the party, should pass all ids of party members. */ - applyPartyExp(expValue: number, pokemonDefeated: boolean, useWaveIndexMultiplier?: boolean, pokemonParticipantIds?: Set): void { - const participantIds = pokemonParticipantIds ?? this.currentBattle.playerParticipantIds; + applyPartyExp( + expValue: number, + pokemonDefeated: boolean, + useWaveIndexMultiplier?: boolean, + pokemonParticipantIds?: Set, + ): void { + const participantIds = + pokemonParticipantIds ?? this.currentBattle.playerParticipantIds; const party = this.getPlayerParty(); - const expShareModifier = this.findModifier(m => m instanceof ExpShareModifier) as ExpShareModifier; - const expBalanceModifier = this.findModifier(m => m instanceof ExpBalanceModifier) as ExpBalanceModifier; - const multipleParticipantExpBonusModifier = this.findModifier(m => m instanceof MultipleParticipantExpBonusModifier) as MultipleParticipantExpBonusModifier; - const nonFaintedPartyMembers = party.filter(p => p.hp); - const expPartyMembers = nonFaintedPartyMembers.filter(p => p.level < this.getMaxExpLevel()); + const expShareModifier = this.findModifier( + (m) => m instanceof ExpShareModifier, + ) as ExpShareModifier; + const expBalanceModifier = this.findModifier( + (m) => m instanceof ExpBalanceModifier, + ) as ExpBalanceModifier; + const multipleParticipantExpBonusModifier = this.findModifier( + (m) => m instanceof MultipleParticipantExpBonusModifier, + ) as MultipleParticipantExpBonusModifier; + const nonFaintedPartyMembers = party.filter((p) => p.hp); + const expPartyMembers = nonFaintedPartyMembers.filter( + (p) => p.level < this.getMaxExpLevel(), + ); const partyMemberExp: number[] = []; // EXP value calculation is based off Pokemon.getExpValue if (useWaveIndexMultiplier) { - expValue = Math.floor(expValue * this.currentBattle.waveIndex / 5 + 1); + expValue = Math.floor((expValue * this.currentBattle.waveIndex) / 5 + 1); } if (participantIds.size > 0) { - if (this.currentBattle.battleType === BattleType.TRAINER || this.currentBattle.mysteryEncounter?.encounterMode === MysteryEncounterMode.TRAINER_BATTLE) { + if ( + this.currentBattle.battleType === BattleType.TRAINER || + this.currentBattle.mysteryEncounter?.encounterMode === + MysteryEncounterMode.TRAINER_BATTLE + ) { expValue = Math.floor(expValue * 1.5); - } else if (this.currentBattle.isBattleMysteryEncounter() && this.currentBattle.mysteryEncounter) { - expValue = Math.floor(expValue * this.currentBattle.mysteryEncounter.expMultiplier); + } else if ( + this.currentBattle.isBattleMysteryEncounter() && + this.currentBattle.mysteryEncounter + ) { + expValue = Math.floor( + expValue * this.currentBattle.mysteryEncounter.expMultiplier, + ); } for (const partyMember of nonFaintedPartyMembers) { const pId = partyMember.id; const participated = participantIds.has(pId); if (participated && pokemonDefeated) { partyMember.addFriendship(FRIENDSHIP_GAIN_FROM_BATTLE); - const machoBraceModifier = partyMember.getHeldItems().find(m => m instanceof PokemonIncrementingStatModifier); - if (machoBraceModifier && machoBraceModifier.stackCount < machoBraceModifier.getMaxStackCount(this)) { + const machoBraceModifier = partyMember + .getHeldItems() + .find((m) => m instanceof PokemonIncrementingStatModifier); + if ( + machoBraceModifier && + machoBraceModifier.stackCount < + machoBraceModifier.getMaxStackCount() + ) { machoBraceModifier.stackCount++; this.updateModifiers(true, true); partyMember.updateInfo(); @@ -3204,12 +4116,14 @@ export default class BattleScene extends SceneBase { } let expMultiplier = 0; if (participated) { - expMultiplier += (1 / participantIds.size); + expMultiplier += 1 / participantIds.size; if (participantIds.size > 1 && multipleParticipantExpBonusModifier) { - expMultiplier += multipleParticipantExpBonusModifier.getStackCount() * 0.2; + expMultiplier += + multipleParticipantExpBonusModifier.getStackCount() * 0.2; } } else if (expShareModifier) { - expMultiplier += (expShareModifier.getStackCount() * 0.2) / participantIds.size; + expMultiplier += + (expShareModifier.getStackCount() * 0.2) / participantIds.size; } if (partyMember.pokerus) { expMultiplier *= 1.5; @@ -3218,7 +4132,12 @@ export default class BattleScene extends SceneBase { expMultiplier = Overrides.XP_MULTIPLIER_OVERRIDE; } const pokemonExp = new Utils.NumberHolder(expValue * expMultiplier); - this.applyModifiers(PokemonExpBoosterModifier, true, partyMember, pokemonExp); + this.applyModifiers( + PokemonExpBoosterModifier, + true, + partyMember, + pokemonExp, + ); partyMemberExp.push(Math.floor(pokemonExp.value)); } @@ -3239,10 +4158,16 @@ export default class BattleScene extends SceneBase { } }); - const splitExp = Math.floor(totalExp / recipientExpPartyMemberIndexes.length); + const splitExp = Math.floor( + totalExp / recipientExpPartyMemberIndexes.length, + ); expPartyMembers.forEach((_partyMember, pm) => { - partyMemberExp[pm] = Phaser.Math.Linear(partyMemberExp[pm], recipientExpPartyMemberIndexes.indexOf(pm) > -1 ? splitExp : 0, 0.2 * expBalanceModifier.getStackCount()); + partyMemberExp[pm] = Phaser.Math.Linear( + partyMemberExp[pm], + recipientExpPartyMemberIndexes.indexOf(pm) > -1 ? splitExp : 0, + 0.2 * expBalanceModifier.getStackCount(), + ); }); } @@ -3251,7 +4176,11 @@ export default class BattleScene extends SceneBase { if (exp) { const partyMemberIndex = party.indexOf(expPartyMembers[pm]); - this.unshiftPhase(expPartyMembers[pm].isOnField() ? new ExpPhase(this, partyMemberIndex, exp) : new ShowPartyExpBarPhase(this, partyMemberIndex, exp)); + this.unshiftPhase( + expPartyMembers[pm].isOnField() + ? new ExpPhase(partyMemberIndex, exp) + : new ShowPartyExpBarPhase(partyMemberIndex, exp), + ); } } } @@ -3262,9 +4191,19 @@ export default class BattleScene extends SceneBase { * Even if returns `true`, does not guarantee that a wave will actually be a ME. * That check is made in {@linkcode BattleScene.isWaveMysteryEncounter} instead. */ - isMysteryEncounterValidForWave(battleType: BattleType, waveIndex: number): boolean { - const [ lowestMysteryEncounterWave, highestMysteryEncounterWave ] = this.gameMode.getMysteryEncounterLegalWaves(); - return this.gameMode.hasMysteryEncounters && battleType === BattleType.WILD && !this.gameMode.isBoss(waveIndex) && waveIndex < highestMysteryEncounterWave && waveIndex > lowestMysteryEncounterWave; + isMysteryEncounterValidForWave( + battleType: BattleType, + waveIndex: number, + ): boolean { + const [ lowestMysteryEncounterWave, highestMysteryEncounterWave ] = + this.gameMode.getMysteryEncounterLegalWaves(); + return ( + this.gameMode.hasMysteryEncounters && + battleType === BattleType.WILD && + !this.gameMode.isBoss(waveIndex) && + waveIndex < highestMysteryEncounterWave && + waveIndex > lowestMysteryEncounterWave + ); } /** @@ -3274,31 +4213,56 @@ export default class BattleScene extends SceneBase { * @param newBattleType * @param waveIndex */ - private isWaveMysteryEncounter(newBattleType: BattleType, waveIndex: number): boolean { - const [ lowestMysteryEncounterWave, highestMysteryEncounterWave ] = this.gameMode.getMysteryEncounterLegalWaves(); + private isWaveMysteryEncounter( + newBattleType: BattleType, + waveIndex: number, + ): boolean { + const [ lowestMysteryEncounterWave, highestMysteryEncounterWave ] = + this.gameMode.getMysteryEncounterLegalWaves(); if (this.isMysteryEncounterValidForWave(newBattleType, waveIndex)) { // Base spawn weight is BASE_MYSTERY_ENCOUNTER_SPAWN_WEIGHT/256, and increases by WEIGHT_INCREMENT_ON_SPAWN_MISS/256 for each missed attempt at spawning an encounter on a valid floor - const sessionEncounterRate = this.mysteryEncounterSaveData.encounterSpawnChance; + const sessionEncounterRate = + this.mysteryEncounterSaveData.encounterSpawnChance; const encounteredEvents = this.mysteryEncounterSaveData.encounteredEvents; // If total number of encounters is lower than expected for the run, slightly favor a new encounter spawn (reverse as well) // Reduces occurrence of runs with total encounters significantly different from AVERAGE_ENCOUNTERS_PER_RUN_TARGET // Favored rate changes can never exceed 50%. So if base rate is 15/256 and favored rate would add 200/256, result will be (15 + 128)/256 - const expectedEncountersByFloor = AVERAGE_ENCOUNTERS_PER_RUN_TARGET / (highestMysteryEncounterWave - lowestMysteryEncounterWave) * (waveIndex - lowestMysteryEncounterWave); - const currentRunDiffFromAvg = expectedEncountersByFloor - encounteredEvents.length; - const favoredEncounterRate = sessionEncounterRate + Math.min(currentRunDiffFromAvg * ANTI_VARIANCE_WEIGHT_MODIFIER, MYSTERY_ENCOUNTER_SPAWN_MAX_WEIGHT / 2); + const expectedEncountersByFloor = + (AVERAGE_ENCOUNTERS_PER_RUN_TARGET / + (highestMysteryEncounterWave - lowestMysteryEncounterWave)) * + (waveIndex - lowestMysteryEncounterWave); + const currentRunDiffFromAvg = + expectedEncountersByFloor - encounteredEvents.length; + const favoredEncounterRate = + sessionEncounterRate + + Math.min( + currentRunDiffFromAvg * ANTI_VARIANCE_WEIGHT_MODIFIER, + MYSTERY_ENCOUNTER_SPAWN_MAX_WEIGHT / 2, + ); - const successRate = isNullOrUndefined(Overrides.MYSTERY_ENCOUNTER_RATE_OVERRIDE) ? favoredEncounterRate : Overrides.MYSTERY_ENCOUNTER_RATE_OVERRIDE!; + const successRate = isNullOrUndefined( + Overrides.MYSTERY_ENCOUNTER_RATE_OVERRIDE, + ) + ? favoredEncounterRate + : Overrides.MYSTERY_ENCOUNTER_RATE_OVERRIDE!; // If the most recent ME was 3 or fewer waves ago, can never spawn a ME - const canSpawn = encounteredEvents.length === 0 || (waveIndex - encounteredEvents[encounteredEvents.length - 1].waveIndex) > 3 || !isNullOrUndefined(Overrides.MYSTERY_ENCOUNTER_RATE_OVERRIDE); + const canSpawn = + encounteredEvents.length === 0 || + waveIndex - encounteredEvents[encounteredEvents.length - 1].waveIndex > + 3 || + !isNullOrUndefined(Overrides.MYSTERY_ENCOUNTER_RATE_OVERRIDE); if (canSpawn) { let roll = MYSTERY_ENCOUNTER_SPAWN_MAX_WEIGHT; // Always rolls the check on the same offset to ensure no RNG changes from reloading session - this.executeWithSeedOffset(() => { - roll = randSeedInt(MYSTERY_ENCOUNTER_SPAWN_MAX_WEIGHT); - }, waveIndex * 3 * 1000); + this.executeWithSeedOffset( + () => { + roll = randSeedInt(MYSTERY_ENCOUNTER_SPAWN_MAX_WEIGHT); + }, + waveIndex * 3 * 1000, + ); return roll < successRate; } } @@ -3312,10 +4276,16 @@ export default class BattleScene extends SceneBase { * @param canBypass optional boolean to indicate that the request is coming from a function that needs to access a Mystery Encounter outside of gameplay requirements * @returns */ - getMysteryEncounter(encounterType?: MysteryEncounterType, canBypass?: boolean): MysteryEncounter { + getMysteryEncounter( + encounterType?: MysteryEncounterType, + canBypass?: boolean, + ): MysteryEncounter { // Loading override or session encounter let encounter: MysteryEncounter | null; - if (!isNullOrUndefined(Overrides.MYSTERY_ENCOUNTER_OVERRIDE) && allMysteryEncounters.hasOwnProperty(Overrides.MYSTERY_ENCOUNTER_OVERRIDE)) { + if ( + !isNullOrUndefined(Overrides.MYSTERY_ENCOUNTER_OVERRIDE) && + allMysteryEncounters.hasOwnProperty(Overrides.MYSTERY_ENCOUNTER_OVERRIDE) + ) { encounter = allMysteryEncounters[Overrides.MYSTERY_ENCOUNTER_OVERRIDE]; if (canBypass) { return encounter; @@ -3324,13 +4294,22 @@ export default class BattleScene extends SceneBase { encounter = allMysteryEncounters[encounterType ?? -1]; return encounter; } else { - encounter = !isNullOrUndefined(encounterType) ? allMysteryEncounters[encounterType] : null; + encounter = !isNullOrUndefined(encounterType) + ? allMysteryEncounters[encounterType] + : null; } // Check for queued encounters first - if (!encounter && this.mysteryEncounterSaveData?.queuedEncounters && this.mysteryEncounterSaveData.queuedEncounters.length > 0) { + if ( + !encounter && + this.mysteryEncounterSaveData?.queuedEncounters && + this.mysteryEncounterSaveData.queuedEncounters.length > 0 + ) { let i = 0; - while (i < this.mysteryEncounterSaveData.queuedEncounters.length && !!encounter) { + while ( + i < this.mysteryEncounterSaveData.queuedEncounters.length && + !!encounter + ) { const candidate = this.mysteryEncounterSaveData.queuedEncounters[i]; const forcedChance = candidate.spawnPercent; if (Utils.randSeedInt(100) < forcedChance) { @@ -3343,37 +4322,61 @@ export default class BattleScene extends SceneBase { if (encounter) { encounter = new MysteryEncounter(encounter); - encounter.populateDialogueTokensFromRequirements(this); + encounter.populateDialogueTokensFromRequirements(); return encounter; } // See Enum values for base tier weights - const tierWeights = [ MysteryEncounterTier.COMMON, MysteryEncounterTier.GREAT, MysteryEncounterTier.ULTRA, MysteryEncounterTier.ROGUE ]; + const tierWeights = [ + MysteryEncounterTier.COMMON, + MysteryEncounterTier.GREAT, + MysteryEncounterTier.ULTRA, + MysteryEncounterTier.ROGUE, + ]; // Adjust tier weights by previously encountered events to lower odds of only Common/Great in run - this.mysteryEncounterSaveData.encounteredEvents.forEach(seenEncounterData => { - if (seenEncounterData.tier === MysteryEncounterTier.COMMON) { - tierWeights[0] = tierWeights[0] - 6; - } else if (seenEncounterData.tier === MysteryEncounterTier.GREAT) { - tierWeights[1] = tierWeights[1] - 4; - } - }); + this.mysteryEncounterSaveData.encounteredEvents.forEach( + (seenEncounterData) => { + if (seenEncounterData.tier === MysteryEncounterTier.COMMON) { + tierWeights[0] = tierWeights[0] - 6; + } else if (seenEncounterData.tier === MysteryEncounterTier.GREAT) { + tierWeights[1] = tierWeights[1] - 4; + } + }, + ); const totalWeight = tierWeights.reduce((a, b) => a + b); const tierValue = Utils.randSeedInt(totalWeight); const commonThreshold = totalWeight - tierWeights[0]; const greatThreshold = totalWeight - tierWeights[0] - tierWeights[1]; - const ultraThreshold = totalWeight - tierWeights[0] - tierWeights[1] - tierWeights[2]; - let tier: MysteryEncounterTier | null = tierValue > commonThreshold ? MysteryEncounterTier.COMMON : tierValue > greatThreshold ? MysteryEncounterTier.GREAT : tierValue > ultraThreshold ? MysteryEncounterTier.ULTRA : MysteryEncounterTier.ROGUE; + const ultraThreshold = + totalWeight - tierWeights[0] - tierWeights[1] - tierWeights[2]; + let tier: MysteryEncounterTier | null = + tierValue > commonThreshold + ? MysteryEncounterTier.COMMON + : tierValue > greatThreshold + ? MysteryEncounterTier.GREAT + : tierValue > ultraThreshold + ? MysteryEncounterTier.ULTRA + : MysteryEncounterTier.ROGUE; if (!isNullOrUndefined(Overrides.MYSTERY_ENCOUNTER_TIER_OVERRIDE)) { tier = Overrides.MYSTERY_ENCOUNTER_TIER_OVERRIDE; } let availableEncounters: MysteryEncounter[] = []; - // New encounter should never be the same as the most recent encounter - const previousEncounter = this.mysteryEncounterSaveData.encounteredEvents.length > 0 ? this.mysteryEncounterSaveData.encounteredEvents[this.mysteryEncounterSaveData.encounteredEvents.length - 1].type : null; - const biomeMysteryEncounters = mysteryEncountersByBiome.get(this.arena.biomeType) ?? []; + const previousEncounter = + this.mysteryEncounterSaveData.encounteredEvents.length > 0 + ? this.mysteryEncounterSaveData.encounteredEvents[ + this.mysteryEncounterSaveData.encounteredEvents.length - 1 + ].type + : null; + const disabledEncounters = + this.eventManager.getEventMysteryEncountersDisabled(); + const biomeMysteryEncounters = + mysteryEncountersByBiome + .get(this.arena.biomeType) + ?.filter((enc) => !disabledEncounters.includes(enc)) ?? []; // If no valid encounters exist at tier, checks next tier down, continuing until there are some encounters available while (availableEncounters.length === 0 && tier !== null) { availableEncounters = biomeMysteryEncounters @@ -3382,34 +4385,57 @@ export default class BattleScene extends SceneBase { if (!encounterCandidate) { return false; } - if (encounterCandidate.encounterTier !== tier) { // Encounter is in tier + if ( + this.eventManager.getMysteryEncounterTierForEvent( + encounterType, + encounterCandidate.encounterTier, + ) !== tier + ) { return false; } const disallowedGameModes = encounterCandidate.disallowedGameModes; - if (disallowedGameModes && disallowedGameModes.length > 0 - && disallowedGameModes.includes(this.gameMode.modeId)) { // Encounter is enabled for game mode + if ( + disallowedGameModes && + disallowedGameModes.length > 0 && + disallowedGameModes.includes(this.gameMode.modeId) + ) { return false; } - if (this.gameMode.modeId === GameModes.CHALLENGE) { // Encounter is enabled for challenges - const disallowedChallenges = encounterCandidate.disallowedChallenges; - if (disallowedChallenges && disallowedChallenges.length > 0 && this.gameMode.challenges.some(challenge => disallowedChallenges.includes(challenge.id))) { + if (this.gameMode.modeId === GameModes.CHALLENGE) { + const disallowedChallenges = + encounterCandidate.disallowedChallenges; + if ( + disallowedChallenges && + disallowedChallenges.length > 0 && + this.gameMode.challenges.some((challenge) => + disallowedChallenges.includes(challenge.id), + ) + ) { return false; } } - if (!encounterCandidate.meetsRequirements(this)) { // Meets encounter requirements + if (!encounterCandidate.meetsRequirements()) { return false; } - if (previousEncounter !== null && encounterType === previousEncounter) { // Previous encounter was not this one + if ( + previousEncounter !== null && + encounterType === previousEncounter + ) { return false; } - if (this.mysteryEncounterSaveData.encounteredEvents.length > 0 && // Encounter has not exceeded max allowed encounters - (encounterCandidate.maxAllowedEncounters && encounterCandidate.maxAllowedEncounters > 0) - && this.mysteryEncounterSaveData.encounteredEvents.filter(e => e.type === encounterType).length >= encounterCandidate.maxAllowedEncounters) { + if ( + this.mysteryEncounterSaveData.encounteredEvents.length > 0 && + encounterCandidate.maxAllowedEncounters && + encounterCandidate.maxAllowedEncounters > 0 && + this.mysteryEncounterSaveData.encounteredEvents.filter( + (e) => e.type === encounterType, + ).length >= encounterCandidate.maxAllowedEncounters + ) { return false; } return true; }) - .map((m) => (allMysteryEncounters[m])); + .map((m) => allMysteryEncounters[m]); // Decrement tier if (tier === MysteryEncounterTier.ROGUE) { tier = MysteryEncounterTier.ULTRA; @@ -3424,13 +4450,16 @@ export default class BattleScene extends SceneBase { // If absolutely no encounters are available, spawn 0th encounter if (availableEncounters.length === 0) { - console.log("No Mystery Encounters found, falling back to Mysterious Challengers."); + console.log( + "No Mystery Encounters found, falling back to Mysterious Challengers.", + ); return allMysteryEncounters[MysteryEncounterType.MYSTERIOUS_CHALLENGERS]; } - encounter = availableEncounters[Utils.randSeedInt(availableEncounters.length)]; + encounter = + availableEncounters[Utils.randSeedInt(availableEncounters.length)]; // New encounter object to not dirty flags encounter = new MysteryEncounter(encounter); - encounter.populateDialogueTokensFromRequirements(this); + encounter.populateDialogueTokensFromRequirements(); return encounter; } } diff --git a/src/battle.ts b/src/battle.ts index 75f0dff2534..242954a3729 100644 --- a/src/battle.ts +++ b/src/battle.ts @@ -1,31 +1,49 @@ -import BattleScene from "./battle-scene"; -import { Command } from "./ui/command-ui-handler"; +import { globalScene } from "#app/global-scene"; +import type { Command } from "./ui/command-ui-handler"; import * as Utils from "./utils"; import Trainer, { TrainerVariant } from "./field/trainer"; -import { GameMode } from "./game-mode"; +import type { GameMode } from "./game-mode"; import { MoneyMultiplierModifier, PokemonHeldItemModifier } from "./modifier/modifier"; -import { PokeballType } from "#enums/pokeball"; +import type { PokeballType } from "#enums/pokeball"; import { trainerConfigs } from "#app/data/trainer-config"; import { SpeciesFormKey } from "#enums/species-form-key"; -import Pokemon, { EnemyPokemon, PlayerPokemon, QueuedMove } from "#app/field/pokemon"; +import type { EnemyPokemon, PlayerPokemon, TurnMove } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattleSpec } from "#enums/battle-spec"; -import { Moves } from "#enums/moves"; +import type { Moves } from "#enums/moves"; import { PlayerGender } from "#enums/player-gender"; import { MusicPreference } from "#app/system/settings/settings"; import { Species } from "#enums/species"; import { TrainerType } from "#enums/trainer-type"; import i18next from "#app/plugins/i18n"; -import MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; -import { CustomModifierSettings } from "#app/modifier/modifier-type"; +import type { CustomModifierSettings } from "#app/modifier/modifier-type"; import { ModifierTier } from "#app/modifier/modifier-tier"; -import { MysteryEncounterType } from "#enums/mystery-encounter-type"; +import type { MysteryEncounterType } from "#enums/mystery-encounter-type"; export enum ClassicFixedBossWaves { - // TODO: other fixed wave battles should be added here + TOWN_YOUNGSTER = 5, + RIVAL_1 = 8, + RIVAL_2 = 25, + EVIL_GRUNT_1 = 35, + RIVAL_3 = 55, + EVIL_GRUNT_2 = 62, + EVIL_GRUNT_3 = 64, + EVIL_ADMIN_1 = 66, + RIVAL_4 = 95, + EVIL_GRUNT_4 = 112, + EVIL_ADMIN_2 = 114, EVIL_BOSS_1 = 115, + RIVAL_5 = 145, EVIL_BOSS_2 = 165, + ELITE_FOUR_1 = 182, + ELITE_FOUR_2 = 184, + ELITE_FOUR_3 = 186, + ELITE_FOUR_4 = 188, + CHAMPION = 190, + RIVAL_6 = 195, } export enum BattleType { @@ -44,12 +62,12 @@ export enum BattlerIndex { } export interface TurnCommand { - command: Command; - cursor?: number; - move?: QueuedMove; - targets?: BattlerIndex[]; - skip?: boolean; - args?: any[]; + command: Command; + cursor?: number; + move?: TurnMove; + targets?: BattlerIndex[]; + skip?: boolean; + args?: any[]; } export interface FaintLogEntry { @@ -74,6 +92,7 @@ export default class Battle { public started: boolean = false; public enemySwitchCounter: number = 0; public turn: number = 0; + public preTurnCommands: TurnCommands; public turnCommands: TurnCommands; public playerParticipantIds: Set = new Set(); public battleScore: number = 0; @@ -83,10 +102,15 @@ export default class Battle { public battleSeed: string = Utils.randomString(16, true); private battleSeedState: string | null = null; public moneyScattered: number = 0; + /** Primarily for double battles, keeps track of last enemy and player pokemon that triggered its ability or used a move */ + public lastEnemyInvolved: number; + public lastPlayerInvolved: number; public lastUsedPokeball: PokeballType | null = null; - /** The number of times a Pokemon on the player's side has fainted this battle */ - public playerFaints: number = 0; - /** The number of times a Pokemon on the enemy's side has fainted this battle */ + /** + * Saves the number of times a Pokemon on the enemy's side has fainted during this battle. + * This is saved here since we encounter a new enemy every wave. + * {@linkcode globalScene.arena.playerFaints} is the corresponding faint counter for the player and needs to be save across waves (reset every arena encounter). + */ public enemyFaints: number = 0; public playerFaintsHistory: FaintLogEntry[] = []; public enemyFaintsHistory: FaintLogEntry[] = []; @@ -97,7 +121,7 @@ export default class Battle { private rngCounter: number = 0; - constructor(gameMode: GameMode, waveIndex: number, battleType: BattleType, trainer?: Trainer, double?: boolean) { + constructor(gameMode: GameMode, waveIndex: number, battleType: BattleType, trainer?: Trainer, double: boolean = false) { this.gameMode = gameMode; this.waveIndex = waveIndex; this.battleType = battleType; @@ -106,7 +130,7 @@ export default class Battle { this.enemyLevels = battleType !== BattleType.TRAINER ? new Array(double ? 2 : 1).fill(null).map(() => this.getLevelForWave()) : trainer?.getPartyLevels(this.waveIndex); - this.double = double ?? false; + this.double = double; } private initBattleSpec(): void { @@ -154,9 +178,10 @@ export default class Battle { return this.double ? 2 : 1; } - incrementTurn(scene: BattleScene): void { + incrementTurn(): void { this.turn++; this.turnCommands = Object.fromEntries(Utils.getEnumValues(BattlerIndex).map(bt => [ bt, null ])); + this.preTurnCommands = Object.fromEntries(Utils.getEnumValues(BattlerIndex).map(bt => [ bt, null ])); this.battleSeedState = null; } @@ -169,7 +194,7 @@ export default class Battle { } addPostBattleLoot(enemyPokemon: EnemyPokemon): void { - this.postBattleLoot.push(...enemyPokemon.scene.findModifiers(m => m instanceof PokemonHeldItemModifier && m.pokemonId === enemyPokemon.id && m.isTransferable, false).map(i => { + this.postBattleLoot.push(...globalScene.findModifiers(m => m instanceof PokemonHeldItemModifier && m.pokemonId === enemyPokemon.id && m.isTransferable, false).map(i => { const ret = i as PokemonHeldItemModifier; //@ts-ignore - this is awful to fix/change ret.pokemonId = null; @@ -177,43 +202,43 @@ export default class Battle { })); } - pickUpScatteredMoney(scene: BattleScene): void { - const moneyAmount = new Utils.IntegerHolder(scene.currentBattle.moneyScattered); - scene.applyModifiers(MoneyMultiplierModifier, true, moneyAmount); + pickUpScatteredMoney(): void { + const moneyAmount = new Utils.NumberHolder(globalScene.currentBattle.moneyScattered); + globalScene.applyModifiers(MoneyMultiplierModifier, true, moneyAmount); - if (scene.arena.getTag(ArenaTagType.HAPPY_HOUR)) { + if (globalScene.arena.getTag(ArenaTagType.HAPPY_HOUR)) { moneyAmount.value *= 2; } - scene.addMoney(moneyAmount.value); + globalScene.addMoney(moneyAmount.value); const userLocale = navigator.language || "en-US"; const formattedMoneyAmount = moneyAmount.value.toLocaleString(userLocale); const message = i18next.t("battle:moneyPickedUp", { moneyAmount: formattedMoneyAmount }); - scene.queueMessage(message, undefined, true); + globalScene.queueMessage(message, undefined, true); - scene.currentBattle.moneyScattered = 0; + globalScene.currentBattle.moneyScattered = 0; } - addBattleScore(scene: BattleScene): void { - let partyMemberTurnMultiplier = scene.getEnemyParty().length / 2 + 0.5; + addBattleScore(): void { + let partyMemberTurnMultiplier = globalScene.getEnemyParty().length / 2 + 0.5; if (this.double) { partyMemberTurnMultiplier /= 1.5; } - for (const p of scene.getEnemyParty()) { + for (const p of globalScene.getEnemyParty()) { if (p.isBoss()) { - partyMemberTurnMultiplier *= (p.bossSegments / 1.5) / scene.getEnemyParty().length; + partyMemberTurnMultiplier *= (p.bossSegments / 1.5) / globalScene.getEnemyParty().length; } } const turnMultiplier = Phaser.Tweens.Builders.GetEaseFunction("Sine.easeIn")(1 - Math.min(this.turn - 2, 10 * partyMemberTurnMultiplier) / (10 * partyMemberTurnMultiplier)); const finalBattleScore = Math.ceil(this.battleScore * turnMultiplier); - scene.score += finalBattleScore; + globalScene.score += finalBattleScore; console.log(`Battle Score: ${finalBattleScore} (${this.turn - 1} Turns x${Math.floor(turnMultiplier * 100) / 100})`); - console.log(`Total Score: ${scene.score}`); - scene.updateScoreText(); + console.log(`Total Score: ${globalScene.score}`); + globalScene.updateScoreText(); } - getBgmOverride(scene: BattleScene): string | null { + getBgmOverride(): string | null { if (this.isBattleMysteryEncounter() && this.mysteryEncounter?.encounterMode === MysteryEncounterMode.DEFAULT) { // Music is overridden for MEs during ME onInit() // Should not use any BGM overrides before swapping from DEFAULT mode @@ -222,7 +247,7 @@ export default class Battle { if (!this.started && this.trainer?.config.encounterBgm && this.trainer?.getEncounterMessages()?.length) { return `encounter_${this.trainer?.getEncounterBgm()}`; } - if (scene.musicPreference === MusicPreference.CONSISTENT) { + if (globalScene.musicPreference === MusicPreference.GENFIVE) { return this.trainer?.getBattleBgm() ?? null; } else { return this.trainer?.getMixedBattleBgm() ?? null; @@ -230,7 +255,7 @@ export default class Battle { } else if (this.gameMode.isClassic && this.waveIndex > 195 && this.battleSpec !== BattleSpec.FINAL_BOSS) { return "end_summit"; } - const wildOpponents = scene.getEnemyParty(); + const wildOpponents = globalScene.getEnemyParty(); for (const pokemon of wildOpponents) { if (this.battleSpec === BattleSpec.FINAL_BOSS) { if (pokemon.species.getFormSpriteKey(pokemon.formIndex) === SpeciesFormKey.ETERNAMAX) { @@ -239,7 +264,7 @@ export default class Battle { return "battle_final_encounter"; } if (pokemon.species.legendary || pokemon.species.subLegendary || pokemon.species.mythical) { - if (scene.musicPreference === MusicPreference.CONSISTENT) { + if (globalScene.musicPreference === MusicPreference.GENFIVE) { switch (pokemon.species.speciesId) { case Species.REGIROCK: case Species.REGICE: @@ -256,7 +281,7 @@ export default class Battle { } return "battle_legendary_unova"; } - } else if (scene.musicPreference === MusicPreference.MIXED) { + } else if (globalScene.musicPreference === MusicPreference.ALLGENS) { switch (pokemon.species.speciesId) { case Species.ARTICUNO: case Species.ZAPDOS: @@ -396,7 +421,7 @@ export default class Battle { } } - if (scene.gameMode.isClassic && this.waveIndex <= 4) { + if (globalScene.gameMode.isClassic && this.waveIndex <= 4) { return "battle_wild"; } @@ -409,12 +434,12 @@ export default class Battle { * @param min The minimum integer to pick, default `0` * @returns A random integer between {@linkcode min} and ({@linkcode min} + {@linkcode range} - 1) */ - randSeedInt(scene: BattleScene, range: number, min: number = 0): number { + randSeedInt(range: number, min: number = 0): number { if (range <= 1) { return min; } - const tempRngCounter = scene.rngCounter; - const tempSeedOverride = scene.rngSeedOverride; + const tempRngCounter = globalScene.rngCounter; + const tempSeedOverride = globalScene.rngSeedOverride; const state = Phaser.Math.RND.state(); if (this.battleSeedState) { Phaser.Math.RND.state(this.battleSeedState); @@ -422,13 +447,13 @@ export default class Battle { Phaser.Math.RND.sow([ Utils.shiftCharCodes(this.battleSeed, this.turn << 6) ]); console.log("Battle Seed:", this.battleSeed); } - scene.rngCounter = this.rngCounter++; - scene.rngSeedOverride = this.battleSeed; + globalScene.rngCounter = this.rngCounter++; + globalScene.rngSeedOverride = this.battleSeed; const ret = Utils.randSeedInt(range, min); this.battleSeedState = Phaser.Math.RND.state(); Phaser.Math.RND.state(state); - scene.rngCounter = tempRngCounter; - scene.rngSeedOverride = tempSeedOverride; + globalScene.rngCounter = tempRngCounter; + globalScene.rngSeedOverride = tempSeedOverride; return ret; } @@ -441,16 +466,16 @@ export default class Battle { } export class FixedBattle extends Battle { - constructor(scene: BattleScene, waveIndex: number, config: FixedBattleConfig) { - super(scene.gameMode, waveIndex, config.battleType, config.battleType === BattleType.TRAINER ? config.getTrainer(scene) : undefined, config.double); + constructor(waveIndex: number, config: FixedBattleConfig) { + super(globalScene.gameMode, waveIndex, config.battleType, config.battleType === BattleType.TRAINER ? config.getTrainer() : undefined, config.double); if (config.getEnemyParty) { - this.enemyParty = config.getEnemyParty(scene); + this.enemyParty = config.getEnemyParty(); } } } -type GetTrainerFunc = (scene: BattleScene) => Trainer; -type GetEnemyPartyFunc = (scene: BattleScene) => EnemyPokemon[]; +type GetTrainerFunc = () => Trainer; +type GetEnemyPartyFunc = () => EnemyPokemon[]; export class FixedBattleConfig { public battleType: BattleType; @@ -499,12 +524,12 @@ export class FixedBattleConfig { * @param seedOffset the seed offset to use for the random generation of the trainer * @returns the generated trainer */ -function getRandomTrainerFunc(trainerPool: (TrainerType | TrainerType[])[], randomGender: boolean = false, seedOffset: number = 0): GetTrainerFunc { - return (scene: BattleScene) => { +export function getRandomTrainerFunc(trainerPool: (TrainerType | TrainerType[])[], randomGender: boolean = false, seedOffset: number = 0): GetTrainerFunc { + return () => { const rand = Utils.randSeedInt(trainerPool.length); const trainerTypes: TrainerType[] = []; - scene.executeWithSeedOffset(() => { + globalScene.executeWithSeedOffset(() => { for (const trainerPoolEntry of trainerPool) { const trainerType = Array.isArray(trainerPoolEntry) ? Utils.randSeedItem(trainerPoolEntry) @@ -523,10 +548,10 @@ function getRandomTrainerFunc(trainerPool: (TrainerType | TrainerType[])[], rand const isEvilTeamGrunt = evilTeamGrunts.includes(trainerTypes[rand]); if (trainerConfigs[trainerTypes[rand]].hasDouble && isEvilTeamGrunt) { - return new Trainer(scene, trainerTypes[rand], (Utils.randInt(3) === 0) ? TrainerVariant.DOUBLE : trainerGender); + return new Trainer(trainerTypes[rand], (Utils.randInt(3) === 0) ? TrainerVariant.DOUBLE : trainerGender); } - return new Trainer(scene, trainerTypes[rand], trainerGender); + return new Trainer(trainerTypes[rand], trainerGender); }; } @@ -543,51 +568,51 @@ export interface FixedBattleConfigs { * Champion on 190 */ export const classicFixedBattles: FixedBattleConfigs = { - [5]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) - .setGetTrainerFunc(scene => new Trainer(scene, TrainerType.YOUNGSTER, Utils.randSeedInt(2) ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)), - [8]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) - .setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)), - [25]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) - .setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_2, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)) + [ClassicFixedBossWaves.TOWN_YOUNGSTER]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) + .setGetTrainerFunc(() => new Trainer(TrainerType.YOUNGSTER, Utils.randSeedInt(2) ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)), + [ClassicFixedBossWaves.RIVAL_1]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) + .setGetTrainerFunc(() => new Trainer(TrainerType.RIVAL, globalScene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)), + [ClassicFixedBossWaves.RIVAL_2]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) + .setGetTrainerFunc(() => new Trainer(TrainerType.RIVAL_2, globalScene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)) .setCustomModifierRewards({ guaranteedModifierTiers: [ ModifierTier.ULTRA, ModifierTier.GREAT, ModifierTier.GREAT ], allowLuckUpgrades: false }), - [35]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) + [ClassicFixedBossWaves.EVIL_GRUNT_1]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT, TrainerType.MACRO_GRUNT, TrainerType.STAR_GRUNT ], true)), - [55]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) - .setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_3, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)) + [ClassicFixedBossWaves.RIVAL_3]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) + .setGetTrainerFunc(() => new Trainer(TrainerType.RIVAL_3, globalScene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)) .setCustomModifierRewards({ guaranteedModifierTiers: [ ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.GREAT, ModifierTier.GREAT ], allowLuckUpgrades: false }), - [62]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) + [ClassicFixedBossWaves.EVIL_GRUNT_2]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1) .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT, TrainerType.MACRO_GRUNT, TrainerType.STAR_GRUNT ], true)), - [64]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) + [ClassicFixedBossWaves.EVIL_GRUNT_3]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1) .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT, TrainerType.MACRO_GRUNT, TrainerType.STAR_GRUNT ], true)), - [66]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) - .setGetTrainerFunc(getRandomTrainerFunc([[ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ], [ TrainerType.TABITHA, TrainerType.COURTNEY ], [ TrainerType.MATT, TrainerType.SHELLY ], [ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ], [ TrainerType.ZINZOLIN, TrainerType.ROOD ], [ TrainerType.XEROSIC, TrainerType.BRYONY ], TrainerType.FABA, TrainerType.PLUMERIA, TrainerType.OLEANA, [ TrainerType.GIACOMO, TrainerType.MELA, TrainerType.ATTICUS, TrainerType.ORTEGA, TrainerType.ERI ]], true)), - [95]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) - .setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_4, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)) + [ClassicFixedBossWaves.EVIL_ADMIN_1]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1) + .setGetTrainerFunc(getRandomTrainerFunc([[ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ], [ TrainerType.TABITHA, TrainerType.COURTNEY ], [ TrainerType.MATT, TrainerType.SHELLY ], [ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ], [ TrainerType.ZINZOLIN, TrainerType.COLRESS ], [ TrainerType.XEROSIC, TrainerType.BRYONY ], TrainerType.FABA, TrainerType.PLUMERIA, TrainerType.OLEANA, [ TrainerType.GIACOMO, TrainerType.MELA, TrainerType.ATTICUS, TrainerType.ORTEGA, TrainerType.ERI ]], true)), + [ClassicFixedBossWaves.RIVAL_4]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) + .setGetTrainerFunc(() => new Trainer(TrainerType.RIVAL_4, globalScene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)) .setCustomModifierRewards({ guaranteedModifierTiers: [ ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.ULTRA ], allowLuckUpgrades: false }), - [112]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) + [ClassicFixedBossWaves.EVIL_GRUNT_4]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1) .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT, TrainerType.MACRO_GRUNT, TrainerType.STAR_GRUNT ], true)), - [114]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) - .setGetTrainerFunc(getRandomTrainerFunc([[ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ], [ TrainerType.TABITHA, TrainerType.COURTNEY ], [ TrainerType.MATT, TrainerType.SHELLY ], [ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ], [ TrainerType.ZINZOLIN, TrainerType.ROOD ], [ TrainerType.XEROSIC, TrainerType.BRYONY ], TrainerType.FABA, TrainerType.PLUMERIA, TrainerType.OLEANA, [ TrainerType.GIACOMO, TrainerType.MELA, TrainerType.ATTICUS, TrainerType.ORTEGA, TrainerType.ERI ]], true, 1)), - [ClassicFixedBossWaves.EVIL_BOSS_1]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) + [ClassicFixedBossWaves.EVIL_ADMIN_2]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1) + .setGetTrainerFunc(getRandomTrainerFunc([[ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ], [ TrainerType.TABITHA, TrainerType.COURTNEY ], [ TrainerType.MATT, TrainerType.SHELLY ], [ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ], [ TrainerType.ZINZOLIN, TrainerType.COLRESS ], [ TrainerType.XEROSIC, TrainerType.BRYONY ], TrainerType.FABA, TrainerType.PLUMERIA, TrainerType.OLEANA, [ TrainerType.GIACOMO, TrainerType.MELA, TrainerType.ATTICUS, TrainerType.ORTEGA, TrainerType.ERI ]], true, 1)), + [ClassicFixedBossWaves.EVIL_BOSS_1]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1) .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_BOSS_GIOVANNI_1, TrainerType.MAXIE, TrainerType.ARCHIE, TrainerType.CYRUS, TrainerType.GHETSIS, TrainerType.LYSANDRE, TrainerType.LUSAMINE, TrainerType.GUZMA, TrainerType.ROSE, TrainerType.PENNY ])) .setCustomModifierRewards({ guaranteedModifierTiers: [ ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.ULTRA ], allowLuckUpgrades: false }), - [145]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) - .setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_5, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)) + [ClassicFixedBossWaves.RIVAL_5]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) + .setGetTrainerFunc(() => new Trainer(TrainerType.RIVAL_5, globalScene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)) .setCustomModifierRewards({ guaranteedModifierTiers: [ ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.ULTRA ], allowLuckUpgrades: false }), - [ClassicFixedBossWaves.EVIL_BOSS_2]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) + [ClassicFixedBossWaves.EVIL_BOSS_2]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1) .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_BOSS_GIOVANNI_2, TrainerType.MAXIE_2, TrainerType.ARCHIE_2, TrainerType.CYRUS_2, TrainerType.GHETSIS_2, TrainerType.LYSANDRE_2, TrainerType.LUSAMINE_2, TrainerType.GUZMA_2, TrainerType.ROSE_2, TrainerType.PENNY_2 ])) .setCustomModifierRewards({ guaranteedModifierTiers: [ ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.ULTRA ], allowLuckUpgrades: false }), - [182]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) + [ClassicFixedBossWaves.ELITE_FOUR_1]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.LORELEI, TrainerType.WILL, TrainerType.SIDNEY, TrainerType.AARON, TrainerType.SHAUNTAL, TrainerType.MALVA, [ TrainerType.HALA, TrainerType.MOLAYNE ], TrainerType.MARNIE_ELITE, TrainerType.RIKA, TrainerType.CRISPIN ])), - [184]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(182) + [ClassicFixedBossWaves.ELITE_FOUR_2]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(ClassicFixedBossWaves.ELITE_FOUR_1) .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.BRUNO, TrainerType.KOGA, TrainerType.PHOEBE, TrainerType.BERTHA, TrainerType.MARSHAL, TrainerType.SIEBOLD, TrainerType.OLIVIA, TrainerType.NESSA_ELITE, TrainerType.POPPY, TrainerType.AMARYS ])), - [186]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(182) + [ClassicFixedBossWaves.ELITE_FOUR_3]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(ClassicFixedBossWaves.ELITE_FOUR_1) .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.AGATHA, TrainerType.BRUNO, TrainerType.GLACIA, TrainerType.FLINT, TrainerType.GRIMSLEY, TrainerType.WIKSTROM, TrainerType.ACEROLA, [ TrainerType.BEA_ELITE, TrainerType.ALLISTER_ELITE ], TrainerType.LARRY_ELITE, TrainerType.LACEY ])), - [188]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(182) + [ClassicFixedBossWaves.ELITE_FOUR_4]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(ClassicFixedBossWaves.ELITE_FOUR_1) .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.LANCE, TrainerType.KAREN, TrainerType.DRAKE, TrainerType.LUCIAN, TrainerType.CAITLIN, TrainerType.DRASNA, TrainerType.KAHILI, TrainerType.RAIHAN_ELITE, TrainerType.HASSEL, TrainerType.DRAYTON ])), - [190]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(182) - .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.BLUE, [ TrainerType.RED, TrainerType.LANCE_CHAMPION ], [ TrainerType.STEVEN, TrainerType.WALLACE ], TrainerType.CYNTHIA, [ TrainerType.ALDER, TrainerType.IRIS ], TrainerType.DIANTHA, TrainerType.HAU, TrainerType.LEON, [ TrainerType.GEETA, TrainerType.NEMONA ], TrainerType.KIERAN ])), - [195]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) - .setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_6, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)) + [ClassicFixedBossWaves.CHAMPION]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(ClassicFixedBossWaves.ELITE_FOUR_1) + .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.BLUE, [ TrainerType.RED, TrainerType.LANCE_CHAMPION ], [ TrainerType.STEVEN, TrainerType.WALLACE ], TrainerType.CYNTHIA, [ TrainerType.ALDER, TrainerType.IRIS ], TrainerType.DIANTHA, [ TrainerType.KUKUI, TrainerType.HAU ], [ TrainerType.LEON, TrainerType.MUSTARD ], [ TrainerType.GEETA, TrainerType.NEMONA ], TrainerType.KIERAN ])), + [ClassicFixedBossWaves.RIVAL_6]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) + .setGetTrainerFunc(() => new Trainer(TrainerType.RIVAL_6, globalScene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)) .setCustomModifierRewards({ guaranteedModifierTiers: [ ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.GREAT, ModifierTier.GREAT ], allowLuckUpgrades: false }) }; diff --git a/src/configs/inputs/cfg_keyboard_qwerty.ts b/src/configs/inputs/cfg_keyboard_qwerty.ts index 5ddc12e8784..c1b00a833c0 100644 --- a/src/configs/inputs/cfg_keyboard_qwerty.ts +++ b/src/configs/inputs/cfg_keyboard_qwerty.ts @@ -180,9 +180,9 @@ const cfg_keyboard_qwerty = { [SettingKeyboard.Button_Cycle_Gender]: Button.CYCLE_GENDER, [SettingKeyboard.Button_Cycle_Ability]: Button.CYCLE_ABILITY, [SettingKeyboard.Button_Cycle_Nature]: Button.CYCLE_NATURE, - [SettingKeyboard.Button_Cycle_Variant]: Button.V, [SettingKeyboard.Button_Speed_Up]: Button.SPEED_UP, [SettingKeyboard.Button_Slow_Down]: Button.SLOW_DOWN, + [SettingKeyboard.Button_Cycle_Tera]: Button.CYCLE_TERA, [SettingKeyboard.Alt_Button_Up]: Button.UP, [SettingKeyboard.Alt_Button_Down]: Button.DOWN, [SettingKeyboard.Alt_Button_Left]: Button.LEFT, @@ -197,9 +197,9 @@ const cfg_keyboard_qwerty = { [SettingKeyboard.Alt_Button_Cycle_Gender]: Button.CYCLE_GENDER, [SettingKeyboard.Alt_Button_Cycle_Ability]: Button.CYCLE_ABILITY, [SettingKeyboard.Alt_Button_Cycle_Nature]: Button.CYCLE_NATURE, - [SettingKeyboard.Alt_Button_Cycle_Variant]: Button.V, [SettingKeyboard.Alt_Button_Speed_Up]: Button.SPEED_UP, [SettingKeyboard.Alt_Button_Slow_Down]: Button.SLOW_DOWN, + [SettingKeyboard.Alt_Button_Cycle_Tera]: Button.CYCLE_TERA, }, default: { KEY_ARROW_UP: SettingKeyboard.Button_Up, @@ -216,7 +216,7 @@ const cfg_keyboard_qwerty = { KEY_G: SettingKeyboard.Button_Cycle_Gender, KEY_E: SettingKeyboard.Button_Cycle_Ability, KEY_N: SettingKeyboard.Button_Cycle_Nature, - KEY_V: SettingKeyboard.Button_Cycle_Variant, + KEY_V: SettingKeyboard.Button_Cycle_Tera, KEY_PLUS: -1, KEY_MINUS: -1, KEY_A: SettingKeyboard.Alt_Button_Left, diff --git a/src/configs/inputs/pad_dualshock.ts b/src/configs/inputs/pad_dualshock.ts index 2fbdd0ddfaa..265b39fdad5 100644 --- a/src/configs/inputs/pad_dualshock.ts +++ b/src/configs/inputs/pad_dualshock.ts @@ -53,7 +53,7 @@ const pad_dualshock = { [SettingGamepad.Button_Action]: Button.ACTION, [SettingGamepad.Button_Cancel]: Button.CANCEL, [SettingGamepad.Button_Cycle_Nature]: Button.CYCLE_NATURE, - [SettingGamepad.Button_Cycle_Variant]: Button.V, + [SettingGamepad.Button_Cycle_Tera]: Button.CYCLE_TERA, [SettingGamepad.Button_Menu]: Button.MENU, [SettingGamepad.Button_Stats]: Button.STATS, [SettingGamepad.Button_Cycle_Form]: Button.CYCLE_FORM, @@ -72,7 +72,7 @@ const pad_dualshock = { RC_S: SettingGamepad.Button_Action, RC_E: SettingGamepad.Button_Cancel, RC_W: SettingGamepad.Button_Cycle_Nature, - RC_N: SettingGamepad.Button_Cycle_Variant, + RC_N: SettingGamepad.Button_Cycle_Tera, START: SettingGamepad.Button_Menu, SELECT: SettingGamepad.Button_Stats, LB: SettingGamepad.Button_Cycle_Form, diff --git a/src/configs/inputs/pad_generic.ts b/src/configs/inputs/pad_generic.ts index 256af8f0fe3..cd91fcd8b17 100644 --- a/src/configs/inputs/pad_generic.ts +++ b/src/configs/inputs/pad_generic.ts @@ -51,7 +51,7 @@ const pad_generic = { [SettingGamepad.Button_Action]: Button.ACTION, [SettingGamepad.Button_Cancel]: Button.CANCEL, [SettingGamepad.Button_Cycle_Nature]: Button.CYCLE_NATURE, - [SettingGamepad.Button_Cycle_Variant]: Button.V, + [SettingGamepad.Button_Cycle_Tera]: Button.CYCLE_TERA, [SettingGamepad.Button_Menu]: Button.MENU, [SettingGamepad.Button_Stats]: Button.STATS, [SettingGamepad.Button_Cycle_Form]: Button.CYCLE_FORM, @@ -69,7 +69,7 @@ const pad_generic = { RC_S: SettingGamepad.Button_Action, RC_E: SettingGamepad.Button_Cancel, RC_W: SettingGamepad.Button_Cycle_Nature, - RC_N: SettingGamepad.Button_Cycle_Variant, + RC_N: SettingGamepad.Button_Cycle_Tera, START: SettingGamepad.Button_Menu, SELECT: SettingGamepad.Button_Stats, LB: SettingGamepad.Button_Cycle_Form, diff --git a/src/configs/inputs/pad_procon.ts b/src/configs/inputs/pad_procon.ts index 98d17c4ef57..a7ae5383fbe 100644 --- a/src/configs/inputs/pad_procon.ts +++ b/src/configs/inputs/pad_procon.ts @@ -52,7 +52,7 @@ const pad_procon = { [SettingGamepad.Button_Action]: Button.ACTION, [SettingGamepad.Button_Cancel]: Button.CANCEL, [SettingGamepad.Button_Cycle_Nature]: Button.CYCLE_NATURE, - [SettingGamepad.Button_Cycle_Variant]: Button.V, + [SettingGamepad.Button_Cycle_Tera]: Button.CYCLE_TERA, [SettingGamepad.Button_Menu]: Button.MENU, [SettingGamepad.Button_Stats]: Button.STATS, [SettingGamepad.Button_Cycle_Form]: Button.CYCLE_FORM, @@ -70,7 +70,7 @@ const pad_procon = { RC_S: SettingGamepad.Button_Action, RC_E: SettingGamepad.Button_Cancel, RC_W: SettingGamepad.Button_Cycle_Nature, - RC_N: SettingGamepad.Button_Cycle_Variant, + RC_N: SettingGamepad.Button_Cycle_Tera, START: SettingGamepad.Button_Menu, SELECT: SettingGamepad.Button_Stats, LB: SettingGamepad.Button_Cycle_Form, diff --git a/src/configs/inputs/pad_unlicensedSNES.ts b/src/configs/inputs/pad_unlicensedSNES.ts index 77e68e6a644..fbde98b3fa2 100644 --- a/src/configs/inputs/pad_unlicensedSNES.ts +++ b/src/configs/inputs/pad_unlicensedSNES.ts @@ -43,7 +43,7 @@ const pad_unlicensedSNES = { [SettingGamepad.Button_Action]: Button.ACTION, [SettingGamepad.Button_Cancel]: Button.CANCEL, [SettingGamepad.Button_Cycle_Nature]: Button.CYCLE_NATURE, - [SettingGamepad.Button_Cycle_Variant]: Button.V, + [SettingGamepad.Button_Cycle_Tera]: Button.CYCLE_TERA, [SettingGamepad.Button_Menu]: Button.MENU, [SettingGamepad.Button_Stats]: Button.STATS, [SettingGamepad.Button_Cycle_Form]: Button.CYCLE_FORM, @@ -61,7 +61,7 @@ const pad_unlicensedSNES = { RC_S: SettingGamepad.Button_Action, RC_E: SettingGamepad.Button_Cancel, RC_W: SettingGamepad.Button_Cycle_Nature, - RC_N: SettingGamepad.Button_Cycle_Variant, + RC_N: SettingGamepad.Button_Cycle_Tera, START: SettingGamepad.Button_Menu, SELECT: SettingGamepad.Button_Stats, LB: SettingGamepad.Button_Cycle_Form, diff --git a/src/configs/inputs/pad_xbox360.ts b/src/configs/inputs/pad_xbox360.ts index 6afc452f50b..88fee731d1d 100644 --- a/src/configs/inputs/pad_xbox360.ts +++ b/src/configs/inputs/pad_xbox360.ts @@ -51,7 +51,7 @@ const pad_xbox360 = { [SettingGamepad.Button_Action]: Button.ACTION, [SettingGamepad.Button_Cancel]: Button.CANCEL, [SettingGamepad.Button_Cycle_Nature]: Button.CYCLE_NATURE, - [SettingGamepad.Button_Cycle_Variant]: Button.V, + [SettingGamepad.Button_Cycle_Tera]: Button.CYCLE_TERA, [SettingGamepad.Button_Menu]: Button.MENU, [SettingGamepad.Button_Stats]: Button.STATS, [SettingGamepad.Button_Cycle_Form]: Button.CYCLE_FORM, @@ -69,7 +69,7 @@ const pad_xbox360 = { RC_S: SettingGamepad.Button_Action, RC_E: SettingGamepad.Button_Cancel, RC_W: SettingGamepad.Button_Cycle_Nature, - RC_N: SettingGamepad.Button_Cycle_Variant, + RC_N: SettingGamepad.Button_Cycle_Tera, START: SettingGamepad.Button_Menu, SELECT: SettingGamepad.Button_Stats, LB: SettingGamepad.Button_Cycle_Form, diff --git a/src/data/ability.ts b/src/data/ability.ts index 7fa046e2369..2b73fea60bc 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -1,23 +1,29 @@ -import Pokemon, { EnemyPokemon, HitResult, MoveResult, PlayerPokemon, PokemonMove } from "../field/pokemon"; +import type { EnemyPokemon, PokemonMove } from "../field/pokemon"; +import type Pokemon from "../field/pokemon"; +import { HitResult, MoveResult, PlayerPokemon } from "../field/pokemon"; import { Type } from "#enums/type"; -import { Constructor } from "#app/utils"; +import type { Constructor } from "#app/utils"; import * as Utils from "../utils"; import { getPokemonNameWithAffix } from "../messages"; -import { Weather } from "#app/data/weather"; -import { BattlerTag, BattlerTagLapseType, GroundedTag } from "./battler-tags"; +import type { Weather } from "#app/data/weather"; +import type { BattlerTag } from "./battler-tags"; +import { BattlerTagLapseType, GroundedTag } from "./battler-tags"; import { getNonVolatileStatusEffects, getStatusEffectDescriptor, getStatusEffectHealText } from "#app/data/status-effect"; import { Gender } from "./gender"; -import Move, { AttackMove, MoveCategory, MoveFlags, MoveTarget, FlinchAttr, OneHitKOAttr, HitHealAttr, allMoves, StatusMove, SelfStatusMove, VariablePowerAttr, applyMoveAttrs, VariableMoveTypeAttr, RandomMovesetMoveAttr, RandomMoveAttr, NaturePowerAttr, CopyMoveAttr, NeutralDamageAgainstFlyingTypeMultiplierAttr, FixedDamageAttr } from "./move"; -import { ArenaTagSide, ArenaTrapTag } from "./arena-tag"; +import type Move from "./move"; +import { AttackMove, MoveCategory, MoveFlags, MoveTarget, FlinchAttr, OneHitKOAttr, HitHealAttr, allMoves, StatusMove, SelfStatusMove, VariablePowerAttr, applyMoveAttrs, VariableMoveTypeAttr, RandomMovesetMoveAttr, RandomMoveAttr, NaturePowerAttr, CopyMoveAttr, NeutralDamageAgainstFlyingTypeMultiplierAttr, FixedDamageAttr } from "./move"; +import type { ArenaTrapTag, SuppressAbilitiesTag } from "./arena-tag"; +import { ArenaTagSide } from "./arena-tag"; import { BerryModifier, HitHealModifier, PokemonHeldItemModifier } from "../modifier/modifier"; import { TerrainType } from "./terrain"; -import { SpeciesFormChangeManualTrigger, SpeciesFormChangeRevertWeatherFormTrigger, SpeciesFormChangeWeatherTrigger } from "./pokemon-forms"; +import { SpeciesFormChangeAbilityTrigger, SpeciesFormChangeRevertWeatherFormTrigger, SpeciesFormChangeWeatherTrigger } from "./pokemon-forms"; import i18next from "i18next"; -import { Localizable } from "#app/interfaces/locales"; +import type { Localizable } from "#app/interfaces/locales"; import { Command } from "../ui/command-ui-handler"; import { BerryModifierType } from "#app/modifier/modifier-type"; import { getPokeballName } from "./pokeball"; -import { BattlerIndex, BattleType } from "#app/battle"; +import type { BattlerIndex } from "#app/battle"; +import { BattleType } from "#app/battle"; import { Abilities } from "#enums/abilities"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; @@ -28,7 +34,7 @@ import { MovePhase } from "#app/phases/move-phase"; import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase"; import { ShowAbilityPhase } from "#app/phases/show-ability-phase"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { SwitchType } from "#app/enums/switch-type"; import { SwitchPhase } from "#app/phases/switch-phase"; import { SwitchSummonPhase } from "#app/phases/switch-summon-phase"; @@ -38,6 +44,7 @@ import { MoveEndPhase } from "#app/phases/move-end-phase"; import { PokemonAnimType } from "#enums/pokemon-anim-type"; import { StatusEffect } from "#enums/status-effect"; import { WeatherType } from "#enums/weather-type"; +import { PokemonTransformPhase } from "#app/phases/pokemon-transform-phase"; export class Ability implements Localizable { public id: Abilities; @@ -45,13 +52,13 @@ export class Ability implements Localizable { private nameAppend: string; public name: string; public description: string; - public generation: integer; + public generation: number; public isBypassFaint: boolean; public isIgnorable: boolean; public attrs: AbAttr[]; public conditions: AbAttrCondition[]; - constructor(id: Abilities, generation: integer) { + constructor(id: Abilities, generation: number) { this.id = id; this.nameAppend = ""; @@ -137,7 +144,7 @@ export class Ability implements Localizable { } } -type AbAttrApplyFunc = (attr: TAttr, passive: boolean) => boolean | Promise; +type AbAttrApplyFunc = (attr: TAttr, passive: boolean) => boolean; type AbAttrCondition = (pokemon: Pokemon) => boolean; // TODO: Can this be improved? @@ -153,7 +160,7 @@ export abstract class AbAttr { this.showAbility = showAbility; } - apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder | null, args: any[]): boolean | Promise { + apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder | null, args: any[]): boolean { return false; } @@ -209,15 +216,15 @@ export class DoubleBattleChanceAbAttr extends AbAttr { } export class PostBattleInitAbAttr extends AbAttr { - applyPostBattleInit(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean | Promise { + applyPostBattleInit(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { return false; } } export class PostBattleInitFormChangeAbAttr extends PostBattleInitAbAttr { - private formFunc: (p: Pokemon) => integer; + private formFunc: (p: Pokemon) => number; - constructor(formFunc: ((p: Pokemon) => integer)) { + constructor(formFunc: ((p: Pokemon) => number)) { super(true); this.formFunc = formFunc; @@ -226,44 +233,32 @@ export class PostBattleInitFormChangeAbAttr extends PostBattleInitAbAttr { applyPostBattleInit(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { const formIndex = this.formFunc(pokemon); if (formIndex !== pokemon.formIndex && !simulated) { - return pokemon.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeManualTrigger, false); + return globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeAbilityTrigger, false); } return false; } } -export class PostBattleInitStatStageChangeAbAttr extends PostBattleInitAbAttr { +export class PostTeraFormChangeStatChangeAbAttr extends AbAttr { private stats: BattleStat[]; private stages: number; - private selfTarget: boolean; - constructor(stats: BattleStat[], stages: number, selfTarget?: boolean) { + constructor(stats: BattleStat[], stages: number) { super(); this.stats = stats; this.stages = stages; - this.selfTarget = !!selfTarget; } - applyPostBattleInit(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder | null, args: any[]): boolean { const statStageChangePhases: StatStageChangePhase[] = []; if (!simulated) { - if (this.selfTarget) { - statStageChangePhases.push(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, this.stats, this.stages)); - } else { - for (const opponent of pokemon.getOpponents()) { - statStageChangePhases.push(new StatStageChangePhase(pokemon.scene, opponent.getBattlerIndex(), false, this.stats, this.stages)); - } - } + statStageChangePhases.push(new StatStageChangePhase(pokemon.getBattlerIndex(), true, this.stats, this.stages)); for (const statStageChangePhase of statStageChangePhases) { - if (!this.selfTarget && !statStageChangePhase.getPokemon()?.summonData) { - pokemon.scene.pushPhase(statStageChangePhase); - } else { // TODO: This causes the ability bar to be shown at the wrong time - pokemon.scene.unshiftPhase(statStageChangePhase); - } + globalScene.unshiftPhase(statStageChangePhase); } } @@ -271,10 +266,64 @@ export class PostBattleInitStatStageChangeAbAttr extends PostBattleInitAbAttr { } } +/** + * Clears a specified weather whenever this attribute is called. + */ +export class ClearWeatherAbAttr extends AbAttr { + private weather: WeatherType[]; + + /** + * @param weather {@linkcode WeatherType[]} - the weather to be removed + */ + constructor(weather: WeatherType[]) { + super(true); + + this.weather = weather; + } + + apply(pokemon: Pokemon, passive: boolean, simulated:boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean { + if (!simulated) { + globalScene.arena.trySetWeather(WeatherType.NONE, true); + } + return true; + } +} + +/** + * Clears a specified terrain whenever this attribute is called. + */ +export class ClearTerrainAbAttr extends AbAttr { + private terrain: TerrainType[]; + + /** + * @param terrain {@linkcode TerrainType[]} - the terrain to be removed + */ + constructor(terrain: TerrainType[]) { + super(true); + + this.terrain = terrain; + } + + apply(pokemon: Pokemon, passive: boolean, simulated:boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean { + if (!simulated) { + globalScene.arena.trySetTerrain(TerrainType.NONE, true, true); + } + return true; + } +} + type PreDefendAbAttrCondition = (pokemon: Pokemon, attacker: Pokemon, move: Move) => boolean; export class PreDefendAbAttr extends AbAttr { - applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move | null, cancelled: Utils.BooleanHolder | null, args: any[]): boolean | Promise { + applyPreDefend( + pokemon: Pokemon, + passive: boolean, + simulated: boolean, + attacker: Pokemon, + move: Move | null, + cancelled: Utils.BooleanHolder | null, + args: any[], + ): boolean { return false; } } @@ -447,7 +496,7 @@ export class TypeImmunityHealAbAttr extends TypeImmunityAbAttr { if (ret) { if (!pokemon.isFullHp() && !simulated) { const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; - pokemon.scene.unshiftPhase(new PokemonHealPhase(pokemon.scene, pokemon.getBattlerIndex(), + globalScene.unshiftPhase(new PokemonHealPhase(pokemon.getBattlerIndex(), Utils.toDmgValue(pokemon.getMaxHp() / 4), i18next.t("abilityTriggers:typeImmunityHeal", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName }), true)); cancelled.value = true; // Suppresses "No Effect" message } @@ -475,7 +524,7 @@ class TypeImmunityStatStageChangeAbAttr extends TypeImmunityAbAttr { if (ret) { cancelled.value = true; // Suppresses "No Effect" message if (!simulated) { - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ this.stat ], this.stages)); + globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ this.stat ], this.stages)); } } @@ -485,9 +534,9 @@ class TypeImmunityStatStageChangeAbAttr extends TypeImmunityAbAttr { class TypeImmunityAddBattlerTagAbAttr extends TypeImmunityAbAttr { private tagType: BattlerTagType; - private turnCount: integer; + private turnCount: number; - constructor(immuneType: Type, tagType: BattlerTagType, turnCount: integer, condition?: AbAttrCondition) { + constructor(immuneType: Type, tagType: BattlerTagType, turnCount: number, condition?: AbAttrCondition) { super(immuneType, condition); this.tagType = tagType; @@ -552,7 +601,15 @@ export class FullHpResistTypeAbAttr extends PreDefendAbAttr { * @param args `[0]` a container for the move's current type effectiveness multiplier * @returns `true` if the move's effectiveness is reduced; `false` otherwise */ - applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move | null, cancelled: Utils.BooleanHolder | null, args: any[]): boolean | Promise { + override applyPreDefend( + pokemon: Pokemon, + passive: boolean, + simulated: boolean, + attacker: Pokemon, + move: Move | null, + cancelled: Utils.BooleanHolder | null, + args: any[], + ): boolean { const typeMultiplier = args[0]; if (!(typeMultiplier && typeMultiplier instanceof Utils.NumberHolder)) { return false; @@ -578,7 +635,15 @@ export class FullHpResistTypeAbAttr extends PreDefendAbAttr { } export class PostDefendAbAttr extends AbAttr { - applyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean | Promise { + applyPostDefend( + pokemon: Pokemon, + passive: boolean, + simulated: boolean, + attacker: Pokemon, + move: Move, + hitResult: HitResult | null, + args: any[], + ): boolean { return false; } } @@ -599,7 +664,14 @@ export class FieldPriorityMoveImmunityAbAttr extends PreDefendAbAttr { } export class PostStatStageChangeAbAttr extends AbAttr { - applyPostStatStageChange(pokemon: Pokemon, simulated: boolean, statsChanged: BattleStat[], stagesChanged: integer, selfTarget: boolean, args: any[]): boolean | Promise { + applyPostStatStageChange( + pokemon: Pokemon, + simulated: boolean, + statsChanged: BattleStat[], + stagesChanged: integer, + selfTarget: boolean, + args: any[], + ): boolean { return false; } } @@ -658,7 +730,7 @@ export class MoveImmunityStatStageChangeAbAttr extends MoveImmunityAbAttr { applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder, args: any[]): boolean { const ret = super.applyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); if (ret && !simulated) { - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ this.stat ], this.stages)); + globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ this.stat ], this.stages)); } return ret; @@ -685,7 +757,7 @@ export class ReverseDrainAbAttr extends PostDefendAbAttr { override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): boolean { if (move.hasAttr(HitHealAttr) && !move.hitsSubstitute(attacker, pokemon)) { if (!simulated) { - pokemon.scene.queueMessage(i18next.t("abilityTriggers:reverseDrain", { pokemonNameWithAffix: getPokemonNameWithAffix(attacker) })); + globalScene.queueMessage(i18next.t("abilityTriggers:reverseDrain", { pokemonNameWithAffix: getPokemonNameWithAffix(attacker) })); } return true; } @@ -719,11 +791,11 @@ export class PostDefendStatStageChangeAbAttr extends PostDefendAbAttr { if (this.allOthers) { const otherPokemon = pokemon.getAlly() ? pokemon.getOpponents().concat([ pokemon.getAlly() ]) : pokemon.getOpponents(); for (const other of otherPokemon) { - other.scene.unshiftPhase(new StatStageChangePhase(other.scene, (other).getBattlerIndex(), false, [ this.stat ], this.stages)); + globalScene.unshiftPhase(new StatStageChangePhase((other).getBattlerIndex(), false, [ this.stat ], this.stages)); } return true; } - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, (this.selfTarget ? pokemon : attacker).getBattlerIndex(), this.selfTarget, [ this.stat ], this.stages)); + globalScene.unshiftPhase(new StatStageChangePhase((this.selfTarget ? pokemon : attacker).getBattlerIndex(), this.selfTarget, [ this.stat ], this.stages)); return true; } @@ -755,7 +827,7 @@ export class PostDefendHpGatedStatStageChangeAbAttr extends PostDefendAbAttr { if (this.condition(pokemon, attacker, move) && (pokemon.hp <= hpGateFlat && (pokemon.hp + damageReceived) > hpGateFlat) && !move.hitsSubstitute(attacker, pokemon)) { if (!simulated) { - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, (this.selfTarget ? pokemon : attacker).getBattlerIndex(), true, this.stats, this.stages)); + globalScene.unshiftPhase(new StatStageChangePhase((this.selfTarget ? pokemon : attacker).getBattlerIndex(), true, this.stats, this.stages)); } return true; } @@ -777,10 +849,10 @@ export class PostDefendApplyArenaTrapTagAbAttr extends PostDefendAbAttr { override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): boolean { if (this.condition(pokemon, attacker, move) && !move.hitsSubstitute(attacker, pokemon)) { - const tag = pokemon.scene.arena.getTag(this.tagType) as ArenaTrapTag; - if (!pokemon.scene.arena.getTag(this.tagType) || tag.layers < tag.maxLayers) { + const tag = globalScene.arena.getTag(this.tagType) as ArenaTrapTag; + if (!globalScene.arena.getTag(this.tagType) || tag.layers < tag.maxLayers) { if (!simulated) { - pokemon.scene.arena.addTag(this.tagType, 0, undefined, pokemon.id, pokemon.isPlayer() ? ArenaTagSide.ENEMY : ArenaTagSide.PLAYER); + globalScene.arena.addTag(this.tagType, 0, undefined, pokemon.id, pokemon.isPlayer() ? ArenaTagSide.ENEMY : ArenaTagSide.PLAYER); } return true; } @@ -803,7 +875,7 @@ export class PostDefendApplyBattlerTagAbAttr extends PostDefendAbAttr { if (this.condition(pokemon, attacker, move) && !move.hitsSubstitute(attacker, pokemon)) { if (!pokemon.getTag(this.tagType) && !simulated) { pokemon.addTag(this.tagType, undefined, undefined, pokemon.id); - pokemon.scene.queueMessage(i18next.t("abilityTriggers:windPowerCharged", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: move.name })); + globalScene.queueMessage(i18next.t("abilityTriggers:windPowerCharged", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: move.name })); } return true; } @@ -849,9 +921,9 @@ export class PostDefendTerrainChangeAbAttr extends PostDefendAbAttr { override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, _args: any[]): boolean { if (hitResult < HitResult.NO_EFFECT && !move.hitsSubstitute(attacker, pokemon)) { if (simulated) { - return pokemon.scene.arena.terrain?.terrainType !== (this.terrainType || undefined); + return globalScene.arena.terrain?.terrainType !== (this.terrainType || undefined); } else { - return pokemon.scene.arena.trySetTerrain(this.terrainType, true); + return globalScene.arena.trySetTerrain(this.terrainType, true); } } @@ -860,10 +932,10 @@ export class PostDefendTerrainChangeAbAttr extends PostDefendAbAttr { } export class PostDefendContactApplyStatusEffectAbAttr extends PostDefendAbAttr { - public chance: integer; + public chance: number; private effects: StatusEffect[]; - constructor(chance: integer, ...effects: StatusEffect[]) { + constructor(chance: number, ...effects: StatusEffect[]) { super(); this.chance = chance; @@ -899,11 +971,11 @@ export class EffectSporeAbAttr extends PostDefendContactApplyStatusEffectAbAttr } export class PostDefendContactApplyTagChanceAbAttr extends PostDefendAbAttr { - private chance: integer; + private chance: number; private tagType: BattlerTagType; - private turnCount: integer | undefined; + private turnCount: number | undefined; - constructor(chance: integer, tagType: BattlerTagType, turnCount?: integer) { + constructor(chance: number, tagType: BattlerTagType, turnCount?: number) { super(); this.tagType = tagType; @@ -941,7 +1013,7 @@ export class PostDefendCritStatStageChangeAbAttr extends PostDefendAbAttr { } if (!simulated) { - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ this.stat ], this.stages)); + globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ this.stat ], this.stages)); } return true; @@ -953,9 +1025,9 @@ export class PostDefendCritStatStageChangeAbAttr extends PostDefendAbAttr { } export class PostDefendContactDamageAbAttr extends PostDefendAbAttr { - private damageRatio: integer; + private damageRatio: number; - constructor(damageRatio: integer) { + constructor(damageRatio: number) { super(); this.damageRatio = damageRatio; @@ -987,9 +1059,9 @@ export class PostDefendContactDamageAbAttr extends PostDefendAbAttr { * @extends {PostDefendAbAttr} */ export class PostDefendPerishSongAbAttr extends PostDefendAbAttr { - private turns: integer; + private turns: number; - constructor(turns: integer) { + constructor(turns: number) { super(); this.turns = turns; @@ -997,7 +1069,7 @@ export class PostDefendPerishSongAbAttr extends PostDefendAbAttr { override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): boolean { if (move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) && !move.hitsSubstitute(attacker, pokemon)) { - if (pokemon.getTag(BattlerTagType.PERISH_SONG) || attacker.getTag(BattlerTagType.PERISH_SONG)) { + if (attacker.getTag(BattlerTagType.PERISH_SONG)) { return false; } else { if (!simulated) { @@ -1030,11 +1102,11 @@ export class PostDefendWeatherChangeAbAttr extends PostDefendAbAttr { if (this.condition && !this.condition(pokemon, attacker, move) || move.hitsSubstitute(attacker, pokemon)) { return false; } - if (!pokemon.scene.arena.weather?.isImmutable()) { + if (!globalScene.arena.weather?.isImmutable()) { if (simulated) { - return pokemon.scene.arena.weather?.weatherType !== this.weatherType; + return globalScene.arena.weather?.weatherType !== this.weatherType; } - return pokemon.scene.arena.trySetWeather(this.weatherType, true); + return globalScene.arena.trySetWeather(this.weatherType, true); } return false; @@ -1050,9 +1122,9 @@ export class PostDefendAbilitySwapAbAttr extends PostDefendAbAttr { if (move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) && !attacker.getAbility().hasAttr(UnswappableAbilityAbAttr) && !move.hitsSubstitute(attacker, pokemon)) { if (!simulated) { - const tempAbilityId = attacker.getAbility().id; - attacker.summonData.ability = pokemon.getAbility().id; - pokemon.summonData.ability = tempAbilityId; + const tempAbility = attacker.getAbility(); + attacker.setTempAbility(pokemon.getAbility()); + pokemon.setTempAbility(tempAbility); } return true; } @@ -1077,7 +1149,7 @@ export class PostDefendAbilityGiveAbAttr extends PostDefendAbAttr { if (move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) && !attacker.getAbility().hasAttr(UnsuppressableAbilityAbAttr) && !attacker.getAbility().hasAttr(PostDefendAbilityGiveAbAttr) && !move.hitsSubstitute(attacker, pokemon)) { if (!simulated) { - attacker.summonData.ability = this.ability; + attacker.setTempAbility(allAbilities[this.ability]); } return true; @@ -1095,11 +1167,11 @@ export class PostDefendAbilityGiveAbAttr extends PostDefendAbAttr { } export class PostDefendMoveDisableAbAttr extends PostDefendAbAttr { - private chance: integer; + private chance: number; private attacker: Pokemon; private move: Move; - constructor(chance: integer) { + constructor(chance: number) { super(); this.chance = chance; @@ -1138,7 +1210,7 @@ export class PostStatStageChangeStatStageChangeAbAttr extends PostStatStageChang applyPostStatStageChange(pokemon: Pokemon, simulated: boolean, statStagesChanged: BattleStat[], stagesChanged: number, selfTarget: boolean, args: any[]): boolean { if (this.condition(pokemon, statStagesChanged, stagesChanged) && !selfTarget) { if (!simulated) { - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, (pokemon).getBattlerIndex(), true, this.statsToChange, this.stages)); + globalScene.unshiftPhase(new StatStageChangePhase((pokemon).getBattlerIndex(), true, this.statsToChange, this.stages)); } return true; } @@ -1148,7 +1220,14 @@ export class PostStatStageChangeStatStageChangeAbAttr extends PostStatStageChang } export class PreAttackAbAttr extends AbAttr { - applyPreAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon | null, move: Move, args: any[]): boolean | Promise { + applyPreAttack( + pokemon: Pokemon, + passive: boolean, + simulated: boolean, + defender: Pokemon | null, + move: Move, + args: any[], + ): boolean { return false; } } @@ -1214,7 +1293,13 @@ export class VariableMovePowerAbAttr extends PreAttackAbAttr { } export class FieldPreventExplosiveMovesAbAttr extends AbAttr { - apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean | Promise { + override apply( + pokemon: Pokemon, + passive: boolean, + simulated: boolean, + cancelled: Utils.BooleanHolder, + args: any[], + ): boolean { cancelled.value = true; return true; } @@ -1301,7 +1386,7 @@ export class PokemonTypeChangeAbAttr extends PreAttackAbAttr { applyPreAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon, move: Move, args: any[]): boolean { if ( - !pokemon.isTerastallized() && + !pokemon.isTerastallized && move.id !== Moves.STRUGGLE && /** * Skip moves that call other moves because these moves generate a following move that will trigger this ability attribute @@ -1410,7 +1495,7 @@ export class DamageBoostAbAttr extends PreAttackAbAttr { applyPreAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon, move: Move, args: any[]): boolean { if (this.condition(pokemon, defender, move)) { const power = args[0] as Utils.NumberHolder; - power.value = Math.floor(power.value * this.damageMultiplier); + power.value = Utils.toDmgValue(power.value * this.damageMultiplier); return true; } @@ -1568,8 +1653,15 @@ export class StatMultiplierAbAttr extends AbAttr { this.condition = condition ?? null; } - applyStatStage(pokemon: Pokemon, _passive: boolean, simulated: boolean, stat: BattleStat, statValue: Utils.NumberHolder, args: any[]): boolean | Promise { - const move = (args[0] as Move); + applyStatStage( + pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + stat: BattleStat, + statValue: Utils.NumberHolder, + args: any[], + ): boolean { + const move = args[0] as Move; if (stat === this.stat && (!this.condition || this.condition(pokemon, null, move))) { statValue.value *= this.multiplier; return true; @@ -1594,7 +1686,15 @@ export class PostAttackAbAttr extends AbAttr { * applying the effect of any inherited class. This can be changed by providing a different {@link attackCondition} to the constructor. See {@link ConfusionOnStatusEffectAbAttr} * for an example of an effect that does not require a damaging move. */ - applyPostAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean | Promise { + applyPostAttack( + pokemon: Pokemon, + passive: boolean, + simulated: boolean, + defender: Pokemon, + move: Move, + hitResult: HitResult | null, + args: any[], + ): boolean { // When attackRequired is true, we require the move to be an attack move and to deal damage before checking secondary requirements. // If attackRequired is false, we always defer to the secondary requirements. if (this.attackCondition(pokemon, defender, move)) { @@ -1607,7 +1707,15 @@ export class PostAttackAbAttr extends AbAttr { /** * This method is only called after {@link applyPostAttack} has already been applied. Use this for handling checks specific to the ability in question. */ - applyPostAttackAfterMoveTypeCheck(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean | Promise { + applyPostAttackAfterMoveTypeCheck( + pokemon: Pokemon, + passive: boolean, + simulated: boolean, + defender: Pokemon, + move: Move, + hitResult: HitResult | null, + args: any[], + ): boolean { return false; } } @@ -1632,7 +1740,15 @@ export class GorillaTacticsAbAttr extends PostAttackAbAttr { * @param args n/a * @returns `true` if the ability is applied */ - applyPostAttackAfterMoveTypeCheck(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean | Promise { + override applyPostAttackAfterMoveTypeCheck( + pokemon: Pokemon, + passive: boolean, + simulated: boolean, + defender: Pokemon, + move: Move, + hitResult: HitResult | null, + args: any[], + ): boolean { if (simulated) { return simulated; } @@ -1655,37 +1771,50 @@ export class PostAttackStealHeldItemAbAttr extends PostAttackAbAttr { this.stealCondition = stealCondition ?? null; } - applyPostAttackAfterMoveTypeCheck(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon, move: Move, hitResult: HitResult, args: any[]): Promise { - return new Promise(resolve => { - if (!simulated && hitResult < HitResult.NO_EFFECT && (!this.stealCondition || this.stealCondition(pokemon, defender, move))) { - const heldItems = this.getTargetHeldItems(defender).filter(i => i.isTransferable); - if (heldItems.length) { - const stolenItem = heldItems[pokemon.randSeedInt(heldItems.length)]; - pokemon.scene.tryTransferHeldItemModifier(stolenItem, pokemon, false).then(success => { - if (success) { - pokemon.scene.queueMessage(i18next.t("abilityTriggers:postAttackStealHeldItem", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), defenderName: defender.name, stolenItemType: stolenItem.type.name })); - } - resolve(success); - }); - return; + override applyPostAttackAfterMoveTypeCheck( + pokemon: Pokemon, + passive: boolean, + simulated: boolean, + defender: Pokemon, + move: Move, + hitResult: HitResult, + args: any[], + ): boolean { + if ( + !simulated && + hitResult < HitResult.NO_EFFECT && + (!this.stealCondition || this.stealCondition(pokemon, defender, move)) + ) { + const heldItems = this.getTargetHeldItems(defender).filter((i) => i.isTransferable); + if (heldItems.length) { + const stolenItem = heldItems[pokemon.randSeedInt(heldItems.length)]; + if (globalScene.tryTransferHeldItemModifier(stolenItem, pokemon, false)) { + globalScene.queueMessage( + i18next.t("abilityTriggers:postAttackStealHeldItem", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + defenderName: defender.name, + stolenItemType: stolenItem.type.name, + }), + ); + return true; } } - resolve(simulated); - }); + } + return false; } getTargetHeldItems(target: Pokemon): PokemonHeldItemModifier[] { - return target.scene.findModifiers(m => m instanceof PokemonHeldItemModifier + return globalScene.findModifiers(m => m instanceof PokemonHeldItemModifier && m.pokemonId === target.id, target.isPlayer()) as PokemonHeldItemModifier[]; } } export class PostAttackApplyStatusEffectAbAttr extends PostAttackAbAttr { private contactRequired: boolean; - private chance: integer; + private chance: number; private effects: StatusEffect[]; - constructor(contactRequired: boolean, chance: integer, ...effects: StatusEffect[]) { + constructor(contactRequired: boolean, chance: number, ...effects: StatusEffect[]) { super(); this.contactRequired = contactRequired; @@ -1709,18 +1838,18 @@ export class PostAttackApplyStatusEffectAbAttr extends PostAttackAbAttr { } export class PostAttackContactApplyStatusEffectAbAttr extends PostAttackApplyStatusEffectAbAttr { - constructor(chance: integer, ...effects: StatusEffect[]) { + constructor(chance: number, ...effects: StatusEffect[]) { super(true, chance, ...effects); } } export class PostAttackApplyBattlerTagAbAttr extends PostAttackAbAttr { private contactRequired: boolean; - private chance: (user: Pokemon, target: Pokemon, move: Move) => integer; + private chance: (user: Pokemon, target: Pokemon, move: Move) => number; private effects: BattlerTagType[]; - constructor(contactRequired: boolean, chance: (user: Pokemon, target: Pokemon, move: Move) => integer, ...effects: BattlerTagType[]) { + constructor(contactRequired: boolean, chance: (user: Pokemon, target: Pokemon, move: Move) => number, ...effects: BattlerTagType[]) { super(); this.contactRequired = contactRequired; @@ -1748,27 +1877,41 @@ export class PostDefendStealHeldItemAbAttr extends PostDefendAbAttr { this.condition = condition; } - override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, _args: any[]): Promise { - return new Promise(resolve => { - if (!simulated && hitResult < HitResult.NO_EFFECT && (!this.condition || this.condition(pokemon, attacker, move)) && !move.hitsSubstitute(attacker, pokemon)) { - const heldItems = this.getTargetHeldItems(attacker).filter(i => i.isTransferable); - if (heldItems.length) { - const stolenItem = heldItems[pokemon.randSeedInt(heldItems.length)]; - pokemon.scene.tryTransferHeldItemModifier(stolenItem, pokemon, false).then(success => { - if (success) { - pokemon.scene.queueMessage(i18next.t("abilityTriggers:postDefendStealHeldItem", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), attackerName: attacker.name, stolenItemType: stolenItem.type.name })); - } - resolve(success); - }); - return; + override applyPostDefend( + pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + attacker: Pokemon, + move: Move, + hitResult: HitResult, + _args: any[], + ): boolean { + if ( + !simulated && + hitResult < HitResult.NO_EFFECT && + (!this.condition || this.condition(pokemon, attacker, move)) && + !move.hitsSubstitute(attacker, pokemon) + ) { + const heldItems = this.getTargetHeldItems(attacker).filter((i) => i.isTransferable); + if (heldItems.length) { + const stolenItem = heldItems[pokemon.randSeedInt(heldItems.length)]; + if (globalScene.tryTransferHeldItemModifier(stolenItem, pokemon, false)) { + globalScene.queueMessage( + i18next.t("abilityTriggers:postDefendStealHeldItem", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + attackerName: attacker.name, + stolenItemType: stolenItem.type.name, + }), + ); + return true; } } - resolve(simulated); - }); + } + return false; } getTargetHeldItems(target: Pokemon): PokemonHeldItemModifier[] { - return target.scene.findModifiers(m => m instanceof PokemonHeldItemModifier + return globalScene.findModifiers(m => m instanceof PokemonHeldItemModifier && m.pokemonId === target.id, target.isPlayer()) as PokemonHeldItemModifier[]; } } @@ -1787,7 +1930,14 @@ export class PostSetStatusAbAttr extends AbAttr { * @param args Set of unique arguments needed by this attribute. * @returns `true` if application of the ability succeeds. */ - applyPostSetStatus(pokemon: Pokemon, sourcePokemon: Pokemon | null = null, passive: boolean, effect: StatusEffect, simulated: boolean, args: any[]) : boolean | Promise { + applyPostSetStatus( + pokemon: Pokemon, + sourcePokemon: Pokemon | null = null, + passive: boolean, + effect: StatusEffect, + simulated: boolean, + args: any[], + ): boolean { return false; } } @@ -1829,7 +1979,7 @@ export class SynchronizeStatusAbAttr extends PostSetStatusAbAttr { } export class PostVictoryAbAttr extends AbAttr { - applyPostVictory(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean | Promise { + applyPostVictory(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { return false; } } @@ -1845,31 +1995,29 @@ class PostVictoryStatStageChangeAbAttr extends PostVictoryAbAttr { this.stages = stages; } - applyPostVictory(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean | Promise { - const stat = typeof this.stat === "function" - ? this.stat(pokemon) - : this.stat; + applyPostVictory(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + const stat = typeof this.stat === "function" ? this.stat(pokemon) : this.stat; if (!simulated) { - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ stat ], this.stages)); + globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ stat ], this.stages)); } return true; } } export class PostVictoryFormChangeAbAttr extends PostVictoryAbAttr { - private formFunc: (p: Pokemon) => integer; + private formFunc: (p: Pokemon) => number; - constructor(formFunc: ((p: Pokemon) => integer)) { + constructor(formFunc: ((p: Pokemon) => number)) { super(true); this.formFunc = formFunc; } - applyPostVictory(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean | Promise { + applyPostVictory(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { const formIndex = this.formFunc(pokemon); if (formIndex !== pokemon.formIndex) { if (!simulated) { - pokemon.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeManualTrigger, false); + globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeAbilityTrigger, false); } return true; } @@ -1879,7 +2027,7 @@ export class PostVictoryFormChangeAbAttr extends PostVictoryAbAttr { } export class PostKnockOutAbAttr extends AbAttr { - applyPostKnockOut(pokemon: Pokemon, passive: boolean, simulated: boolean, knockedOut: Pokemon, args: any[]): boolean | Promise { + applyPostKnockOut(pokemon: Pokemon, passive: boolean, simulated: boolean, knockedOut: Pokemon, args: any[]): boolean { return false; } } @@ -1895,12 +2043,10 @@ export class PostKnockOutStatStageChangeAbAttr extends PostKnockOutAbAttr { this.stages = stages; } - applyPostKnockOut(pokemon: Pokemon, passive: boolean, simulated: boolean, knockedOut: Pokemon, args: any[]): boolean | Promise { - const stat = typeof this.stat === "function" - ? this.stat(pokemon) - : this.stat; + applyPostKnockOut(pokemon: Pokemon, passive: boolean, simulated: boolean, knockedOut: Pokemon, args: any[]): boolean { + const stat = typeof this.stat === "function" ? this.stat(pokemon) : this.stat; if (!simulated) { - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ stat ], this.stages)); + globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ stat ], this.stages)); } return true; } @@ -1911,11 +2057,11 @@ export class CopyFaintedAllyAbilityAbAttr extends PostKnockOutAbAttr { super(); } - applyPostKnockOut(pokemon: Pokemon, passive: boolean, simulated: boolean, knockedOut: Pokemon, args: any[]): boolean | Promise { + applyPostKnockOut(pokemon: Pokemon, passive: boolean, simulated: boolean, knockedOut: Pokemon, args: any[]): boolean { if (pokemon.isPlayer() === knockedOut.isPlayer() && !knockedOut.getAbility().hasAttr(UncopiableAbilityAbAttr)) { if (!simulated) { - pokemon.summonData.ability = knockedOut.getAbility().id; - pokemon.scene.queueMessage(i18next.t("abilityTriggers:copyFaintedAllyAbility", { pokemonNameWithAffix: getPokemonNameWithAffix(knockedOut), abilityName: allAbilities[knockedOut.getAbility().id].name })); + globalScene.queueMessage(i18next.t("abilityTriggers:copyFaintedAllyAbility", { pokemonNameWithAffix: getPokemonNameWithAffix(knockedOut), abilityName: allAbilities[knockedOut.getAbility().id].name })); + pokemon.setTempAbility(knockedOut.getAbility()); } return true; } @@ -1987,7 +2133,7 @@ export class PostIntimidateStatStageChangeAbAttr extends AbAttr { apply(pokemon: Pokemon, passive: boolean, simulated:boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean { if (!simulated) { - pokemon.scene.pushPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), false, this.stats, this.stages)); + globalScene.pushPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), false, this.stats, this.stages)); } cancelled.value = this.overwrites; return true; @@ -1999,6 +2145,21 @@ export class PostIntimidateStatStageChangeAbAttr extends AbAttr { * @see {@linkcode applyPostSummon()} */ export class PostSummonAbAttr extends AbAttr { + /** Should the ability activate when gained in battle? This will almost always be true */ + private activateOnGain: boolean; + + constructor(showAbility: boolean = true, activateOnGain: boolean = true) { + super(showAbility); + this.activateOnGain = activateOnGain; + } + + /** + * @returns Whether the ability should activate when gained in battle + */ + shouldActivateOnGain(): boolean { + return this.activateOnGain; + } + /** * Applies ability post summon (after switching in) * @param pokemon {@linkcode Pokemon} with this ability @@ -2006,7 +2167,7 @@ export class PostSummonAbAttr extends AbAttr { * @param args Set of unique arguments needed by this attribute * @returns true if application of the ability succeeds */ - applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean | Promise { + applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { return false; } } @@ -2026,16 +2187,44 @@ export class PostSummonRemoveArenaTagAbAttr extends PostSummonAbAttr { this.arenaTags = arenaTags; } - applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean | Promise { + override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { if (!simulated) { for (const arenaTag of this.arenaTags) { - pokemon.scene.arena.removeTag(arenaTag); + globalScene.arena.removeTag(arenaTag); } } return true; } } +/** + * Generic class to add an arena tag upon switching in + */ +export class PostSummonAddArenaTagAbAttr extends PostSummonAbAttr { + private readonly tagType: ArenaTagType; + private readonly turnCount: number; + private readonly side?: ArenaTagSide; + private readonly quiet?: boolean; + private sourceId: number; + + + constructor(tagType: ArenaTagType, turnCount: number, side?: ArenaTagSide, quiet?: boolean) { + super(false); + this.tagType = tagType; + this.turnCount = turnCount; + this.side = side; + this.quiet = quiet; + } + + public override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + this.sourceId = pokemon.id; + if (!simulated) { + globalScene.arena.addTag(this.tagType, this.turnCount, undefined, this.sourceId, this.side, this.quiet); + } + return true; + } +} + export class PostSummonMessageAbAttr extends PostSummonAbAttr { private messageFunc: (pokemon: Pokemon) => string; @@ -2047,7 +2236,7 @@ export class PostSummonMessageAbAttr extends PostSummonAbAttr { applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { if (!simulated) { - pokemon.scene.queueMessage(this.messageFunc(pokemon)); + globalScene.queueMessage(this.messageFunc(pokemon)); } return true; @@ -2066,7 +2255,7 @@ export class PostSummonUnnamedMessageAbAttr extends PostSummonAbAttr { applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { if (!simulated) { - pokemon.scene.queueMessage(this.message); + globalScene.queueMessage(this.message); } return true; @@ -2075,9 +2264,9 @@ export class PostSummonUnnamedMessageAbAttr extends PostSummonAbAttr { export class PostSummonAddBattlerTagAbAttr extends PostSummonAbAttr { private tagType: BattlerTagType; - private turnCount: integer; + private turnCount: number; - constructor(tagType: BattlerTagType, turnCount: integer, showAbility?: boolean) { + constructor(tagType: BattlerTagType, turnCount: number, showAbility?: boolean) { super(showAbility); this.tagType = tagType; @@ -2117,7 +2306,7 @@ export class PostSummonStatStageChangeAbAttr extends PostSummonAbAttr { if (this.selfTarget) { // we unshift the StatStageChangePhase to put it right after the showAbility and not at the end of the // phase list (which could be after CommandPhase for example) - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, this.stats, this.stages)); + globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, this.stats, this.stages)); return true; } for (const opponent of pokemon.getOpponents()) { @@ -2131,7 +2320,7 @@ export class PostSummonStatStageChangeAbAttr extends PostSummonAbAttr { } } if (!cancelled.value) { - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, opponent.getBattlerIndex(), false, this.stats, this.stages)); + globalScene.unshiftPhase(new StatStageChangePhase(opponent.getBattlerIndex(), false, this.stats, this.stages)); } } return true; @@ -2153,7 +2342,7 @@ export class PostSummonAllyHealAbAttr extends PostSummonAbAttr { const target = pokemon.getAlly(); if (target?.isActive(true)) { if (!simulated) { - target.scene.unshiftPhase(new PokemonHealPhase(target.scene, target.getBattlerIndex(), + globalScene.unshiftPhase(new PokemonHealPhase(target.getBattlerIndex(), Utils.toDmgValue(pokemon.getMaxHp() / this.healRatio), i18next.t("abilityTriggers:postSummonAllyHeal", { pokemonNameWithAffix: getPokemonNameWithAffix(target), pokemonName: pokemon.name }), true, !this.showAnim)); } @@ -2185,7 +2374,7 @@ export class PostSummonClearAllyStatStagesAbAttr extends PostSummonAbAttr { target.setStatStage(s, 0); } - target.scene.queueMessage(i18next.t("abilityTriggers:postSummonClearAllyStats", { pokemonNameWithAffix: getPokemonNameWithAffix(target) })); + globalScene.queueMessage(i18next.t("abilityTriggers:postSummonClearAllyStats", { pokemonNameWithAffix: getPokemonNameWithAffix(target) })); } return true; @@ -2203,9 +2392,9 @@ export class PostSummonClearAllyStatStagesAbAttr extends PostSummonAbAttr { * @see {applyPostSummon} */ export class DownloadAbAttr extends PostSummonAbAttr { - private enemyDef: integer; - private enemySpDef: integer; - private enemyCountTally: integer; + private enemyDef: number; + private enemySpDef: number; + private enemyCountTally: number; private stats: BattleStat[]; /** @@ -2237,7 +2426,7 @@ export class DownloadAbAttr extends PostSummonAbAttr { if (this.enemyDef > 0 && this.enemySpDef > 0) { // only activate if there's actually an enemy to download from if (!simulated) { - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), false, this.stats, 1)); + globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), false, this.stats, 1)); } return true; } @@ -2258,11 +2447,11 @@ export class PostSummonWeatherChangeAbAttr extends PostSummonAbAttr { applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { if ((this.weatherType === WeatherType.HEAVY_RAIN || this.weatherType === WeatherType.HARSH_SUN || - this.weatherType === WeatherType.STRONG_WINDS) || !pokemon.scene.arena.weather?.isImmutable()) { + this.weatherType === WeatherType.STRONG_WINDS) || !globalScene.arena.weather?.isImmutable()) { if (simulated) { - return pokemon.scene.arena.weather?.weatherType !== this.weatherType; + return globalScene.arena.weather?.weatherType !== this.weatherType; } else { - return pokemon.scene.arena.trySetWeather(this.weatherType, true); + return globalScene.arena.trySetWeather(this.weatherType, true); } } @@ -2281,17 +2470,17 @@ export class PostSummonTerrainChangeAbAttr extends PostSummonAbAttr { applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { if (simulated) { - return pokemon.scene.arena.terrain?.terrainType !== this.terrainType; + return globalScene.arena.terrain?.terrainType !== this.terrainType; } else { - return pokemon.scene.arena.trySetTerrain(this.terrainType, true); + return globalScene.arena.trySetTerrain(this.terrainType, true); } } } export class PostSummonFormChangeAbAttr extends PostSummonAbAttr { - private formFunc: (p: Pokemon) => integer; + private formFunc: (p: Pokemon) => number; - constructor(formFunc: ((p: Pokemon) => integer)) { + constructor(formFunc: ((p: Pokemon) => number)) { super(true); this.formFunc = formFunc; @@ -2300,7 +2489,7 @@ export class PostSummonFormChangeAbAttr extends PostSummonAbAttr { applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { const formIndex = this.formFunc(pokemon); if (formIndex !== pokemon.formIndex) { - return simulated || pokemon.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeManualTrigger, false); + return simulated || globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeAbilityTrigger, false); } return false; @@ -2320,7 +2509,7 @@ export class PostSummonCopyAbilityAbAttr extends PostSummonAbAttr { let target: Pokemon; if (targets.length > 1) { - pokemon.scene.executeWithSeedOffset(() => target = Utils.randSeedItem(targets), pokemon.scene.currentBattle.waveIndex); + globalScene.executeWithSeedOffset(() => target = Utils.randSeedItem(targets), globalScene.currentBattle.waveIndex); } else { target = targets[0]; } @@ -2336,7 +2525,7 @@ export class PostSummonCopyAbilityAbAttr extends PostSummonAbAttr { if (!simulated) { this.target = target!; this.targetAbilityName = allAbilities[target!.getAbility().id].name; - pokemon.summonData.ability = target!.getAbility().id; + pokemon.setTempAbility(target!.getAbility()); setAbilityRevealed(target!); pokemon.updateInfo(); } @@ -2374,10 +2563,10 @@ export class PostSummonUserFieldRemoveStatusEffectAbAttr extends PostSummonAbAtt * @param pokemon - The Pokémon that triggered the ability. * @param passive - n/a * @param args - n/a - * @returns A boolean or a promise that resolves to a boolean indicating the result of the ability application. + * @returns A boolean that resolves to a boolean indicating the result of the ability application. */ - applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean | Promise { - const party = pokemon instanceof PlayerPokemon ? pokemon.scene.getPlayerField() : pokemon.scene.getEnemyField(); + override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + const party = pokemon instanceof PlayerPokemon ? globalScene.getPlayerField() : globalScene.getEnemyField(); const allowedParty = party.filter(p => p.isAllowedInBattle()); if (allowedParty.length < 1) { @@ -2387,7 +2576,7 @@ export class PostSummonUserFieldRemoveStatusEffectAbAttr extends PostSummonAbAtt if (!simulated) { for (const pokemon of allowedParty) { if (pokemon.status && this.statusEffect.includes(pokemon.status.effect)) { - pokemon.scene.queueMessage(getStatusEffectHealText(pokemon.status.effect, getPokemonNameWithAffix(pokemon))); + globalScene.queueMessage(getStatusEffectHealText(pokemon.status.effect, getPokemonNameWithAffix(pokemon))); pokemon.resetStatus(false); pokemon.updateInfo(); } @@ -2401,7 +2590,7 @@ export class PostSummonUserFieldRemoveStatusEffectAbAttr extends PostSummonAbAtt /** Attempt to copy the stat changes on an ally pokemon */ export class PostSummonCopyAllyStatsAbAttr extends PostSummonAbAttr { applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - if (!pokemon.scene.currentBattle.double) { + if (!globalScene.currentBattle.double) { return false; } @@ -2433,19 +2622,18 @@ export class PostSummonCopyAllyStatsAbAttr extends PostSummonAbAttr { */ export class PostSummonTransformAbAttr extends PostSummonAbAttr { constructor() { - super(true); + super(true, false); } - async applyPostSummon(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): Promise { + override applyPostSummon(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): boolean { const targets = pokemon.getOpponents(); if (simulated || !targets.length) { return simulated; } - const promises: Promise[] = []; let target: Pokemon; if (targets.length > 1) { - pokemon.scene.executeWithSeedOffset(() => { + globalScene.executeWithSeedOffset(() => { // in a double battle, if one of the opposing pokemon is fused the other one will be chosen // if both are fused, then Imposter will fail below if (targets[0].fusionSpecies) { @@ -2456,7 +2644,7 @@ export class PostSummonTransformAbAttr extends PostSummonAbAttr { return; } target = Utils.randSeedItem(targets); - }, pokemon.scene.currentBattle.waveIndex); + }, globalScene.currentBattle.waveIndex); } else { target = targets[0]; } @@ -2467,40 +2655,14 @@ export class PostSummonTransformAbAttr extends PostSummonAbAttr { return false; } - pokemon.summonData.speciesForm = target.getSpeciesForm(); - pokemon.summonData.ability = target.getAbility().id; - pokemon.summonData.gender = target.getGender(); + globalScene.unshiftPhase(new PokemonTransformPhase(pokemon.getBattlerIndex(), target.getBattlerIndex(), true)); - // Copy all stats (except HP) - for (const s of EFFECTIVE_STATS) { - pokemon.setStat(s, target.getStat(s, false), false); - } - - // Copy all stat stages - for (const s of BATTLE_STATS) { - pokemon.setStatStage(s, target.getStatStage(s)); - } - - pokemon.summonData.moveset = target.getMoveset().map((m) => { - if (m) { - // If PP value is less than 5, do nothing. If greater, we need to reduce the value to 5. - return new PokemonMove(m.moveId, 0, 0, false, Math.min(m.getMove().pp, 5)); - } else { - console.warn(`Imposter: somehow iterating over a ${m} value when copying moveset!`); - return new PokemonMove(Moves.NONE); - } - }); - pokemon.summonData.types = target.getTypes(); - promises.push(pokemon.updateInfo()); - - pokemon.scene.queueMessage(i18next.t("abilityTriggers:postSummonTransform", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), targetName: target.name, })); - pokemon.scene.playSound("battle_anims/PRSFX- Transform"); - promises.push(pokemon.loadAssets(false).then(() => { - pokemon.playAnim(); - pokemon.updateInfo(); - })); - - await Promise.all(promises); + globalScene.queueMessage( + i18next.t("abilityTriggers:postSummonTransform", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + targetName: target.name, + }), + ); return true; } @@ -2520,14 +2682,14 @@ export class PostSummonWeatherSuppressedFormChangeAbAttr extends PostSummonAbAtt * @returns whether a Pokemon was reverted to its normal form */ applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]) { - const pokemonToTransform = getPokemonWithWeatherBasedForms(pokemon.scene); + const pokemonToTransform = getPokemonWithWeatherBasedForms(); if (pokemonToTransform.length < 1) { return false; } if (!simulated) { - pokemon.scene.arena.triggerWeatherBasedFormChangesToNormal(); + globalScene.arena.triggerWeatherBasedFormChangesToNormal(); } return true; @@ -2567,8 +2729,8 @@ export class PostSummonFormChangeByWeatherAbAttr extends PostSummonAbAttr { return simulated; } - pokemon.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeWeatherTrigger); - pokemon.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeRevertWeatherFormTrigger); + globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeWeatherTrigger); + globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeRevertWeatherFormTrigger); queueShowAbility(pokemon, passive); return true; } @@ -2589,7 +2751,7 @@ export class CommanderAbAttr extends AbAttr { override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: null, args: any[]): boolean { // TODO: Should this work with X + Dondozo fusions? - if (pokemon.scene.currentBattle?.double && pokemon.getAlly()?.species.speciesId === Species.DONDOZO) { + if (globalScene.currentBattle?.double && pokemon.getAlly()?.species.speciesId === Species.DONDOZO) { // If the ally Dondozo is fainted or was previously "commanded" by // another Pokemon, this effect cannot apply. if (pokemon.getAlly().isFainted() || pokemon.getAlly().getTag(BattlerTagType.COMMANDED)) { @@ -2600,11 +2762,11 @@ export class CommanderAbAttr extends AbAttr { // Lapse the source's semi-invulnerable tags (to avoid visual inconsistencies) pokemon.lapseTags(BattlerTagLapseType.MOVE_EFFECT); // Play an animation of the source jumping into the ally Dondozo's mouth - pokemon.scene.triggerPokemonBattleAnim(pokemon, PokemonAnimType.COMMANDER_APPLY); + globalScene.triggerPokemonBattleAnim(pokemon, PokemonAnimType.COMMANDER_APPLY); // Apply boosts from this effect to the ally Dondozo pokemon.getAlly().addTag(BattlerTagType.COMMANDED, 0, Moves.NONE, pokemon.id); // Cancel the source Pokemon's next move (if a move is queued) - pokemon.scene.tryRemovePhase((phase) => phase instanceof MovePhase && phase.pokemon === pokemon); + globalScene.tryRemovePhase((phase) => phase instanceof MovePhase && phase.pokemon === pokemon); } return true; } @@ -2617,13 +2779,13 @@ export class PreSwitchOutAbAttr extends AbAttr { super(true); } - applyPreSwitchOut(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean | Promise { + applyPreSwitchOut(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { return false; } } export class PreSwitchOutResetStatusAbAttr extends PreSwitchOutAbAttr { - applyPreSwitchOut(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean | Promise { + override applyPreSwitchOut(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { if (pokemon.status) { if (!simulated) { pokemon.resetStatus(); @@ -2641,34 +2803,48 @@ export class PreSwitchOutResetStatusAbAttr extends PreSwitchOutAbAttr { * Clears Desolate Land/Primordial Sea/Delta Stream upon the Pokemon switching out. */ export class PreSwitchOutClearWeatherAbAttr extends PreSwitchOutAbAttr { - /** * @param pokemon The {@linkcode Pokemon} with the ability * @param passive N/A * @param args N/A * @returns {boolean} Returns true if the weather clears, otherwise false. */ - applyPreSwitchOut(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean | Promise { - const weatherType = pokemon.scene.arena.weather?.weatherType; + override applyPreSwitchOut(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + const weatherType = globalScene.arena.weather?.weatherType; let turnOffWeather = false; // Clear weather only if user's ability matches the weather and no other pokemon has the ability. switch (weatherType) { - case (WeatherType.HARSH_SUN): - if (pokemon.hasAbility(Abilities.DESOLATE_LAND) - && pokemon.scene.getField(true).filter(p => p !== pokemon).filter(p => p.hasAbility(Abilities.DESOLATE_LAND)).length === 0) { + case WeatherType.HARSH_SUN: + if ( + pokemon.hasAbility(Abilities.DESOLATE_LAND) && + globalScene + .getField(true) + .filter((p) => p !== pokemon) + .filter((p) => p.hasAbility(Abilities.DESOLATE_LAND)).length === 0 + ) { turnOffWeather = true; } break; - case (WeatherType.HEAVY_RAIN): - if (pokemon.hasAbility(Abilities.PRIMORDIAL_SEA) - && pokemon.scene.getField(true).filter(p => p !== pokemon).filter(p => p.hasAbility(Abilities.PRIMORDIAL_SEA)).length === 0) { + case WeatherType.HEAVY_RAIN: + if ( + pokemon.hasAbility(Abilities.PRIMORDIAL_SEA) && + globalScene + .getField(true) + .filter((p) => p !== pokemon) + .filter((p) => p.hasAbility(Abilities.PRIMORDIAL_SEA)).length === 0 + ) { turnOffWeather = true; } break; - case (WeatherType.STRONG_WINDS): - if (pokemon.hasAbility(Abilities.DELTA_STREAM) - && pokemon.scene.getField(true).filter(p => p !== pokemon).filter(p => p.hasAbility(Abilities.DELTA_STREAM)).length === 0) { + case WeatherType.STRONG_WINDS: + if ( + pokemon.hasAbility(Abilities.DELTA_STREAM) && + globalScene + .getField(true) + .filter((p) => p !== pokemon) + .filter((p) => p.hasAbility(Abilities.DELTA_STREAM)).length === 0 + ) { turnOffWeather = true; } break; @@ -2679,7 +2855,7 @@ export class PreSwitchOutClearWeatherAbAttr extends PreSwitchOutAbAttr { } if (turnOffWeather) { - pokemon.scene.arena.trySetWeather(WeatherType.NONE, false); + globalScene.arena.trySetWeather(WeatherType.NONE, false); return true; } @@ -2688,7 +2864,7 @@ export class PreSwitchOutClearWeatherAbAttr extends PreSwitchOutAbAttr { } export class PreSwitchOutHealAbAttr extends PreSwitchOutAbAttr { - applyPreSwitchOut(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean | Promise { + override applyPreSwitchOut(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { if (!pokemon.isFullHp()) { if (!simulated) { const healAmount = Utils.toDmgValue(pokemon.getMaxHp() * 0.33); @@ -2709,9 +2885,9 @@ export class PreSwitchOutHealAbAttr extends PreSwitchOutAbAttr { * @see {@linkcode applyPreSwitchOut} */ export class PreSwitchOutFormChangeAbAttr extends PreSwitchOutAbAttr { - private formFunc: (p: Pokemon) => integer; + private formFunc: (p: Pokemon) => number; - constructor(formFunc: ((p: Pokemon) => integer)) { + constructor(formFunc: ((p: Pokemon) => number)) { super(); this.formFunc = formFunc; @@ -2724,11 +2900,11 @@ export class PreSwitchOutFormChangeAbAttr extends PreSwitchOutAbAttr { * @param args N/A * @returns true if the form change was successful */ - applyPreSwitchOut(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean | Promise { + override applyPreSwitchOut(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { const formIndex = this.formFunc(pokemon); if (formIndex !== pokemon.formIndex) { if (!simulated) { - pokemon.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeManualTrigger, false); + globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeAbilityTrigger, false); } return true; } @@ -2738,12 +2914,132 @@ export class PreSwitchOutFormChangeAbAttr extends PreSwitchOutAbAttr { } -export class PreStatStageChangeAbAttr extends AbAttr { - applyPreStatStageChange(pokemon: Pokemon | null, passive: boolean, simulated: boolean, stat: BattleStat, cancelled: Utils.BooleanHolder, args: any[]): boolean | Promise { +export class PreLeaveFieldAbAttr extends AbAttr { + applyPreLeaveField(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { return false; } } +/** + * Clears Desolate Land/Primordial Sea/Delta Stream upon the Pokemon switching out. + */ +export class PreLeaveFieldClearWeatherAbAttr extends PreLeaveFieldAbAttr { + /** + * @param pokemon The {@linkcode Pokemon} with the ability + * @param passive N/A + * @param args N/A + * @returns Returns `true` if the weather clears, otherwise `false`. + */ + applyPreLeaveField(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + const weatherType = globalScene.arena.weather?.weatherType; + let turnOffWeather = false; + + // Clear weather only if user's ability matches the weather and no other pokemon has the ability. + switch (weatherType) { + case (WeatherType.HARSH_SUN): + if (pokemon.hasAbility(Abilities.DESOLATE_LAND) + && globalScene.getField(true).filter(p => p !== pokemon).filter(p => p.hasAbility(Abilities.DESOLATE_LAND)).length === 0) { + turnOffWeather = true; + } + break; + case (WeatherType.HEAVY_RAIN): + if (pokemon.hasAbility(Abilities.PRIMORDIAL_SEA) + && globalScene.getField(true).filter(p => p !== pokemon).filter(p => p.hasAbility(Abilities.PRIMORDIAL_SEA)).length === 0) { + turnOffWeather = true; + } + break; + case (WeatherType.STRONG_WINDS): + if (pokemon.hasAbility(Abilities.DELTA_STREAM) + && globalScene.getField(true).filter(p => p !== pokemon).filter(p => p.hasAbility(Abilities.DELTA_STREAM)).length === 0) { + turnOffWeather = true; + } + break; + } + + if (simulated) { + return turnOffWeather; + } + + if (turnOffWeather) { + globalScene.arena.trySetWeather(WeatherType.NONE, false); + return true; + } + + return false; + } +} + +/** + * Updates the active {@linkcode SuppressAbilitiesTag} when a pokemon with {@linkcode Abilities.NEUTRALIZING_GAS} leaves the field + */ +export class PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr extends PreLeaveFieldAbAttr { + constructor() { + super(false); + } + + public override applyPreLeaveField(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + if (!simulated) { + const suppressTag = globalScene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS) as SuppressAbilitiesTag; + if (suppressTag) { + suppressTag.onSourceLeave(globalScene.arena); + return true; + } + } + return simulated; + } +} + +export class PreStatStageChangeAbAttr extends AbAttr { + applyPreStatStageChange( + pokemon: Pokemon | null, + passive: boolean, + simulated: boolean, + stat: BattleStat, + cancelled: Utils.BooleanHolder, + args: any[], + ): boolean { + return false; + } +} + +/** + * Reflect all {@linkcode BattleStat} reductions caused by other Pokémon's moves and Abilities. + * Currently only applies to Mirror Armor. + */ +export class ReflectStatStageChangeAbAttr extends PreStatStageChangeAbAttr { + /** {@linkcode BattleStat} to reflect */ + private reflectedStat? : BattleStat; + + /** + * Apply the {@linkcode ReflectStatStageChangeAbAttr} to an interaction + * @param _pokemon The user pokemon + * @param _passive N/A + * @param simulated `true` if the ability is being simulated by the AI + * @param stat the {@linkcode BattleStat} being affected + * @param cancelled The {@linkcode Utils.BooleanHolder} that will be set to true due to reflection + * @param args + * @returns true because it reflects any stat being lowered + */ + applyPreStatStageChange(_pokemon: Pokemon, _passive: boolean, simulated: boolean, stat: BattleStat, cancelled: Utils.BooleanHolder, args: any[]): boolean { + const attacker: Pokemon = args[0]; + const stages = args[1]; + this.reflectedStat = stat; + if (!simulated) { + globalScene.unshiftPhase(new StatStageChangePhase(attacker.getBattlerIndex(), false, [ stat ], stages, true, false, true, null, true)); + } + cancelled.value = true; + return true; + } + + getTriggerMessage(pokemon: Pokemon, abilityName: string, ..._args: any[]): string { + return i18next.t("abilityTriggers:protectStat", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + abilityName, + statName: this.reflectedStat ? i18next.t(getStatKey(this.reflectedStat)) : i18next.t("battle:stats") + }); + } +} + /** * Protect one or all {@linkcode BattleStat} from reductions caused by other Pokémon's moves and Abilities */ @@ -2824,7 +3120,14 @@ export class ConfusionOnStatusEffectAbAttr extends PostAttackAbAttr { } export class PreSetStatusAbAttr extends AbAttr { - applyPreSetStatus(pokemon: Pokemon, passive: boolean, simulated: boolean, effect: StatusEffect | undefined, cancelled: Utils.BooleanHolder, args: any[]): boolean | Promise { + applyPreSetStatus( + pokemon: Pokemon, + passive: boolean, + simulated: boolean, + effect: StatusEffect | undefined, + cancelled: Utils.BooleanHolder, + args: any[], + ): boolean { return false; } } @@ -2855,7 +3158,7 @@ export class PreSetStatusEffectImmunityAbAttr extends PreSetStatusAbAttr { * @returns A boolean indicating the result of the status application. */ applyPreSetStatus(pokemon: Pokemon, passive: boolean, simulated: boolean, effect: StatusEffect, cancelled: Utils.BooleanHolder, args: any[]): boolean { - if (this.immuneEffects.length < 1 || this.immuneEffects.includes(effect)) { + if (effect !== StatusEffect.FAINT && this.immuneEffects.length < 1 || this.immuneEffects.includes(effect)) { cancelled.value = true; return true; } @@ -2890,7 +3193,14 @@ export class StatusEffectImmunityAbAttr extends PreSetStatusEffectImmunityAbAttr export class UserFieldStatusEffectImmunityAbAttr extends PreSetStatusEffectImmunityAbAttr { } export class PreApplyBattlerTagAbAttr extends AbAttr { - applyPreApplyBattlerTag(pokemon: Pokemon, passive: boolean, simulated: boolean, tag: BattlerTag, cancelled: Utils.BooleanHolder, args: any[]): boolean | Promise { + applyPreApplyBattlerTag( + pokemon: Pokemon, + passive: boolean, + simulated: boolean, + tag: BattlerTag, + cancelled: Utils.BooleanHolder, + args: any[], + ): boolean { return false; } } @@ -3077,7 +3387,7 @@ export class ChangeMovePriorityAbAttr extends AbAttr { return false; } - (args[1] as Utils.IntegerHolder).value += this.changeAmount; + (args[1] as Utils.NumberHolder).value += this.changeAmount; return true; } } @@ -3085,7 +3395,14 @@ export class ChangeMovePriorityAbAttr extends AbAttr { export class IgnoreContactAbAttr extends AbAttr { } export class PreWeatherEffectAbAttr extends AbAttr { - applyPreWeatherEffect(pokemon: Pokemon, passive: Boolean, simulated: boolean, weather: Weather | null, cancelled: Utils.BooleanHolder, args: any[]): boolean | Promise { + applyPreWeatherEffect( + pokemon: Pokemon, + passive: Boolean, + simulated: boolean, + weather: Weather | null, + cancelled: Utils.BooleanHolder, + args: any[], + ): boolean { return false; } } @@ -3159,14 +3476,14 @@ function getSheerForceHitDisableAbCondition(): AbAttrCondition { } function getWeatherCondition(...weatherTypes: WeatherType[]): AbAttrCondition { - return (pokemon: Pokemon) => { - if (!pokemon.scene?.arena) { + return () => { + if (!globalScene?.arena) { return false; } - if (pokemon.scene.arena.weather?.isEffectSuppressed(pokemon.scene)) { + if (globalScene.arena.weather?.isEffectSuppressed()) { return false; } - const weatherType = pokemon.scene.arena.weather?.weatherType; + const weatherType = globalScene.arena.weather?.weatherType; return !!weatherType && weatherTypes.indexOf(weatherType) > -1; }; } @@ -3255,7 +3572,7 @@ export class ForewarnAbAttr extends PostSummonAbAttr { } } if (!simulated) { - pokemon.scene.queueMessage(i18next.t("abilityTriggers:forewarn", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: maxMove })); + globalScene.queueMessage(i18next.t("abilityTriggers:forewarn", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: maxMove })); } return true; } @@ -3269,7 +3586,7 @@ export class FriskAbAttr extends PostSummonAbAttr { applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { if (!simulated) { for (const opponent of pokemon.getOpponents()) { - pokemon.scene.queueMessage(i18next.t("abilityTriggers:frisk", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), opponentName: opponent.name, opponentAbilityName: opponent.getAbility().name })); + globalScene.queueMessage(i18next.t("abilityTriggers:frisk", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), opponentName: opponent.name, opponentAbilityName: opponent.getAbility().name })); setAbilityRevealed(opponent); } } @@ -3317,12 +3634,12 @@ export class PostWeatherChangeFormChangeAbAttr extends PostWeatherChangeAbAttr { return simulated; } - const weatherType = pokemon.scene.arena.weather?.weatherType; + const weatherType = globalScene.arena.weather?.weatherType; if (weatherType && this.formRevertingWeathers.includes(weatherType)) { - pokemon.scene.arena.triggerWeatherBasedFormChangesToNormal(); + globalScene.arena.triggerWeatherBasedFormChangesToNormal(); } else { - pokemon.scene.arena.triggerWeatherBasedFormChanges(); + globalScene.arena.triggerWeatherBasedFormChanges(); } return true; } @@ -3332,10 +3649,10 @@ export class PostWeatherChangeFormChangeAbAttr extends PostWeatherChangeAbAttr { export class PostWeatherChangeAddBattlerTagAttr extends PostWeatherChangeAbAttr { private tagType: BattlerTagType; - private turnCount: integer; + private turnCount: number; private weatherTypes: WeatherType[]; - constructor(tagType: BattlerTagType, turnCount: integer, ...weatherTypes: WeatherType[]) { + constructor(tagType: BattlerTagType, turnCount: number, ...weatherTypes: WeatherType[]) { super(); this.tagType = tagType; @@ -3366,7 +3683,13 @@ export class PostWeatherLapseAbAttr extends AbAttr { this.weatherTypes = weatherTypes; } - applyPostWeatherLapse(pokemon: Pokemon, passive: boolean, simulated: boolean, weather: Weather | null, args: any[]): boolean | Promise { + applyPostWeatherLapse( + pokemon: Pokemon, + passive: boolean, + simulated: boolean, + weather: Weather | null, + args: any[], + ): boolean { return false; } @@ -3376,9 +3699,9 @@ export class PostWeatherLapseAbAttr extends AbAttr { } export class PostWeatherLapseHealAbAttr extends PostWeatherLapseAbAttr { - private healFactor: integer; + private healFactor: number; - constructor(healFactor: integer, ...weatherTypes: WeatherType[]) { + constructor(healFactor: number, ...weatherTypes: WeatherType[]) { super(...weatherTypes); this.healFactor = healFactor; @@ -3386,10 +3709,9 @@ export class PostWeatherLapseHealAbAttr extends PostWeatherLapseAbAttr { applyPostWeatherLapse(pokemon: Pokemon, passive: boolean, simulated: boolean, weather: Weather, args: any[]): boolean { if (!pokemon.isFullHp()) { - const scene = pokemon.scene; const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; if (!simulated) { - scene.unshiftPhase(new PokemonHealPhase(scene, pokemon.getBattlerIndex(), + globalScene.unshiftPhase(new PokemonHealPhase(pokemon.getBattlerIndex(), Utils.toDmgValue(pokemon.getMaxHp() / (16 / this.healFactor)), i18next.t("abilityTriggers:postWeatherLapseHeal", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName }), true)); } return true; @@ -3400,23 +3722,22 @@ export class PostWeatherLapseHealAbAttr extends PostWeatherLapseAbAttr { } export class PostWeatherLapseDamageAbAttr extends PostWeatherLapseAbAttr { - private damageFactor: integer; + private damageFactor: number; - constructor(damageFactor: integer, ...weatherTypes: WeatherType[]) { + constructor(damageFactor: number, ...weatherTypes: WeatherType[]) { super(...weatherTypes); this.damageFactor = damageFactor; } applyPostWeatherLapse(pokemon: Pokemon, passive: boolean, simulated: boolean, weather: Weather, args: any[]): boolean { - const scene = pokemon.scene; if (pokemon.hasAbilityWithAttr(BlockNonDirectDamageAbAttr)) { return false; } if (!simulated) { const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; - scene.queueMessage(i18next.t("abilityTriggers:postWeatherLapseDamage", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName })); + globalScene.queueMessage(i18next.t("abilityTriggers:postWeatherLapseDamage", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName })); pokemon.damageAndUpdate(Utils.toDmgValue(pokemon.getMaxHp() / (16 / this.damageFactor)), HitResult.OTHER); } @@ -3432,10 +3753,10 @@ export class PostTerrainChangeAbAttr extends AbAttr { export class PostTerrainChangeAddBattlerTagAttr extends PostTerrainChangeAbAttr { private tagType: BattlerTagType; - private turnCount: integer; + private turnCount: number; private terrainTypes: TerrainType[]; - constructor(tagType: BattlerTagType, turnCount: integer, ...terrainTypes: TerrainType[]) { + constructor(tagType: BattlerTagType, turnCount: number, ...terrainTypes: TerrainType[]) { super(); this.tagType = tagType; @@ -3458,13 +3779,13 @@ export class PostTerrainChangeAddBattlerTagAttr extends PostTerrainChangeAbAttr function getTerrainCondition(...terrainTypes: TerrainType[]): AbAttrCondition { return (pokemon: Pokemon) => { - const terrainType = pokemon.scene.arena.terrain?.terrainType; + const terrainType = globalScene.arena.terrain?.terrainType; return !!terrainType && terrainTypes.indexOf(terrainType) > -1; }; } export class PostTurnAbAttr extends AbAttr { - applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean | Promise { + applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { return false; } } @@ -3490,13 +3811,12 @@ export class PostTurnStatusHealAbAttr extends PostTurnAbAttr { * @param {any[]} args N/A * @returns Returns true if healed from status, false if not */ - applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean | Promise { + override applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { if (pokemon.status && this.effects.includes(pokemon.status.effect)) { if (!pokemon.isFullHp()) { if (!simulated) { - const scene = pokemon.scene; const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; - scene.unshiftPhase(new PokemonHealPhase(scene, pokemon.getBattlerIndex(), + globalScene.unshiftPhase(new PokemonHealPhase(pokemon.getBattlerIndex(), Utils.toDmgValue(pokemon.getMaxHp() / 8), i18next.t("abilityTriggers:poisonHeal", { pokemonName: getPokemonNameWithAffix(pokemon), abilityName }), true)); } return true; @@ -3527,7 +3847,7 @@ export class PostTurnResetStatusAbAttr extends PostTurnAbAttr { } if (this.target?.status) { if (!simulated) { - this.target.scene.queueMessage(getStatusEffectHealText(this.target.status?.effect, getPokemonNameWithAffix(this.target))); + globalScene.queueMessage(getStatusEffectHealText(this.target.status?.effect, getPokemonNameWithAffix(this.target))); this.target.resetStatus(false); this.target.updateInfo(); } @@ -3592,7 +3912,7 @@ export class PostTurnLootAbAttr extends PostTurnAbAttr { const chosenBerry = new BerryModifierType(chosenBerryType); berriesEaten.splice(randomIdx); // Remove berry from memory - const berryModifier = pokemon.scene.findModifier( + const berryModifier = globalScene.findModifier( (m) => m instanceof BerryModifier && m.berryType === chosenBerryType, pokemon.isPlayer() ) as BerryModifier | undefined; @@ -3600,16 +3920,16 @@ export class PostTurnLootAbAttr extends PostTurnAbAttr { if (!berryModifier) { const newBerry = new BerryModifier(chosenBerry, pokemon.id, chosenBerryType, 1); if (pokemon.isPlayer()) { - pokemon.scene.addModifier(newBerry); + globalScene.addModifier(newBerry); } else { - pokemon.scene.addEnemyModifier(newBerry); + globalScene.addEnemyModifier(newBerry); } } else if (berryModifier.stackCount < berryModifier.getMaxHeldItemCount(pokemon)) { berryModifier.stackCount++; } - pokemon.scene.queueMessage(i18next.t("abilityTriggers:postTurnLootCreateEatenBerry", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), berryName: chosenBerry.name })); - pokemon.scene.updateModifiers(pokemon.isPlayer()); + globalScene.queueMessage(i18next.t("abilityTriggers:postTurnLootCreateEatenBerry", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), berryName: chosenBerry.name })); + globalScene.updateModifiers(pokemon.isPlayer()); return true; } @@ -3642,11 +3962,11 @@ export class MoodyAbAttr extends PostTurnAbAttr { if (canRaise.length > 0) { const raisedStat = canRaise[pokemon.randSeedInt(canRaise.length)]; canLower = canRaise.filter(s => s !== raisedStat); - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ raisedStat ], 2)); + globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ raisedStat ], 2)); } if (canLower.length > 0) { const loweredStat = canLower[pokemon.randSeedInt(canLower.length)]; - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ loweredStat ], -1)); + globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ loweredStat ], -1)); } } @@ -3663,7 +3983,7 @@ export class SpeedBoostAbAttr extends PostTurnAbAttr { applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { if (!simulated) { if (!pokemon.turnData.switchedInThisTurn && !pokemon.turnData.failedRunAway) { - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ Stat.SPD ], 1)); + globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ Stat.SPD ], 1)); } else { return false; } @@ -3676,9 +3996,8 @@ export class PostTurnHealAbAttr extends PostTurnAbAttr { applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { if (!pokemon.isFullHp()) { if (!simulated) { - const scene = pokemon.scene; const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; - scene.unshiftPhase(new PokemonHealPhase(scene, pokemon.getBattlerIndex(), + globalScene.unshiftPhase(new PokemonHealPhase(pokemon.getBattlerIndex(), Utils.toDmgValue(pokemon.getMaxHp() / 16), i18next.t("abilityTriggers:postTurnHeal", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName }), true)); } @@ -3690,9 +4009,9 @@ export class PostTurnHealAbAttr extends PostTurnAbAttr { } export class PostTurnFormChangeAbAttr extends PostTurnAbAttr { - private formFunc: (p: Pokemon) => integer; + private formFunc: (p: Pokemon) => number; - constructor(formFunc: ((p: Pokemon) => integer)) { + constructor(formFunc: ((p: Pokemon) => number)) { super(true); this.formFunc = formFunc; @@ -3702,7 +4021,7 @@ export class PostTurnFormChangeAbAttr extends PostTurnAbAttr { const formIndex = this.formFunc(pokemon); if (formIndex !== pokemon.formIndex) { if (!simulated) { - pokemon.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeManualTrigger, false); + globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeAbilityTrigger, false); } return true; @@ -3726,13 +4045,13 @@ export class PostTurnHurtIfSleepingAbAttr extends PostTurnAbAttr { * @param args N/A * @returns `true` if any opponents are sleeping */ - applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean | Promise { + override applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { let hadEffect: boolean = false; for (const opp of pokemon.getOpponents()) { if ((opp.status?.effect === StatusEffect.SLEEP || opp.hasAbility(Abilities.COMATOSE)) && !opp.hasAbilityWithAttr(BlockNonDirectDamageAbAttr) && !opp.switchOutStatus) { if (!simulated) { opp.damageAndUpdate(Utils.toDmgValue(opp.getMaxHp() / 8), HitResult.OTHER); - pokemon.scene.queueMessage(i18next.t("abilityTriggers:badDreams", { pokemonName: getPokemonNameWithAffix(opp) })); + globalScene.queueMessage(i18next.t("abilityTriggers:badDreams", { pokemonName: getPokemonNameWithAffix(opp) })); } hadEffect = true; } @@ -3762,11 +4081,11 @@ export class FetchBallAbAttr extends PostTurnAbAttr { if (simulated) { return false; } - const lastUsed = pokemon.scene.currentBattle.lastUsedPokeball; + const lastUsed = globalScene.currentBattle.lastUsedPokeball; if (lastUsed !== null && !!pokemon.isPlayer) { - pokemon.scene.pokeballCounts[lastUsed]++; - pokemon.scene.currentBattle.lastUsedPokeball = null; - pokemon.scene.queueMessage(i18next.t("abilityTriggers:fetchBall", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), pokeballName: getPokeballName(lastUsed) })); + globalScene.pokeballCounts[lastUsed]++; + globalScene.currentBattle.lastUsedPokeball = null; + globalScene.queueMessage(i18next.t("abilityTriggers:fetchBall", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), pokeballName: getPokeballName(lastUsed) })); return true; } return false; @@ -3785,11 +4104,11 @@ export class PostBiomeChangeWeatherChangeAbAttr extends PostBiomeChangeAbAttr { } apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean { - if (!pokemon.scene.arena.weather?.isImmutable()) { + if (!globalScene.arena.weather?.isImmutable()) { if (simulated) { - return pokemon.scene.arena.weather?.weatherType !== this.weatherType; + return globalScene.arena.weather?.weatherType !== this.weatherType; } else { - return pokemon.scene.arena.trySetWeather(this.weatherType, true); + return globalScene.arena.trySetWeather(this.weatherType, true); } } @@ -3808,9 +4127,9 @@ export class PostBiomeChangeTerrainChangeAbAttr extends PostBiomeChangeAbAttr { apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean { if (simulated) { - return pokemon.scene.arena.terrain?.terrainType !== this.terrainType; + return globalScene.arena.terrain?.terrainType !== this.terrainType; } else { - return pokemon.scene.arena.trySetTerrain(this.terrainType, true); + return globalScene.arena.trySetTerrain(this.terrainType, true); } } } @@ -3820,7 +4139,14 @@ export class PostBiomeChangeTerrainChangeAbAttr extends PostBiomeChangeAbAttr { * @extends AbAttr */ export class PostMoveUsedAbAttr extends AbAttr { - applyPostMoveUsed(pokemon: Pokemon, move: PokemonMove, source: Pokemon, targets: BattlerIndex[], simulated: boolean, args: any[]): boolean | Promise { + applyPostMoveUsed( + pokemon: Pokemon, + move: PokemonMove, + source: Pokemon, + targets: BattlerIndex[], + simulated: boolean, + args: any[], + ): boolean { return false; } } @@ -3841,7 +4167,14 @@ export class PostDancingMoveAbAttr extends PostMoveUsedAbAttr { * * @return true if the Dancer ability was resolved */ - applyPostMoveUsed(dancer: Pokemon, move: PokemonMove, source: Pokemon, targets: BattlerIndex[], simulated: boolean, args: any[]): boolean | Promise { + override applyPostMoveUsed( + dancer: Pokemon, + move: PokemonMove, + source: Pokemon, + targets: BattlerIndex[], + simulated: boolean, + args: any[], + ): boolean { // List of tags that prevent the Dancer from replicating the move const forbiddenTags = [ BattlerTagType.FLYING, BattlerTagType.UNDERWATER, BattlerTagType.UNDERGROUND, BattlerTagType.HIDDEN ]; @@ -3852,10 +4185,10 @@ export class PostDancingMoveAbAttr extends PostMoveUsedAbAttr { // If the move is an AttackMove or a StatusMove the Dancer must replicate the move on the source of the Dance if (move.getMove() instanceof AttackMove || move.getMove() instanceof StatusMove) { const target = this.getTarget(dancer, source, targets); - dancer.scene.unshiftPhase(new MovePhase(dancer.scene, dancer, target, move, true, true)); + globalScene.unshiftPhase(new MovePhase(dancer, target, move, true, true)); } else if (move.getMove() instanceof SelfStatusMove) { // If the move is a SelfStatusMove (ie. Swords Dance) the Dancer should replicate it on itself - dancer.scene.unshiftPhase(new MovePhase(dancer.scene, dancer, [ dancer.getBattlerIndex() ], move, true, true)); + globalScene.unshiftPhase(new MovePhase(dancer, [ dancer.getBattlerIndex() ], move, true, true)); } } return true; @@ -3883,7 +4216,7 @@ export class PostDancingMoveAbAttr extends PostMoveUsedAbAttr { * @extends AbAttr */ export class PostItemLostAbAttr extends AbAttr { - applyPostItemLost(pokemon: Pokemon, simulated: boolean, args: any[]): boolean | Promise { + applyPostItemLost(pokemon: Pokemon, simulated: boolean, args: any[]): boolean { return false; } } @@ -3904,7 +4237,7 @@ export class PostItemLostApplyBattlerTagAbAttr extends PostItemLostAbAttr { * @param args N/A * @returns true if BattlerTag was applied */ - applyPostItemLost(pokemon: Pokemon, simulated: boolean, args: any[]): boolean | Promise { + override applyPostItemLost(pokemon: Pokemon, simulated: boolean, args: any[]): boolean { if (!pokemon.getTag(this.tagType) && !simulated) { pokemon.addTag(this.tagType); return true; @@ -3914,25 +4247,31 @@ export class PostItemLostApplyBattlerTagAbAttr extends PostItemLostAbAttr { } export class StatStageChangeMultiplierAbAttr extends AbAttr { - private multiplier: integer; + private multiplier: number; - constructor(multiplier: integer) { + constructor(multiplier: number) { super(true); this.multiplier = multiplier; } override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean { - (args[0] as Utils.IntegerHolder).value *= this.multiplier; + (args[0] as Utils.NumberHolder).value *= this.multiplier; return true; } } export class StatStageChangeCopyAbAttr extends AbAttr { - apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean | Promise { + override apply( + pokemon: Pokemon, + passive: boolean, + simulated: boolean, + cancelled: Utils.BooleanHolder, + args: any[], + ): boolean { if (!simulated) { - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, (args[0] as BattleStat[]), (args[1] as number), true, false, false)); + globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, (args[0] as BattleStat[]), (args[1] as number), true, false, false)); } return true; } @@ -4009,9 +4348,8 @@ export class HealFromBerryUseAbAttr extends AbAttr { apply(pokemon: Pokemon, passive: boolean, simulated: boolean, ...args: [Utils.BooleanHolder, any[]]): boolean { const { name: abilityName } = passive ? pokemon.getPassiveAbility() : pokemon.getAbility(); if (!simulated) { - pokemon.scene.unshiftPhase( + globalScene.unshiftPhase( new PokemonHealPhase( - pokemon.scene, pokemon.getBattlerIndex(), Utils.toDmgValue(pokemon.getMaxHp() * this.healPercent), i18next.t("abilityTriggers:healFromBerryUse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName }), @@ -4025,7 +4363,7 @@ export class HealFromBerryUseAbAttr extends AbAttr { export class RunSuccessAbAttr extends AbAttr { apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean { - (args[0] as Utils.IntegerHolder).value = 256; + (args[0] as Utils.NumberHolder).value = 256; return true; } @@ -4047,7 +4385,14 @@ export class CheckTrappedAbAttr extends AbAttr { this.arenaTrapCondition = condition; } - applyCheckTrapped(pokemon: Pokemon, passive: boolean, simulated: boolean, trapped: Utils.BooleanHolder, otherPokemon: Pokemon, args: any[]): boolean | Promise { + applyCheckTrapped( + pokemon: Pokemon, + passive: boolean, + simulated: boolean, + trapped: Utils.BooleanHolder, + otherPokemon: Pokemon, + args: any[], + ): boolean { return false; } } @@ -4095,7 +4440,7 @@ export class ArenaTrapAbAttr extends CheckTrappedAbAttr { export class MaxMultiHitAbAttr extends AbAttr { apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean { - (args[0] as Utils.IntegerHolder).value = 0; + (args[0] as Utils.NumberHolder).value = 0; return true; } @@ -4117,13 +4462,13 @@ export class PostBattleLootAbAttr extends PostBattleAbAttr { * @returns `true` if successful */ applyPostBattle(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - const postBattleLoot = pokemon.scene.currentBattle.postBattleLoot; + const postBattleLoot = globalScene.currentBattle.postBattleLoot; if (!simulated && postBattleLoot.length && args[0]) { const randItem = Utils.randSeedItem(postBattleLoot); //@ts-ignore - TODO see below - if (pokemon.scene.tryTransferHeldItemModifier(randItem, pokemon, true, 1, true, undefined, false)) { // TODO: fix. This is a promise!? + if (globalScene.tryTransferHeldItemModifier(randItem, pokemon, true, 1, true, undefined, false)) { postBattleLoot.splice(postBattleLoot.indexOf(randItem), 1); - pokemon.scene.queueMessage(i18next.t("abilityTriggers:postBattleLoot", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), itemName: randItem.type.name })); + globalScene.queueMessage(i18next.t("abilityTriggers:postBattleLoot", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), itemName: randItem.type.name })); return true; } } @@ -4156,77 +4501,24 @@ export class PostFaintUnsuppressedWeatherFormChangeAbAttr extends PostFaintAbAtt * @returns whether the form change was triggered */ applyPostFaint(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean { - const pokemonToTransform = getPokemonWithWeatherBasedForms(pokemon.scene); + const pokemonToTransform = getPokemonWithWeatherBasedForms(); if (pokemonToTransform.length < 1) { return false; } if (!simulated) { - pokemon.scene.arena.triggerWeatherBasedFormChanges(); + globalScene.arena.triggerWeatherBasedFormChanges(); } return true; } } -/** - * Clears Desolate Land/Primordial Sea/Delta Stream upon the Pokemon fainting - */ -export class PostFaintClearWeatherAbAttr extends PostFaintAbAttr { - - /** - * @param pokemon The {@linkcode Pokemon} with the ability - * @param passive N/A - * @param attacker N/A - * @param move N/A - * @param hitResult N/A - * @param args N/A - * @returns {boolean} Returns true if the weather clears, otherwise false. - */ - applyPostFaint(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker?: Pokemon, move?: Move, hitResult?: HitResult, ...args: any[]): boolean { - const weatherType = pokemon.scene.arena.weather?.weatherType; - let turnOffWeather = false; - - // Clear weather only if user's ability matches the weather and no other pokemon has the ability. - switch (weatherType) { - case (WeatherType.HARSH_SUN): - if (pokemon.hasAbility(Abilities.DESOLATE_LAND) - && pokemon.scene.getField(true).filter(p => p.hasAbility(Abilities.DESOLATE_LAND)).length === 0) { - turnOffWeather = true; - } - break; - case (WeatherType.HEAVY_RAIN): - if (pokemon.hasAbility(Abilities.PRIMORDIAL_SEA) - && pokemon.scene.getField(true).filter(p => p.hasAbility(Abilities.PRIMORDIAL_SEA)).length === 0) { - turnOffWeather = true; - } - break; - case (WeatherType.STRONG_WINDS): - if (pokemon.hasAbility(Abilities.DELTA_STREAM) - && pokemon.scene.getField(true).filter(p => p.hasAbility(Abilities.DELTA_STREAM)).length === 0) { - turnOffWeather = true; - } - break; - } - - if (simulated) { - return turnOffWeather; - } - - if (turnOffWeather) { - pokemon.scene.arena.trySetWeather(WeatherType.NONE, false); - return true; - } - - return false; - } -} - export class PostFaintContactDamageAbAttr extends PostFaintAbAttr { - private damageRatio: integer; + private damageRatio: number; - constructor(damageRatio: integer) { + constructor(damageRatio: number) { super(); this.damageRatio = damageRatio; @@ -4235,7 +4527,7 @@ export class PostFaintContactDamageAbAttr extends PostFaintAbAttr { applyPostFaint(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker?: Pokemon, move?: Move, hitResult?: HitResult, ...args: any[]): boolean { if (move !== undefined && attacker !== undefined && move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon)) { //If the mon didn't die to indirect damage const cancelled = new Utils.BooleanHolder(false); - pokemon.scene.getField(true).map(p => applyAbAttrs(FieldPreventExplosiveMovesAbAttr, p, cancelled, simulated)); + globalScene.getField(true).map(p => applyAbAttrs(FieldPreventExplosiveMovesAbAttr, p, cancelled, simulated)); if (cancelled.value || attacker.hasAbilityWithAttr(BlockNonDirectDamageAbAttr)) { return false; } @@ -4279,7 +4571,7 @@ export class PostFaintHPDamageAbAttr extends PostFaintAbAttr { export class RedirectMoveAbAttr extends AbAttr { apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean { if (this.canRedirect(args[0] as Moves)) { - const target = args[1] as Utils.IntegerHolder; + const target = args[1] as Utils.NumberHolder; const newTarget = pokemon.getBattlerIndex(); if (target.value !== newTarget) { target.value = newTarget; @@ -4366,7 +4658,7 @@ export class FlinchStatStageChangeAbAttr extends FlinchEffectAbAttr { apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean { if (!simulated) { - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, this.stats, this.stages)); + globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, this.stats, this.stages)); } return true; } @@ -4403,9 +4695,9 @@ export class ReduceBerryUseThresholdAbAttr extends AbAttr { * Used for Heavy Metal (doubling weight) and Light Metal (halving weight) */ export class WeightMultiplierAbAttr extends AbAttr { - private multiplier: integer; + private multiplier: number; - constructor(multiplier: integer) { + constructor(multiplier: number) { super(); this.multiplier = multiplier; @@ -4448,21 +4740,6 @@ export class MoveAbilityBypassAbAttr extends AbAttr { } } -export class SuppressFieldAbilitiesAbAttr extends AbAttr { - constructor() { - super(false); - } - - apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean { - const ability = (args[0] as Ability); - if (!ability.hasAttr(UnsuppressableAbilityAbAttr) && !ability.hasAttr(SuppressFieldAbilitiesAbAttr)) { - cancelled.value = true; - return true; - } - return false; - } -} - export class AlwaysHitAbAttr extends AbAttr { } /** Attribute for abilities that allow moves that make contact to ignore protection (i.e. Unseen Fist) */ @@ -4492,6 +4769,13 @@ export class InfiltratorAbAttr extends AbAttr { } } +/** + * Attribute implementing the effects of {@link https://bulbapedia.bulbagarden.net/wiki/Magic_Bounce_(ability) | Magic Bounce}. + * Allows the source to bounce back {@linkcode MoveFlags.REFLECTABLE | Reflectable} + * moves as if the user had used {@linkcode Moves.MAGIC_COAT | Magic Coat}. + */ +export class ReflectStatusMoveAbAttr extends AbAttr { } + export class UncopiableAbilityAbAttr extends AbAttr { constructor() { super(false); @@ -4584,7 +4868,7 @@ export class MoneyAbAttr extends PostBattleAbAttr { */ applyPostBattle(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { if (!simulated && args[0]) { - pokemon.scene.currentBattle.moneyScattered += pokemon.scene.getWaveMoneyAmount(0.2); + globalScene.currentBattle.moneyScattered += globalScene.getWaveMoneyAmount(0.2); return true; } return false; @@ -4627,7 +4911,7 @@ export class PostSummonStatStageChangeOnArenaAbAttr extends PostSummonStatStageC applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { const side = pokemon.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; - if (pokemon.scene.arena.getTagOnSide(this.tagType, side)) { + if (globalScene.arena.getTagOnSide(this.tagType, side)) { return super.applyPostSummon(pokemon, passive, simulated, args); } return false; @@ -4699,12 +4983,12 @@ export class FormBlockDamageAbAttr extends ReceivedMoveDamageMultiplierAbAttr { * @extends AbAttr */ export class BypassSpeedChanceAbAttr extends AbAttr { - public chance: integer; + public chance: number; /** - * @param {integer} chance probability of ability being active. + * @param {number} chance probability of ability being active. */ - constructor(chance: integer) { + constructor(chance: number) { super(true); this.chance = chance; } @@ -4725,7 +5009,7 @@ export class BypassSpeedChanceAbAttr extends AbAttr { if (!bypassSpeed.value && pokemon.randSeedInt(100) < this.chance) { const turnCommand = - pokemon.scene.currentBattle.turnCommands[pokemon.getBattlerIndex()]; + globalScene.currentBattle.turnCommands[pokemon.getBattlerIndex()]; const isCommandFight = turnCommand?.command === Command.FIGHT; const move = turnCommand?.move?.move ? allMoves[turnCommand.move.move] : null; const isDamageMove = move?.category === MoveCategory.PHYSICAL || move?.category === MoveCategory.SPECIAL; @@ -4767,10 +5051,10 @@ export class PreventBypassSpeedChanceAbAttr extends AbAttr { const bypassSpeed = args[0] as Utils.BooleanHolder; const canCheckHeldItems = args[1] as Utils.BooleanHolder; - const turnCommand = pokemon.scene.currentBattle.turnCommands[pokemon.getBattlerIndex()]; + const turnCommand = globalScene.currentBattle.turnCommands[pokemon.getBattlerIndex()]; const isCommandFight = turnCommand?.command === Command.FIGHT; const move = turnCommand?.move?.move ? allMoves[turnCommand.move.move] : null; - if (this.condition(pokemon, move!) && isCommandFight) { + if (isCommandFight && this.condition(pokemon, move!)) { bypassSpeed.value = false; canCheckHeldItems.value = false; return false; @@ -4789,10 +5073,10 @@ export class TerrainEventTypeChangeAbAttr extends PostSummonAbAttr { } override apply(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _cancelled: Utils.BooleanHolder, _args: any[]): boolean { - if (pokemon.isTerastallized()) { + if (pokemon.isTerastallized) { return false; } - const currentTerrain = pokemon.scene.arena.getTerrainType(); + const currentTerrain = globalScene.arena.getTerrainType(); const typeChange: Type[] = this.determineTypeChange(pokemon, currentTerrain); if (typeChange.length !== 0) { if (pokemon.summonData.addedType && typeChange.includes(pokemon.summonData.addedType)) { @@ -4838,15 +5122,15 @@ export class TerrainEventTypeChangeAbAttr extends PostSummonAbAttr { * Checks if the Pokemon should change types if summoned into an active terrain * @returns `true` if there is an active terrain requiring a type change | `false` if not */ - override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean | Promise { - if (pokemon.scene.arena.getTerrainType() !== TerrainType.NONE) { + override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + if (globalScene.arena.getTerrainType() !== TerrainType.NONE) { return this.apply(pokemon, passive, simulated, new Utils.BooleanHolder(false), []); } return false; } override getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]) { - const currentTerrain = pokemon.scene.arena.getTerrainType(); + const currentTerrain = globalScene.arena.getTerrainType(); const pokemonNameWithAffix = getPokemonNameWithAffix(pokemon); if (currentTerrain === TerrainType.NONE) { return i18next.t("abilityTriggers:pokemonTypeChangeRevert", { pokemonNameWithAffix }); @@ -4857,58 +5141,55 @@ export class TerrainEventTypeChangeAbAttr extends PostSummonAbAttr { } } -async function applyAbAttrsInternal( +function applySingleAbAttrs( + pokemon: Pokemon, + passive: boolean, attrType: Constructor, - pokemon: Pokemon | null, applyFunc: AbAttrApplyFunc, args: any[], - showAbilityInstant: boolean = false, + gainedMidTurn: boolean = false, simulated: boolean = false, - messages: string[] = [], + showAbilityInstant: boolean = false, + messages: string[] = [] ) { - for (const passive of [ false, true ]) { - if (!pokemon?.canApplyAbility(passive) || (passive && pokemon.getPassiveAbility().id === pokemon.getAbility().id)) { + if (!pokemon?.canApplyAbility(passive) || (passive && (pokemon.getPassiveAbility().id === pokemon.getAbility().id))) { + return; + } + + const ability = passive ? pokemon.getPassiveAbility() : pokemon.getAbility(); + if (gainedMidTurn && ability.getAttrs(attrType).some(attr => attr instanceof PostSummonAbAttr && !attr.shouldActivateOnGain())) { + return; + } + + for (const attr of ability.getAttrs(attrType)) { + const condition = attr.getCondition(); + if (condition && !condition(pokemon)) { continue; } - const ability = passive ? pokemon.getPassiveAbility() : pokemon.getAbility(); - for (const attr of ability.getAttrs(attrType)) { - const condition = attr.getCondition(); - if (condition && !condition(pokemon)) { - continue; + globalScene.setPhaseQueueSplice(); + if (applyFunc(attr, passive)) { + if (pokemon.summonData && !pokemon.summonData.abilitiesApplied.includes(ability.id)) { + pokemon.summonData.abilitiesApplied.push(ability.id); } - - pokemon.scene.setPhaseQueueSplice(); - - let result = applyFunc(attr, passive); - // TODO Remove this when promises get reworked - if (result instanceof Promise) { - result = await result; + if (pokemon.battleData && !simulated && !pokemon.battleData.abilitiesApplied.includes(ability.id)) { + pokemon.battleData.abilitiesApplied.push(ability.id); } - if (result) { - if (pokemon.summonData && !pokemon.summonData.abilitiesApplied.includes(ability.id)) { - pokemon.summonData.abilitiesApplied.push(ability.id); + if (attr.showAbility && !simulated) { + if (showAbilityInstant) { + globalScene.abilityBar.showAbility(pokemon, passive); + } else { + queueShowAbility(pokemon, passive); } - if (pokemon.battleData && !simulated && !pokemon.battleData.abilitiesApplied.includes(ability.id)) { - pokemon.battleData.abilitiesApplied.push(ability.id); - } - if (attr.showAbility && !simulated) { - if (showAbilityInstant) { - pokemon.scene.abilityBar.showAbility(pokemon, passive); - } else { - queueShowAbility(pokemon, passive); - } - } - const message = attr.getTriggerMessage(pokemon, ability.name, args); - if (message) { - if (!simulated) { - pokemon.scene.queueMessage(message); - } - } - messages.push(message!); } + const message = attr.getTriggerMessage(pokemon, ability.name, args); + if (message) { + if (!simulated) { + globalScene.queueMessage(message); + } + } + messages.push(message!); } - pokemon.scene.clearPhaseQueueSplice(); } } @@ -4929,28 +5210,27 @@ class ForceSwitchOutHelper { * - If the Pokémon is still alive (hp > 0), and if so, it leaves the field and a new SwitchPhase is initiated. */ if (switchOutTarget instanceof PlayerPokemon) { - if (switchOutTarget.scene.getPlayerParty().filter((p) => p.isAllowedInBattle() && !p.isOnField()).length < 1) { + if (globalScene.getPlayerParty().filter((p) => p.isAllowedInBattle() && !p.isOnField()).length < 1) { return false; } if (switchOutTarget.hp > 0) { switchOutTarget.leaveField(this.switchType === SwitchType.SWITCH); - pokemon.scene.prependToPhase(new SwitchPhase(pokemon.scene, this.switchType, switchOutTarget.getFieldIndex(), true, true), MoveEndPhase); + globalScene.prependToPhase(new SwitchPhase(this.switchType, switchOutTarget.getFieldIndex(), true, true), MoveEndPhase); return true; } /** * For non-wild battles, it checks if the opposing party has any available Pokémon to switch in. * If yes, the Pokémon leaves the field and a new SwitchSummonPhase is initiated. */ - } else if (pokemon.scene.currentBattle.battleType !== BattleType.WILD) { - if (switchOutTarget.scene.getEnemyParty().filter((p) => p.isAllowedInBattle() && !p.isOnField()).length < 1) { + } else if (globalScene.currentBattle.battleType !== BattleType.WILD) { + if (globalScene.getEnemyParty().filter((p) => p.isAllowedInBattle() && !p.isOnField()).length < 1) { return false; } if (switchOutTarget.hp > 0) { switchOutTarget.leaveField(this.switchType === SwitchType.SWITCH); - pokemon.scene.prependToPhase(new SwitchSummonPhase(pokemon.scene, this.switchType, switchOutTarget.getFieldIndex(), - (pokemon.scene.currentBattle.trainer ? pokemon.scene.currentBattle.trainer.getNextSummonIndex((switchOutTarget as EnemyPokemon).trainerSlot) : 0), - false, false), MoveEndPhase); + const summonIndex = (globalScene.currentBattle.trainer ? globalScene.currentBattle.trainer.getNextSummonIndex((switchOutTarget as EnemyPokemon).trainerSlot) : 0); + globalScene.prependToPhase(new SwitchSummonPhase(this.switchType, switchOutTarget.getFieldIndex(), summonIndex, false, false), MoveEndPhase); return true; } /** @@ -4958,26 +5238,26 @@ class ForceSwitchOutHelper { * It will not flee if it is a Mystery Encounter with fleeing disabled (checked in `getSwitchOutCondition()`) or if it is a wave 10x wild boss */ } else { - if (!pokemon.scene.currentBattle.waveIndex || pokemon.scene.currentBattle.waveIndex % 10 === 0) { + if (!globalScene.currentBattle.waveIndex || globalScene.currentBattle.waveIndex % 10 === 0) { return false; } if (switchOutTarget.hp > 0) { switchOutTarget.leaveField(false); - pokemon.scene.queueMessage(i18next.t("moveTriggers:fled", { pokemonName: getPokemonNameWithAffix(switchOutTarget) }), null, true, 500); + globalScene.queueMessage(i18next.t("moveTriggers:fled", { pokemonName: getPokemonNameWithAffix(switchOutTarget) }), null, true, 500); - if (switchOutTarget.scene.currentBattle.double) { + if (globalScene.currentBattle.double) { const allyPokemon = switchOutTarget.getAlly(); - switchOutTarget.scene.redirectPokemonMoves(switchOutTarget, allyPokemon); + globalScene.redirectPokemonMoves(switchOutTarget, allyPokemon); } } if (!switchOutTarget.getAlly()?.isActive(true)) { - pokemon.scene.clearEnemyHeldItemModifiers(); + globalScene.clearEnemyHeldItemModifiers(); if (switchOutTarget.hp) { - pokemon.scene.pushPhase(new BattleEndPhase(pokemon.scene, false)); - pokemon.scene.pushPhase(new NewBattlePhase(pokemon.scene)); + globalScene.pushPhase(new BattleEndPhase(false)); + globalScene.pushPhase(new NewBattlePhase()); } } } @@ -5001,20 +5281,20 @@ class ForceSwitchOutHelper { return !blockedByAbility.value; } - if (!player && pokemon.scene.currentBattle.battleType === BattleType.WILD) { - if (!pokemon.scene.currentBattle.waveIndex && pokemon.scene.currentBattle.waveIndex % 10 === 0) { + if (!player && globalScene.currentBattle.battleType === BattleType.WILD) { + if (!globalScene.currentBattle.waveIndex && globalScene.currentBattle.waveIndex % 10 === 0) { return false; } } - if (!player && pokemon.scene.currentBattle.isBattleMysteryEncounter() && !pokemon.scene.currentBattle.mysteryEncounter?.fleeAllowed) { + if (!player && globalScene.currentBattle.isBattleMysteryEncounter() && !globalScene.currentBattle.mysteryEncounter?.fleeAllowed) { return false; } - const party = player ? pokemon.scene.getPlayerParty() : pokemon.scene.getEnemyParty(); - return (!player && pokemon.scene.currentBattle.battleType === BattleType.WILD) + const party = player ? globalScene.getPlayerParty() : globalScene.getEnemyParty(); + return (!player && globalScene.currentBattle.battleType === BattleType.WILD) || party.filter(p => p.isAllowedInBattle() - && (player || (p as EnemyPokemon).trainerSlot === (switchOutTarget as EnemyPokemon).trainerSlot)).length > pokemon.scene.currentBattle.getBattlerCount(); + && (player || (p as EnemyPokemon).trainerSlot === (switchOutTarget as EnemyPokemon).trainerSlot)).length > globalScene.currentBattle.getBattlerCount(); } /** @@ -5053,7 +5333,14 @@ function calculateShellBellRecovery(pokemon: Pokemon): number { * @extends AbAttr */ export class PostDamageAbAttr extends AbAttr { - public applyPostDamage(pokemon: Pokemon, damage: number, passive: boolean, simulated: boolean, args: any[], source?: Pokemon): boolean | Promise { + public applyPostDamage( + pokemon: Pokemon, + damage: number, + passive: boolean, + simulated: boolean, + args: any[], + source?: Pokemon, + ): boolean { return false; } } @@ -5090,7 +5377,14 @@ export class PostDamageForceSwitchAbAttr extends PostDamageAbAttr { * @param source The Pokemon that dealt damage * @returns `true` if the switch-out logic was successfully applied */ - public override applyPostDamage(pokemon: Pokemon, damage: number, passive: boolean, simulated: boolean, args: any[], source?: Pokemon): boolean | Promise { + public override applyPostDamage( + pokemon: Pokemon, + damage: number, + passive: boolean, + simulated: boolean, + args: any[], + source?: Pokemon, + ): boolean { const moveHistory = pokemon.getMoveHistory(); // Will not activate when the Pokémon's HP is lowered by cutting its own HP const fordbiddenAttackingMoves = [ Moves.BELLY_DRUM, Moves.SUBSTITUTE, Moves.CURSE, Moves.PAIN_SPLIT ]; @@ -5144,44 +5438,162 @@ export class PostDamageForceSwitchAbAttr extends PostDamageAbAttr { return this.helper.getFailedText(target); } } - - -export function applyAbAttrs(attrType: Constructor, pokemon: Pokemon, cancelled: Utils.BooleanHolder | null, simulated: boolean = false, ...args: any[]): Promise { - return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.apply(pokemon, passive, simulated, cancelled, args), args, false, simulated); +function applyAbAttrsInternal( + attrType: Constructor, + pokemon: Pokemon | null, + applyFunc: AbAttrApplyFunc, + args: any[], + showAbilityInstant: boolean = false, + simulated: boolean = false, + messages: string[] = [], + gainedMidTurn: boolean = false +) { + for (const passive of [ false, true ]) { + if (pokemon) { + applySingleAbAttrs(pokemon, passive, attrType, applyFunc, args, gainedMidTurn, simulated, showAbilityInstant, messages); + globalScene.clearPhaseQueueSplice(); + } + } } -export function applyPostBattleInitAbAttrs(attrType: Constructor, - pokemon: Pokemon, simulated: boolean = false, ...args: any[]): Promise { - return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPostBattleInit(pokemon, passive, simulated, args), args, false, simulated); +export function applyAbAttrs( + attrType: Constructor, + pokemon: Pokemon, + cancelled: Utils.BooleanHolder | null, + simulated: boolean = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => attr.apply(pokemon, passive, simulated, cancelled, args), + args, + false, + simulated, + ); } -export function applyPreDefendAbAttrs(attrType: Constructor, - pokemon: Pokemon, attacker: Pokemon, move: Move | null, cancelled: Utils.BooleanHolder | null, simulated: boolean = false, ...args: any[]): Promise { - return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args), args, false, simulated); +export function applyPostBattleInitAbAttrs( + attrType: Constructor, + pokemon: Pokemon, + simulated: boolean = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => attr.applyPostBattleInit(pokemon, passive, simulated, args), + args, + false, + simulated, + ); } -export function applyPostDefendAbAttrs(attrType: Constructor, - pokemon: Pokemon, attacker: Pokemon, move: Move, hitResult: HitResult | null, simulated: boolean = false, ...args: any[]): Promise { - return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPostDefend(pokemon, passive, simulated, attacker, move, hitResult, args), args, false, simulated); +export function applyPreDefendAbAttrs( + attrType: Constructor, + pokemon: Pokemon, + attacker: Pokemon, + move: Move | null, + cancelled: Utils.BooleanHolder | null, + simulated: boolean = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => attr.applyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args), + args, + false, + simulated, + ); } -export function applyPostMoveUsedAbAttrs(attrType: Constructor, - pokemon: Pokemon, move: PokemonMove, source: Pokemon, targets: BattlerIndex[], simulated: boolean = false, ...args: any[]): Promise { - return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPostMoveUsed(pokemon, move, source, targets, simulated, args), args, false, simulated); +export function applyPostDefendAbAttrs( + attrType: Constructor, + pokemon: Pokemon, + attacker: Pokemon, + move: Move, + hitResult: HitResult | null, + simulated: boolean = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => attr.applyPostDefend(pokemon, passive, simulated, attacker, move, hitResult, args), + args, + false, + simulated, + ); } -export function applyStatMultiplierAbAttrs(attrType: Constructor, - pokemon: Pokemon, stat: BattleStat, statValue: Utils.NumberHolder, simulated: boolean = false, ...args: any[]): Promise { - return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyStatStage(pokemon, passive, simulated, stat, statValue, args), args); -} -export function applyPostSetStatusAbAttrs(attrType: Constructor, - pokemon: Pokemon, effect: StatusEffect, sourcePokemon?: Pokemon | null, simulated: boolean = false, ...args: any[]): Promise { - return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPostSetStatus(pokemon, sourcePokemon, passive, effect, simulated, args), args, false, simulated); +export function applyPostMoveUsedAbAttrs( + attrType: Constructor, + pokemon: Pokemon, + move: PokemonMove, + source: Pokemon, + targets: BattlerIndex[], + simulated: boolean = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => attr.applyPostMoveUsed(pokemon, move, source, targets, simulated, args), + args, + false, + simulated, + ); } -export function applyPostDamageAbAttrs(attrType: Constructor, - pokemon: Pokemon, damage: number, passive: boolean, simulated: boolean = false, args: any[], source?: Pokemon): Promise { - return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPostDamage(pokemon, damage, passive, simulated, args, source), args); +export function applyStatMultiplierAbAttrs( + attrType: Constructor, + pokemon: Pokemon, + stat: BattleStat, + statValue: Utils.NumberHolder, + simulated: boolean = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => attr.applyStatStage(pokemon, passive, simulated, stat, statValue, args), + args, + ); +} +export function applyPostSetStatusAbAttrs( + attrType: Constructor, + pokemon: Pokemon, + effect: StatusEffect, + sourcePokemon?: Pokemon | null, + simulated: boolean = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => attr.applyPostSetStatus(pokemon, sourcePokemon, passive, effect, simulated, args), + args, + false, + simulated, + ); +} + +export function applyPostDamageAbAttrs( + attrType: Constructor, + pokemon: Pokemon, + damage: number, + passive: boolean, + simulated: boolean = false, + args: any[], + source?: Pokemon, +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => attr.applyPostDamage(pokemon, damage, passive, simulated, args, source), + args, + ); } /** @@ -5194,109 +5606,389 @@ export function applyPostDamageAbAttrs(attrType: Constructor, * @param hasApplied {@linkcode Utils.BooleanHolder} whether or not a FieldMultiplyBattleStatAbAttr has already affected this stat * @param args unused */ -export function applyFieldStatMultiplierAbAttrs(attrType: Constructor, - pokemon: Pokemon, stat: Stat, statValue: Utils.NumberHolder, checkedPokemon: Pokemon, hasApplied: Utils.BooleanHolder, simulated: boolean = false, ...args: any[]): Promise { - return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyFieldStat(pokemon, passive, simulated, stat, statValue, checkedPokemon, hasApplied, args), args); +export function applyFieldStatMultiplierAbAttrs( + attrType: Constructor, + pokemon: Pokemon, + stat: Stat, + statValue: Utils.NumberHolder, + checkedPokemon: Pokemon, + hasApplied: Utils.BooleanHolder, + simulated: boolean = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => + attr.applyFieldStat(pokemon, passive, simulated, stat, statValue, checkedPokemon, hasApplied, args), + args, + ); } -export function applyPreAttackAbAttrs(attrType: Constructor, - pokemon: Pokemon, defender: Pokemon | null, move: Move, simulated: boolean = false, ...args: any[]): Promise { - return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPreAttack(pokemon, passive, simulated, defender, move, args), args, false, simulated); +export function applyPreAttackAbAttrs( + attrType: Constructor, + pokemon: Pokemon, + defender: Pokemon | null, + move: Move, + simulated: boolean = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => attr.applyPreAttack(pokemon, passive, simulated, defender, move, args), + args, + false, + simulated, + ); } -export function applyPostAttackAbAttrs(attrType: Constructor, - pokemon: Pokemon, defender: Pokemon, move: Move, hitResult: HitResult | null, simulated: boolean = false, ...args: any[]): Promise { - return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPostAttack(pokemon, passive, simulated, defender, move, hitResult, args), args, false, simulated); +export function applyPostAttackAbAttrs( + attrType: Constructor, + pokemon: Pokemon, + defender: Pokemon, + move: Move, + hitResult: HitResult | null, + simulated: boolean = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => attr.applyPostAttack(pokemon, passive, simulated, defender, move, hitResult, args), + args, + false, + simulated, + ); } -export function applyPostKnockOutAbAttrs(attrType: Constructor, - pokemon: Pokemon, knockedOut: Pokemon, simulated: boolean = false, ...args: any[]): Promise { - return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPostKnockOut(pokemon, passive, simulated, knockedOut, args), args, false, simulated); +export function applyPostKnockOutAbAttrs( + attrType: Constructor, + pokemon: Pokemon, + knockedOut: Pokemon, + simulated: boolean = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => attr.applyPostKnockOut(pokemon, passive, simulated, knockedOut, args), + args, + false, + simulated, + ); } -export function applyPostVictoryAbAttrs(attrType: Constructor, - pokemon: Pokemon, simulated: boolean = false, ...args: any[]): Promise { - return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPostVictory(pokemon, passive, simulated, args), args, false, simulated); +export function applyPostVictoryAbAttrs( + attrType: Constructor, + pokemon: Pokemon, + simulated: boolean = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => attr.applyPostVictory(pokemon, passive, simulated, args), + args, + false, + simulated, + ); } -export function applyPostSummonAbAttrs(attrType: Constructor, - pokemon: Pokemon, simulated: boolean = false, ...args: any[]): Promise { - return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPostSummon(pokemon, passive, simulated, args), args, false, simulated); +export function applyPostSummonAbAttrs( + attrType: Constructor, + pokemon: Pokemon, + simulated: boolean = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => attr.applyPostSummon(pokemon, passive, simulated, args), + args, + false, + simulated, + ); } -export function applyPreSwitchOutAbAttrs(attrType: Constructor, - pokemon: Pokemon, simulated: boolean = false, ...args: any[]): Promise { - return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPreSwitchOut(pokemon, passive, simulated, args), args, true, simulated); +export function applyPreSwitchOutAbAttrs( + attrType: Constructor, + pokemon: Pokemon, + simulated: boolean = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => attr.applyPreSwitchOut(pokemon, passive, simulated, args), + args, + true, + simulated, + ); } -export function applyPreStatStageChangeAbAttrs(attrType: Constructor, - pokemon: Pokemon | null, stat: BattleStat, cancelled: Utils.BooleanHolder, simulated: boolean = false, ...args: any[]): Promise { - return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPreStatStageChange(pokemon, passive, simulated, stat, cancelled, args), args, false, simulated); +export function applyPreLeaveFieldAbAttrs( + attrType: Constructor, + pokemon: Pokemon, + simulated: boolean = false, + ...args: any[] +): void { + return applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => + attr.applyPreLeaveField(pokemon, passive, simulated, args), + args, + true, + simulated + ); } -export function applyPostStatStageChangeAbAttrs(attrType: Constructor, - pokemon: Pokemon, stats: BattleStat[], stages: integer, selfTarget: boolean, simulated: boolean = false, ...args: any[]): Promise { - return applyAbAttrsInternal(attrType, pokemon, (attr, _passive) => attr.applyPostStatStageChange(pokemon, simulated, stats, stages, selfTarget, args), args, false, simulated); +export function applyPreStatStageChangeAbAttrs( + attrType: Constructor, + pokemon: Pokemon | null, + stat: BattleStat, + cancelled: Utils.BooleanHolder, + simulated: boolean = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => attr.applyPreStatStageChange(pokemon, passive, simulated, stat, cancelled, args), + args, + false, + simulated, + ); } -export function applyPreSetStatusAbAttrs(attrType: Constructor, - pokemon: Pokemon, effect: StatusEffect | undefined, cancelled: Utils.BooleanHolder, simulated: boolean = false, ...args: any[]): Promise { - return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPreSetStatus(pokemon, passive, simulated, effect, cancelled, args), args, false, simulated); +export function applyPostStatStageChangeAbAttrs( + attrType: Constructor, + pokemon: Pokemon, + stats: BattleStat[], + stages: integer, + selfTarget: boolean, + simulated: boolean = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, _passive) => attr.applyPostStatStageChange(pokemon, simulated, stats, stages, selfTarget, args), + args, + false, + simulated, + ); } -export function applyPreApplyBattlerTagAbAttrs(attrType: Constructor, - pokemon: Pokemon, tag: BattlerTag, cancelled: Utils.BooleanHolder, simulated: boolean = false, ...args: any[]): Promise { - return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPreApplyBattlerTag(pokemon, passive, simulated, tag, cancelled, args), args, false, simulated); +export function applyPreSetStatusAbAttrs( + attrType: Constructor, + pokemon: Pokemon, + effect: StatusEffect | undefined, + cancelled: Utils.BooleanHolder, + simulated: boolean = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => attr.applyPreSetStatus(pokemon, passive, simulated, effect, cancelled, args), + args, + false, + simulated, + ); } -export function applyPreWeatherEffectAbAttrs(attrType: Constructor, - pokemon: Pokemon, weather: Weather | null, cancelled: Utils.BooleanHolder, simulated: boolean = false, ...args: any[]): Promise { - return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPreWeatherEffect(pokemon, passive, simulated, weather, cancelled, args), args, true, simulated); +export function applyPreApplyBattlerTagAbAttrs( + attrType: Constructor, + pokemon: Pokemon, + tag: BattlerTag, + cancelled: Utils.BooleanHolder, + simulated: boolean = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => attr.applyPreApplyBattlerTag(pokemon, passive, simulated, tag, cancelled, args), + args, + false, + simulated, + ); } -export function applyPostTurnAbAttrs(attrType: Constructor, - pokemon: Pokemon, simulated: boolean = false, ...args: any[]): Promise { - return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPostTurn(pokemon, passive, simulated, args), args, false, simulated); +export function applyPreWeatherEffectAbAttrs( + attrType: Constructor, + pokemon: Pokemon, + weather: Weather | null, + cancelled: Utils.BooleanHolder, + simulated: boolean = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => attr.applyPreWeatherEffect(pokemon, passive, simulated, weather, cancelled, args), + args, + true, + simulated, + ); } -export function applyPostWeatherChangeAbAttrs(attrType: Constructor, - pokemon: Pokemon, weather: WeatherType, simulated: boolean = false, ...args: any[]): Promise { - return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPostWeatherChange(pokemon, passive, simulated, weather, args), args, false, simulated); +export function applyPostTurnAbAttrs( + attrType: Constructor, + pokemon: Pokemon, + simulated: boolean = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => attr.applyPostTurn(pokemon, passive, simulated, args), + args, + false, + simulated, + ); } -export function applyPostWeatherLapseAbAttrs(attrType: Constructor, - pokemon: Pokemon, weather: Weather | null, simulated: boolean = false, ...args: any[]): Promise { - return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPostWeatherLapse(pokemon, passive, simulated, weather, args), args, false, simulated); +export function applyPostWeatherChangeAbAttrs( + attrType: Constructor, + pokemon: Pokemon, + weather: WeatherType, + simulated: boolean = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => attr.applyPostWeatherChange(pokemon, passive, simulated, weather, args), + args, + false, + simulated, + ); } -export function applyPostTerrainChangeAbAttrs(attrType: Constructor, - pokemon: Pokemon, terrain: TerrainType, simulated: boolean = false, ...args: any[]): Promise { - return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPostTerrainChange(pokemon, passive, simulated, terrain, args), args, false, simulated); +export function applyPostWeatherLapseAbAttrs( + attrType: Constructor, + pokemon: Pokemon, + weather: Weather | null, + simulated: boolean = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => attr.applyPostWeatherLapse(pokemon, passive, simulated, weather, args), + args, + false, + simulated, + ); } -export function applyCheckTrappedAbAttrs(attrType: Constructor, - pokemon: Pokemon, trapped: Utils.BooleanHolder, otherPokemon: Pokemon, messages: string[], simulated: boolean = false, ...args: any[]): Promise { - return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyCheckTrapped(pokemon, passive, simulated, trapped, otherPokemon, args), args, false, simulated, messages); +export function applyPostTerrainChangeAbAttrs( + attrType: Constructor, + pokemon: Pokemon, + terrain: TerrainType, + simulated: boolean = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => attr.applyPostTerrainChange(pokemon, passive, simulated, terrain, args), + args, + false, + simulated, + ); } -export function applyPostBattleAbAttrs(attrType: Constructor, - pokemon: Pokemon, simulated: boolean = false, ...args: any[]): Promise { - return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPostBattle(pokemon, passive, simulated, args), args, false, simulated); +export function applyCheckTrappedAbAttrs( + attrType: Constructor, + pokemon: Pokemon, + trapped: Utils.BooleanHolder, + otherPokemon: Pokemon, + messages: string[], + simulated: boolean = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => attr.applyCheckTrapped(pokemon, passive, simulated, trapped, otherPokemon, args), + args, + false, + simulated, + messages, + ); } -export function applyPostFaintAbAttrs(attrType: Constructor, - pokemon: Pokemon, attacker?: Pokemon, move?: Move, hitResult?: HitResult, simulated: boolean = false, ...args: any[]): Promise { - return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPostFaint(pokemon, passive, simulated, attacker, move, hitResult, args), args, false, simulated); +export function applyPostBattleAbAttrs( + attrType: Constructor, + pokemon: Pokemon, + simulated: boolean = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => attr.applyPostBattle(pokemon, passive, simulated, args), + args, + false, + simulated, + ); } -export function applyPostItemLostAbAttrs(attrType: Constructor, - pokemon: Pokemon, simulated: boolean = false, ...args: any[]): Promise { - return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPostItemLost(pokemon, simulated, args), args); +export function applyPostFaintAbAttrs( + attrType: Constructor, + pokemon: Pokemon, + attacker?: Pokemon, + move?: Move, + hitResult?: HitResult, + simulated: boolean = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => attr.applyPostFaint(pokemon, passive, simulated, attacker, move, hitResult, args), + args, + false, + simulated, + ); } +export function applyPostItemLostAbAttrs( + attrType: Constructor, + pokemon: Pokemon, + simulated: boolean = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => attr.applyPostItemLost(pokemon, simulated, args), + args, + ); +} + +/** + * Applies abilities when they become active mid-turn (ability switch) + * + * Ignores passives as they don't change and shouldn't be reapplied when main abilities change + */ +export function applyOnGainAbAttrs(pokemon: Pokemon, passive: boolean = false, simulated: boolean = false, ...args: any[]): void { + applySingleAbAttrs(pokemon, passive, PostSummonAbAttr, (attr, passive) => attr.applyPostSummon(pokemon, passive, simulated, args), args, true, simulated); +} + +/** + * Clears primal weather/neutralizing gas during the turn if {@linkcode pokemon}'s ability corresponds to one + */ +export function applyOnLoseAbAttrs(pokemon: Pokemon, passive: boolean = false, simulated: boolean = false, ...args: any[]): void { + applySingleAbAttrs(pokemon, passive, PreLeaveFieldAbAttr, (attr, passive) => attr.applyPreLeaveField(pokemon, passive, simulated, [ ...args, true ]), args, true, simulated); +} function queueShowAbility(pokemon: Pokemon, passive: boolean): void { - pokemon.scene.unshiftPhase(new ShowAbilityPhase(pokemon.scene, pokemon.id, passive)); - pokemon.scene.clearPhaseQueueSplice(); + globalScene.unshiftPhase(new ShowAbilityPhase(pokemon.id, passive)); + globalScene.clearPhaseQueueSplice(); } /** @@ -5312,10 +6004,9 @@ function setAbilityRevealed(pokemon: Pokemon): void { /** * Returns the Pokemon with weather-based forms - * @param {BattleScene} scene - The current scene */ -function getPokemonWithWeatherBasedForms(scene: BattleScene) { - return scene.getField(true).filter(p => +function getPokemonWithWeatherBasedForms() { + return globalScene.getField(true).filter(p => (p.hasAbility(Abilities.FORECAST) && p.species.speciesId === Species.CASTFORM) || (p.hasAbility(Abilities.FLOWER_GIFT) && p.species.speciesId === Species.CHERRIM) ); @@ -5412,7 +6103,7 @@ export function initAbilities() { .attr(UnswappableAbilityAbAttr) .ignorable(), new Ability(Abilities.LEVITATE, 3) - .attr(AttackTypeImmunityAbAttr, Type.GROUND, (pokemon: Pokemon) => !pokemon.getTag(GroundedTag) && !pokemon.scene.arena.getTag(ArenaTagType.GRAVITY)) + .attr(AttackTypeImmunityAbAttr, Type.GROUND, (pokemon: Pokemon) => !pokemon.getTag(GroundedTag) && !globalScene.arena.getTag(ArenaTagType.GRAVITY)) .ignorable(), new Ability(Abilities.EFFECT_SPORE, 3) .attr(EffectSporeAbAttr), @@ -5504,9 +6195,9 @@ export function initAbilities() { new Ability(Abilities.CUTE_CHARM, 3) .attr(PostDefendContactApplyTagChanceAbAttr, 30, BattlerTagType.INFATUATED), new Ability(Abilities.PLUS, 3) - .conditionalAttr(p => p.scene.currentBattle.double && [ Abilities.PLUS, Abilities.MINUS ].some(a => p.getAlly().hasAbility(a)), StatMultiplierAbAttr, Stat.SPATK, 1.5), + .conditionalAttr(p => globalScene.currentBattle.double && [ Abilities.PLUS, Abilities.MINUS ].some(a => p.getAlly().hasAbility(a)), StatMultiplierAbAttr, Stat.SPATK, 1.5), new Ability(Abilities.MINUS, 3) - .conditionalAttr(p => p.scene.currentBattle.double && [ Abilities.PLUS, Abilities.MINUS ].some(a => p.getAlly().hasAbility(a)), StatMultiplierAbAttr, Stat.SPATK, 1.5), + .conditionalAttr(p => globalScene.currentBattle.double && [ Abilities.PLUS, Abilities.MINUS ].some(a => p.getAlly().hasAbility(a)), StatMultiplierAbAttr, Stat.SPATK, 1.5), new Ability(Abilities.FORECAST, 3) .attr(UncopiableAbilityAbAttr) .attr(NoFusionAbilityAbAttr) @@ -5782,7 +6473,7 @@ export function initAbilities() { .ignorable(), new Ability(Abilities.ANALYTIC, 5) .attr(MovePowerBoostAbAttr, (user, target, move) => { - const movePhase = user?.scene.findPhase((phase) => phase instanceof MovePhase && phase.pokemon.id !== user.id); + const movePhase = globalScene.findPhase((phase) => phase instanceof MovePhase && phase.pokemon.id !== user?.id); return Utils.isNullOrUndefined(movePhase); }, 1.3), new Ability(Abilities.ILLUSION, 5) @@ -5810,8 +6501,11 @@ export function initAbilities() { }, Stat.SPD, 1) .attr(PostIntimidateStatStageChangeAbAttr, [ Stat.SPD ], 1), new Ability(Abilities.MAGIC_BOUNCE, 5) + .attr(ReflectStatusMoveAbAttr) .ignorable() - .unimplemented(), + // Interactions with stomping tantrum, instruct, encore, and probably other moves that + // rely on move history + .edgeCase(), new Ability(Abilities.SAP_SIPPER, 5) .attr(TypeImmunityStatStageChangeAbAttr, Type.GRASS, Stat.ATK, 1) .ignorable(), @@ -5906,27 +6600,24 @@ export function initAbilities() { .attr(FieldMoveTypePowerBoostAbAttr, Type.FAIRY, 4 / 3), new Ability(Abilities.AURA_BREAK, 6) .ignorable() - .conditionalAttr(pokemon => pokemon.scene.getField(true).some(p => p.hasAbility(Abilities.DARK_AURA)), FieldMoveTypePowerBoostAbAttr, Type.DARK, 9 / 16) - .conditionalAttr(pokemon => pokemon.scene.getField(true).some(p => p.hasAbility(Abilities.FAIRY_AURA)), FieldMoveTypePowerBoostAbAttr, Type.FAIRY, 9 / 16) - .conditionalAttr(pokemon => pokemon.scene.getField(true).some(p => p.hasAbility(Abilities.DARK_AURA) || p.hasAbility(Abilities.FAIRY_AURA)), + .conditionalAttr(pokemon => globalScene.getField(true).some(p => p.hasAbility(Abilities.DARK_AURA)), FieldMoveTypePowerBoostAbAttr, Type.DARK, 9 / 16) + .conditionalAttr(pokemon => globalScene.getField(true).some(p => p.hasAbility(Abilities.FAIRY_AURA)), FieldMoveTypePowerBoostAbAttr, Type.FAIRY, 9 / 16) + .conditionalAttr(pokemon => globalScene.getField(true).some(p => p.hasAbility(Abilities.DARK_AURA) || p.hasAbility(Abilities.FAIRY_AURA)), PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonAuraBreak", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })), new Ability(Abilities.PRIMORDIAL_SEA, 6) .attr(PostSummonWeatherChangeAbAttr, WeatherType.HEAVY_RAIN) .attr(PostBiomeChangeWeatherChangeAbAttr, WeatherType.HEAVY_RAIN) - .attr(PreSwitchOutClearWeatherAbAttr) - .attr(PostFaintClearWeatherAbAttr) + .attr(PreLeaveFieldClearWeatherAbAttr) .bypassFaint(), new Ability(Abilities.DESOLATE_LAND, 6) .attr(PostSummonWeatherChangeAbAttr, WeatherType.HARSH_SUN) .attr(PostBiomeChangeWeatherChangeAbAttr, WeatherType.HARSH_SUN) - .attr(PreSwitchOutClearWeatherAbAttr) - .attr(PostFaintClearWeatherAbAttr) + .attr(PreLeaveFieldClearWeatherAbAttr) .bypassFaint(), new Ability(Abilities.DELTA_STREAM, 6) .attr(PostSummonWeatherChangeAbAttr, WeatherType.STRONG_WINDS) .attr(PostBiomeChangeWeatherChangeAbAttr, WeatherType.STRONG_WINDS) - .attr(PreSwitchOutClearWeatherAbAttr) - .attr(PostFaintClearWeatherAbAttr) + .attr(PreLeaveFieldClearWeatherAbAttr) .bypassFaint(), new Ability(Abilities.STAMINA, 7) .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => move.category !== MoveCategory.STATUS, Stat.DEF, 1), @@ -5944,12 +6635,14 @@ export function initAbilities() { .attr(PostBattleInitFormChangeAbAttr, () => 0) .attr(PostSummonFormChangeAbAttr, p => p.formIndex % 7 + (p.getHpRatio() <= 0.5 ? 7 : 0)) .attr(PostTurnFormChangeAbAttr, p => p.formIndex % 7 + (p.getHpRatio() <= 0.5 ? 7 : 0)) + .conditionalAttr(p => p.formIndex !== 7, StatusEffectImmunityAbAttr) + .conditionalAttr(p => p.formIndex !== 7, BattlerTagImmunityAbAttr, BattlerTagType.DROWSY) .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) .attr(UnsuppressableAbilityAbAttr) .attr(NoFusionAbilityAbAttr) - .bypassFaint() - .partial(), // Meteor form should protect against status effects and yawn + .attr(NoTransformAbilityAbAttr) + .bypassFaint(), new Ability(Abilities.STAKEOUT, 7) .attr(MovePowerBoostAbAttr, (user, target, move) => !!target?.turnData.switchedInThisTurn, 2), new Ability(Abilities.WATER_BUBBLE, 7) @@ -6021,7 +6714,7 @@ export function initAbilities() { .bypassFaint(), new Ability(Abilities.CORROSION, 7) .attr(IgnoreTypeStatusEffectImmunityAbAttr, [ StatusEffect.POISON, StatusEffect.TOXIC ], [ Type.STEEL, Type.POISON ]) - .edgeCase(), // Should interact correctly with magic coat/bounce (not yet implemented) + fling with toxic orb (not implemented yet) + .edgeCase(), // Should poison itself with toxic orb. new Ability(Abilities.COMATOSE, 7) .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) @@ -6109,8 +6802,8 @@ export function initAbilities() { new Ability(Abilities.PROPELLER_TAIL, 8) .attr(BlockRedirectAbAttr), new Ability(Abilities.MIRROR_ARMOR, 8) - .ignorable() - .unimplemented(), + .attr(ReflectStatStageChangeAbAttr) + .ignorable(), /** * Right now, the logic is attached to Surf and Dive moves. Ideally, the post-defend/hit should be an * ability attribute but the current implementation of move effects for BattlerTag does not support this- in the case @@ -6137,7 +6830,8 @@ export function initAbilities() { .attr(ReceivedMoveDamageMultiplierAbAttr, (target, user, move) => move.hasFlag(MoveFlags.SOUND_BASED), 0.5) .ignorable(), new Ability(Abilities.SAND_SPIT, 8) - .attr(PostDefendWeatherChangeAbAttr, WeatherType.SANDSTORM, (target, user, move) => move.category !== MoveCategory.STATUS), + .attr(PostDefendWeatherChangeAbAttr, WeatherType.SANDSTORM, (target, user, move) => move.category !== MoveCategory.STATUS) + .bypassFaint(), new Ability(Abilities.ICE_SCALES, 8) .attr(ReceivedMoveDamageMultiplierAbAttr, (target, user, move) => move.category === MoveCategory.SPECIAL, 0.5) .ignorable(), @@ -6170,7 +6864,8 @@ export function initAbilities() { new Ability(Abilities.STEELY_SPIRIT, 8) .attr(UserFieldMoveTypePowerBoostAbAttr, Type.STEEL), new Ability(Abilities.PERISH_BODY, 8) - .attr(PostDefendPerishSongAbAttr, 4), + .attr(PostDefendPerishSongAbAttr, 4) + .bypassFaint(), new Ability(Abilities.WANDERING_SPIRIT, 8) .attr(PostDefendAbilitySwapAbAttr) .bypassFaint() @@ -6178,12 +6873,12 @@ export function initAbilities() { new Ability(Abilities.GORILLA_TACTICS, 8) .attr(GorillaTacticsAbAttr), new Ability(Abilities.NEUTRALIZING_GAS, 8) - .attr(SuppressFieldAbilitiesAbAttr) + .attr(PostSummonAddArenaTagAbAttr, ArenaTagType.NEUTRALIZING_GAS, 0) + .attr(PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr) .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) .attr(NoTransformAbilityAbAttr) - .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonNeutralizingGas", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })) - .partial(), // A bunch of weird interactions with other abilities being suppressed then unsuppressed + .bypassFaint(), new Ability(Abilities.PASTEL_VEIL, 8) .attr(PostSummonUserFieldRemoveStatusEffectAbAttr, StatusEffect.POISON, StatusEffect.TOXIC) .attr(UserFieldStatusEffectImmunityAbAttr, StatusEffect.POISON, StatusEffect.TOXIC) @@ -6195,7 +6890,7 @@ export function initAbilities() { .attr(UnswappableAbilityAbAttr) .attr(NoTransformAbilityAbAttr) .attr(NoFusionAbilityAbAttr) - .condition((pokemon) => !pokemon.isTerastallized()), + .condition((pokemon) => !pokemon.isTerastallized), new Ability(Abilities.QUICK_DRAW, 8) .attr(BypassSpeedChanceAbAttr, 30), new Ability(Abilities.UNSEEN_FIST, 8) @@ -6228,7 +6923,8 @@ export function initAbilities() { .attr(PostDefendAbilityGiveAbAttr, Abilities.LINGERING_AROMA) .bypassFaint(), new Ability(Abilities.SEED_SOWER, 9) - .attr(PostDefendTerrainChangeAbAttr, TerrainType.GRASSY), + .attr(PostDefendTerrainChangeAbAttr, TerrainType.GRASSY) + .bypassFaint(), new Ability(Abilities.THERMAL_EXCHANGE, 9) .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => user.getMoveType(move) === Type.FIRE && move.category !== MoveCategory.STATUS, Stat.ATK, 1) .attr(StatusEffectImmunityAbAttr, StatusEffect.BURN) @@ -6278,19 +6974,16 @@ export function initAbilities() { .attr(PostWeatherChangeAddBattlerTagAttr, BattlerTagType.PROTOSYNTHESIS, 0, WeatherType.SUNNY, WeatherType.HARSH_SUN) .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) - .attr(NoTransformAbilityAbAttr) - .partial(), // While setting the tag, the getbattlestat should ignore all modifiers to stats except stat stages + .attr(NoTransformAbilityAbAttr), new Ability(Abilities.QUARK_DRIVE, 9) .conditionalAttr(getTerrainCondition(TerrainType.ELECTRIC), PostSummonAddBattlerTagAbAttr, BattlerTagType.QUARK_DRIVE, 0, true) .attr(PostTerrainChangeAddBattlerTagAttr, BattlerTagType.QUARK_DRIVE, 0, TerrainType.ELECTRIC) .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) - .attr(NoTransformAbilityAbAttr) - .partial(), // While setting the tag, the getbattlestat should ignore all modifiers to stats except stat stages + .attr(NoTransformAbilityAbAttr), new Ability(Abilities.GOOD_AS_GOLD, 9) - .attr(MoveImmunityAbAttr, (pokemon, attacker, move) => pokemon !== attacker && move.category === MoveCategory.STATUS) - .ignorable() - .partial(), // Lots of weird interactions with moves and abilities such as negating status moves that target the field + .attr(MoveImmunityAbAttr, (pokemon, attacker, move) => pokemon !== attacker && move.category === MoveCategory.STATUS && ![ MoveTarget.ENEMY_SIDE, MoveTarget.BOTH_SIDES, MoveTarget.USER_SIDE ].includes(move.moveTarget)) + .ignorable(), new Ability(Abilities.VESSEL_OF_RUIN, 9) .attr(FieldMultiplyStatAbAttr, Stat.SPATK, 0.75) .attr(PostSummonMessageAbAttr, (user) => i18next.t("abilityTriggers:postSummonVesselOfRuin", { pokemonNameWithAffix: getPokemonNameWithAffix(user), statName: i18next.t(getStatKey(Stat.SPATK)) })) @@ -6320,8 +7013,8 @@ export function initAbilities() { new Ability(Abilities.SHARPNESS, 9) .attr(MovePowerBoostAbAttr, (user, target, move) => move.hasFlag(MoveFlags.SLICING_MOVE), 1.5), new Ability(Abilities.SUPREME_OVERLORD, 9) - .attr(VariableMovePowerBoostAbAttr, (user, target, move) => 1 + 0.1 * Math.min(user.isPlayer() ? user.scene.currentBattle.playerFaints : user.scene.currentBattle.enemyFaints, 5)) - .partial(), // Counter resets every wave instead of on arena reset + .attr(VariableMovePowerBoostAbAttr, (user, target, move) => 1 + 0.1 * Math.min(user.isPlayer() ? globalScene.arena.playerFaints : globalScene.currentBattle.enemyFaints, 5)) + .partial(), // Should only boost once, on summon new Ability(Abilities.COSTAR, 9) .attr(PostSummonCopyAllyStatsAbAttr), new Ability(Abilities.TOXIC_DEBRIS, 9) @@ -6349,29 +7042,25 @@ export function initAbilities() { new Ability(Abilities.TOXIC_CHAIN, 9) .attr(PostAttackApplyStatusEffectAbAttr, false, 30, StatusEffect.TOXIC), new Ability(Abilities.EMBODY_ASPECT_TEAL, 9) - .attr(PostBattleInitStatStageChangeAbAttr, [ Stat.SPD ], 1, true) + .attr(PostTeraFormChangeStatChangeAbAttr, [ Stat.SPD ], 1) .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) - .attr(NoTransformAbilityAbAttr) - .partial(), // Ogerpon tera interactions + .attr(NoTransformAbilityAbAttr), new Ability(Abilities.EMBODY_ASPECT_WELLSPRING, 9) - .attr(PostBattleInitStatStageChangeAbAttr, [ Stat.SPDEF ], 1, true) + .attr(PostTeraFormChangeStatChangeAbAttr, [ Stat.SPDEF ], 1) .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) - .attr(NoTransformAbilityAbAttr) - .partial(), // Ogerpon tera interactions + .attr(NoTransformAbilityAbAttr), new Ability(Abilities.EMBODY_ASPECT_HEARTHFLAME, 9) - .attr(PostBattleInitStatStageChangeAbAttr, [ Stat.ATK ], 1, true) + .attr(PostTeraFormChangeStatChangeAbAttr, [ Stat.ATK ], 1) .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) - .attr(NoTransformAbilityAbAttr) - .partial(), // Ogerpon tera interactions + .attr(NoTransformAbilityAbAttr), new Ability(Abilities.EMBODY_ASPECT_CORNERSTONE, 9) - .attr(PostBattleInitStatStageChangeAbAttr, [ Stat.DEF ], 1, true) + .attr(PostTeraFormChangeStatChangeAbAttr, [ Stat.DEF ], 1) .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) - .attr(NoTransformAbilityAbAttr) - .partial(), // Ogerpon tera interactions + .attr(NoTransformAbilityAbAttr), new Ability(Abilities.TERA_SHIFT, 9) .attr(PostSummonFormChangeAbAttr, p => p.getFormKey() ? 0 : 1) .attr(UncopiableAbilityAbAttr) @@ -6385,9 +7074,11 @@ export function initAbilities() { .attr(UnswappableAbilityAbAttr) .ignorable(), new Ability(Abilities.TERAFORM_ZERO, 9) + .attr(ClearWeatherAbAttr, [ WeatherType.SUNNY, WeatherType.RAIN, WeatherType.SANDSTORM, WeatherType.HAIL, WeatherType.SNOW, WeatherType.FOG, WeatherType.HEAVY_RAIN, WeatherType.HARSH_SUN, WeatherType.STRONG_WINDS ]) + .attr(ClearTerrainAbAttr, [ TerrainType.MISTY, TerrainType.ELECTRIC, TerrainType.GRASSY, TerrainType.PSYCHIC ]) .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) - .unimplemented(), + .condition(getOncePerBattleCondition(Abilities.TERAFORM_ZERO)), new Ability(Abilities.POISON_PUPPETEER, 9) .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index 8bb74d29a4e..580ede9596c 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -1,13 +1,14 @@ -import { Arena } from "#app/field/arena"; -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; +import type { Arena } from "#app/field/arena"; import { Type } from "#enums/type"; import { BooleanHolder, NumberHolder, toDmgValue } from "#app/utils"; import { MoveCategory, allMoves, MoveTarget } from "#app/data/move"; import { getPokemonNameWithAffix } from "#app/messages"; -import Pokemon, { HitResult, PokemonMove } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; +import { HitResult, PokemonMove } from "#app/field/pokemon"; import { StatusEffect } from "#enums/status-effect"; -import { BattlerIndex } from "#app/battle"; -import { BlockNonDirectDamageAbAttr, InfiltratorAbAttr, ProtectStatAbAttr, applyAbAttrs } from "#app/data/ability"; +import type { BattlerIndex } from "#app/battle"; +import { BlockNonDirectDamageAbAttr, InfiltratorAbAttr, PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr, ProtectStatAbAttr, applyAbAttrs, applyOnGainAbAttrs, applyOnLoseAbAttrs } from "#app/data/ability"; import { Stat } from "#enums/stat"; import { CommonAnim, CommonBattleAnim } from "#app/data/battle-anims"; import i18next from "i18next"; @@ -44,7 +45,7 @@ export abstract class ArenaTag { onRemove(arena: Arena, quiet: boolean = false): void { if (!quiet) { - arena.scene.queueMessage(i18next.t(`arenaTag:arenaOnRemove${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`, { moveName: this.getMoveName() })); + globalScene.queueMessage(i18next.t(`arenaTag:arenaOnRemove${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`, { moveName: this.getMoveName() })); } } @@ -74,27 +75,25 @@ export abstract class ArenaTag { /** * Helper function that retrieves the source Pokemon - * @param scene medium to retrieve the source Pokemon * @returns The source {@linkcode Pokemon} or `null` if none is found */ - public getSourcePokemon(scene: BattleScene): Pokemon | null { - return this.sourceId ? scene.getPokemonById(this.sourceId) : null; + public getSourcePokemon(): Pokemon | null { + return this.sourceId ? globalScene.getPokemonById(this.sourceId) : null; } /** * Helper function that retrieves the Pokemon affected - * @param scene - medium to retrieve the involved Pokemon * @returns list of PlayerPokemon or EnemyPokemon on the field */ - public getAffectedPokemon(scene: BattleScene): Pokemon[] { + public getAffectedPokemon(): Pokemon[] { switch (this.side) { case ArenaTagSide.PLAYER: - return scene.getPlayerField() ?? []; + return globalScene.getPlayerField() ?? []; case ArenaTagSide.ENEMY: - return scene.getEnemyField() ?? []; + return globalScene.getEnemyField() ?? []; case ArenaTagSide.BOTH: default: - return scene.getField(true) ?? []; + return globalScene.getField(true) ?? []; } } } @@ -112,10 +111,10 @@ export class MistTag extends ArenaTag { super.onAdd(arena); if (this.sourceId) { - const source = arena.scene.getPokemonById(this.sourceId); + const source = globalScene.getPokemonById(this.sourceId); if (!quiet && source) { - arena.scene.queueMessage(i18next.t("arenaTag:mistOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(source) })); + globalScene.queueMessage(i18next.t("arenaTag:mistOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(source) })); } else if (!quiet) { console.warn("Failed to get source for MistTag onAdd"); } @@ -146,7 +145,7 @@ export class MistTag extends ArenaTag { cancelled.value = true; if (!simulated) { - arena.scene.queueMessage(i18next.t("arenaTag:mistApply")); + globalScene.queueMessage(i18next.t("arenaTag:mistApply")); } return true; @@ -193,7 +192,7 @@ export class WeakenMoveScreenTag extends ArenaTag { if (bypassed.value) { return false; } - damageMultiplier.value = arena.scene.currentBattle.double ? 2732 / 4096 : 0.5; + damageMultiplier.value = globalScene.currentBattle.double ? 2732 / 4096 : 0.5; return true; } return false; @@ -211,7 +210,7 @@ class ReflectTag extends WeakenMoveScreenTag { onAdd(arena: Arena, quiet: boolean = false): void { if (!quiet) { - arena.scene.queueMessage(i18next.t(`arenaTag:reflectOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`)); + globalScene.queueMessage(i18next.t(`arenaTag:reflectOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`)); } } } @@ -227,7 +226,7 @@ class LightScreenTag extends WeakenMoveScreenTag { onAdd(arena: Arena, quiet: boolean = false): void { if (!quiet) { - arena.scene.queueMessage(i18next.t(`arenaTag:lightScreenOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`)); + globalScene.queueMessage(i18next.t(`arenaTag:lightScreenOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`)); } } } @@ -243,7 +242,7 @@ class AuroraVeilTag extends WeakenMoveScreenTag { onAdd(arena: Arena, quiet: boolean = false): void { if (!quiet) { - arena.scene.queueMessage(i18next.t(`arenaTag:auroraVeilOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`)); + globalScene.queueMessage(i18next.t(`arenaTag:auroraVeilOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`)); } } } @@ -268,7 +267,7 @@ export class ConditionalProtectTag extends ArenaTag { } onAdd(arena: Arena): void { - arena.scene.queueMessage(i18next.t(`arenaTag:conditionalProtectOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`, { moveName: super.getMoveName() })); + globalScene.queueMessage(i18next.t(`arenaTag:conditionalProtectOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`, { moveName: super.getMoveName() })); } // Removes default message for effect removal @@ -296,8 +295,8 @@ export class ConditionalProtectTag extends ArenaTag { if (!simulated) { attacker.stopMultiHit(defender); - new CommonBattleAnim(CommonAnim.PROTECT, defender).play(arena.scene); - arena.scene.queueMessage(i18next.t("arenaTag:conditionalProtectApply", { moveName: super.getMoveName(), pokemonNameWithAffix: getPokemonNameWithAffix(defender) })); + new CommonBattleAnim(CommonAnim.PROTECT, defender).play(); + globalScene.queueMessage(i18next.t("arenaTag:conditionalProtectApply", { moveName: super.getMoveName(), pokemonNameWithAffix: getPokemonNameWithAffix(defender) })); } } @@ -318,7 +317,7 @@ export class ConditionalProtectTag extends ArenaTag { */ const QuickGuardConditionFunc: ProtectConditionFunc = (arena, moveId) => { const move = allMoves[moveId]; - const effectPhase = arena.scene.getCurrentPhase(); + const effectPhase = globalScene.getCurrentPhase(); if (effectPhase instanceof MoveEffectPhase) { const attacker = effectPhase.getUserPokemon(); @@ -393,9 +392,9 @@ class MatBlockTag extends ConditionalProtectTag { onAdd(arena: Arena) { if (this.sourceId) { - const source = arena.scene.getPokemonById(this.sourceId); + const source = globalScene.getPokemonById(this.sourceId); if (source) { - arena.scene.queueMessage(i18next.t("arenaTag:matBlockOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(source) })); + globalScene.queueMessage(i18next.t("arenaTag:matBlockOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(source) })); } else { console.warn("Failed to get source for MatBlockTag onAdd"); } @@ -448,15 +447,15 @@ export class NoCritTag extends ArenaTag { /** Queues a message upon adding this effect to the field */ onAdd(arena: Arena): void { - arena.scene.queueMessage(i18next.t(`arenaTag:noCritOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : "Enemy"}`, { + globalScene.queueMessage(i18next.t(`arenaTag:noCritOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : "Enemy"}`, { moveName: this.getMoveName() })); } /** Queues a message upon removing this effect from the field */ onRemove(arena: Arena): void { - const source = arena.scene.getPokemonById(this.sourceId!); // TODO: is this bang correct? - arena.scene.queueMessage(i18next.t("arenaTag:noCritOnRemove", { + const source = globalScene.getPokemonById(this.sourceId!); // TODO: is this bang correct? + globalScene.queueMessage(i18next.t("arenaTag:noCritOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(source ?? undefined), moveName: this.getMoveName() })); @@ -478,7 +477,7 @@ class WishTag extends ArenaTag { onAdd(arena: Arena): void { if (this.sourceId) { - const user = arena.scene.getPokemonById(this.sourceId); + const user = globalScene.getPokemonById(this.sourceId); if (user) { this.battlerIndex = user.getBattlerIndex(); this.triggerMessage = i18next.t("arenaTag:wishTagOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(user) }); @@ -490,10 +489,10 @@ class WishTag extends ArenaTag { } onRemove(arena: Arena): void { - const target = arena.scene.getField()[this.battlerIndex]; + const target = globalScene.getField()[this.battlerIndex]; if (target?.isActive(true)) { - arena.scene.queueMessage(this.triggerMessage); - arena.scene.unshiftPhase(new PokemonHealPhase(target.scene, target.getBattlerIndex(), this.healHp, null, true, false)); + globalScene.queueMessage(this.triggerMessage); + globalScene.unshiftPhase(new PokemonHealPhase(target.getBattlerIndex(), this.healHp, null, true, false)); } } } @@ -546,11 +545,11 @@ class MudSportTag extends WeakenMoveTypeTag { } onAdd(arena: Arena): void { - arena.scene.queueMessage(i18next.t("arenaTag:mudSportOnAdd")); + globalScene.queueMessage(i18next.t("arenaTag:mudSportOnAdd")); } onRemove(arena: Arena): void { - arena.scene.queueMessage(i18next.t("arenaTag:mudSportOnRemove")); + globalScene.queueMessage(i18next.t("arenaTag:mudSportOnRemove")); } } @@ -564,11 +563,11 @@ class WaterSportTag extends WeakenMoveTypeTag { } onAdd(arena: Arena): void { - arena.scene.queueMessage(i18next.t("arenaTag:waterSportOnAdd")); + globalScene.queueMessage(i18next.t("arenaTag:waterSportOnAdd")); } onRemove(arena: Arena): void { - arena.scene.queueMessage(i18next.t("arenaTag:waterSportOnRemove")); + globalScene.queueMessage(i18next.t("arenaTag:waterSportOnRemove")); } } @@ -584,7 +583,7 @@ export class IonDelugeTag extends ArenaTag { /** Queues an on-add message */ onAdd(arena: Arena): void { - arena.scene.queueMessage(i18next.t("arenaTag:plasmaFistsOnAdd")); + globalScene.queueMessage(i18next.t("arenaTag:plasmaFistsOnAdd")); } onRemove(arena: Arena): void { } // Removes default on-remove message @@ -679,9 +678,9 @@ class SpikesTag extends ArenaTrapTag { onAdd(arena: Arena, quiet: boolean = false): void { super.onAdd(arena); - const source = this.sourceId ? arena.scene.getPokemonById(this.sourceId) : null; + const source = this.sourceId ? globalScene.getPokemonById(this.sourceId) : null; if (!quiet && source) { - arena.scene.queueMessage(i18next.t("arenaTag:spikesOnAdd", { moveName: this.getMoveName(), opponentDesc: source.getOpponentDescriptor() })); + globalScene.queueMessage(i18next.t("arenaTag:spikesOnAdd", { moveName: this.getMoveName(), opponentDesc: source.getOpponentDescriptor() })); } } @@ -698,7 +697,7 @@ class SpikesTag extends ArenaTrapTag { const damageHpRatio = 1 / (10 - 2 * this.layers); const damage = toDmgValue(pokemon.getMaxHp() * damageHpRatio); - pokemon.scene.queueMessage(i18next.t("arenaTag:spikesActivateTrap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("arenaTag:spikesActivateTrap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); pokemon.damageAndUpdate(damage, HitResult.OTHER); if (pokemon.turnData) { pokemon.turnData.damageTaken += damage; @@ -728,9 +727,9 @@ class ToxicSpikesTag extends ArenaTrapTag { onAdd(arena: Arena, quiet: boolean = false): void { super.onAdd(arena); - const source = this.sourceId ? arena.scene.getPokemonById(this.sourceId) : null; + const source = this.sourceId ? globalScene.getPokemonById(this.sourceId) : null; if (!quiet && source) { - arena.scene.queueMessage(i18next.t("arenaTag:toxicSpikesOnAdd", { moveName: this.getMoveName(), opponentDesc: source.getOpponentDescriptor() })); + globalScene.queueMessage(i18next.t("arenaTag:toxicSpikesOnAdd", { moveName: this.getMoveName(), opponentDesc: source.getOpponentDescriptor() })); } } @@ -747,8 +746,8 @@ class ToxicSpikesTag extends ArenaTrapTag { } if (pokemon.isOfType(Type.POISON)) { this.neutralized = true; - if (pokemon.scene.arena.removeTag(this.tagType)) { - pokemon.scene.queueMessage(i18next.t("arenaTag:toxicSpikesActivateTrapPoison", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: this.getMoveName() })); + if (globalScene.arena.removeTag(this.tagType)) { + globalScene.queueMessage(i18next.t("arenaTag:toxicSpikesActivateTrapPoison", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: this.getMoveName() })); return true; } } else if (!pokemon.status) { @@ -792,7 +791,7 @@ export class DelayedAttackTag extends ArenaTag { const ret = super.lapse(arena); if (!ret) { - arena.scene.unshiftPhase(new MoveEffectPhase(arena.scene, this.sourceId!, [ this.targetIndex ], new PokemonMove(this.sourceMove!, 0, 0, true))); // TODO: are those bangs correct? + globalScene.unshiftPhase(new MoveEffectPhase(this.sourceId!, [ this.targetIndex ], new PokemonMove(this.sourceMove!, 0, 0, true))); // TODO: are those bangs correct? } return ret; @@ -814,9 +813,9 @@ class StealthRockTag extends ArenaTrapTag { onAdd(arena: Arena, quiet: boolean = false): void { super.onAdd(arena); - const source = this.sourceId ? arena.scene.getPokemonById(this.sourceId) : null; + const source = this.sourceId ? globalScene.getPokemonById(this.sourceId) : null; if (!quiet && source) { - arena.scene.queueMessage(i18next.t("arenaTag:stealthRockOnAdd", { opponentDesc: source.getOpponentDescriptor() })); + globalScene.queueMessage(i18next.t("arenaTag:stealthRockOnAdd", { opponentDesc: source.getOpponentDescriptor() })); } } @@ -864,7 +863,7 @@ class StealthRockTag extends ArenaTrapTag { return true; } const damage = toDmgValue(pokemon.getMaxHp() * damageHpRatio); - pokemon.scene.queueMessage(i18next.t("arenaTag:stealthRockActivateTrap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("arenaTag:stealthRockActivateTrap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); pokemon.damageAndUpdate(damage, HitResult.OTHER); if (pokemon.turnData) { pokemon.turnData.damageTaken += damage; @@ -893,9 +892,9 @@ class StickyWebTag extends ArenaTrapTag { onAdd(arena: Arena, quiet: boolean = false): void { super.onAdd(arena); - const source = this.sourceId ? arena.scene.getPokemonById(this.sourceId) : null; + const source = this.sourceId ? globalScene.getPokemonById(this.sourceId) : null; if (!quiet && source) { - arena.scene.queueMessage(i18next.t("arenaTag:stickyWebOnAdd", { moveName: this.getMoveName(), opponentDesc: source.getOpponentDescriptor() })); + globalScene.queueMessage(i18next.t("arenaTag:stickyWebOnAdd", { moveName: this.getMoveName(), opponentDesc: source.getOpponentDescriptor() })); } } @@ -909,9 +908,9 @@ class StickyWebTag extends ArenaTrapTag { } if (!cancelled.value) { - pokemon.scene.queueMessage(i18next.t("arenaTag:stickyWebActivateTrap", { pokemonName: pokemon.getNameToRender() })); + globalScene.queueMessage(i18next.t("arenaTag:stickyWebActivateTrap", { pokemonName: pokemon.getNameToRender() })); const stages = new NumberHolder(-1); - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), false, [ Stat.SPD ], stages.value)); + globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), false, [ Stat.SPD ], stages.value, true, false, true, null, false, true)); return true; } } @@ -945,14 +944,14 @@ export class TrickRoomTag extends ArenaTag { } onAdd(arena: Arena): void { - const source = this.sourceId ? arena.scene.getPokemonById(this.sourceId) : null; + const source = this.sourceId ? globalScene.getPokemonById(this.sourceId) : null; if (source) { - arena.scene.queueMessage(i18next.t("arenaTag:trickRoomOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(source) })); + globalScene.queueMessage(i18next.t("arenaTag:trickRoomOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(source) })); } } onRemove(arena: Arena): void { - arena.scene.queueMessage(i18next.t("arenaTag:trickRoomOnRemove")); + globalScene.queueMessage(i18next.t("arenaTag:trickRoomOnRemove")); } } @@ -967,8 +966,8 @@ export class GravityTag extends ArenaTag { } onAdd(arena: Arena): void { - arena.scene.queueMessage(i18next.t("arenaTag:gravityOnAdd")); - arena.scene.getField(true).forEach((pokemon) => { + globalScene.queueMessage(i18next.t("arenaTag:gravityOnAdd")); + globalScene.getField(true).forEach((pokemon) => { if (pokemon !== null) { pokemon.removeTag(BattlerTagType.FLOATING); pokemon.removeTag(BattlerTagType.TELEKINESIS); @@ -980,7 +979,7 @@ export class GravityTag extends ArenaTag { } onRemove(arena: Arena): void { - arena.scene.queueMessage(i18next.t("arenaTag:gravityOnRemove")); + globalScene.queueMessage(i18next.t("arenaTag:gravityOnRemove")); } } @@ -996,29 +995,29 @@ class TailwindTag extends ArenaTag { onAdd(arena: Arena, quiet: boolean = false): void { if (!quiet) { - arena.scene.queueMessage(i18next.t(`arenaTag:tailwindOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`)); + globalScene.queueMessage(i18next.t(`arenaTag:tailwindOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`)); } - const source = arena.scene.getPokemonById(this.sourceId!); //TODO: this bang is questionable! - const party = (source?.isPlayer() ? source.scene.getPlayerField() : source?.scene.getEnemyField()) ?? []; + const source = globalScene.getPokemonById(this.sourceId!); //TODO: this bang is questionable! + const party = (source?.isPlayer() ? globalScene.getPlayerField() : globalScene.getEnemyField()) ?? []; for (const pokemon of party) { // Apply the CHARGED tag to party members with the WIND_POWER ability if (pokemon.hasAbility(Abilities.WIND_POWER) && !pokemon.getTag(BattlerTagType.CHARGED)) { pokemon.addTag(BattlerTagType.CHARGED); - pokemon.scene.queueMessage(i18next.t("abilityTriggers:windPowerCharged", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: this.getMoveName() })); + globalScene.queueMessage(i18next.t("abilityTriggers:windPowerCharged", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: this.getMoveName() })); } // Raise attack by one stage if party member has WIND_RIDER ability if (pokemon.hasAbility(Abilities.WIND_RIDER)) { - pokemon.scene.unshiftPhase(new ShowAbilityPhase(pokemon.scene, pokemon.getBattlerIndex())); - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ Stat.ATK ], 1, true)); + globalScene.unshiftPhase(new ShowAbilityPhase(pokemon.getBattlerIndex())); + globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ Stat.ATK ], 1, true)); } } } onRemove(arena: Arena, quiet: boolean = false): void { if (!quiet) { - arena.scene.queueMessage(i18next.t(`arenaTag:tailwindOnRemove${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`)); + globalScene.queueMessage(i18next.t(`arenaTag:tailwindOnRemove${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`)); } } } @@ -1033,11 +1032,11 @@ class HappyHourTag extends ArenaTag { } onAdd(arena: Arena): void { - arena.scene.queueMessage(i18next.t("arenaTag:happyHourOnAdd")); + globalScene.queueMessage(i18next.t("arenaTag:happyHourOnAdd")); } onRemove(arena: Arena): void { - arena.scene.queueMessage(i18next.t("arenaTag:happyHourOnRemove")); + globalScene.queueMessage(i18next.t("arenaTag:happyHourOnRemove")); } } @@ -1047,11 +1046,11 @@ class SafeguardTag extends ArenaTag { } onAdd(arena: Arena): void { - arena.scene.queueMessage(i18next.t(`arenaTag:safeguardOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`)); + globalScene.queueMessage(i18next.t(`arenaTag:safeguardOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`)); } onRemove(arena: Arena): void { - arena.scene.queueMessage(i18next.t(`arenaTag:safeguardOnRemove${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`)); + globalScene.queueMessage(i18next.t(`arenaTag:safeguardOnRemove${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`)); } } @@ -1074,16 +1073,16 @@ class ImprisonTag extends ArenaTrapTag { * This function applies the effects of Imprison to the opposing Pokemon already present on the field. * @param arena */ - override onAdd({ scene }: Arena) { - const source = this.getSourcePokemon(scene); + override onAdd() { + const source = this.getSourcePokemon(); if (source) { - const party = this.getAffectedPokemon(scene); + const party = this.getAffectedPokemon(); party?.forEach((p: Pokemon ) => { if (p.isAllowedInBattle()) { p.addTag(BattlerTagType.IMPRISON, 1, Moves.IMPRISON, this.sourceId); } }); - scene.queueMessage(i18next.t("battlerTags:imprisonOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(source) })); + globalScene.queueMessage(i18next.t("battlerTags:imprisonOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(source) })); } } @@ -1092,8 +1091,8 @@ class ImprisonTag extends ArenaTrapTag { * @param _arena * @returns `true` if the source of the tag is still active on the field | `false` if not */ - override lapse({ scene }: Arena): boolean { - const source = this.getSourcePokemon(scene); + override lapse(): boolean { + const source = this.getSourcePokemon(); return source ? source.isActive(true) : false; } @@ -1103,7 +1102,7 @@ class ImprisonTag extends ArenaTrapTag { * @returns `true` */ override activateTrap(pokemon: Pokemon): boolean { - const source = this.getSourcePokemon(pokemon.scene); + const source = this.getSourcePokemon(); if (source && source.isActive(true) && pokemon.isAllowedInBattle()) { pokemon.addTag(BattlerTagType.IMPRISON, 1, Moves.IMPRISON, this.sourceId); } @@ -1114,8 +1113,8 @@ class ImprisonTag extends ArenaTrapTag { * When the arena tag is removed, it also attempts to remove any related Battler Tags if they haven't already been removed from the affected Pokemon * @param arena */ - override onRemove({ scene }: Arena): void { - const party = this.getAffectedPokemon(scene); + override onRemove(): void { + const party = this.getAffectedPokemon(); party?.forEach((p: Pokemon) => { p.removeTag(BattlerTagType.IMPRISON); }); @@ -1136,19 +1135,19 @@ class FireGrassPledgeTag extends ArenaTag { override onAdd(arena: Arena): void { // "A sea of fire enveloped your/the opposing team!" - arena.scene.queueMessage(i18next.t(`arenaTag:fireGrassPledgeOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`)); + globalScene.queueMessage(i18next.t(`arenaTag:fireGrassPledgeOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`)); } override lapse(arena: Arena): boolean { const field: Pokemon[] = (this.side === ArenaTagSide.PLAYER) - ? arena.scene.getPlayerField() - : arena.scene.getEnemyField(); + ? globalScene.getPlayerField() + : globalScene.getEnemyField(); field.filter(pokemon => !pokemon.isOfType(Type.FIRE) && !pokemon.switchOutStatus).forEach(pokemon => { // "{pokemonNameWithAffix} was hurt by the sea of fire!" - pokemon.scene.queueMessage(i18next.t("arenaTag:fireGrassPledgeLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("arenaTag:fireGrassPledgeLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); // TODO: Replace this with a proper animation - pokemon.scene.unshiftPhase(new CommonAnimPhase(pokemon.scene, pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.MAGMA_STORM)); + globalScene.unshiftPhase(new CommonAnimPhase(pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.MAGMA_STORM)); pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 8)); }); @@ -1170,7 +1169,7 @@ class WaterFirePledgeTag extends ArenaTag { override onAdd(arena: Arena): void { // "A rainbow appeared in the sky on your/the opposing team's side!" - arena.scene.queueMessage(i18next.t(`arenaTag:waterFirePledgeOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`)); + globalScene.queueMessage(i18next.t(`arenaTag:waterFirePledgeOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`)); } /** @@ -1200,7 +1199,7 @@ class GrassWaterPledgeTag extends ArenaTag { override onAdd(arena: Arena): void { // "A swamp enveloped your/the opposing team!" - arena.scene.queueMessage(i18next.t(`arenaTag:grassWaterPledgeOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`)); + globalScene.queueMessage(i18next.t(`arenaTag:grassWaterPledgeOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`)); } } @@ -1217,11 +1216,81 @@ export class FairyLockTag extends ArenaTag { } onAdd(arena: Arena): void { - arena.scene.queueMessage(i18next.t("arenaTag:fairyLockOnAdd")); + globalScene.queueMessage(i18next.t("arenaTag:fairyLockOnAdd")); } } +/** + * Arena tag class for {@link https://bulbapedia.bulbagarden.net/wiki/Neutralizing_Gas_(Ability) Neutralizing Gas} + * + * Keeps track of the number of pokemon on the field with Neutralizing Gas - If it drops to zero, the effect is ended and abilities are reactivated + * + * Additionally ends onLose abilities when it is activated + */ +export class SuppressAbilitiesTag extends ArenaTag { + private sourceCount: number; + private beingRemoved: boolean; + + constructor(sourceId: number) { + super(ArenaTagType.NEUTRALIZING_GAS, 0, undefined, sourceId); + this.sourceCount = 1; + this.beingRemoved = false; + } + + public override onAdd(arena: Arena): void { + const pokemon = this.getSourcePokemon(); + if (pokemon) { + globalScene.queueMessage(i18next.t("arenaTag:neutralizingGasOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + + for (const fieldPokemon of globalScene.getField()) { + if (fieldPokemon && fieldPokemon.id !== pokemon.id) { + [ true, false ].forEach((passive) => applyOnLoseAbAttrs(fieldPokemon, passive)); + } + } + } + } + + public override onOverlap(arena: Arena): void { + this.sourceCount++; + } + + public onSourceLeave(arena: Arena): void { + this.sourceCount--; + if (this.sourceCount <= 0) { + arena.removeTag(ArenaTagType.NEUTRALIZING_GAS); + } else if (this.sourceCount === 1) { + // With 1 source left, that pokemon's other abilities should reactivate + // This may be confusing for players but would be the most accurate gameplay-wise + // Could have a custom message that plays when a specific pokemon's NG ends? This entire thing exists due to passives after all + const setter = globalScene.getField().filter((p) => p && p.hasAbilityWithAttr(PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr, false))[0]; + applyOnGainAbAttrs(setter, setter.getAbility().hasAttr(PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr)); + } + } + + public override onRemove(arena: Arena, quiet: boolean = false) { + this.beingRemoved = true; + if (!quiet) { + globalScene.queueMessage(i18next.t("arenaTag:neutralizingGasOnRemove")); + } + + for (const pokemon of globalScene.getField()) { + // There is only one pokemon with this attr on the field on removal, so its abilities are already active + if (pokemon && !pokemon.hasAbilityWithAttr(PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr, false)) { + [ true, false ].forEach((passive) => applyOnGainAbAttrs(pokemon, passive)); + } + } + } + + public shouldApplyToSelf(): boolean { + return this.sourceCount > 1; + } + + public isBeingRemoved() { + return this.beingRemoved; + } +} + // TODO: swap `sourceMove` and `sourceId` and make `sourceMove` an optional parameter export function getArenaTag(tagType: ArenaTagType, turnCount: number, sourceMove: Moves | undefined, sourceId: number, targetIndex?: BattlerIndex, side: ArenaTagSide = ArenaTagSide.BOTH): ArenaTag | null { switch (tagType) { @@ -1282,6 +1351,8 @@ export function getArenaTag(tagType: ArenaTagType, turnCount: number, sourceMove return new GrassWaterPledgeTag(sourceId, side); case ArenaTagType.FAIRY_LOCK: return new FairyLockTag(turnCount, sourceId); + case ArenaTagType.NEUTRALIZING_GAS: + return new SuppressAbilitiesTag(sourceId); default: return null; } diff --git a/src/data/balance/biomes.ts b/src/data/balance/biomes.ts index 0f4926cf7c7..5b5e69b4042 100644 --- a/src/data/balance/biomes.ts +++ b/src/data/balance/biomes.ts @@ -1,6 +1,7 @@ import { Type } from "#enums/type"; import * as Utils from "#app/utils"; -import { pokemonEvolutions, SpeciesFormEvolution } from "#app/data/balance/pokemon-evolutions"; +import type { SpeciesFormEvolution } from "#app/data/balance/pokemon-evolutions"; +import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import i18next from "i18next"; import { Biome } from "#enums/biome"; import { Species } from "#enums/species"; @@ -25,11 +26,11 @@ export function getBiomeName(biome: Biome | -1) { } interface BiomeLinks { - [key: integer]: Biome | (Biome | [Biome, integer])[] + [key: number]: Biome | (Biome | [Biome, number])[] } interface BiomeDepths { - [key: integer]: [integer, integer] + [key: number]: [number, number] } export const biomeLinks: BiomeLinks = { @@ -86,27 +87,39 @@ export enum BiomePoolTier { export const uncatchableSpecies: Species[] = []; export interface SpeciesTree { - [key: integer]: Species[] + [key: number]: Species[] } export interface PokemonPools { - [key: integer]: (Species | SpeciesTree)[] + [key: number]: (Species | SpeciesTree)[] } export interface BiomeTierPokemonPools { - [key: integer]: PokemonPools + [key: number]: PokemonPools } export interface BiomePokemonPools { - [key: integer]: BiomeTierPokemonPools + [key: number]: BiomeTierPokemonPools } +export interface BiomeTierTod { + biome: Biome, + tier: BiomePoolTier, + tod: TimeOfDay[] +} + +export interface CatchableSpecies{ + [key: number]: BiomeTierTod[] +} + +export const catchableSpecies: CatchableSpecies = {}; + export interface BiomeTierTrainerPools { - [key: integer]: TrainerType[] + [key: number]: TrainerType[] } export interface BiomeTrainerPools { - [key: integer]: BiomeTierTrainerPools + [key: number]: BiomeTierTrainerPools } export const biomePokemonPools: BiomePokemonPools = { @@ -7662,15 +7675,15 @@ export function initBiomes() { biomeDepths[Biome.TOWN] = [ 0, 1 ]; - const traverseBiome = (biome: Biome, depth: integer) => { + const traverseBiome = (biome: Biome, depth: number) => { if (biome === Biome.END) { const biomeList = Object.keys(Biome).filter(key => !isNaN(Number(key))); biomeList.pop(); // Removes Biome.END from the list const randIndex = Utils.randSeedInt(biomeList.length, 1); // Will never be Biome.TOWN biome = Biome[biomeList[randIndex]]; } - const linkedBiomes: (Biome | [ Biome, integer ])[] = Array.isArray(biomeLinks[biome]) - ? biomeLinks[biome] as (Biome | [ Biome, integer ])[] + const linkedBiomes: (Biome | [ Biome, number ])[] = Array.isArray(biomeLinks[biome]) + ? biomeLinks[biome] as (Biome | [ Biome, number ])[] : [ biomeLinks[biome] as Biome ]; for (const linkedBiomeEntry of linkedBiomes) { const linkedBiome = !Array.isArray(linkedBiomeEntry) @@ -7687,7 +7700,7 @@ export function initBiomes() { }; traverseBiome(Biome.TOWN, 0); - biomeDepths[Biome.END] = [ Object.values(biomeDepths).map(d => d[0]).reduce((max: integer, value: integer) => Math.max(max, value), 0) + 1, 1 ]; + biomeDepths[Biome.END] = [ Object.values(biomeDepths).map(d => d[0]).reduce((max: number, value: number) => Math.max(max, value), 0) + 1, 1 ]; for (const biome of Utils.getEnumValues(Biome)) { biomePokemonPools[biome] = {}; @@ -7715,6 +7728,9 @@ export function initBiomes() { uncatchableSpecies.push(speciesId); } + // array of biome options for the current species + catchableSpecies[speciesId] = []; + for (const b of biomeEntries) { const biome = b[0]; const tier = b[1]; @@ -7724,6 +7740,12 @@ export function initBiomes() { : [ b[2] ] : [ TimeOfDay.ALL ]; + catchableSpecies[speciesId].push({ + biome: biome as Biome, + tier: tier as BiomePoolTier, + tod: timesOfDay as TimeOfDay[] + }); + for (const tod of timesOfDay) { if (!biomePokemonPools.hasOwnProperty(biome) || !biomePokemonPools[biome].hasOwnProperty(tier) || !biomePokemonPools[biome][tier].hasOwnProperty(tod)) { continue; diff --git a/src/data/balance/egg-moves.ts b/src/data/balance/egg-moves.ts index 4855379f675..ae61acbd32e 100644 --- a/src/data/balance/egg-moves.ts +++ b/src/data/balance/egg-moves.ts @@ -7,10 +7,10 @@ import { Species } from "#enums/species"; export const speciesEggMoves = { [Species.BULBASAUR]: [ Moves.SAPPY_SEED, Moves.MALIGNANT_CHAIN, Moves.EARTH_POWER, Moves.MATCHA_GOTCHA ], [Species.CHARMANDER]: [ Moves.DRAGON_DANCE, Moves.BITTER_BLADE, Moves.EARTH_POWER, Moves.OBLIVION_WING ], - [Species.SQUIRTLE]: [ Moves.FREEZE_DRY, Moves.ARMOR_CANNON, Moves.BOUNCY_BUBBLE, Moves.ORIGIN_PULSE ], + [Species.SQUIRTLE]: [ Moves.FREEZE_DRY, Moves.ARMOR_CANNON, Moves.SHORE_UP, Moves.ORIGIN_PULSE ], [Species.CATERPIE]: [ Moves.SANDSEAR_STORM, Moves.SILK_TRAP, Moves.TWIN_BEAM, Moves.BLEAKWIND_STORM ], [Species.WEEDLE]: [ Moves.THOUSAND_ARROWS, Moves.NOXIOUS_TORQUE, Moves.ATTACK_ORDER, Moves.VICTORY_DANCE ], - [Species.PIDGEY]: [ Moves.WILDBOLT_STORM, Moves.SANDSEAR_STORM, Moves.NASTY_PLOT, Moves.BOOMBURST ], + [Species.PIDGEY]: [ Moves.BLEAKWIND_STORM, Moves.SANDSEAR_STORM, Moves.CALM_MIND, Moves.BOOMBURST ], [Species.RATTATA]: [ Moves.HYPER_FANG, Moves.PSYCHIC_FANGS, Moves.FIRE_FANG, Moves.EXTREME_SPEED ], [Species.SPEAROW]: [ Moves.FLOATY_FALL, Moves.HYPER_DRILL, Moves.TIDY_UP, Moves.TRIPLE_ARROWS ], [Species.EKANS]: [ Moves.NOXIOUS_TORQUE, Moves.DRAGON_DANCE, Moves.SLACK_OFF, Moves.SHED_TAIL ], @@ -34,7 +34,7 @@ export const speciesEggMoves = { [Species.TENTACOOL]: [ Moves.BANEFUL_BUNKER, Moves.MALIGNANT_CHAIN, Moves.BOUNCY_BUBBLE, Moves.STRENGTH_SAP ], [Species.GEODUDE]: [ Moves.FLARE_BLITZ, Moves.HEAD_SMASH, Moves.SHORE_UP, Moves.SHELL_SMASH ], [Species.PONYTA]: [ Moves.HEADLONG_RUSH, Moves.FIRE_LASH, Moves.SWORDS_DANCE, Moves.VOLT_TACKLE ], - [Species.SLOWPOKE]: [ Moves.BOUNCY_BUBBLE, Moves.FROST_BREATH, Moves.SHED_TAIL, Moves.MYSTICAL_POWER ], + [Species.SLOWPOKE]: [ Moves.SPLISHY_SPLASH, Moves.FROST_BREATH, Moves.SHED_TAIL, Moves.MYSTICAL_POWER ], [Species.MAGNEMITE]: [ Moves.PARABOLIC_CHARGE, Moves.FLAMETHROWER, Moves.ICE_BEAM, Moves.THUNDERCLAP ], [Species.FARFETCHD]: [ Moves.IVY_CUDGEL, Moves.TRIPLE_ARROWS, Moves.DRILL_RUN, Moves.VICTORY_DANCE ], [Species.DODUO]: [ Moves.TRIPLE_AXEL, Moves.HYPER_DRILL, Moves.FLOATY_FALL, Moves.TRIPLE_ARROWS ], @@ -46,20 +46,20 @@ export const speciesEggMoves = { [Species.DROWZEE]: [ Moves.BADDY_BAD, Moves.STRENGTH_SAP, Moves.LUMINA_CRASH, Moves.DARK_VOID ], [Species.KRABBY]: [ Moves.DIRE_CLAW, Moves.DRAGON_HAMMER, Moves.IVY_CUDGEL, Moves.JET_PUNCH ], [Species.VOLTORB]: [ Moves.NASTY_PLOT, Moves.FUSION_FLARE, Moves.FROST_BREATH, Moves.ELECTRO_DRIFT ], - [Species.EXEGGCUTE]: [ Moves.FICKLE_BEAM, Moves.APPLE_ACID, Moves.TRICK_ROOM, Moves.LUMINA_CRASH ], + [Species.EXEGGCUTE]: [ Moves.FICKLE_BEAM, Moves.APPLE_ACID, Moves.HEAT_WAVE, Moves.LUMINA_CRASH ], [Species.CUBONE]: [ Moves.HEAD_SMASH, Moves.WOOD_HAMMER, Moves.SHADOW_SNEAK, Moves.BITTER_BLADE ], [Species.LICKITUNG]: [ Moves.CRUSH_GRIP, Moves.FIRE_LASH, Moves.SLACK_OFF, Moves.MAGICAL_TORQUE ], [Species.KOFFING]: [ Moves.SCALD, Moves.RECOVER, Moves.BODY_PRESS, Moves.MALIGNANT_CHAIN ], [Species.RHYHORN]: [ Moves.SHORE_UP, Moves.ICE_HAMMER, Moves.ACCELEROCK, Moves.HEAD_SMASH ], [Species.TANGELA]: [ Moves.NATURES_MADNESS, Moves.SNAP_TRAP, Moves.PARTING_SHOT, Moves.SAPPY_SEED ], - [Species.KANGASKHAN]: [ Moves.POWER_UP_PUNCH, Moves.TRAILBLAZE, Moves.FACADE, Moves.SEISMIC_TOSS ], + [Species.KANGASKHAN]: [ Moves.POWER_UP_PUNCH, Moves.TRAILBLAZE, Moves.COVET, Moves.SEISMIC_TOSS ], [Species.HORSEA]: [ Moves.SNIPE_SHOT, Moves.FROST_BREATH, Moves.SLUDGE_BOMB, Moves.CLANGING_SCALES ], [Species.GOLDEEN]: [ Moves.GLACIAL_LANCE, Moves.SUPERCELL_SLAM, Moves.DRAGON_DANCE, Moves.FISHIOUS_REND ], [Species.STARYU]: [ Moves.CALM_MIND, Moves.BOUNCY_BUBBLE, Moves.MOONBLAST, Moves.MYSTICAL_POWER ], [Species.SCYTHER]: [ Moves.MIGHTY_CLEAVE, Moves.GEAR_GRIND, Moves.STORM_THROW, Moves.BITTER_BLADE ], [Species.PINSIR]: [ Moves.HEADLONG_RUSH, Moves.LEECH_LIFE, Moves.CRUSH_GRIP, Moves.EXTREME_SPEED ], [Species.TAUROS]: [ Moves.SWORDS_DANCE, Moves.FIRE_LASH, Moves.WICKED_TORQUE, Moves.COLLISION_COURSE ], - [Species.MAGIKARP]: [ Moves.FLIP_TURN, Moves.ICE_SPINNER, Moves.DRAGON_ASCENT, Moves.SURGING_STRIKES ], + [Species.MAGIKARP]: [ Moves.FLIP_TURN, Moves.ICE_SPINNER, Moves.KNOCK_OFF, Moves.DRAGON_ASCENT ], [Species.LAPRAS]: [ Moves.RECOVER, Moves.FREEZE_DRY, Moves.SCALD, Moves.SHELL_SMASH ], [Species.DITTO]: [ Moves.MIMIC, Moves.SKETCH, Moves.METRONOME, Moves.IMPRISON ], [Species.EEVEE]: [ Moves.WISH, Moves.NO_RETREAT, Moves.ZIPPY_ZAP, Moves.BOOMBURST ], @@ -76,7 +76,7 @@ export const speciesEggMoves = { [Species.CHIKORITA]: [ Moves.SAPPY_SEED, Moves.STONE_AXE, Moves.DRAGON_DANCE, Moves.SPORE ], [Species.CYNDAQUIL]: [ Moves.NASTY_PLOT, Moves.EARTH_POWER, Moves.FIERY_DANCE, Moves.ELECTRO_DRIFT ], - [Species.TOTODILE]: [ Moves.THUNDER_PUNCH, Moves.DRAGON_DANCE, Moves.TRIPLE_AXEL, Moves.SURGING_STRIKES ], + [Species.TOTODILE]: [ Moves.THUNDER_PUNCH, Moves.DRAGON_DANCE, Moves.PLAY_ROUGH, Moves.SURGING_STRIKES ], [Species.SENTRET]: [ Moves.TIDY_UP, Moves.FAKE_OUT, Moves.NUZZLE, Moves.EXTREME_SPEED ], [Species.HOOTHOOT]: [ Moves.CALM_MIND, Moves.ESPER_WING, Moves.AEROBLAST, Moves.BOOMBURST ], [Species.LEDYBA]: [ Moves.POLLEN_PUFF, Moves.MAT_BLOCK, Moves.PARTING_SHOT, Moves.SPORE ], @@ -112,7 +112,7 @@ export const speciesEggMoves = { [Species.REMORAID]: [ Moves.WATER_SHURIKEN, Moves.TAKE_HEART, Moves.SHELL_SIDE_ARM, Moves.BOUNCY_BUBBLE ], [Species.DELIBIRD]: [ Moves.BONEMERANG, Moves.FLOATY_FALL, Moves.VICTORY_DANCE, Moves.GLACIAL_LANCE ], [Species.SKARMORY]: [ Moves.ROOST, Moves.BODY_PRESS, Moves.SPIKY_SHIELD, Moves.BEAK_BLAST ], - [Species.HOUNDOUR]: [ Moves.EARTH_POWER, Moves.THUNDERBOLT, Moves.MOONBLAST, Moves.FIERY_WRATH ], + [Species.HOUNDOUR]: [ Moves.FIERY_WRATH, Moves.THUNDERBOLT, Moves.MOONBLAST, Moves.ARMOR_CANNON ], [Species.PHANPY]: [ Moves.SHORE_UP, Moves.SWORDS_DANCE, Moves.MOUNTAIN_GALE, Moves.COLLISION_COURSE ], [Species.STANTLER]: [ Moves.THUNDEROUS_KICK, Moves.PHOTON_GEYSER, Moves.SWORDS_DANCE, Moves.BOOMBURST ], [Species.SMEARGLE]: [ Moves.CONVERSION, Moves.BURNING_BULWARK, Moves.SALT_CURE, Moves.DARK_VOID ], @@ -132,7 +132,7 @@ export const speciesEggMoves = { [Species.TREECKO]: [ Moves.NASTY_PLOT, Moves.CORE_ENFORCER, Moves.FLAMETHROWER, Moves.SEED_FLARE ], [Species.TORCHIC]: [ Moves.THUNDEROUS_KICK, Moves.ZING_ZAP, Moves.BURNING_BULWARK, Moves.PYRO_BALL ], [Species.MUDKIP]: [ Moves.SHORE_UP, Moves.MOUNTAIN_GALE, Moves.AQUA_STEP, Moves.PRECIPICE_BLADES ], - [Species.POOCHYENA]: [ Moves.JAW_LOCK, Moves.CLOSE_COMBAT, Moves.DIRE_CLAW, Moves.NO_RETREAT ], + [Species.POOCHYENA]: [ Moves.KNOCK_OFF, Moves.CLOSE_COMBAT, Moves.DIRE_CLAW, Moves.VICTORY_DANCE ], [Species.ZIGZAGOON]: [ Moves.EXTREME_SPEED, Moves.NUZZLE, Moves.HIGH_HORSEPOWER, Moves.TIDY_UP ], [Species.WURMPLE]: [ Moves.BATON_PASS, Moves.BLEAKWIND_STORM, Moves.STORED_POWER, Moves.MALIGNANT_CHAIN ], [Species.LOTAD]: [ Moves.REVELATION_DANCE, Moves.APPLE_ACID, Moves.ICE_BEAM, Moves.QUIVER_DANCE ], @@ -159,7 +159,7 @@ export const speciesEggMoves = { [Species.VOLBEAT]: [ Moves.BATON_PASS, Moves.STICKY_WEB, Moves.DECORATE, Moves.VICTORY_DANCE ], [Species.ILLUMISE]: [ Moves.PARTING_SHOT, Moves.GLITZY_GLOW, Moves.POWDER, Moves.QUIVER_DANCE ], [Species.GULPIN]: [ Moves.MALIGNANT_CHAIN, Moves.EARTH_POWER, Moves.CALM_MIND, Moves.STRENGTH_SAP ], - [Species.CARVANHA]: [ Moves.THUNDER_FANG, Moves.SWORDS_DANCE, Moves.OBSTRUCT, Moves.SURGING_STRIKES ], + [Species.CARVANHA]: [ Moves.THUNDER_FANG, Moves.GUNK_SHOT, Moves.OBSTRUCT, Moves.SURGING_STRIKES ], [Species.WAILMER]: [ Moves.TAKE_HEART, Moves.COMEUPPANCE, Moves.SLACK_OFF, Moves.STEAM_ERUPTION ], [Species.NUMEL]: [ Moves.TRICK_ROOM, Moves.ENERGY_BALL, Moves.SLACK_OFF, Moves.BLUE_FLARE ], [Species.TORKOAL]: [ Moves.MORNING_SUN, Moves.BURNING_BULWARK, Moves.BODY_PRESS, Moves.HYDRO_STEAM ], @@ -185,26 +185,26 @@ export const speciesEggMoves = { [Species.TROPIUS]: [ Moves.STUFF_CHEEKS, Moves.EARTH_POWER, Moves.APPLE_ACID, Moves.SAPPY_SEED ], [Species.ABSOL]: [ Moves.KOWTOW_CLEAVE, Moves.SACRED_SWORD, Moves.PSYBLADE, Moves.BITTER_BLADE ], [Species.WYNAUT]: [ Moves.RECOVER, Moves.SHED_TAIL, Moves.TAUNT, Moves.COMEUPPANCE ], - [Species.SNORUNT]: [ Moves.FREEZY_FROST, Moves.EXTREME_SPEED, Moves.EARTH_POWER, Moves.NO_RETREAT ], + [Species.SNORUNT]: [ Moves.SPARKLY_SWIRL, Moves.NASTY_PLOT, Moves.EARTH_POWER, Moves.BLOOD_MOON ], [Species.SPHEAL]: [ Moves.FLIP_TURN, Moves.FREEZE_DRY, Moves.SLACK_OFF, Moves.STEAM_ERUPTION ], [Species.CLAMPERL]: [ Moves.SHELL_SIDE_ARM, Moves.BOUNCY_BUBBLE, Moves.FREEZE_DRY, Moves.STEAM_ERUPTION ], [Species.RELICANTH]: [ Moves.DRAGON_DANCE, Moves.SHORE_UP, Moves.WAVE_CRASH, Moves.DIAMOND_STORM ], [Species.LUVDISC]: [ Moves.BATON_PASS, Moves.HEART_SWAP, Moves.GLITZY_GLOW, Moves.REVIVAL_BLESSING ], - [Species.BAGON]: [ Moves.FLOATY_FALL, Moves.FIRE_LASH, Moves.DRAGON_DANCE, Moves.DRAGON_DARTS ], + [Species.BAGON]: [ Moves.HEADLONG_RUSH, Moves.FIRE_LASH, Moves.DRAGON_DANCE, Moves.DRAGON_DARTS ], [Species.BELDUM]: [ Moves.HEADLONG_RUSH, Moves.DRAIN_PUNCH, Moves.TRIPLE_AXEL, Moves.SHIFT_GEAR ], [Species.REGIROCK]: [ Moves.STONE_AXE, Moves.BODY_PRESS, Moves.SHORE_UP, Moves.SALT_CURE ], [Species.REGICE]: [ Moves.EARTH_POWER, Moves.TAKE_HEART, Moves.RECOVER, Moves.FREEZE_DRY ], [Species.REGISTEEL]: [ Moves.BODY_PRESS, Moves.SIZZLY_SLIDE, Moves.RECOVER, Moves.GIGATON_HAMMER ], [Species.LATIAS]: [ Moves.CORE_ENFORCER, Moves.FUSION_FLARE, Moves.SPARKLY_SWIRL, Moves.MYSTICAL_POWER ], [Species.LATIOS]: [ Moves.CORE_ENFORCER, Moves.BLUE_FLARE, Moves.NASTY_PLOT, Moves.TACHYON_CUTTER ], - [Species.KYOGRE]: [ Moves.WILDBOLT_STORM, Moves.HURRICANE, Moves.FREEZY_FROST, Moves.BOUNCY_BUBBLE ], + [Species.KYOGRE]: [ Moves.RECOVER, Moves.HURRICANE, Moves.FREEZY_FROST, Moves.WILDBOLT_STORM ], [Species.GROUDON]: [ Moves.STONE_AXE, Moves.SOLAR_BLADE, Moves.MORNING_SUN, Moves.SACRED_FIRE ], [Species.RAYQUAZA]: [ Moves.V_CREATE, Moves.DRAGON_DARTS, Moves.CORE_ENFORCER, Moves.OBLIVION_WING ], [Species.JIRACHI]: [ Moves.TACHYON_CUTTER, Moves.TRIPLE_ARROWS, Moves.ROCK_SLIDE, Moves.SHELL_SMASH ], [Species.DEOXYS]: [ Moves.COLLISION_COURSE, Moves.FUSION_FLARE, Moves.PARTING_SHOT, Moves.LUMINA_CRASH ], [Species.TURTWIG]: [ Moves.SHELL_SMASH, Moves.MIGHTY_CLEAVE, Moves.ICE_SPINNER, Moves.SAPPY_SEED ], - [Species.CHIMCHAR]: [ Moves.FIERY_DANCE, Moves.SECRET_SWORD, Moves.TRIPLE_AXEL, Moves.SACRED_FIRE ], + [Species.CHIMCHAR]: [ Moves.THUNDERBOLT, Moves.SECRET_SWORD, Moves.TRIPLE_AXEL, Moves.SACRED_FIRE ], [Species.PIPLUP]: [ Moves.KINGS_SHIELD, Moves.TACHYON_CUTTER, Moves.FREEZE_DRY, Moves.STEAM_ERUPTION ], [Species.STARLY]: [ Moves.SWORDS_DANCE, Moves.HEAD_CHARGE, Moves.FLARE_BLITZ, Moves.EXTREME_SPEED ], [Species.BIDOOF]: [ Moves.EXTREME_SPEED, Moves.COSMIC_POWER, Moves.POWER_TRIP, Moves.AQUA_STEP ], @@ -215,15 +215,15 @@ export const speciesEggMoves = { [Species.SHIELDON]: [ Moves.SHORE_UP, Moves.BODY_PRESS, Moves.KINGS_SHIELD, Moves.DIAMOND_STORM ], [Species.BURMY]: [ Moves.FIERY_DANCE, Moves.DEFEND_ORDER, Moves.HEAL_ORDER, Moves.SAPPY_SEED ], [Species.COMBEE]: [ Moves.SPORE, Moves.FLOATY_FALL, Moves.KINGS_SHIELD, Moves.VICTORY_DANCE ], - [Species.PACHIRISU]: [ Moves.FREEZY_FROST, Moves.SIZZLY_SLIDE, Moves.SLACK_OFF, Moves.ZIPPY_ZAP ], + [Species.PACHIRISU]: [ Moves.FREEZY_FROST, Moves.SIZZLY_SLIDE, Moves.SLACK_OFF, Moves.THUNDER_CAGE ], [Species.BUIZEL]: [ Moves.JET_PUNCH, Moves.TRIPLE_AXEL, Moves.SUPERCELL_SLAM, Moves.SURGING_STRIKES ], [Species.CHERUBI]: [ Moves.SLEEP_POWDER, Moves.STRENGTH_SAP, Moves.FIRE_LASH, Moves.FLOWER_TRICK ], [Species.SHELLOS]: [ Moves.BOUNCY_BUBBLE, Moves.SCORCHING_SANDS, Moves.FREEZE_DRY, Moves.STEAM_ERUPTION ], - [Species.DRIFLOON]: [ Moves.WILL_O_WISP, Moves.MIND_BLOWN, Moves.CALM_MIND, Moves.OBLIVION_WING ], - [Species.BUNEARY]: [ Moves.TRIPLE_AXEL, Moves.SWORDS_DANCE, Moves.THUNDEROUS_KICK, Moves.MULTI_ATTACK ], + [Species.DRIFLOON]: [ Moves.PSYCHO_SHIFT, Moves.MIND_BLOWN, Moves.CALM_MIND, Moves.OBLIVION_WING ], + [Species.BUNEARY]: [ Moves.TRIPLE_AXEL, Moves.EXTREME_SPEED, Moves.THUNDEROUS_KICK, Moves.SWORDS_DANCE ], [Species.GLAMEOW]: [ Moves.PARTING_SHOT, Moves.HIGH_HORSEPOWER, Moves.SWORDS_DANCE, Moves.EXTREME_SPEED ], [Species.CHINGLING]: [ Moves.BUZZY_BUZZ, Moves.EERIE_SPELL, Moves.TORCH_SONG, Moves.BOOMBURST ], - [Species.STUNKY]: [ Moves.CEASELESS_EDGE, Moves.KNOCK_OFF, Moves.RECOVER, Moves.DIRE_CLAW ], + [Species.STUNKY]: [ Moves.CEASELESS_EDGE, Moves.FIRE_LASH, Moves.RECOVER, Moves.DIRE_CLAW ], [Species.BRONZOR]: [ Moves.RECOVER, Moves.TACHYON_CUTTER, Moves.GLARE, Moves.LUMINA_CRASH ], [Species.BONSLY]: [ Moves.ACCELEROCK, Moves.SWORDS_DANCE, Moves.STRENGTH_SAP, Moves.SAPPY_SEED ], [Species.MIME_JR]: [ Moves.CHILLY_RECEPTION, Moves.MOONBLAST, Moves.FROST_BREATH, Moves.LUMINA_CRASH ], @@ -235,20 +235,20 @@ export const speciesEggMoves = { [Species.RIOLU]: [ Moves.THUNDEROUS_KICK, Moves.TACHYON_CUTTER, Moves.TRIPLE_AXEL, Moves.SUNSTEEL_STRIKE ], [Species.HIPPOPOTAS]: [ Moves.SHORE_UP, Moves.STONE_AXE, Moves.BULK_UP, Moves.SALT_CURE ], [Species.SKORUPI]: [ Moves.COIL, Moves.DIRE_CLAW, Moves.CRABHAMMER, Moves.WICKED_BLOW ], - [Species.CROAGUNK]: [ Moves.DIRE_CLAW, Moves.ICE_SPINNER, Moves.THUNDEROUS_KICK, Moves.VICTORY_DANCE ], + [Species.CROAGUNK]: [ Moves.DIRE_CLAW, Moves.TRIPLE_AXEL, Moves.THUNDEROUS_KICK, Moves.VICTORY_DANCE ], [Species.CARNIVINE]: [ Moves.STRENGTH_SAP, Moves.FIRE_LASH, Moves.COIL, Moves.SAPPY_SEED ], - [Species.FINNEON]: [ Moves.QUIVER_DANCE, Moves.BOUNCY_BUBBLE, Moves.FREEZE_DRY, Moves.ORIGIN_PULSE ], + [Species.FINNEON]: [ Moves.QUIVER_DANCE, Moves.SPLISHY_SPLASH, Moves.FREEZE_DRY, Moves.OBLIVION_WING ], [Species.MANTYKE]: [ Moves.SPLISHY_SPLASH, Moves.FREEZY_FROST, Moves.NASTY_PLOT, Moves.OBLIVION_WING ], [Species.SNOVER]: [ Moves.LANDS_WRATH, Moves.POWDER, Moves.CALM_MIND, Moves.MATCHA_GOTCHA ], [Species.ROTOM]: [ Moves.STRENGTH_SAP, Moves.FIERY_DANCE, Moves.SPLISHY_SPLASH, Moves.ELECTRO_DRIFT ], - [Species.UXIE]: [ Moves.COSMIC_POWER, Moves.SECRET_SWORD, Moves.RECOVER, Moves.SPARKLY_SWIRL ], - [Species.MESPRIT]: [ Moves.TAIL_GLOW, Moves.AURA_SPHERE, Moves.RECOVER, Moves.LUMINA_CRASH ], - [Species.AZELF]: [ Moves.PSYSTRIKE, Moves.ICE_BEAM, Moves.MOONBLAST, Moves.TAIL_GLOW ], + [Species.UXIE]: [ Moves.LUMINA_CRASH, Moves.AURA_SPHERE, Moves.RECOVER, Moves.TAIL_GLOW ], + [Species.MESPRIT]: [ Moves.PHOTON_GEYSER, Moves.AURA_SPHERE, Moves.RECOVER, Moves.TAIL_GLOW ], + [Species.AZELF]: [ Moves.PSYSTRIKE, Moves.AURA_SPHERE, Moves.ICE_BEAM, Moves.TAIL_GLOW ], [Species.DIALGA]: [ Moves.CORE_ENFORCER, Moves.TAKE_HEART, Moves.RECOVER, Moves.MAKE_IT_RAIN ], [Species.PALKIA]: [ Moves.MALIGNANT_CHAIN, Moves.TAKE_HEART, Moves.RECOVER, Moves.ORIGIN_PULSE ], [Species.HEATRAN]: [ Moves.MATCHA_GOTCHA, Moves.RECOVER, Moves.ERUPTION, Moves.TACHYON_CUTTER ], [Species.REGIGIGAS]: [ Moves.SKILL_SWAP, Moves.RECOVER, Moves.EXTREME_SPEED, Moves.GIGATON_HAMMER ], - [Species.GIRATINA]: [ Moves.DRAGON_DANCE, Moves.GLAIVE_RUSH, Moves.RECOVER, Moves.SPECTRAL_THIEF ], + [Species.GIRATINA]: [ Moves.DRAGON_DANCE, Moves.SPECTRAL_THIEF, Moves.RECOVER, Moves.COLLISION_COURSE ], [Species.CRESSELIA]: [ Moves.COSMIC_POWER, Moves.BODY_PRESS, Moves.SIZZLY_SLIDE, Moves.LUMINA_CRASH ], [Species.PHIONE]: [ Moves.BOUNCY_BUBBLE, Moves.FREEZE_DRY, Moves.STORED_POWER, Moves.ORIGIN_PULSE ], [Species.MANAPHY]: [ Moves.BOUNCY_BUBBLE, Moves.FROST_BREATH, Moves.WILDBOLT_STORM, Moves.ORIGIN_PULSE ], @@ -264,14 +264,14 @@ export const speciesEggMoves = { [Species.LILLIPUP]: [ Moves.CLOSE_COMBAT, Moves.BODY_SLAM, Moves.HIGH_HORSEPOWER, Moves.LAST_RESPECTS ], [Species.PURRLOIN]: [ Moves.ENCORE, Moves.OBSTRUCT, Moves.PARTING_SHOT, Moves.WICKED_BLOW ], [Species.PANSAGE]: [ Moves.SWORDS_DANCE, Moves.FIRE_LASH, Moves.EARTHQUAKE, Moves.IVY_CUDGEL ], - [Species.PANSEAR]: [ Moves.NASTY_PLOT, Moves.HYDRO_STEAM, Moves.SCORCHING_SANDS, Moves.TORCH_SONG ], - [Species.PANPOUR]: [ Moves.NASTY_PLOT, Moves.ENERGY_BALL, Moves.EARTH_POWER, Moves.STEAM_ERUPTION ], + [Species.PANSEAR]: [ Moves.NASTY_PLOT, Moves.HYDRO_STEAM, Moves.EARTH_POWER, Moves.ERUPTION ], + [Species.PANPOUR]: [ Moves.NASTY_PLOT, Moves.ENERGY_BALL, Moves.EARTH_POWER, Moves.WATER_SPOUT ], [Species.MUNNA]: [ Moves.COSMIC_POWER, Moves.AURA_SPHERE, Moves.LUNAR_BLESSING, Moves.MYSTICAL_POWER ], - [Species.PIDOVE]: [ Moves.GUNK_SHOT, Moves.TIDY_UP, Moves.FLOATY_FALL, Moves.TRIPLE_ARROWS ], + [Species.PIDOVE]: [ Moves.SLASH, Moves.TIDY_UP, Moves.FLOATY_FALL, Moves.TRIPLE_ARROWS ], [Species.BLITZLE]: [ Moves.HORN_LEECH, Moves.SWORDS_DANCE, Moves.FLARE_BLITZ, Moves.BOLT_STRIKE ], [Species.ROGGENROLA]: [ Moves.BODY_PRESS, Moves.CURSE, Moves.SHORE_UP, Moves.DIAMOND_STORM ], [Species.WOOBAT]: [ Moves.ESPER_WING, Moves.STORED_POWER, Moves.MYSTICAL_FIRE, Moves.OBLIVION_WING ], - [Species.DRILBUR]: [ Moves.METEOR_MASH, Moves.MOUNTAIN_GALE, Moves.SHIFT_GEAR, Moves.PRECIPICE_BLADES ], + [Species.DRILBUR]: [ Moves.METEOR_MASH, Moves.ICE_SPINNER, Moves.SHIFT_GEAR, Moves.THOUSAND_ARROWS ], [Species.AUDINO]: [ Moves.TAKE_HEART, Moves.MOONBLAST, Moves.WISH, Moves.MATCHA_GOTCHA ], [Species.TIMBURR]: [ Moves.MACH_PUNCH, Moves.DRAIN_PUNCH, Moves.ICE_HAMMER, Moves.DOUBLE_IRON_BASH ], [Species.TYMPOLE]: [ Moves.JET_PUNCH, Moves.HIGH_HORSEPOWER, Moves.BULK_UP, Moves.SURGING_STRIKES ], @@ -282,7 +282,7 @@ export const speciesEggMoves = { [Species.COTTONEE]: [ Moves.POLLEN_PUFF, Moves.PARTING_SHOT, Moves.SLEEP_POWDER, Moves.SEED_FLARE ], [Species.PETILIL]: [ Moves.THUNDEROUS_KICK, Moves.SPARKLING_ARIA, Moves.FIERY_DANCE, Moves.FLOWER_TRICK ], [Species.BASCULIN]: [ Moves.LAST_RESPECTS, Moves.CLOSE_COMBAT, Moves.SPLISHY_SPLASH, Moves.NO_RETREAT ], - [Species.SANDILE]: [ Moves.DIRE_CLAW, Moves.HEADLONG_RUSH, Moves.FIRE_LASH, Moves.WICKED_BLOW ], + [Species.SANDILE]: [ Moves.DIRE_CLAW, Moves.SUCKER_PUNCH, Moves.FIRE_LASH, Moves.HEADLONG_RUSH ], [Species.DARUMAKA]: [ Moves.DRAIN_PUNCH, Moves.ZIPPY_ZAP, Moves.HEADLONG_RUSH, Moves.PYRO_BALL ], [Species.MARACTUS]: [ Moves.EARTH_POWER, Moves.QUIVER_DANCE, Moves.FIERY_DANCE, Moves.SEED_FLARE ], [Species.DWEBBLE]: [ Moves.CRABHAMMER, Moves.STONE_AXE, Moves.LEECH_LIFE, Moves.MIGHTY_CLEAVE ], @@ -298,18 +298,18 @@ export const speciesEggMoves = { [Species.SOLOSIS]: [ Moves.MIST_BALL, Moves.SPEED_SWAP, Moves.FLAMETHROWER, Moves.LIGHT_OF_RUIN ], [Species.DUCKLETT]: [ Moves.SPLISHY_SPLASH, Moves.SANDSEAR_STORM, Moves.WILDBOLT_STORM, Moves.QUIVER_DANCE ], [Species.VANILLITE]: [ Moves.EARTH_POWER, Moves.AURORA_VEIL, Moves.CALM_MIND, Moves.SPARKLY_SWIRL ], - [Species.DEERLING]: [ Moves.TIDY_UP, Moves.FLOWER_TRICK, Moves.BODY_SLAM, Moves.COMBAT_TORQUE ], + [Species.DEERLING]: [ Moves.TIDY_UP, Moves.HEADBUTT, Moves.COMBAT_TORQUE, Moves.FLOWER_TRICK ], [Species.EMOLGA]: [ Moves.ICICLE_CRASH, Moves.ZING_ZAP, Moves.FLOATY_FALL, Moves.ELECTRIFY ], [Species.KARRABLAST]: [ Moves.LEECH_LIFE, Moves.BITTER_BLADE, Moves.OBSTRUCT, Moves.DOUBLE_IRON_BASH ], [Species.FOONGUS]: [ Moves.POLLEN_PUFF, Moves.PARTING_SHOT, Moves.FOUL_PLAY, Moves.SAPPY_SEED ], [Species.FRILLISH]: [ Moves.CALM_MIND, Moves.BUZZY_BUZZ, Moves.FREEZE_DRY, Moves.STEAM_ERUPTION ], [Species.ALOMOMOLA]: [ Moves.FLIP_TURN, Moves.HEART_SWAP, Moves.GLITZY_GLOW, Moves.REVIVAL_BLESSING ], [Species.JOLTIK]: [ Moves.WILDBOLT_STORM, Moves.PARABOLIC_CHARGE, Moves.EARTH_POWER, Moves.QUIVER_DANCE ], - [Species.FERROSEED]: [ Moves.SYNTHESIS, Moves.COMBAT_TORQUE, Moves.SPIKY_SHIELD, Moves.SAPPY_SEED ], + [Species.FERROSEED]: [ Moves.SYNTHESIS, Moves.CEASELESS_EDGE, Moves.SPIKY_SHIELD, Moves.SAPPY_SEED ], [Species.KLINK]: [ Moves.TRIPLE_AXEL, Moves.HIGH_HORSEPOWER, Moves.RECOVER, Moves.AURA_WHEEL ], [Species.TYNAMO]: [ Moves.SCALD, Moves.STRENGTH_SAP, Moves.FIRE_LASH, Moves.AURA_WHEEL ], [Species.ELGYEM]: [ Moves.THUNDERCLAP, Moves.BADDY_BAD, Moves.AURA_SPHERE, Moves.PHOTON_GEYSER ], - [Species.LITWICK]: [ Moves.PARTING_SHOT, Moves.EARTH_POWER, Moves.MOONBLAST, Moves.TORCH_SONG ], + [Species.LITWICK]: [ Moves.GIGA_DRAIN, Moves.EARTH_POWER, Moves.MOONBLAST, Moves.TORCH_SONG ], [Species.AXEW]: [ Moves.STONE_AXE, Moves.DIRE_CLAW, Moves.BITTER_BLADE, Moves.GLAIVE_RUSH ], [Species.CUBCHOO]: [ Moves.MOUNTAIN_GALE, Moves.AQUA_STEP, Moves.ICE_SHARD, Moves.COLLISION_COURSE ], [Species.CRYOGONAL]: [ Moves.FREEZING_GLARE, Moves.AURORA_VEIL, Moves.NASTY_PLOT, Moves.ORIGIN_PULSE ], @@ -325,14 +325,14 @@ export const speciesEggMoves = { [Species.HEATMOR]: [ Moves.EARTH_POWER, Moves.OVERHEAT, Moves.THUNDERBOLT, Moves.V_CREATE ], [Species.DURANT]: [ Moves.HIGH_HORSEPOWER, Moves.FIRST_IMPRESSION, Moves.SWORDS_DANCE, Moves.BEHEMOTH_BASH ], [Species.DEINO]: [ Moves.FIERY_WRATH, Moves.ESPER_WING, Moves.SLUDGE_BOMB, Moves.FICKLE_BEAM ], - [Species.LARVESTA]: [ Moves.THUNDERBOLT, Moves.MAGMA_STORM, Moves.EARTH_POWER, Moves.MATCHA_GOTCHA ], + [Species.LARVESTA]: [ Moves.THUNDERBOLT, Moves.DAZZLING_GLEAM, Moves.EARTH_POWER, Moves.HYDRO_STEAM ], [Species.COBALION]: [ Moves.BEHEMOTH_BLADE, Moves.MIGHTY_CLEAVE, Moves.CEASELESS_EDGE, Moves.VICTORY_DANCE ], - [Species.TERRAKION]: [ Moves.MIGHTY_CLEAVE, Moves.HEADLONG_RUSH, Moves.CEASELESS_EDGE, Moves.VICTORY_DANCE ], - [Species.VIRIZION]: [ Moves.PSYBLADE, Moves.SAPPY_SEED, Moves.CEASELESS_EDGE, Moves.VICTORY_DANCE ], + [Species.TERRAKION]: [ Moves.MIGHTY_CLEAVE, Moves.HEADLONG_RUSH, Moves.KNOCK_OFF, Moves.VICTORY_DANCE ], + [Species.VIRIZION]: [ Moves.SAPPY_SEED, Moves.PSYBLADE, Moves.STONE_AXE, Moves.VICTORY_DANCE ], [Species.TORNADUS]: [ Moves.SANDSEAR_STORM, Moves.PARTING_SHOT, Moves.SPLISHY_SPLASH, Moves.OBLIVION_WING ], [Species.THUNDURUS]: [ Moves.SANDSEAR_STORM, Moves.HURRICANE, Moves.FROST_BREATH, Moves.ELECTRO_SHOT ], [Species.RESHIRAM]: [ Moves.ENERGY_BALL, Moves.TAKE_HEART, Moves.FICKLE_BEAM, Moves.ERUPTION ], - [Species.ZEKROM]: [ Moves.TRIPLE_AXEL, Moves.THUNDEROUS_KICK, Moves.DRAGON_HAMMER, Moves.BOLT_BEAK ], + [Species.ZEKROM]: [ Moves.TRIPLE_AXEL, Moves.THUNDEROUS_KICK, Moves.DRAGON_HAMMER, Moves.DRAGON_ENERGY ], [Species.LANDORUS]: [ Moves.STONE_AXE, Moves.FLOATY_FALL, Moves.ROOST, Moves.BLEAKWIND_STORM ], [Species.KYUREM]: [ Moves.DRAGON_DARTS, Moves.GLACIAL_LANCE, Moves.NO_RETREAT, Moves.DRAGON_ENERGY ], [Species.KELDEO]: [ Moves.BOUNCY_BUBBLE, Moves.THUNDERBOLT, Moves.ICE_BEAM, Moves.STEAM_ERUPTION ], @@ -342,7 +342,7 @@ export const speciesEggMoves = { [Species.CHESPIN]: [ Moves.COMBAT_TORQUE, Moves.SYNTHESIS, Moves.CEASELESS_EDGE, Moves.SAPPY_SEED ], [Species.FENNEKIN]: [ Moves.TWIN_BEAM, Moves.FIERY_DANCE, Moves.THUNDERBOLT, Moves.SPARKLY_SWIRL ], [Species.FROAKIE]: [ Moves.MOONBLAST, Moves.SHELL_SIDE_ARM, Moves.FIERY_WRATH, Moves.STEAM_ERUPTION ], - [Species.BUNNELBY]: [ Moves.DRAIN_PUNCH, Moves.TIDY_UP, Moves.FACADE, Moves.EXTREME_SPEED ], + [Species.BUNNELBY]: [ Moves.DRAIN_PUNCH, Moves.TIDY_UP, Moves.LANDS_WRATH, Moves.EXTREME_SPEED ], [Species.FLETCHLING]: [ Moves.DRILL_RUN, Moves.BURNING_BULWARK, Moves.HEAD_SMASH, Moves.VOLT_TACKLE ], [Species.SCATTERBUG]: [ Moves.FOCUS_BLAST, Moves.AFTER_YOU, Moves.DECORATE, Moves.BLIZZARD ], [Species.LITLEO]: [ Moves.EARTH_POWER, Moves.NASTY_PLOT, Moves.BURNING_BULWARK, Moves.BLUE_FLARE ], @@ -366,35 +366,35 @@ export const speciesEggMoves = { [Species.CARBINK]: [ Moves.BODY_PRESS, Moves.SHORE_UP, Moves.SPARKLY_SWIRL, Moves.DIAMOND_STORM ], [Species.GOOMY]: [ Moves.DRAGON_HAMMER, Moves.RECOVER, Moves.CALM_MIND, Moves.MAKE_IT_RAIN ], [Species.KLEFKI]: [ Moves.HEAL_BELL, Moves.ENCORE, Moves.INSTRUCT, Moves.TOPSY_TURVY ], - [Species.PHANTUMP]: [ Moves.RAGE_FIST, Moves.SLEEP_POWDER, Moves.SYNTHESIS, Moves.SAPPY_SEED ], + [Species.PHANTUMP]: [ Moves.RAGE_FIST, Moves.SLEEP_POWDER, Moves.BULK_UP, Moves.SAPPY_SEED ], [Species.PUMPKABOO]: [ Moves.SPIRIT_SHACKLE, Moves.FIRE_LASH, Moves.DIRE_CLAW, Moves.SAPPY_SEED ], [Species.BERGMITE]: [ Moves.STONE_AXE, Moves.METAL_BURST, Moves.BODY_PRESS, Moves.GLACIAL_LANCE ], [Species.NOIBAT]: [ Moves.AEROBLAST, Moves.OVERDRIVE, Moves.NASTY_PLOT, Moves.CLANGING_SCALES ], [Species.XERNEAS]: [ Moves.EARTH_POWER, Moves.SPRINGTIDE_STORM, Moves.STRENGTH_SAP, Moves.TAIL_GLOW ], - [Species.YVELTAL]: [ Moves.SHELL_SIDE_ARM, Moves.POWER_TRIP, Moves.FIERY_WRATH, Moves.CLANGOROUS_SOUL ], - [Species.ZYGARDE]: [ Moves.DRAGON_DARTS, Moves.HEAL_ORDER, Moves.CLANGOROUS_SOUL, Moves.DOUBLE_IRON_BASH ], + [Species.YVELTAL]: [ Moves.SLUDGE_WAVE, Moves.POWER_TRIP, Moves.FIERY_WRATH, Moves.CLANGOROUS_SOUL ], + [Species.ZYGARDE]: [ Moves.DRAGON_DARTS, Moves.V_CREATE, Moves.CLANGOROUS_SOUL, Moves.HEAL_ORDER ], [Species.DIANCIE]: [ Moves.MAGICAL_TORQUE, Moves.FIERY_DANCE, Moves.SHORE_UP, Moves.GEOMANCY ], [Species.HOOPA]: [ Moves.PHOTON_GEYSER, Moves.SECRET_SWORD, Moves.FIERY_WRATH, Moves.SHELL_SMASH ], - [Species.VOLCANION]: [ Moves.HYDRO_STEAM, Moves.CALM_MIND, Moves.ENERGY_BALL, Moves.MAGMA_STORM ], + [Species.VOLCANION]: [ Moves.HYDRO_STEAM, Moves.CALM_MIND, Moves.SEARING_SHOT, Moves.THUNDERCLAP ], [Species.ETERNAL_FLOETTE]: [ Moves.MIND_BLOWN, Moves.CHLOROBLAST, Moves.LUSTER_PURGE, Moves.QUIVER_DANCE ], [Species.ROWLET]: [ Moves.THOUSAND_ARROWS, Moves.SHADOW_BONE, Moves.FIRST_IMPRESSION, Moves.VICTORY_DANCE ], [Species.LITTEN]: [ Moves.SUCKER_PUNCH, Moves.PARTING_SHOT, Moves.SLACK_OFF, Moves.SACRED_FIRE ], - [Species.POPPLIO]: [ Moves.PSYCHIC_NOISE, Moves.BOUNCY_BUBBLE, Moves.OVERDRIVE, Moves.TORCH_SONG ], + [Species.POPPLIO]: [ Moves.PSYCHIC_NOISE, Moves.MOONLIGHT, Moves.OVERDRIVE, Moves.TORCH_SONG ], [Species.PIKIPEK]: [ Moves.DUAL_WINGBEAT, Moves.BONE_RUSH, Moves.BURNING_BULWARK, Moves.POPULATION_BOMB ], [Species.YUNGOOS]: [ Moves.EXTREME_SPEED, Moves.KNOCK_OFF, Moves.TIDY_UP, Moves.MULTI_ATTACK ], [Species.GRUBBIN]: [ Moves.ICE_BEAM, Moves.EARTH_POWER, Moves.THUNDERCLAP, Moves.QUIVER_DANCE ], - [Species.CRABRAWLER]: [ Moves.JET_PUNCH, Moves.SHORE_UP, Moves.SUCKER_PUNCH, Moves.SURGING_STRIKES ], + [Species.CRABRAWLER]: [ Moves.JET_PUNCH, Moves.SHORE_UP, Moves.MACH_PUNCH, Moves.SURGING_STRIKES ], [Species.ORICORIO]: [ Moves.QUIVER_DANCE, Moves.FIERY_DANCE, Moves.THUNDERCLAP, Moves.OBLIVION_WING ], [Species.CUTIEFLY]: [ Moves.STICKY_WEB, Moves.SLEEP_POWDER, Moves.HEAT_WAVE, Moves.SPARKLY_SWIRL ], [Species.ROCKRUFF]: [ Moves.HIGH_HORSEPOWER, Moves.TIDY_UP, Moves.ICE_SPINNER, Moves.MIGHTY_CLEAVE ], [Species.WISHIWASHI]: [ Moves.HEAL_ORDER, Moves.FREEZE_DRY, Moves.WATER_SHURIKEN, Moves.TAIL_GLOW ], [Species.MAREANIE]: [ Moves.CEASELESS_EDGE, Moves.SIZZLY_SLIDE, Moves.BODY_PRESS, Moves.LEECH_SEED ], [Species.MUDBRAY]: [ Moves.BODY_PRESS, Moves.YAWN, Moves.SHORE_UP, Moves.THOUSAND_WAVES ], - [Species.DEWPIDER]: [ Moves.JET_PUNCH, Moves.SILK_TRAP, Moves.SWORDS_DANCE, Moves.AQUA_STEP ], + [Species.DEWPIDER]: [ Moves.AQUA_STEP, Moves.SILK_TRAP, Moves.SWORDS_DANCE, Moves.JET_PUNCH ], [Species.FOMANTIS]: [ Moves.SUPERPOWER, Moves.HEADLONG_RUSH, Moves.ICE_HAMMER, Moves.BITTER_BLADE ], [Species.MORELULL]: [ Moves.CALM_MIND, Moves.SAPPY_SEED, Moves.DRAINING_KISS, Moves.MATCHA_GOTCHA ], - [Species.SALANDIT]: [ Moves.SCALD, Moves.SLUDGE_WAVE, Moves.CORE_ENFORCER, Moves.ERUPTION ], + [Species.SALANDIT]: [ Moves.SCALD, Moves.MALIGNANT_CHAIN, Moves.CORE_ENFORCER, Moves.ERUPTION ], [Species.STUFFUL]: [ Moves.DRAIN_PUNCH, Moves.METEOR_MASH, Moves.TRIPLE_AXEL, Moves.RAGE_FIST ], [Species.BOUNSWEET]: [ Moves.TRIPLE_AXEL, Moves.AQUA_STEP, Moves.THUNDEROUS_KICK, Moves.SAPPY_SEED ], [Species.COMFEY]: [ Moves.REVIVAL_BLESSING, Moves.TAKE_HEART, Moves.STRENGTH_SAP, Moves.MATCHA_GOTCHA ], @@ -415,26 +415,26 @@ export const speciesEggMoves = { [Species.JANGMO_O]: [ Moves.BODY_PRESS, Moves.SHELL_SIDE_ARM, Moves.SECRET_SWORD, Moves.GLAIVE_RUSH ], [Species.TAPU_KOKO]: [ Moves.MAGICAL_TORQUE, Moves.TRIPLE_AXEL, Moves.SWORDS_DANCE, Moves.BOLT_STRIKE ], [Species.TAPU_LELE]: [ Moves.MOONLIGHT, Moves.NASTY_PLOT, Moves.HEAT_WAVE, Moves.EXPANDING_FORCE ], - [Species.TAPU_BULU]: [ Moves.SAPPY_SEED, Moves.DRAIN_PUNCH, Moves.MAGICAL_TORQUE, Moves.VICTORY_DANCE ], - [Species.TAPU_FINI]: [ Moves.AURA_SPHERE, Moves.EARTH_POWER, Moves.RECOVER, Moves.QUIVER_DANCE ], + [Species.TAPU_BULU]: [ Moves.SAPPY_SEED, Moves.LANDS_WRATH, Moves.MAGICAL_TORQUE, Moves.VICTORY_DANCE ], + [Species.TAPU_FINI]: [ Moves.SPRINGTIDE_STORM, Moves.EARTH_POWER, Moves.RECOVER, Moves.QUIVER_DANCE ], [Species.COSMOG]: [ Moves.PHOTON_GEYSER, Moves.PRECIPICE_BLADES, Moves.SACRED_FIRE, Moves.ASTRAL_BARRAGE ], [Species.NIHILEGO]: [ Moves.STRENGTH_SAP, Moves.MALIGNANT_CHAIN, Moves.EARTH_POWER, Moves.QUIVER_DANCE ], [Species.BUZZWOLE]: [ Moves.FIRST_IMPRESSION, Moves.COMBAT_TORQUE, Moves.ROCK_BLAST, Moves.DOUBLE_IRON_BASH ], [Species.PHEROMOSA]: [ Moves.SECRET_SWORD, Moves.MAKE_IT_RAIN, Moves.ATTACK_ORDER, Moves.DIAMOND_STORM ], [Species.XURKITREE]: [ Moves.FLAMETHROWER, Moves.GIGA_DRAIN, Moves.TAIL_GLOW, Moves.THUNDERCLAP ], - [Species.CELESTEELA]: [ Moves.RECOVER, Moves.BUZZY_BUZZ, Moves.SANDSEAR_STORM, Moves.OBLIVION_WING ], + [Species.CELESTEELA]: [ Moves.RECOVER, Moves.BUZZY_BUZZ, Moves.EARTH_POWER, Moves.OBLIVION_WING ], [Species.KARTANA]: [ Moves.MIGHTY_CLEAVE, Moves.PSYBLADE, Moves.BITTER_BLADE, Moves.BEHEMOTH_BLADE ], [Species.GUZZLORD]: [ Moves.SUCKER_PUNCH, Moves.COMEUPPANCE, Moves.SLACK_OFF, Moves.SHED_TAIL ], [Species.NECROZMA]: [ Moves.DYNAMAX_CANNON, Moves.SACRED_FIRE, Moves.ASTRAL_BARRAGE, Moves.CLANGOROUS_SOUL ], [Species.MAGEARNA]: [ Moves.STRENGTH_SAP, Moves.EARTH_POWER, Moves.MOONBLAST, Moves.MAKE_IT_RAIN ], - [Species.MARSHADOW]: [ Moves.POWER_UP_PUNCH, Moves.TRIPLE_AXEL, Moves.METEOR_MASH, Moves.STORM_THROW ], + [Species.MARSHADOW]: [ Moves.POWER_UP_PUNCH, Moves.BONEMERANG, Moves.METEOR_MASH, Moves.TRIPLE_AXEL ], [Species.POIPOLE]: [ Moves.MALIGNANT_CHAIN, Moves.ICE_BEAM, Moves.ARMOR_CANNON, Moves.CLANGING_SCALES ], [Species.STAKATAKA]: [ Moves.HEAVY_SLAM, Moves.SHORE_UP, Moves.CURSE, Moves.SALT_CURE ], [Species.BLACEPHALON]: [ Moves.STEEL_BEAM, Moves.MOONBLAST, Moves.CHLOROBLAST, Moves.MOONGEIST_BEAM ], - [Species.ZERAORA]: [ Moves.SWORDS_DANCE, Moves.TRIPLE_AXEL, Moves.BOLT_STRIKE, Moves.PYRO_BALL ], + [Species.ZERAORA]: [ Moves.SWORDS_DANCE, Moves.U_TURN, Moves.COLLISION_COURSE, Moves.TRIPLE_AXEL ], [Species.MELTAN]: [ Moves.BULLET_PUNCH, Moves.DRAIN_PUNCH, Moves.BULK_UP, Moves.PLASMA_FISTS ], [Species.ALOLA_RATTATA]: [ Moves.FALSE_SURRENDER, Moves.PSYCHIC_FANGS, Moves.COIL, Moves.EXTREME_SPEED ], - [Species.ALOLA_SANDSHREW]: [ Moves.SPIKY_SHIELD, Moves.AQUA_CUTTER, Moves.SHIFT_GEAR, Moves.GLACIAL_LANCE ], + [Species.ALOLA_SANDSHREW]: [ Moves.SPIKY_SHIELD, Moves.LIQUIDATION, Moves.SHIFT_GEAR, Moves.GLACIAL_LANCE ], [Species.ALOLA_VULPIX]: [ Moves.MOONBLAST, Moves.PARTING_SHOT, Moves.EARTH_POWER, Moves.REVIVAL_BLESSING ], [Species.ALOLA_DIGLETT]: [ Moves.THOUSAND_WAVES, Moves.SWORDS_DANCE, Moves.TRIPLE_DIVE, Moves.MOUNTAIN_GALE ], [Species.ALOLA_MEOWTH]: [ Moves.BADDY_BAD, Moves.BUZZY_BUZZ, Moves.PARTING_SHOT, Moves.MAKE_IT_RAIN ], @@ -449,22 +449,22 @@ export const speciesEggMoves = { [Species.BLIPBUG]: [ Moves.HEAL_ORDER, Moves.LUSTER_PURGE, Moves.SLEEP_POWDER, Moves.TAIL_GLOW ], [Species.NICKIT]: [ Moves.BADDY_BAD, Moves.FLAMETHROWER, Moves.SPARKLY_SWIRL, Moves.MAKE_IT_RAIN ], [Species.GOSSIFLEUR]: [ Moves.PARTING_SHOT, Moves.STRENGTH_SAP, Moves.SAPPY_SEED, Moves.SEED_FLARE ], - [Species.WOOLOO]: [ Moves.PSYSHIELD_BASH, Moves.MILK_DRINK, Moves.BODY_PRESS, Moves.MULTI_ATTACK ], + [Species.WOOLOO]: [ Moves.NUZZLE, Moves.MILK_DRINK, Moves.BODY_PRESS, Moves.MULTI_ATTACK ], [Species.CHEWTLE]: [ Moves.ICE_FANG, Moves.PSYCHIC_FANGS, Moves.SHELL_SMASH, Moves.MIGHTY_CLEAVE ], [Species.YAMPER]: [ Moves.ICE_FANG, Moves.SWORDS_DANCE, Moves.THUNDER_FANG, Moves.BOLT_STRIKE ], [Species.ROLYCOLY]: [ Moves.BITTER_BLADE, Moves.BODY_PRESS, Moves.BULK_UP, Moves.DIAMOND_STORM ], [Species.APPLIN]: [ Moves.CORE_ENFORCER, Moves.DRAGON_HAMMER, Moves.FLOWER_TRICK, Moves.MATCHA_GOTCHA ], [Species.SILICOBRA]: [ Moves.SHORE_UP, Moves.SHED_TAIL, Moves.MOUNTAIN_GALE, Moves.THOUSAND_ARROWS ], - [Species.CRAMORANT]: [ Moves.APPLE_ACID, Moves.SURF, Moves.SCORCHING_SANDS, Moves.OBLIVION_WING ], + [Species.CRAMORANT]: [ Moves.APPLE_ACID, Moves.SURF, Moves.BOLT_BEAK, Moves.OBLIVION_WING ], [Species.ARROKUDA]: [ Moves.SUPERCELL_SLAM, Moves.TRIPLE_DIVE, Moves.ICE_SPINNER, Moves.SWORDS_DANCE ], [Species.TOXEL]: [ Moves.NASTY_PLOT, Moves.BUG_BUZZ, Moves.SPARKLING_ARIA, Moves.TORCH_SONG ], [Species.SIZZLIPEDE]: [ Moves.BURNING_BULWARK, Moves.ZING_ZAP, Moves.FIRST_IMPRESSION, Moves.BITTER_BLADE ], [Species.CLOBBOPUS]: [ Moves.STORM_THROW, Moves.JET_PUNCH, Moves.MACH_PUNCH, Moves.SURGING_STRIKES ], - [Species.SINISTEA]: [ Moves.SCALD, Moves.TAKE_HEART, Moves.SPARKLY_SWIRL, Moves.MATCHA_GOTCHA ], + [Species.SINISTEA]: [ Moves.SPLISHY_SPLASH, Moves.MATCHA_GOTCHA, Moves.DRAINING_KISS, Moves.MOONGEIST_BEAM ], [Species.HATENNA]: [ Moves.RECOVER, Moves.MOONBLAST, Moves.BUZZY_BUZZ, Moves.TORCH_SONG ], - [Species.IMPIDIMP]: [ Moves.ENCORE, Moves.PARTING_SHOT, Moves.TOPSY_TURVY, Moves.WICKED_BLOW ], + [Species.IMPIDIMP]: [ Moves.SLACK_OFF, Moves.PARTING_SHOT, Moves.OCTOLOCK, Moves.WICKED_BLOW ], [Species.MILCERY]: [ Moves.MOONBLAST, Moves.CHILLY_RECEPTION, Moves.EARTH_POWER, Moves.GEOMANCY ], - [Species.FALINKS]: [ Moves.COMBAT_TORQUE, Moves.PSYSHIELD_BASH, Moves.HEAL_ORDER, Moves.POPULATION_BOMB ], + [Species.FALINKS]: [ Moves.BATON_PASS, Moves.POWER_TRIP, Moves.HEAL_ORDER, Moves.COMBAT_TORQUE ], [Species.PINCURCHIN]: [ Moves.TRICK_ROOM, Moves.VOLT_SWITCH, Moves.STRENGTH_SAP, Moves.THUNDERCLAP ], [Species.SNOM]: [ Moves.FROST_BREATH, Moves.HEAL_ORDER, Moves.EARTH_POWER, Moves.SPORE ], [Species.STONJOURNER]: [ Moves.BODY_PRESS, Moves.HELPING_HAND, Moves.ACCELEROCK, Moves.DIAMOND_STORM ], @@ -484,9 +484,9 @@ export const speciesEggMoves = { [Species.KUBFU]: [ Moves.METEOR_MASH, Moves.DRAIN_PUNCH, Moves.JET_PUNCH, Moves.DRAGON_DANCE ], [Species.ZARUDE]: [ Moves.SAPPY_SEED, Moves.MIGHTY_CLEAVE, Moves.WICKED_BLOW, Moves.VICTORY_DANCE ], [Species.REGIELEKI]: [ Moves.NASTY_PLOT, Moves.ICE_BEAM, Moves.EARTH_POWER, Moves.ELECTRO_DRIFT ], - [Species.REGIDRAGO]: [ Moves.METEOR_MASH, Moves.FLAMETHROWER, Moves.TAKE_HEART, Moves.DRAGON_DARTS ], + [Species.REGIDRAGO]: [ Moves.SHELL_SIDE_ARM, Moves.FLAMETHROWER, Moves.TAKE_HEART, Moves.DRAGON_DARTS ], [Species.GLASTRIER]: [ Moves.SPEED_SWAP, Moves.SLACK_OFF, Moves.HIGH_HORSEPOWER, Moves.GLACIAL_LANCE ], - [Species.SPECTRIER]: [ Moves.EARTH_POWER, Moves.PARTING_SHOT, Moves.AURA_SPHERE, Moves.ASTRAL_BARRAGE ], + [Species.SPECTRIER]: [ Moves.EARTH_POWER, Moves.MOONLIGHT, Moves.AURA_SPHERE, Moves.ASTRAL_BARRAGE ], [Species.CALYREX]: [ Moves.SAPPY_SEED, Moves.RECOVER, Moves.SECRET_SWORD, Moves.PHOTON_GEYSER ], [Species.ENAMORUS]: [ Moves.AEROBLAST, Moves.THOUSAND_ARROWS, Moves.STORED_POWER, Moves.FLEUR_CANNON ], [Species.GALAR_MEOWTH]: [ Moves.LIQUIDATION, Moves.HORN_LEECH, Moves.BULLET_PUNCH, Moves.BEHEMOTH_BASH ], @@ -494,7 +494,7 @@ export const speciesEggMoves = { [Species.GALAR_SLOWPOKE]: [ Moves.SHED_TAIL, Moves.BADDY_BAD, Moves.MOONBLAST, Moves.PHOTON_GEYSER ], [Species.GALAR_FARFETCHD]: [ Moves.ROOST, Moves.SACRED_SWORD, Moves.KINGS_SHIELD, Moves.BEHEMOTH_BLADE ], [Species.GALAR_ARTICUNO]: [ Moves.SECRET_SWORD, Moves.NIGHT_DAZE, Moves.ICE_BEAM, Moves.OBLIVION_WING ], - [Species.GALAR_ZAPDOS]: [ Moves.TIDY_UP, Moves.FLOATY_FALL, Moves.ROOST, Moves.BOLT_BEAK ], + [Species.GALAR_ZAPDOS]: [ Moves.POISON_JAB, Moves.FLOATY_FALL, Moves.ROOST, Moves.BOLT_BEAK ], [Species.GALAR_MOLTRES]: [ Moves.ROOST, Moves.SLUDGE_BOMB, Moves.FLAMETHROWER, Moves.OBLIVION_WING ], [Species.GALAR_CORSOLA]: [ Moves.SHELL_SMASH, Moves.AURA_SPHERE, Moves.INFERNAL_PARADE, Moves.ASTRAL_BARRAGE ], [Species.GALAR_ZIGZAGOON]: [ Moves.CEASELESS_EDGE, Moves.FACADE, Moves.PARTING_SHOT, Moves.EXTREME_SPEED ], @@ -505,12 +505,12 @@ export const speciesEggMoves = { [Species.HISUI_VOLTORB]: [ Moves.FROST_BREATH, Moves.NASTY_PLOT, Moves.APPLE_ACID, Moves.ELECTRO_DRIFT ], [Species.HISUI_QWILFISH]: [ Moves.CEASELESS_EDGE, Moves.KNOCK_OFF, Moves.RECOVER, Moves.FISHIOUS_REND ], [Species.HISUI_SNEASEL]: [ Moves.DRAIN_PUNCH, Moves.KNOCK_OFF, Moves.PSYCHIC_FANGS, Moves.TRIPLE_AXEL ], - [Species.HISUI_ZORUA]: [ Moves.MOONBLAST, Moves.HYPER_VOICE, Moves.PARTING_SHOT, Moves.BLOOD_MOON ], + [Species.HISUI_ZORUA]: [ Moves.MOONBLAST, Moves.SECRET_SWORD, Moves.PARTING_SHOT, Moves.BLOOD_MOON ], [Species.SPRIGATITO]: [ Moves.FIRE_LASH, Moves.TRIPLE_AXEL, Moves.SUCKER_PUNCH, Moves.WICKED_BLOW ], [Species.FUECOCO]: [ Moves.ALLURING_VOICE, Moves.SLACK_OFF, Moves.OVERDRIVE, Moves.MOONGEIST_BEAM ], [Species.QUAXLY]: [ Moves.DRAGON_DANCE, Moves.TRIPLE_AXEL, Moves.POWER_TRIP, Moves.THUNDEROUS_KICK ], - [Species.LECHONK]: [ Moves.MILK_DRINK, Moves.PSYSHIELD_BASH, Moves.FILLET_AWAY, Moves.MULTI_ATTACK ], + [Species.LECHONK]: [ Moves.MILK_DRINK, Moves.PSYSHIELD_BASH, Moves.BLAZING_TORQUE, Moves.FILLET_AWAY ], [Species.TAROUNTULA]: [ Moves.STONE_AXE, Moves.LEECH_LIFE, Moves.THIEF, Moves.SPORE ], [Species.NYMBLE]: [ Moves.KNOCK_OFF, Moves.FELL_STINGER, Moves.ATTACK_ORDER, Moves.WICKED_BLOW ], [Species.PAWMI]: [ Moves.DRAIN_PUNCH, Moves.METEOR_MASH, Moves.JET_PUNCH, Moves.PLASMA_FISTS ], @@ -522,13 +522,13 @@ export const speciesEggMoves = { [Species.CHARCADET]: [ Moves.SACRED_SWORD, Moves.PHOTON_GEYSER, Moves.MOONBLAST, Moves.SPECTRAL_THIEF ], [Species.TADBULB]: [ Moves.PARABOLIC_CHARGE, Moves.SCALD, Moves.EARTH_POWER, Moves.ELECTRO_SHOT ], [Species.WATTREL]: [ Moves.NASTY_PLOT, Moves.SPLISHY_SPLASH, Moves.SANDSEAR_STORM, Moves.ELECTRO_SHOT ], - [Species.MASCHIFF]: [ Moves.PARTING_SHOT, Moves.CLOSE_COMBAT, Moves.PSYCHIC_FANGS, Moves.NO_RETREAT ], + [Species.MASCHIFF]: [ Moves.PARTING_SHOT, Moves.COMBAT_TORQUE, Moves.PSYCHIC_FANGS, Moves.NO_RETREAT ], [Species.SHROODLE]: [ Moves.GASTRO_ACID, Moves.PARTING_SHOT, Moves.TOXIC, Moves.SKETCH ], [Species.BRAMBLIN]: [ Moves.TAILWIND, Moves.STRENGTH_SAP, Moves.FLOWER_TRICK, Moves.LAST_RESPECTS ], [Species.TOEDSCOOL]: [ Moves.STRENGTH_SAP, Moves.TOPSY_TURVY, Moves.SAPPY_SEED, Moves.TAIL_GLOW ], [Species.KLAWF]: [ Moves.CRABHAMMER, Moves.SHORE_UP, Moves.MIGHTY_CLEAVE, Moves.SHELL_SMASH ], [Species.CAPSAKID]: [ Moves.STRENGTH_SAP, Moves.APPLE_ACID, Moves.FROST_BREATH, Moves.TORCH_SONG ], - [Species.RELLOR]: [ Moves.HEAL_BLOCK, Moves.RECOVER, Moves.HEAT_WAVE, Moves.LUMINA_CRASH ], + [Species.RELLOR]: [ Moves.HEAL_BLOCK, Moves.RECOVER, Moves.MAGIC_POWDER, Moves.LUMINA_CRASH ], [Species.FLITTLE]: [ Moves.COSMIC_POWER, Moves.AURA_SPHERE, Moves.ROOST, Moves.FIERY_DANCE ], [Species.TINKATINK]: [ Moves.MAGICAL_TORQUE, Moves.PYRO_BALL, Moves.IVY_CUDGEL, Moves.SHIFT_GEAR ], [Species.WIGLETT]: [ Moves.SHELL_SMASH, Moves.ICICLE_CRASH, Moves.SEED_BOMB, Moves.SURGING_STRIKES ], @@ -537,11 +537,11 @@ export const speciesEggMoves = { [Species.VAROOM]: [ Moves.COMBAT_TORQUE, Moves.U_TURN, Moves.BLAZING_TORQUE, Moves.NOXIOUS_TORQUE ], [Species.CYCLIZAR]: [ Moves.PARTING_SHOT, Moves.FIRE_LASH, Moves.MAGICAL_TORQUE, Moves.GLAIVE_RUSH ], [Species.ORTHWORM]: [ Moves.SIZZLY_SLIDE, Moves.COIL, Moves.BODY_PRESS, Moves.SHORE_UP ], - [Species.GLIMMET]: [ Moves.CALM_MIND, Moves.EARTH_POWER, Moves.FIERY_DANCE, Moves.MALIGNANT_CHAIN ], - [Species.GREAVARD]: [ Moves.SHADOW_BONE, Moves.YAWN, Moves.SHORE_UP, Moves.COLLISION_COURSE ], + [Species.GLIMMET]: [ Moves.CALM_MIND, Moves.GIGA_DRAIN, Moves.FIERY_DANCE, Moves.MALIGNANT_CHAIN ], + [Species.GREAVARD]: [ Moves.SHADOW_BONE, Moves.SIZZLY_SLIDE, Moves.SHORE_UP, Moves.COLLISION_COURSE ], [Species.FLAMIGO]: [ Moves.THUNDEROUS_KICK, Moves.TRIPLE_AXEL, Moves.FLOATY_FALL, Moves.VICTORY_DANCE ], - [Species.CETODDLE]: [ Moves.MOUNTAIN_GALE, Moves.HIGH_HORSEPOWER, Moves.SLACK_OFF, Moves.DRAGON_DANCE ], - [Species.VELUZA]: [ Moves.PSYBLADE, Moves.FLIP_TURN, Moves.ICE_SPINNER, Moves.BITTER_BLADE ], + [Species.CETODDLE]: [ Moves.ZING_ZAP, Moves.HIGH_HORSEPOWER, Moves.SLACK_OFF, Moves.DRAGON_DANCE ], + [Species.VELUZA]: [ Moves.PSYBLADE, Moves.LEAF_BLADE, Moves.CEASELESS_EDGE, Moves.BITTER_BLADE ], [Species.DONDOZO]: [ Moves.SOFT_BOILED, Moves.SIZZLY_SLIDE, Moves.BREAKING_SWIPE, Moves.SALT_CURE ], [Species.TATSUGIRI]: [ Moves.SLUDGE_BOMB, Moves.FILLET_AWAY, Moves.CORE_ENFORCER, Moves.STEAM_ERUPTION ], [Species.GREAT_TUSK]: [ Moves.STONE_AXE, Moves.MORNING_SUN, Moves.COLLISION_COURSE, Moves.SHIFT_GEAR ], @@ -550,8 +550,8 @@ export const speciesEggMoves = { [Species.FLUTTER_MANE]: [ Moves.MOONLIGHT, Moves.NASTY_PLOT, Moves.EARTH_POWER, Moves.MOONGEIST_BEAM ], [Species.SLITHER_WING]: [ Moves.MIGHTY_CLEAVE, Moves.THUNDEROUS_KICK, Moves.FIRE_LASH, Moves.VICTORY_DANCE ], [Species.SANDY_SHOCKS]: [ Moves.MORNING_SUN, Moves.ICE_BEAM, Moves.NASTY_PLOT, Moves.THUNDERCLAP ], - [Species.IRON_TREADS]: [ Moves.FUSION_BOLT, Moves.BULK_UP, Moves.SHORE_UP, Moves.SUNSTEEL_STRIKE ], - [Species.IRON_BUNDLE]: [ Moves.EARTH_POWER, Moves.BOUNCY_BUBBLE, Moves.NASTY_PLOT, Moves.STEAM_ERUPTION ], + [Species.IRON_TREADS]: [ Moves.FUSION_BOLT, Moves.SHIFT_GEAR, Moves.SHORE_UP, Moves.SUNSTEEL_STRIKE ], + [Species.IRON_BUNDLE]: [ Moves.EARTH_POWER, Moves.SPLISHY_SPLASH, Moves.VOLT_SWITCH, Moves.NASTY_PLOT ], [Species.IRON_HANDS]: [ Moves.DRAIN_PUNCH, Moves.BULK_UP, Moves.PLASMA_FISTS, Moves.ICE_HAMMER ], [Species.IRON_JUGULIS]: [ Moves.FIERY_WRATH, Moves.ROOST, Moves.NASTY_PLOT, Moves.OBLIVION_WING ], [Species.IRON_MOTH]: [ Moves.EARTH_POWER, Moves.SEARING_SHOT, Moves.MALIGNANT_CHAIN, Moves.QUIVER_DANCE ], @@ -562,11 +562,11 @@ export const speciesEggMoves = { [Species.CHIEN_PAO]: [ Moves.KNOCK_OFF, Moves.PARTING_SHOT, Moves.TRIPLE_AXEL, Moves.BITTER_BLADE ], [Species.TING_LU]: [ Moves.SHORE_UP, Moves.CEASELESS_EDGE, Moves.SAPPY_SEED, Moves.PRECIPICE_BLADES ], [Species.CHI_YU]: [ Moves.FIERY_WRATH, Moves.HYDRO_STEAM, Moves.MORNING_SUN, Moves.BLUE_FLARE ], - [Species.ROARING_MOON]: [ Moves.FIRE_LASH, Moves.DRAGON_HAMMER, Moves.SUCKER_PUNCH, Moves.WICKED_BLOW ], + [Species.ROARING_MOON]: [ Moves.FIRE_LASH, Moves.DRAGON_HAMMER, Moves.METEOR_MASH, Moves.DRAGON_ASCENT ], [Species.IRON_VALIANT]: [ Moves.PLASMA_FISTS, Moves.NO_RETREAT, Moves.SECRET_SWORD, Moves.MAGICAL_TORQUE ], [Species.KORAIDON]: [ Moves.SUNSTEEL_STRIKE, Moves.SOLAR_BLADE, Moves.DRAGON_DARTS, Moves.BITTER_BLADE ], [Species.MIRAIDON]: [ Moves.ICE_BEAM, Moves.CLANGOROUS_SOUL, Moves.CORE_ENFORCER, Moves.RISING_VOLTAGE ], - [Species.WALKING_WAKE]: [ Moves.BOUNCY_BUBBLE, Moves.NASTY_PLOT, Moves.SLUDGE_WAVE, Moves.CORE_ENFORCER ], + [Species.WALKING_WAKE]: [ Moves.BOUNCY_BUBBLE, Moves.FUSION_FLARE, Moves.SLUDGE_WAVE, Moves.CORE_ENFORCER ], [Species.IRON_LEAVES]: [ Moves.BITTER_BLADE, Moves.U_TURN, Moves.MIGHTY_CLEAVE, Moves.VICTORY_DANCE ], [Species.POLTCHAGEIST]: [ Moves.PARABOLIC_CHARGE, Moves.BOUNCY_BUBBLE, Moves.LEECH_SEED, Moves.SPARKLY_SWIRL ], [Species.OKIDOGI]: [ Moves.COMBAT_TORQUE, Moves.TIDY_UP, Moves.DIRE_CLAW, Moves.WICKED_BLOW ], @@ -577,8 +577,8 @@ export const speciesEggMoves = { [Species.RAGING_BOLT]: [ Moves.NASTY_PLOT, Moves.FLAMETHROWER, Moves.MORNING_SUN, Moves.ELECTRO_DRIFT ], [Species.IRON_BOULDER]: [ Moves.PSYBLADE, Moves.KOWTOW_CLEAVE, Moves.STONE_AXE, Moves.BITTER_BLADE ], [Species.IRON_CROWN]: [ Moves.NASTY_PLOT, Moves.SECRET_SWORD, Moves.PSYSTRIKE, Moves.ELECTRO_DRIFT ], - [Species.TERAPAGOS]: [ Moves.MOONBLAST, Moves.RECOVER, Moves.ICE_BEAM, Moves.SHELL_SMASH ], - [Species.PECHARUNT]: [ Moves.TAKE_HEART, Moves.BODY_PRESS, Moves.SAPPY_SEED, Moves.KINGS_SHIELD ], + [Species.TERAPAGOS]: [ Moves.MOONBLAST, Moves.NASTY_PLOT, Moves.ASTRAL_BARRAGE, Moves.RECOVER ], + [Species.PECHARUNT]: [ Moves.TAKE_HEART, Moves.BODY_PRESS, Moves.SAPPY_SEED, Moves.ASTRAL_BARRAGE ], [Species.PALDEA_TAUROS]: [ Moves.NO_RETREAT, Moves.BLAZING_TORQUE, Moves.AQUA_STEP, Moves.THUNDEROUS_KICK ], [Species.PALDEA_WOOPER]: [ Moves.STONE_AXE, Moves.RECOVER, Moves.BANEFUL_BUNKER, Moves.BARB_BARRAGE ], [Species.BLOODMOON_URSALUNA]: [ Moves.NASTY_PLOT, Moves.ROCK_POLISH, Moves.SANDSEAR_STORM, Moves.BOOMBURST ] diff --git a/src/data/balance/passives.ts b/src/data/balance/passives.ts index 3a8285b4586..c613be0137b 100644 --- a/src/data/balance/passives.ts +++ b/src/data/balance/passives.ts @@ -1,582 +1,590 @@ import { Abilities } from "#app/enums/abilities"; import { Species } from "#app/enums/species"; -export const starterPassiveAbilities = { - [Species.BULBASAUR]: Abilities.GRASSY_SURGE, - [Species.CHARMANDER]: Abilities.BEAST_BOOST, - [Species.SQUIRTLE]: Abilities.STURDY, - [Species.CATERPIE]: Abilities.MAGICIAN, - [Species.WEEDLE]: Abilities.TINTED_LENS, - [Species.PIDGEY]: Abilities.SHEER_FORCE, - [Species.RATTATA]: Abilities.STRONG_JAW, - [Species.SPEAROW]: Abilities.MOXIE, - [Species.EKANS]: Abilities.REGENERATOR, - [Species.SANDSHREW]: Abilities.TOUGH_CLAWS, - [Species.NIDORAN_F]: Abilities.FLARE_BOOST, - [Species.NIDORAN_M]: Abilities.GUTS, - [Species.VULPIX]: Abilities.FUR_COAT, - [Species.ZUBAT]: Abilities.INTIMIDATE, - [Species.ODDISH]: Abilities.TRIAGE, - [Species.PARAS]: Abilities.TRIAGE, - [Species.VENONAT]: Abilities.SIMPLE, - [Species.DIGLETT]: Abilities.STURDY, - [Species.MEOWTH]: Abilities.TOUGH_CLAWS, - [Species.PSYDUCK]: Abilities.SIMPLE, - [Species.MANKEY]: Abilities.IRON_FIST, - [Species.GROWLITHE]: Abilities.FLUFFY, - [Species.POLIWAG]: Abilities.NO_GUARD, - [Species.ABRA]: Abilities.MAGICIAN, - [Species.MACHOP]: Abilities.QUICK_FEET, - [Species.BELLSPROUT]: Abilities.FLOWER_GIFT, - [Species.TENTACOOL]: Abilities.TOXIC_CHAIN, - [Species.GEODUDE]: Abilities.DRY_SKIN, - [Species.PONYTA]: Abilities.MAGIC_GUARD, - [Species.SLOWPOKE]: Abilities.UNAWARE, - [Species.MAGNEMITE]: Abilities.LEVITATE, - [Species.FARFETCHD]: Abilities.SNIPER, - [Species.DODUO]: Abilities.PARENTAL_BOND, - [Species.SEEL]: Abilities.WATER_BUBBLE, - [Species.GRIMER]: Abilities.WATER_ABSORB, - [Species.SHELLDER]: Abilities.ICE_SCALES, - [Species.GASTLY]: Abilities.SHADOW_SHIELD, - [Species.ONIX]: Abilities.ROCKY_PAYLOAD, - [Species.DROWZEE]: Abilities.MAGICIAN, - [Species.KRABBY]: Abilities.UNBURDEN, - [Species.VOLTORB]: Abilities.TRANSISTOR, - [Species.EXEGGCUTE]: Abilities.RIPEN, - [Species.CUBONE]: Abilities.PARENTAL_BOND, - [Species.LICKITUNG]: Abilities.CHEEK_POUCH, - [Species.KOFFING]: Abilities.PARENTAL_BOND, - [Species.RHYHORN]: Abilities.FILTER, - [Species.TANGELA]: Abilities.SEED_SOWER, - [Species.KANGASKHAN]: Abilities.GUTS, - [Species.HORSEA]: Abilities.DRAGONS_MAW, - [Species.GOLDEEN]: Abilities.MULTISCALE, - [Species.STARYU]: Abilities.REGENERATOR, - [Species.SCYTHER]: Abilities.TINTED_LENS, - [Species.PINSIR]: Abilities.TINTED_LENS, - [Species.TAUROS]: Abilities.STAMINA, - [Species.MAGIKARP]: Abilities.MULTISCALE, - [Species.LAPRAS]: Abilities.LIGHTNING_ROD, - [Species.DITTO]: Abilities.ADAPTABILITY, - [Species.EEVEE]: Abilities.PICKUP, - [Species.PORYGON]: Abilities.PROTEAN, - [Species.OMANYTE]: Abilities.STURDY, - [Species.KABUTO]: Abilities.TOUGH_CLAWS, - [Species.AERODACTYL]: Abilities.ORICHALCUM_PULSE, - [Species.ARTICUNO]: Abilities.SNOW_WARNING, - [Species.ZAPDOS]: Abilities.DRIZZLE, - [Species.MOLTRES]: Abilities.DROUGHT, - [Species.DRATINI]: Abilities.AERILATE, - [Species.MEWTWO]: Abilities.NEUROFORCE, - [Species.MEW]: Abilities.PROTEAN, +export interface PassiveAbilities { + [key: number]: Abilities +} - [Species.CHIKORITA]: Abilities.THICK_FAT, - [Species.CYNDAQUIL]: Abilities.DROUGHT, - [Species.TOTODILE]: Abilities.TOUGH_CLAWS, - [Species.SENTRET]: Abilities.PICKUP, - [Species.HOOTHOOT]: Abilities.AERILATE, - [Species.LEDYBA]: Abilities.PRANKSTER, - [Species.SPINARAK]: Abilities.PRANKSTER, - [Species.CHINCHOU]: Abilities.REGENERATOR, - [Species.PICHU]: Abilities.ELECTRIC_SURGE, - [Species.CLEFFA]: Abilities.ANALYTIC, - [Species.IGGLYBUFF]: Abilities.HUGE_POWER, - [Species.TOGEPI]: Abilities.PIXILATE, - [Species.NATU]: Abilities.SHEER_FORCE, - [Species.MAREEP]: Abilities.ELECTROMORPHOSIS, - [Species.HOPPIP]: Abilities.FLUFFY, - [Species.AIPOM]: Abilities.SCRAPPY, - [Species.SUNKERN]: Abilities.DROUGHT, - [Species.YANMA]: Abilities.SHEER_FORCE, - [Species.WOOPER]: Abilities.COMATOSE, - [Species.MURKROW]: Abilities.DARK_AURA, - [Species.MISDREAVUS]: Abilities.BEADS_OF_RUIN, - [Species.UNOWN]: Abilities.PICKUP, - [Species.GIRAFARIG]: Abilities.PARENTAL_BOND, - [Species.PINECO]: Abilities.IRON_BARBS, - [Species.DUNSPARCE]: Abilities.UNAWARE, - [Species.GLIGAR]: Abilities.TOXIC_BOOST, - [Species.SNUBBULL]: Abilities.PIXILATE, - [Species.QWILFISH]: Abilities.TOXIC_DEBRIS, - [Species.SHUCKLE]: Abilities.HARVEST, - [Species.HERACROSS]: Abilities.TECHNICIAN, - [Species.SNEASEL]: Abilities.TOUGH_CLAWS, - [Species.TEDDIURSA]: Abilities.THICK_FAT, - [Species.SLUGMA]: Abilities.DESOLATE_LAND, - [Species.SWINUB]: Abilities.SLUSH_RUSH, - [Species.CORSOLA]: Abilities.STORM_DRAIN, - [Species.REMORAID]: Abilities.SIMPLE, - [Species.DELIBIRD]: Abilities.HUGE_POWER, - [Species.SKARMORY]: Abilities.LIGHTNING_ROD, - [Species.HOUNDOUR]: Abilities.LIGHTNING_ROD, - [Species.PHANPY]: Abilities.SPEED_BOOST, - [Species.STANTLER]: Abilities.SPEED_BOOST, - [Species.SMEARGLE]: Abilities.PRANKSTER, - [Species.TYROGUE]: Abilities.MOXIE, - [Species.SMOOCHUM]: Abilities.PSYCHIC_SURGE, - [Species.ELEKID]: Abilities.SHEER_FORCE, - [Species.MAGBY]: Abilities.SHEER_FORCE, - [Species.MILTANK]: Abilities.STAMINA, - [Species.RAIKOU]: Abilities.BEAST_BOOST, - [Species.ENTEI]: Abilities.BEAST_BOOST, - [Species.SUICUNE]: Abilities.BEAST_BOOST, - [Species.LARVITAR]: Abilities.SAND_RUSH, - [Species.LUGIA]: Abilities.DELTA_STREAM, - [Species.HO_OH]: Abilities.MAGIC_GUARD, - [Species.CELEBI]: Abilities.PSYCHIC_SURGE, +interface StarterPassiveAbilities { + [key: number]: PassiveAbilities +} - [Species.TREECKO]: Abilities.TINTED_LENS, - [Species.TORCHIC]: Abilities.DEFIANT, - [Species.MUDKIP]: Abilities.DRIZZLE, - [Species.POOCHYENA]: Abilities.TOUGH_CLAWS, - [Species.ZIGZAGOON]: Abilities.RUN_AWAY, - [Species.WURMPLE]: Abilities.SIMPLE, - [Species.LOTAD]: Abilities.DRIZZLE, - [Species.SEEDOT]: Abilities.SHARPNESS, - [Species.TAILLOW]: Abilities.AERILATE, - [Species.WINGULL]: Abilities.SWIFT_SWIM, - [Species.RALTS]: Abilities.PSYCHIC_SURGE, - [Species.SURSKIT]: Abilities.WATER_BUBBLE, - [Species.SHROOMISH]: Abilities.GUTS, - [Species.SLAKOTH]: Abilities.GUTS, - [Species.NINCADA]: Abilities.MAGIC_GUARD, - [Species.WHISMUR]: Abilities.PUNK_ROCK, - [Species.MAKUHITA]: Abilities.STAMINA, - [Species.AZURILL]: Abilities.MISTY_SURGE, - [Species.NOSEPASS]: Abilities.LEVITATE, - [Species.SKITTY]: Abilities.SCRAPPY, - [Species.SABLEYE]: Abilities.UNNERVE, - [Species.MAWILE]: Abilities.UNNERVE, - [Species.ARON]: Abilities.EARTH_EATER, - [Species.MEDITITE]: Abilities.MINDS_EYE, - [Species.ELECTRIKE]: Abilities.FLASH_FIRE, - [Species.PLUSLE]: Abilities.POWER_SPOT, - [Species.MINUN]: Abilities.POWER_SPOT, - [Species.VOLBEAT]: Abilities.HONEY_GATHER, - [Species.ILLUMISE]: Abilities.HONEY_GATHER, - [Species.GULPIN]: Abilities.EARTH_EATER, - [Species.CARVANHA]: Abilities.SHEER_FORCE, - [Species.WAILMER]: Abilities.LEVITATE, - [Species.NUMEL]: Abilities.FUR_COAT, - [Species.TORKOAL]: Abilities.ANALYTIC, - [Species.SPOINK]: Abilities.PSYCHIC_SURGE, - [Species.SPINDA]: Abilities.SIMPLE, - [Species.TRAPINCH]: Abilities.ADAPTABILITY, - [Species.CACNEA]: Abilities.SAND_RUSH, - [Species.SWABLU]: Abilities.FLUFFY, - [Species.ZANGOOSE]: Abilities.POISON_HEAL, - [Species.SEVIPER]: Abilities.MULTISCALE, - [Species.LUNATONE]: Abilities.SHADOW_SHIELD, - [Species.SOLROCK]: Abilities.DROUGHT, - [Species.BARBOACH]: Abilities.SIMPLE, - [Species.CORPHISH]: Abilities.TOUGH_CLAWS, - [Species.BALTOY]: Abilities.WELL_BAKED_BODY, - [Species.LILEEP]: Abilities.SEED_SOWER, - [Species.ANORITH]: Abilities.WATER_ABSORB, - [Species.FEEBAS]: Abilities.MAGIC_GUARD, - [Species.CASTFORM]: Abilities.ADAPTABILITY, - [Species.KECLEON]: Abilities.ADAPTABILITY, - [Species.SHUPPET]: Abilities.SHADOW_SHIELD, - [Species.DUSKULL]: Abilities.UNNERVE, - [Species.TROPIUS]: Abilities.RIPEN, - [Species.ABSOL]: Abilities.SHARPNESS, - [Species.WYNAUT]: Abilities.STURDY, - [Species.SNORUNT]: Abilities.SNOW_WARNING, - [Species.SPHEAL]: Abilities.UNAWARE, - [Species.CLAMPERL]: Abilities.ARENA_TRAP, - [Species.RELICANTH]: Abilities.PRIMORDIAL_SEA, - [Species.LUVDISC]: Abilities.MULTISCALE, - [Species.BAGON]: Abilities.MOLD_BREAKER, - [Species.BELDUM]: Abilities.LEVITATE, - [Species.REGIROCK]: Abilities.SAND_STREAM, - [Species.REGICE]: Abilities.SNOW_WARNING, - [Species.REGISTEEL]: Abilities.STEELY_SPIRIT, - [Species.LATIAS]: Abilities.PRISM_ARMOR, - [Species.LATIOS]: Abilities.TINTED_LENS, - [Species.KYOGRE]: Abilities.MOLD_BREAKER, - [Species.GROUDON]: Abilities.TURBOBLAZE, - [Species.RAYQUAZA]: Abilities.UNNERVE, - [Species.JIRACHI]: Abilities.COMATOSE, - [Species.DEOXYS]: Abilities.PROTEAN, +export const starterPassiveAbilities: StarterPassiveAbilities = { + [Species.BULBASAUR]: { 0: Abilities.GRASSY_SURGE }, + [Species.CHARMANDER]: { 0: Abilities.BEAST_BOOST }, + [Species.SQUIRTLE]: { 0: Abilities.DAUNTLESS_SHIELD }, + [Species.CATERPIE]: { 0: Abilities.MAGICIAN }, + [Species.WEEDLE]: { 0: Abilities.TINTED_LENS }, + [Species.PIDGEY]: { 0: Abilities.SHEER_FORCE }, + [Species.RATTATA]: { 0: Abilities.STRONG_JAW }, + [Species.SPEAROW]: { 0: Abilities.MOXIE }, + [Species.EKANS]: { 0: Abilities.REGENERATOR }, + [Species.SANDSHREW]: { 0: Abilities.TOUGH_CLAWS }, + [Species.NIDORAN_F]: { 0: Abilities.FLARE_BOOST }, + [Species.NIDORAN_M]: { 0: Abilities.GUTS }, + [Species.VULPIX]: { 0: Abilities.FUR_COAT }, + [Species.ZUBAT]: { 0: Abilities.INTIMIDATE }, + [Species.ODDISH]: { 0: Abilities.TRIAGE }, + [Species.PARAS]: { 0: Abilities.TRIAGE }, + [Species.VENONAT]: { 0: Abilities.SIMPLE }, + [Species.DIGLETT]: { 0: Abilities.STURDY }, + [Species.MEOWTH]: { 0: Abilities.TOUGH_CLAWS }, + [Species.PSYDUCK]: { 0: Abilities.SIMPLE }, + [Species.MANKEY]: { 0: Abilities.IRON_FIST }, + [Species.GROWLITHE]: { 0: Abilities.FLUFFY }, + [Species.POLIWAG]: { 0: Abilities.NO_GUARD }, + [Species.ABRA]: { 0: Abilities.MAGICIAN }, + [Species.MACHOP]: { 0: Abilities.QUICK_FEET }, + [Species.BELLSPROUT]: { 0: Abilities.FLOWER_GIFT }, + [Species.TENTACOOL]: { 0: Abilities.TOXIC_CHAIN }, + [Species.GEODUDE]: { 0: Abilities.DRY_SKIN }, + [Species.PONYTA]: { 0: Abilities.MAGIC_GUARD }, + [Species.SLOWPOKE]: { 0: Abilities.UNAWARE }, + [Species.MAGNEMITE]: { 0: Abilities.LEVITATE }, + [Species.FARFETCHD]: { 0: Abilities.SNIPER }, + [Species.DODUO]: { 0: Abilities.PARENTAL_BOND }, + [Species.SEEL]: { 0: Abilities.WATER_BUBBLE }, + [Species.GRIMER]: { 0: Abilities.WATER_ABSORB }, + [Species.SHELLDER]: { 0: Abilities.ICE_SCALES }, + [Species.GASTLY]: { 0: Abilities.SHADOW_SHIELD }, + [Species.ONIX]: { 0: Abilities.ROCKY_PAYLOAD }, + [Species.DROWZEE]: { 0: Abilities.MAGICIAN }, + [Species.KRABBY]: { 0: Abilities.UNBURDEN }, + [Species.VOLTORB]: { 0: Abilities.TRANSISTOR }, + [Species.EXEGGCUTE]: { 0: Abilities.RIPEN }, + [Species.CUBONE]: { 0: Abilities.PARENTAL_BOND }, + [Species.LICKITUNG]: { 0: Abilities.CHEEK_POUCH }, + [Species.KOFFING]: { 0: Abilities.PARENTAL_BOND }, + [Species.RHYHORN]: { 0: Abilities.FILTER }, + [Species.TANGELA]: { 0: Abilities.SEED_SOWER }, + [Species.KANGASKHAN]: { 0: Abilities.TECHNICIAN }, + [Species.HORSEA]: { 0: Abilities.DRAGONS_MAW }, + [Species.GOLDEEN]: { 0: Abilities.MULTISCALE }, + [Species.STARYU]: { 0: Abilities.REGENERATOR }, + [Species.SCYTHER]: { 0: Abilities.TINTED_LENS }, + [Species.PINSIR]: { 0: Abilities.TINTED_LENS }, + [Species.TAUROS]: { 0: Abilities.STAMINA }, + [Species.MAGIKARP]: { 0: Abilities.MULTISCALE }, + [Species.LAPRAS]: { 0: Abilities.LIGHTNING_ROD }, + [Species.DITTO]: { 0: Abilities.ADAPTABILITY }, + [Species.EEVEE]: { 0: Abilities.PICKUP }, + [Species.PORYGON]: { 0: Abilities.PROTEAN }, + [Species.OMANYTE]: { 0: Abilities.STURDY }, + [Species.KABUTO]: { 0: Abilities.TOUGH_CLAWS }, + [Species.AERODACTYL]: { 0: Abilities.ORICHALCUM_PULSE }, + [Species.ARTICUNO]: { 0: Abilities.SNOW_WARNING }, + [Species.ZAPDOS]: { 0: Abilities.DRIZZLE }, + [Species.MOLTRES]: { 0: Abilities.DROUGHT }, + [Species.DRATINI]: { 0: Abilities.AERILATE }, + [Species.MEWTWO]: { 0: Abilities.NEUROFORCE }, + [Species.MEW]: { 0: Abilities.PROTEAN }, - [Species.TURTWIG]: Abilities.THICK_FAT, - [Species.CHIMCHAR]: Abilities.BEAST_BOOST, - [Species.PIPLUP]: Abilities.DRIZZLE, - [Species.STARLY]: Abilities.ROCK_HEAD, - [Species.BIDOOF]: Abilities.SAP_SIPPER, - [Species.KRICKETOT]: Abilities.SHARPNESS, - [Species.SHINX]: Abilities.SPEED_BOOST, - [Species.BUDEW]: Abilities.GRASSY_SURGE, - [Species.CRANIDOS]: Abilities.ROCK_HEAD, - [Species.SHIELDON]: Abilities.EARTH_EATER, - [Species.BURMY]: Abilities.STURDY, - [Species.COMBEE]: Abilities.INTIMIDATE, - [Species.PACHIRISU]: Abilities.HONEY_GATHER, - [Species.BUIZEL]: Abilities.MOXIE, - [Species.CHERUBI]: Abilities.ORICHALCUM_PULSE, - [Species.SHELLOS]: Abilities.REGENERATOR, - [Species.DRIFLOON]: Abilities.MAGIC_GUARD, - [Species.BUNEARY]: Abilities.ADAPTABILITY, - [Species.GLAMEOW]: Abilities.INTIMIDATE, - [Species.CHINGLING]: Abilities.PUNK_ROCK, - [Species.STUNKY]: Abilities.NEUTRALIZING_GAS, - [Species.BRONZOR]: Abilities.MIRROR_ARMOR, - [Species.BONSLY]: Abilities.SAP_SIPPER, - [Species.MIME_JR]: Abilities.PRANKSTER, - [Species.HAPPINY]: Abilities.FUR_COAT, - [Species.CHATOT]: Abilities.PUNK_ROCK, - [Species.SPIRITOMB]: Abilities.VESSEL_OF_RUIN, - [Species.GIBLE]: Abilities.SAND_STREAM, - [Species.MUNCHLAX]: Abilities.RIPEN, - [Species.RIOLU]: Abilities.MINDS_EYE, - [Species.HIPPOPOTAS]: Abilities.UNAWARE, - [Species.SKORUPI]: Abilities.SUPER_LUCK, - [Species.CROAGUNK]: Abilities.MOXIE, - [Species.CARNIVINE]: Abilities.ARENA_TRAP, - [Species.FINNEON]: Abilities.WATER_BUBBLE, - [Species.MANTYKE]: Abilities.UNAWARE, - [Species.SNOVER]: Abilities.GRASSY_SURGE, - [Species.ROTOM]: Abilities.HADRON_ENGINE, - [Species.UXIE]: Abilities.UNAWARE, - [Species.MESPRIT]: Abilities.MOODY, - [Species.AZELF]: Abilities.NEUROFORCE, - [Species.DIALGA]: Abilities.LEVITATE, - [Species.PALKIA]: Abilities.SPEED_BOOST, - [Species.HEATRAN]: Abilities.EARTH_EATER, - [Species.REGIGIGAS]: Abilities.SCRAPPY, - [Species.GIRATINA]: Abilities.SHADOW_SHIELD, - [Species.CRESSELIA]: Abilities.SHADOW_SHIELD, - [Species.PHIONE]: Abilities.SIMPLE, - [Species.MANAPHY]: Abilities.PRIMORDIAL_SEA, - [Species.DARKRAI]: Abilities.UNNERVE, - [Species.SHAYMIN]: Abilities.WIND_RIDER, - [Species.ARCEUS]: Abilities.ADAPTABILITY, + [Species.CHIKORITA]: { 0: Abilities.THICK_FAT }, + [Species.CYNDAQUIL]: { 0: Abilities.DROUGHT }, + [Species.TOTODILE]: { 0: Abilities.TOUGH_CLAWS }, + [Species.SENTRET]: { 0: Abilities.PICKUP }, + [Species.HOOTHOOT]: { 0: Abilities.AERILATE }, + [Species.LEDYBA]: { 0: Abilities.PRANKSTER }, + [Species.SPINARAK]: { 0: Abilities.PRANKSTER }, + [Species.CHINCHOU]: { 0: Abilities.REGENERATOR }, + [Species.PICHU]: { 0: Abilities.ELECTRIC_SURGE }, + [Species.CLEFFA]: { 0: Abilities.ANALYTIC }, + [Species.IGGLYBUFF]: { 0: Abilities.HUGE_POWER }, + [Species.TOGEPI]: { 0: Abilities.PIXILATE }, + [Species.NATU]: { 0: Abilities.SHEER_FORCE }, + [Species.MAREEP]: { 0: Abilities.ELECTROMORPHOSIS }, + [Species.HOPPIP]: { 0: Abilities.FLUFFY }, + [Species.AIPOM]: { 0: Abilities.SCRAPPY }, + [Species.SUNKERN]: { 0: Abilities.DROUGHT }, + [Species.YANMA]: { 0: Abilities.SHEER_FORCE }, + [Species.WOOPER]: { 0: Abilities.COMATOSE }, + [Species.MURKROW]: { 0: Abilities.DARK_AURA }, + [Species.MISDREAVUS]: { 0: Abilities.BEADS_OF_RUIN }, + [Species.UNOWN]: { 0: Abilities.PICKUP }, + [Species.GIRAFARIG]: { 0: Abilities.PARENTAL_BOND }, + [Species.PINECO]: { 0: Abilities.IRON_BARBS }, + [Species.DUNSPARCE]: { 0: Abilities.UNAWARE }, + [Species.GLIGAR]: { 0: Abilities.TOXIC_BOOST }, + [Species.SNUBBULL]: { 0: Abilities.PIXILATE }, + [Species.QWILFISH]: { 0: Abilities.TOXIC_DEBRIS }, + [Species.SHUCKLE]: { 0: Abilities.HARVEST }, + [Species.HERACROSS]: { 0: Abilities.TECHNICIAN }, + [Species.SNEASEL]: { 0: Abilities.TOUGH_CLAWS }, + [Species.TEDDIURSA]: { 0: Abilities.THICK_FAT }, + [Species.SLUGMA]: { 0: Abilities.DESOLATE_LAND }, + [Species.SWINUB]: { 0: Abilities.SLUSH_RUSH }, + [Species.CORSOLA]: { 0: Abilities.STORM_DRAIN }, + [Species.REMORAID]: { 0: Abilities.SIMPLE }, + [Species.DELIBIRD]: { 0: Abilities.HUGE_POWER }, + [Species.SKARMORY]: { 0: Abilities.LIGHTNING_ROD }, + [Species.HOUNDOUR]: { 0: Abilities.LIGHTNING_ROD }, + [Species.PHANPY]: { 0: Abilities.SPEED_BOOST }, + [Species.STANTLER]: { 0: Abilities.SPEED_BOOST }, + [Species.SMEARGLE]: { 0: Abilities.PRANKSTER }, + [Species.TYROGUE]: { 0: Abilities.MOXIE }, + [Species.SMOOCHUM]: { 0: Abilities.PSYCHIC_SURGE }, + [Species.ELEKID]: { 0: Abilities.SHEER_FORCE }, + [Species.MAGBY]: { 0: Abilities.SHEER_FORCE }, + [Species.MILTANK]: { 0: Abilities.STAMINA }, + [Species.RAIKOU]: { 0: Abilities.BEAST_BOOST }, + [Species.ENTEI]: { 0: Abilities.BEAST_BOOST }, + [Species.SUICUNE]: { 0: Abilities.BEAST_BOOST }, + [Species.LARVITAR]: { 0: Abilities.SOLID_ROCK }, + [Species.LUGIA]: { 0: Abilities.DELTA_STREAM }, + [Species.HO_OH]: { 0: Abilities.MAGIC_GUARD }, + [Species.CELEBI]: { 0: Abilities.PSYCHIC_SURGE }, - [Species.VICTINI]: Abilities.SHEER_FORCE, - [Species.SNIVY]: Abilities.MULTISCALE, - [Species.TEPIG]: Abilities.ROCK_HEAD, - [Species.OSHAWOTT]: Abilities.INTREPID_SWORD, - [Species.PATRAT]: Abilities.NO_GUARD, - [Species.LILLIPUP]: Abilities.FUR_COAT, - [Species.PURRLOIN]: Abilities.PICKUP, - [Species.PANSAGE]: Abilities.WELL_BAKED_BODY, - [Species.PANSEAR]: Abilities.WATER_ABSORB, - [Species.PANPOUR]: Abilities.SAP_SIPPER, - [Species.MUNNA]: Abilities.NEUTRALIZING_GAS, - [Species.PIDOVE]: Abilities.SNIPER, - [Species.BLITZLE]: Abilities.ELECTRIC_SURGE, - [Species.ROGGENROLA]: Abilities.SOLID_ROCK, - [Species.WOOBAT]: Abilities.OPPORTUNIST, - [Species.DRILBUR]: Abilities.STURDY, - [Species.AUDINO]: Abilities.FRIEND_GUARD, - [Species.TIMBURR]: Abilities.ROCKY_PAYLOAD, - [Species.TYMPOLE]: Abilities.POISON_HEAL, - [Species.THROH]: Abilities.STAMINA, - [Species.SAWK]: Abilities.SCRAPPY, - [Species.SEWADDLE]: Abilities.SHARPNESS, - [Species.VENIPEDE]: Abilities.STAMINA, - [Species.COTTONEE]: Abilities.FLUFFY, - [Species.PETILIL]: Abilities.SIMPLE, - [Species.BASCULIN]: Abilities.SUPREME_OVERLORD, - [Species.SANDILE]: Abilities.TOUGH_CLAWS, - [Species.DARUMAKA]: Abilities.GORILLA_TACTICS, - [Species.MARACTUS]: Abilities.WELL_BAKED_BODY, - [Species.DWEBBLE]: Abilities.ROCKY_PAYLOAD, - [Species.SCRAGGY]: Abilities.PROTEAN, - [Species.SIGILYPH]: Abilities.FLARE_BOOST, - [Species.YAMASK]: Abilities.PURIFYING_SALT, - [Species.TIRTOUGA]: Abilities.WATER_ABSORB, - [Species.ARCHEN]: Abilities.MULTISCALE, - [Species.TRUBBISH]: Abilities.NEUTRALIZING_GAS, - [Species.ZORUA]: Abilities.DARK_AURA, - [Species.MINCCINO]: Abilities.FUR_COAT, - [Species.GOTHITA]: Abilities.UNNERVE, - [Species.SOLOSIS]: Abilities.PSYCHIC_SURGE, - [Species.DUCKLETT]: Abilities.DRIZZLE, - [Species.VANILLITE]: Abilities.SLUSH_RUSH, - [Species.DEERLING]: Abilities.FUR_COAT, - [Species.EMOLGA]: Abilities.SERENE_GRACE, - [Species.KARRABLAST]: Abilities.QUICK_DRAW, - [Species.FOONGUS]: Abilities.THICK_FAT, - [Species.FRILLISH]: Abilities.POISON_HEAL, - [Species.ALOMOMOLA]: Abilities.MULTISCALE, - [Species.JOLTIK]: Abilities.TRANSISTOR, - [Species.FERROSEED]: Abilities.ROUGH_SKIN, - [Species.KLINK]: Abilities.STEELY_SPIRIT, - [Species.TYNAMO]: Abilities.POISON_HEAL, - [Species.ELGYEM]: Abilities.BEADS_OF_RUIN, - [Species.LITWICK]: Abilities.SHADOW_TAG, - [Species.AXEW]: Abilities.DRAGONS_MAW, - [Species.CUBCHOO]: Abilities.FUR_COAT, - [Species.CRYOGONAL]: Abilities.SNOW_WARNING, - [Species.SHELMET]: Abilities.PROTEAN, - [Species.STUNFISK]: Abilities.STORM_DRAIN, - [Species.MIENFOO]: Abilities.NO_GUARD, - [Species.DRUDDIGON]: Abilities.INTIMIDATE, - [Species.GOLETT]: Abilities.SHADOW_SHIELD, - [Species.PAWNIARD]: Abilities.SWORD_OF_RUIN, - [Species.BOUFFALANT]: Abilities.ROCK_HEAD, - [Species.RUFFLET]: Abilities.SPEED_BOOST, - [Species.VULLABY]: Abilities.THICK_FAT, - [Species.HEATMOR]: Abilities.CONTRARY, - [Species.DURANT]: Abilities.COMPOUND_EYES, - [Species.DEINO]: Abilities.PARENTAL_BOND, - [Species.LARVESTA]: Abilities.DROUGHT, - [Species.COBALION]: Abilities.INTREPID_SWORD, - [Species.TERRAKION]: Abilities.ROCKY_PAYLOAD, - [Species.VIRIZION]: Abilities.SHARPNESS, - [Species.TORNADUS]: Abilities.DRIZZLE, - [Species.THUNDURUS]: Abilities.DRIZZLE, - [Species.RESHIRAM]: Abilities.ORICHALCUM_PULSE, - [Species.ZEKROM]: Abilities.HADRON_ENGINE, - [Species.LANDORUS]: Abilities.STORM_DRAIN, - [Species.KYUREM]: Abilities.SNOW_WARNING, - [Species.KELDEO]: Abilities.GRIM_NEIGH, - [Species.MELOETTA]: Abilities.MINDS_EYE, - [Species.GENESECT]: Abilities.PROTEAN, + [Species.TREECKO]: { 0: Abilities.TINTED_LENS }, + [Species.TORCHIC]: { 0: Abilities.DEFIANT }, + [Species.MUDKIP]: { 0: Abilities.DRIZZLE }, + [Species.POOCHYENA]: { 0: Abilities.TOUGH_CLAWS }, + [Species.ZIGZAGOON]: { 0: Abilities.RUN_AWAY }, + [Species.WURMPLE]: { 0: Abilities.SIMPLE }, + [Species.LOTAD]: { 0: Abilities.DRIZZLE }, + [Species.SEEDOT]: { 0: Abilities.SHARPNESS }, + [Species.TAILLOW]: { 0: Abilities.AERILATE }, + [Species.WINGULL]: { 0: Abilities.SWIFT_SWIM }, + [Species.RALTS]: { 0: Abilities.PSYCHIC_SURGE }, + [Species.SURSKIT]: { 0: Abilities.WATER_BUBBLE }, + [Species.SHROOMISH]: { 0: Abilities.GUTS }, + [Species.SLAKOTH]: { 0: Abilities.GUTS }, + [Species.NINCADA]: { 0: Abilities.MAGIC_GUARD }, + [Species.WHISMUR]: { 0: Abilities.PUNK_ROCK }, + [Species.MAKUHITA]: { 0: Abilities.STAMINA }, + [Species.AZURILL]: { 0: Abilities.MISTY_SURGE }, + [Species.NOSEPASS]: { 0: Abilities.LEVITATE }, + [Species.SKITTY]: { 0: Abilities.SCRAPPY }, + [Species.SABLEYE]: { 0: Abilities.UNNERVE }, + [Species.MAWILE]: { 0: Abilities.UNNERVE }, + [Species.ARON]: { 0: Abilities.EARTH_EATER }, + [Species.MEDITITE]: { 0: Abilities.MINDS_EYE }, + [Species.ELECTRIKE]: { 0: Abilities.FLASH_FIRE }, + [Species.PLUSLE]: { 0: Abilities.POWER_SPOT }, + [Species.MINUN]: { 0: Abilities.POWER_SPOT }, + [Species.VOLBEAT]: { 0: Abilities.HONEY_GATHER }, + [Species.ILLUMISE]: { 0: Abilities.HONEY_GATHER }, + [Species.GULPIN]: { 0: Abilities.EARTH_EATER }, + [Species.CARVANHA]: { 0: Abilities.SHEER_FORCE }, + [Species.WAILMER]: { 0: Abilities.LEVITATE }, + [Species.NUMEL]: { 0: Abilities.FUR_COAT }, + [Species.TORKOAL]: { 0: Abilities.ANALYTIC }, + [Species.SPOINK]: { 0: Abilities.PSYCHIC_SURGE }, + [Species.SPINDA]: { 0: Abilities.SIMPLE }, + [Species.TRAPINCH]: { 0: Abilities.ADAPTABILITY }, + [Species.CACNEA]: { 0: Abilities.SAND_RUSH }, + [Species.SWABLU]: { 0: Abilities.FLUFFY }, + [Species.ZANGOOSE]: { 0: Abilities.POISON_HEAL }, + [Species.SEVIPER]: { 0: Abilities.MULTISCALE }, + [Species.LUNATONE]: { 0: Abilities.SHADOW_SHIELD }, + [Species.SOLROCK]: { 0: Abilities.DROUGHT }, + [Species.BARBOACH]: { 0: Abilities.SIMPLE }, + [Species.CORPHISH]: { 0: Abilities.TOUGH_CLAWS }, + [Species.BALTOY]: { 0: Abilities.WELL_BAKED_BODY }, + [Species.LILEEP]: { 0: Abilities.SEED_SOWER }, + [Species.ANORITH]: { 0: Abilities.WATER_ABSORB }, + [Species.FEEBAS]: { 0: Abilities.MAGIC_GUARD }, + [Species.CASTFORM]: { 0: Abilities.ADAPTABILITY }, + [Species.KECLEON]: { 0: Abilities.ADAPTABILITY }, + [Species.SHUPPET]: { 0: Abilities.SHADOW_SHIELD }, + [Species.DUSKULL]: { 0: Abilities.UNNERVE }, + [Species.TROPIUS]: { 0: Abilities.RIPEN }, + [Species.ABSOL]: { 0: Abilities.SHARPNESS }, + [Species.WYNAUT]: { 0: Abilities.STURDY }, + [Species.SNORUNT]: { 0: Abilities.SNOW_WARNING }, + [Species.SPHEAL]: { 0: Abilities.UNAWARE }, + [Species.CLAMPERL]: { 0: Abilities.ARENA_TRAP }, + [Species.RELICANTH]: { 0: Abilities.PRIMORDIAL_SEA }, + [Species.LUVDISC]: { 0: Abilities.MULTISCALE }, + [Species.BAGON]: { 0: Abilities.MOLD_BREAKER }, + [Species.BELDUM]: { 0: Abilities.LEVITATE }, + [Species.REGIROCK]: { 0: Abilities.SAND_STREAM }, + [Species.REGICE]: { 0: Abilities.SNOW_WARNING }, + [Species.REGISTEEL]: { 0: Abilities.STEELY_SPIRIT }, + [Species.LATIAS]: { 0: Abilities.PRISM_ARMOR }, + [Species.LATIOS]: { 0: Abilities.TINTED_LENS }, + [Species.KYOGRE]: { 0: Abilities.MOLD_BREAKER }, + [Species.GROUDON]: { 0: Abilities.TURBOBLAZE }, + [Species.RAYQUAZA]: { 0: Abilities.UNNERVE }, + [Species.JIRACHI]: { 0: Abilities.COMATOSE }, + [Species.DEOXYS]: { 0: Abilities.PROTEAN }, - [Species.CHESPIN]: Abilities.DAUNTLESS_SHIELD, - [Species.FENNEKIN]: Abilities.PSYCHIC_SURGE, - [Species.FROAKIE]: Abilities.STAKEOUT, - [Species.BUNNELBY]: Abilities.GUTS, - [Species.FLETCHLING]: Abilities.MAGIC_GUARD, - [Species.SCATTERBUG]: Abilities.PRANKSTER, - [Species.LITLEO]: Abilities.BEAST_BOOST, - [Species.FLABEBE]: Abilities.GRASSY_SURGE, - [Species.SKIDDO]: Abilities.SEED_SOWER, - [Species.PANCHAM]: Abilities.FUR_COAT, - [Species.FURFROU]: Abilities.FLUFFY, - [Species.ESPURR]: Abilities.FUR_COAT, - [Species.HONEDGE]: Abilities.SHARPNESS, - [Species.SPRITZEE]: Abilities.FUR_COAT, - [Species.SWIRLIX]: Abilities.RIPEN, - [Species.INKAY]: Abilities.UNNERVE, - [Species.BINACLE]: Abilities.SAP_SIPPER, - [Species.SKRELP]: Abilities.DRAGONS_MAW, - [Species.CLAUNCHER]: Abilities.PROTEAN, - [Species.HELIOPTILE]: Abilities.PROTEAN, - [Species.TYRUNT]: Abilities.RECKLESS, - [Species.AMAURA]: Abilities.ICE_SCALES, - [Species.HAWLUCHA]: Abilities.MOXIE, - [Species.DEDENNE]: Abilities.PIXILATE, - [Species.CARBINK]: Abilities.SOLID_ROCK, - [Species.GOOMY]: Abilities.REGENERATOR, - [Species.KLEFKI]: Abilities.LEVITATE, - [Species.PHANTUMP]: Abilities.SHADOW_TAG, - [Species.PUMPKABOO]: Abilities.WELL_BAKED_BODY, - [Species.BERGMITE]: Abilities.ICE_SCALES, - [Species.NOIBAT]: Abilities.PUNK_ROCK, - [Species.XERNEAS]: Abilities.HARVEST, - [Species.YVELTAL]: Abilities.SOUL_HEART, - [Species.ZYGARDE]: Abilities.ADAPTABILITY, - [Species.DIANCIE]: Abilities.PRISM_ARMOR, - [Species.HOOPA]: Abilities.OPPORTUNIST, - [Species.VOLCANION]: Abilities.FILTER, - [Species.ETERNAL_FLOETTE]: Abilities.MAGIC_GUARD, + [Species.TURTWIG]: { 0: Abilities.THICK_FAT }, + [Species.CHIMCHAR]: { 0: Abilities.BEAST_BOOST }, + [Species.PIPLUP]: { 0: Abilities.DRIZZLE }, + [Species.STARLY]: { 0: Abilities.ROCK_HEAD }, + [Species.BIDOOF]: { 0: Abilities.SAP_SIPPER }, + [Species.KRICKETOT]: { 0: Abilities.SHARPNESS }, + [Species.SHINX]: { 0: Abilities.SPEED_BOOST }, + [Species.BUDEW]: { 0: Abilities.GRASSY_SURGE }, + [Species.CRANIDOS]: { 0: Abilities.ROCK_HEAD }, + [Species.SHIELDON]: { 0: Abilities.EARTH_EATER }, + [Species.BURMY]: { 0: Abilities.STURDY }, + [Species.COMBEE]: { 0: Abilities.INTIMIDATE }, + [Species.PACHIRISU]: { 0: Abilities.HONEY_GATHER }, + [Species.BUIZEL]: { 0: Abilities.MOXIE }, + [Species.CHERUBI]: { 0: Abilities.ORICHALCUM_PULSE }, + [Species.SHELLOS]: { 0: Abilities.REGENERATOR }, + [Species.DRIFLOON]: { 0: Abilities.MAGIC_GUARD }, + [Species.BUNEARY]: { 0: Abilities.ADAPTABILITY }, + [Species.GLAMEOW]: { 0: Abilities.INTIMIDATE }, + [Species.CHINGLING]: { 0: Abilities.PUNK_ROCK }, + [Species.STUNKY]: { 0: Abilities.NEUTRALIZING_GAS }, + [Species.BRONZOR]: { 0: Abilities.MIRROR_ARMOR }, + [Species.BONSLY]: { 0: Abilities.SAP_SIPPER }, + [Species.MIME_JR]: { 0: Abilities.PRANKSTER }, + [Species.HAPPINY]: { 0: Abilities.FUR_COAT }, + [Species.CHATOT]: { 0: Abilities.PUNK_ROCK }, + [Species.SPIRITOMB]: { 0: Abilities.VESSEL_OF_RUIN }, + [Species.GIBLE]: { 0: Abilities.SAND_STREAM }, + [Species.MUNCHLAX]: { 0: Abilities.RIPEN }, + [Species.RIOLU]: { 0: Abilities.MINDS_EYE }, + [Species.HIPPOPOTAS]: { 0: Abilities.UNAWARE }, + [Species.SKORUPI]: { 0: Abilities.SUPER_LUCK }, + [Species.CROAGUNK]: { 0: Abilities.MOXIE }, + [Species.CARNIVINE]: { 0: Abilities.ARENA_TRAP }, + [Species.FINNEON]: { 0: Abilities.WATER_BUBBLE }, + [Species.MANTYKE]: { 0: Abilities.UNAWARE }, + [Species.SNOVER]: { 0: Abilities.GRASSY_SURGE }, + [Species.ROTOM]: { 0: Abilities.HADRON_ENGINE }, + [Species.UXIE]: { 0: Abilities.UNNERVE }, + [Species.MESPRIT]: { 0: Abilities.MOODY }, + [Species.AZELF]: { 0: Abilities.NEUROFORCE }, + [Species.DIALGA]: { 0: Abilities.BERSERK }, + [Species.PALKIA]: { 0: Abilities.BERSERK }, + [Species.HEATRAN]: { 0: Abilities.EARTH_EATER }, + [Species.REGIGIGAS]: { 0: Abilities.SCRAPPY }, + [Species.GIRATINA]: { 0: Abilities.SHADOW_SHIELD }, + [Species.CRESSELIA]: { 0: Abilities.SHADOW_SHIELD }, + [Species.PHIONE]: { 0: Abilities.SIMPLE }, + [Species.MANAPHY]: { 0: Abilities.PRIMORDIAL_SEA }, + [Species.DARKRAI]: { 0: Abilities.UNNERVE }, + [Species.SHAYMIN]: { 0: Abilities.WIND_RIDER }, + [Species.ARCEUS]: { 0: Abilities.ADAPTABILITY }, - [Species.ROWLET]: Abilities.SNIPER, - [Species.LITTEN]: Abilities.OPPORTUNIST, - [Species.POPPLIO]: Abilities.PUNK_ROCK, - [Species.PIKIPEK]: Abilities.TECHNICIAN, - [Species.YUNGOOS]: Abilities.TOUGH_CLAWS, - [Species.GRUBBIN]: Abilities.SPEED_BOOST, - [Species.CRABRAWLER]: Abilities.WATER_BUBBLE, - [Species.ORICORIO]: Abilities.ADAPTABILITY, - [Species.CUTIEFLY]: Abilities.TINTED_LENS, - [Species.ROCKRUFF]: Abilities.ROCKY_PAYLOAD, - [Species.WISHIWASHI]: Abilities.REGENERATOR, - [Species.MAREANIE]: Abilities.TOXIC_DEBRIS, - [Species.MUDBRAY]: Abilities.CUD_CHEW, - [Species.DEWPIDER]: Abilities.TINTED_LENS, - [Species.FOMANTIS]: Abilities.SHARPNESS, - [Species.MORELULL]: Abilities.TRIAGE, - [Species.SALANDIT]: Abilities.DRAGONS_MAW, - [Species.STUFFUL]: Abilities.SCRAPPY, - [Species.BOUNSWEET]: Abilities.MOXIE, - [Species.COMFEY]: Abilities.FRIEND_GUARD, - [Species.ORANGURU]: Abilities.POWER_SPOT, - [Species.PASSIMIAN]: Abilities.LIBERO, - [Species.WIMPOD]: Abilities.REGENERATOR, - [Species.SANDYGAST]: Abilities.SAND_SPIT, - [Species.PYUKUMUKU]: Abilities.PURIFYING_SALT, - [Species.TYPE_NULL]: Abilities.ADAPTABILITY, - [Species.MINIOR]: Abilities.STURDY, - [Species.KOMALA]: Abilities.GUTS, - [Species.TURTONATOR]: Abilities.DAUNTLESS_SHIELD, - [Species.TOGEDEMARU]: Abilities.ROUGH_SKIN, - [Species.MIMIKYU]: Abilities.TOUGH_CLAWS, - [Species.BRUXISH]: Abilities.MULTISCALE, - [Species.DRAMPA]: Abilities.THICK_FAT, - [Species.DHELMISE]: Abilities.WATER_BUBBLE, - [Species.JANGMO_O]: Abilities.DAUNTLESS_SHIELD, - [Species.TAPU_KOKO]: Abilities.DAUNTLESS_SHIELD, - [Species.TAPU_LELE]: Abilities.SHEER_FORCE, - [Species.TAPU_BULU]: Abilities.TRIAGE, - [Species.TAPU_FINI]: Abilities.FAIRY_AURA, - [Species.COSMOG]: Abilities.BEAST_BOOST, - [Species.NIHILEGO]: Abilities.LEVITATE, - [Species.BUZZWOLE]: Abilities.MOXIE, - [Species.PHEROMOSA]: Abilities.TINTED_LENS, - [Species.XURKITREE]: Abilities.TRANSISTOR, - [Species.CELESTEELA]: Abilities.HEATPROOF, - [Species.KARTANA]: Abilities.LONG_REACH, - [Species.GUZZLORD]: Abilities.POISON_HEAL, - [Species.NECROZMA]: Abilities.BEAST_BOOST, - [Species.MAGEARNA]: Abilities.STEELY_SPIRIT, - [Species.MARSHADOW]: Abilities.IRON_FIST, - [Species.POIPOLE]: Abilities.LEVITATE, - [Species.STAKATAKA]: Abilities.SOLID_ROCK, - [Species.BLACEPHALON]: Abilities.MAGIC_GUARD, - [Species.ZERAORA]: Abilities.TOUGH_CLAWS, - [Species.MELTAN]: Abilities.HEATPROOF, - [Species.ALOLA_RATTATA]: Abilities.ADAPTABILITY, - [Species.ALOLA_SANDSHREW]: Abilities.ICE_SCALES, - [Species.ALOLA_VULPIX]: Abilities.SHEER_FORCE, - [Species.ALOLA_DIGLETT]: Abilities.STURDY, - [Species.ALOLA_MEOWTH]: Abilities.DARK_AURA, - [Species.ALOLA_GEODUDE]: Abilities.DRY_SKIN, - [Species.ALOLA_GRIMER]: Abilities.TOXIC_DEBRIS, + [Species.VICTINI]: { 0: Abilities.SHEER_FORCE }, + [Species.SNIVY]: { 0: Abilities.MULTISCALE }, + [Species.TEPIG]: { 0: Abilities.ROCK_HEAD }, + [Species.OSHAWOTT]: { 0: Abilities.INTREPID_SWORD }, + [Species.PATRAT]: { 0: Abilities.NO_GUARD }, + [Species.LILLIPUP]: { 0: Abilities.FUR_COAT }, + [Species.PURRLOIN]: { 0: Abilities.PICKUP }, + [Species.PANSAGE]: { 0: Abilities.WELL_BAKED_BODY }, + [Species.PANSEAR]: { 0: Abilities.WATER_ABSORB }, + [Species.PANPOUR]: { 0: Abilities.SAP_SIPPER }, + [Species.MUNNA]: { 0: Abilities.NEUTRALIZING_GAS }, + [Species.PIDOVE]: { 0: Abilities.SNIPER }, + [Species.BLITZLE]: { 0: Abilities.ELECTRIC_SURGE }, + [Species.ROGGENROLA]: { 0: Abilities.SOLID_ROCK }, + [Species.WOOBAT]: { 0: Abilities.OPPORTUNIST }, + [Species.DRILBUR]: { 0: Abilities.STURDY }, + [Species.AUDINO]: { 0: Abilities.FRIEND_GUARD }, + [Species.TIMBURR]: { 0: Abilities.ROCKY_PAYLOAD }, + [Species.TYMPOLE]: { 0: Abilities.POISON_HEAL }, + [Species.THROH]: { 0: Abilities.STAMINA }, + [Species.SAWK]: { 0: Abilities.SCRAPPY }, + [Species.SEWADDLE]: { 0: Abilities.SHARPNESS }, + [Species.VENIPEDE]: { 0: Abilities.STAMINA }, + [Species.COTTONEE]: { 0: Abilities.FLUFFY }, + [Species.PETILIL]: { 0: Abilities.FLOWER_VEIL }, + [Species.BASCULIN]: { 0: Abilities.SUPREME_OVERLORD }, + [Species.SANDILE]: { 0: Abilities.TOUGH_CLAWS }, + [Species.DARUMAKA]: { 0: Abilities.GORILLA_TACTICS }, + [Species.MARACTUS]: { 0: Abilities.WELL_BAKED_BODY }, + [Species.DWEBBLE]: { 0: Abilities.ROCKY_PAYLOAD }, + [Species.SCRAGGY]: { 0: Abilities.PROTEAN }, + [Species.SIGILYPH]: { 0: Abilities.FLARE_BOOST }, + [Species.YAMASK]: { 0: Abilities.PURIFYING_SALT }, + [Species.TIRTOUGA]: { 0: Abilities.WATER_ABSORB }, + [Species.ARCHEN]: { 0: Abilities.MULTISCALE }, + [Species.TRUBBISH]: { 0: Abilities.NEUTRALIZING_GAS }, + [Species.ZORUA]: { 0: Abilities.DARK_AURA }, + [Species.MINCCINO]: { 0: Abilities.FUR_COAT }, + [Species.GOTHITA]: { 0: Abilities.UNNERVE }, + [Species.SOLOSIS]: { 0: Abilities.PSYCHIC_SURGE }, + [Species.DUCKLETT]: { 0: Abilities.DRIZZLE }, + [Species.VANILLITE]: { 0: Abilities.SLUSH_RUSH }, + [Species.DEERLING]: { 0: Abilities.FUR_COAT }, + [Species.EMOLGA]: { 0: Abilities.SERENE_GRACE }, + [Species.KARRABLAST]: { 0: Abilities.QUICK_DRAW }, + [Species.FOONGUS]: { 0: Abilities.THICK_FAT }, + [Species.FRILLISH]: { 0: Abilities.POISON_HEAL }, + [Species.ALOMOMOLA]: { 0: Abilities.MULTISCALE }, + [Species.JOLTIK]: { 0: Abilities.TRANSISTOR }, + [Species.FERROSEED]: { 0: Abilities.ROUGH_SKIN }, + [Species.KLINK]: { 0: Abilities.STEELY_SPIRIT }, + [Species.TYNAMO]: { 0: Abilities.POISON_HEAL }, + [Species.ELGYEM]: { 0: Abilities.BEADS_OF_RUIN }, + [Species.LITWICK]: { 0: Abilities.SHADOW_TAG }, + [Species.AXEW]: { 0: Abilities.DRAGONS_MAW }, + [Species.CUBCHOO]: { 0: Abilities.FUR_COAT }, + [Species.CRYOGONAL]: { 0: Abilities.SNOW_WARNING }, + [Species.SHELMET]: { 0: Abilities.PROTEAN }, + [Species.STUNFISK]: { 0: Abilities.STORM_DRAIN }, + [Species.MIENFOO]: { 0: Abilities.NO_GUARD }, + [Species.DRUDDIGON]: { 0: Abilities.INTIMIDATE }, + [Species.GOLETT]: { 0: Abilities.SHADOW_SHIELD }, + [Species.PAWNIARD]: { 0: Abilities.SWORD_OF_RUIN }, + [Species.BOUFFALANT]: { 0: Abilities.ROCK_HEAD }, + [Species.RUFFLET]: { 0: Abilities.SPEED_BOOST }, + [Species.VULLABY]: { 0: Abilities.THICK_FAT }, + [Species.HEATMOR]: { 0: Abilities.CONTRARY }, + [Species.DURANT]: { 0: Abilities.COMPOUND_EYES }, + [Species.DEINO]: { 0: Abilities.PARENTAL_BOND }, + [Species.LARVESTA]: { 0: Abilities.DROUGHT }, + [Species.COBALION]: { 0: Abilities.INTREPID_SWORD }, + [Species.TERRAKION]: { 0: Abilities.ROCKY_PAYLOAD }, + [Species.VIRIZION]: { 0: Abilities.SHARPNESS }, + [Species.TORNADUS]: { 0: Abilities.DRIZZLE }, + [Species.THUNDURUS]: { 0: Abilities.DRIZZLE }, + [Species.RESHIRAM]: { 0: Abilities.ORICHALCUM_PULSE }, + [Species.ZEKROM]: { 0: Abilities.HADRON_ENGINE }, + [Species.LANDORUS]: { 0: Abilities.STORM_DRAIN }, + [Species.KYUREM]: { 0: Abilities.SNOW_WARNING }, + [Species.KELDEO]: { 0: Abilities.GRIM_NEIGH }, + [Species.MELOETTA]: { 0: Abilities.MINDS_EYE }, + [Species.GENESECT]: { 0: Abilities.PROTEAN }, - [Species.GROOKEY]: Abilities.GRASS_PELT, - [Species.SCORBUNNY]: Abilities.NO_GUARD, - [Species.SOBBLE]: Abilities.SUPER_LUCK, - [Species.SKWOVET]: Abilities.HARVEST, - [Species.ROOKIDEE]: Abilities.IRON_BARBS, - [Species.BLIPBUG]: Abilities.PSYCHIC_SURGE, - [Species.NICKIT]: Abilities.MAGICIAN, - [Species.GOSSIFLEUR]: Abilities.GRASSY_SURGE, - [Species.WOOLOO]: Abilities.SCRAPPY, - [Species.CHEWTLE]: Abilities.ROCKY_PAYLOAD, - [Species.YAMPER]: Abilities.SHEER_FORCE, - [Species.ROLYCOLY]: Abilities.SOLID_ROCK, - [Species.APPLIN]: Abilities.DRAGONS_MAW, - [Species.SILICOBRA]: Abilities.SAND_RUSH, - [Species.CRAMORANT]: Abilities.LIGHTNING_ROD, - [Species.ARROKUDA]: Abilities.INTIMIDATE, - [Species.TOXEL]: Abilities.ELECTRIC_SURGE, - [Species.SIZZLIPEDE]: Abilities.SPEED_BOOST, - [Species.CLOBBOPUS]: Abilities.WATER_BUBBLE, - [Species.SINISTEA]: Abilities.SHADOW_SHIELD, - [Species.HATENNA]: Abilities.FAIRY_AURA, - [Species.IMPIDIMP]: Abilities.INTIMIDATE, - [Species.MILCERY]: Abilities.REGENERATOR, - [Species.FALINKS]: Abilities.PARENTAL_BOND, - [Species.PINCURCHIN]: Abilities.ELECTROMORPHOSIS, - [Species.SNOM]: Abilities.SNOW_WARNING, - [Species.STONJOURNER]: Abilities.STURDY, - [Species.EISCUE]: Abilities.ICE_SCALES, - [Species.INDEEDEE]: Abilities.FRIEND_GUARD, - [Species.MORPEKO]: Abilities.MOODY, - [Species.CUFANT]: Abilities.EARTH_EATER, - [Species.DRACOZOLT]: Abilities.NO_GUARD, - [Species.ARCTOZOLT]: Abilities.WATER_ABSORB, - [Species.DRACOVISH]: Abilities.SWIFT_SWIM, - [Species.ARCTOVISH]: Abilities.STRONG_JAW, - [Species.DURALUDON]: Abilities.STEELWORKER, - [Species.DREEPY]: Abilities.PARENTAL_BOND, - [Species.ZACIAN]: Abilities.UNNERVE, - [Species.ZAMAZENTA]: Abilities.UNNERVE, - [Species.ETERNATUS]: Abilities.NEUTRALIZING_GAS, - [Species.KUBFU]: Abilities.IRON_FIST, - [Species.ZARUDE]: Abilities.TOUGH_CLAWS, - [Species.REGIELEKI]: Abilities.ELECTRIC_SURGE, - [Species.REGIDRAGO]: Abilities.MULTISCALE, - [Species.GLASTRIER]: Abilities.FILTER, - [Species.SPECTRIER]: Abilities.SHADOW_SHIELD, - [Species.CALYREX]: Abilities.HARVEST, - [Species.ENAMORUS]: Abilities.FAIRY_AURA, - [Species.GALAR_MEOWTH]: Abilities.UNBURDEN, - [Species.GALAR_PONYTA]: Abilities.CHILLING_NEIGH, - [Species.GALAR_SLOWPOKE]: Abilities.UNAWARE, - [Species.GALAR_FARFETCHD]: Abilities.INTREPID_SWORD, - [Species.GALAR_ARTICUNO]: Abilities.SERENE_GRACE, - [Species.GALAR_ZAPDOS]: Abilities.TOUGH_CLAWS, - [Species.GALAR_MOLTRES]: Abilities.DARK_AURA, - [Species.GALAR_CORSOLA]: Abilities.SHADOW_SHIELD, - [Species.GALAR_ZIGZAGOON]: Abilities.POISON_HEAL, - [Species.GALAR_DARUMAKA]: Abilities.FLASH_FIRE, - [Species.GALAR_YAMASK]: Abilities.TABLETS_OF_RUIN, - [Species.GALAR_STUNFISK]: Abilities.ARENA_TRAP, - [Species.HISUI_GROWLITHE]: Abilities.RECKLESS, - [Species.HISUI_VOLTORB]: Abilities.TRANSISTOR, - [Species.HISUI_QWILFISH]: Abilities.MERCILESS, - [Species.HISUI_SNEASEL]: Abilities.SCRAPPY, - [Species.HISUI_ZORUA]: Abilities.ADAPTABILITY, + [Species.CHESPIN]: { 0: Abilities.DAUNTLESS_SHIELD }, + [Species.FENNEKIN]: { 0: Abilities.PSYCHIC_SURGE }, + [Species.FROAKIE]: { 0: Abilities.STAKEOUT }, + [Species.BUNNELBY]: { 0: Abilities.THICK_FAT }, + [Species.FLETCHLING]: { 0: Abilities.MAGIC_GUARD }, + [Species.SCATTERBUG]: { 0: Abilities.PRANKSTER }, + [Species.LITLEO]: { 0: Abilities.BEAST_BOOST }, + [Species.FLABEBE]: { 0: Abilities.GRASSY_SURGE }, + [Species.SKIDDO]: { 0: Abilities.SEED_SOWER }, + [Species.PANCHAM]: { 0: Abilities.FUR_COAT }, + [Species.FURFROU]: { 0: Abilities.FLUFFY }, + [Species.ESPURR]: { 0: Abilities.FUR_COAT }, + [Species.HONEDGE]: { 0: Abilities.SHARPNESS }, + [Species.SPRITZEE]: { 0: Abilities.FUR_COAT }, + [Species.SWIRLIX]: { 0: Abilities.RIPEN }, + [Species.INKAY]: { 0: Abilities.UNNERVE }, + [Species.BINACLE]: { 0: Abilities.SAP_SIPPER }, + [Species.SKRELP]: { 0: Abilities.DRAGONS_MAW }, + [Species.CLAUNCHER]: { 0: Abilities.PROTEAN }, + [Species.HELIOPTILE]: { 0: Abilities.PROTEAN }, + [Species.TYRUNT]: { 0: Abilities.RECKLESS }, + [Species.AMAURA]: { 0: Abilities.ICE_SCALES }, + [Species.HAWLUCHA]: { 0: Abilities.MOXIE }, + [Species.DEDENNE]: { 0: Abilities.PIXILATE }, + [Species.CARBINK]: { 0: Abilities.SOLID_ROCK }, + [Species.GOOMY]: { 0: Abilities.REGENERATOR }, + [Species.KLEFKI]: { 0: Abilities.LEVITATE }, + [Species.PHANTUMP]: { 0: Abilities.SHADOW_TAG }, + [Species.PUMPKABOO]: { 0: Abilities.WELL_BAKED_BODY }, + [Species.BERGMITE]: { 0: Abilities.ICE_SCALES }, + [Species.NOIBAT]: { 0: Abilities.PUNK_ROCK }, + [Species.XERNEAS]: { 0: Abilities.HARVEST }, + [Species.YVELTAL]: { 0: Abilities.SOUL_HEART }, + [Species.ZYGARDE]: { 0: Abilities.ADAPTABILITY }, + [Species.DIANCIE]: { 0: Abilities.PRISM_ARMOR }, + [Species.HOOPA]: { 0: Abilities.OPPORTUNIST }, + [Species.VOLCANION]: { 0: Abilities.NEUTRALIZING_GAS }, + [Species.ETERNAL_FLOETTE]: { 0: Abilities.MAGIC_GUARD }, - [Species.SPRIGATITO]: Abilities.MAGICIAN, - [Species.FUECOCO]: Abilities.PUNK_ROCK, - [Species.QUAXLY]: Abilities.OPPORTUNIST, - [Species.LECHONK]: Abilities.SIMPLE, - [Species.TAROUNTULA]: Abilities.HONEY_GATHER, - [Species.NYMBLE]: Abilities.GUTS, - [Species.PAWMI]: Abilities.TRANSISTOR, - [Species.TANDEMAUS]: Abilities.SCRAPPY, - [Species.FIDOUGH]: Abilities.WATER_ABSORB, - [Species.SMOLIV]: Abilities.RIPEN, - [Species.SQUAWKABILLY]: Abilities.MOXIE, - [Species.NACLI]: Abilities.SOLID_ROCK, - [Species.CHARCADET]: Abilities.PRISM_ARMOR, - [Species.TADBULB]: Abilities.STAMINA, - [Species.WATTREL]: Abilities.SHEER_FORCE, - [Species.MASCHIFF]: Abilities.STRONG_JAW, - [Species.SHROODLE]: Abilities.CORROSION, - [Species.BRAMBLIN]: Abilities.SHADOW_SHIELD, - [Species.TOEDSCOOL]: Abilities.PRANKSTER, - [Species.KLAWF]: Abilities.WATER_ABSORB, - [Species.CAPSAKID]: Abilities.PARENTAL_BOND, - [Species.RELLOR]: Abilities.PRANKSTER, - [Species.FLITTLE]: Abilities.DAZZLING, - [Species.TINKATINK]: Abilities.STEELWORKER, - [Species.WIGLETT]: Abilities.STURDY, - [Species.BOMBIRDIER]: Abilities.UNBURDEN, - [Species.FINIZEN]: Abilities.IRON_FIST, - [Species.VAROOM]: Abilities.LEVITATE, - [Species.CYCLIZAR]: Abilities.PROTEAN, - [Species.ORTHWORM]: Abilities.REGENERATOR, - [Species.GLIMMET]: Abilities.LEVITATE, - [Species.GREAVARD]: Abilities.UNAWARE, - [Species.FLAMIGO]: Abilities.MOXIE, - [Species.CETODDLE]: Abilities.REFRIGERATE, - [Species.VELUZA]: Abilities.SUPER_LUCK, - [Species.DONDOZO]: Abilities.DRAGONS_MAW, - [Species.TATSUGIRI]: Abilities.FLUFFY, - [Species.GREAT_TUSK]: Abilities.INTIMIDATE, - [Species.SCREAM_TAIL]: Abilities.UNAWARE, - [Species.BRUTE_BONNET]: Abilities.CHLOROPHYLL, - [Species.FLUTTER_MANE]: Abilities.DAZZLING, - [Species.SLITHER_WING]: Abilities.SCRAPPY, - [Species.SANDY_SHOCKS]: Abilities.ELECTRIC_SURGE, - [Species.IRON_TREADS]: Abilities.STEELY_SPIRIT, - [Species.IRON_BUNDLE]: Abilities.SNOW_WARNING, - [Species.IRON_HANDS]: Abilities.IRON_FIST, - [Species.IRON_JUGULIS]: Abilities.LIGHTNING_ROD, - [Species.IRON_MOTH]: Abilities.LEVITATE, - [Species.IRON_THORNS]: Abilities.SAND_STREAM, - [Species.FRIGIBAX]: Abilities.INTIMIDATE, - [Species.GIMMIGHOUL]: Abilities.HONEY_GATHER, - [Species.WO_CHIEN]: Abilities.VESSEL_OF_RUIN, - [Species.CHIEN_PAO]: Abilities.INTIMIDATE, - [Species.TING_LU]: Abilities.STAMINA, - [Species.CHI_YU]: Abilities.BERSERK, - [Species.ROARING_MOON]: Abilities.TOUGH_CLAWS, - [Species.IRON_VALIANT]: Abilities.NEUROFORCE, - [Species.KORAIDON]: Abilities.OPPORTUNIST, - [Species.MIRAIDON]: Abilities.OPPORTUNIST, - [Species.WALKING_WAKE]: Abilities.BEAST_BOOST, - [Species.IRON_LEAVES]: Abilities.SHARPNESS, - [Species.POLTCHAGEIST]: Abilities.TRIAGE, - [Species.OKIDOGI]: Abilities.DARK_AURA, - [Species.MUNKIDORI]: Abilities.MAGICIAN, - [Species.FEZANDIPITI]: Abilities.PIXILATE, - [Species.OGERPON]: Abilities.OPPORTUNIST, - [Species.GOUGING_FIRE]: Abilities.BEAST_BOOST, - [Species.RAGING_BOLT]: Abilities.BEAST_BOOST, - [Species.IRON_BOULDER]: Abilities.SHARPNESS, - [Species.IRON_CROWN]: Abilities.SHARPNESS, - [Species.TERAPAGOS]: Abilities.SOUL_HEART, - [Species.PECHARUNT]: Abilities.TOXIC_CHAIN, - [Species.PALDEA_TAUROS]: Abilities.ADAPTABILITY, - [Species.PALDEA_WOOPER]: Abilities.THICK_FAT, - [Species.BLOODMOON_URSALUNA]: Abilities.BERSERK + [Species.ROWLET]: { 0: Abilities.SNIPER }, + [Species.LITTEN]: { 0: Abilities.OPPORTUNIST }, + [Species.POPPLIO]: { 0: Abilities.PUNK_ROCK }, + [Species.PIKIPEK]: { 0: Abilities.TECHNICIAN }, + [Species.YUNGOOS]: { 0: Abilities.TOUGH_CLAWS }, + [Species.GRUBBIN]: { 0: Abilities.SPEED_BOOST }, + [Species.CRABRAWLER]: { 0: Abilities.WATER_BUBBLE }, + [Species.ORICORIO]: { 0: Abilities.ADAPTABILITY }, + [Species.CUTIEFLY]: { 0: Abilities.TINTED_LENS }, + [Species.ROCKRUFF]: { 0: Abilities.ROCKY_PAYLOAD }, + [Species.WISHIWASHI]: { 0: Abilities.REGENERATOR }, + [Species.MAREANIE]: { 0: Abilities.TOXIC_DEBRIS }, + [Species.MUDBRAY]: { 0: Abilities.SAP_SIPPER }, + [Species.DEWPIDER]: { 0: Abilities.TINTED_LENS }, + [Species.FOMANTIS]: { 0: Abilities.SHARPNESS }, + [Species.MORELULL]: { 0: Abilities.TRIAGE }, + [Species.SALANDIT]: { 0: Abilities.DRAGONS_MAW }, + [Species.STUFFUL]: { 0: Abilities.SCRAPPY }, + [Species.BOUNSWEET]: { 0: Abilities.MOXIE }, + [Species.COMFEY]: { 0: Abilities.FRIEND_GUARD }, + [Species.ORANGURU]: { 0: Abilities.POWER_SPOT }, + [Species.PASSIMIAN]: { 0: Abilities.LIBERO }, + [Species.WIMPOD]: { 0: Abilities.REGENERATOR }, + [Species.SANDYGAST]: { 0: Abilities.SAND_SPIT }, + [Species.PYUKUMUKU]: { 0: Abilities.PURIFYING_SALT }, + [Species.TYPE_NULL]: { 0: Abilities.ADAPTABILITY }, + [Species.MINIOR]: { 0: Abilities.STURDY }, + [Species.KOMALA]: { 0: Abilities.GUTS }, + [Species.TURTONATOR]: { 0: Abilities.DAUNTLESS_SHIELD }, + [Species.TOGEDEMARU]: { 0: Abilities.ROUGH_SKIN }, + [Species.MIMIKYU]: { 0: Abilities.TOUGH_CLAWS }, + [Species.BRUXISH]: { 0: Abilities.MULTISCALE }, + [Species.DRAMPA]: { 0: Abilities.THICK_FAT }, + [Species.DHELMISE]: { 0: Abilities.WATER_BUBBLE }, + [Species.JANGMO_O]: { 0: Abilities.DAUNTLESS_SHIELD }, + [Species.TAPU_KOKO]: { 0: Abilities.DAUNTLESS_SHIELD }, + [Species.TAPU_LELE]: { 0: Abilities.BERSERK }, + [Species.TAPU_BULU]: { 0: Abilities.FLOWER_VEIL }, + [Species.TAPU_FINI]: { 0: Abilities.FAIRY_AURA }, + [Species.COSMOG]: { 0: Abilities.BEAST_BOOST }, + [Species.NIHILEGO]: { 0: Abilities.LEVITATE }, + [Species.BUZZWOLE]: { 0: Abilities.MOXIE }, + [Species.PHEROMOSA]: { 0: Abilities.TINTED_LENS }, + [Species.XURKITREE]: { 0: Abilities.TRANSISTOR }, + [Species.CELESTEELA]: { 0: Abilities.HEATPROOF }, + [Species.KARTANA]: { 0: Abilities.LONG_REACH }, + [Species.GUZZLORD]: { 0: Abilities.POISON_HEAL }, + [Species.NECROZMA]: { 0: Abilities.BEAST_BOOST }, + [Species.MAGEARNA]: { 0: Abilities.STEELY_SPIRIT }, + [Species.MARSHADOW]: { 0: Abilities.IRON_FIST }, + [Species.POIPOLE]: { 0: Abilities.LEVITATE }, + [Species.STAKATAKA]: { 0: Abilities.SOLID_ROCK }, + [Species.BLACEPHALON]: { 0: Abilities.MAGIC_GUARD }, + [Species.ZERAORA]: { 0: Abilities.TOUGH_CLAWS }, + [Species.MELTAN]: { 0: Abilities.HEATPROOF }, + [Species.ALOLA_RATTATA]: { 0: Abilities.ADAPTABILITY }, + [Species.ALOLA_SANDSHREW]: { 0: Abilities.ICE_SCALES }, + [Species.ALOLA_VULPIX]: { 0: Abilities.SHEER_FORCE }, + [Species.ALOLA_DIGLETT]: { 0: Abilities.STURDY }, + [Species.ALOLA_MEOWTH]: { 0: Abilities.DARK_AURA }, + [Species.ALOLA_GEODUDE]: { 0: Abilities.DRY_SKIN }, + [Species.ALOLA_GRIMER]: { 0: Abilities.TOXIC_DEBRIS }, + + [Species.GROOKEY]: { 0: Abilities.GRASS_PELT }, + [Species.SCORBUNNY]: { 0: Abilities.NO_GUARD }, + [Species.SOBBLE]: { 0: Abilities.SUPER_LUCK }, + [Species.SKWOVET]: { 0: Abilities.HARVEST }, + [Species.ROOKIDEE]: { 0: Abilities.IRON_BARBS }, + [Species.BLIPBUG]: { 0: Abilities.PSYCHIC_SURGE }, + [Species.NICKIT]: { 0: Abilities.MAGICIAN }, + [Species.GOSSIFLEUR]: { 0: Abilities.GRASSY_SURGE }, + [Species.WOOLOO]: { 0: Abilities.SCRAPPY }, + [Species.CHEWTLE]: { 0: Abilities.ROCKY_PAYLOAD }, + [Species.YAMPER]: { 0: Abilities.SHEER_FORCE }, + [Species.ROLYCOLY]: { 0: Abilities.SOLID_ROCK }, + [Species.APPLIN]: { 0: Abilities.DRAGONS_MAW }, + [Species.SILICOBRA]: { 0: Abilities.SAND_RUSH }, + [Species.CRAMORANT]: { 0: Abilities.LIGHTNING_ROD }, + [Species.ARROKUDA]: { 0: Abilities.INTIMIDATE }, + [Species.TOXEL]: { 0: Abilities.ELECTRIC_SURGE }, + [Species.SIZZLIPEDE]: { 0: Abilities.SPEED_BOOST }, + [Species.CLOBBOPUS]: { 0: Abilities.WATER_BUBBLE }, + [Species.SINISTEA]: { 0: Abilities.SHADOW_SHIELD }, + [Species.HATENNA]: { 0: Abilities.FAIRY_AURA }, + [Species.IMPIDIMP]: { 0: Abilities.INTIMIDATE }, + [Species.MILCERY]: { 0: Abilities.REGENERATOR }, + [Species.FALINKS]: { 0: Abilities.PARENTAL_BOND }, + [Species.PINCURCHIN]: { 0: Abilities.ELECTROMORPHOSIS }, + [Species.SNOM]: { 0: Abilities.SNOW_WARNING }, + [Species.STONJOURNER]: { 0: Abilities.STURDY }, + [Species.EISCUE]: { 0: Abilities.ICE_SCALES }, + [Species.INDEEDEE]: { 0: Abilities.FRIEND_GUARD }, + [Species.MORPEKO]: { 0: Abilities.MOODY }, + [Species.CUFANT]: { 0: Abilities.EARTH_EATER }, + [Species.DRACOZOLT]: { 0: Abilities.NO_GUARD }, + [Species.ARCTOZOLT]: { 0: Abilities.WATER_ABSORB }, + [Species.DRACOVISH]: { 0: Abilities.SWIFT_SWIM }, + [Species.ARCTOVISH]: { 0: Abilities.STRONG_JAW }, + [Species.DURALUDON]: { 0: Abilities.STEELWORKER }, + [Species.DREEPY]: { 0: Abilities.PARENTAL_BOND }, + [Species.ZACIAN]: { 0: Abilities.UNNERVE }, + [Species.ZAMAZENTA]: { 0: Abilities.UNNERVE }, + [Species.ETERNATUS]: { 0: Abilities.NEUTRALIZING_GAS }, + [Species.KUBFU]: { 0: Abilities.IRON_FIST }, + [Species.ZARUDE]: { 0: Abilities.TOUGH_CLAWS }, + [Species.REGIELEKI]: { 0: Abilities.ELECTRIC_SURGE }, + [Species.REGIDRAGO]: { 0: Abilities.MULTISCALE }, + [Species.GLASTRIER]: { 0: Abilities.FILTER }, + [Species.SPECTRIER]: { 0: Abilities.SHADOW_SHIELD }, + [Species.CALYREX]: { 0: Abilities.HARVEST }, + [Species.ENAMORUS]: { 0: Abilities.FAIRY_AURA }, + [Species.GALAR_MEOWTH]: { 0: Abilities.UNBURDEN }, + [Species.GALAR_PONYTA]: { 0: Abilities.CHILLING_NEIGH }, + [Species.GALAR_SLOWPOKE]: { 0: Abilities.UNAWARE }, + [Species.GALAR_FARFETCHD]: { 0: Abilities.INTREPID_SWORD }, + [Species.GALAR_ARTICUNO]: { 0: Abilities.SERENE_GRACE }, + [Species.GALAR_ZAPDOS]: { 0: Abilities.TOUGH_CLAWS }, + [Species.GALAR_MOLTRES]: { 0: Abilities.DARK_AURA }, + [Species.GALAR_CORSOLA]: { 0: Abilities.SHADOW_SHIELD }, + [Species.GALAR_ZIGZAGOON]: { 0: Abilities.POISON_HEAL }, + [Species.GALAR_DARUMAKA]: { 0: Abilities.FLASH_FIRE }, + [Species.GALAR_YAMASK]: { 0: Abilities.TABLETS_OF_RUIN }, + [Species.GALAR_STUNFISK]: { 0: Abilities.ARENA_TRAP }, + [Species.HISUI_GROWLITHE]: { 0: Abilities.RECKLESS }, + [Species.HISUI_VOLTORB]: { 0: Abilities.TRANSISTOR }, + [Species.HISUI_QWILFISH]: { 0: Abilities.MERCILESS }, + [Species.HISUI_SNEASEL]: { 0: Abilities.SCRAPPY }, + [Species.HISUI_ZORUA]: { 0: Abilities.ADAPTABILITY }, + + [Species.SPRIGATITO]: { 0: Abilities.MAGICIAN }, + [Species.FUECOCO]: { 0: Abilities.PUNK_ROCK }, + [Species.QUAXLY]: { 0: Abilities.OPPORTUNIST }, + [Species.LECHONK]: { 0: Abilities.SIMPLE }, + [Species.TAROUNTULA]: { 0: Abilities.HONEY_GATHER }, + [Species.NYMBLE]: { 0: Abilities.GUTS }, + [Species.PAWMI]: { 0: Abilities.TRANSISTOR }, + [Species.TANDEMAUS]: { 0: Abilities.SCRAPPY }, + [Species.FIDOUGH]: { 0: Abilities.WATER_ABSORB }, + [Species.SMOLIV]: { 0: Abilities.RIPEN }, + [Species.SQUAWKABILLY]: { 0: Abilities.MOXIE }, + [Species.NACLI]: { 0: Abilities.SOLID_ROCK }, + [Species.CHARCADET]: { 0: Abilities.PRISM_ARMOR }, + [Species.TADBULB]: { 0: Abilities.STAMINA }, + [Species.WATTREL]: { 0: Abilities.SHEER_FORCE }, + [Species.MASCHIFF]: { 0: Abilities.STRONG_JAW }, + [Species.SHROODLE]: { 0: Abilities.CORROSION }, + [Species.BRAMBLIN]: { 0: Abilities.SHADOW_SHIELD }, + [Species.TOEDSCOOL]: { 0: Abilities.PRANKSTER }, + [Species.KLAWF]: { 0: Abilities.WATER_ABSORB }, + [Species.CAPSAKID]: { 0: Abilities.PARENTAL_BOND }, + [Species.RELLOR]: { 0: Abilities.PRANKSTER }, + [Species.FLITTLE]: { 0: Abilities.DAZZLING }, + [Species.TINKATINK]: { 0: Abilities.STEELWORKER }, + [Species.WIGLETT]: { 0: Abilities.STURDY }, + [Species.BOMBIRDIER]: { 0: Abilities.UNBURDEN }, + [Species.FINIZEN]: { 0: Abilities.IRON_FIST }, + [Species.VAROOM]: { 0: Abilities.LEVITATE }, + [Species.CYCLIZAR]: { 0: Abilities.PROTEAN }, + [Species.ORTHWORM]: { 0: Abilities.REGENERATOR }, + [Species.GLIMMET]: { 0: Abilities.TERA_SHELL }, + [Species.GREAVARD]: { 0: Abilities.UNAWARE }, + [Species.FLAMIGO]: { 0: Abilities.MOXIE }, + [Species.CETODDLE]: { 0: Abilities.REFRIGERATE }, + [Species.VELUZA]: { 0: Abilities.SUPER_LUCK }, + [Species.DONDOZO]: { 0: Abilities.DRAGONS_MAW }, + [Species.TATSUGIRI]: { 0: Abilities.FLUFFY }, + [Species.GREAT_TUSK]: { 0: Abilities.INTIMIDATE }, + [Species.SCREAM_TAIL]: { 0: Abilities.UNAWARE }, + [Species.BRUTE_BONNET]: { 0: Abilities.CHLOROPHYLL }, + [Species.FLUTTER_MANE]: { 0: Abilities.DAZZLING }, + [Species.SLITHER_WING]: { 0: Abilities.SCRAPPY }, + [Species.SANDY_SHOCKS]: { 0: Abilities.ELECTRIC_SURGE }, + [Species.IRON_TREADS]: { 0: Abilities.DAUNTLESS_SHIELD }, + [Species.IRON_BUNDLE]: { 0: Abilities.SNOW_WARNING }, + [Species.IRON_HANDS]: { 0: Abilities.IRON_FIST }, + [Species.IRON_JUGULIS]: { 0: Abilities.LIGHTNING_ROD }, + [Species.IRON_MOTH]: { 0: Abilities.LEVITATE }, + [Species.IRON_THORNS]: { 0: Abilities.SAND_STREAM }, + [Species.FRIGIBAX]: { 0: Abilities.INTIMIDATE }, + [Species.GIMMIGHOUL]: { 0: Abilities.HONEY_GATHER }, + [Species.WO_CHIEN]: { 0: Abilities.VESSEL_OF_RUIN }, + [Species.CHIEN_PAO]: { 0: Abilities.INTIMIDATE }, + [Species.TING_LU]: { 0: Abilities.STAMINA }, + [Species.CHI_YU]: { 0: Abilities.BERSERK }, + [Species.ROARING_MOON]: { 0: Abilities.INTIMIDATE }, + [Species.IRON_VALIANT]: { 0: Abilities.NEUROFORCE }, + [Species.KORAIDON]: { 0: Abilities.OPPORTUNIST }, + [Species.MIRAIDON]: { 0: Abilities.OPPORTUNIST }, + [Species.WALKING_WAKE]: { 0: Abilities.BEAST_BOOST }, + [Species.IRON_LEAVES]: { 0: Abilities.SHARPNESS }, + [Species.POLTCHAGEIST]: { 0: Abilities.TRIAGE }, + [Species.OKIDOGI]: { 0: Abilities.DARK_AURA }, + [Species.MUNKIDORI]: { 0: Abilities.MAGICIAN }, + [Species.FEZANDIPITI]: { 0: Abilities.PIXILATE }, + [Species.OGERPON]: { 0: Abilities.OPPORTUNIST }, + [Species.GOUGING_FIRE]: { 0: Abilities.BEAST_BOOST }, + [Species.RAGING_BOLT]: { 0: Abilities.BEAST_BOOST }, + [Species.IRON_BOULDER]: { 0: Abilities.SHARPNESS }, + [Species.IRON_CROWN]: { 0: Abilities.SHARPNESS }, + [Species.TERAPAGOS]: { 0: Abilities.SHIELD_DUST }, + [Species.PECHARUNT]: { 0: Abilities.TOXIC_CHAIN }, + [Species.PALDEA_TAUROS]: { 0: Abilities.ADAPTABILITY }, + [Species.PALDEA_WOOPER]: { 0: Abilities.THICK_FAT }, + [Species.BLOODMOON_URSALUNA]: { 0: Abilities.BERSERK } }; diff --git a/src/data/balance/pokemon-evolutions.ts b/src/data/balance/pokemon-evolutions.ts index 9e86ea7397b..0e101c7155b 100644 --- a/src/data/balance/pokemon-evolutions.ts +++ b/src/data/balance/pokemon-evolutions.ts @@ -1,6 +1,7 @@ +import { globalScene } from "#app/global-scene"; import { Gender } from "#app/data/gender"; import { PokeballType } from "#enums/pokeball"; -import Pokemon from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; import { Type } from "#enums/type"; import * as Utils from "#app/utils"; import { WeatherType } from "#enums/weather-type"; @@ -11,6 +12,8 @@ import { Species } from "#enums/species"; import { TimeOfDay } from "#enums/time-of-day"; import { DamageMoneyRewardModifier, ExtraModifierModifier, MoneyMultiplierModifier, TempExtraModifierModifier } from "#app/modifier/modifier"; import { SpeciesFormKey } from "#enums/species-form-key"; +import { speciesStarterCosts } from "./starters"; +import i18next from "i18next"; export enum SpeciesWildEvolutionDelay { @@ -74,9 +77,9 @@ export enum EvolutionItem { /** * Pokemon Evolution tuple type consisting of: * @property 0 {@linkcode Species} The species of the Pokemon. - * @property 1 {@linkcode integer} The level at which the Pokemon evolves. + * @property 1 {@linkcode number} The level at which the Pokemon evolves. */ -export type EvolutionLevel = [species: Species, level: integer]; +export type EvolutionLevel = [species: Species, level: number]; export type EvolutionConditionPredicate = (p: Pokemon) => boolean; export type EvolutionConditionEnforceFunc = (p: Pokemon) => void; @@ -85,12 +88,13 @@ export class SpeciesFormEvolution { public speciesId: Species; public preFormKey: string | null; public evoFormKey: string | null; - public level: integer; + public level: number; public item: EvolutionItem | null; public condition: SpeciesEvolutionCondition | null; public wildDelay: SpeciesWildEvolutionDelay; + public description: string = ""; - constructor(speciesId: Species, preFormKey: string | null, evoFormKey: string | null, level: integer, item: EvolutionItem | null, condition: SpeciesEvolutionCondition | null, wildDelay?: SpeciesWildEvolutionDelay) { + constructor(speciesId: Species, preFormKey: string | null, evoFormKey: string | null, level: number, item: EvolutionItem | null, condition: SpeciesEvolutionCondition | null, wildDelay?: SpeciesWildEvolutionDelay) { this.speciesId = speciesId; this.preFormKey = preFormKey; this.evoFormKey = evoFormKey; @@ -98,11 +102,28 @@ export class SpeciesFormEvolution { this.item = item || EvolutionItem.NONE; this.condition = condition; this.wildDelay = wildDelay ?? SpeciesWildEvolutionDelay.NONE; + + const strings: string[] = []; + if (this.level > 1) { + strings.push(i18next.t("pokemonEvolutions:level") + ` ${this.level}`); + } + if (this.item) { + const itemDescription = i18next.t(`modifierType:EvolutionItem.${EvolutionItem[this.item].toUpperCase()}`); + const rarity = this.item > 50 ? i18next.t("pokemonEvolutions:ULTRA") : i18next.t("pokemonEvolutions:GREAT"); + strings.push(i18next.t("pokemonEvolutions:using") + itemDescription + ` (${rarity})`); + } + if (this.condition) { + strings.push(this.condition.description); + } + this.description = strings + .filter(str => str !== "") + .map((str, index) => index > 0 ? str[0].toLowerCase() + str.slice(1) : str) + .join(i18next.t("pokemonEvolutions:connector")); } } export class SpeciesEvolution extends SpeciesFormEvolution { - constructor(speciesId: Species, level: integer, item: EvolutionItem | null, condition: SpeciesEvolutionCondition | null, wildDelay?: SpeciesWildEvolutionDelay) { + constructor(speciesId: Species, level: number, item: EvolutionItem | null, condition: SpeciesEvolutionCondition | null, wildDelay?: SpeciesWildEvolutionDelay) { super(speciesId, null, null, level, item, condition, wildDelay); } } @@ -119,17 +140,215 @@ export class FusionSpeciesFormEvolution extends SpeciesFormEvolution { export class SpeciesEvolutionCondition { public predicate: EvolutionConditionPredicate; - public enforceFunc: EvolutionConditionEnforceFunc | undefined; + public enforceFunc?: EvolutionConditionEnforceFunc; + public description: string; constructor(predicate: EvolutionConditionPredicate, enforceFunc?: EvolutionConditionEnforceFunc) { this.predicate = predicate; this.enforceFunc = enforceFunc; + this.description = ""; } } -export class SpeciesFriendshipEvolutionCondition extends SpeciesEvolutionCondition { - constructor(friendshipAmount: integer, predicate?: EvolutionConditionPredicate, enforceFunc?: EvolutionConditionEnforceFunc) { - super(p => p.friendship >= friendshipAmount && (!predicate || predicate(p)), enforceFunc); +class GenderEvolutionCondition extends SpeciesEvolutionCondition { + public gender: Gender; + constructor(gender: Gender) { + super(p => p.gender === gender, p => p.gender = gender); + this.gender = gender; + this.description = i18next.t("pokemonEvolutions:gender", { gender: i18next.t(`pokemonEvolutions:${Gender[gender]}`) }); + } +} + +class TimeOfDayEvolutionCondition extends SpeciesEvolutionCondition { + public timesOfDay: TimeOfDay[]; + constructor(tod: "day" | "night") { + if (tod === "day") { + super(() => globalScene.arena.getTimeOfDay() === TimeOfDay.DAWN || globalScene.arena.getTimeOfDay() === TimeOfDay.DAY); + this.timesOfDay = [ TimeOfDay.DAWN, TimeOfDay.DAY ]; + } else if (tod === "night") { + super(() => globalScene.arena.getTimeOfDay() === TimeOfDay.DUSK || globalScene.arena.getTimeOfDay() === TimeOfDay.NIGHT); + this.timesOfDay = [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]; + } else { + super(() => false); + this.timesOfDay = []; + } + this.description = i18next.t("pokemonEvolutions:timeOfDay", { tod: i18next.t(`pokemonEvolutions:${tod}`) }); + } +} + +class MoveEvolutionCondition extends SpeciesEvolutionCondition { + public move: Moves; + constructor(move: Moves) { + super(p => p.moveset.filter(m => m?.moveId === move).length > 0); + this.move = move; + const moveKey = Moves[this.move].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join(""); + this.description = i18next.t("pokemonEvolutions:move", { move: i18next.t(`move:${moveKey}.name`) }); + } +} + +class FriendshipEvolutionCondition extends SpeciesEvolutionCondition { + public amount: number; + constructor(amount: number) { + super(p => p.friendship >= amount); + this.amount = amount; + this.description = i18next.t("pokemonEvolutions:friendship"); + } +} + +class FriendshipTimeOfDayEvolutionCondition extends SpeciesEvolutionCondition { + public amount: number; + public timesOfDay: TimeOfDay[]; + constructor(amount: number, tod: "day" | "night") { + if (tod === "day") { + super(p => p.friendship >= amount && (globalScene.arena.getTimeOfDay() === TimeOfDay.DAWN || globalScene.arena.getTimeOfDay() === TimeOfDay.DAY)); + this.timesOfDay = [ TimeOfDay.DAWN, TimeOfDay.DAY ]; + } else if (tod === "night") { + super(p => p.friendship >= amount && (globalScene.arena.getTimeOfDay() === TimeOfDay.DUSK || globalScene.arena.getTimeOfDay() === TimeOfDay.NIGHT)); + this.timesOfDay = [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]; + } else { + super(p => false); + this.timesOfDay = []; + } + this.amount = amount; + this.description = i18next.t("pokemonEvolutions:friendshipTimeOfDay", { tod: i18next.t(`pokemonEvolutions:${tod}`) }); + } +} + +class FriendshipMoveTypeEvolutionCondition extends SpeciesEvolutionCondition { + public amount: number; + public type: Type; + constructor(amount: number, type: Type) { + super(p => p.friendship >= amount && !!p.getMoveset().find(m => m?.getMove().type === type)); + this.amount = amount; + this.type = type; + this.description = i18next.t("pokemonEvolutions:friendshipMoveType", { type: i18next.t(`pokemonInfo:Type.${Type[this.type]}`) }); + } +} + +class ShedinjaEvolutionCondition extends SpeciesEvolutionCondition { + constructor() { + super(() => globalScene.getPlayerParty().length < 6 && globalScene.pokeballCounts[PokeballType.POKEBALL] > 0); + this.description = i18next.t("pokemonEvolutions:shedinja"); + } +} + +class PartyTypeEvolutionCondition extends SpeciesEvolutionCondition { + public type: Type; + constructor(type: Type) { + super(() => !!globalScene.getPlayerParty().find(p => p.getTypes(false, false, true).indexOf(type) > -1)); + this.type = type; + this.description = i18next.t("pokemonEvolutions:partyType", { type: i18next.t(`pokemonInfo:Type.${Type[this.type]}`) }); + } +} + +class CaughtEvolutionCondition extends SpeciesEvolutionCondition { + public species: Species; + constructor(species: Species) { + super(() => !!globalScene.gameData.dexData[species].caughtAttr); + this.species = species; + this.description = i18next.t("pokemonEvolutions:caught", { species: i18next.t(`pokemon:${Species[this.species].toLowerCase()}`) }); + } +} + +class WeatherEvolutionCondition extends SpeciesEvolutionCondition { + public weatherTypes: WeatherType[]; + constructor(weatherTypes: WeatherType[]) { + super(() => weatherTypes.indexOf(globalScene.arena.weather?.weatherType || WeatherType.NONE) > -1); + this.weatherTypes = weatherTypes; + this.description = i18next.t("pokemonEvolutions:weather"); + } +} + +class MoveTypeEvolutionCondition extends SpeciesEvolutionCondition { + public type: Type; + constructor(type: Type) { + super(p => p.moveset.filter(m => m?.getMove().type === type).length > 0); + this.type = type; + this.description = i18next.t("pokemonEvolutions:moveType", { type: i18next.t(`pokemonInfo:Type.${Type[this.type]}`) }); + } +} + +class TreasureEvolutionCondition extends SpeciesEvolutionCondition { + constructor() { + super(p => p.evoCounter + + p.getHeldItems().filter(m => m instanceof DamageMoneyRewardModifier).length + + globalScene.findModifiers(m => m instanceof MoneyMultiplierModifier + || m instanceof ExtraModifierModifier || m instanceof TempExtraModifierModifier).length > 9); + this.description = i18next.t("pokemonEvolutions:treasure"); + } +} + +class TyrogueEvolutionCondition extends SpeciesEvolutionCondition { + public move: Moves; + constructor(move: Moves) { + super(p => + p.getMoveset(true).find(m => m && [ Moves.LOW_SWEEP, Moves.MACH_PUNCH, Moves.RAPID_SPIN ].includes(m?.moveId))?.moveId === move); + this.move = move; + const moveKey = Moves[this.move].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join(""); + this.description = i18next.t("pokemonEvolutions:move", { move: i18next.t(`move:${moveKey}.name`) }); + } +} + +class NatureEvolutionCondition extends SpeciesEvolutionCondition { + public natures: Nature[]; + constructor(natures: Nature[]) { + super(p => natures.indexOf(p.getNature()) > -1); + this.natures = natures; + this.description = i18next.t("pokemonEvolutions:nature"); + } +} + +class MoveTimeOfDayEvolutionCondition extends SpeciesEvolutionCondition { + public move: Moves; + public timesOfDay: TimeOfDay[]; + constructor(move: Moves, tod: "day" | "night") { + if (tod === "day") { + super(p => p.moveset.filter(m => m?.moveId === move).length > 0 && (globalScene.arena.getTimeOfDay() === TimeOfDay.DAWN || globalScene.arena.getTimeOfDay() === TimeOfDay.DAY)); + this.move = move; + this.timesOfDay = [ TimeOfDay.DAWN, TimeOfDay.DAY ]; + } else if (tod === "night") { + super(p => p.moveset.filter(m => m?.moveId === move).length > 0 && (globalScene.arena.getTimeOfDay() === TimeOfDay.DUSK || globalScene.arena.getTimeOfDay() === TimeOfDay.NIGHT)); + this.move = move; + this.timesOfDay = [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]; + } else { + super(() => false); + this.timesOfDay = []; + } + const moveKey = Moves[this.move].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join(""); + this.description = i18next.t("pokemonEvolutions:moveTimeOfDay", { move: i18next.t(`move:${moveKey}.name`), tod: i18next.t(`pokemonEvolutions:${tod}`) }); + } +} + +class BiomeEvolutionCondition extends SpeciesEvolutionCondition { + public biomes: Biome[]; + constructor(biomes: Biome[]) { + super(() => biomes.filter(b => b === globalScene.arena.biomeType).length > 0); + this.biomes = biomes; + this.description = i18next.t("pokemonEvolutions:biome"); + } +} + +class DunsparceEvolutionCondition extends SpeciesEvolutionCondition { + constructor() { + super(p => { + let ret = false; + if (p.moveset.filter(m => m?.moveId === Moves.HYPER_DRILL).length > 0) { + globalScene.executeWithSeedOffset(() => ret = !Utils.randSeedInt(4), p.id); + } + return ret; + }); + const moveKey = Moves[Moves.HYPER_DRILL].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join(""); + this.description = i18next.t("pokemonEvolutions:move", { move: i18next.t(`move:${moveKey}.name`) }); + } +} + +class TandemausEvolutionCondition extends SpeciesEvolutionCondition { + constructor() { + super(p => { + let ret = false; + globalScene.executeWithSeedOffset(() => ret = !Utils.randSeedInt(4), p.id); + return ret; + }); } } @@ -266,8 +485,8 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.ELECTRODE, 30, null, null) ], [Species.CUBONE]: [ - new SpeciesEvolution(Species.ALOLA_MAROWAK, 28, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)), - new SpeciesEvolution(Species.MAROWAK, 28, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY)) + new SpeciesEvolution(Species.ALOLA_MAROWAK, 28, null, new TimeOfDayEvolutionCondition("night")), + new SpeciesEvolution(Species.MAROWAK, 28, null, new TimeOfDayEvolutionCondition("day")) ], [Species.TYROGUE]: [ /** @@ -276,19 +495,13 @@ export const pokemonEvolutions: PokemonEvolutions = { * If Tyrogue knows multiple of these moves, its evolution is based on * the first qualifying move in its moveset. */ - new SpeciesEvolution(Species.HITMONLEE, 20, null, new SpeciesEvolutionCondition(p => - p.getMoveset(true).find(move => move && [ Moves.LOW_SWEEP, Moves.MACH_PUNCH, Moves.RAPID_SPIN ].includes(move?.moveId))?.moveId === Moves.LOW_SWEEP - )), - new SpeciesEvolution(Species.HITMONCHAN, 20, null, new SpeciesEvolutionCondition(p => - p.getMoveset(true).find(move => move && [ Moves.LOW_SWEEP, Moves.MACH_PUNCH, Moves.RAPID_SPIN ].includes(move?.moveId))?.moveId === Moves.MACH_PUNCH - )), - new SpeciesEvolution(Species.HITMONTOP, 20, null, new SpeciesEvolutionCondition(p => - p.getMoveset(true).find(move => move && [ Moves.LOW_SWEEP, Moves.MACH_PUNCH, Moves.RAPID_SPIN ].includes(move?.moveId))?.moveId === Moves.RAPID_SPIN - )), + new SpeciesEvolution(Species.HITMONLEE, 20, null, new TyrogueEvolutionCondition(Moves.LOW_SWEEP)), + new SpeciesEvolution(Species.HITMONCHAN, 20, null, new TyrogueEvolutionCondition(Moves.MACH_PUNCH)), + new SpeciesEvolution(Species.HITMONTOP, 20, null, new TyrogueEvolutionCondition(Moves.RAPID_SPIN)), ], [Species.KOFFING]: [ - new SpeciesEvolution(Species.GALAR_WEEZING, 35, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)), - new SpeciesEvolution(Species.WEEZING, 35, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY)) + new SpeciesEvolution(Species.GALAR_WEEZING, 35, null, new TimeOfDayEvolutionCondition("night")), + new SpeciesEvolution(Species.WEEZING, 35, null, new TimeOfDayEvolutionCondition("day")) ], [Species.RHYHORN]: [ new SpeciesEvolution(Species.RHYDON, 42, null, null) @@ -333,8 +546,8 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.QUILAVA, 14, null, null) ], [Species.QUILAVA]: [ - new SpeciesEvolution(Species.HISUI_TYPHLOSION, 36, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)), - new SpeciesEvolution(Species.TYPHLOSION, 36, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY)) + new SpeciesEvolution(Species.HISUI_TYPHLOSION, 36, null, new TimeOfDayEvolutionCondition("night")), + new SpeciesEvolution(Species.TYPHLOSION, 36, null, new TimeOfDayEvolutionCondition("day")) ], [Species.TOTODILE]: [ new SpeciesEvolution(Species.CROCONAW, 18, null, null) @@ -436,8 +649,8 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.LINOONE, 20, null, null) ], [Species.WURMPLE]: [ - new SpeciesEvolution(Species.SILCOON, 7, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY)), - new SpeciesEvolution(Species.CASCOON, 7, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)) + new SpeciesEvolution(Species.SILCOON, 7, null, new TimeOfDayEvolutionCondition("day")), + new SpeciesEvolution(Species.CASCOON, 7, null, new TimeOfDayEvolutionCondition("night")) ], [Species.SILCOON]: [ new SpeciesEvolution(Species.BEAUTIFLY, 10, null, null) @@ -461,8 +674,8 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.KIRLIA, 20, null, null) ], [Species.KIRLIA]: [ - new SpeciesEvolution(Species.GARDEVOIR, 30, null, new SpeciesEvolutionCondition(p => p.gender === Gender.FEMALE, p => p.gender = Gender.FEMALE)), - new SpeciesEvolution(Species.GALLADE, 30, null, new SpeciesEvolutionCondition(p => p.gender === Gender.MALE, p => p.gender = Gender.MALE)) + new SpeciesEvolution(Species.GARDEVOIR, 30, null, new GenderEvolutionCondition(Gender.FEMALE)), + new SpeciesEvolution(Species.GALLADE, 30, null, new GenderEvolutionCondition(Gender.MALE)) ], [Species.SURSKIT]: [ new SpeciesEvolution(Species.MASQUERAIN, 22, null, null) @@ -478,7 +691,7 @@ export const pokemonEvolutions: PokemonEvolutions = { ], [Species.NINCADA]: [ new SpeciesEvolution(Species.NINJASK, 20, null, null), - new SpeciesEvolution(Species.SHEDINJA, 20, null, new SpeciesEvolutionCondition(p => p.scene.getPlayerParty().length < 6 && p.scene.pokeballCounts[PokeballType.POKEBALL] > 0)) + new SpeciesEvolution(Species.SHEDINJA, 20, null, new ShedinjaEvolutionCondition()) ], [Species.WHISMUR]: [ new SpeciesEvolution(Species.LOUDRED, 20, null, null) @@ -550,8 +763,8 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.DUSCLOPS, 37, null, null) ], [Species.SNORUNT]: [ - new SpeciesEvolution(Species.GLALIE, 42, null, new SpeciesEvolutionCondition(p => p.gender === Gender.MALE, p => p.gender = Gender.MALE)), - new SpeciesEvolution(Species.FROSLASS, 42, null, new SpeciesEvolutionCondition(p => p.gender === Gender.FEMALE, p => p.gender = Gender.FEMALE)) + new SpeciesEvolution(Species.GLALIE, 42, null, new GenderEvolutionCondition(Gender.MALE)), + new SpeciesEvolution(Species.FROSLASS, 42, null, new GenderEvolutionCondition(Gender.FEMALE)) ], [Species.SPHEAL]: [ new SpeciesEvolution(Species.SEALEO, 32, null, null) @@ -614,11 +827,11 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.BASTIODON, 30, null, null) ], [Species.BURMY]: [ - new SpeciesEvolution(Species.MOTHIM, 20, null, new SpeciesEvolutionCondition(p => p.gender === Gender.MALE, p => p.gender = Gender.MALE)), - new SpeciesEvolution(Species.WORMADAM, 20, null, new SpeciesEvolutionCondition(p => p.gender === Gender.FEMALE, p => p.gender = Gender.FEMALE)) + new SpeciesEvolution(Species.MOTHIM, 20, null, new GenderEvolutionCondition(Gender.MALE)), + new SpeciesEvolution(Species.WORMADAM, 20, null, new GenderEvolutionCondition(Gender.FEMALE)) ], [Species.COMBEE]: [ - new SpeciesEvolution(Species.VESPIQUEN, 21, null, new SpeciesEvolutionCondition(p => p.gender === Gender.FEMALE, p => p.gender = Gender.FEMALE)) + new SpeciesEvolution(Species.VESPIQUEN, 21, null, new GenderEvolutionCondition(Gender.FEMALE)) ], [Species.BUIZEL]: [ new SpeciesEvolution(Species.FLOATZEL, 26, null, null) @@ -660,7 +873,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.LUMINEON, 31, null, null) ], [Species.MANTYKE]: [ - new SpeciesEvolution(Species.MANTINE, 32, null, new SpeciesEvolutionCondition(p => !!p.scene.gameData.dexData[Species.REMORAID].caughtAttr), SpeciesWildEvolutionDelay.MEDIUM) + new SpeciesEvolution(Species.MANTINE, 32, null, new CaughtEvolutionCondition(Species.REMORAID), SpeciesWildEvolutionDelay.MEDIUM) ], [Species.SNOVER]: [ new SpeciesEvolution(Species.ABOMASNOW, 40, null, null) @@ -681,8 +894,8 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.DEWOTT, 17, null, null) ], [Species.DEWOTT]: [ - new SpeciesEvolution(Species.HISUI_SAMUROTT, 36, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)), - new SpeciesEvolution(Species.SAMUROTT, 36, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY)) + new SpeciesEvolution(Species.HISUI_SAMUROTT, 36, null, new TimeOfDayEvolutionCondition("night")), + new SpeciesEvolution(Species.SAMUROTT, 36, null, new TimeOfDayEvolutionCondition("day")) ], [Species.PATRAT]: [ new SpeciesEvolution(Species.WATCHOG, 20, null, null) @@ -832,8 +1045,8 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.KINGAMBIT, 1, EvolutionItem.LEADERS_CREST, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.RUFFLET]: [ - new SpeciesEvolution(Species.HISUI_BRAVIARY, 54, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)), - new SpeciesEvolution(Species.BRAVIARY, 54, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY)) + new SpeciesEvolution(Species.HISUI_BRAVIARY, 54, null, new TimeOfDayEvolutionCondition("night")), + new SpeciesEvolution(Species.BRAVIARY, 54, null, new TimeOfDayEvolutionCondition("day")) ], [Species.VULLABY]: [ new SpeciesEvolution(Species.MANDIBUZZ, 54, null, null) @@ -890,11 +1103,11 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.GOGOAT, 32, null, null) ], [Species.PANCHAM]: [ - new SpeciesEvolution(Species.PANGORO, 32, null, new SpeciesEvolutionCondition(p => !!p.scene.getPlayerParty().find(p => p.getTypes(false, false, true).indexOf(Type.DARK) > -1)), SpeciesWildEvolutionDelay.MEDIUM) + new SpeciesEvolution(Species.PANGORO, 32, null, new PartyTypeEvolutionCondition(Type.DARK), SpeciesWildEvolutionDelay.MEDIUM) ], [Species.ESPURR]: [ - new SpeciesFormEvolution(Species.MEOWSTIC, "", "female", 25, null, new SpeciesEvolutionCondition(p => p.gender === Gender.FEMALE, p => p.gender = Gender.FEMALE)), - new SpeciesFormEvolution(Species.MEOWSTIC, "", "", 25, null, new SpeciesEvolutionCondition(p => p.gender === Gender.MALE, p => p.gender = Gender.MALE)) + new SpeciesFormEvolution(Species.MEOWSTIC, "", "female", 25, null, new GenderEvolutionCondition(Gender.FEMALE)), + new SpeciesFormEvolution(Species.MEOWSTIC, "", "", 25, null, new GenderEvolutionCondition(Gender.MALE)) ], [Species.HONEDGE]: [ new SpeciesEvolution(Species.DOUBLADE, 35, null, null) @@ -912,21 +1125,21 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.CLAWITZER, 37, null, null) ], [Species.TYRUNT]: [ - new SpeciesEvolution(Species.TYRANTRUM, 39, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY)) + new SpeciesEvolution(Species.TYRANTRUM, 39, null, new TimeOfDayEvolutionCondition("day")) ], [Species.AMAURA]: [ - new SpeciesEvolution(Species.AURORUS, 39, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)) + new SpeciesEvolution(Species.AURORUS, 39, null, new TimeOfDayEvolutionCondition("night")) ], [Species.GOOMY]: [ - new SpeciesEvolution(Species.HISUI_SLIGGOO, 40, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)), - new SpeciesEvolution(Species.SLIGGOO, 40, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY)) + new SpeciesEvolution(Species.HISUI_SLIGGOO, 40, null, new TimeOfDayEvolutionCondition("night")), + new SpeciesEvolution(Species.SLIGGOO, 40, null, new TimeOfDayEvolutionCondition("day")) ], [Species.SLIGGOO]: [ - new SpeciesEvolution(Species.GOODRA, 50, null, new SpeciesEvolutionCondition(p => [ WeatherType.RAIN, WeatherType.FOG, WeatherType.HEAVY_RAIN ].indexOf(p.scene.arena.weather?.weatherType || WeatherType.NONE) > -1), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.GOODRA, 50, null, new WeatherEvolutionCondition([ WeatherType.RAIN, WeatherType.FOG, WeatherType.HEAVY_RAIN ]), SpeciesWildEvolutionDelay.LONG) ], [Species.BERGMITE]: [ - new SpeciesEvolution(Species.HISUI_AVALUGG, 37, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)), - new SpeciesEvolution(Species.AVALUGG, 37, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY)) + new SpeciesEvolution(Species.HISUI_AVALUGG, 37, null, new TimeOfDayEvolutionCondition("night")), + new SpeciesEvolution(Species.AVALUGG, 37, null, new TimeOfDayEvolutionCondition("day")) ], [Species.NOIBAT]: [ new SpeciesEvolution(Species.NOIVERN, 48, null, null) @@ -935,8 +1148,8 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.DARTRIX, 17, null, null) ], [Species.DARTRIX]: [ - new SpeciesEvolution(Species.HISUI_DECIDUEYE, 36, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)), - new SpeciesEvolution(Species.DECIDUEYE, 34, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY)) + new SpeciesEvolution(Species.HISUI_DECIDUEYE, 36, null, new TimeOfDayEvolutionCondition("night")), + new SpeciesEvolution(Species.DECIDUEYE, 34, null, new TimeOfDayEvolutionCondition("day")) ], [Species.LITTEN]: [ new SpeciesEvolution(Species.TORRACAT, 17, null, null) @@ -957,7 +1170,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.TOUCANNON, 28, null, null) ], [Species.YUNGOOS]: [ - new SpeciesEvolution(Species.GUMSHOOS, 20, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY)) + new SpeciesEvolution(Species.GUMSHOOS, 20, null, new TimeOfDayEvolutionCondition("day")) ], [Species.GRUBBIN]: [ new SpeciesEvolution(Species.CHARJABUG, 20, null, null) @@ -975,13 +1188,13 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.ARAQUANID, 22, null, null) ], [Species.FOMANTIS]: [ - new SpeciesEvolution(Species.LURANTIS, 34, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY)) + new SpeciesEvolution(Species.LURANTIS, 34, null, new TimeOfDayEvolutionCondition("day")) ], [Species.MORELULL]: [ new SpeciesEvolution(Species.SHIINOTIC, 24, null, null) ], [Species.SALANDIT]: [ - new SpeciesEvolution(Species.SALAZZLE, 33, null, new SpeciesEvolutionCondition(p => p.gender === Gender.FEMALE, p => p.gender = Gender.FEMALE)) + new SpeciesEvolution(Species.SALAZZLE, 33, null, new GenderEvolutionCondition(Gender.FEMALE)) ], [Species.STUFFUL]: [ new SpeciesEvolution(Species.BEWEAR, 27, null, null) @@ -1012,7 +1225,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.MELMETAL, 48, null, null) ], [Species.ALOLA_RATTATA]: [ - new SpeciesEvolution(Species.ALOLA_RATICATE, 20, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)) + new SpeciesEvolution(Species.ALOLA_RATICATE, 20, null, new TimeOfDayEvolutionCondition("night")) ], [Species.ALOLA_DIGLETT]: [ new SpeciesEvolution(Species.ALOLA_DUGTRIO, 26, null, null) @@ -1085,7 +1298,8 @@ export const pokemonEvolutions: PokemonEvolutions = { ], [Species.TOXEL]: [ new SpeciesFormEvolution(Species.TOXTRICITY, "", "lowkey", 30, null, - new SpeciesEvolutionCondition(p => [ Nature.LONELY, Nature.BOLD, Nature.RELAXED, Nature.TIMID, Nature.SERIOUS, Nature.MODEST, Nature.MILD, Nature.QUIET, Nature.BASHFUL, Nature.CALM, Nature.GENTLE, Nature.CAREFUL ].indexOf(p.getNature()) > -1)), + new NatureEvolutionCondition([ Nature.LONELY, Nature.BOLD, Nature.RELAXED, Nature.TIMID, Nature.SERIOUS, Nature.MODEST, Nature.MILD, Nature.QUIET, Nature.BASHFUL, Nature.CALM, Nature.GENTLE, Nature.CAREFUL ]) + ), new SpeciesFormEvolution(Species.TOXTRICITY, "", "amped", 30, null, null) ], [Species.SIZZLIPEDE]: [ @@ -1135,7 +1349,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.GALAR_LINOONE, 20, null, null) ], [Species.GALAR_LINOONE]: [ - new SpeciesEvolution(Species.OBSTAGOON, 35, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)) + new SpeciesEvolution(Species.OBSTAGOON, 35, null, new TimeOfDayEvolutionCondition("night")) ], [Species.GALAR_YAMASK]: [ new SpeciesEvolution(Species.RUNERIGUS, 34, null, null) @@ -1144,7 +1358,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.HISUI_ZOROARK, 30, null, null) ], [Species.HISUI_SLIGGOO]: [ - new SpeciesEvolution(Species.HISUI_GOODRA, 50, null, new SpeciesEvolutionCondition(p => [ WeatherType.RAIN, WeatherType.FOG, WeatherType.HEAVY_RAIN ].indexOf(p.scene.arena.weather?.weatherType || WeatherType.NONE) > -1), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.HISUI_GOODRA, 50, null, new WeatherEvolutionCondition([ WeatherType.RAIN, WeatherType.FOG, WeatherType.HEAVY_RAIN ]), SpeciesWildEvolutionDelay.LONG) ], [Species.SPRIGATITO]: [ new SpeciesEvolution(Species.FLORAGATO, 16, null, null) @@ -1165,8 +1379,8 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.QUAQUAVAL, 36, null, null) ], [Species.LECHONK]: [ - new SpeciesFormEvolution(Species.OINKOLOGNE, "", "female", 18, null, new SpeciesEvolutionCondition(p => p.gender === Gender.FEMALE, p => p.gender = Gender.FEMALE)), - new SpeciesFormEvolution(Species.OINKOLOGNE, "", "", 18, null, new SpeciesEvolutionCondition(p => p.gender === Gender.MALE, p => p.gender = Gender.MALE)) + new SpeciesFormEvolution(Species.OINKOLOGNE, "", "female", 18, null, new GenderEvolutionCondition(Gender.FEMALE)), + new SpeciesFormEvolution(Species.OINKOLOGNE, "", "", 18, null, new GenderEvolutionCondition(Gender.MALE)) ], [Species.TAROUNTULA]: [ new SpeciesEvolution(Species.SPIDOPS, 15, null, null) @@ -1181,12 +1395,8 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.PAWMOT, 32, null, null) ], [Species.TANDEMAUS]: [ - new SpeciesFormEvolution(Species.MAUSHOLD, "", "three", 25, null, new SpeciesEvolutionCondition(p => { - let ret = false; - p.scene.executeWithSeedOffset(() => ret = !Utils.randSeedInt(4), p.id); - return ret; - })), - new SpeciesEvolution(Species.MAUSHOLD, 25, null, null) + new SpeciesFormEvolution(Species.MAUSHOLD, "", "three", 25, null, new TandemausEvolutionCondition()), + new SpeciesFormEvolution(Species.MAUSHOLD, "", "four", 25, null, null) ], [Species.FIDOUGH]: [ new SpeciesEvolution(Species.DACHSBUN, 26, null, null) @@ -1243,7 +1453,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.GLIMMORA, 35, null, null) ], [Species.GREAVARD]: [ - new SpeciesEvolution(Species.HOUNDSTONE, 30, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)) + new SpeciesEvolution(Species.HOUNDSTONE, 30, null, new TimeOfDayEvolutionCondition("night")) ], [Species.FRIGIBAX]: [ new SpeciesEvolution(Species.ARCTIBAX, 35, null, null) @@ -1300,21 +1510,21 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.EXEGGUTOR, 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG) ], [Species.TANGELA]: [ - new SpeciesEvolution(Species.TANGROWTH, 34, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.ANCIENT_POWER).length > 0), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.TANGROWTH, 34, null, new MoveEvolutionCondition(Moves.ANCIENT_POWER), SpeciesWildEvolutionDelay.LONG) ], [Species.LICKITUNG]: [ - new SpeciesEvolution(Species.LICKILICKY, 32, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.ROLLOUT).length > 0), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.LICKILICKY, 32, null, new MoveEvolutionCondition(Moves.ROLLOUT), SpeciesWildEvolutionDelay.LONG) ], [Species.STARYU]: [ new SpeciesEvolution(Species.STARMIE, 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG) ], [Species.EEVEE]: [ - new SpeciesFormEvolution(Species.SYLVEON, "", "", 1, null, new SpeciesFriendshipEvolutionCondition(120, p => !!p.getMoveset().find(m => m?.getMove().type === Type.FAIRY)), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.SYLVEON, "partner", "", 1, null, new SpeciesFriendshipEvolutionCondition(120, p => !!p.getMoveset().find(m => m?.getMove().type === Type.FAIRY)), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.ESPEON, "", "", 1, null, new SpeciesFriendshipEvolutionCondition(120, p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAY), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.ESPEON, "partner", "", 1, null, new SpeciesFriendshipEvolutionCondition(120, p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAY), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.UMBREON, "", "", 1, null, new SpeciesFriendshipEvolutionCondition(120, p => p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.UMBREON, "partner", "", 1, null, new SpeciesFriendshipEvolutionCondition(120, p => p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT), SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(Species.SYLVEON, "", "", 1, null, new FriendshipMoveTypeEvolutionCondition(120, Type.FAIRY), SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(Species.SYLVEON, "partner", "", 1, null, new FriendshipMoveTypeEvolutionCondition(120, Type.FAIRY), SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(Species.ESPEON, "", "", 1, null, new FriendshipTimeOfDayEvolutionCondition(120, "day"), SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(Species.ESPEON, "partner", "", 1, null, new FriendshipTimeOfDayEvolutionCondition(120, "day"), SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(Species.UMBREON, "", "", 1, null, new FriendshipTimeOfDayEvolutionCondition(120, "night"), SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(Species.UMBREON, "partner", "", 1, null, new FriendshipTimeOfDayEvolutionCondition(120, "night"), SpeciesWildEvolutionDelay.LONG), new SpeciesFormEvolution(Species.VAPOREON, "", "", 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG), new SpeciesFormEvolution(Species.VAPOREON, "partner", "", 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG), new SpeciesFormEvolution(Species.JOLTEON, "", "", 1, EvolutionItem.THUNDER_STONE, null, SpeciesWildEvolutionDelay.LONG), @@ -1330,13 +1540,13 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.TOGEKISS, 1, EvolutionItem.SHINY_STONE, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.AIPOM]: [ - new SpeciesEvolution(Species.AMBIPOM, 32, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.DOUBLE_HIT).length > 0), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.AMBIPOM, 32, null, new MoveEvolutionCondition(Moves.DOUBLE_HIT), SpeciesWildEvolutionDelay.LONG) ], [Species.SUNKERN]: [ new SpeciesEvolution(Species.SUNFLORA, 1, EvolutionItem.SUN_STONE, null, SpeciesWildEvolutionDelay.LONG) ], [Species.YANMA]: [ - new SpeciesEvolution(Species.YANMEGA, 33, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.ANCIENT_POWER).length > 0), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.YANMEGA, 33, null, new MoveEvolutionCondition(Moves.ANCIENT_POWER), SpeciesWildEvolutionDelay.LONG) ], [Species.MURKROW]: [ new SpeciesEvolution(Species.HONCHKROW, 1, EvolutionItem.DUSK_STONE, null, SpeciesWildEvolutionDelay.VERY_LONG) @@ -1345,32 +1555,26 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.MISMAGIUS, 1, EvolutionItem.DUSK_STONE, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.GIRAFARIG]: [ - new SpeciesEvolution(Species.FARIGIRAF, 32, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.TWIN_BEAM).length > 0), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.FARIGIRAF, 32, null, new MoveEvolutionCondition(Moves.TWIN_BEAM), SpeciesWildEvolutionDelay.LONG) ], [Species.DUNSPARCE]: [ - new SpeciesFormEvolution(Species.DUDUNSPARCE, "", "three-segment", 32, null, new SpeciesEvolutionCondition(p => { - let ret = false; - if (p.moveset.filter(m => m?.moveId === Moves.HYPER_DRILL).length > 0) { - p.scene.executeWithSeedOffset(() => ret = !Utils.randSeedInt(4), p.id); - } - return ret; - }), SpeciesWildEvolutionDelay.LONG), - new SpeciesEvolution(Species.DUDUNSPARCE, 32, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.HYPER_DRILL).length > 0), SpeciesWildEvolutionDelay.LONG) + new SpeciesFormEvolution(Species.DUDUNSPARCE, "", "three-segment", 32, null, new DunsparceEvolutionCondition(), SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(Species.DUDUNSPARCE, "", "two-segment", 32, null, new MoveEvolutionCondition(Moves.HYPER_DRILL), SpeciesWildEvolutionDelay.LONG) ], [Species.GLIGAR]: [ - new SpeciesEvolution(Species.GLISCOR, 1, EvolutionItem.RAZOR_FANG, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT /* Razor fang at night*/), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(Species.GLISCOR, 1, EvolutionItem.RAZOR_FANG, new TimeOfDayEvolutionCondition("night") /* Razor fang at night*/, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.SNEASEL]: [ - new SpeciesEvolution(Species.WEAVILE, 1, EvolutionItem.RAZOR_CLAW, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT /* Razor claw at night*/), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(Species.WEAVILE, 1, EvolutionItem.RAZOR_CLAW, new TimeOfDayEvolutionCondition("night") /* Razor claw at night*/, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.URSARING]: [ new SpeciesEvolution(Species.URSALUNA, 1, EvolutionItem.PEAT_BLOCK, null, SpeciesWildEvolutionDelay.VERY_LONG) //Ursaring does not evolve into Bloodmoon Ursaluna ], [Species.PILOSWINE]: [ - new SpeciesEvolution(Species.MAMOSWINE, 1, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.ANCIENT_POWER).length > 0), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(Species.MAMOSWINE, 1, null, new MoveEvolutionCondition(Moves.ANCIENT_POWER), SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.STANTLER]: [ - new SpeciesEvolution(Species.WYRDEER, 25, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.PSYSHIELD_BASH).length > 0), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(Species.WYRDEER, 25, null, new MoveEvolutionCondition(Moves.PSYSHIELD_BASH), SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.LOMBRE]: [ new SpeciesEvolution(Species.LUDICOLO, 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG) @@ -1388,11 +1592,11 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.ROSERADE, 1, EvolutionItem.SHINY_STONE, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.BONSLY]: [ - new SpeciesEvolution(Species.SUDOWOODO, 1, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.MIMIC).length > 0), SpeciesWildEvolutionDelay.MEDIUM) + new SpeciesEvolution(Species.SUDOWOODO, 1, null, new MoveEvolutionCondition(Moves.MIMIC), SpeciesWildEvolutionDelay.MEDIUM) ], [Species.MIME_JR]: [ - new SpeciesEvolution(Species.GALAR_MR_MIME, 1, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.MIMIC).length > 0 && (p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)), SpeciesWildEvolutionDelay.MEDIUM), - new SpeciesEvolution(Species.MR_MIME, 1, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.MIMIC).length > 0 && (p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY)), SpeciesWildEvolutionDelay.MEDIUM) + new SpeciesEvolution(Species.GALAR_MR_MIME, 1, null, new MoveTimeOfDayEvolutionCondition(Moves.MIMIC, "night"), SpeciesWildEvolutionDelay.MEDIUM), + new SpeciesEvolution(Species.MR_MIME, 1, null, new MoveTimeOfDayEvolutionCondition(Moves.MIMIC, "day"), SpeciesWildEvolutionDelay.MEDIUM) ], [Species.PANSAGE]: [ new SpeciesEvolution(Species.SIMISAGE, 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG) @@ -1414,8 +1618,8 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.LILLIGANT, 1, EvolutionItem.SUN_STONE, null, SpeciesWildEvolutionDelay.LONG) ], [Species.BASCULIN]: [ - new SpeciesFormEvolution(Species.BASCULEGION, "white-striped", "female", 40, null, new SpeciesEvolutionCondition(p => p.gender === Gender.FEMALE, p => p.gender = Gender.FEMALE), SpeciesWildEvolutionDelay.VERY_LONG), - new SpeciesFormEvolution(Species.BASCULEGION, "white-striped", "male", 40, null, new SpeciesEvolutionCondition(p => p.gender === Gender.MALE, p => p.gender = Gender.MALE), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesFormEvolution(Species.BASCULEGION, "white-striped", "female", 40, null, new GenderEvolutionCondition(Gender.FEMALE), SpeciesWildEvolutionDelay.VERY_LONG), + new SpeciesFormEvolution(Species.BASCULEGION, "white-striped", "male", 40, null, new GenderEvolutionCondition(Gender.MALE), SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.MINCCINO]: [ new SpeciesEvolution(Species.CINCCINO, 1, EvolutionItem.SHINY_STONE, null, SpeciesWildEvolutionDelay.LONG) @@ -1442,15 +1646,15 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.CRABOMINABLE, 1, EvolutionItem.ICE_STONE, null, SpeciesWildEvolutionDelay.LONG) ], [Species.ROCKRUFF]: [ - new SpeciesFormEvolution(Species.LYCANROC, "", "midday", 25, null, new SpeciesEvolutionCondition(p => (p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY) && (p.formIndex === 0))), - new SpeciesFormEvolution(Species.LYCANROC, "own-tempo", "dusk", 25, null, new SpeciesEvolutionCondition(p => p.formIndex === 1)), - new SpeciesFormEvolution(Species.LYCANROC, "", "midnight", 25, null, new SpeciesEvolutionCondition(p => (p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT) && (p.formIndex === 0))) + new SpeciesFormEvolution(Species.LYCANROC, "own-tempo", "dusk", 25, null, null), + new SpeciesFormEvolution(Species.LYCANROC, "", "midday", 25, null, new TimeOfDayEvolutionCondition("day")), + new SpeciesFormEvolution(Species.LYCANROC, "", "midnight", 25, null, new TimeOfDayEvolutionCondition("night")) ], [Species.STEENEE]: [ - new SpeciesEvolution(Species.TSAREENA, 28, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.STOMP).length > 0), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.TSAREENA, 28, null, new MoveEvolutionCondition(Moves.STOMP), SpeciesWildEvolutionDelay.LONG) ], [Species.POIPOLE]: [ - new SpeciesEvolution(Species.NAGANADEL, 1, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.DRAGON_PULSE).length > 0), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.NAGANADEL, 1, null, new MoveEvolutionCondition(Moves.DRAGON_PULSE), SpeciesWildEvolutionDelay.LONG) ], [Species.ALOLA_SANDSHREW]: [ new SpeciesEvolution(Species.ALOLA_SANDSLASH, 1, EvolutionItem.ICE_STONE, null, SpeciesWildEvolutionDelay.LONG) @@ -1464,22 +1668,40 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.APPLETUN, 1, EvolutionItem.SWEET_APPLE, null, SpeciesWildEvolutionDelay.LONG) ], [Species.CLOBBOPUS]: [ - new SpeciesEvolution(Species.GRAPPLOCT, 35, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.TAUNT).length > 0)/*Once Taunt is implemented, change evo level to 1 and delay to LONG*/) + new SpeciesEvolution(Species.GRAPPLOCT, 35, null, new MoveEvolutionCondition(Moves.TAUNT)/*Once Taunt is implemented, change evo level to 1 and delay to LONG*/) ], [Species.SINISTEA]: [ new SpeciesFormEvolution(Species.POLTEAGEIST, "phony", "phony", 1, EvolutionItem.CRACKED_POT, null, SpeciesWildEvolutionDelay.LONG), new SpeciesFormEvolution(Species.POLTEAGEIST, "antique", "antique", 1, EvolutionItem.CHIPPED_POT, null, SpeciesWildEvolutionDelay.LONG) ], [Species.MILCERY]: [ - new SpeciesFormEvolution(Species.ALCREMIE, "", "vanilla-cream", 1, EvolutionItem.STRAWBERRY_SWEET, new SpeciesEvolutionCondition(p => p.scene.arena.biomeType === Biome.TOWN || p.scene.arena.biomeType === Biome.PLAINS || p.scene.arena.biomeType === Biome.GRASS || p.scene.arena.biomeType === Biome.TALL_GRASS || p.scene.arena.biomeType === Biome.METROPOLIS), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.ALCREMIE, "", "ruby-cream", 1, EvolutionItem.STRAWBERRY_SWEET, new SpeciesEvolutionCondition(p => p.scene.arena.biomeType === Biome.BADLANDS || p.scene.arena.biomeType === Biome.VOLCANO || p.scene.arena.biomeType === Biome.GRAVEYARD || p.scene.arena.biomeType === Biome.FACTORY || p.scene.arena.biomeType === Biome.SLUM), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.ALCREMIE, "", "matcha-cream", 1, EvolutionItem.STRAWBERRY_SWEET, new SpeciesEvolutionCondition(p => p.scene.arena.biomeType === Biome.FOREST || p.scene.arena.biomeType === Biome.SWAMP || p.scene.arena.biomeType === Biome.MEADOW || p.scene.arena.biomeType === Biome.JUNGLE), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.ALCREMIE, "", "mint-cream", 1, EvolutionItem.STRAWBERRY_SWEET, new SpeciesEvolutionCondition(p => p.scene.arena.biomeType === Biome.SEA || p.scene.arena.biomeType === Biome.BEACH || p.scene.arena.biomeType === Biome.LAKE || p.scene.arena.biomeType === Biome.SEABED), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.ALCREMIE, "", "lemon-cream", 1, EvolutionItem.STRAWBERRY_SWEET, new SpeciesEvolutionCondition(p => p.scene.arena.biomeType === Biome.DESERT || p.scene.arena.biomeType === Biome.POWER_PLANT || p.scene.arena.biomeType === Biome.DOJO || p.scene.arena.biomeType === Biome.RUINS || p.scene.arena.biomeType === Biome.CONSTRUCTION_SITE), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.ALCREMIE, "", "salted-cream", 1, EvolutionItem.STRAWBERRY_SWEET, new SpeciesEvolutionCondition(p => p.scene.arena.biomeType === Biome.MOUNTAIN || p.scene.arena.biomeType === Biome.CAVE || p.scene.arena.biomeType === Biome.ICE_CAVE || p.scene.arena.biomeType === Biome.FAIRY_CAVE || p.scene.arena.biomeType === Biome.SNOWY_FOREST), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.ALCREMIE, "", "ruby-swirl", 1, EvolutionItem.STRAWBERRY_SWEET, new SpeciesEvolutionCondition(p => p.scene.arena.biomeType === Biome.WASTELAND || p.scene.arena.biomeType === Biome.LABORATORY), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.ALCREMIE, "", "caramel-swirl", 1, EvolutionItem.STRAWBERRY_SWEET, new SpeciesEvolutionCondition(p => p.scene.arena.biomeType === Biome.TEMPLE || p.scene.arena.biomeType === Biome.ISLAND), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.ALCREMIE, "", "rainbow-swirl", 1, EvolutionItem.STRAWBERRY_SWEET, new SpeciesEvolutionCondition(p => p.scene.arena.biomeType === Biome.ABYSS || p.scene.arena.biomeType === Biome.SPACE || p.scene.arena.biomeType === Biome.END), SpeciesWildEvolutionDelay.LONG) + new SpeciesFormEvolution(Species.ALCREMIE, "", "vanilla-cream", 1, EvolutionItem.STRAWBERRY_SWEET, + new BiomeEvolutionCondition([ Biome.TOWN, Biome.PLAINS, Biome.GRASS, Biome.TALL_GRASS, Biome.METROPOLIS ]), + SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(Species.ALCREMIE, "", "ruby-cream", 1, EvolutionItem.STRAWBERRY_SWEET, + new BiomeEvolutionCondition([ Biome.BADLANDS, Biome.VOLCANO, Biome.GRAVEYARD, Biome.FACTORY, Biome.SLUM ]), + SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(Species.ALCREMIE, "", "matcha-cream", 1, EvolutionItem.STRAWBERRY_SWEET, + new BiomeEvolutionCondition([ Biome.FOREST, Biome.SWAMP, Biome.MEADOW, Biome.JUNGLE ]), + SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(Species.ALCREMIE, "", "mint-cream", 1, EvolutionItem.STRAWBERRY_SWEET, + new BiomeEvolutionCondition([ Biome.SEA, Biome.BEACH, Biome.LAKE, Biome.SEABED ]), + SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(Species.ALCREMIE, "", "lemon-cream", 1, EvolutionItem.STRAWBERRY_SWEET, + new BiomeEvolutionCondition([ Biome.DESERT, Biome.POWER_PLANT, Biome.DOJO, Biome.RUINS, Biome.CONSTRUCTION_SITE ]), + SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(Species.ALCREMIE, "", "salted-cream", 1, EvolutionItem.STRAWBERRY_SWEET, + new BiomeEvolutionCondition([ Biome.MOUNTAIN, Biome.CAVE, Biome.ICE_CAVE, Biome.FAIRY_CAVE, Biome.SNOWY_FOREST ]), + SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(Species.ALCREMIE, "", "ruby-swirl", 1, EvolutionItem.STRAWBERRY_SWEET, + new BiomeEvolutionCondition([ Biome.WASTELAND, Biome.LABORATORY ]), + SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(Species.ALCREMIE, "", "caramel-swirl", 1, EvolutionItem.STRAWBERRY_SWEET, + new BiomeEvolutionCondition([ Biome.TEMPLE, Biome.ISLAND ]), + SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(Species.ALCREMIE, "", "rainbow-swirl", 1, EvolutionItem.STRAWBERRY_SWEET, + new BiomeEvolutionCondition([ Biome.ABYSS, Biome.SPACE, Biome.END ]), + SpeciesWildEvolutionDelay.LONG) ], [Species.DURALUDON]: [ new SpeciesFormEvolution(Species.ARCHALUDON, "", "", 1, EvolutionItem.METAL_ALLOY, null, SpeciesWildEvolutionDelay.VERY_LONG) @@ -1498,10 +1720,10 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.HISUI_ELECTRODE, 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG) ], [Species.HISUI_QWILFISH]: [ - new SpeciesEvolution(Species.OVERQWIL, 28, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.BARB_BARRAGE).length > 0), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.OVERQWIL, 28, null, new MoveEvolutionCondition(Moves.BARB_BARRAGE), SpeciesWildEvolutionDelay.LONG) ], [Species.HISUI_SNEASEL]: [ - new SpeciesEvolution(Species.SNEASLER, 1, EvolutionItem.RAZOR_CLAW, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY /* Razor claw at day*/), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(Species.SNEASLER, 1, EvolutionItem.RAZOR_CLAW, new TimeOfDayEvolutionCondition("day") /* Razor claw at day*/, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.CHARCADET]: [ new SpeciesEvolution(Species.ARMAROUGE, 1, EvolutionItem.AUSPICIOUS_ARMOR, null, SpeciesWildEvolutionDelay.LONG), @@ -1521,7 +1743,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesFormEvolution(Species.SINISTCHA, "artisan", "masterpiece", 1, EvolutionItem.MASTERPIECE_TEACUP, null, SpeciesWildEvolutionDelay.LONG) ], [Species.DIPPLIN]: [ - new SpeciesEvolution(Species.HYDRAPPLE, 1, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.DRAGON_CHEER).length > 0), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(Species.HYDRAPPLE, 1, null, new MoveEvolutionCondition(Moves.DRAGON_CHEER), SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.KADABRA]: [ new SpeciesEvolution(Species.ALAKAZAM, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) @@ -1536,9 +1758,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.GENGAR, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.ONIX]: [ - new SpeciesEvolution(Species.STEELIX, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition( - p => p.moveset.filter(m => m?.getMove().type === Type.STEEL).length > 0), - SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(Species.STEELIX, 1, EvolutionItem.LINKING_CORD, new MoveTypeEvolutionCondition(Type.STEEL), SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.RHYDON]: [ new SpeciesEvolution(Species.RHYPERIOR, 1, EvolutionItem.PROTECTOR, null, SpeciesWildEvolutionDelay.VERY_LONG) @@ -1547,9 +1767,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.KINGDRA, 1, EvolutionItem.DRAGON_SCALE, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.SCYTHER]: [ - new SpeciesEvolution(Species.SCIZOR, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition( - p => p.moveset.filter(m => m?.getMove().type === Type.STEEL).length > 0), - SpeciesWildEvolutionDelay.VERY_LONG), + new SpeciesEvolution(Species.SCIZOR, 1, EvolutionItem.LINKING_CORD, new MoveTypeEvolutionCondition(Type.STEEL), SpeciesWildEvolutionDelay.VERY_LONG), new SpeciesEvolution(Species.KLEAVOR, 1, EvolutionItem.BLACK_AUGURITE, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.ELECTABUZZ]: [ @@ -1571,8 +1789,8 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.DUSKNOIR, 1, EvolutionItem.REAPER_CLOTH, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.CLAMPERL]: [ - new SpeciesEvolution(Species.HUNTAIL, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => p.gender === Gender.MALE, p => p.gender = Gender.MALE /* Deep Sea Tooth */), SpeciesWildEvolutionDelay.VERY_LONG), - new SpeciesEvolution(Species.GOREBYSS, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => p.gender === Gender.FEMALE, p => p.gender = Gender.FEMALE /* Deep Sea Scale */), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(Species.HUNTAIL, 1, EvolutionItem.LINKING_CORD, new GenderEvolutionCondition(Gender.MALE /* Deep Sea Tooth */), SpeciesWildEvolutionDelay.VERY_LONG), + new SpeciesEvolution(Species.GOREBYSS, 1, EvolutionItem.LINKING_CORD, new GenderEvolutionCondition(Gender.FEMALE /* Deep Sea Scale */), SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.BOLDORE]: [ new SpeciesEvolution(Species.GIGALITH, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) @@ -1581,10 +1799,10 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.CONKELDURR, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.KARRABLAST]: [ - new SpeciesEvolution(Species.ESCAVALIER, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => !!p.scene.gameData.dexData[Species.SHELMET].caughtAttr), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(Species.ESCAVALIER, 1, EvolutionItem.LINKING_CORD, new CaughtEvolutionCondition(Species.SHELMET), SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.SHELMET]: [ - new SpeciesEvolution(Species.ACCELGOR, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => !!p.scene.gameData.dexData[Species.KARRABLAST].caughtAttr), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(Species.ACCELGOR, 1, EvolutionItem.LINKING_CORD, new CaughtEvolutionCondition(Species.KARRABLAST), SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.SPRITZEE]: [ new SpeciesEvolution(Species.AROMATISSE, 1, EvolutionItem.SACHET, null, SpeciesWildEvolutionDelay.VERY_LONG) @@ -1602,72 +1820,66 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.ALOLA_GOLEM, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.PRIMEAPE]: [ - new SpeciesEvolution(Species.ANNIHILAPE, 35, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.RAGE_FIST).length > 0), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(Species.ANNIHILAPE, 35, null, new MoveEvolutionCondition(Moves.RAGE_FIST), SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.GOLBAT]: [ - new SpeciesEvolution(Species.CROBAT, 1, null, new SpeciesFriendshipEvolutionCondition(120), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(Species.CROBAT, 1, null, new FriendshipEvolutionCondition(120), SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.CHANSEY]: [ - new SpeciesEvolution(Species.BLISSEY, 1, null, new SpeciesFriendshipEvolutionCondition(200), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.BLISSEY, 1, null, new FriendshipEvolutionCondition(200), SpeciesWildEvolutionDelay.LONG) ], [Species.PICHU]: [ - new SpeciesFormEvolution(Species.PIKACHU, "spiky", "partner", 1, null, new SpeciesFriendshipEvolutionCondition(90), SpeciesWildEvolutionDelay.SHORT), - new SpeciesFormEvolution(Species.PIKACHU, "", "", 1, null, new SpeciesFriendshipEvolutionCondition(90), SpeciesWildEvolutionDelay.SHORT), + new SpeciesFormEvolution(Species.PIKACHU, "spiky", "partner", 1, null, new FriendshipEvolutionCondition(90), SpeciesWildEvolutionDelay.SHORT), + new SpeciesFormEvolution(Species.PIKACHU, "", "", 1, null, new FriendshipEvolutionCondition(90), SpeciesWildEvolutionDelay.SHORT), ], [Species.CLEFFA]: [ - new SpeciesEvolution(Species.CLEFAIRY, 1, null, new SpeciesFriendshipEvolutionCondition(160), SpeciesWildEvolutionDelay.SHORT) + new SpeciesEvolution(Species.CLEFAIRY, 1, null, new FriendshipEvolutionCondition(160), SpeciesWildEvolutionDelay.SHORT) ], [Species.IGGLYBUFF]: [ - new SpeciesEvolution(Species.JIGGLYPUFF, 1, null, new SpeciesFriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.SHORT) + new SpeciesEvolution(Species.JIGGLYPUFF, 1, null, new FriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.SHORT) ], [Species.TOGEPI]: [ - new SpeciesEvolution(Species.TOGETIC, 1, null, new SpeciesFriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.SHORT) + new SpeciesEvolution(Species.TOGETIC, 1, null, new FriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.SHORT) ], [Species.AZURILL]: [ - new SpeciesEvolution(Species.MARILL, 1, null, new SpeciesFriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.SHORT) + new SpeciesEvolution(Species.MARILL, 1, null, new FriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.SHORT) ], [Species.BUDEW]: [ - new SpeciesEvolution(Species.ROSELIA, 1, null, new SpeciesFriendshipEvolutionCondition(70, p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY), SpeciesWildEvolutionDelay.SHORT) + new SpeciesEvolution(Species.ROSELIA, 1, null, new FriendshipTimeOfDayEvolutionCondition(70, "day"), SpeciesWildEvolutionDelay.SHORT) ], [Species.BUNEARY]: [ - new SpeciesEvolution(Species.LOPUNNY, 1, null, new SpeciesFriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.MEDIUM) + new SpeciesEvolution(Species.LOPUNNY, 1, null, new FriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.MEDIUM) ], [Species.CHINGLING]: [ - new SpeciesEvolution(Species.CHIMECHO, 1, null, new SpeciesFriendshipEvolutionCondition(90, p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT), SpeciesWildEvolutionDelay.MEDIUM) + new SpeciesEvolution(Species.CHIMECHO, 1, null, new FriendshipTimeOfDayEvolutionCondition(90, "night"), SpeciesWildEvolutionDelay.MEDIUM) ], [Species.HAPPINY]: [ - new SpeciesEvolution(Species.CHANSEY, 1, null, new SpeciesFriendshipEvolutionCondition(160), SpeciesWildEvolutionDelay.SHORT) + new SpeciesEvolution(Species.CHANSEY, 1, null, new FriendshipEvolutionCondition(160), SpeciesWildEvolutionDelay.SHORT) ], [Species.MUNCHLAX]: [ - new SpeciesEvolution(Species.SNORLAX, 1, null, new SpeciesFriendshipEvolutionCondition(120), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.SNORLAX, 1, null, new FriendshipEvolutionCondition(120), SpeciesWildEvolutionDelay.LONG) ], [Species.RIOLU]: [ - new SpeciesEvolution(Species.LUCARIO, 1, null, new SpeciesFriendshipEvolutionCondition(120, p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.LUCARIO, 1, null, new FriendshipTimeOfDayEvolutionCondition(120, "day"), SpeciesWildEvolutionDelay.LONG) ], [Species.WOOBAT]: [ - new SpeciesEvolution(Species.SWOOBAT, 1, null, new SpeciesFriendshipEvolutionCondition(90), SpeciesWildEvolutionDelay.MEDIUM) + new SpeciesEvolution(Species.SWOOBAT, 1, null, new FriendshipEvolutionCondition(90), SpeciesWildEvolutionDelay.MEDIUM) ], [Species.SWADLOON]: [ - new SpeciesEvolution(Species.LEAVANNY, 1, null, new SpeciesFriendshipEvolutionCondition(120), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.LEAVANNY, 1, null, new FriendshipEvolutionCondition(120), SpeciesWildEvolutionDelay.LONG) ], [Species.TYPE_NULL]: [ - new SpeciesEvolution(Species.SILVALLY, 1, null, new SpeciesFriendshipEvolutionCondition(100), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.SILVALLY, 1, null, new FriendshipEvolutionCondition(100), SpeciesWildEvolutionDelay.LONG) ], [Species.ALOLA_MEOWTH]: [ - new SpeciesEvolution(Species.ALOLA_PERSIAN, 1, null, new SpeciesFriendshipEvolutionCondition(120), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.ALOLA_PERSIAN, 1, null, new FriendshipEvolutionCondition(120), SpeciesWildEvolutionDelay.LONG) ], [Species.SNOM]: [ - new SpeciesEvolution(Species.FROSMOTH, 1, null, new SpeciesFriendshipEvolutionCondition(90, p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT), SpeciesWildEvolutionDelay.MEDIUM) + new SpeciesEvolution(Species.FROSMOTH, 1, null, new FriendshipTimeOfDayEvolutionCondition(90, "night"), SpeciesWildEvolutionDelay.MEDIUM) ], [Species.GIMMIGHOUL]: [ - new SpeciesFormEvolution(Species.GHOLDENGO, "chest", "", 1, null, new SpeciesEvolutionCondition(p => p.evoCounter - + p.getHeldItems().filter(m => m instanceof DamageMoneyRewardModifier).length - + p.scene.findModifiers(m => m instanceof MoneyMultiplierModifier - || m instanceof ExtraModifierModifier || m instanceof TempExtraModifierModifier).length > 9), SpeciesWildEvolutionDelay.VERY_LONG), - new SpeciesFormEvolution(Species.GHOLDENGO, "roaming", "", 1, null, new SpeciesEvolutionCondition(p => p.evoCounter - + p.getHeldItems().filter(m => m instanceof DamageMoneyRewardModifier).length - + p.scene.findModifiers(m => m instanceof MoneyMultiplierModifier - || m instanceof ExtraModifierModifier || m instanceof TempExtraModifierModifier).length > 9), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesFormEvolution(Species.GHOLDENGO, "chest", "", 1, null, new TreasureEvolutionCondition(), SpeciesWildEvolutionDelay.VERY_LONG), + new SpeciesFormEvolution(Species.GHOLDENGO, "roaming", "", 1, null, new TreasureEvolutionCondition(), SpeciesWildEvolutionDelay.VERY_LONG) ] }; @@ -1690,3 +1902,19 @@ export function initPokemonPrevolutions(): void { } }); } + + +// TODO: This may cause funny business for double starters such as Pichu/Pikachu +export const pokemonStarters: PokemonPrevolutions = {}; + +export function initPokemonStarters(): void { + const starterKeys = Object.keys(pokemonPrevolutions); + starterKeys.forEach(pk => { + const prevolution = pokemonPrevolutions[pk]; + if (speciesStarterCosts.hasOwnProperty(prevolution)) { + pokemonStarters[pk] = prevolution; + } else { + pokemonStarters[pk] = pokemonPrevolutions[prevolution]; + } + }); +} diff --git a/src/data/balance/pokemon-level-moves.ts b/src/data/balance/pokemon-level-moves.ts index 2a3ab431424..dcbc2fb0c0d 100644 --- a/src/data/balance/pokemon-level-moves.ts +++ b/src/data/balance/pokemon-level-moves.ts @@ -1,18 +1,18 @@ import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -export type LevelMoves = ([integer, Moves])[]; +export type LevelMoves = ([number, Moves])[]; interface PokemonSpeciesLevelMoves { - [key: integer]: LevelMoves + [key: number]: LevelMoves } interface PokemonFormLevelMoves { - [key: integer]: LevelMoves + [key: number]: LevelMoves } interface PokemonSpeciesFormLevelMoves { - [key: integer]: PokemonFormLevelMoves + [key: number]: PokemonFormLevelMoves } /** Moves that can only be learned with a memory-mushroom */ @@ -19464,7 +19464,6 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { }, [Species.GRENINJA]: { 1: [ - [ EVOLVE_MOVE, Moves.WATER_SHURIKEN ], [ EVOLVE_MOVE, Moves.WATER_SHURIKEN ], [ 1, Moves.POUND ], [ 1, Moves.GROWL ], @@ -19475,6 +19474,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { [ 1, Moves.SMACK_DOWN ], // Previous Stage Move [ 1, Moves.BOUNCE ], // Previous Stage Move [ 1, Moves.HAZE ], + [ 1, Moves.MAT_BLOCK ], [ 1, Moves.ROLE_PLAY ], [ 1, Moves.NIGHT_SLASH ], [ 10, Moves.LICK ], @@ -19718,6 +19718,44 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { [ 48, Moves.CLOSE_COMBAT ], [ 52, Moves.FOCUS_PUNCH ], ], + 2: [ + [ EVOLVE_MOVE, Moves.WICKED_BLOW ], + [ 1, Moves.LEER ], + [ 1, Moves.FOCUS_ENERGY ], + [ 1, Moves.ENDURE ], + [ 1, Moves.ROCK_SMASH ], + [ 1, Moves.SUCKER_PUNCH ], + [ 12, Moves.AERIAL_ACE ], + [ 16, Moves.SCARY_FACE ], + [ 20, Moves.HEADBUTT ], + [ 24, Moves.BRICK_BREAK ], + [ 28, Moves.DETECT ], + [ 32, Moves.BULK_UP ], + [ 36, Moves.IRON_HEAD ], + [ 40, Moves.DYNAMIC_PUNCH ], + [ 44, Moves.COUNTER ], + [ 48, Moves.CLOSE_COMBAT ], + [ 52, Moves.FOCUS_PUNCH ], + ], + 3: [ + [ EVOLVE_MOVE, Moves.SURGING_STRIKES ], + [ 1, Moves.LEER ], + [ 1, Moves.FOCUS_ENERGY ], + [ 1, Moves.ENDURE ], + [ 1, Moves.ROCK_SMASH ], + [ 1, Moves.AQUA_JET ], + [ 12, Moves.AERIAL_ACE ], + [ 16, Moves.SCARY_FACE ], + [ 20, Moves.HEADBUTT ], + [ 24, Moves.BRICK_BREAK ], + [ 28, Moves.DETECT ], + [ 32, Moves.BULK_UP ], + [ 36, Moves.IRON_HEAD ], + [ 40, Moves.DYNAMIC_PUNCH ], + [ 44, Moves.COUNTER ], + [ 48, Moves.CLOSE_COMBAT ], + [ 52, Moves.FOCUS_PUNCH ], + ], }, [Species.CALYREX]: { 1: [ diff --git a/src/data/balance/starters.ts b/src/data/balance/starters.ts index ec66401675b..3468163c988 100644 --- a/src/data/balance/starters.ts +++ b/src/data/balance/starters.ts @@ -51,9 +51,7 @@ export const speciesStarterCosts = { [Species.SANDSHREW]: 2, [Species.NIDORAN_F]: 3, [Species.NIDORAN_M]: 3, - [Species.CLEFAIRY]: 3, [Species.VULPIX]: 3, - [Species.JIGGLYPUFF]: 2, [Species.ZUBAT]: 3, [Species.ODDISH]: 3, [Species.PARAS]: 2, @@ -84,22 +82,15 @@ export const speciesStarterCosts = { [Species.VOLTORB]: 2, [Species.EXEGGCUTE]: 3, [Species.CUBONE]: 3, - [Species.HITMONLEE]: 4, - [Species.HITMONCHAN]: 4, [Species.LICKITUNG]: 3, [Species.KOFFING]: 2, [Species.RHYHORN]: 4, - [Species.CHANSEY]: 3, [Species.TANGELA]: 3, [Species.KANGASKHAN]: 4, [Species.HORSEA]: 3, [Species.GOLDEEN]: 2, [Species.STARYU]: 3, - [Species.MR_MIME]: 3, [Species.SCYTHER]: 5, - [Species.JYNX]: 4, - [Species.ELECTABUZZ]: 4, - [Species.MAGMAR]: 4, [Species.PINSIR]: 4, [Species.TAUROS]: 4, [Species.MAGIKARP]: 4, @@ -110,7 +101,6 @@ export const speciesStarterCosts = { [Species.OMANYTE]: 3, [Species.KABUTO]: 3, [Species.AERODACTYL]: 5, - [Species.SNORLAX]: 5, [Species.ARTICUNO]: 5, [Species.ZAPDOS]: 6, [Species.MOLTRES]: 6, @@ -132,17 +122,14 @@ export const speciesStarterCosts = { [Species.TOGEPI]: 3, [Species.NATU]: 2, [Species.MAREEP]: 2, - [Species.MARILL]: 4, - [Species.SUDOWOODO]: 3, [Species.HOPPIP]: 2, [Species.AIPOM]: 2, [Species.SUNKERN]: 1, [Species.YANMA]: 3, [Species.WOOPER]: 2, [Species.MURKROW]: 3, - [Species.MISDREAVUS]: 2, + [Species.MISDREAVUS]: 3, [Species.UNOWN]: 1, - [Species.WOBBUFFET]: 2, [Species.GIRAFARIG]: 3, [Species.PINECO]: 2, [Species.DUNSPARCE]: 3, @@ -158,7 +145,6 @@ export const speciesStarterCosts = { [Species.CORSOLA]: 2, [Species.REMORAID]: 2, [Species.DELIBIRD]: 2, - [Species.MANTINE]: 3, [Species.SKARMORY]: 4, [Species.HOUNDOUR]: 3, [Species.PHANPY]: 3, @@ -206,7 +192,6 @@ export const speciesStarterCosts = { [Species.MINUN]: 2, [Species.VOLBEAT]: 2, [Species.ILLUMISE]: 2, - [Species.ROSELIA]: 3, [Species.GULPIN]: 1, [Species.CARVANHA]: 3, [Species.WAILMER]: 2, @@ -232,7 +217,6 @@ export const speciesStarterCosts = { [Species.SHUPPET]: 2, [Species.DUSKULL]: 3, [Species.TROPIUS]: 3, - [Species.CHIMECHO]: 3, [Species.ABSOL]: 4, [Species.WYNAUT]: 2, [Species.SNORUNT]: 2, @@ -261,7 +245,7 @@ export const speciesStarterCosts = { [Species.KRICKETOT]: 1, [Species.SHINX]: 2, [Species.BUDEW]: 3, - [Species.CRANIDOS]: 3, + [Species.CRANIDOS]: 2, [Species.SHIELDON]: 3, [Species.BURMY]: 2, [Species.COMBEE]: 2, @@ -290,7 +274,7 @@ export const speciesStarterCosts = { [Species.FINNEON]: 1, [Species.MANTYKE]: 2, [Species.SNOVER]: 2, - [Species.ROTOM]: 5, + [Species.ROTOM]: 4, [Species.UXIE]: 5, [Species.MESPRIT]: 5, [Species.AZELF]: 6, @@ -303,10 +287,10 @@ export const speciesStarterCosts = { [Species.PHIONE]: 4, [Species.MANAPHY]: 7, [Species.DARKRAI]: 7, - [Species.SHAYMIN]: 5, + [Species.SHAYMIN]: 6, [Species.ARCEUS]: 9, - [Species.VICTINI]: 7, + [Species.VICTINI]: 6, [Species.SNIVY]: 3, [Species.TEPIG]: 3, [Species.OSHAWOTT]: 3, @@ -477,7 +461,7 @@ export const speciesStarterCosts = { [Species.GUZZLORD]: 6, [Species.NECROZMA]: 8, [Species.MAGEARNA]: 7, - [Species.MARSHADOW]: 7, + [Species.MARSHADOW]: 8, [Species.POIPOLE]: 8, [Species.STAKATAKA]: 6, [Species.BLACEPHALON]: 7, @@ -543,7 +527,6 @@ export const speciesStarterCosts = { [Species.GALAR_PONYTA]: 2, [Species.GALAR_SLOWPOKE]: 3, [Species.GALAR_FARFETCHD]: 3, - [Species.GALAR_MR_MIME]: 3, [Species.GALAR_ARTICUNO]: 6, [Species.GALAR_ZAPDOS]: 6, [Species.GALAR_MOLTRES]: 6, @@ -628,7 +611,7 @@ export const speciesStarterCosts = { [Species.RAGING_BOLT]: 7, [Species.IRON_BOULDER]: 7, [Species.IRON_CROWN]: 7, - [Species.TERAPAGOS]: 8, + [Species.TERAPAGOS]: 9, [Species.PECHARUNT]: 6, [Species.PALDEA_TAUROS]: 5, [Species.PALDEA_WOOPER]: 3, diff --git a/src/data/balance/tms.ts b/src/data/balance/tms.ts index 4882cf4f652..788ffd4f273 100644 --- a/src/data/balance/tms.ts +++ b/src/data/balance/tms.ts @@ -3,7 +3,7 @@ import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; interface TmSpecies { - [key: integer]: Array> + [key: number]: Array> } export const reverseCompatibleTms: Moves[] = [];/*[ @@ -67148,6 +67148,7 @@ export const tmSpecies: TmSpecies = { Species.VELUZA, Species.DONDOZO, Species.TATSUGIRI, + Species.ANNIHILAPE, Species.CLODSIRE, Species.FARIGIRAF, Species.DUDUNSPARCE, @@ -68432,8 +68433,48 @@ export const tmSpecies: TmSpecies = { ], }; +interface SpeciesTmMoves { + [key: number]: (Moves | [string | Species, Moves])[]; +} + +function transposeTmSpecies(): SpeciesTmMoves { + const flipped: SpeciesTmMoves = {}; + + for (const move in tmSpecies) { + const moveKey = Number(move); + const speciesList = tmSpecies[move]; + + for (const species of speciesList) { + + if (Array.isArray(species)) { + // Extract base species and all associated forms + const [ baseSpecies, ...forms ] = species; + const speciesKey = Number(baseSpecies); + + if (!flipped[speciesKey]) { + flipped[speciesKey] = []; + } + + for (const form of forms) { + flipped[speciesKey].push([ form, moveKey ]); + } + + } else { + const speciesKey = Number(species); + if (!flipped[speciesKey]) { + flipped[speciesKey] = []; + } + flipped[speciesKey].push(moveKey); + } + } + } + return flipped; +} + +export const speciesTmMoves: SpeciesTmMoves = transposeTmSpecies(); + interface TmPoolTiers { - [key: integer]: ModifierTier + [key: number]: ModifierTier } export const tmPoolTiers: TmPoolTiers = { diff --git a/src/data/battle-anims.ts b/src/data/battle-anims.ts index 26ad65bd9b0..a42779563f2 100644 --- a/src/data/battle-anims.ts +++ b/src/data/battle-anims.ts @@ -1,16 +1,27 @@ -//import { battleAnimRawData } from "./battle-anim-raw-data"; -import BattleScene from "../battle-scene"; -import { AttackMove, BeakBlastHeaderAttr, DelayedAttackAttr, MoveFlags, SelfStatusMove, allMoves } from "./move"; -import Pokemon from "../field/pokemon"; -import * as Utils from "../utils"; -import { BattlerIndex } from "../battle"; -import { Element } from "json-stable-stringify"; +import { globalScene } from "#app/global-scene"; +import { + AttackMove, + BeakBlastHeaderAttr, + DelayedAttackAttr, + MoveFlags, + SelfStatusMove, + allMoves, +} from "./move"; +import type Pokemon from "../field/pokemon"; +import { + type nil, + getFrameMs, + getEnumKeys, + getEnumValues, + animationFileName, +} from "../utils"; +import type { BattlerIndex } from "../battle"; +import type { Element } from "json-stable-stringify"; import { Moves } from "#enums/moves"; import { SubstituteTag } from "./battler-tags"; import { isNullOrUndefined } from "../utils"; import Phaser from "phaser"; import { EncounterAnim } from "#enums/encounter-anims"; -//import fs from 'vite-plugin-fs/browser'; export enum AnimFrameTarget { USER, @@ -58,6 +69,7 @@ export enum ChargeAnim { export enum CommonAnim { USE_ITEM = 2000, HEALTH_UP, + TERASTALLIZE, POISON = 2010, TOXIC, PARALYSIS, @@ -108,15 +120,15 @@ export enum CommonAnim { } export class AnimConfig { - public id: integer; + public id: number; public graphic: string; public frames: AnimFrame[][]; - public frameTimedEvents: Map; - public position: integer; - public hue: integer; + public frameTimedEvents: Map; + public position: number; + public hue: number; constructor(source?: any) { - this.frameTimedEvents = new Map; + this.frameTimedEvents = new Map; if (source) { this.id = source.id; @@ -197,18 +209,18 @@ class AnimFrame { public visible: boolean; public blendType: AnimBlendType; public target: AnimFrameTarget; - public graphicFrame: integer; - public opacity: integer; - public color: integer[]; - public tone: integer[]; - public flash: integer[]; + public graphicFrame: number; + public opacity: number; + public color: number[]; + public tone: number[]; + public flash: number[]; public locked: boolean; - public priority: integer; + public priority: number; public focus: AnimFocus; - constructor(x: number, y: number, zoomX: number, zoomY: number, angle: number, mirror: boolean, visible: boolean, blendType: AnimBlendType, pattern: integer, - opacity: integer, colorR: integer, colorG: integer, colorB: integer, colorA: integer, toneR: integer, toneG: integer, toneB: integer, toneA: integer, - flashR: integer, flashG: integer, flashB: integer, flashA: integer, locked: boolean, priority: integer, focus: AnimFocus, init?: boolean) { + constructor(x: number, y: number, zoomX: number, zoomY: number, angle: number, mirror: boolean, visible: boolean, blendType: AnimBlendType, pattern: number, + opacity: number, colorR: number, colorG: number, colorB: number, colorA: number, toneR: number, toneG: number, toneB: number, toneA: number, + flashR: number, flashG: number, flashB: number, flashA: number, locked: boolean, priority: number, focus: AnimFocus, init?: boolean) { this.x = !init ? ((x || 0) - 128) * 0.5 : x; this.y = !init ? ((y || 0) - 224) * 0.5 : y; if (zoomX) { @@ -290,9 +302,9 @@ class AnimFrame { class ImportedAnimFrame extends AnimFrame { constructor(source: any) { - const color: integer[] = source.color || [ 0, 0, 0, 0 ]; - const tone: integer[] = source.tone || [ 0, 0, 0, 0 ]; - const flash: integer[] = source.flash || [ 0, 0, 0, 0 ]; + const color: number[] = source.color || [ 0, 0, 0, 0 ]; + const tone: number[] = source.tone || [ 0, 0, 0, 0 ]; + const flash: number[] = source.flash || [ 0, 0, 0, 0 ]; super(source.x, source.y, source.zoomX, source.zoomY, source.angle, source.mirror, source.visible, source.blendType, source.graphicFrame, source.opacity, color[0], color[1], color[2], color[3], tone[0], tone[1], tone[2], tone[3], flash[0], flash[1], flash[2], flash[3], source.locked, source.priority, source.focus, true); this.target = source.target; this.graphicFrame = source.graphicFrame; @@ -300,15 +312,15 @@ class ImportedAnimFrame extends AnimFrame { } abstract class AnimTimedEvent { - public frameIndex: integer; + public frameIndex: number; public resourceName: string; - constructor(frameIndex: integer, resourceName: string) { + constructor(frameIndex: number, resourceName: string) { this.frameIndex = frameIndex; this.resourceName = resourceName; } - abstract execute(scene: BattleScene, battleAnim: BattleAnim, priority?: number): integer; + abstract execute(battleAnim: BattleAnim, priority?: number): number; abstract getEventType(): string; } @@ -317,7 +329,7 @@ class AnimTimedSoundEvent extends AnimTimedEvent { public volume: number = 100; public pitch: number = 100; - constructor(frameIndex: integer, resourceName: string, source?: any) { + constructor(frameIndex: number, resourceName: string, source?: any) { super(frameIndex, resourceName); if (source) { @@ -326,15 +338,15 @@ class AnimTimedSoundEvent extends AnimTimedEvent { } } - execute(scene: BattleScene, battleAnim: BattleAnim, priority?: number): integer { + execute(battleAnim: BattleAnim, priority?: number): number { const soundConfig = { rate: (this.pitch * 0.01), volume: (this.volume * 0.01) }; if (this.resourceName) { try { - scene.playSound(`battle_anims/${this.resourceName}`, soundConfig); + globalScene.playSound(`battle_anims/${this.resourceName}`, soundConfig); } catch (err) { console.error(err); } - return Math.ceil((scene.sound.get(`battle_anims/${this.resourceName}`).totalDuration * 1000) / 33.33); + return Math.ceil((globalScene.sound.get(`battle_anims/${this.resourceName}`).totalDuration * 1000) / 33.33); } else { return Math.ceil((battleAnim.user!.cry(soundConfig).totalDuration * 1000) / 33.33); // TODO: is the bang behind user correct? } @@ -348,20 +360,20 @@ class AnimTimedSoundEvent extends AnimTimedEvent { abstract class AnimTimedBgEvent extends AnimTimedEvent { public bgX: number = 0; public bgY: number = 0; - public opacity: integer = 0; - /*public colorRed: integer = 0; - public colorGreen: integer = 0; - public colorBlue: integer = 0; - public colorAlpha: integer = 0;*/ - public duration: integer = 0; - /*public flashScope: integer = 0; - public flashRed: integer = 0; - public flashGreen: integer = 0; - public flashBlue: integer = 0; - public flashAlpha: integer = 0; - public flashDuration: integer = 0;*/ + public opacity: number = 0; + /*public colorRed: number = 0; + public colorGreen: number = 0; + public colorBlue: number = 0; + public colorAlpha: number = 0;*/ + public duration: number = 0; + /*public flashScope: number = 0; + public flashRed: number = 0; + public flashGreen: number = 0; + public flashBlue: number = 0; + public flashAlpha: number = 0; + public flashDuration: number = 0;*/ - constructor(frameIndex: integer, resourceName: string, source: any) { + constructor(frameIndex: number, resourceName: string, source: any) { super(frameIndex, resourceName); if (source) { @@ -384,11 +396,11 @@ abstract class AnimTimedBgEvent extends AnimTimedEvent { } class AnimTimedUpdateBgEvent extends AnimTimedBgEvent { - constructor(frameIndex: integer, resourceName: string, source?: any) { + constructor(frameIndex: number, resourceName: string, source?: any) { super(frameIndex, resourceName, source); } - execute(scene: BattleScene, moveAnim: MoveAnim, priority?: number): integer { + execute(moveAnim: MoveAnim, priority?: number): number { const tweenProps = {}; if (this.bgX !== undefined) { tweenProps["x"] = (this.bgX * 0.5) - 320; @@ -400,9 +412,9 @@ class AnimTimedUpdateBgEvent extends AnimTimedBgEvent { tweenProps["alpha"] = (this.opacity || 0) / 255; } if (Object.keys(tweenProps).length) { - scene.tweens.add(Object.assign({ + globalScene.tweens.add(Object.assign({ targets: moveAnim.bgSprite, - duration: Utils.getFrameMs(this.duration * 3) + duration: getFrameMs(this.duration * 3) }, tweenProps)); } return this.duration * 2; @@ -414,31 +426,31 @@ class AnimTimedUpdateBgEvent extends AnimTimedBgEvent { } class AnimTimedAddBgEvent extends AnimTimedBgEvent { - constructor(frameIndex: integer, resourceName: string, source?: any) { + constructor(frameIndex: number, resourceName: string, source?: any) { super(frameIndex, resourceName, source); } - execute(scene: BattleScene, moveAnim: MoveAnim, priority?: number): integer { + execute(moveAnim: MoveAnim, priority?: number): number { if (moveAnim.bgSprite) { moveAnim.bgSprite.destroy(); } moveAnim.bgSprite = this.resourceName - ? scene.add.tileSprite(this.bgX - 320, this.bgY - 284, 896, 576, this.resourceName) - : scene.add.rectangle(this.bgX - 320, this.bgY - 284, 896, 576, 0); + ? globalScene.add.tileSprite(this.bgX - 320, this.bgY - 284, 896, 576, this.resourceName) + : globalScene.add.rectangle(this.bgX - 320, this.bgY - 284, 896, 576, 0); moveAnim.bgSprite.setOrigin(0, 0); moveAnim.bgSprite.setScale(1.25); moveAnim.bgSprite.setAlpha(this.opacity / 255); - scene.field.add(moveAnim.bgSprite); - const fieldPokemon = scene.getEnemyPokemon(false) ?? scene.getPlayerPokemon(false); + globalScene.field.add(moveAnim.bgSprite); + const fieldPokemon = globalScene.getEnemyPokemon(false) ?? globalScene.getPlayerPokemon(false); if (!isNullOrUndefined(priority)) { - scene.field.moveTo(moveAnim.bgSprite as Phaser.GameObjects.GameObject, priority); + globalScene.field.moveTo(moveAnim.bgSprite as Phaser.GameObjects.GameObject, priority); } else if (fieldPokemon?.isOnField()) { - scene.field.moveBelow(moveAnim.bgSprite as Phaser.GameObjects.GameObject, fieldPokemon); + globalScene.field.moveBelow(moveAnim.bgSprite as Phaser.GameObjects.GameObject, fieldPokemon); } - scene.tweens.add({ + globalScene.tweens.add({ targets: moveAnim.bgSprite, - duration: Utils.getFrameMs(this.duration * 3) + duration: getFrameMs(this.duration * 3) }); return this.duration * 2; @@ -454,14 +466,14 @@ export const chargeAnims = new Map(); export const encounterAnims = new Map(); -export function initCommonAnims(scene: BattleScene): Promise { +export function initCommonAnims(): Promise { return new Promise(resolve => { - const commonAnimNames = Utils.getEnumKeys(CommonAnim); - const commonAnimIds = Utils.getEnumValues(CommonAnim); + 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(scene.cachedFetch(`./battle-anims/common-${commonAnimNames[ca].toLowerCase().replace(/\_/g, "-")}.json`) + commonAnimFetches.push(globalScene.cachedFetch(`./battle-anims/common-${commonAnimNames[ca].toLowerCase().replace(/\_/g, "-")}.json`) .then(response => response.json()) .then(cas => commonAnims.set(commonAnimId, new AnimConfig(cas)))); } @@ -469,7 +481,7 @@ export function initCommonAnims(scene: BattleScene): Promise { }); } -export function initMoveAnim(scene: BattleScene, move: Moves): Promise { +export function initMoveAnim(move: Moves): Promise { return new Promise(resolve => { if (moveAnims.has(move)) { if (moveAnims.get(move) !== null) { @@ -494,7 +506,7 @@ export function initMoveAnim(scene: BattleScene, move: Moves): Promise { const defaultMoveAnim = allMoves[move] instanceof AttackMove ? Moves.TACKLE : allMoves[move] instanceof SelfStatusMove ? Moves.FOCUS_ENERGY : Moves.TAIL_WHIP; const fetchAnimAndResolve = (move: Moves) => { - scene.cachedFetch(`./battle-anims/${Utils.animationFileName(move)}.json`) + globalScene.cachedFetch(`./battle-anims/${animationFileName(move)}.json`) .then(response => { const contentType = response.headers.get("content-type"); if (!response.ok || contentType?.indexOf("application/json") === -1) { @@ -516,7 +528,7 @@ export function initMoveAnim(scene: BattleScene, move: Moves): Promise { : (allMoves[move].getAttrs(DelayedAttackAttr)[0] ?? allMoves[move].getAttrs(BeakBlastHeaderAttr)[0]); if (chargeAnimSource) { - initMoveChargeAnim(scene, chargeAnimSource.chargeAnim).then(() => resolve()); + initMoveChargeAnim(chargeAnimSource.chargeAnim).then(() => resolve()); } else { resolve(); } @@ -551,31 +563,30 @@ function useDefaultAnim(move: Moves, defaultMoveAnim: Moves) { * @remarks use {@linkcode useDefaultAnim} to use a default animation */ function logMissingMoveAnim(move: Moves, ...optionalParams: any[]) { - const moveName = Utils.animationFileName(move); + const moveName = animationFileName(move); console.warn(`Could not load animation file for move '${moveName}'`, ...optionalParams); } /** * Fetches animation configs to be used in a Mystery Encounter - * @param scene * @param encounterAnim one or more animations to fetch */ -export async function initEncounterAnims(scene: BattleScene, encounterAnim: EncounterAnim | EncounterAnim[]): Promise { +export async function initEncounterAnims(encounterAnim: EncounterAnim | EncounterAnim[]): Promise { const anims = Array.isArray(encounterAnim) ? encounterAnim : [ encounterAnim ]; - const encounterAnimNames = Utils.getEnumKeys(EncounterAnim); + const encounterAnimNames = getEnumKeys(EncounterAnim); const encounterAnimFetches: Promise>[] = []; for (const anim of anims) { if (encounterAnims.has(anim) && !isNullOrUndefined(encounterAnims.get(anim))) { continue; } - encounterAnimFetches.push(scene.cachedFetch(`./battle-anims/encounter-${encounterAnimNames[anim].toLowerCase().replace(/\_/g, "-")}.json`) + encounterAnimFetches.push(globalScene.cachedFetch(`./battle-anims/encounter-${encounterAnimNames[anim].toLowerCase().replace(/\_/g, "-")}.json`) .then(response => response.json()) .then(cas => encounterAnims.set(anim, new AnimConfig(cas)))); } await Promise.allSettled(encounterAnimFetches); } -export function initMoveChargeAnim(scene: BattleScene, chargeAnim: ChargeAnim): Promise { +export function initMoveChargeAnim(chargeAnim: ChargeAnim): Promise { return new Promise(resolve => { if (chargeAnims.has(chargeAnim)) { if (chargeAnims.get(chargeAnim) !== null) { @@ -590,7 +601,7 @@ export function initMoveChargeAnim(scene: BattleScene, chargeAnim: ChargeAnim): } } else { chargeAnims.set(chargeAnim, null); - scene.cachedFetch(`./battle-anims/${ChargeAnim[chargeAnim].toLowerCase().replace(/\_/g, "-")}.json`) + globalScene.cachedFetch(`./battle-anims/${ChargeAnim[chargeAnim].toLowerCase().replace(/\_/g, "-")}.json`) .then(response => response.json()) .then(ca => { if (Array.isArray(ca)) { @@ -623,23 +634,22 @@ function populateMoveChargeAnim(chargeAnim: ChargeAnim, animSource: any) { chargeAnims.set(chargeAnim, [ chargeAnims.get(chargeAnim) as AnimConfig, moveChargeAnim ]); } -export function loadCommonAnimAssets(scene: BattleScene, startLoad?: boolean): Promise { +export function loadCommonAnimAssets(startLoad?: boolean): Promise { return new Promise(resolve => { - loadAnimAssets(scene, Array.from(commonAnims.values()), startLoad).then(() => resolve()); + loadAnimAssets(Array.from(commonAnims.values()), startLoad).then(() => resolve()); }); } /** * Loads encounter animation assets to scene * MUST be called after {@linkcode initEncounterAnims()} to load all required animations properly - * @param scene * @param startLoad */ -export async function loadEncounterAnimAssets(scene: BattleScene, startLoad?: boolean): Promise { - await loadAnimAssets(scene, Array.from(encounterAnims.values()), startLoad); +export async function loadEncounterAnimAssets(startLoad?: boolean): Promise { + await loadAnimAssets(Array.from(encounterAnims.values()), startLoad); } -export function loadMoveAnimAssets(scene: BattleScene, moveIds: Moves[], startLoad?: boolean): Promise { +export function loadMoveAnimAssets(moveIds: Moves[], startLoad?: boolean): Promise { return new Promise(resolve => { const moveAnimations = moveIds.map(m => moveAnims.get(m) as AnimConfig).flat(); for (const moveId of moveIds) { @@ -655,11 +665,11 @@ export function loadMoveAnimAssets(scene: BattleScene, moveIds: Moves[], startLo } } } - loadAnimAssets(scene, moveAnimations, startLoad).then(() => resolve()); + loadAnimAssets(moveAnimations, startLoad).then(() => resolve()); }); } -function loadAnimAssets(scene: BattleScene, anims: AnimConfig[], startLoad?: boolean): Promise { +function loadAnimAssets(anims: AnimConfig[], startLoad?: boolean): Promise { return new Promise(resolve => { const backgrounds = new Set(); const sounds = new Set(); @@ -676,19 +686,19 @@ function loadAnimAssets(scene: BattleScene, anims: AnimConfig[], startLoad?: boo backgrounds.add(abg); } if (a.graphic) { - scene.loadSpritesheet(a.graphic, "battle_anims", 96); + globalScene.loadSpritesheet(a.graphic, "battle_anims", 96); } } for (const bg of backgrounds) { - scene.loadImage(bg, "battle_anims"); + globalScene.loadImage(bg, "battle_anims"); } for (const s of sounds) { - scene.loadSe(s, "battle_anims", s); + globalScene.loadSe(s, "battle_anims", s); } if (startLoad) { - scene.load.once(Phaser.Loader.Events.COMPLETE, () => resolve()); - if (!scene.load.isLoading()) { - scene.load.start(); + globalScene.load.once(Phaser.Loader.Events.COMPLETE, () => resolve()); + if (!globalScene.load.isLoading()) { + globalScene.load.start(); } } else { resolve(); @@ -741,7 +751,7 @@ function isReversed(src1: number, src2: number, dst1: number, dst2: number) { } interface SpriteCache { - [key: integer]: Phaser.GameObjects.Sprite[] + [key: number]: Phaser.GameObjects.Sprite[] } export abstract class BattleAnim { @@ -778,8 +788,8 @@ export abstract class BattleAnim { return false; } - private getGraphicFrameData(scene: BattleScene, frames: AnimFrame[], onSubstitute?: boolean): Map> { - const ret: Map> = new Map([ + private getGraphicFrameData(frames: AnimFrame[], onSubstitute?: boolean): Map> { + const ret: Map> = new Map([ [ AnimFrameTarget.GRAPHIC, new Map() ], [ AnimFrameTarget.USER, new Map() ], [ AnimFrameTarget.TARGET, new Map() ] @@ -835,7 +845,7 @@ export abstract class BattleAnim { return ret; } - play(scene: BattleScene, onSubstitute?: boolean, callback?: Function) { + play(onSubstitute?: boolean, callback?: Function) { const isOppAnim = this.isOppAnim(); const user = !isOppAnim ? this.user! : this.target!; // TODO: are those bangs correct? const target = !isOppAnim ? this.target! : this.user!; @@ -857,7 +867,7 @@ export abstract class BattleAnim { [AnimFrameTarget.USER]: [], [AnimFrameTarget.TARGET]: [] }; - const spritePriorities: integer[] = []; + const spritePriorities: number[] = []; const cleanUpAndComplete = () => { userSprite.setPosition(0, 0); @@ -907,7 +917,7 @@ export abstract class BattleAnim { } }; - if (!scene.moveAnimations && !this.playRegardlessOfIssues) { + if (!globalScene.moveAnimations && !this.playRegardlessOfIssues) { return cleanUpAndComplete(); } @@ -924,8 +934,8 @@ export abstract class BattleAnim { let r = anim?.frames.length ?? 0; let f = 0; - scene.tweens.addCounter({ - duration: Utils.getFrameMs(3), + globalScene.tweens.addCounter({ + duration: getFrameMs(3), repeat: anim?.frames.length ?? 0, onRepeat: () => { if (!f) { @@ -934,7 +944,7 @@ export abstract class BattleAnim { } const spriteFrames = anim!.frames[f]; // TODO: is the bang correcT? - const frameData = this.getGraphicFrameData(scene, anim!.frames[f], onSubstitute); // TODO: is the bang correct? + const frameData = this.getGraphicFrameData(anim!.frames[f], onSubstitute); // TODO: is the bang correct? let u = 0; let t = 0; let g = 0; @@ -950,19 +960,19 @@ export abstract class BattleAnim { const spriteSource = isUser ? userSprite : targetSprite; if ((isUser ? u : t) === sprites.length) { if (isUser || !targetSubstitute) { - const sprite = scene.addPokemonSprite(isUser ? user! : target, 0, 0, spriteSource!.texture, spriteSource!.frame.name, true); // TODO: are those bangs correct? + const sprite = globalScene.addPokemonSprite(isUser ? user! : target, 0, 0, spriteSource!.texture, spriteSource!.frame.name, true); // TODO: are those bangs correct? [ "spriteColors", "fusionSpriteColors" ].map(k => sprite.pipelineData[k] = (isUser ? user! : target).getSprite().pipelineData[k]); // TODO: are those bangs correct? sprite.setPipelineData("spriteKey", (isUser ? user! : target).getBattleSpriteKey()); sprite.setPipelineData("shiny", (isUser ? user : target).shiny); sprite.setPipelineData("variant", (isUser ? user : target).variant); sprite.setPipelineData("ignoreFieldPos", true); spriteSource.on("animationupdate", (_anim, frame) => sprite.setFrame(frame.textureFrame)); - scene.field.add(sprite); + globalScene.field.add(sprite); sprites.push(sprite); } else { - const sprite = scene.addFieldSprite(spriteSource.x, spriteSource.y, spriteSource.texture); + const sprite = globalScene.addFieldSprite(spriteSource.x, spriteSource.y, spriteSource.texture); spriteSource.on("animationupdate", (_anim, frame) => sprite.setFrame(frame.textureFrame)); - scene.field.add(sprite); + globalScene.field.add(sprite); sprites.push(sprite); } } @@ -987,9 +997,9 @@ export abstract class BattleAnim { } else { const sprites = spriteCache[AnimFrameTarget.GRAPHIC]; if (g === sprites.length) { - const newSprite: Phaser.GameObjects.Sprite = scene.addFieldSprite(0, 0, anim!.graphic, 1); // TODO: is the bang correct? + const newSprite: Phaser.GameObjects.Sprite = globalScene.addFieldSprite(0, 0, anim!.graphic, 1); // TODO: is the bang correct? sprites.push(newSprite); - scene.field.add(newSprite); + globalScene.field.add(newSprite); spritePriorities.push(1); } @@ -997,47 +1007,39 @@ export abstract class BattleAnim { const moveSprite = sprites[graphicIndex]; if (spritePriorities[graphicIndex] !== frame.priority) { spritePriorities[graphicIndex] = frame.priority; - const setSpritePriority = (priority: integer) => { - switch (priority) { - case 0: - scene.field.moveBelow(moveSprite as Phaser.GameObjects.GameObject, scene.getEnemyPokemon(false) ?? scene.getPlayerPokemon(false)!); // TODO: is this bang correct? - break; - case 1: - scene.field.moveTo(moveSprite, scene.field.getAll().length - 1); - break; - case 2: - switch (frame.focus) { - case AnimFocus.USER: - if (this.bgSprite) { - scene.field.moveAbove(moveSprite as Phaser.GameObjects.GameObject, this.bgSprite); - } else { - scene.field.moveBelow(moveSprite as Phaser.GameObjects.GameObject, this.user!); // TODO: is this bang correct? - } - break; - case AnimFocus.TARGET: - scene.field.moveBelow(moveSprite as Phaser.GameObjects.GameObject, this.target!); // TODO: is this bang correct? - break; - default: - setSpritePriority(1); - break; - } - break; - case 3: - switch (frame.focus) { - case AnimFocus.USER: - scene.field.moveAbove(moveSprite as Phaser.GameObjects.GameObject, this.user!); // TODO: is this bang correct? - break; - case AnimFocus.TARGET: - scene.field.moveAbove(moveSprite as Phaser.GameObjects.GameObject, this.target!); // TODO: is this bang correct? - break; - default: - setSpritePriority(1); - break; - } - break; - default: - setSpritePriority(1); + /** Move the position that the moveSprite is rendered in based on the priority. + * @param priority The priority level to draw the sprite. + * - 0: Draw the sprite in front of the pokemon on the field. + * - 1: Draw the sprite in front of the user pokemon. + * - 2: Draw the sprite in front of its `bgSprite` (if it has one), or its + * `AnimFocus` (if that is user/target), otherwise behind everything. + * - 3: Draw the sprite behind its `AnimFocus` (if that is user/target), otherwise in front of everything. + */ + const setSpritePriority = (priority: number) => { + /** The sprite we are moving the moveSprite in relation to */ + let targetSprite: Phaser.GameObjects.GameObject | nil; + /** The method that is being used to move the sprite.*/ + let moveFunc: ((sprite: Phaser.GameObjects.GameObject, target: Phaser.GameObjects.GameObject) => void) | + ((sprite: Phaser.GameObjects.GameObject) => void) = globalScene.field.bringToTop; + + if (priority === 0) { // Place the sprite in front of the pokemon on the field. + targetSprite = globalScene.getEnemyField().find(p => p) ?? globalScene.getPlayerField().find(p => p); + console.log(typeof targetSprite); + moveFunc = globalScene.field.moveBelow; + } else if (priority === 2 && this.bgSprite) { + moveFunc = globalScene.field.moveAbove; + targetSprite = this.bgSprite; + } else if (priority === 2 || priority === 3) { + moveFunc = priority === 2 ? globalScene.field.moveBelow : globalScene.field.moveAbove; + if (frame.focus === AnimFocus.USER) { + targetSprite = this.user; + } else if (frame.focus === AnimFocus.TARGET) { + targetSprite = this.target; + } } + // If target sprite is not undefined and exists in the field container, then move the sprite using the moveFunc. + // Otherwise, default to just bringing it to the top. + targetSprite && globalScene.field.exists(targetSprite) ? moveFunc.bind(globalScene.field)(moveSprite as Phaser.GameObjects.GameObject, targetSprite) : globalScene.field.bringToTop(moveSprite as Phaser.GameObjects.GameObject); }; setSpritePriority(frame.priority); } @@ -1055,11 +1057,13 @@ export abstract class BattleAnim { } } if (anim?.frameTimedEvents.has(f)) { - for (const event of anim.frameTimedEvents.get(f)!) { // TODO: is this bang correct? - r = Math.max((anim.frames.length - f) + event.execute(scene, this), r); + const base = anim.frames.length - f; + // Bang is correct due to `has` check above, which cannot return true for an undefined / null `f` + for (const event of anim.frameTimedEvents.get(f)!) { + r = Math.max(base + event.execute(this), r); } } - const targets = Utils.getEnumValues(AnimFrameTarget); + const targets = getEnumValues(AnimFrameTarget); for (const i of targets) { const count = i === AnimFrameTarget.GRAPHIC ? g : i === AnimFrameTarget.USER ? u : t; if (count < spriteCache[i].length) { @@ -1086,8 +1090,8 @@ export abstract class BattleAnim { } } if (r) { - scene.tweens.addCounter({ - duration: Utils.getFrameMs(r), + globalScene.tweens.addCounter({ + duration: getFrameMs(r), onComplete: () => cleanUpAndComplete() }); } else { @@ -1097,8 +1101,8 @@ export abstract class BattleAnim { }); } - private getGraphicFrameDataWithoutTarget(frames: AnimFrame[], targetInitialX: number, targetInitialY: number): Map> { - const ret: Map> = new Map([ + private getGraphicFrameDataWithoutTarget(frames: AnimFrame[], targetInitialX: number, targetInitialY: number): Map> { + const ret: Map> = new Map([ [ AnimFrameTarget.GRAPHIC, new Map() ], [ AnimFrameTarget.USER, new Map() ], [ AnimFrameTarget.TARGET, new Map() ] @@ -1123,8 +1127,6 @@ export abstract class BattleAnim { } /** - * - * @param scene * @param targetInitialX * @param targetInitialY * @param frameTimeMult @@ -1135,7 +1137,7 @@ export abstract class BattleAnim { * - 5 is on top of player sprite * @param callback */ - playWithoutTargets(scene: BattleScene, targetInitialX: number, targetInitialY: number, frameTimeMult: number, frameTimedEventPriority?: 0 | 1 | 3 | 5, callback?: Function) { + playWithoutTargets(targetInitialX: number, targetInitialY: number, frameTimeMult: number, frameTimedEventPriority?: 0 | 1 | 3 | 5, callback?: Function) { const spriteCache: SpriteCache = { [AnimFrameTarget.GRAPHIC]: [], [AnimFrameTarget.USER]: [], @@ -1156,7 +1158,7 @@ export abstract class BattleAnim { } }; - if (!scene.moveAnimations && !this.playRegardlessOfIssues) { + if (!globalScene.moveAnimations && !this.playRegardlessOfIssues) { return cleanUpAndComplete(); } @@ -1168,13 +1170,13 @@ export abstract class BattleAnim { let totalFrames = anim!.frames.length; let frameCount = 0; - let existingFieldSprites = scene.field.getAll().slice(0); + let existingFieldSprites = globalScene.field.getAll().slice(0); - scene.tweens.addCounter({ - duration: Utils.getFrameMs(3) * frameTimeMult, + globalScene.tweens.addCounter({ + duration: getFrameMs(3) * frameTimeMult, repeat: anim!.frames.length, onRepeat: () => { - existingFieldSprites = scene.field.getAll().slice(0); + existingFieldSprites = globalScene.field.getAll().slice(0); const spriteFrames = anim!.frames[frameCount]; const frameData = this.getGraphicFrameDataWithoutTarget(anim!.frames[frameCount], targetInitialX, targetInitialY); let graphicFrameCount = 0; @@ -1186,22 +1188,22 @@ export abstract class BattleAnim { const sprites = spriteCache[AnimFrameTarget.GRAPHIC]; if (graphicFrameCount === sprites.length) { - const newSprite: Phaser.GameObjects.Sprite = scene.addFieldSprite(0, 0, anim!.graphic, 1); + const newSprite: Phaser.GameObjects.Sprite = globalScene.addFieldSprite(0, 0, anim!.graphic, 1); sprites.push(newSprite); - scene.field.add(newSprite); + globalScene.field.add(newSprite); } const graphicIndex = graphicFrameCount++; const moveSprite = sprites[graphicIndex]; if (!isNullOrUndefined(frame.priority)) { - const setSpritePriority = (priority: integer) => { + const setSpritePriority = (priority: number) => { if (existingFieldSprites.length > priority) { // Move to specified priority index - const index = scene.field.getIndex(existingFieldSprites[priority]); - scene.field.moveTo(moveSprite, index); + const index = globalScene.field.getIndex(existingFieldSprites[priority]); + globalScene.field.moveTo(moveSprite, index); } else { // Move to top of scene - scene.field.moveTo(moveSprite, scene.field.getAll().length - 1); + globalScene.field.moveTo(moveSprite, globalScene.field.getAll().length - 1); } }; setSpritePriority(frame.priority); @@ -1220,11 +1222,12 @@ export abstract class BattleAnim { } } if (anim?.frameTimedEvents.get(frameCount)) { + const base = anim.frames.length - frameCount; for (const event of anim.frameTimedEvents.get(frameCount)!) { - totalFrames = Math.max((anim.frames.length - frameCount) + event.execute(scene, this, frameTimedEventPriority), totalFrames); + totalFrames = Math.max(base + event.execute(this, frameTimedEventPriority), totalFrames); } } - const targets = Utils.getEnumValues(AnimFrameTarget); + const targets = getEnumValues(AnimFrameTarget); for (const i of targets) { const count = graphicFrameCount; if (count < spriteCache[i].length) { @@ -1248,8 +1251,8 @@ export abstract class BattleAnim { } } if (totalFrames) { - scene.tweens.addCounter({ - duration: Utils.getFrameMs(totalFrames), + globalScene.tweens.addCounter({ + duration: getFrameMs(totalFrames), onComplete: () => cleanUpAndComplete() }); } else { @@ -1282,7 +1285,7 @@ export class MoveAnim extends BattleAnim { public move: Moves; constructor(move: Moves, user: Pokemon, target: BattlerIndex, playOnEmptyField: boolean = false) { - super(user, user.scene.getField()[target], playOnEmptyField); + super(user, globalScene.getField()[target], playOnEmptyField); this.move = move; } @@ -1347,15 +1350,15 @@ export class EncounterBattleAnim extends BattleAnim { } export async function populateAnims() { - const commonAnimNames = Utils.getEnumKeys(CommonAnim).map(k => k.toLowerCase()); + const commonAnimNames = getEnumKeys(CommonAnim).map(k => k.toLowerCase()); const commonAnimMatchNames = commonAnimNames.map(k => k.replace(/\_/g, "")); - const commonAnimIds = Utils.getEnumValues(CommonAnim) as CommonAnim[]; - const chargeAnimNames = Utils.getEnumKeys(ChargeAnim).map(k => k.toLowerCase()); + const commonAnimIds = getEnumValues(CommonAnim) as CommonAnim[]; + const chargeAnimNames = getEnumKeys(ChargeAnim).map(k => k.toLowerCase()); const chargeAnimMatchNames = chargeAnimNames.map(k => k.replace(/\_/g, " ")); - const chargeAnimIds = Utils.getEnumValues(ChargeAnim) as ChargeAnim[]; + const chargeAnimIds = getEnumValues(ChargeAnim) as ChargeAnim[]; const commonNamePattern = /name: (?:Common:)?(Opp )?(.*)/; const moveNameToId = {}; - for (const move of Utils.getEnumValues(Moves).slice(1)) { + for (const move of getEnumValues(Moves).slice(1)) { const moveName = Moves[move].toUpperCase().replace(/\_/g, ""); moveNameToId[moveName] = move; } diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 0c0b8e9e034..7b16c718f07 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -1,4 +1,4 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { allAbilities, applyAbAttrs, @@ -8,7 +8,8 @@ import { ReverseDrainAbAttr } from "#app/data/ability"; import { ChargeAnim, CommonAnim, CommonBattleAnim, MoveChargeAnim } from "#app/data/battle-anims"; -import Move, { +import type Move from "#app/data/move"; +import { allMoves, applyMoveAttrs, ConsecutiveUseDoublePowerAttr, @@ -17,18 +18,20 @@ import Move, { MoveFlags, StatusCategoryOnAllyAttr } from "#app/data/move"; -import { SpeciesFormChangeManualTrigger } from "#app/data/pokemon-forms"; +import { SpeciesFormChangeAbilityTrigger } from "#app/data/pokemon-forms"; import { getStatusEffectHealText } from "#app/data/status-effect"; import { TerrainType } from "#app/data/terrain"; import { Type } from "#enums/type"; -import Pokemon, { HitResult, MoveResult } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; +import { HitResult, MoveResult } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { CommonAnimPhase } from "#app/phases/common-anim-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { MovePhase } from "#app/phases/move-phase"; import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase"; import { ShowAbilityPhase } from "#app/phases/show-ability-phase"; -import { StatStageChangeCallback, StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; +import type { StatStageChangeCallback } from "#app/phases/stat-stage-change-phase"; +import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import i18next from "#app/plugins/i18n"; import { BooleanHolder, getFrameMs, NumberHolder, toDmgValue } from "#app/utils"; import { Abilities } from "#enums/abilities"; @@ -39,6 +42,7 @@ import { Species } from "#enums/species"; import { EFFECTIVE_STATS, getStatKey, Stat, type BattleStat, type EffectiveStat } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; import { WeatherType } from "#enums/weather-type"; +import * as Utils from "../utils"; export enum BattlerTagLapseType { FAINT, @@ -110,11 +114,10 @@ export class BattlerTag { /** * Helper function that retrieves the source Pokemon object - * @param scene medium to retrieve the source Pokemon * @returns The source {@linkcode Pokemon} or `null` if none is found */ - public getSourcePokemon(scene: BattleScene): Pokemon | null { - return this.sourceId ? scene.getPokemonById(this.sourceId) : null; + public getSourcePokemon(): Pokemon | null { + return this.sourceId ? globalScene.getPokemonById(this.sourceId) : null; } } @@ -135,7 +138,7 @@ export interface TerrainBattlerTag { * to select restricted moves. */ export abstract class MoveRestrictionBattlerTag extends BattlerTag { - constructor(tagType: BattlerTagType, lapseType: BattlerTagLapseType | BattlerTagLapseType[], turnCount: integer, sourceMove?: Moves, sourceId?: integer) { + constructor(tagType: BattlerTagType, lapseType: BattlerTagLapseType | BattlerTagLapseType[], turnCount: number, sourceMove?: Moves, sourceId?: number) { super(tagType, lapseType, turnCount, sourceMove, sourceId); } @@ -143,12 +146,12 @@ export abstract class MoveRestrictionBattlerTag extends BattlerTag { override lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { if (lapseType === BattlerTagLapseType.PRE_MOVE) { // Cancel the affected pokemon's selected move - const phase = pokemon.scene.getCurrentPhase() as MovePhase; + const phase = globalScene.getCurrentPhase() as MovePhase; const move = phase.move; if (this.isMoveRestricted(move.moveId, pokemon)) { if (this.interruptedText(pokemon, move.moveId)) { - pokemon.scene.queueMessage(this.interruptedText(pokemon, move.moveId)); + globalScene.queueMessage(this.interruptedText(pokemon, move.moveId)); } phase.cancel(); } @@ -272,22 +275,22 @@ export class DisabledTag extends MoveRestrictionBattlerTag { override onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - const move = pokemon.getLastXMoves() - .find(m => m.move !== Moves.NONE && m.move !== Moves.STRUGGLE && !m.virtual); - if (move === undefined) { + const move = pokemon.getLastXMoves(-1) + .find(m => !m.virtual); + if (Utils.isNullOrUndefined(move) || move.move === Moves.STRUGGLE || move.move === Moves.NONE) { return; } this.moveId = move.move; - pokemon.scene.queueMessage(i18next.t("battlerTags:disabledOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: allMoves[this.moveId].name })); + globalScene.queueMessage(i18next.t("battlerTags:disabledOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: allMoves[this.moveId].name })); } /** @override */ override onRemove(pokemon: Pokemon): void { super.onRemove(pokemon); - pokemon.scene.queueMessage(i18next.t("battlerTags:disabledLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: allMoves[this.moveId].name })); + globalScene.queueMessage(i18next.t("battlerTags:disabledLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: allMoves[this.moveId].name })); } /** @override */ @@ -406,8 +409,8 @@ export class RechargingTag extends BattlerTag { /** Cancels the source's move this turn and queues a "__ must recharge!" message */ lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { if (lapseType === BattlerTagLapseType.PRE_MOVE) { - pokemon.scene.queueMessage(i18next.t("battlerTags:rechargingLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); - (pokemon.scene.getCurrentPhase() as MovePhase).cancel(); + globalScene.queueMessage(i18next.t("battlerTags:rechargingLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + (globalScene.getCurrentPhase() as MovePhase).cancel(); pokemon.getMoveQueue().shift(); } return super.lapse(pokemon, lapseType); @@ -426,10 +429,10 @@ export class BeakBlastChargingTag extends BattlerTag { onAdd(pokemon: Pokemon): void { // Play Beak Blast's charging animation - new MoveChargeAnim(ChargeAnim.BEAK_BLAST_CHARGING, this.sourceMove, pokemon).play(pokemon.scene); + new MoveChargeAnim(ChargeAnim.BEAK_BLAST_CHARGING, this.sourceMove, pokemon).play(); // Queue Beak Blast's header message - pokemon.scene.queueMessage(i18next.t("moveTriggers:startedHeatingUpBeak", { pokemonName: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("moveTriggers:startedHeatingUpBeak", { pokemonName: getPokemonNameWithAffix(pokemon) })); } /** @@ -464,7 +467,7 @@ export class ShellTrapTag extends BattlerTag { } onAdd(pokemon: Pokemon): void { - pokemon.scene.queueMessage(i18next.t("moveTriggers:setUpShellTrap", { pokemonName: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("moveTriggers:setUpShellTrap", { pokemonName: getPokemonNameWithAffix(pokemon) })); } /** @@ -479,17 +482,17 @@ export class ShellTrapTag extends BattlerTag { // Trap should only be triggered by opponent's Physical moves if (phaseData?.move.category === MoveCategory.PHYSICAL && pokemon.isOpponent(phaseData.attacker)) { - const shellTrapPhaseIndex = pokemon.scene.phaseQueue.findIndex( + const shellTrapPhaseIndex = globalScene.phaseQueue.findIndex( phase => phase instanceof MovePhase && phase.pokemon === pokemon ); - const firstMovePhaseIndex = pokemon.scene.phaseQueue.findIndex( + const firstMovePhaseIndex = globalScene.phaseQueue.findIndex( phase => phase instanceof MovePhase ); // Only shift MovePhase timing if it's not already next up if (shellTrapPhaseIndex !== -1 && shellTrapPhaseIndex !== firstMovePhaseIndex) { - const shellTrapMovePhase = pokemon.scene.phaseQueue.splice(shellTrapPhaseIndex, 1)[0]; - pokemon.scene.prependToPhase(shellTrapMovePhase, MovePhase); + const shellTrapMovePhase = globalScene.phaseQueue.splice(shellTrapPhaseIndex, 1)[0]; + globalScene.prependToPhase(shellTrapMovePhase, MovePhase); } this.activated = true; @@ -508,7 +511,7 @@ export class TrappedTag extends BattlerTag { } canAdd(pokemon: Pokemon): boolean { - const source = pokemon.scene.getPokemonById(this.sourceId!)!; + const source = globalScene.getPokemonById(this.sourceId!)!; const move = allMoves[this.sourceMove]; const isGhost = pokemon.isOfType(Type.GHOST); @@ -521,13 +524,13 @@ export class TrappedTag extends BattlerTag { onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - pokemon.scene.queueMessage(this.getTrapMessage(pokemon)); + globalScene.queueMessage(this.getTrapMessage(pokemon)); } onRemove(pokemon: Pokemon): void { super.onRemove(pokemon); - pokemon.scene.queueMessage(i18next.t("battlerTags:trappedOnRemove", { + globalScene.queueMessage(i18next.t("battlerTags:trappedOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: this.getMoveName() })); @@ -585,8 +588,8 @@ export class FlinchedTag extends BattlerTag { */ lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { if (lapseType === BattlerTagLapseType.PRE_MOVE) { - (pokemon.scene.getCurrentPhase() as MovePhase).cancel(); - pokemon.scene.queueMessage(i18next.t("battlerTags:flinchedLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + (globalScene.getCurrentPhase() as MovePhase).cancel(); + globalScene.queueMessage(i18next.t("battlerTags:flinchedLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } return super.lapse(pokemon, lapseType); @@ -610,11 +613,11 @@ export class InterruptedTag extends BattlerTag { super.onAdd(pokemon); pokemon.getMoveQueue().shift(); - pokemon.pushMoveHistory({ move: Moves.NONE, result: MoveResult.OTHER }); + pokemon.pushMoveHistory({ move: Moves.NONE, result: MoveResult.OTHER, targets: []}); } lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { - (pokemon.scene.getCurrentPhase() as MovePhase).cancel(); + (globalScene.getCurrentPhase() as MovePhase).cancel(); return super.lapse(pokemon, lapseType); } } @@ -628,44 +631,44 @@ export class ConfusedTag extends BattlerTag { } canAdd(pokemon: Pokemon): boolean { - return pokemon.scene.arena.terrain?.terrainType !== TerrainType.MISTY || !pokemon.isGrounded(); + return globalScene.arena.terrain?.terrainType !== TerrainType.MISTY || !pokemon.isGrounded(); } onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - pokemon.scene.unshiftPhase(new CommonAnimPhase(pokemon.scene, pokemon.getBattlerIndex(), undefined, CommonAnim.CONFUSION)); - pokemon.scene.queueMessage(i18next.t("battlerTags:confusedOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.unshiftPhase(new CommonAnimPhase(pokemon.getBattlerIndex(), undefined, CommonAnim.CONFUSION)); + globalScene.queueMessage(i18next.t("battlerTags:confusedOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } onRemove(pokemon: Pokemon): void { super.onRemove(pokemon); - pokemon.scene.queueMessage(i18next.t("battlerTags:confusedOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("battlerTags:confusedOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } onOverlap(pokemon: Pokemon): void { super.onOverlap(pokemon); - pokemon.scene.queueMessage(i18next.t("battlerTags:confusedOnOverlap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("battlerTags:confusedOnOverlap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { const ret = lapseType !== BattlerTagLapseType.CUSTOM && super.lapse(pokemon, lapseType); if (ret) { - pokemon.scene.queueMessage(i18next.t("battlerTags:confusedLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); - pokemon.scene.unshiftPhase(new CommonAnimPhase(pokemon.scene, pokemon.getBattlerIndex(), undefined, CommonAnim.CONFUSION)); + globalScene.queueMessage(i18next.t("battlerTags:confusedLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.unshiftPhase(new CommonAnimPhase(pokemon.getBattlerIndex(), undefined, CommonAnim.CONFUSION)); // 1/3 chance of hitting self with a 40 base power move if (pokemon.randSeedInt(3) === 0) { const atk = pokemon.getEffectiveStat(Stat.ATK); const def = pokemon.getEffectiveStat(Stat.DEF); const damage = toDmgValue(((((2 * pokemon.level / 5 + 2) * 40 * atk / def) / 50) + 2) * (pokemon.randSeedIntRange(85, 100) / 100)); - pokemon.scene.queueMessage(i18next.t("battlerTags:confusedLapseHurtItself")); + globalScene.queueMessage(i18next.t("battlerTags:confusedLapseHurtItself")); pokemon.damageAndUpdate(damage); pokemon.battleData.hitCount++; - (pokemon.scene.getCurrentPhase() as MovePhase).cancel(); + (globalScene.getCurrentPhase() as MovePhase).cancel(); } } @@ -700,7 +703,7 @@ export class DestinyBondTag extends BattlerTag { if (lapseType !== BattlerTagLapseType.CUSTOM) { return super.lapse(pokemon, lapseType); } - const source = this.sourceId ? pokemon.scene.getPokemonById(this.sourceId) : null; + const source = this.sourceId ? globalScene.getPokemonById(this.sourceId) : null; if (!source?.isFainted()) { return true; } @@ -710,11 +713,11 @@ export class DestinyBondTag extends BattlerTag { } if (pokemon.isBossImmune()) { - pokemon.scene.queueMessage(i18next.t("battlerTags:destinyBondLapseIsBoss", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("battlerTags:destinyBondLapseIsBoss", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); return false; } - pokemon.scene.queueMessage( + globalScene.queueMessage( i18next.t("battlerTags:destinyBondLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(source), pokemonNameWithAffix2: getPokemonNameWithAffix(pokemon) @@ -732,7 +735,7 @@ export class InfatuatedTag extends BattlerTag { canAdd(pokemon: Pokemon): boolean { if (this.sourceId) { - const pkm = pokemon.scene.getPokemonById(this.sourceId); + const pkm = globalScene.getPokemonById(this.sourceId); if (pkm) { return pokemon.isOppositeGender(pkm); @@ -749,10 +752,10 @@ export class InfatuatedTag extends BattlerTag { onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - pokemon.scene.queueMessage( + globalScene.queueMessage( i18next.t("battlerTags:infatuatedOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - sourcePokemonName: getPokemonNameWithAffix(pokemon.scene.getPokemonById(this.sourceId!) ?? undefined) // TODO: is that bang correct? + sourcePokemonName: getPokemonNameWithAffix(globalScene.getPokemonById(this.sourceId!) ?? undefined) // TODO: is that bang correct? }) ); } @@ -760,24 +763,24 @@ export class InfatuatedTag extends BattlerTag { onOverlap(pokemon: Pokemon): void { super.onOverlap(pokemon); - pokemon.scene.queueMessage(i18next.t("battlerTags:infatuatedOnOverlap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("battlerTags:infatuatedOnOverlap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { const ret = lapseType !== BattlerTagLapseType.CUSTOM || super.lapse(pokemon, lapseType); if (ret) { - pokemon.scene.queueMessage( + globalScene.queueMessage( i18next.t("battlerTags:infatuatedLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - sourcePokemonName: getPokemonNameWithAffix(pokemon.scene.getPokemonById(this.sourceId!) ?? undefined) // TODO: is that bang correct? + sourcePokemonName: getPokemonNameWithAffix(globalScene.getPokemonById(this.sourceId!) ?? undefined) // TODO: is that bang correct? }) ); - pokemon.scene.unshiftPhase(new CommonAnimPhase(pokemon.scene, pokemon.getBattlerIndex(), undefined, CommonAnim.ATTRACT)); + globalScene.unshiftPhase(new CommonAnimPhase(pokemon.getBattlerIndex(), undefined, CommonAnim.ATTRACT)); if (pokemon.randSeedInt(2)) { - pokemon.scene.queueMessage(i18next.t("battlerTags:infatuatedLapseImmobilize", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); - (pokemon.scene.getCurrentPhase() as MovePhase).cancel(); + globalScene.queueMessage(i18next.t("battlerTags:infatuatedLapseImmobilize", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + (globalScene.getCurrentPhase() as MovePhase).cancel(); } } @@ -787,7 +790,7 @@ export class InfatuatedTag extends BattlerTag { onRemove(pokemon: Pokemon): void { super.onRemove(pokemon); - pokemon.scene.queueMessage(i18next.t("battlerTags:infatuatedOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("battlerTags:infatuatedOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } isSourceLinked(): boolean { @@ -822,8 +825,8 @@ export class SeedTag extends BattlerTag { onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - pokemon.scene.queueMessage(i18next.t("battlerTags:seededOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); - this.sourceIndex = pokemon.scene.getPokemonById(this.sourceId!)!.getBattlerIndex(); // TODO: are those bangs correct? + globalScene.queueMessage(i18next.t("battlerTags:seededOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + this.sourceIndex = globalScene.getPokemonById(this.sourceId!)!.getBattlerIndex(); // TODO: are those bangs correct? } lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { @@ -836,11 +839,11 @@ export class SeedTag extends BattlerTag { applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); if (!cancelled.value) { - pokemon.scene.unshiftPhase(new CommonAnimPhase(pokemon.scene, source.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.LEECH_SEED)); + globalScene.unshiftPhase(new CommonAnimPhase(source.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.LEECH_SEED)); const damage = pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 8)); const reverseDrain = pokemon.hasAbilityWithAttr(ReverseDrainAbAttr, false); - pokemon.scene.unshiftPhase(new PokemonHealPhase(pokemon.scene, source.getBattlerIndex(), + globalScene.unshiftPhase(new PokemonHealPhase(source.getBattlerIndex(), !reverseDrain ? damage : damage * -1, !reverseDrain ? i18next.t("battlerTags:seededLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }) : i18next.t("battlerTags:seededLapseShed", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }), false, true)); @@ -870,7 +873,7 @@ export class PowderTag extends BattlerTag { super.onAdd(pokemon); // "{Pokemon} is covered in powder!" - pokemon.scene.queueMessage(i18next.t("battlerTags:powderOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("battlerTags:powderOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } /** @@ -882,15 +885,15 @@ export class PowderTag extends BattlerTag { */ lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { if (lapseType === BattlerTagLapseType.PRE_MOVE) { - const movePhase = pokemon.scene.getCurrentPhase(); + const movePhase = globalScene.getCurrentPhase(); if (movePhase instanceof MovePhase) { const move = movePhase.move.getMove(); - const weather = pokemon.scene.arena.weather; - if (pokemon.getMoveType(move) === Type.FIRE && !(weather && weather.weatherType === WeatherType.HEAVY_RAIN && !weather.isEffectSuppressed(pokemon.scene))) { + const weather = globalScene.arena.weather; + if (pokemon.getMoveType(move) === Type.FIRE && !(weather && weather.weatherType === WeatherType.HEAVY_RAIN && !weather.isEffectSuppressed())) { movePhase.fail(); movePhase.showMoveText(); - pokemon.scene.unshiftPhase(new CommonAnimPhase(pokemon.scene, pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.POWDER)); + globalScene.unshiftPhase(new CommonAnimPhase(pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.POWDER)); const cancelDamage = new BooleanHolder(false); applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelDamage); @@ -899,7 +902,7 @@ export class PowderTag extends BattlerTag { } // "When the flame touched the powder\non the Pokémon, it exploded!" - pokemon.scene.queueMessage(i18next.t("battlerTags:powderLapse", { moveName: move.name })); + globalScene.queueMessage(i18next.t("battlerTags:powderLapse", { moveName: move.name })); } } return true; @@ -917,21 +920,21 @@ export class NightmareTag extends BattlerTag { onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - pokemon.scene.queueMessage(i18next.t("battlerTags:nightmareOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("battlerTags:nightmareOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } onOverlap(pokemon: Pokemon): void { super.onOverlap(pokemon); - pokemon.scene.queueMessage(i18next.t("battlerTags:nightmareOnOverlap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("battlerTags:nightmareOnOverlap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { const ret = lapseType !== BattlerTagLapseType.CUSTOM || super.lapse(pokemon, lapseType); if (ret) { - pokemon.scene.queueMessage(i18next.t("battlerTags:nightmareLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); - pokemon.scene.unshiftPhase(new CommonAnimPhase(pokemon.scene, pokemon.getBattlerIndex(), undefined, CommonAnim.CURSE)); // TODO: Update animation type + globalScene.queueMessage(i18next.t("battlerTags:nightmareLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.unshiftPhase(new CommonAnimPhase(pokemon.getBattlerIndex(), undefined, CommonAnim.CURSE)); // TODO: Update animation type const cancelled = new BooleanHolder(false); applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); @@ -1014,15 +1017,15 @@ export class EncoreTag extends MoveRestrictionBattlerTag { onAdd(pokemon: Pokemon): void { super.onRemove(pokemon); - pokemon.scene.queueMessage(i18next.t("battlerTags:encoreOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("battlerTags:encoreOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); - const movePhase = pokemon.scene.findPhase(m => m instanceof MovePhase && m.pokemon === pokemon); + const movePhase = globalScene.findPhase(m => m instanceof MovePhase && m.pokemon === pokemon); if (movePhase) { const movesetMove = pokemon.getMoveset().find(m => m!.moveId === this.moveId); // TODO: is this bang correct? if (movesetMove) { const lastMove = pokemon.getLastXMoves(1)[0]; - pokemon.scene.tryReplacePhase((m => m instanceof MovePhase && m.pokemon === pokemon), - new MovePhase(pokemon.scene, pokemon, lastMove.targets!, movesetMove)); // TODO: is this bang correct? + globalScene.tryReplacePhase((m => m instanceof MovePhase && m.pokemon === pokemon), + new MovePhase(pokemon, lastMove.targets!, movesetMove)); // TODO: is this bang correct? } } } @@ -1063,7 +1066,7 @@ export class EncoreTag extends MoveRestrictionBattlerTag { onRemove(pokemon: Pokemon): void { super.onRemove(pokemon); - pokemon.scene.queueMessage(i18next.t("battlerTags:encoreOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("battlerTags:encoreOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } } @@ -1073,9 +1076,9 @@ export class HelpingHandTag extends BattlerTag { } onAdd(pokemon: Pokemon): void { - pokemon.scene.queueMessage( + globalScene.queueMessage( i18next.t("battlerTags:helpingHandOnAdd", { - pokemonNameWithAffix: getPokemonNameWithAffix(pokemon.scene.getPokemonById(this.sourceId!) ?? undefined), // TODO: is that bang correct? + pokemonNameWithAffix: getPokemonNameWithAffix(globalScene.getPokemonById(this.sourceId!) ?? undefined), // TODO: is that bang correct? pokemonName: getPokemonNameWithAffix(pokemon) }) ); @@ -1106,9 +1109,8 @@ export class IngrainTag extends TrappedTag { const ret = lapseType !== BattlerTagLapseType.CUSTOM || super.lapse(pokemon, lapseType); if (ret) { - pokemon.scene.unshiftPhase( + globalScene.unshiftPhase( new PokemonHealPhase( - pokemon.scene, pokemon.getBattlerIndex(), toDmgValue(pokemon.getMaxHp() / 16), i18next.t("battlerTags:ingrainLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }), @@ -1142,7 +1144,7 @@ export class OctolockTag extends TrappedTag { const shouldLapse = lapseType !== BattlerTagLapseType.CUSTOM || super.lapse(pokemon, lapseType); if (shouldLapse) { - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), false, [ Stat.DEF, Stat.SPDEF ], -1)); + globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), false, [ Stat.DEF, Stat.SPDEF ], -1)); return true; } @@ -1158,16 +1160,15 @@ export class AquaRingTag extends BattlerTag { onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - pokemon.scene.queueMessage(i18next.t("battlerTags:aquaRingOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("battlerTags:aquaRingOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { const ret = lapseType !== BattlerTagLapseType.CUSTOM || super.lapse(pokemon, lapseType); if (ret) { - pokemon.scene.unshiftPhase( + globalScene.unshiftPhase( new PokemonHealPhase( - pokemon.scene, pokemon.getBattlerIndex(), toDmgValue(pokemon.getMaxHp() / 16), i18next.t("battlerTags:aquaRingLapse", { @@ -1206,13 +1207,13 @@ export class DrowsyTag extends BattlerTag { } canAdd(pokemon: Pokemon): boolean { - return pokemon.scene.arena.terrain?.terrainType !== TerrainType.ELECTRIC || !pokemon.isGrounded(); + return globalScene.arena.terrain?.terrainType !== TerrainType.ELECTRIC || !pokemon.isGrounded(); } onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - pokemon.scene.queueMessage(i18next.t("battlerTags:drowsyOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("battlerTags:drowsyOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { @@ -1255,13 +1256,13 @@ export abstract class DamagingTrapTag extends TrappedTag { const ret = super.lapse(pokemon, lapseType); if (ret) { - pokemon.scene.queueMessage( + globalScene.queueMessage( i18next.t("battlerTags:damagingTrapLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: this.getMoveName() }) ); - pokemon.scene.unshiftPhase(new CommonAnimPhase(pokemon.scene, pokemon.getBattlerIndex(), undefined, this.commonAnim)); + globalScene.unshiftPhase(new CommonAnimPhase(pokemon.getBattlerIndex(), undefined, this.commonAnim)); const cancelled = new BooleanHolder(false); applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); @@ -1283,7 +1284,7 @@ export class BindTag extends DamagingTrapTag { getTrapMessage(pokemon: Pokemon): string { return i18next.t("battlerTags:bindOnTrap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - sourcePokemonName: getPokemonNameWithAffix(pokemon.scene.getPokemonById(this.sourceId!) ?? undefined), // TODO: is that bang correct? + sourcePokemonName: getPokemonNameWithAffix(globalScene.getPokemonById(this.sourceId!) ?? undefined), // TODO: is that bang correct? moveName: this.getMoveName() }); } @@ -1297,7 +1298,7 @@ export class WrapTag extends DamagingTrapTag { getTrapMessage(pokemon: Pokemon): string { return i18next.t("battlerTags:wrapOnTrap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - sourcePokemonName: getPokemonNameWithAffix(pokemon.scene.getPokemonById(this.sourceId!) ?? undefined), // TODO: is that bang correct? + sourcePokemonName: getPokemonNameWithAffix(globalScene.getPokemonById(this.sourceId!) ?? undefined), // TODO: is that bang correct? }); } } @@ -1331,7 +1332,7 @@ export class ClampTag extends DamagingTrapTag { getTrapMessage(pokemon: Pokemon): string { return i18next.t("battlerTags:clampOnTrap", { - sourcePokemonNameWithAffix: getPokemonNameWithAffix(pokemon.scene.getPokemonById(this.sourceId!) ?? undefined), // TODO: is that bang correct? + sourcePokemonNameWithAffix: getPokemonNameWithAffix(globalScene.getPokemonById(this.sourceId!) ?? undefined), // TODO: is that bang correct? pokemonName: getPokemonNameWithAffix(pokemon), }); } @@ -1378,7 +1379,7 @@ export class ThunderCageTag extends DamagingTrapTag { getTrapMessage(pokemon: Pokemon): string { return i18next.t("battlerTags:thunderCageOnTrap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - sourcePokemonNameWithAffix: getPokemonNameWithAffix(pokemon.scene.getPokemonById(this.sourceId!) ?? undefined), // TODO: is that bang correct? + sourcePokemonNameWithAffix: getPokemonNameWithAffix(globalScene.getPokemonById(this.sourceId!) ?? undefined), // TODO: is that bang correct? }); } } @@ -1391,7 +1392,7 @@ export class InfestationTag extends DamagingTrapTag { getTrapMessage(pokemon: Pokemon): string { return i18next.t("battlerTags:infestationOnTrap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - sourcePokemonNameWithAffix: getPokemonNameWithAffix(pokemon.scene.getPokemonById(this.sourceId!) ?? undefined), // TODO: is that bang correct? + sourcePokemonNameWithAffix: getPokemonNameWithAffix(globalScene.getPokemonById(this.sourceId!) ?? undefined), // TODO: is that bang correct? }); } } @@ -1405,16 +1406,16 @@ export class ProtectedTag extends BattlerTag { onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - pokemon.scene.queueMessage(i18next.t("battlerTags:protectedOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("battlerTags:protectedOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { if (lapseType === BattlerTagLapseType.CUSTOM) { - new CommonBattleAnim(CommonAnim.PROTECT, pokemon).play(pokemon.scene); - pokemon.scene.queueMessage(i18next.t("battlerTags:protectedLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + new CommonBattleAnim(CommonAnim.PROTECT, pokemon).play(); + globalScene.queueMessage(i18next.t("battlerTags:protectedLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); // Stop multi-hit moves early - const effectPhase = pokemon.scene.getCurrentPhase(); + const effectPhase = globalScene.getCurrentPhase(); if (effectPhase instanceof MoveEffectPhase) { effectPhase.stopMultiHit(pokemon); } @@ -1454,7 +1455,7 @@ export class ContactDamageProtectedTag extends ProtectedTag { const ret = super.lapse(pokemon, lapseType); if (lapseType === BattlerTagLapseType.CUSTOM) { - const effectPhase = pokemon.scene.getCurrentPhase(); + const effectPhase = globalScene.getCurrentPhase(); if (effectPhase instanceof MoveEffectPhase && effectPhase.move.getMove().hasFlag(MoveFlags.MAKES_CONTACT)) { const attacker = effectPhase.getPokemon(); if (!attacker.hasAbilityWithAttr(BlockNonDirectDamageAbAttr)) { @@ -1496,10 +1497,10 @@ export class ContactStatStageChangeProtectedTag extends DamageProtectedTag { const ret = super.lapse(pokemon, lapseType); if (lapseType === BattlerTagLapseType.CUSTOM) { - const effectPhase = pokemon.scene.getCurrentPhase(); + const effectPhase = globalScene.getCurrentPhase(); if (effectPhase instanceof MoveEffectPhase && effectPhase.move.getMove().hasFlag(MoveFlags.MAKES_CONTACT)) { const attacker = effectPhase.getPokemon(); - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, attacker.getBattlerIndex(), false, [ this.stat ], this.levels)); + globalScene.unshiftPhase(new StatStageChangePhase(attacker.getBattlerIndex(), false, [ this.stat ], this.levels)); } } @@ -1516,7 +1517,7 @@ export class ContactPoisonProtectedTag extends ProtectedTag { const ret = super.lapse(pokemon, lapseType); if (lapseType === BattlerTagLapseType.CUSTOM) { - const effectPhase = pokemon.scene.getCurrentPhase(); + const effectPhase = globalScene.getCurrentPhase(); if (effectPhase instanceof MoveEffectPhase && effectPhase.move.getMove().hasFlag(MoveFlags.MAKES_CONTACT)) { const attacker = effectPhase.getPokemon(); attacker.trySetStatus(StatusEffect.POISON, true, pokemon); @@ -1540,7 +1541,7 @@ export class ContactBurnProtectedTag extends DamageProtectedTag { const ret = super.lapse(pokemon, lapseType); if (lapseType === BattlerTagLapseType.CUSTOM) { - const effectPhase = pokemon.scene.getCurrentPhase(); + const effectPhase = globalScene.getCurrentPhase(); if (effectPhase instanceof MoveEffectPhase && effectPhase.move.getMove().hasFlag(MoveFlags.MAKES_CONTACT)) { const attacker = effectPhase.getPokemon(); attacker.trySetStatus(StatusEffect.BURN, true); @@ -1564,12 +1565,12 @@ export class EnduringTag extends BattlerTag { onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - pokemon.scene.queueMessage(i18next.t("battlerTags:enduringOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("battlerTags:enduringOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { if (lapseType === BattlerTagLapseType.CUSTOM) { - pokemon.scene.queueMessage(i18next.t("battlerTags:enduringLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("battlerTags:enduringLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); return true; } @@ -1584,7 +1585,7 @@ export class SturdyTag extends BattlerTag { lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { if (lapseType === BattlerTagLapseType.CUSTOM) { - pokemon.scene.queueMessage(i18next.t("battlerTags:sturdyLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("battlerTags:sturdyLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); return true; } @@ -1605,7 +1606,7 @@ export class PerishSongTag extends BattlerTag { const ret = super.lapse(pokemon, lapseType); if (ret) { - pokemon.scene.queueMessage( + globalScene.queueMessage( i18next.t("battlerTags:perishSongLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), turnCount: this.turnCount @@ -1634,7 +1635,7 @@ export class CenterOfAttentionTag extends BattlerTag { /** "Center of Attention" can't be added if an ally is already the Center of Attention. */ canAdd(pokemon: Pokemon): boolean { - const activeTeam = pokemon.isPlayer() ? pokemon.scene.getPlayerField() : pokemon.scene.getEnemyField(); + const activeTeam = pokemon.isPlayer() ? globalScene.getPlayerField() : globalScene.getEnemyField(); return !activeTeam.find(p => p.getTag(BattlerTagType.CENTER_OF_ATTENTION)); } @@ -1642,7 +1643,7 @@ export class CenterOfAttentionTag extends BattlerTag { onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - pokemon.scene.queueMessage(i18next.t("battlerTags:centerOfAttentionOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("battlerTags:centerOfAttentionOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } } @@ -1695,9 +1696,9 @@ export class TruantTag extends AbilityBattlerTag { const lastMove = pokemon.getLastXMoves().find(() => true); if (lastMove && lastMove.move !== Moves.NONE) { - (pokemon.scene.getCurrentPhase() as MovePhase).cancel(); - pokemon.scene.unshiftPhase(new ShowAbilityPhase(pokemon.scene, pokemon.id, passive)); - pokemon.scene.queueMessage(i18next.t("battlerTags:truantLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + (globalScene.getCurrentPhase() as MovePhase).cancel(); + globalScene.unshiftPhase(new ShowAbilityPhase(pokemon.id, passive)); + globalScene.queueMessage(i18next.t("battlerTags:truantLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } return true; @@ -1712,7 +1713,7 @@ export class SlowStartTag extends AbilityBattlerTag { onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - pokemon.scene.queueMessage(i18next.t("battlerTags:slowStartOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }), null, false, null, true); + globalScene.queueMessage(i18next.t("battlerTags:slowStartOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }), null, false, null, true); } lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { @@ -1726,7 +1727,7 @@ export class SlowStartTag extends AbilityBattlerTag { onRemove(pokemon: Pokemon): void { super.onRemove(pokemon); - pokemon.scene.queueMessage(i18next.t("battlerTags:slowStartOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }), null, false, null); + globalScene.queueMessage(i18next.t("battlerTags:slowStartOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }), null, false, null); } } @@ -1752,7 +1753,7 @@ export class HighestStatBoostTag extends AbilityBattlerTag { super.onAdd(pokemon); let highestStat: EffectiveStat; - EFFECTIVE_STATS.map(s => pokemon.getEffectiveStat(s)).reduce((highestValue: number, value: number, i: number) => { + EFFECTIVE_STATS.map(s => pokemon.getEffectiveStat(s, undefined, undefined, undefined, undefined, undefined, undefined, true)).reduce((highestValue: number, value: number, i: number) => { if (value > highestValue) { highestStat = EFFECTIVE_STATS[i]; return value; @@ -1763,22 +1764,14 @@ export class HighestStatBoostTag extends AbilityBattlerTag { highestStat = highestStat!; // tell TS compiler it's defined! this.stat = highestStat; - switch (this.stat) { - case Stat.SPD: - this.multiplier = 1.5; - break; - default: - this.multiplier = 1.3; - break; - } - - pokemon.scene.queueMessage(i18next.t("battlerTags:highestStatBoostOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), statName: i18next.t(getStatKey(highestStat)) }), null, false, null, true); + this.multiplier = this.stat === Stat.SPD ? 1.5 : 1.3; + globalScene.queueMessage(i18next.t("battlerTags:highestStatBoostOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), statName: i18next.t(getStatKey(highestStat)) }), null, false, null, true); } onRemove(pokemon: Pokemon): void { super.onRemove(pokemon); - pokemon.scene.queueMessage(i18next.t("battlerTags:highestStatBoostOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName: allAbilities[this.ability].name })); + globalScene.queueMessage(i18next.t("battlerTags:highestStatBoostOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName: allAbilities[this.ability].name })); } } @@ -1831,7 +1824,7 @@ export class SemiInvulnerableTag extends BattlerTag { onRemove(pokemon: Pokemon): void { // Wait 2 frames before setting visible for battle animations that don't immediately show the sprite invisible - pokemon.scene.tweens.addCounter({ + globalScene.tweens.addCounter({ duration: getFrameMs(2), onComplete: () => pokemon.setVisible(true) }); @@ -1871,7 +1864,7 @@ export class FloatingTag extends TypeImmuneTag { super.onAdd(pokemon); if (this.sourceMove === Moves.MAGNET_RISE) { - pokemon.scene.queueMessage(i18next.t("battlerTags:magnetRisenOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("battlerTags:magnetRisenOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } } @@ -1879,7 +1872,7 @@ export class FloatingTag extends TypeImmuneTag { onRemove(pokemon: Pokemon): void { super.onRemove(pokemon); if (this.sourceMove === Moves.MAGNET_RISE) { - pokemon.scene.queueMessage(i18next.t("battlerTags:magnetRisenOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("battlerTags:magnetRisenOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } } } @@ -1921,7 +1914,7 @@ export class CritBoostTag extends BattlerTag { onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - pokemon.scene.queueMessage(i18next.t("battlerTags:critBoostOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("battlerTags:critBoostOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { @@ -1931,7 +1924,7 @@ export class CritBoostTag extends BattlerTag { onRemove(pokemon: Pokemon): void { super.onRemove(pokemon); - pokemon.scene.queueMessage(i18next.t("battlerTags:critBoostOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("battlerTags:critBoostOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } } @@ -1973,15 +1966,15 @@ export class SaltCuredTag extends BattlerTag { onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - pokemon.scene.queueMessage(i18next.t("battlerTags:saltCuredOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); - this.sourceIndex = pokemon.scene.getPokemonById(this.sourceId!)!.getBattlerIndex(); // TODO: are those bangs correct? + globalScene.queueMessage(i18next.t("battlerTags:saltCuredOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + this.sourceIndex = globalScene.getPokemonById(this.sourceId!)!.getBattlerIndex(); // TODO: are those bangs correct? } lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { const ret = lapseType !== BattlerTagLapseType.CUSTOM || super.lapse(pokemon, lapseType); if (ret) { - pokemon.scene.unshiftPhase(new CommonAnimPhase(pokemon.scene, pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.SALT_CURE)); + globalScene.unshiftPhase(new CommonAnimPhase(pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.SALT_CURE)); const cancelled = new BooleanHolder(false); applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); @@ -1990,7 +1983,7 @@ export class SaltCuredTag extends BattlerTag { const pokemonSteelOrWater = pokemon.isOfType(Type.STEEL) || pokemon.isOfType(Type.WATER); pokemon.damageAndUpdate(toDmgValue(pokemonSteelOrWater ? pokemon.getMaxHp() / 4 : pokemon.getMaxHp() / 8)); - pokemon.scene.queueMessage( + globalScene.queueMessage( i18next.t("battlerTags:saltCuredLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: this.getMoveName() @@ -2021,21 +2014,21 @@ export class CursedTag extends BattlerTag { onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - this.sourceIndex = pokemon.scene.getPokemonById(this.sourceId!)!.getBattlerIndex(); // TODO: are those bangs correct? + this.sourceIndex = globalScene.getPokemonById(this.sourceId!)!.getBattlerIndex(); // TODO: are those bangs correct? } lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { const ret = lapseType !== BattlerTagLapseType.CUSTOM || super.lapse(pokemon, lapseType); if (ret) { - pokemon.scene.unshiftPhase(new CommonAnimPhase(pokemon.scene, pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.SALT_CURE)); + globalScene.unshiftPhase(new CommonAnimPhase(pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.SALT_CURE)); const cancelled = new BooleanHolder(false); applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); if (!cancelled.value) { pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 4)); - pokemon.scene.queueMessage(i18next.t("battlerTags:cursedLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("battlerTags:cursedLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } } @@ -2149,7 +2142,7 @@ export class FormBlockDamageTag extends BattlerTag { super.onAdd(pokemon); if (pokemon.formIndex !== 0) { - pokemon.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeManualTrigger); + globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeAbilityTrigger); } } @@ -2161,7 +2154,7 @@ export class FormBlockDamageTag extends BattlerTag { onRemove(pokemon: Pokemon): void { super.onRemove(pokemon); - pokemon.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeManualTrigger); + globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeAbilityTrigger); } } /** Provides the additional weather-based effects of the Ice Face ability */ @@ -2176,7 +2169,7 @@ export class IceFaceBlockDamageTag extends FormBlockDamageTag { * @returns {boolean} True if the tag can be added, false otherwise. */ canAdd(pokemon: Pokemon): boolean { - const weatherType = pokemon.scene.arena.weather?.weatherType; + const weatherType = globalScene.arena.weather?.weatherType; const isWeatherSnowOrHail = weatherType === WeatherType.HAIL || weatherType === WeatherType.SNOW; return super.canAdd(pokemon) || isWeatherSnowOrHail; @@ -2200,16 +2193,14 @@ export class CommandedTag extends BattlerTag { /** Caches the Tatsugiri's form key and sharply boosts the tagged Pokemon's stats */ override onAdd(pokemon: Pokemon): void { - this._tatsugiriFormKey = this.getSourcePokemon(pokemon.scene)?.getFormKey() ?? "curly"; - pokemon.scene.unshiftPhase(new StatStageChangePhase( - pokemon.scene, pokemon.getBattlerIndex(), true, [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ], 2 - )); + this._tatsugiriFormKey = this.getSourcePokemon()?.getFormKey() ?? "curly"; + globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ], 2)); } /** Triggers an {@linkcode PokemonAnimType | animation} of the tagged Pokemon "spitting out" Tatsugiri */ override onRemove(pokemon: Pokemon): void { - if (this.getSourcePokemon(pokemon.scene)?.isActive(true)) { - pokemon.scene.triggerPokemonBattleAnim(pokemon, PokemonAnimType.COMMANDER_REMOVE); + if (this.getSourcePokemon()?.isActive(true)) { + globalScene.triggerPokemonBattleAnim(pokemon, PokemonAnimType.COMMANDER_REMOVE); } } @@ -2271,14 +2262,14 @@ export class StockpilingTag extends BattlerTag { if (this.stockpiledCount < 3) { this.stockpiledCount++; - pokemon.scene.queueMessage(i18next.t("battlerTags:stockpilingOnAdd", { + globalScene.queueMessage(i18next.t("battlerTags:stockpilingOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), stockpiledCount: this.stockpiledCount })); // Attempt to increase DEF and SPDEF by one stage, keeping track of successful changes. - pokemon.scene.unshiftPhase(new StatStageChangePhase( - pokemon.scene, pokemon.getBattlerIndex(), true, + globalScene.unshiftPhase(new StatStageChangePhase( + pokemon.getBattlerIndex(), true, [ Stat.SPDEF, Stat.DEF ], 1, true, false, true, this.onStatStagesChanged )); } @@ -2297,11 +2288,11 @@ export class StockpilingTag extends BattlerTag { const spDefChange = this.statChangeCounts[Stat.SPDEF]; if (defChange) { - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ Stat.DEF ], -defChange, true, false, true)); + globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ Stat.DEF ], -defChange, true, false, true)); } if (spDefChange) { - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ Stat.SPDEF ], -spDefChange, true, false, true)); + globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ Stat.SPDEF ], -spDefChange, true, false, true)); } } } @@ -2320,7 +2311,7 @@ export class GulpMissileTag extends BattlerTag { return true; } - const moveEffectPhase = pokemon.scene.getCurrentPhase(); + const moveEffectPhase = globalScene.getCurrentPhase(); if (moveEffectPhase instanceof MoveEffectPhase) { const attacker = moveEffectPhase.getUserPokemon(); @@ -2340,7 +2331,7 @@ export class GulpMissileTag extends BattlerTag { } if (this.tagType === BattlerTagType.GULP_MISSILE_ARROKUDA) { - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, attacker.getBattlerIndex(), false, [ Stat.DEF ], -1)); + globalScene.unshiftPhase(new StatStageChangePhase(attacker.getBattlerIndex(), false, [ Stat.DEF ], -1)); } else { attacker.trySetStatus(StatusEffect.PARALYSIS, true, pokemon); } @@ -2363,12 +2354,12 @@ export class GulpMissileTag extends BattlerTag { onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - pokemon.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeManualTrigger); + globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeAbilityTrigger); } onRemove(pokemon: Pokemon): void { super.onRemove(pokemon); - pokemon.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeManualTrigger); + globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeAbilityTrigger); } } @@ -2476,7 +2467,7 @@ export class HealBlockTag extends MoveRestrictionBattlerTag { override onRemove(pokemon: Pokemon): void { super.onRemove(pokemon); - pokemon.scene.queueMessage(i18next.t("battle:battlerTagsHealBlockOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }), null, false, null); + globalScene.queueMessage(i18next.t("battle:battlerTagsHealBlockOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }), null, false, null); } } @@ -2495,11 +2486,11 @@ export class TarShotTag extends BattlerTag { * @returns whether the tag is applied */ override canAdd(pokemon: Pokemon): boolean { - return !pokemon.isTerastallized(); + return !pokemon.isTerastallized; } override onAdd(pokemon: Pokemon): void { - pokemon.scene.queueMessage(i18next.t("battlerTags:tarShotOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("battlerTags:tarShotOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } } @@ -2514,7 +2505,7 @@ export class ElectrifiedTag extends BattlerTag { override onAdd(pokemon: Pokemon): void { // "{pokemonNameWithAffix}'s moves have been electrified!" - pokemon.scene.queueMessage(i18next.t("battlerTags:electrifiedOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("battlerTags:electrifiedOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } } @@ -2536,7 +2527,7 @@ export class AutotomizedTag extends BattlerTag { onAdd(pokemon: Pokemon): void { const minWeight = 0.1; if (pokemon.getWeight() > minWeight) { - pokemon.scene.queueMessage(i18next.t("battlerTags:autotomizeOnAdd", { + globalScene.queueMessage(i18next.t("battlerTags:autotomizeOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } @@ -2561,21 +2552,21 @@ export class SubstituteTag extends BattlerTag { /** Is the source Pokemon "in focus," i.e. is it fully visible on the field? */ public sourceInFocus: boolean; - constructor(sourceMove: Moves, sourceId: integer) { + constructor(sourceMove: Moves, sourceId: number) { super(BattlerTagType.SUBSTITUTE, [ BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.AFTER_MOVE, BattlerTagLapseType.HIT ], 0, sourceMove, sourceId, true); } /** Sets the Substitute's HP and queues an on-add battle animation that initializes the Substitute's sprite. */ onAdd(pokemon: Pokemon): void { - this.hp = Math.floor(pokemon.scene.getPokemonById(this.sourceId!)!.getMaxHp() / 4); + this.hp = Math.floor(globalScene.getPokemonById(this.sourceId!)!.getMaxHp() / 4); this.sourceInFocus = false; // Queue battle animation and message - pokemon.scene.triggerPokemonBattleAnim(pokemon, PokemonAnimType.SUBSTITUTE_ADD); + globalScene.triggerPokemonBattleAnim(pokemon, PokemonAnimType.SUBSTITUTE_ADD); if (this.sourceMove === Moves.SHED_TAIL) { - pokemon.scene.queueMessage(i18next.t("battlerTags:shedTailOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }), 1500); + globalScene.queueMessage(i18next.t("battlerTags:shedTailOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }), 1500); } else { - pokemon.scene.queueMessage(i18next.t("battlerTags:substituteOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }), 1500); + globalScene.queueMessage(i18next.t("battlerTags:substituteOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }), 1500); } // Remove any binding effects from the user @@ -2586,11 +2577,11 @@ export class SubstituteTag extends BattlerTag { onRemove(pokemon: Pokemon): void { // Only play the animation if the cause of removal isn't from the source's own move if (!this.sourceInFocus) { - pokemon.scene.triggerPokemonBattleAnim(pokemon, PokemonAnimType.SUBSTITUTE_REMOVE, [ this.sprite ]); + globalScene.triggerPokemonBattleAnim(pokemon, PokemonAnimType.SUBSTITUTE_REMOVE, [ this.sprite ]); } else { this.sprite.destroy(); } - pokemon.scene.queueMessage(i18next.t("battlerTags:substituteOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("battlerTags:substituteOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { @@ -2610,19 +2601,19 @@ export class SubstituteTag extends BattlerTag { /** Triggers an animation that brings the Pokemon into focus before it uses a move */ onPreMove(pokemon: Pokemon): void { - pokemon.scene.triggerPokemonBattleAnim(pokemon, PokemonAnimType.SUBSTITUTE_PRE_MOVE, [ this.sprite ]); + globalScene.triggerPokemonBattleAnim(pokemon, PokemonAnimType.SUBSTITUTE_PRE_MOVE, [ this.sprite ]); this.sourceInFocus = true; } /** Triggers an animation that brings the Pokemon out of focus after it uses a move */ onAfterMove(pokemon: Pokemon): void { - pokemon.scene.triggerPokemonBattleAnim(pokemon, PokemonAnimType.SUBSTITUTE_POST_MOVE, [ this.sprite ]); + globalScene.triggerPokemonBattleAnim(pokemon, PokemonAnimType.SUBSTITUTE_POST_MOVE, [ this.sprite ]); this.sourceInFocus = false; } /** If the Substitute redirects damage, queue a message to indicate it. */ onHit(pokemon: Pokemon): void { - const moveEffectPhase = pokemon.scene.getCurrentPhase(); + const moveEffectPhase = globalScene.getCurrentPhase(); if (moveEffectPhase instanceof MoveEffectPhase) { const attacker = moveEffectPhase.getUserPokemon(); if (!attacker) { @@ -2632,7 +2623,7 @@ export class SubstituteTag extends BattlerTag { const firstHit = (attacker.turnData.hitCount === attacker.turnData.hitsLeft); if (firstHit && move.hitsSubstitute(attacker, pokemon)) { - pokemon.scene.queueMessage(i18next.t("battlerTags:substituteOnHit", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("battlerTags:substituteOnHit", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } } } @@ -2704,7 +2695,7 @@ export class TormentTag extends MoveRestrictionBattlerTag { */ override onAdd(pokemon: Pokemon) { super.onAdd(pokemon); - pokemon.scene.queueMessage(i18next.t("battlerTags:tormentOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }), 1500); + globalScene.queueMessage(i18next.t("battlerTags:tormentOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }), 1500); } /** @@ -2758,7 +2749,13 @@ export class TauntTag extends MoveRestrictionBattlerTag { override onAdd(pokemon: Pokemon) { super.onAdd(pokemon); - pokemon.scene.queueMessage(i18next.t("battlerTags:tauntOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }), 1500); + globalScene.queueMessage(i18next.t("battlerTags:tauntOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }), 1500); + } + + public override onRemove(pokemon: Pokemon): void { + super.onRemove(pokemon); + + globalScene.queueMessage(i18next.t("battlerTags:tauntOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } /** @@ -2796,7 +2793,7 @@ export class ImprisonTag extends MoveRestrictionBattlerTag { * @returns `true` if the source is still active */ public override lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { - const source = this.getSourcePokemon(pokemon.scene); + const source = this.getSourcePokemon(); if (source) { if (lapseType === BattlerTagLapseType.PRE_MOVE) { return super.lapse(pokemon, lapseType) && source.isActive(true); @@ -2814,7 +2811,7 @@ export class ImprisonTag extends MoveRestrictionBattlerTag { * @returns `false` if either condition is not met */ public override isMoveRestricted(move: Moves, user: Pokemon): boolean { - const source = this.getSourcePokemon(user.scene); + const source = this.getSourcePokemon(); if (source) { const sourceMoveset = source.getMoveset().map(m => m!.moveId); return sourceMoveset?.includes(move) && source.isActive(true); @@ -2847,7 +2844,7 @@ export class SyrupBombTag extends BattlerTag { */ override onAdd(pokemon: Pokemon) { super.onAdd(pokemon); - pokemon.scene.queueMessage(i18next.t("battlerTags:syrupBombOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("battlerTags:syrupBombOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } /** @@ -2857,13 +2854,13 @@ export class SyrupBombTag extends BattlerTag { * @returns `true` if the `turnCount` is still greater than `0`; `false` if the `turnCount` is `0` or the target or source Pokemon has been removed from the field */ override lapse(pokemon: Pokemon, _lapseType: BattlerTagLapseType): boolean { - if (this.sourceId && !pokemon.scene.getPokemonById(this.sourceId)?.isActive(true)) { + if (this.sourceId && !globalScene.getPokemonById(this.sourceId)?.isActive(true)) { return false; } // Custom message in lieu of an animation in mainline - pokemon.scene.queueMessage(i18next.t("battlerTags:syrupBombLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); - pokemon.scene.unshiftPhase(new StatStageChangePhase( - pokemon.scene, pokemon.getBattlerIndex(), true, + globalScene.queueMessage(i18next.t("battlerTags:syrupBombLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.unshiftPhase(new StatStageChangePhase( + pokemon.getBattlerIndex(), true, [ Stat.SPD ], -1, true, false, true )); return --this.turnCount > 0; @@ -2873,7 +2870,7 @@ export class SyrupBombTag extends BattlerTag { /** * Telekinesis raises the target into the air for three turns and causes all moves used against the target (aside from OHKO moves) to hit the target unless the target is in a semi-invulnerable state from Fly/Dig. * The first effect is provided by {@linkcode FloatingTag}, the accuracy-bypass effect is provided by TelekinesisTag - * The effects of Telekinesis can be baton passed to a teammate. Unlike the mainline games, Telekinesis can be baton-passed to Mega Gengar. + * The effects of Telekinesis can be baton passed to a teammate. * @see {@link https://bulbapedia.bulbagarden.net/wiki/Telekinesis_(move) | Moves.TELEKINESIS} */ export class TelekinesisTag extends BattlerTag { @@ -2882,7 +2879,7 @@ export class TelekinesisTag extends BattlerTag { } override onAdd(pokemon: Pokemon) { - pokemon.scene.queueMessage(i18next.t("battlerTags:telekinesisOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("battlerTags:telekinesisOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } } @@ -2897,12 +2894,12 @@ export class PowerTrickTag extends BattlerTag { onAdd(pokemon: Pokemon): void { this.swapStat(pokemon); - pokemon.scene.queueMessage(i18next.t("battlerTags:powerTrickActive", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("battlerTags:powerTrickActive", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } onRemove(pokemon: Pokemon): void { this.swapStat(pokemon); - pokemon.scene.queueMessage(i18next.t("battlerTags:powerTrickActive", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("battlerTags:powerTrickActive", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } /** @@ -2936,7 +2933,7 @@ export class GrudgeTag extends BattlerTag { onAdd(pokemon: Pokemon) { super.onAdd(pokemon); - pokemon.scene.queueMessage(i18next.t("battlerTags:grudgeOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("battlerTags:grudgeOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } /** @@ -2953,7 +2950,7 @@ export class GrudgeTag extends BattlerTag { const lastMoveData = sourcePokemon.getMoveset().find(m => m?.moveId === lastMove.move); if (lastMoveData && lastMove.move !== Moves.STRUGGLE) { lastMoveData.ppUsed = lastMoveData.getMovePp(); - pokemon.scene.queueMessage(i18next.t("battlerTags:grudgeLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: lastMoveData.getName() })); + globalScene.queueMessage(i18next.t("battlerTags:grudgeLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: lastMoveData.getName() })); } } return false; @@ -2977,7 +2974,7 @@ export class PsychoShiftTag extends BattlerTag { */ override lapse(pokemon: Pokemon, _lapseType: BattlerTagLapseType): boolean { if (pokemon.status && pokemon.isActive(true)) { - pokemon.scene.queueMessage(getStatusEffectHealText(pokemon.status.effect, getPokemonNameWithAffix(pokemon))); + globalScene.queueMessage(getStatusEffectHealText(pokemon.status.effect, getPokemonNameWithAffix(pokemon))); pokemon.resetStatus(); pokemon.updateInfo(); } @@ -2985,6 +2982,24 @@ export class PsychoShiftTag extends BattlerTag { } } +/** + * Tag associated with the move Magic Coat. + */ +export class MagicCoatTag extends BattlerTag { + constructor() { + super(BattlerTagType.MAGIC_COAT, BattlerTagLapseType.TURN_END, 1, Moves.MAGIC_COAT); + } + + /** + * Queues the "[PokemonName] shrouded itself with Magic Coat" message when the tag is added. + * @param pokemon - The target {@linkcode Pokemon} + */ + override onAdd(pokemon: Pokemon) { + // "{pokemonNameWithAffix} shrouded itself with Magic Coat!" + globalScene.queueMessage(i18next.t("battlerTags:magicCoatOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + } +} + /** * Retrieves a {@linkcode BattlerTag} based on the provided tag type, turn count, source move, and source ID. * @param sourceId - The ID of the pokemon adding the tag @@ -3174,6 +3189,8 @@ export function getBattlerTag(tagType: BattlerTagType, turnCount: number, source return new GrudgeTag(); case BattlerTagType.PSYCHO_SHIFT: return new PsychoShiftTag(); + case BattlerTagType.MAGIC_COAT: + return new MagicCoatTag(); case BattlerTagType.NONE: default: return new BattlerTag(tagType, BattlerTagLapseType.CUSTOM, turnCount, sourceMove, sourceId); @@ -3199,7 +3216,7 @@ export function loadBattlerTag(source: BattlerTag | any): BattlerTag { * corresponding {@linkcode Move} and user {@linkcode Pokemon} */ function getMoveEffectPhaseData(pokemon: Pokemon): {phase: MoveEffectPhase, attacker: Pokemon, move: Move} | null { - const phase = pokemon.scene.getCurrentPhase(); + const phase = globalScene.getCurrentPhase(); if (phase instanceof MoveEffectPhase) { return { phase : phase, diff --git a/src/data/berry.ts b/src/data/berry.ts index dfd6a7ddcf0..06f52b2f38b 100644 --- a/src/data/berry.ts +++ b/src/data/berry.ts @@ -1,5 +1,6 @@ import { getPokemonNameWithAffix } from "../messages"; -import Pokemon, { HitResult } from "../field/pokemon"; +import type Pokemon from "../field/pokemon"; +import { HitResult } from "../field/pokemon"; import { getStatusEffectHealText } from "./status-effect"; import * as Utils from "../utils"; import { DoubleBerryEffectAbAttr, PostItemLostAbAttr, ReduceBerryUseThresholdAbAttr, applyAbAttrs, applyPostItemLostAbAttrs } from "./ability"; @@ -9,6 +10,7 @@ import { BerryType } from "#enums/berry-type"; import { Stat, type BattleStat } from "#app/enums/stat"; import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; +import { globalScene } from "#app/global-scene"; export function getBerryName(berryType: BerryType): string { return i18next.t(`berry:${BerryType[berryType]}.name`); @@ -73,7 +75,7 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { } const hpHealed = new Utils.NumberHolder(Utils.toDmgValue(pokemon.getMaxHp() / 4)); applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, false, hpHealed); - pokemon.scene.unshiftPhase(new PokemonHealPhase(pokemon.scene, pokemon.getBattlerIndex(), + globalScene.unshiftPhase(new PokemonHealPhase(pokemon.getBattlerIndex(), hpHealed.value, i18next.t("battle:hpHealBerry", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), berryName: getBerryName(berryType) }), true)); applyPostItemLostAbAttrs(PostItemLostAbAttr, berryOwner ?? pokemon, false); }; @@ -83,7 +85,7 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { pokemon.battleData.berriesEaten.push(berryType); } if (pokemon.status) { - pokemon.scene.queueMessage(getStatusEffectHealText(pokemon.status.effect, getPokemonNameWithAffix(pokemon))); + globalScene.queueMessage(getStatusEffectHealText(pokemon.status.effect, getPokemonNameWithAffix(pokemon))); } pokemon.resetStatus(true, true); pokemon.updateInfo(); @@ -102,7 +104,7 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { const stat: BattleStat = berryType - BerryType.ENIGMA; const statStages = new Utils.NumberHolder(1); applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, false, statStages); - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ stat ], statStages.value)); + globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ stat ], statStages.value)); applyPostItemLostAbAttrs(PostItemLostAbAttr, berryOwner ?? pokemon, false); }; case BerryType.LANSAT: @@ -121,7 +123,7 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { const randStat = Utils.randSeedInt(Stat.SPD, Stat.ATK); const stages = new Utils.NumberHolder(2); applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, false, stages); - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ randStat ], stages.value)); + globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ randStat ], stages.value)); applyPostItemLostAbAttrs(PostItemLostAbAttr, berryOwner ?? pokemon, false); }; case BerryType.LEPPA: @@ -132,7 +134,7 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { const ppRestoreMove = pokemon.getMoveset().find(m => !m?.getPpRatio()) ? pokemon.getMoveset().find(m => !m?.getPpRatio()) : pokemon.getMoveset().find(m => m!.getPpRatio() < 1); // TODO: is this bang correct? if (ppRestoreMove !== undefined) { ppRestoreMove!.ppUsed = Math.max(ppRestoreMove!.ppUsed - 10, 0); - pokemon.scene.queueMessage(i18next.t("battle:ppHealBerry", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: ppRestoreMove!.getName(), berryName: getBerryName(berryType) })); + globalScene.queueMessage(i18next.t("battle:ppHealBerry", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: ppRestoreMove!.getName(), berryName: getBerryName(berryType) })); applyPostItemLostAbAttrs(PostItemLostAbAttr, berryOwner ?? pokemon, false); } }; diff --git a/src/data/challenge.ts b/src/data/challenge.ts index 4301ea7b375..30c2c9a6ce4 100644 --- a/src/data/challenge.ts +++ b/src/data/challenge.ts @@ -1,21 +1,26 @@ import * as Utils from "#app/utils"; import i18next from "i18next"; -import { defaultStarterSpecies, DexAttrProps, GameData } from "#app/system/game-data"; -import PokemonSpecies, { getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species"; +import type { DexAttrProps, GameData } from "#app/system/game-data"; +import { defaultStarterSpecies } from "#app/system/game-data"; +import type PokemonSpecies from "#app/data/pokemon-species"; +import { getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species"; import { speciesStarterCosts } from "#app/data/balance/starters"; -import Pokemon, { PokemonMove } from "#app/field/pokemon"; -import { BattleType, FixedBattleConfig } from "#app/battle"; +import type Pokemon from "#app/field/pokemon"; +import { PokemonMove } from "#app/field/pokemon"; +import type { FixedBattleConfig } from "#app/battle"; +import { ClassicFixedBossWaves, BattleType, getRandomTrainerFunc } from "#app/battle"; import Trainer, { TrainerVariant } from "#app/field/trainer"; -import { GameMode } from "#app/game-mode"; +import type { GameMode } from "#app/game-mode"; import { Type } from "#enums/type"; import { Challenges } from "#enums/challenges"; import { Species } from "#enums/species"; import { TrainerType } from "#enums/trainer-type"; import { Nature } from "#enums/nature"; -import { Moves } from "#enums/moves"; +import type { Moves } from "#enums/moves"; import { TypeColor, TypeShadow } from "#enums/color"; import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import { pokemonFormChanges } from "#app/data/pokemon-forms"; +import { ModifierTier } from "#app/modifier/modifier-tier"; /** A constant for the default max cost of the starting party before a run */ const DEFAULT_PARTY_MAX_COST = 10; @@ -84,6 +89,11 @@ export enum ChallengeType { * Modifies what weight AI pokemon have when generating movesets. UNIMPLEMENTED. */ MOVE_WEIGHT, + /** + * Modifies what the pokemon stats for Flip Stat Mode. + */ + FLIP_STAT, + } /** @@ -105,17 +115,17 @@ export enum MoveSourceType { export abstract class Challenge { public id: Challenges; // The id of the challenge - public value: integer; // The "strength" of the challenge, all challenges have a numerical value. - public maxValue: integer; // The maximum strength of the challenge. - public severity: integer; // The current severity of the challenge. Some challenges have multiple severities in addition to strength. - public maxSeverity: integer; // The maximum severity of the challenge. + public value: number; // The "strength" of the challenge, all challenges have a numerical value. + public maxValue: number; // The maximum strength of the challenge. + public severity: number; // The current severity of the challenge. Some challenges have multiple severities in addition to strength. + public maxSeverity: number; // The maximum severity of the challenge. public conditions: ChallengeCondition[]; /** * @param id {@link Challenges} The enum value for the challenge */ - constructor(id: Challenges, maxValue: integer = Number.MAX_SAFE_INTEGER) { + constructor(id: Challenges, maxValue: number = Number.MAX_SAFE_INTEGER) { this.id = id; this.value = 0; @@ -170,7 +180,7 @@ export abstract class Challenge { /** * Returns the textual representation of a challenge's current value. - * @param overrideValue {@link integer} The value to check for. If undefined, gets the current value. + * @param overrideValue {@link number} The value to check for. If undefined, gets the current value. * @returns {@link string} The localised name for the current value. */ getValue(overrideValue?: number): string { @@ -180,7 +190,7 @@ export abstract class Challenge { /** * Returns the description of a challenge's current value. - * @param overrideValue {@link integer} The value to check for. If undefined, gets the current value. + * @param overrideValue {@link number} The value to check for. If undefined, gets the current value. * @returns {@link string} The localised description for the current value. */ getDescription(overrideValue?: number): string { @@ -247,7 +257,7 @@ export abstract class Challenge { * Gets the "difficulty" value of this challenge. * @returns {@link integer} The difficulty value. */ - getDifficulty(): integer { + getDifficulty(): number { return this.value; } @@ -255,7 +265,7 @@ export abstract class Challenge { * Gets the minimum difficulty added by this challenge. * @returns {@link integer} The difficulty value. */ - getMinDifficulty(): integer { + getMinDifficulty(): number { return 0; } @@ -339,23 +349,23 @@ export abstract class Challenge { /** * An apply function for AI_LEVEL challenges. Derived classes should alter this. - * @param level {@link Utils.IntegerHolder} The generated level. + * @param level {@link Utils.NumberHolder} The generated level. * @param levelCap {@link Number} The current level cap. * @param isTrainer {@link Boolean} Whether this is a trainer pokemon. * @param isBoss {@link Boolean} Whether this is a non-trainer boss pokemon. * @returns {@link boolean} Whether this function did anything. */ - applyLevelChange(level: Utils.IntegerHolder, levelCap: number, isTrainer: boolean, isBoss: boolean): boolean { + applyLevelChange(level: Utils.NumberHolder, levelCap: number, isTrainer: boolean, isBoss: boolean): boolean { return false; } /** * An apply function for AI_MOVE_SLOTS challenges. Derived classes should alter this. * @param pokemon {@link Pokemon} The pokemon that is being considered. - * @param moveSlots {@link Utils.IntegerHolder} The amount of move slots. + * @param moveSlots {@link Utils.NumberHolder} The amount of move slots. * @returns {@link boolean} Whether this function did anything. */ - applyMoveSlot(pokemon: Pokemon, moveSlots: Utils.IntegerHolder): boolean { + applyMoveSlot(pokemon: Pokemon, moveSlots: Utils.NumberHolder): boolean { return false; } @@ -383,10 +393,10 @@ export abstract class Challenge { * @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 Moves} The move in question. - * @param level {@link Utils.IntegerHolder} The level threshold for access. + * @param level {@link Utils.NumberHolder} The level threshold for access. * @returns {@link boolean} Whether this function did anything. */ - applyMoveAccessLevel(pokemon: Pokemon, moveSource: MoveSourceType, move: Moves, level: Utils.IntegerHolder): boolean { + applyMoveAccessLevel(pokemon: Pokemon, moveSource: MoveSourceType, move: Moves, level: Utils.NumberHolder): boolean { return false; } @@ -395,10 +405,20 @@ export abstract class Challenge { * @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 Moves} The move in question. - * @param weight {@link Utils.IntegerHolder} The base weight of the move + * @param weight {@link Utils.NumberHolder} The base weight of the move * @returns {@link boolean} Whether this function did anything. */ - applyMoveWeight(pokemon: Pokemon, moveSource: MoveSourceType, move: Moves, level: Utils.IntegerHolder): boolean { + applyMoveWeight(pokemon: Pokemon, moveSource: MoveSourceType, move: Moves, level: Utils.NumberHolder): boolean { + return false; + } + + /** + * An apply function for FlipStats. Derived classes should alter this. + * @param pokemon {@link Pokemon} What pokemon would learn the move. + * @param baseStats What are the stats to flip. + * @returns {@link boolean} Whether this function did anything. + */ + applyFlipStat(pokemon: Pokemon, baseStats: number[]) { return false; } } @@ -436,8 +456,8 @@ export class SingleGenerationChallenge extends Challenge { } applyPokemonInBattle(pokemon: Pokemon, valid: Utils.BooleanHolder): boolean { - const baseGeneration = pokemon.species.speciesId === Species.VICTINI ? 5 : getPokemonSpecies(pokemon.species.speciesId).generation; - const fusionGeneration = pokemon.isFusion() ? pokemon.fusionSpecies?.speciesId === Species.VICTINI ? 5 : getPokemonSpecies(pokemon.fusionSpecies!.speciesId).generation : 0; // TODO: is the bang on fusionSpecies correct? + const baseGeneration = getPokemonSpecies(pokemon.species.speciesId).generation; + const fusionGeneration = pokemon.isFusion() ? getPokemonSpecies(pokemon.fusionSpecies!.speciesId).generation : 0; // TODO: is the bang on fusionSpecies correct? if (pokemon.isPlayer() && (baseGeneration !== this.value || (pokemon.isFusion() && fusionGeneration !== this.value))) { valid.value = false; return true; @@ -445,30 +465,64 @@ export class SingleGenerationChallenge extends Challenge { return false; } - applyFixedBattle(waveIndex: Number, battleConfig: FixedBattleConfig): boolean { - let trainerTypes: TrainerType[] = []; + applyFixedBattle(waveIndex: number, battleConfig: FixedBattleConfig): boolean { + let trainerTypes: (TrainerType | TrainerType[])[] = []; + const evilTeamWaves: number[] = [ ClassicFixedBossWaves.EVIL_GRUNT_1, ClassicFixedBossWaves.EVIL_GRUNT_2, ClassicFixedBossWaves.EVIL_GRUNT_3, ClassicFixedBossWaves.EVIL_ADMIN_1, ClassicFixedBossWaves.EVIL_GRUNT_4, ClassicFixedBossWaves.EVIL_ADMIN_2, ClassicFixedBossWaves.EVIL_BOSS_1, ClassicFixedBossWaves.EVIL_BOSS_2 ]; + const evilTeamGrunts = [[ TrainerType.ROCKET_GRUNT ], [ TrainerType.ROCKET_GRUNT ], [ TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT ], [ TrainerType.GALACTIC_GRUNT ], [ TrainerType.PLASMA_GRUNT ], [ TrainerType.FLARE_GRUNT ], [ TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT ], [ TrainerType.MACRO_GRUNT ], [ TrainerType.STAR_GRUNT ]]; + const evilTeamAdmins = [[ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ], [ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ], [[ TrainerType.TABITHA, TrainerType.COURTNEY ], [ TrainerType.MATT, TrainerType.SHELLY ]], [ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ], [ TrainerType.ZINZOLIN, TrainerType.COLRESS ], [ TrainerType.XEROSIC, TrainerType.BRYONY ], [ TrainerType.FABA, TrainerType.PLUMERIA ], [ TrainerType.OLEANA ], [ TrainerType.GIACOMO, TrainerType.MELA, TrainerType.ATTICUS, TrainerType.ORTEGA, TrainerType.ERI ]]; + const evilTeamBosses = [[ TrainerType.ROCKET_BOSS_GIOVANNI_1 ], [ TrainerType.ROCKET_BOSS_GIOVANNI_1 ], [ TrainerType.MAXIE, TrainerType.ARCHIE ], [ TrainerType.CYRUS ], [ TrainerType.GHETSIS ], [ TrainerType.LYSANDRE ], [ TrainerType.LUSAMINE, TrainerType.GUZMA ], [ TrainerType.ROSE ], [ TrainerType.PENNY ]]; + const evilTeamBossRematches = [[ TrainerType.ROCKET_BOSS_GIOVANNI_2 ], [ TrainerType.ROCKET_BOSS_GIOVANNI_2 ], [ TrainerType.MAXIE_2, TrainerType.ARCHIE_2 ], [ TrainerType.CYRUS_2 ], [ TrainerType.GHETSIS_2 ], [ TrainerType.LYSANDRE_2 ], [ TrainerType.LUSAMINE_2, TrainerType.GUZMA_2 ], [ TrainerType.ROSE_2 ], [ TrainerType.PENNY_2 ]]; switch (waveIndex) { - case 182: + case ClassicFixedBossWaves.EVIL_GRUNT_1: + trainerTypes = evilTeamGrunts[this.value - 1]; + battleConfig.setBattleType(BattleType.TRAINER).setGetTrainerFunc(getRandomTrainerFunc(trainerTypes, true)); + return true; + case ClassicFixedBossWaves.EVIL_GRUNT_2: + case ClassicFixedBossWaves.EVIL_GRUNT_3: + case ClassicFixedBossWaves.EVIL_GRUNT_4: + trainerTypes = evilTeamGrunts[this.value - 1]; + break; + case ClassicFixedBossWaves.EVIL_ADMIN_1: + case ClassicFixedBossWaves.EVIL_ADMIN_2: + trainerTypes = evilTeamAdmins[this.value - 1]; + break; + case ClassicFixedBossWaves.EVIL_BOSS_1: + trainerTypes = evilTeamBosses[this.value - 1]; + battleConfig.setBattleType(BattleType.TRAINER).setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1).setGetTrainerFunc(getRandomTrainerFunc(trainerTypes, true)) + .setCustomModifierRewards({ guaranteedModifierTiers: [ ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.ULTRA ], allowLuckUpgrades: false }); + return true; + case ClassicFixedBossWaves.EVIL_BOSS_2: + trainerTypes = evilTeamBossRematches[this.value - 1]; + battleConfig.setBattleType(BattleType.TRAINER).setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1).setGetTrainerFunc(getRandomTrainerFunc(trainerTypes, true)) + .setCustomModifierRewards({ guaranteedModifierTiers: [ ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.ULTRA ], allowLuckUpgrades: false }); + return true; + case ClassicFixedBossWaves.ELITE_FOUR_1: trainerTypes = [ TrainerType.LORELEI, TrainerType.WILL, TrainerType.SIDNEY, TrainerType.AARON, TrainerType.SHAUNTAL, TrainerType.MALVA, Utils.randSeedItem([ TrainerType.HALA, TrainerType.MOLAYNE ]), TrainerType.MARNIE_ELITE, TrainerType.RIKA ]; break; - case 184: + case ClassicFixedBossWaves.ELITE_FOUR_2: trainerTypes = [ TrainerType.BRUNO, TrainerType.KOGA, TrainerType.PHOEBE, TrainerType.BERTHA, TrainerType.MARSHAL, TrainerType.SIEBOLD, TrainerType.OLIVIA, TrainerType.NESSA_ELITE, TrainerType.POPPY ]; break; - case 186: + case ClassicFixedBossWaves.ELITE_FOUR_3: trainerTypes = [ TrainerType.AGATHA, TrainerType.BRUNO, TrainerType.GLACIA, TrainerType.FLINT, TrainerType.GRIMSLEY, TrainerType.WIKSTROM, TrainerType.ACEROLA, Utils.randSeedItem([ TrainerType.BEA_ELITE, TrainerType.ALLISTER_ELITE ]), TrainerType.LARRY_ELITE ]; break; - case 188: + case ClassicFixedBossWaves.ELITE_FOUR_4: trainerTypes = [ TrainerType.LANCE, TrainerType.KAREN, TrainerType.DRAKE, TrainerType.LUCIAN, TrainerType.CAITLIN, TrainerType.DRASNA, TrainerType.KAHILI, TrainerType.RAIHAN_ELITE, TrainerType.HASSEL ]; break; - case 190: - trainerTypes = [ TrainerType.BLUE, Utils.randSeedItem([ TrainerType.RED, TrainerType.LANCE_CHAMPION ]), Utils.randSeedItem([ TrainerType.STEVEN, TrainerType.WALLACE ]), TrainerType.CYNTHIA, Utils.randSeedItem([ TrainerType.ALDER, TrainerType.IRIS ]), TrainerType.DIANTHA, TrainerType.HAU, TrainerType.LEON, Utils.randSeedItem([ TrainerType.GEETA, TrainerType.NEMONA ]) ]; + case ClassicFixedBossWaves.CHAMPION: + trainerTypes = [ TrainerType.BLUE, Utils.randSeedItem([ TrainerType.RED, TrainerType.LANCE_CHAMPION ]), Utils.randSeedItem([ TrainerType.STEVEN, TrainerType.WALLACE ]), TrainerType.CYNTHIA, Utils.randSeedItem([ TrainerType.ALDER, TrainerType.IRIS ]), TrainerType.DIANTHA, Utils.randSeedItem([ TrainerType.KUKUI, TrainerType.HAU ]), Utils.randSeedItem([ TrainerType.LEON, TrainerType.MUSTARD ]), Utils.randSeedItem([ TrainerType.GEETA, TrainerType.NEMONA ]) ]; break; } if (trainerTypes.length === 0) { return false; - } else { - battleConfig.setBattleType(BattleType.TRAINER).setGetTrainerFunc(scene => new Trainer(scene, trainerTypes[this.value - 1], TrainerVariant.DEFAULT)); + } else if (evilTeamWaves.includes(waveIndex)) { + battleConfig.setBattleType(BattleType.TRAINER).setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1).setGetTrainerFunc(getRandomTrainerFunc(trainerTypes, true)); return true; + } else if (waveIndex >= ClassicFixedBossWaves.ELITE_FOUR_1 && waveIndex <= ClassicFixedBossWaves.CHAMPION) { + const ttypes = trainerTypes as TrainerType[]; + battleConfig.setBattleType(BattleType.TRAINER).setGetTrainerFunc(() => new Trainer(ttypes[this.value - 1], TrainerVariant.DEFAULT)); + return true; + } else { + return false; } } @@ -589,7 +643,7 @@ export class SingleTypeChallenge extends Challenge { * @param {value} overrideValue The value to check for. If undefined, gets the current value. * @returns {string} The localised name for the current value. */ - getValue(overrideValue?: integer): string { + getValue(overrideValue?: number): string { if (overrideValue === undefined) { overrideValue = this.value; } @@ -601,7 +655,7 @@ export class SingleTypeChallenge extends Challenge { * @param {value} overrideValue The value to check for. If undefined, gets the current value. * @returns {string} The localised description for the current value. */ - getDescription(overrideValue?: integer): string { + getDescription(overrideValue?: number): string { if (overrideValue === undefined) { overrideValue = this.value; } @@ -654,6 +708,7 @@ export class FreshStartChallenge extends Challenge { pokemon.variant = 0; // Not shiny pokemon.formIndex = 0; // Froakie should be base form pokemon.ivs = [ 15, 15, 15, 15, 15, 15 ]; // Default IVs of 15 for all stats (Updated to 15 from 10 in 1.2.0) + pokemon.teraType = pokemon.species.type1; // Always primary tera type return true; } @@ -701,6 +756,33 @@ export class InverseBattleChallenge extends Challenge { } } +/** + * Implements a flip stat challenge. + */ +export class FlipStatChallenge extends Challenge { + constructor() { + super(Challenges.FLIP_STAT, 1); + } + + override applyFlipStat(pokemon: Pokemon, baseStats: number[]) { + const origStats = Utils.deepCopy(baseStats); + baseStats[0] = origStats[5]; + baseStats[1] = origStats[4]; + baseStats[2] = origStats[3]; + baseStats[3] = origStats[2]; + baseStats[4] = origStats[1]; + baseStats[5] = origStats[0]; + return true; + } + + static loadChallenge(source: FlipStatChallenge | any): FlipStatChallenge { + const newChallenge = new FlipStatChallenge(); + newChallenge.value = source.value; + newChallenge.severity = source.severity; + return newChallenge; + } +} + /** * Lowers the amount of starter points available. */ @@ -712,7 +794,7 @@ export class LowerStarterMaxCostChallenge extends Challenge { /** * @override */ - getValue(overrideValue?: integer): string { + getValue(overrideValue?: number): string { if (overrideValue === undefined) { overrideValue = this.value; } @@ -746,7 +828,7 @@ export class LowerStarterPointsChallenge extends Challenge { /** * @override */ - getValue(overrideValue?: integer): string { + getValue(overrideValue?: number): string { if (overrideValue === undefined) { overrideValue = this.value; } @@ -832,22 +914,22 @@ export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType * Apply all challenges that modify what level AI are. * @param gameMode {@link GameMode} The current gameMode * @param challengeType {@link ChallengeType} ChallengeType.AI_LEVEL - * @param level {@link Utils.IntegerHolder} The generated level of the pokemon. + * @param level {@link Utils.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(gameMode: GameMode, challengeType: ChallengeType.AI_LEVEL, level: Utils.IntegerHolder, levelCap: number, isTrainer: boolean, isBoss: boolean): boolean; +export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType.AI_LEVEL, level: Utils.NumberHolder, levelCap: number, isTrainer: boolean, isBoss: boolean): boolean; /** * Apply all challenges that modify how many move slots the AI has. * @param gameMode {@link GameMode} The current gameMode * @param challengeType {@link ChallengeType} ChallengeType.AI_MOVE_SLOTS * @param pokemon {@link Pokemon} The pokemon being considered. - * @param moveSlots {@link Utils.IntegerHolder} The amount of move slots. + * @param moveSlots {@link Utils.NumberHolder} The amount of move slots. * @returns True if any challenge was successfully applied. */ -export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType.AI_MOVE_SLOTS, pokemon: Pokemon, moveSlots: Utils.IntegerHolder): boolean; +export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType.AI_MOVE_SLOTS, pokemon: Pokemon, moveSlots: Utils.NumberHolder): boolean; /** * Apply all challenges that modify whether a pokemon has its passive. * @param gameMode {@link GameMode} The current gameMode @@ -871,10 +953,10 @@ export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType * @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 Moves} The move in question. - * @param level {@link Utils.IntegerHolder} The level threshold for access. + * @param level {@link Utils.NumberHolder} The level threshold for access. * @returns True if any challenge was successfully applied. */ -export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType.MOVE_ACCESS, pokemon: Pokemon, moveSource: MoveSourceType, move: Moves, level: Utils.IntegerHolder): boolean; +export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType.MOVE_ACCESS, pokemon: Pokemon, moveSource: MoveSourceType, move: Moves, level: Utils.NumberHolder): boolean; /** * Apply all challenges that modify what weight a pokemon gives to move generation * @param gameMode {@link GameMode} The current gameMode @@ -882,10 +964,13 @@ export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType * @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 Moves} The move in question. - * @param weight {@link Utils.IntegerHolder} The weight of the move. + * @param weight {@link Utils.NumberHolder} The weight of the move. * @returns True if any challenge was successfully applied. */ -export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType.MOVE_WEIGHT, pokemon: Pokemon, moveSource: MoveSourceType, move: Moves, weight: Utils.IntegerHolder): boolean; +export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType.MOVE_WEIGHT, pokemon: Pokemon, moveSource: MoveSourceType, move: Moves, weight: Utils.NumberHolder): boolean; + +export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType.FLIP_STAT, pokemon: Pokemon, baseStats: number[]): boolean; + export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType, ...args: any[]): boolean { let ret = false; gameMode.challenges.forEach(c => { @@ -930,6 +1015,9 @@ export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType 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; } } }); @@ -955,6 +1043,8 @@ export function copyChallenge(source: Challenge | any): Challenge { return FreshStartChallenge.loadChallenge(source); case Challenges.INVERSE_BATTLE: return InverseBattleChallenge.loadChallenge(source); + case Challenges.FLIP_STAT: + return FlipStatChallenge.loadChallenge(source); } throw new Error("Unknown challenge copied"); } @@ -967,5 +1057,6 @@ export function initChallenges() { new SingleTypeChallenge(), new FreshStartChallenge(), new InverseBattleChallenge(), + new FlipStatChallenge() ); } diff --git a/src/data/custom-pokemon-data.ts b/src/data/custom-pokemon-data.ts index 7bc884cff50..4a5eb89aeed 100644 --- a/src/data/custom-pokemon-data.ts +++ b/src/data/custom-pokemon-data.ts @@ -1,11 +1,12 @@ -import { Abilities } from "#enums/abilities"; -import { Type } from "#enums/type"; +import type { Abilities } from "#enums/abilities"; +import type { Type } from "#enums/type"; import { isNullOrUndefined } from "#app/utils"; -import { Nature } from "#enums/nature"; +import type { Nature } from "#enums/nature"; /** * Data that can customize a Pokemon in non-standard ways from its Species - * Currently only used by Mystery Encounters and Mints. + * Used by Mystery Encounters and Mints + * Also used as a counter how often a Pokemon got hit until new arena encounter */ export class CustomPokemonData { public spriteScale: number; @@ -13,6 +14,8 @@ export class CustomPokemonData { public passive: Abilities | -1; public nature: Nature | -1; public types: Type[]; + /** `hitsReceivedCount` aka `hitsRecCount` saves how often the pokemon got hit until a new arena encounter (used for Rage Fist) */ + public hitsRecCount: number; constructor(data?: CustomPokemonData | Partial) { if (!isNullOrUndefined(data)) { @@ -24,5 +27,10 @@ export class CustomPokemonData { this.passive = this.passive ?? -1; this.nature = this.nature ?? -1; this.types = this.types ?? []; + this.hitsRecCount = this.hitsRecCount ?? 0; + } + + resetHitReceivedCount(): void { + this.hitsRecCount = 0; } } diff --git a/src/data/daily-run.ts b/src/data/daily-run.ts index 506ea0471c6..df6c08fc0f0 100644 --- a/src/data/daily-run.ts +++ b/src/data/daily-run.ts @@ -1,15 +1,17 @@ import { PartyMemberStrength } from "#enums/party-member-strength"; -import { Species } from "#enums/species"; -import BattleScene from "#app/battle-scene"; +import type { Species } from "#enums/species"; +import { globalScene } from "#app/global-scene"; import { PlayerPokemon } from "#app/field/pokemon"; -import { Starter } from "#app/ui/starter-select-ui-handler"; +import type { Starter } from "#app/ui/starter-select-ui-handler"; import * as Utils from "#app/utils"; -import PokemonSpecies, { PokemonSpeciesForm, getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species"; +import type { PokemonSpeciesForm } from "#app/data/pokemon-species"; +import PokemonSpecies, { getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species"; import { speciesStarterCosts } from "#app/data/balance/starters"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; +import { Biome } from "#app/enums/biome"; export interface DailyRunConfig { - seed: integer; + seed: number; starters: Starter; } @@ -21,22 +23,22 @@ export function fetchDailyRunSeed(): Promise { }); } -export function getDailyRunStarters(scene: BattleScene, seed: string): Starter[] { +export function getDailyRunStarters(seed: string): Starter[] { const starters: Starter[] = []; - scene.executeWithSeedOffset(() => { - const startingLevel = scene.gameMode.getStartingLevel(); + globalScene.executeWithSeedOffset(() => { + 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(parseInt(seed.slice(offset, offset + 4)) as Species, parseInt(seed.slice(offset + 4, offset + 6))); - starters.push(getDailyRunStarter(scene, starterSpeciesForm, startingLevel)); + starters.push(getDailyRunStarter(starterSpeciesForm, startingLevel)); } return; } - const starterCosts: integer[] = []; + const starterCosts: number[] = []; starterCosts.push(Math.min(Math.round(3.5 + Math.abs(Utils.randSeedGauss(1))), 8)); starterCosts.push(Utils.randSeedInt(9 - starterCosts[0], 1)); starterCosts.push(10 - (starterCosts[0] + starterCosts[1])); @@ -48,17 +50,17 @@ export function getDailyRunStarters(scene: BattleScene, seed: string): Starter[] .filter(s => speciesStarterCosts[s] === cost); const randPkmSpecies = getPokemonSpecies(Utils.randSeedItem(costSpecies)); const starterSpecies = getPokemonSpecies(randPkmSpecies.getTrainerSpeciesForLevel(startingLevel, true, PartyMemberStrength.STRONGER)); - starters.push(getDailyRunStarter(scene, starterSpecies, startingLevel)); + starters.push(getDailyRunStarter(starterSpecies, startingLevel)); } }, 0, seed); return starters; } -function getDailyRunStarter(scene: BattleScene, starterSpeciesForm: PokemonSpeciesForm, startingLevel: integer): Starter { +function getDailyRunStarter(starterSpeciesForm: PokemonSpeciesForm, startingLevel: number): Starter { const starterSpecies = starterSpeciesForm instanceof PokemonSpecies ? starterSpeciesForm : getPokemonSpecies(starterSpeciesForm.speciesId); const formIndex = starterSpeciesForm instanceof PokemonSpecies ? undefined : starterSpeciesForm.formIndex; - const pokemon = new PlayerPokemon(scene, starterSpecies, startingLevel, undefined, formIndex, undefined, undefined, undefined, undefined, undefined, undefined); + const pokemon = new PlayerPokemon(starterSpecies, startingLevel, undefined, formIndex, undefined, undefined, undefined, undefined, undefined, undefined); const starter: Starter = { species: starterSpecies, dexAttr: pokemon.getDexAttr(), @@ -70,3 +72,76 @@ function getDailyRunStarter(scene: BattleScene, starterSpeciesForm: PokemonSpeci pokemon.destroy(); return starter; } + +interface BiomeWeights { + [key: number]: number +} + +// Initially weighted by amount of exits each biome has +// Town and End are set to 0 however +// And some other biomes were balanced +1/-1 based on average size of the total daily. +const dailyBiomeWeights: BiomeWeights = { + [Biome.CAVE]: 3, + [Biome.LAKE]: 3, + [Biome.PLAINS]: 3, + [Biome.SNOWY_FOREST]: 3, + [Biome.SWAMP]: 3, // 2 -> 3 + [Biome.TALL_GRASS]: 3, // 2 -> 3 + + [Biome.ABYSS]: 2, // 3 -> 2 + [Biome.RUINS]: 2, + [Biome.BADLANDS]: 2, + [Biome.BEACH]: 2, + [Biome.CONSTRUCTION_SITE]: 2, + [Biome.DESERT]: 2, + [Biome.DOJO]: 2, // 3 -> 2 + [Biome.FACTORY]: 2, + [Biome.FAIRY_CAVE]: 2, + [Biome.FOREST]: 2, + [Biome.GRASS]: 2, // 1 -> 2 + [Biome.MEADOW]: 2, + [Biome.MOUNTAIN]: 2, // 3 -> 2 + [Biome.SEA]: 2, + [Biome.SEABED]: 2, + [Biome.SLUM]: 2, + [Biome.TEMPLE]: 2, // 3 -> 2 + [Biome.VOLCANO]: 2, + + [Biome.GRAVEYARD]: 1, + [Biome.ICE_CAVE]: 1, + [Biome.ISLAND]: 1, + [Biome.JUNGLE]: 1, + [Biome.LABORATORY]: 1, + [Biome.METROPOLIS]: 1, + [Biome.POWER_PLANT]: 1, + [Biome.SPACE]: 1, + [Biome.WASTELAND]: 1, + + [Biome.TOWN]: 0, + [Biome.END]: 0, +}; + +export function getDailyStartingBiome(): Biome { + const biomes = Utils.getEnumValues(Biome).filter(b => b !== Biome.TOWN && b !== Biome.END); + + let totalWeight = 0; + const biomeThresholds: number[] = []; + for (const biome of biomes) { + // Keep track of the total weight + totalWeight += dailyBiomeWeights[biome]; + + // Keep track of each biomes cumulative weight + biomeThresholds.push(totalWeight); + } + + const randInt = Utils.randSeedInt(totalWeight); + + for (let i = 0; i < biomes.length; i++) { + if (randInt < biomeThresholds[i]) { + return biomes[i]; + } + } + + // Fallback in case something went wrong + return biomes[Utils.randSeedInt(biomes.length)]; +} diff --git a/src/data/dialogue.ts b/src/data/dialogue.ts index 3219ce4d058..f4933a070fd 100644 --- a/src/data/dialogue.ts +++ b/src/data/dialogue.ts @@ -9,7 +9,7 @@ export interface TrainerTypeMessages { } export interface TrainerTypeDialogue { - [key: integer]: TrainerTypeMessages | Array + [key: number]: TrainerTypeMessages | Array } export function getTrainerTypeDialogue(): TrainerTypeDialogue { @@ -726,17 +726,17 @@ export const trainerTypeDialogue: TrainerTypeDialogue = { ] } ], - [TrainerType.ROOD]: [ + [TrainerType.COLRESS]: [ { encounter: [ - "dialogue:rood.encounter.1", - "dialogue:rood.encounter.2", - "dialogue:rood.encounter.3", + "dialogue:colress.encounter.1", + "dialogue:colress.encounter.2", + "dialogue:colress.encounter.3", ], victory: [ - "dialogue:rood.victory.1", - "dialogue:rood.victory.2", - "dialogue:rood.victory.3", + "dialogue:colress.victory.1", + "dialogue:colress.victory.2", + "dialogue:colress.victory.3", ] } ], @@ -2505,6 +2505,17 @@ export const trainerTypeDialogue: TrainerTypeDialogue = { "dialogue:iris.defeat.1" ] }, + [TrainerType.KUKUI]: { + encounter: [ + "dialogue:kukui.encounter.1" + ], + victory: [ + "dialogue:kukui.victory.1" + ], + defeat: [ + "dialogue:kukui.defeat.1" + ] + }, [TrainerType.HAU]: { encounter: [ "dialogue:hau.encounter.1" @@ -2549,6 +2560,17 @@ export const trainerTypeDialogue: TrainerTypeDialogue = { "dialogue:leon.defeat.1" ] }, + [TrainerType.MUSTARD]: { + encounter: [ + "dialogue:mustard.encounter.1" + ], + victory: [ + "dialogue:mustard.victory.1" + ], + defeat: [ + "dialogue:mustard.defeat.1" + ] + }, [TrainerType.WHITNEY]: { encounter: [ "dialogue:whitney.encounter.1" diff --git a/src/data/egg-hatch-data.ts b/src/data/egg-hatch-data.ts index ba553b55c4f..37ee9bede09 100644 --- a/src/data/egg-hatch-data.ts +++ b/src/data/egg-hatch-data.ts @@ -1,6 +1,6 @@ -import BattleScene from "#app/battle-scene"; -import { PlayerPokemon } from "#app/field/pokemon"; -import { DexEntry, StarterDataEntry } from "#app/system/game-data"; +import { globalScene } from "#app/global-scene"; +import type { PlayerPokemon } from "#app/field/pokemon"; +import type { DexEntry, StarterDataEntry } from "#app/system/game-data"; /** * Stores data associated with a specific egg and the hatched pokemon @@ -17,11 +17,8 @@ export class EggHatchData { public dexEntryBeforeUpdate: DexEntry; /** stored copy of the hatched pokemon's starter entry before it was updated due to hatch */ public starterDataEntryBeforeUpdate: StarterDataEntry; - /** reference to the battle scene to get gamedata and update dex */ - private scene: BattleScene; - constructor(scene: BattleScene, pokemon: PlayerPokemon, eggMoveIndex: number) { - this.scene = scene; + constructor(pokemon: PlayerPokemon, eggMoveIndex: number) { this.pokemon = pokemon; this.eggMoveIndex = eggMoveIndex; } @@ -39,8 +36,8 @@ export class EggHatchData { * Used before updating the dex, so comparing the pokemon to these entries will show the new attributes */ setDex() { - const currDexEntry = this.scene.gameData.dexData[this.pokemon.species.speciesId]; - const currStarterDataEntry = this.scene.gameData.starterData[this.pokemon.species.getRootSpeciesId()]; + const currDexEntry = globalScene.gameData.dexData[this.pokemon.species.speciesId]; + const currStarterDataEntry = globalScene.gameData.starterData[this.pokemon.species.getRootSpeciesId()]; this.dexEntryBeforeUpdate = { seenAttr: currDexEntry.seenAttr, caughtAttr: currDexEntry.caughtAttr, @@ -86,9 +83,9 @@ export class EggHatchData { */ updatePokemon(showMessage : boolean = false) { return new Promise(resolve => { - this.scene.gameData.setPokemonCaught(this.pokemon, true, true, showMessage).then(() => { - this.scene.gameData.updateSpeciesDexIvs(this.pokemon.species.speciesId, this.pokemon.ivs); - this.scene.gameData.setEggMoveUnlocked(this.pokemon.species, this.eggMoveIndex, showMessage).then((value) => { + globalScene.gameData.setPokemonCaught(this.pokemon, true, true, showMessage).then(() => { + globalScene.gameData.updateSpeciesDexIvs(this.pokemon.species.speciesId, this.pokemon.ivs); + globalScene.gameData.setEggMoveUnlocked(this.pokemon.species, this.eggMoveIndex, showMessage).then((value) => { this.setEggMoveUnlocked(value); resolve(); }); diff --git a/src/data/egg.ts b/src/data/egg.ts index 7f1deecc63f..380b5ddabfe 100644 --- a/src/data/egg.ts +++ b/src/data/egg.ts @@ -1,11 +1,13 @@ -import BattleScene from "#app/battle-scene"; -import PokemonSpecies, { getPokemonSpecies } from "#app/data/pokemon-species"; +import type BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; +import type PokemonSpecies from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/data/pokemon-species"; import { speciesStarterCosts } from "#app/data/balance/starters"; import { VariantTier } from "#enums/variant-tier"; import * as Utils from "#app/utils"; import Overrides from "#app/overrides"; import { pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; -import { PlayerPokemon } from "#app/field/pokemon"; +import type { PlayerPokemon } from "#app/field/pokemon"; import i18next from "i18next"; import { EggTier } from "#enums/egg-type"; import { Species } from "#enums/species"; @@ -22,9 +24,8 @@ export interface IEggOptions { /** Timestamp when this egg got created */ timestamp?: number; /** - * Defines if the egg got pulled from a gacha or not. If true, egg pity and pull statistics will be applyed. + * Defines if the egg got pulled from a gacha or not. If true, egg pity and pull statistics will be applied. * Egg will be automaticly added to the game data. - * NEEDS `scene` `eggOption` to work. */ pulled?: boolean; /** @@ -32,7 +33,7 @@ export interface IEggOptions { * Will also define the text displayed in the egg list. */ sourceType?: EggSourceType; - /** Needs to be defined if `eggOption` pulled is defined or if no species or `isShiny` is defined since this will be needed to generate them. */ + /** Legacy field, kept for backwards-compatibility */ scene?: BattleScene; /** * Sets the tier of the egg. Only species of this tier can be hatched from this egg. @@ -41,10 +42,7 @@ export interface IEggOptions { tier?: EggTier; /** Sets how many waves it will take till this egg hatches. */ hatchWaves?: number; - /** - * Sets the exact species that will hatch from this egg. - * Needs `scene` `eggOption` if not provided. - */ + /** Sets the exact species that will hatch from this egg. */ species?: Species; /** Defines if the hatched pokemon will be a shiny. */ isShiny?: boolean; @@ -56,8 +54,7 @@ export interface IEggOptions { * Defines if the egg will hatch with the hidden ability of this species. * If no hidden ability exist, a random one will get choosen. */ - overrideHiddenAbility?: boolean, - + overrideHiddenAbility?: boolean; /** Can customize the message displayed for where the egg was obtained */ eggDescriptor?: string; } @@ -148,7 +145,7 @@ export class Egg { // If egg was pulled, check if egg pity needs to override the egg tier if (eggOptions?.pulled) { // Needs this._tier and this._sourceType to work - this.checkForPityTierOverrides(eggOptions.scene!); // TODO: is this bang correct? + this.checkForPityTierOverrides(); } this._id = eggOptions?.id ?? Utils.randInt(EGG_SEED, EGG_SEED * this._tier); @@ -160,7 +157,7 @@ export class Egg { // First roll shiny and variant so we can filter if species with an variant exist this._isShiny = eggOptions?.isShiny ?? (Overrides.EGG_SHINY_OVERRIDE || this.rollShiny()); this._variantTier = eggOptions?.variantTier ?? (Overrides.EGG_VARIANT_OVERRIDE ?? this.rollVariant()); - this._species = eggOptions?.species ?? this.rollSpecies(eggOptions!.scene!)!; // TODO: Are those bangs correct? + this._species = eggOptions?.species ?? this.rollSpecies()!; // TODO: Is this bang correct? this._overrideHiddenAbility = eggOptions?.overrideHiddenAbility ?? false; @@ -178,19 +175,15 @@ export class Egg { // Needs this._tier so it needs to be generated afer the tier override if bought from same species this._eggMoveIndex = eggOptions?.eggMoveIndex ?? this.rollEggMoveIndex(); if (eggOptions?.pulled) { - this.increasePullStatistic(eggOptions.scene!); // TODO: is this bang correct? - this.addEggToGameData(eggOptions.scene!); // TODO: is this bang correct? + this.increasePullStatistic(); + this.addEggToGameData(); } }; - if (eggOptions?.scene) { - const seedOverride = Utils.randomString(24); - eggOptions?.scene.executeWithSeedOffset(() => { - generateEggProperties(eggOptions); - }, 0, seedOverride); - } else { // For legacy eggs without scene + const seedOverride = Utils.randomString(24); + globalScene.executeWithSeedOffset(() => { generateEggProperties(eggOptions); - } + }, 0, seedOverride); this._eggDescriptor = eggOptions?.eggDescriptor; } @@ -212,14 +205,14 @@ export class Egg { } // Generates a PlayerPokemon from an egg - public generatePlayerPokemon(scene: BattleScene): PlayerPokemon { + public generatePlayerPokemon(): PlayerPokemon { let ret: PlayerPokemon; - const generatePlayerPokemonHelper = (scene: BattleScene) => { + const generatePlayerPokemonHelper = () => { // Legacy egg wants to hatch. Generate missing properties if (!this._species) { this._isShiny = this.rollShiny(); - this._species = this.rollSpecies(scene!)!; // TODO: are these bangs correct? + this._species = this.rollSpecies()!; // TODO: is this bang correct? } let pokemonSpecies = getPokemonSpecies(this._species); @@ -238,7 +231,7 @@ export class Egg { } // This function has way to many optional parameters - ret = scene.addPlayerPokemon(pokemonSpecies, 1, abilityIndex, undefined, undefined, false); + ret = globalScene.addPlayerPokemon(pokemonSpecies, 1, abilityIndex, undefined, undefined, false); ret.shiny = this._isShiny; ret.variant = this._variantTier; @@ -250,16 +243,16 @@ export class Egg { }; ret = ret!; // Tell TS compiler it's defined now - scene.executeWithSeedOffset(() => { - generatePlayerPokemonHelper(scene); + globalScene.executeWithSeedOffset(() => { + generatePlayerPokemonHelper(); }, this._id, EGG_SEED.toString()); return ret; } // Doesn't need to be called if the egg got pulled by a gacha machiene - public addEggToGameData(scene: BattleScene): void { - scene.gameData.eggs.push(this); + public addEggToGameData(): void { + globalScene.gameData.eggs.push(this); } public getEggDescriptor(): string { @@ -291,12 +284,12 @@ export class Egg { return i18next.t("egg:hatchWavesMessageLongTime"); } - public getEggTypeDescriptor(scene: BattleScene): string { + public getEggTypeDescriptor(): string { switch (this.sourceType) { case EggSourceType.SAME_SPECIES_EGG: return this._eggDescriptor ?? i18next.t("egg:sameSpeciesEgg", { species: getPokemonSpecies(this._species).getName() }); case EggSourceType.GACHA_LEGENDARY: - return this._eggDescriptor ?? `${i18next.t("egg:gachaTypeLegendary")} (${getPokemonSpecies(getLegendaryGachaSpeciesForTimestamp(scene, this.timestamp)).getName()})`; + return this._eggDescriptor ?? `${i18next.t("egg:gachaTypeLegendary")} (${getPokemonSpecies(getLegendaryGachaSpeciesForTimestamp(this.timestamp)).getName()})`; case EggSourceType.GACHA_SHINY: return this._eggDescriptor ?? i18next.t("egg:gachaTypeShiny"); case EggSourceType.GACHA_MOVE: @@ -356,8 +349,8 @@ export class Egg { return tierValue >= GACHA_DEFAULT_COMMON_EGG_THRESHOLD + tierValueOffset ? EggTier.COMMON : tierValue >= GACHA_DEFAULT_RARE_EGG_THRESHOLD + tierValueOffset ? EggTier.RARE : tierValue >= GACHA_DEFAULT_EPIC_EGG_THRESHOLD + tierValueOffset ? EggTier.EPIC : EggTier.LEGENDARY; } - private rollSpecies(scene: BattleScene): Species | null { - if (!scene) { + private rollSpecies(): Species | null { + if (!globalScene) { return null; } /** @@ -376,12 +369,12 @@ export class Egg { } else if (this.tier === EggTier.LEGENDARY && this._sourceType === EggSourceType.GACHA_LEGENDARY) { if (!Utils.randSeedInt(2)) { - return getLegendaryGachaSpeciesForTimestamp(scene, this.timestamp); + return getLegendaryGachaSpeciesForTimestamp(this.timestamp); } } - let minStarterValue: integer; - let maxStarterValue: integer; + let minStarterValue: number; + let maxStarterValue: number; switch (this.tier) { case EggTier.RARE: @@ -410,8 +403,8 @@ export class Egg { .filter(s => !pokemonPrevolutions.hasOwnProperty(s) && getPokemonSpecies(s).isObtainable() && ignoredSpecies.indexOf(s) === -1); // If this is the 10th egg without unlocking something new, attempt to force it. - if (scene.gameData.unlockPity[this.tier] >= 9) { - const lockedPool = speciesPool.filter(s => !scene.gameData.dexData[s].caughtAttr && !scene.gameData.eggs.some(e => e.species === s)); + if (globalScene.gameData.unlockPity[this.tier] >= 9) { + const lockedPool = speciesPool.filter(s => !globalScene.gameData.dexData[s].caughtAttr && !globalScene.gameData.eggs.some(e => e.species === s)); if (lockedPool.length) { // Skip this if everything is unlocked speciesPool = lockedPool; } @@ -454,10 +447,10 @@ export class Egg { } species = species!; // tell TS compiled it's defined now! - if (!!scene.gameData.dexData[species].caughtAttr || scene.gameData.eggs.some(e => e.species === species)) { - scene.gameData.unlockPity[this.tier] = Math.min(scene.gameData.unlockPity[this.tier] + 1, 10); + if (globalScene.gameData.dexData[species].caughtAttr || globalScene.gameData.eggs.some(e => e.species === species)) { + globalScene.gameData.unlockPity[this.tier] = Math.min(globalScene.gameData.unlockPity[this.tier] + 1, 10); } else { - scene.gameData.unlockPity[this.tier] = 0; + globalScene.gameData.unlockPity[this.tier] = 0; } return species; @@ -465,7 +458,7 @@ export class Egg { /** * Rolls whether the egg is shiny or not. - * @returns True if the egg is shiny + * @returns `true` if the egg is shiny **/ private rollShiny(): boolean { let shinyChance = GACHA_DEFAULT_SHINY_RATE; @@ -485,6 +478,7 @@ export class Egg { // Uses the same logic as pokemon.generateVariant(). I would like to only have this logic in one // place but I don't want to touch the pokemon class. + // TODO: Remove this or replace the one in the Pokemon class. private rollVariant(): VariantTier { if (!this.isShiny) { return VariantTier.STANDARD; @@ -500,38 +494,38 @@ export class Egg { } } - private checkForPityTierOverrides(scene: BattleScene): void { + private checkForPityTierOverrides(): void { const tierValueOffset = this._sourceType === EggSourceType.GACHA_LEGENDARY ? GACHA_LEGENDARY_UP_THRESHOLD_OFFSET : 0; - scene.gameData.eggPity[EggTier.RARE] += 1; - scene.gameData.eggPity[EggTier.EPIC] += 1; - scene.gameData.eggPity[EggTier.LEGENDARY] += 1 + tierValueOffset; + globalScene.gameData.eggPity[EggTier.RARE] += 1; + globalScene.gameData.eggPity[EggTier.EPIC] += 1; + globalScene.gameData.eggPity[EggTier.LEGENDARY] += 1 + tierValueOffset; // These numbers are roughly the 80% mark. That is, 80% of the time you'll get an egg before this gets triggered. - if (scene.gameData.eggPity[EggTier.LEGENDARY] >= EGG_PITY_LEGENDARY_THRESHOLD && this._tier === EggTier.COMMON) { + if (globalScene.gameData.eggPity[EggTier.LEGENDARY] >= EGG_PITY_LEGENDARY_THRESHOLD && this._tier === EggTier.COMMON) { this._tier = EggTier.LEGENDARY; - } else if (scene.gameData.eggPity[EggTier.EPIC] >= EGG_PITY_EPIC_THRESHOLD && this._tier === EggTier.COMMON) { + } else if (globalScene.gameData.eggPity[EggTier.EPIC] >= EGG_PITY_EPIC_THRESHOLD && this._tier === EggTier.COMMON) { this._tier = EggTier.EPIC; - } else if (scene.gameData.eggPity[EggTier.RARE] >= EGG_PITY_RARE_THRESHOLD && this._tier === EggTier.COMMON) { + } else if (globalScene.gameData.eggPity[EggTier.RARE] >= EGG_PITY_RARE_THRESHOLD && this._tier === EggTier.COMMON) { this._tier = EggTier.RARE; } - scene.gameData.eggPity[this._tier] = 0; + globalScene.gameData.eggPity[this._tier] = 0; } - private increasePullStatistic(scene: BattleScene): void { - scene.gameData.gameStats.eggsPulled++; + private increasePullStatistic(): void { + globalScene.gameData.gameStats.eggsPulled++; if (this.isManaphyEgg()) { - scene.gameData.gameStats.manaphyEggsPulled++; + globalScene.gameData.gameStats.manaphyEggsPulled++; this._hatchWaves = this.getEggTierDefaultHatchWaves(EggTier.EPIC); return; } switch (this.tier) { case EggTier.RARE: - scene.gameData.gameStats.rareEggsPulled++; + globalScene.gameData.gameStats.rareEggsPulled++; break; case EggTier.EPIC: - scene.gameData.gameStats.epicEggsPulled++; + globalScene.gameData.gameStats.epicEggsPulled++; break; case EggTier.LEGENDARY: - scene.gameData.gameStats.legendaryEggsPulled++; + globalScene.gameData.gameStats.legendaryEggsPulled++; break; } } @@ -552,7 +546,7 @@ export function getValidLegendaryGachaSpecies() : Species[] { .filter(s => getPokemonSpecies(s).isObtainable() && s !== Species.ETERNATUS); } -export function getLegendaryGachaSpeciesForTimestamp(scene: BattleScene, timestamp: number): Species { +export function getLegendaryGachaSpeciesForTimestamp(timestamp: number): Species { const legendarySpecies = getValidLegendaryGachaSpecies(); let ret: Species; @@ -563,7 +557,7 @@ export function getLegendaryGachaSpeciesForTimestamp(scene: BattleScene, timesta const offset = Math.floor(Math.floor(dayTimestamp / 86400000) / legendarySpecies.length); // Cycle number const index = Math.floor(dayTimestamp / 86400000) % legendarySpecies.length; // Index within cycle - scene.executeWithSeedOffset(() => { + globalScene.executeWithSeedOffset(() => { ret = Phaser.Math.RND.shuffle(legendarySpecies)[index]; }, offset, EGG_SEED.toString()); ret = ret!; // tell TS compiler it's diff --git a/src/data/exp.ts b/src/data/exp.ts index c03abddadfc..0f5d3e62cef 100644 --- a/src/data/exp.ts +++ b/src/data/exp.ts @@ -16,7 +16,7 @@ const expLevels = [ [ 0, 4, 13, 32, 65, 112, 178, 276, 393, 540, 745, 967, 1230, 1591, 1957, 2457, 3046, 3732, 4526, 5440, 6482, 7666, 9003, 10506, 12187, 14060, 16140, 18439, 20974, 23760, 26811, 30146, 33780, 37731, 42017, 46656, 50653, 55969, 60505, 66560, 71677, 78533, 84277, 91998, 98415, 107069, 114205, 123863, 131766, 142500, 151222, 163105, 172697, 185807, 196322, 210739, 222231, 238036, 250562, 267840, 281456, 300293, 315059, 335544, 351520, 373744, 390991, 415050, 433631, 459620, 479600, 507617, 529063, 559209, 582187, 614566, 639146, 673863, 700115, 737280, 765275, 804997, 834809, 877201, 908905, 954084, 987754, 1035837, 1071552, 1122660, 1160499, 1214753, 1254796, 1312322, 1354652, 1415577, 1460276, 1524731, 1571884, 1640000 ] ]; -export function getLevelTotalExp(level: integer, growthRate: GrowthRate): integer { +export function getLevelTotalExp(level: number, growthRate: GrowthRate): number { if (level < 100) { const levelExp = expLevels[growthRate][level - 1]; if (growthRate !== GrowthRate.MEDIUM_FAST) { @@ -25,7 +25,7 @@ export function getLevelTotalExp(level: integer, growthRate: GrowthRate): intege return levelExp; } - let ret: integer; + let ret: number; switch (growthRate) { case GrowthRate.ERRATIC: @@ -55,7 +55,7 @@ export function getLevelTotalExp(level: integer, growthRate: GrowthRate): intege return Math.floor(ret); } -export function getLevelRelExp(level: integer, growthRate: GrowthRate): number { +export function getLevelRelExp(level: number, growthRate: GrowthRate): number { return getLevelTotalExp(level, growthRate) - getLevelTotalExp(level - 1, growthRate); } diff --git a/src/data/move.ts b/src/data/move.ts index 7a6f08a5372..677ad9f0ebc 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -1,22 +1,90 @@ -import { ChargeAnim, initMoveAnim, loadMoveAnimAssets, MoveChargeAnim } from "./battle-anims"; -import { CommandedTag, EncoreTag, GulpMissileTag, HelpingHandTag, SemiInvulnerableTag, ShellTrapTag, StockpilingTag, SubstituteTag, TrappedTag, TypeBoostTag } from "./battler-tags"; +import { ChargeAnim, MoveChargeAnim } from "./battle-anims"; +import { + CommandedTag, + EncoreTag, + GulpMissileTag, + HelpingHandTag, + SemiInvulnerableTag, + ShellTrapTag, + StockpilingTag, + SubstituteTag, + TrappedTag, + TypeBoostTag, +} from "./battler-tags"; import { getPokemonNameWithAffix } from "../messages"; -import Pokemon, { AttackMoveResult, EnemyPokemon, HitResult, MoveResult, PlayerPokemon, PokemonMove, TurnMove } from "../field/pokemon"; -import { getNonVolatileStatusEffects, getStatusEffectHealText, isNonVolatileStatusEffect } from "./status-effect"; +import type { AttackMoveResult, TurnMove } from "../field/pokemon"; +import type Pokemon from "../field/pokemon"; +import { + EnemyPokemon, + HitResult, + MoveResult, + PlayerPokemon, + PokemonMove, +} from "../field/pokemon"; +import { + getNonVolatileStatusEffects, + getStatusEffectHealText, + isNonVolatileStatusEffect, +} from "./status-effect"; import { getTypeDamageMultiplier } from "./type"; import { Type } from "#enums/type"; -import { Constructor, NumberHolder } from "#app/utils"; +import type { Constructor } from "#app/utils"; +import { NumberHolder } from "#app/utils"; import * as Utils from "../utils"; import { WeatherType } from "#enums/weather-type"; -import { ArenaTagSide, ArenaTrapTag, WeakenMoveTypeTag } from "./arena-tag"; -import { allAbilities, AllyMoveCategoryPowerBoostAbAttr, applyAbAttrs, applyPostAttackAbAttrs, applyPostItemLostAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, BlockItemTheftAbAttr, BlockNonDirectDamageAbAttr, BlockOneHitKOAbAttr, BlockRecoilDamageAttr, ChangeMovePriorityAbAttr, ConfusionOnStatusEffectAbAttr, FieldMoveTypePowerBoostAbAttr, FieldPreventExplosiveMovesAbAttr, ForceSwitchOutImmunityAbAttr, HealFromBerryUseAbAttr, IgnoreContactAbAttr, IgnoreMoveEffectsAbAttr, IgnoreProtectOnContactAbAttr, InfiltratorAbAttr, MaxMultiHitAbAttr, MoveAbilityBypassAbAttr, MoveEffectChanceMultiplierAbAttr, MoveTypeChangeAbAttr, PostDamageForceSwitchAbAttr, PostItemLostAbAttr, ReverseDrainAbAttr, UncopiableAbilityAbAttr, UnsuppressableAbilityAbAttr, UnswappableAbilityAbAttr, UserFieldMoveTypePowerBoostAbAttr, VariableMovePowerAbAttr, WonderSkinAbAttr } from "./ability"; -import { AttackTypeBoosterModifier, BerryModifier, PokemonHeldItemModifier, PokemonMoveAccuracyBoosterModifier, PokemonMultiHitModifier, PreserveBerryModifier } from "../modifier/modifier"; -import { BattlerIndex, BattleType } from "../battle"; +import type { ArenaTrapTag } from "./arena-tag"; +import { ArenaTagSide, WeakenMoveTypeTag } from "./arena-tag"; +import { + allAbilities, + AllyMoveCategoryPowerBoostAbAttr, + applyAbAttrs, + applyPostAttackAbAttrs, + applyPostItemLostAbAttrs, + applyPreAttackAbAttrs, + applyPreDefendAbAttrs, + BlockItemTheftAbAttr, + BlockNonDirectDamageAbAttr, + BlockOneHitKOAbAttr, + BlockRecoilDamageAttr, + ChangeMovePriorityAbAttr, + ConfusionOnStatusEffectAbAttr, + FieldMoveTypePowerBoostAbAttr, + FieldPreventExplosiveMovesAbAttr, + ForceSwitchOutImmunityAbAttr, + HealFromBerryUseAbAttr, + IgnoreContactAbAttr, + IgnoreMoveEffectsAbAttr, + IgnoreProtectOnContactAbAttr, + InfiltratorAbAttr, + MaxMultiHitAbAttr, + MoveAbilityBypassAbAttr, + MoveEffectChanceMultiplierAbAttr, + MoveTypeChangeAbAttr, + PostDamageForceSwitchAbAttr, + PostItemLostAbAttr, + ReverseDrainAbAttr, + UncopiableAbilityAbAttr, + UnsuppressableAbilityAbAttr, + UnswappableAbilityAbAttr, + UserFieldMoveTypePowerBoostAbAttr, + VariableMovePowerAbAttr, + WonderSkinAbAttr, +} from "./ability"; +import { + AttackTypeBoosterModifier, + BerryModifier, + PokemonHeldItemModifier, + PokemonMoveAccuracyBoosterModifier, + PokemonMultiHitModifier, + PreserveBerryModifier, +} from "../modifier/modifier"; +import type { BattlerIndex } from "../battle"; +import { BattleType } from "../battle"; import { TerrainType } from "./terrain"; import { ModifierPoolType } from "#app/modifier/modifier-type"; import { Command } from "../ui/command-ui-handler"; import i18next from "i18next"; -import { Localizable } from "#app/interfaces/locales"; +import type { Localizable } from "#app/interfaces/locales"; import { getBerryEffectFunc } from "./berry"; import { Abilities } from "#enums/abilities"; import { ArenaTagType } from "#enums/arena-tag-type"; @@ -25,7 +93,13 @@ import { Biome } from "#enums/biome"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { MoveUsedEvent } from "#app/events/battle-scene"; -import { BATTLE_STATS, type BattleStat, EFFECTIVE_STATS, type EffectiveStat, getStatKey, Stat } from "#app/enums/stat"; +import { + BATTLE_STATS, + type BattleStat, + type EffectiveStat, + getStatKey, + Stat, +} from "#app/enums/stat"; import { BattleEndPhase } from "#app/phases/battle-end-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; import { MovePhase } from "#app/phases/move-phase"; @@ -36,10 +110,16 @@ import { SwitchPhase } from "#app/phases/switch-phase"; import { SwitchSummonPhase } from "#app/phases/switch-summon-phase"; import { ShowAbilityPhase } from "#app/phases/show-ability-phase"; import { SpeciesFormChangeRevertWeatherFormTrigger } from "./pokemon-forms"; -import { GameMode } from "#app/game-mode"; +import type { GameMode } from "#app/game-mode"; import { applyChallenges, ChallengeType } from "./challenge"; import { SwitchType } from "#enums/switch-type"; -import { StatusEffect } from "enums/status-effect"; +import { StatusEffect } from "#enums/status-effect"; +import { globalScene } from "#app/global-scene"; +import { RevivalBlessingPhase } from "#app/phases/revival-blessing-phase"; +import { LoadMoveAnimPhase } from "#app/phases/load-move-anim-phase"; +import { PokemonTransformPhase } from "#app/phases/pokemon-transform-phase"; +import { MoveAnimPhase } from "#app/phases/move-anim-phase"; +import { loggedInUser } from "#app/account"; export enum MoveCategory { PHYSICAL, @@ -81,7 +161,6 @@ export enum MoveFlags { NONE = 0, MAKES_CONTACT = 1 << 0, IGNORE_PROTECT = 1 << 1, - IGNORE_VIRTUAL = 1 << 2, /** * Sound-based moves have the following effects: * - Pokemon with the {@linkcode Abilities.SOUNDPROOF Soundproof Ability} are unaffected by other Pokemon's sound-based moves. @@ -92,35 +171,37 @@ export enum MoveFlags { * * cf https://bulbapedia.bulbagarden.net/wiki/Sound-based_move */ - SOUND_BASED = 1 << 3, - HIDE_USER = 1 << 4, - HIDE_TARGET = 1 << 5, - BITING_MOVE = 1 << 6, - PULSE_MOVE = 1 << 7, - PUNCHING_MOVE = 1 << 8, - SLICING_MOVE = 1 << 9, + SOUND_BASED = 1 << 2, + HIDE_USER = 1 << 3, + HIDE_TARGET = 1 << 4, + BITING_MOVE = 1 << 5, + PULSE_MOVE = 1 << 6, + PUNCHING_MOVE = 1 << 7, + SLICING_MOVE = 1 << 8, /** * Indicates a move should be affected by {@linkcode Abilities.RECKLESS} * @see {@linkcode Move.recklessMove()} */ - RECKLESS_MOVE = 1 << 10, + RECKLESS_MOVE = 1 << 9, /** Indicates a move should be affected by {@linkcode Abilities.BULLETPROOF} */ - BALLBOMB_MOVE = 1 << 11, + BALLBOMB_MOVE = 1 << 10, /** Grass types and pokemon with {@linkcode Abilities.OVERCOAT} are immune to powder moves */ - POWDER_MOVE = 1 << 12, + POWDER_MOVE = 1 << 11, /** Indicates a move should trigger {@linkcode Abilities.DANCER} */ - DANCE_MOVE = 1 << 13, + DANCE_MOVE = 1 << 12, /** Indicates a move should trigger {@linkcode Abilities.WIND_RIDER} */ - WIND_MOVE = 1 << 14, + WIND_MOVE = 1 << 13, /** Indicates a move should trigger {@linkcode Abilities.TRIAGE} */ - TRIAGE_MOVE = 1 << 15, - IGNORE_ABILITIES = 1 << 16, + TRIAGE_MOVE = 1 << 14, + IGNORE_ABILITIES = 1 << 15, /** Enables all hits of a multi-hit move to be accuracy checked individually */ - CHECK_ALL_HITS = 1 << 17, + CHECK_ALL_HITS = 1 << 16, /** Indicates a move is able to bypass its target's Substitute (if the target has one) */ - IGNORE_SUBSTITUTE = 1 << 18, + IGNORE_SUBSTITUTE = 1 << 17, /** Indicates a move is able to be redirected to allies in a double battle if the attacker faints */ - REDIRECT_COUNTER = 1 << 19, + REDIRECT_COUNTER = 1 << 18, + /** Indicates a move is able to be reflected by {@linkcode Abilities.MAGIC_BOUNCE} and {@linkcode Moves.MAGIC_COAT} */ + REFLECTABLE = 1 << 19, } type MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => boolean; @@ -435,16 +516,6 @@ export default class Move implements Localizable { return this; } - /** - * Sets the {@linkcode MoveFlags.IGNORE_VIRTUAL} flag for the calling Move - * @see {@linkcode Moves.NATURE_POWER} - * @returns The {@linkcode Move} that called this function - */ - ignoresVirtual(): this { - this.setFlag(MoveFlags.IGNORE_VIRTUAL, true); - return this; - } - /** * Sets the {@linkcode MoveFlags.SOUND_BASED} flag for the calling Move * @see {@linkcode Moves.UPROAR} @@ -615,6 +686,16 @@ export default class Move implements Localizable { return this; } + /** + * Sets the {@linkcode MoveFlags.REFLECTABLE} flag for the calling Move + * @see {@linkcode Moves.ATTRACT} + * @returns The {@linkcode Move} that called this function + */ + reflectable(): this { + this.setFlag(MoveFlags.REFLECTABLE, true); + return this; + } + /** * Checks if the move flag applies to the pokemon(s) using/receiving the move * @param flag {@linkcode MoveFlags} MoveFlag to check on user and/or target @@ -670,19 +751,17 @@ export default class Move implements Localizable { /** * Sees if a move has a custom failure text (by looking at each {@linkcode MoveAttr} of this move) * @param user {@linkcode Pokemon} using the move - * @param target {@linkcode Pokemon} receiving the move - * @param move {@linkcode Move} using the move - * @param cancelled {@linkcode Utils.BooleanHolder} to hold boolean value + * @param target {@linkcode Pokemon} target of the move + * @param move {@linkcode Move} with this attribute * @returns string of the custom failure text, or `null` if it uses the default text ("But it failed!") */ - getFailedText(user: Pokemon, target: Pokemon, move: Move, cancelled: Utils.BooleanHolder): string | null { + getFailedText(user: Pokemon, target: Pokemon, move: Move): string | undefined { for (const attr of this.attrs) { - const failedText = attr.getFailedText(user, target, move, cancelled); - if (failedText !== null) { + const failedText = attr.getFailedText(user, target, move); + if (failedText) { return failedText; } } - return null; } /** @@ -692,7 +771,7 @@ export default class Move implements Localizable { * @param move {@linkcode Move} using the move * @returns integer representing the total benefitScore */ - getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { + getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { let score = 0; for (const attr of this.attrs) { @@ -713,10 +792,10 @@ export default class Move implements Localizable { * @param move {@linkcode Move} using the move * @returns integer representing the total benefitScore */ - getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { + getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { let score = 0; - if (target.getAlly()?.getTag(BattlerTagType.COMMANDED)?.getSourcePokemon(target.scene) === target) { + if (target.getAlly()?.getTag(BattlerTagType.COMMANDED)?.getSourcePokemon() === target) { return 20 * (target.isPlayer() === user.isPlayer() ? -1 : 1); // always -20 with how the AI handles this score } @@ -748,10 +827,10 @@ export default class Move implements Localizable { const isOhko = this.hasAttr(OneHitKOAccuracyAttr); if (!isOhko) { - user.scene.applyModifiers(PokemonMoveAccuracyBoosterModifier, user.isPlayer(), user, moveAccuracy); + globalScene.applyModifiers(PokemonMoveAccuracyBoosterModifier, user.isPlayer(), user, moveAccuracy); } - if (user.scene.arena.weather?.weatherType === WeatherType.FOG) { + if (globalScene.arena.weather?.weatherType === WeatherType.FOG) { /** * The 0.9 multiplier is PokeRogue-only implementation, Bulbapedia uses 3/5 * See Fog {@link https://bulbapedia.bulbagarden.net/wiki/Fog} @@ -759,7 +838,7 @@ export default class Move implements Localizable { moveAccuracy.value = Math.floor(moveAccuracy.value * 0.9); } - if (!isOhko && user.scene.arena.getTag(ArenaTagType.GRAVITY)) { + if (!isOhko && globalScene.arena.getTag(ArenaTagType.GRAVITY)) { moveAccuracy.value = Math.floor(moveAccuracy.value * 1.67); } @@ -784,7 +863,7 @@ export default class Move implements Localizable { applyPreAttackAbAttrs(MoveTypeChangeAbAttr, source, target, this, true, null, typeChangeMovePowerMultiplier); const sourceTeraType = source.getTeraType(); - if (sourceTeraType !== Type.UNKNOWN && sourceTeraType === this.type && power.value < 60 && this.priority <= 0 && !this.hasAttr(MultiHitAttr) && !source.scene.findModifier(m => m instanceof PokemonMultiHitModifier && m.pokemonId === source.id)) { + if (source.isTerastallized && sourceTeraType === this.type && power.value < 60 && this.priority <= 0 && !this.hasAttr(MultiHitAttr) && !globalScene.findModifier(m => m instanceof PokemonMultiHitModifier && m.pokemonId === source.id)) { power.value = 60; } @@ -795,7 +874,7 @@ export default class Move implements Localizable { } const fieldAuras = new Set( - source.scene.getField(true) + globalScene.getField(true) .map((p) => p.getAbilityAttrs(FieldMoveTypePowerBoostAbAttr).filter(attr => { const condition = attr.getCondition(); return (!condition || condition(p)); @@ -806,7 +885,7 @@ export default class Move implements Localizable { aura.applyPreAttack(source, null, simulated, target, this, [ power ]); } - const alliedField: Pokemon[] = source instanceof PlayerPokemon ? source.scene.getPlayerField() : source.scene.getEnemyField(); + const alliedField: Pokemon[] = source instanceof PlayerPokemon ? globalScene.getPlayerField() : globalScene.getEnemyField(); alliedField.forEach(p => applyPreAttackAbAttrs(UserFieldMoveTypePowerBoostAbAttr, p, target, this, simulated, power)); power.value *= typeChangeMovePowerMultiplier.value; @@ -819,8 +898,8 @@ export default class Move implements Localizable { applyMoveAttrs(VariablePowerAttr, source, target, this, power); if (!this.hasAttr(TypelessAttr)) { - source.scene.arena.applyTags(WeakenMoveTypeTag, simulated, this.type, power); - source.scene.applyModifiers(AttackTypeBoosterModifier, source.isPlayer(), source, this.type, power); + globalScene.arena.applyTags(WeakenMoveTypeTag, simulated, this.type, power); + globalScene.applyModifiers(AttackTypeBoosterModifier, source.isPlayer(), source, this.type, power); } if (source.getTag(HelpingHandTag)) { @@ -839,6 +918,46 @@ export default class Move implements Localizable { return priority.value; } + /** + * Calculate the [Expected Power](https://en.wikipedia.org/wiki/Expected_value) per turn + * of this move, taking into account multi hit moves, accuracy, and the number of turns it + * takes to execute. + * + * Does not (yet) consider the current field effects or the user's abilities. + */ + calculateEffectivePower(): number { + let effectivePower: number; + // Triple axel and triple kick are easier to special case. + if (this.id === Moves.TRIPLE_AXEL) { + effectivePower = 94.14; + } else if (this.id === Moves.TRIPLE_KICK) { + effectivePower = 47.07; + } else { + const multiHitAttr = this.getAttrs(MultiHitAttr)[0]; + if (multiHitAttr) { + effectivePower = multiHitAttr.calculateExpectedHitCount(this) * this.power; + } else { + effectivePower = this.power * (this.accuracy === -1 ? 1 : this.accuracy / 100); + } + } + /** The number of turns the user must commit to for this move's damage */ + let numTurns = 1; + + // These are intentionally not else-if statements even though there are no + // pokemon moves that have more than one of these attributes. This allows + // the function to future proof new moves / custom move behaviors. + if (this.hasAttr(DelayedAttackAttr)) { + numTurns += 2; + } + if (this.hasAttr(RechargeAttr)) { + numTurns += 1; + } + if (this.isChargingMove()) { + numTurns += 1; + } + return effectivePower / numTurns; + } + /** * Returns `true` if this move can be given additional strikes * by enhancing effects. @@ -880,7 +999,7 @@ export default class Move implements Localizable { } export class AttackMove extends Move { - constructor(id: Moves, type: Type, category: MoveCategory, power: integer, accuracy: integer, pp: integer, chance: integer, priority: integer, generation: integer) { + constructor(id: Moves, type: Type, category: MoveCategory, power: number, accuracy: number, pp: number, chance: number, priority: number, generation: number) { super(id, type, category, MoveTarget.NEAR_OTHER, power, accuracy, pp, chance, priority, generation); /** @@ -892,58 +1011,48 @@ export class AttackMove extends Move { } } - getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { - let ret = super.getTargetBenefitScore(user, target, move); - + /** + * Compute the benefit score of this move based on the offensive stat used and the move's power. + * @param user The Pokemon using the move + * @param target The Pokemon targeted by the move + * @param move The move being used + * @returns The benefit score of using this move + */ + getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { + // TODO: Properly handle foul play, body press, and opponent stat stages. + const ret = super.getTargetBenefitScore(user, target, move); let attackScore = 0; const effectiveness = target.getAttackTypeEffectiveness(this.type, user, undefined, undefined, this); - attackScore = Math.pow(effectiveness - 1, 2) * effectiveness < 1 ? -2 : 2; - if (attackScore) { - if (this.category === MoveCategory.PHYSICAL) { - const atk = new Utils.IntegerHolder(user.getEffectiveStat(Stat.ATK, target)); - applyMoveAttrs(VariableAtkAttr, user, target, move, atk); - if (atk.value > user.getEffectiveStat(Stat.SPATK, target)) { - const statRatio = user.getEffectiveStat(Stat.SPATK, target) / atk.value; - if (statRatio <= 0.75) { - attackScore *= 2; - } else if (statRatio <= 0.875) { - attackScore *= 1.5; - } - } - } else { - const spAtk = new Utils.IntegerHolder(user.getEffectiveStat(Stat.SPATK, target)); - applyMoveAttrs(VariableAtkAttr, user, target, move, spAtk); - if (spAtk.value > user.getEffectiveStat(Stat.ATK, target)) { - const statRatio = user.getEffectiveStat(Stat.ATK, target) / spAtk.value; - if (statRatio <= 0.75) { - attackScore *= 2; - } else if (statRatio <= 0.875) { - attackScore *= 1.5; - } - } - } - - const power = new Utils.NumberHolder(this.power); - applyMoveAttrs(VariablePowerAttr, user, target, move, power); - - attackScore += Math.floor(power.value / 5); + attackScore = Math.pow(effectiveness - 1, 2) * (effectiveness < 1 ? -2 : 2); + const [ thisStat, offStat ]: EffectiveStat[] = this.category === MoveCategory.PHYSICAL ? [ Stat.ATK, Stat.SPATK ] : [ Stat.SPATK, Stat.ATK ]; + const statHolder = new Utils.NumberHolder(user.getEffectiveStat(thisStat, target)); + const offStatValue = user.getEffectiveStat(offStat, target); + applyMoveAttrs(VariableAtkAttr, user, target, move, statHolder); + const statRatio = offStatValue / statHolder.value; + if (statRatio <= 0.75) { + attackScore *= 2; + } else if (statRatio <= 0.875) { + attackScore *= 1.5; } - ret -= attackScore; + const power = new Utils.NumberHolder(this.calculateEffectivePower()); + applyMoveAttrs(VariablePowerAttr, user, target, move, power); - return ret; + attackScore += Math.floor(power.value / 5); + + return ret - attackScore; } } export class StatusMove extends Move { - constructor(id: Moves, type: Type, accuracy: integer, pp: integer, chance: integer, priority: integer, generation: integer) { + constructor(id: Moves, type: Type, accuracy: number, pp: number, chance: number, priority: number, generation: number) { super(id, type, MoveCategory.STATUS, MoveTarget.NEAR_OTHER, -1, accuracy, pp, chance, priority, generation); } } export class SelfStatusMove extends Move { - constructor(id: Moves, type: Type, accuracy: integer, pp: integer, chance: integer, priority: integer, generation: integer) { + constructor(id: Moves, type: Type, accuracy: number, pp: number, chance: number, priority: number, generation: number) { super(id, type, MoveCategory.STATUS, MoveTarget.USER, -1, accuracy, pp, chance, priority, generation); } } @@ -982,7 +1091,7 @@ function ChargeMove(Base: TBase) { * @param target the {@linkcode Pokemon} targeted by this move (optional) */ showChargeText(user: Pokemon, target?: Pokemon): void { - user.scene.queueMessage(this._chargeText + globalScene.queueMessage(this._chargeText .replace("{USER}", getPokemonNameWithAffix(user)) .replace("{TARGET}", getPokemonNameWithAffix(target)) ); @@ -1050,7 +1159,7 @@ export abstract class MoveAttr { * @param args Set of unique arguments needed by this attribute * @returns true if application of the ability succeeds */ - apply(user: Pokemon | null, target: Pokemon | null, move: Move, args: any[]): boolean | Promise { + apply(user: Pokemon | null, target: Pokemon | null, move: Move, args: any[]): boolean { return true; } @@ -1067,11 +1176,10 @@ export abstract class MoveAttr { * @param user {@linkcode Pokemon} using the move * @param target {@linkcode Pokemon} target of the move * @param move {@linkcode Move} with this attribute - * @param cancelled {@linkcode Utils.BooleanHolder} which stores if the move should fail * @returns the string representing failure of this {@linkcode Move} */ - getFailedText(user: Pokemon, target: Pokemon, move: Move, cancelled: Utils.BooleanHolder): string | null { - return null; + getFailedText(user: Pokemon, target: Pokemon, move: Move): string | undefined { + return; } /** @@ -1079,7 +1187,7 @@ export abstract class MoveAttr { * @see {@linkcode EnemyPokemon.getNextMove} * @virtual */ - getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { + getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { return 0; } @@ -1088,7 +1196,7 @@ export abstract class MoveAttr { * @see {@linkcode EnemyPokemon.getNextMove} * @virtual */ - getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { + getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { return 0; } } @@ -1193,7 +1301,7 @@ export class MoveEffectAttr extends MoveAttr { } /** Applies move effects so long as they are able based on {@linkcode canApply} */ - apply(user: Pokemon, target: Pokemon, move: Move, args?: any[]): boolean | Promise { + apply(user: Pokemon, target: Pokemon, move: Move, args?: any[]): boolean { return this.canApply(user, target, move, args); } @@ -1206,14 +1314,14 @@ export class MoveEffectAttr extends MoveAttr { * @param selfEffect `true` if move targets user. * @returns Move effect chance value. */ - getMoveChance(user: Pokemon, target: Pokemon, move: Move, selfEffect?: Boolean, showAbility?: Boolean): integer { + getMoveChance(user: Pokemon, target: Pokemon, move: Move, selfEffect?: Boolean, showAbility?: Boolean): number { const moveChance = new Utils.NumberHolder(this.effectChanceOverride ?? move.chance); applyAbAttrs(MoveEffectChanceMultiplierAbAttr, user, null, false, moveChance, move, target, selfEffect, showAbility); if ((!move.hasAttr(FlinchAttr) || moveChance.value <= move.chance) && !move.hasAttr(SecretPowerAttr)) { const userSide = user.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; - user.scene.arena.applyTagsForSide(ArenaTagType.WATER_FIRE_PLEDGE, userSide, false, moveChance); + globalScene.arena.applyTagsForSide(ArenaTagType.WATER_FIRE_PLEDGE, userSide, false, moveChance); } if (!selfEffect) { @@ -1253,7 +1361,7 @@ export class MessageHeaderAttr extends MoveHeaderAttr { : this.message(user, move); if (message) { - user.scene.queueMessage(message); + globalScene.queueMessage(message); return true; } return false; @@ -1306,13 +1414,61 @@ export class PreMoveMessageAttr extends MoveAttr { ? this.message as string : this.message(user, target, move); if (message) { - user.scene.queueMessage(message, 500); + globalScene.queueMessage(message, 500); return true; } return false; } } +/** + * Attribute for moves that can be conditionally interrupted to be considered to + * have failed before their "useMove" message is displayed. Currently used by + * Focus Punch. + * @extends MoveAttr + */ +export class PreUseInterruptAttr extends MoveAttr { + protected message?: string | ((user: Pokemon, target: Pokemon, move: Move) => string); + protected overridesFailedMessage: boolean; + 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) { + super(); + this.message = message; + this.conditionFunc = conditionFunc ?? (() => true); + } + + /** + * Message to display when a move is interrupted. + * @param user {@linkcode Pokemon} using the move + * @param target {@linkcode Pokemon} target of the move + * @param move {@linkcode Move} with this attribute + */ + override apply(user: Pokemon, target: Pokemon, move: Move): boolean { + return this.conditionFunc(user, target, move); + } + + /** + * Message to display when a move is interrupted. + * @param user {@linkcode Pokemon} using the move + * @param target {@linkcode Pokemon} target of the move + * @param move {@linkcode Move} with this attribute + */ + 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) + : this.message(user, target, move); + return message; + } + } +} + /** * Attribute for Status moves that take attack type effectiveness * into consideration (i.e. {@linkcode https://bulbapedia.bulbagarden.net/wiki/Thunder_Wave_(move) | Thunder Wave}) @@ -1330,12 +1486,12 @@ export class IgnoreOpponentStatStagesAttr extends MoveAttr { export class HighCritAttr extends MoveAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.IntegerHolder).value++; + (args[0] as Utils.NumberHolder).value++; return true; } - getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { + getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { return 3; } } @@ -1347,27 +1503,27 @@ export class CritOnlyAttr extends MoveAttr { return true; } - getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { + getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { return 5; } } export class FixedDamageAttr extends MoveAttr { - private damage: integer; + private damage: number; - constructor(damage: integer) { + constructor(damage: number) { super(); this.damage = damage; } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.IntegerHolder).value = this.getDamage(user, target, move); + (args[0] as Utils.NumberHolder).value = this.getDamage(user, target, move); return true; } - getDamage(user: Pokemon, target: Pokemon, move: Move): integer { + getDamage(user: Pokemon, target: Pokemon, move: Move): number { return this.damage; } } @@ -1378,15 +1534,17 @@ export class UserHpDamageAttr extends FixedDamageAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.IntegerHolder).value = user.hp; + (args[0] as Utils.NumberHolder).value = user.hp; return true; } } export class TargetHalfHpDamageAttr extends FixedDamageAttr { - // the initial amount of hp the target had before the first hit - // used for multi lens + /** + * The initial amount of hp the target had before the first hit. + * Used for calculating multi lens damage. + */ private initialHp: number; constructor() { super(0); @@ -1410,12 +1568,10 @@ export class TargetHalfHpDamageAttr extends FixedDamageAttr { // multi lens added hit; use initialHp tracker to ensure correct damage (args[0] as Utils.NumberHolder).value = Utils.toDmgValue(this.initialHp / 2); return true; - break; case lensCount + 1: // parental bond added hit; calc damage as normal (args[0] as Utils.NumberHolder).value = Utils.toDmgValue(target.hp / 2); return true; - break; } } @@ -1430,7 +1586,7 @@ export class MatchHpAttr extends FixedDamageAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.IntegerHolder).value = target.hp - user.hp; + (args[0] as Utils.NumberHolder).value = target.hp - user.hp; return true; } @@ -1440,7 +1596,7 @@ export class MatchHpAttr extends FixedDamageAttr { } // TODO - /*getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { + /*getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { return 0; }*/ } @@ -1451,7 +1607,7 @@ export class CounterDamageAttr extends FixedDamageAttr { private moveFilter: MoveFilter; private multiplier: number; - constructor(moveFilter: MoveFilter, multiplier: integer) { + constructor(moveFilter: MoveFilter, multiplier: number) { super(0); this.moveFilter = moveFilter; @@ -1459,8 +1615,8 @@ export class CounterDamageAttr extends FixedDamageAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const damage = user.turnData.attacksReceived.filter(ar => this.moveFilter(allMoves[ar.move])).reduce((total: integer, ar: AttackMoveResult) => total + ar.damage, 0); - (args[0] as Utils.IntegerHolder).value = Utils.toDmgValue(damage * this.multiplier); + const damage = user.turnData.attacksReceived.filter(ar => this.moveFilter(allMoves[ar.move])).reduce((total: number, ar: AttackMoveResult) => total + ar.damage, 0); + (args[0] as Utils.NumberHolder).value = Utils.toDmgValue(damage * this.multiplier); return true; } @@ -1492,13 +1648,13 @@ export class RandomLevelDamageAttr extends FixedDamageAttr { export class ModifiedDamageAttr extends MoveAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const initialDamage = args[0] as Utils.IntegerHolder; + const initialDamage = args[0] as Utils.NumberHolder; initialDamage.value = this.getModifiedDamage(user, target, move, initialDamage.value); return true; } - getModifiedDamage(user: Pokemon, target: Pokemon, move: Move, damage: integer): integer { + getModifiedDamage(user: Pokemon, target: Pokemon, move: Move, damage: number): number { return damage; } } @@ -1512,11 +1668,25 @@ export class SurviveDamageAttr extends ModifiedDamageAttr { return (user, target, move) => target.hp > 1; } - getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { + getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { return target.hp > 1 ? 0 : -20; } } +export class SplashAttr extends MoveEffectAttr { + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + globalScene.queueMessage(i18next.t("moveTriggers:splash")); + return true; + } +} + +export class CelebrateAttr extends MoveEffectAttr { + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + globalScene.queueMessage(i18next.t("moveTriggers:celebrate", { playerName: loggedInUser?.username })); + return true; + } +} + export class RecoilAttr extends MoveEffectAttr { private useHp: boolean; private damageRatio: number; @@ -1546,7 +1716,7 @@ export class RecoilAttr extends MoveEffectAttr { } // Chloroblast and Struggle should not deal recoil damage if the move was not successful - if (this.useHp && [ MoveResult.FAIL, MoveResult.MISS ].includes(user.getLastXMoves(1)[0]?.result)) { + if (this.useHp && [ MoveResult.FAIL, MoveResult.MISS ].includes(user.getLastXMoves(1)[0]?.result ?? MoveResult.FAIL)) { return false; } @@ -1562,13 +1732,13 @@ export class RecoilAttr extends MoveEffectAttr { } user.damageAndUpdate(recoilDamage, HitResult.OTHER, false, true, true); - user.scene.queueMessage(i18next.t("moveTriggers:hitWithRecoil", { pokemonName: getPokemonNameWithAffix(user) })); + globalScene.queueMessage(i18next.t("moveTriggers:hitWithRecoil", { pokemonName: getPokemonNameWithAffix(user) })); user.turnData.damageTaken += recoilDamage; return true; } - getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { + getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { return Math.floor((move.power / 5) / -4); } } @@ -1599,7 +1769,7 @@ export class SacrificialAttr extends MoveEffectAttr { return true; } - getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { + getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { if (user.isBoss()) { return -20; } @@ -1637,7 +1807,7 @@ export class SacrificialAttrOnHit extends MoveEffectAttr { return true; } - getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { + getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { if (user.isBoss()) { return -20; } @@ -1674,12 +1844,12 @@ export class HalfSacrificialAttr extends MoveEffectAttr { applyAbAttrs(BlockNonDirectDamageAbAttr, user, cancelled); if (!cancelled.value) { user.damageAndUpdate(Utils.toDmgValue(user.getMaxHp() / 2), HitResult.OTHER, false, true, true); - user.scene.queueMessage(i18next.t("moveTriggers:cutHpPowerUpMove", { pokemonName: getPokemonNameWithAffix(user) })); // Queue recoil message + globalScene.queueMessage(i18next.t("moveTriggers:cutHpPowerUpMove", { pokemonName: getPokemonNameWithAffix(user) })); // Queue recoil message } return true; } - getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { + getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { if (user.isBoss()) { return -10; } @@ -1696,11 +1866,14 @@ export class HalfSacrificialAttr extends MoveEffectAttr { export class AddSubstituteAttr extends MoveEffectAttr { /** The ratio of the user's max HP that is required to apply this effect */ private hpCost: number; + /** Whether the damage taken should be rounded up (Shed Tail rounds up) */ + private roundUp: boolean; - constructor(hpCost: number = 0.25) { + constructor(hpCost: number, roundUp: boolean) { super(true); this.hpCost = hpCost; + this.roundUp = roundUp; } /** @@ -1716,7 +1889,8 @@ export class AddSubstituteAttr extends MoveEffectAttr { return false; } - user.damageAndUpdate(Math.floor(user.getMaxHp() * this.hpCost), HitResult.OTHER, false, true, true); + const damageTaken = this.roundUp ? Math.ceil(user.getMaxHp() * this.hpCost) : Math.floor(user.getMaxHp() * this.hpCost); + user.damageAndUpdate(damageTaken, HitResult.OTHER, false, true, true); user.addTag(BattlerTagType.SUBSTITUTE, 0, move.id, user.id); return true; } @@ -1729,16 +1903,19 @@ export class AddSubstituteAttr extends MoveEffectAttr { } getCondition(): MoveConditionFunc { - return (user, target, move) => !user.getTag(SubstituteTag) && user.hp > Math.floor(user.getMaxHp() * this.hpCost) && user.getMaxHp() > 1; + return (user, target, move) => !user.getTag(SubstituteTag) && user.hp > (this.roundUp ? Math.ceil(user.getMaxHp() * this.hpCost) : Math.floor(user.getMaxHp() * this.hpCost)) && user.getMaxHp() > 1; } - getFailedText(user: Pokemon, target: Pokemon, move: Move, cancelled: Utils.BooleanHolder): string | null { + /** + * Get the substitute-specific failure message if one should be displayed. + * @param user The pokemon using the move. + * @returns The substitute-specific failure message if the conditions apply, otherwise `undefined` + */ + getFailedText(user: Pokemon, _target: Pokemon, _move: Move): string | undefined { if (user.getTag(SubstituteTag)) { return i18next.t("moveTriggers:substituteOnOverlap", { pokemonName: getPokemonNameWithAffix(user) }); } else if (user.hp <= Math.floor(user.getMaxHp() / 4) || user.getMaxHp() === 1) { return i18next.t("moveTriggers:substituteNotEnoughHp"); - } else { - return i18next.t("battle:attackFailed"); } } } @@ -1779,11 +1956,11 @@ export class HealAttr extends MoveEffectAttr { * This heals the target and shows the appropriate message. */ addHealPhase(target: Pokemon, healRatio: number) { - target.scene.unshiftPhase(new PokemonHealPhase(target.scene, target.getBattlerIndex(), + globalScene.unshiftPhase(new PokemonHealPhase(target.getBattlerIndex(), Utils.toDmgValue(target.getMaxHp() * healRatio), i18next.t("moveTriggers:healHp", { pokemonName: getPokemonNameWithAffix(target) }), true, !this.showAnim)); } - getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { + getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { const score = ((1 - (this.selfTarget ? user : target).getHpRatio()) * 20) - this.healRatio * 10; return Math.round(score / (1 - this.healRatio / 2)); } @@ -1819,11 +1996,11 @@ export class PartyStatusCureAttr extends MoveEffectAttr { if (!this.canApply(user, target, move, args)) { return false; } - const partyPokemon = user.isPlayer() ? user.scene.getPlayerParty() : user.scene.getEnemyParty(); + const partyPokemon = user.isPlayer() ? globalScene.getPlayerParty() : globalScene.getEnemyParty(); partyPokemon.forEach(p => this.cureStatus(p, user.id)); if (this.message) { - user.scene.queueMessage(this.message); + globalScene.queueMessage(this.message); } return true; @@ -1842,7 +2019,7 @@ export class PartyStatusCureAttr extends MoveEffectAttr { pokemon.resetStatus(); pokemon.updateInfo(); } else { - pokemon.scene.unshiftPhase(new ShowAbilityPhase(pokemon.scene, pokemon.id, pokemon.getPassiveAbility()?.id === this.abilityCondition)); + globalScene.unshiftPhase(new ShowAbilityPhase(pokemon.id, pokemon.getPassiveAbility()?.id === this.abilityCondition)); } } } @@ -1859,7 +2036,7 @@ export class FlameBurstAttr extends MoveEffectAttr { * @param args - n/a * @returns A boolean indicating whether the effect was successfully applied. */ - apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean | Promise { + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const targetAlly = target.getAlly(); const cancelled = new Utils.BooleanHolder(false); @@ -1875,7 +2052,7 @@ export class FlameBurstAttr extends MoveEffectAttr { return true; } - getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { + getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { return target.getAlly() ? -5 : 0; } } @@ -1897,11 +2074,11 @@ export class SacrificialFullRestoreAttr extends SacrificialAttr { } // We don't know which party member will be chosen, so pick the highest max HP in the party - const maxPartyMemberHp = user.scene.getPlayerParty().map(p => p.getMaxHp()).reduce((maxHp: integer, hp: integer) => Math.max(hp, maxHp), 0); + const party = user.isPlayer() ? globalScene.getPlayerParty() : globalScene.getEnemyParty(); + const maxPartyMemberHp = party.map(p => p.getMaxHp()).reduce((maxHp: number, hp: number) => Math.max(hp, maxHp), 0); - user.scene.pushPhase( + globalScene.pushPhase( new PokemonHealPhase( - user.scene, user.getBattlerIndex(), maxPartyMemberHp, i18next.t(this.moveMessage, { pokemonName: getPokemonNameWithAffix(user) }), @@ -1916,12 +2093,12 @@ export class SacrificialFullRestoreAttr extends SacrificialAttr { return true; } - getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { + getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { return -20; } getCondition(): MoveConditionFunc { - return (user, _target, _move) => user.scene.getPlayerParty().filter(p => p.isActive()).length > user.scene.currentBattle.getBattlerCount(); + return (user, _target, _move) => globalScene.getPlayerParty().filter(p => p.isActive()).length > globalScene.currentBattle.getBattlerCount(); } } @@ -1950,7 +2127,7 @@ export class IgnoreWeatherTypeDebuffAttr extends MoveAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const weatherModifier = args[0] as Utils.NumberHolder; //If the type-based attack power modifier due to weather (e.g. Water moves in Sun) is below 1, set it to 1 - if (user.scene.arena.weather?.weatherType === this.weather) { + if (globalScene.arena.weather?.weatherType === this.weather) { weatherModifier.value = Math.max(weatherModifier.value, 1); } return true; @@ -1964,8 +2141,8 @@ export abstract class WeatherHealAttr extends HealAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { let healRatio = 0.5; - if (!user.scene.arena.weather?.isEffectSuppressed(user.scene)) { - const weatherType = user.scene.arena.weather?.weatherType || WeatherType.NONE; + if (!globalScene.arena.weather?.isEffectSuppressed()) { + const weatherType = globalScene.arena.weather?.weatherType || WeatherType.NONE; healRatio = this.getWeatherHealRatio(weatherType); } this.addHealPhase(user, healRatio); @@ -2112,7 +2289,7 @@ export class HitHealAttr extends MoveEffectAttr { message = ""; } } - user.scene.unshiftPhase(new PokemonHealPhase(user.scene, user.getBattlerIndex(), healAmount, message, false, true)); + globalScene.unshiftPhase(new PokemonHealPhase(user.getBattlerIndex(), healAmount, message, false, true)); return true; } @@ -2123,7 +2300,7 @@ export class HitHealAttr extends MoveEffectAttr { * @param move {@linkcode Move} being used * @returns an integer. Higher means enemy is more likely to use that move. */ - getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { + getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { if (this.healStat) { const healAmount = target.getEffectiveStat(this.healStat); return Math.floor(Math.max(0, (Math.min(1, (healAmount + user.hp) / user.getMaxHp() - 0.33))) / user.getHpRatio()); @@ -2143,7 +2320,7 @@ export class IncrementMovePriorityAttr extends MoveAttr { /** The condition for a move's priority being incremented */ private moveIncrementFunc: (pokemon: Pokemon, target:Pokemon, move: Move) => boolean; /** The amount to increment priority by, if condition passes. */ - private increaseAmount: integer; + private increaseAmount: number; constructor(moveIncrementFunc: (pokemon: Pokemon, target:Pokemon, move: Move) => boolean, increaseAmount = 1) { super(); @@ -2157,7 +2334,7 @@ export class IncrementMovePriorityAttr extends MoveAttr { * @param user {@linkcode Pokemon} using this move * @param target {@linkcode Pokemon} target of this move * @param move {@linkcode Move} being used - * @param args [0] {@linkcode Utils.IntegerHolder} for move priority. + * @param args [0] {@linkcode Utils.NumberHolder} for move priority. * @returns true if function succeeds */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { @@ -2165,7 +2342,7 @@ export class IncrementMovePriorityAttr extends MoveAttr { return false; } - (args[0] as Utils.IntegerHolder).value += this.increaseAmount; + (args[0] as Utils.NumberHolder).value += this.increaseAmount; return true; } } @@ -2203,7 +2380,7 @@ export class MultiHitAttr extends MoveAttr { * @param user {@linkcode Pokemon} that used the attack * @param target {@linkcode Pokemon} targeted by the attack * @param move {@linkcode Move} being used - * @param args [0] {@linkcode Utils.IntegerHolder} storing the hit count of the attack + * @param args [0] {@linkcode Utils.NumberHolder} storing the hit count of the attack * @returns True */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { @@ -2227,18 +2404,18 @@ export class MultiHitAttr extends MoveAttr { * @param target {@linkcode Pokemon} targeted by the attack * @returns The number of hits this attack should deal */ - getHitCount(user: Pokemon, target: Pokemon): integer { + getHitCount(user: Pokemon, target: Pokemon): number { switch (this.multiHitType) { case MultiHitType._2_TO_5: { - const rand = user.randSeedInt(16); - const hitValue = new Utils.IntegerHolder(rand); + const rand = user.randSeedInt(20); + const hitValue = new Utils.NumberHolder(rand); applyAbAttrs(MaxMultiHitAbAttr, user, null, false, hitValue); - if (hitValue.value >= 10) { + if (hitValue.value >= 13) { return 2; - } else if (hitValue.value >= 4) { + } else if (hitValue.value >= 6) { return 3; - } else if (hitValue.value >= 2) { + } else if (hitValue.value >= 3) { return 4; } else { return 5; @@ -2251,13 +2428,53 @@ export class MultiHitAttr extends MoveAttr { case MultiHitType._10: return 10; case MultiHitType.BEAT_UP: - const party = user.isPlayer() ? user.scene.getPlayerParty() : user.scene.getEnemyParty(); + const party = user.isPlayer() ? globalScene.getPlayerParty() : globalScene.getEnemyParty(); // No status means the ally pokemon can contribute to Beat Up return party.reduce((total, pokemon) => { return total + (pokemon.id === user.id ? 1 : pokemon?.status && pokemon.status.effect !== StatusEffect.NONE ? 0 : 1); }, 0); } } + + /** + * Calculate the expected number of hits given this attribute's {@linkcode MultiHitType}, + * the move's accuracy, and a number of situational parameters. + * + * @param move - The move that this attribtue is applied to + * @param partySize - The size of the user's party, used for {@linkcode Moves.BEAT_UP | Beat Up} (default: `1`) + * @param maxMultiHit - Whether the move should always hit the maximum number of times, e.g. due to {@linkcode Abilities.SKILL_LINK | Skill Link} (default: `false`) + * @param ignoreAcc - `true` if the move should ignore accuracy checks, e.g. due to {@linkcode Abilities.NO_GUARD | No Guard} (default: `false`) + */ + calculateExpectedHitCount(move: Move, { ignoreAcc = false, maxMultiHit = false, partySize = 1 }: {ignoreAcc?: boolean, maxMultiHit?: boolean, partySize?: number} = {}): number { + let expectedHits: number; + switch (this.multiHitType) { + case MultiHitType._2_TO_5: + expectedHits = maxMultiHit ? 5 : 3.1; + break; + case MultiHitType._2: + expectedHits = 2; + break; + case MultiHitType._3: + expectedHits = 3; + break; + case MultiHitType._10: + expectedHits = 10; + break; + case MultiHitType.BEAT_UP: + // Estimate that half of the party can contribute to beat up. + expectedHits = Math.max(1, partySize / 2); + break; + } + if (ignoreAcc || move.accuracy === -1) { + return expectedHits; + } + const acc = move.accuracy / 100; + if (move.hasFlag(MoveFlags.CHECK_ALL_HITS) && !maxMultiHit) { + // N.B. No moves should be the _2_TO_5 variant and have the CHECK_ALL_HITS flag. + return acc * (1 - Math.pow(acc, expectedHits)) / (1 - acc); + } + return expectedHits *= acc; + } } export class ChangeMultiHitTypeAttr extends MoveAttr { @@ -2270,7 +2487,7 @@ export class ChangeMultiHitTypeAttr extends MoveAttr { export class WaterShurikenMultiHitTypeAttr extends ChangeMultiHitTypeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (user.species.speciesId === Species.GRENINJA && user.hasAbility(Abilities.BATTLE_BOND) && user.formIndex === 2) { - (args[0] as Utils.IntegerHolder).value = MultiHitType._3; + (args[0] as Utils.NumberHolder).value = MultiHitType._3; return true; } return false; @@ -2309,7 +2526,7 @@ export class StatusEffectAttr extends MoveEffectAttr { if (user !== target && target.isSafeguarded(user)) { if (move.category === MoveCategory.STATUS) { - user.scene.queueMessage(i18next.t("moveTriggers:safeguard", { targetName: getPokemonNameWithAffix(target) })); + globalScene.queueMessage(i18next.t("moveTriggers:safeguard", { targetName: getPokemonNameWithAffix(target) })); } return false; } @@ -2399,36 +2616,31 @@ export class StealHeldItemChanceAttr extends MoveEffectAttr { this.chance = chance; } - apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise { - return new Promise(resolve => { - if (move.hitsSubstitute(user, target)) { - return resolve(false); - } - const rand = Phaser.Math.RND.realInRange(0, 1); - if (rand >= this.chance) { - return resolve(false); - } - const heldItems = this.getTargetHeldItems(target).filter(i => i.isTransferable); - if (heldItems.length) { - const poolType = target.isPlayer() ? ModifierPoolType.PLAYER : target.hasTrainer() ? ModifierPoolType.TRAINER : ModifierPoolType.WILD; - const highestItemTier = heldItems.map(m => m.type.getOrInferTier(poolType)).reduce((highestTier, tier) => Math.max(tier!, highestTier), 0); // TODO: is the bang after tier correct? - const tierHeldItems = heldItems.filter(m => m.type.getOrInferTier(poolType) === highestItemTier); - const stolenItem = tierHeldItems[user.randSeedInt(tierHeldItems.length)]; - user.scene.tryTransferHeldItemModifier(stolenItem, user, false).then(success => { - if (success) { - user.scene.queueMessage(i18next.t("moveTriggers:stoleItem", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), itemName: stolenItem.type.name })); - } - resolve(success); - }); - return; - } + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + if (move.hitsSubstitute(user, target)) { + return false; + } - resolve(false); - }); + const rand = Phaser.Math.RND.realInRange(0, 1); + if (rand >= this.chance) { + return false; + } + const heldItems = this.getTargetHeldItems(target).filter((i) => i.isTransferable); + if (heldItems.length) { + const poolType = target.isPlayer() ? ModifierPoolType.PLAYER : target.hasTrainer() ? ModifierPoolType.TRAINER : ModifierPoolType.WILD; + const highestItemTier = heldItems.map((m) => m.type.getOrInferTier(poolType)).reduce((highestTier, tier) => Math.max(tier!, highestTier), 0); // TODO: is the bang after tier correct? + const tierHeldItems = heldItems.filter((m) => m.type.getOrInferTier(poolType) === highestItemTier); + const stolenItem = tierHeldItems[user.randSeedInt(tierHeldItems.length)]; + if (globalScene.tryTransferHeldItemModifier(stolenItem, user, false)) { + globalScene.queueMessage(i18next.t("moveTriggers:stoleItem", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), itemName: stolenItem.type.name })); + return true; + } + } + return false; } getTargetHeldItems(target: Pokemon): PokemonHeldItemModifier[] { - return target.scene.findModifiers(m => m instanceof PokemonHeldItemModifier + return globalScene.findModifiers(m => m instanceof PokemonHeldItemModifier && m.pokemonId === target.id, target.isPlayer()) as PokemonHeldItemModifier[]; } @@ -2496,13 +2708,13 @@ export class RemoveHeldItemAttr extends MoveEffectAttr { // Decrease item amount and update icon target.loseHeldItem(removedItem); - target.scene.updateModifiers(target.isPlayer()); + globalScene.updateModifiers(target.isPlayer()); if (this.berriesOnly) { - user.scene.queueMessage(i18next.t("moveTriggers:incineratedItem", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), itemName: removedItem.type.name })); + globalScene.queueMessage(i18next.t("moveTriggers:incineratedItem", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), itemName: removedItem.type.name })); } else { - user.scene.queueMessage(i18next.t("moveTriggers:knockedOffItem", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), itemName: removedItem.type.name })); + globalScene.queueMessage(i18next.t("moveTriggers:knockedOffItem", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), itemName: removedItem.type.name })); } } @@ -2510,7 +2722,7 @@ export class RemoveHeldItemAttr extends MoveEffectAttr { } getTargetHeldItems(target: Pokemon): PokemonHeldItemModifier[] { - return target.scene.findModifiers(m => m instanceof PokemonHeldItemModifier + return globalScene.findModifiers(m => m instanceof PokemonHeldItemModifier && m.pokemonId === target.id, target.isPlayer()) as PokemonHeldItemModifier[]; } @@ -2552,7 +2764,7 @@ export class EatBerryAttr extends MoveEffectAttr { } this.chosenBerry = heldBerries[user.randSeedInt(heldBerries.length)]; const preserve = new Utils.BooleanHolder(false); - target.scene.applyModifiers(PreserveBerryModifier, target.isPlayer(), target, preserve); // check for berry pouch preservation + globalScene.applyModifiers(PreserveBerryModifier, target.isPlayer(), target, preserve); // check for berry pouch preservation if (!preserve.value) { this.reduceBerryModifier(target); } @@ -2561,7 +2773,7 @@ export class EatBerryAttr extends MoveEffectAttr { } getTargetHeldBerries(target: Pokemon): BerryModifier[] { - return target.scene.findModifiers(m => m instanceof BerryModifier + return globalScene.findModifiers(m => m instanceof BerryModifier && (m as BerryModifier).pokemonId === target.id, target.isPlayer()) as BerryModifier[]; } @@ -2569,7 +2781,7 @@ export class EatBerryAttr extends MoveEffectAttr { if (this.chosenBerry) { target.loseHeldItem(this.chosenBerry); } - target.scene.updateModifiers(target.isPlayer()); + globalScene.updateModifiers(target.isPlayer()); } eatBerry(consumer: Pokemon, berryOwner?: Pokemon) { @@ -2612,7 +2824,7 @@ export class StealEatBerryAttr extends EatBerryAttr { this.chosenBerry = heldBerries[user.randSeedInt(heldBerries.length)]; applyPostItemLostAbAttrs(PostItemLostAbAttr, target, false); const message = i18next.t("battle:stealEatBerry", { pokemonName: user.name, targetName: target.name, berryName: this.chosenBerry.type.name }); - user.scene.queueMessage(message); + globalScene.queueMessage(message); this.reduceBerryModifier(target); this.eatBerry(user, target); return true; @@ -2660,7 +2872,7 @@ export class HealStatusEffectAttr extends MoveEffectAttr { const pokemon = this.selfTarget ? user : target; if (pokemon.status && this.effects.includes(pokemon.status.effect)) { - pokemon.scene.queueMessage(getStatusEffectHealText(pokemon.status.effect, getPokemonNameWithAffix(pokemon))); + globalScene.queueMessage(getStatusEffectHealText(pokemon.status.effect, getPokemonNameWithAffix(pokemon))); pokemon.resetStatus(); pokemon.updateInfo(); @@ -2674,7 +2886,7 @@ export class HealStatusEffectAttr extends MoveEffectAttr { return this.effects.includes(effect); } - getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { + getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { return user.status ? 10 : 0; } } @@ -2695,7 +2907,7 @@ export class BypassSleepAttr extends MoveAttr { * @param target * @param move */ - getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { + getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { return user.status && user.status.effect === StatusEffect.SLEEP ? 200 : -10; } } @@ -2731,11 +2943,11 @@ export class WeatherChangeAttr extends MoveEffectAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - return user.scene.arena.trySetWeather(this.weatherType, true); + return globalScene.arena.trySetWeather(this.weatherType, true); } getCondition(): MoveConditionFunc { - return (user, target, move) => !user.scene.arena.weather || (user.scene.arena.weather.weatherType !== this.weatherType && !user.scene.arena.weather.isImmutable()); + return (user, target, move) => !globalScene.arena.weather || (globalScene.arena.weather.weatherType !== this.weatherType && !globalScene.arena.weather.isImmutable()); } } @@ -2749,8 +2961,8 @@ export class ClearWeatherAttr extends MoveEffectAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - if (user.scene.arena.weather?.weatherType === this.weatherType) { - return user.scene.arena.trySetWeather(WeatherType.NONE, true); + if (globalScene.arena.weather?.weatherType === this.weatherType) { + return globalScene.arena.trySetWeather(WeatherType.NONE, true); } return false; @@ -2767,16 +2979,16 @@ export class TerrainChangeAttr extends MoveEffectAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - return user.scene.arena.trySetTerrain(this.terrainType, true, true); + return globalScene.arena.trySetTerrain(this.terrainType, true, true); } getCondition(): MoveConditionFunc { - return (user, target, move) => !user.scene.arena.terrain || (user.scene.arena.terrain.terrainType !== this.terrainType); + return (user, target, move) => !globalScene.arena.terrain || (globalScene.arena.terrain.terrainType !== this.terrainType); } getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { // TODO: Expand on this - return user.scene.arena.terrain ? 0 : 6; + return globalScene.arena.terrain ? 0 : 6; } } @@ -2786,7 +2998,7 @@ export class ClearTerrainAttr extends MoveEffectAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - return user.scene.arena.trySetTerrain(TerrainType.NONE, true, true); + return globalScene.arena.trySetTerrain(TerrainType.NONE, true, true); } } @@ -2855,12 +3067,12 @@ export class InstantChargeAttr extends MoveAttr { export class WeatherInstantChargeAttr extends InstantChargeAttr { constructor(weatherTypes: WeatherType[]) { super((user, move) => { - const currentWeather = user.scene.arena.weather; + const currentWeather = globalScene.arena.weather; if (Utils.isNullOrUndefined(currentWeather?.weatherType)) { return false; } else { - return !currentWeather?.isEffectSuppressed(user.scene) + return !currentWeather?.isEffectSuppressed() && weatherTypes.includes(currentWeather?.weatherType); } }); @@ -2868,9 +3080,7 @@ export class WeatherInstantChargeAttr extends InstantChargeAttr { } export class OverrideMoveEffectAttr extends MoveAttr { - apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean | Promise { - //const overridden = args[0] as Utils.BooleanHolder; - //const virtual = arg[1] as boolean; + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { return true; } } @@ -2896,26 +3106,27 @@ export class DelayedAttackAttr extends OverrideMoveEffectAttr { this.chargeText = chargeText; } - apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise { + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { // Edge case for the move applied on a pokemon that has fainted if (!target) { - return Promise.resolve(true); + return true; } - const side = target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; - return new Promise(resolve => { - if (args.length < 2 || !args[1]) { - new MoveChargeAnim(this.chargeAnim, move.id, user).play(user.scene, false, () => { - (args[0] as Utils.BooleanHolder).value = true; - user.scene.queueMessage(this.chargeText.replace("{TARGET}", getPokemonNameWithAffix(target)).replace("{USER}", getPokemonNameWithAffix(user))); - user.pushMoveHistory({ move: move.id, targets: [ target.getBattlerIndex() ], result: MoveResult.OTHER }); - user.scene.arena.addTag(this.tagType, 3, move.id, user.id, side, false, target.getBattlerIndex()); - resolve(true); - }); - } else { - user.scene.ui.showText(i18next.t("moveTriggers:tookMoveAttack", { pokemonName: getPokemonNameWithAffix(user.scene.getPokemonById(target.id) ?? undefined), moveName: move.name }), null, () => resolve(true)); - } - }); + const overridden = args[0] as Utils.BooleanHolder; + const virtual = args[1] as boolean; + + if (!virtual) { + overridden.value = true; + globalScene.unshiftPhase(new MoveAnimPhase(new MoveChargeAnim(this.chargeAnim, move.id, user))); + globalScene.queueMessage(this.chargeText.replace("{TARGET}", getPokemonNameWithAffix(target)).replace("{USER}", getPokemonNameWithAffix(user))); + user.pushMoveHistory({ move: move.id, targets: [ target.getBattlerIndex() ], result: MoveResult.OTHER }); + const side = target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; + globalScene.arena.addTag(this.tagType, 3, move.id, user.id, side, false, target.getBattlerIndex()); + } else { + globalScene.queueMessage(i18next.t("moveTriggers:tookMoveAttack", { pokemonName: getPokemonNameWithAffix(globalScene.getPokemonById(target.id) ?? undefined), moveName: move.name })); + } + + return true; } } @@ -2942,29 +3153,29 @@ export class AwaitCombinedPledgeAttr extends OverrideMoveEffectAttr { override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (user.turnData.combiningPledge) { // "The two moves have become one!\nIt's a combined move!" - user.scene.queueMessage(i18next.t("moveTriggers:combiningPledge")); + globalScene.queueMessage(i18next.t("moveTriggers:combiningPledge")); return false; } const overridden = args[0] as Utils.BooleanHolder; - const allyMovePhase = user.scene.findPhase((phase) => phase instanceof MovePhase && phase.pokemon.isPlayer() === user.isPlayer()); + const allyMovePhase = globalScene.findPhase((phase) => phase instanceof MovePhase && phase.pokemon.isPlayer() === user.isPlayer()); if (allyMovePhase) { const allyMove = allyMovePhase.move.getMove(); if (allyMove !== move && allyMove.hasAttr(AwaitCombinedPledgeAttr)) { [ user, allyMovePhase.pokemon ].forEach((p) => p.turnData.combiningPledge = move.id); // "{userPokemonName} is waiting for {allyPokemonName}'s move..." - user.scene.queueMessage(i18next.t("moveTriggers:awaitingPledge", { + globalScene.queueMessage(i18next.t("moveTriggers:awaitingPledge", { userPokemonName: getPokemonNameWithAffix(user), allyPokemonName: getPokemonNameWithAffix(allyMovePhase.pokemon) })); // Move the ally's MovePhase (if needed) so that the ally moves next - const allyMovePhaseIndex = user.scene.phaseQueue.indexOf(allyMovePhase); - const firstMovePhaseIndex = user.scene.phaseQueue.findIndex((phase) => phase instanceof MovePhase); + const allyMovePhaseIndex = globalScene.phaseQueue.indexOf(allyMovePhase); + const firstMovePhaseIndex = globalScene.phaseQueue.findIndex((phase) => phase instanceof MovePhase); if (allyMovePhaseIndex !== firstMovePhaseIndex) { - user.scene.prependToPhase(user.scene.phaseQueue.splice(allyMovePhaseIndex, 1)[0], MovePhase); + globalScene.prependToPhase(globalScene.phaseQueue.splice(allyMovePhaseIndex, 1)[0], MovePhase); } overridden.value = true; @@ -3046,7 +3257,7 @@ export class StatStageChangeAttr extends MoveEffectAttr { * @param args unused * @returns whether stat stages were changed */ - apply(user: Pokemon, target: Pokemon, move: Move, args?: any[]): boolean | Promise { + apply(user: Pokemon, target: Pokemon, move: Move, args?: any[]): boolean { if (!super.apply(user, target, move, args) || (this.condition && !this.condition(user, target, move))) { return false; } @@ -3058,18 +3269,18 @@ export class StatStageChangeAttr extends MoveEffectAttr { const moveChance = this.getMoveChance(user, target, move, this.selfTarget, true); if (moveChance < 0 || moveChance === 100 || user.randSeedInt(100) < moveChance) { const stages = this.getLevels(user); - user.scene.unshiftPhase(new StatStageChangePhase(user.scene, (this.selfTarget ? user : target).getBattlerIndex(), this.selfTarget, this.stats, stages, this.showMessage)); + globalScene.unshiftPhase(new StatStageChangePhase((this.selfTarget ? user : target).getBattlerIndex(), this.selfTarget, this.stats, stages, this.showMessage)); return true; } return false; } - getLevels(_user: Pokemon): integer { + getLevels(_user: Pokemon): number { return this.stages; } - getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { + getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { let ret = 0; const moveLevels = this.getLevels(user); for (const stat of this.stats) { @@ -3124,16 +3335,16 @@ export class SecretPowerAttr extends MoveEffectAttr { * Used to apply the secondary effect to the target Pokemon * @returns `true` if a secondary effect is successfully applied */ - override apply(user: Pokemon, target: Pokemon, move: Move, args?: any[]): boolean | Promise { + override apply(user: Pokemon, target: Pokemon, move: Move, args?: any[]): boolean { if (!super.apply(user, target, move, args)) { return false; } let secondaryEffect: MoveEffectAttr; - const terrain = user.scene.arena.getTerrainType(); + const terrain = globalScene.arena.getTerrainType(); if (terrain !== TerrainType.NONE) { secondaryEffect = this.determineTerrainEffect(terrain); } else { - const biome = user.scene.arena.biomeType; + const biome = globalScene.arena.biomeType; secondaryEffect = this.determineBiomeEffect(biome); } return secondaryEffect.apply(user, target, move, []); @@ -3279,11 +3490,11 @@ export class AcupressureStatStageChangeAttr extends MoveEffectAttr { super(); } - apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean | Promise { - const randStats = BATTLE_STATS.filter(s => target.getStatStage(s) < 6); + override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + const randStats = BATTLE_STATS.filter((s) => target.getStatStage(s) < 6); if (randStats.length > 0) { const boostStat = [ randStats[user.randSeedInt(randStats.length)] ]; - user.scene.unshiftPhase(new StatStageChangePhase(user.scene, target.getBattlerIndex(), this.selfTarget, boostStat, 2)); + globalScene.unshiftPhase(new StatStageChangePhase(target.getBattlerIndex(), this.selfTarget, boostStat, 2)); return true; } return false; @@ -3296,8 +3507,8 @@ export class GrowthStatStageChangeAttr extends StatStageChangeAttr { } getLevels(user: Pokemon): number { - if (!user.scene.arena.weather?.isEffectSuppressed(user.scene)) { - const weatherType = user.scene.arena.weather?.weatherType; + if (!globalScene.arena.weather?.isEffectSuppressed()) { + const weatherType = globalScene.arena.weather?.weatherType; if (weatherType === WeatherType.SUNNY || weatherType === WeatherType.HARSH_SUN) { return this.stages + 1; } @@ -3307,27 +3518,24 @@ export class GrowthStatStageChangeAttr extends StatStageChangeAttr { } export class CutHpStatStageBoostAttr extends StatStageChangeAttr { - private cutRatio: integer; + private cutRatio: number; private messageCallback: ((user: Pokemon) => void) | undefined; - constructor(stat: BattleStat[], levels: integer, cutRatio: integer, messageCallback?: ((user: Pokemon) => void) | undefined) { + constructor(stat: BattleStat[], levels: number, cutRatio: number, messageCallback?: ((user: Pokemon) => void) | undefined) { super(stat, levels, true); this.cutRatio = cutRatio; this.messageCallback = messageCallback; } - apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise { - return new Promise(resolve => { - user.damageAndUpdate(Utils.toDmgValue(user.getMaxHp() / this.cutRatio), HitResult.OTHER, false, true); - user.updateInfo().then(() => { - const ret = super.apply(user, target, move, args); - if (this.messageCallback) { - this.messageCallback(user); - } - resolve(ret); - }); - }); + override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + user.damageAndUpdate(Utils.toDmgValue(user.getMaxHp() / this.cutRatio), HitResult.OTHER, false, true); + user.updateInfo(); + const ret = super.apply(user, target, move, args); + if (this.messageCallback) { + this.messageCallback(user); + } + return ret; } getCondition(): MoveConditionFunc { @@ -3365,7 +3573,7 @@ export class OrderUpStatBoostAttr extends MoveEffectAttr { break; } - user.scene.unshiftPhase(new StatStageChangePhase(user.scene, user.getBattlerIndex(), this.selfTarget, [ increasedStat ], 1)); + globalScene.unshiftPhase(new StatStageChangePhase(user.getBattlerIndex(), this.selfTarget, [ increasedStat ], 1)); return true; } } @@ -3388,7 +3596,7 @@ export class CopyStatsAttr extends MoveEffectAttr { } target.updateInfo(); user.updateInfo(); - target.scene.queueMessage(i18next.t("moveTriggers:copiedStatChanges", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target) })); + globalScene.queueMessage(i18next.t("moveTriggers:copiedStatChanges", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target) })); return true; } @@ -3407,7 +3615,7 @@ export class InvertStatsAttr extends MoveEffectAttr { target.updateInfo(); user.updateInfo(); - target.scene.queueMessage(i18next.t("moveTriggers:invertStats", { pokemonName: getPokemonNameWithAffix(target) })); + globalScene.queueMessage(i18next.t("moveTriggers:invertStats", { pokemonName: getPokemonNameWithAffix(target) })); return true; } @@ -3419,28 +3627,27 @@ export class ResetStatsAttr extends MoveEffectAttr { super(); this.targetAllPokemon = targetAllPokemon; } - async apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise { - const promises: Promise[] = []; - if (this.targetAllPokemon) { // Target all pokemon on the field when Freezy Frost or Haze are used - const activePokemon = user.scene.getField(true); - activePokemon.forEach(p => promises.push(this.resetStats(p))); - target.scene.queueMessage(i18next.t("moveTriggers:statEliminated")); + + override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + if (this.targetAllPokemon) { + // Target all pokemon on the field when Freezy Frost or Haze are used + const activePokemon = globalScene.getField(true); + activePokemon.forEach((p) => this.resetStats(p)); + globalScene.queueMessage(i18next.t("moveTriggers:statEliminated")); } else { // Affects only the single target when Clear Smog is used if (!move.hitsSubstitute(user, target)) { - promises.push(this.resetStats(target)); - target.scene.queueMessage(i18next.t("moveTriggers:resetStats", { pokemonName: getPokemonNameWithAffix(target) })); + this.resetStats(target); + globalScene.queueMessage(i18next.t("moveTriggers:resetStats", { pokemonName: getPokemonNameWithAffix(target) })); } } - - await Promise.all(promises); return true; } - async resetStats(pokemon: Pokemon): Promise { + private resetStats(pokemon: Pokemon): void { for (const s of BATTLE_STATS) { pokemon.setStatStage(s, 0); } - return pokemon.updateInfo(); + pokemon.updateInfo(); } } @@ -3481,9 +3688,9 @@ export class SwapStatStagesAttr extends MoveEffectAttr { user.updateInfo(); if (this.stats.length === 7) { - user.scene.queueMessage(i18next.t("moveTriggers:switchedStatChanges", { pokemonName: getPokemonNameWithAffix(user) })); + globalScene.queueMessage(i18next.t("moveTriggers:switchedStatChanges", { pokemonName: getPokemonNameWithAffix(user) })); } else if (this.stats.length === 2) { - user.scene.queueMessage(i18next.t("moveTriggers:switchedTwoStatChanges", { + globalScene.queueMessage(i18next.t("moveTriggers:switchedTwoStatChanges", { pokemonName: getPokemonNameWithAffix(user), firstStat: i18next.t(getStatKey(this.stats[0])), secondStat: i18next.t(getStatKey(this.stats[1])) @@ -3496,43 +3703,28 @@ export class SwapStatStagesAttr extends MoveEffectAttr { } export class HpSplitAttr extends MoveEffectAttr { - apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise { - return new Promise(resolve => { - if (!super.apply(user, target, move, args)) { - return resolve(false); - } + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + if (!super.apply(user, target, move, args)) { + return false; + } - const infoUpdates: Promise[] = []; - - const hpValue = Math.floor((target.hp + user.hp) / 2); - if (user.hp < hpValue) { - const healing = user.heal(hpValue - user.hp); + const hpValue = Math.floor((target.hp + user.hp) / 2); + [ user, target ].forEach((p) => { + if (p.hp < hpValue) { + const healing = p.heal(hpValue - p.hp); if (healing) { - user.scene.damageNumberHandler.add(user, healing, HitResult.HEAL); + globalScene.damageNumberHandler.add(p, healing, HitResult.HEAL); } - } else if (user.hp > hpValue) { - const damage = user.damage(user.hp - hpValue, true); + } else if (p.hp > hpValue) { + const damage = p.damage(p.hp - hpValue, true); if (damage) { - user.scene.damageNumberHandler.add(user, damage); + globalScene.damageNumberHandler.add(p, damage); } } - infoUpdates.push(user.updateInfo()); - - if (target.hp < hpValue) { - const healing = target.heal(hpValue - target.hp); - if (healing) { - user.scene.damageNumberHandler.add(user, healing, HitResult.HEAL); - } - } else if (target.hp > hpValue) { - const damage = target.damage(target.hp - hpValue, true); - if (damage) { - target.scene.damageNumberHandler.add(target, damage); - } - } - infoUpdates.push(target.updateInfo()); - - return Promise.all(infoUpdates).then(() => resolve(true)); + p.updateInfo(); }); + + return true; } } @@ -3609,7 +3801,7 @@ export class MovePowerMultiplierAttr extends VariablePowerAttr { * @returns The base power of the Beat Up hit. */ const beatUpFunc = (user: Pokemon, allyIndex: number): number => { - const party = user.isPlayer() ? user.scene.getPlayerParty() : user.scene.getEnemyParty(); + const party = user.isPlayer() ? globalScene.getPlayerParty() : globalScene.getEnemyParty(); for (let i = allyIndex; i < party.length; i++) { const pokemon = party[i]; @@ -3637,7 +3829,7 @@ export class BeatUpAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const power = args[0] as Utils.NumberHolder; - const party = user.isPlayer() ? user.scene.getPlayerParty() : user.scene.getEnemyParty(); + const party = user.isPlayer() ? globalScene.getPlayerParty() : globalScene.getEnemyParty(); const allyCount = party.filter(pokemon => { return pokemon.id === user.id || !pokemon.status?.effect; }).length; @@ -3649,19 +3841,19 @@ export class BeatUpAttr extends VariablePowerAttr { const doublePowerChanceMessageFunc = (user: Pokemon, target: Pokemon, move: Move) => { let message: string = ""; - user.scene.executeWithSeedOffset(() => { + globalScene.executeWithSeedOffset(() => { const rand = Utils.randSeedInt(100); if (rand < move.chance) { message = i18next.t("moveTriggers:goingAllOutForAttack", { pokemonName: getPokemonNameWithAffix(user) }); } - }, user.scene.currentBattle.turn << 6, user.scene.waveSeed); + }, globalScene.currentBattle.turn << 6, globalScene.waveSeed); return message; }; export class DoublePowerChanceAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - let rand: integer; - user.scene.executeWithSeedOffset(() => rand = Utils.randSeedInt(100), user.scene.currentBattle.turn << 6, user.scene.waveSeed); + let rand: number; + globalScene.executeWithSeedOffset(() => rand = Utils.randSeedInt(100), globalScene.currentBattle.turn << 6, globalScene.waveSeed); if (rand! < move.chance) { const power = args[0] as Utils.NumberHolder; power.value *= 2; @@ -3673,7 +3865,7 @@ export class DoublePowerChanceAttr extends VariablePowerAttr { } export abstract class ConsecutiveUsePowerMultiplierAttr extends MovePowerMultiplierAttr { - constructor(limit: integer, resetOnFail: boolean, resetOnLimit?: boolean, ...comboMoves: Moves[]) { + constructor(limit: number, resetOnFail: boolean, resetOnLimit?: boolean, ...comboMoves: Moves[]) { super((user: Pokemon, target: Pokemon, move: Move): number => { const moveHistory = user.getLastXMoves(limit + 1).slice(1); @@ -3694,7 +3886,7 @@ export abstract class ConsecutiveUsePowerMultiplierAttr extends MovePowerMultipl }); } - abstract getMultiplier(count: integer): number; + abstract getMultiplier(count: number): number; } export class ConsecutiveUseDoublePowerAttr extends ConsecutiveUsePowerMultiplierAttr { @@ -3895,8 +4087,8 @@ export class OpponentHighHpPowerAttr extends VariablePowerAttr { export class FirstAttackDoublePowerAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - console.log(target.getLastXMoves(1), target.scene.currentBattle.turn); - if (!target.getLastXMoves(1).find(m => m.turn === target.scene.currentBattle.turn)) { + console.log(target.getLastXMoves(1), globalScene.currentBattle.turn); + if (!target.getLastXMoves(1).find(m => m.turn === globalScene.currentBattle.turn)) { (args[0] as Utils.NumberHolder).value *= 2; return true; } @@ -3919,7 +4111,7 @@ export class TurnDamagedDoublePowerAttr extends VariablePowerAttr { const magnitudeMessageFunc = (user: Pokemon, target: Pokemon, move: Move) => { let message: string; - user.scene.executeWithSeedOffset(() => { + globalScene.executeWithSeedOffset(() => { const magnitudeThresholds = [ 5, 15, 35, 65, 75, 95 ]; const rand = Utils.randSeedInt(100); @@ -3932,7 +4124,7 @@ const magnitudeMessageFunc = (user: Pokemon, target: Pokemon, move: Move) => { } message = i18next.t("moveTriggers:magnitudeMessage", { magnitude: m + 4 }); - }, user.scene.currentBattle.turn << 6, user.scene.waveSeed); + }, globalScene.currentBattle.turn << 6, globalScene.waveSeed); return message!; }; @@ -3943,9 +4135,9 @@ export class MagnitudePowerAttr extends VariablePowerAttr { const magnitudeThresholds = [ 5, 15, 35, 65, 75, 95 ]; const magnitudePowers = [ 10, 30, 50, 70, 90, 100, 110, 150 ]; - let rand: integer; + let rand: number; - user.scene.executeWithSeedOffset(() => rand = Utils.randSeedInt(100), user.scene.currentBattle.turn << 6, user.scene.waveSeed); + globalScene.executeWithSeedOffset(() => rand = Utils.randSeedInt(100), globalScene.currentBattle.turn << 6, globalScene.waveSeed); let m = 0; for (; m < magnitudeThresholds.length; m++) { @@ -3962,9 +4154,9 @@ export class MagnitudePowerAttr extends VariablePowerAttr { export class AntiSunlightPowerDecreaseAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - if (!user.scene.arena.weather?.isEffectSuppressed(user.scene)) { + if (!globalScene.arena.weather?.isEffectSuppressed()) { const power = args[0] as Utils.NumberHolder; - const weatherType = user.scene.arena.weather?.weatherType || WeatherType.NONE; + const weatherType = globalScene.arena.weather?.weatherType || WeatherType.NONE; switch (weatherType) { case WeatherType.RAIN: case WeatherType.SANDSTORM: @@ -3999,12 +4191,32 @@ export class FriendshipPowerAttr extends VariablePowerAttr { } } -export class HitCountPowerAttr extends VariablePowerAttr { +/** + * This Attribute calculates the current power of {@linkcode Moves.RAGE_FIST}. + * The counter for power calculation does not reset on every wave but on every new arena encounter + */ +export class RageFistPowerAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.NumberHolder).value += Math.min(user.battleData.hitCount, 6) * 50; + const { hitCount, prevHitCount } = user.battleData; + const basePower: Utils.NumberHolder = args[0]; + + this.updateHitReceivedCount(user, hitCount, prevHitCount); + + basePower.value = 50 + (Math.min(user.customPokemonData.hitsRecCount, 6) * 50); return true; } + + /** + * Updates the number of hits the Pokemon has taken in battle + * @param user Pokemon calling Rage Fist + * @param hitCount The number of received hits this battle + * @param previousHitCount The number of received hits this battle since last time Rage Fist was used + */ + protected updateHitReceivedCount(user: Pokemon, hitCount: number, previousHitCount: number): void { + user.customPokemonData.hitsRecCount += (hitCount - previousHitCount); + user.battleData.prevHitCount = hitCount; + } } /** @@ -4080,7 +4292,7 @@ export class PresentPowerAttr extends VariablePowerAttr { } else if (80 < powerSeed && powerSeed <= 100) { // If this move is multi-hit, disable all other hits user.stopMultiHit(); - target.scene.unshiftPhase(new PokemonHealPhase(target.scene, target.getBattlerIndex(), + globalScene.unshiftPhase(new PokemonHealPhase(target.getBattlerIndex(), Utils.toDmgValue(target.getMaxHp() / 4), i18next.t("moveTriggers:regainedHealth", { pokemonName: getPokemonNameWithAffix(target) }), true)); } @@ -4091,7 +4303,7 @@ export class PresentPowerAttr extends VariablePowerAttr { export class WaterShurikenPowerAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (user.species.speciesId === Species.GRENINJA && user.hasAbility(Abilities.BATTLE_BOND) && user.formIndex === 2) { - (args[0] as Utils.IntegerHolder).value = 20; + (args[0] as Utils.NumberHolder).value = 20; return true; } return false; @@ -4113,7 +4325,7 @@ export class SpitUpPowerAttr extends VariablePowerAttr { const stockpilingTag = user.getTag(StockpilingTag); if (stockpilingTag && stockpilingTag.stockpiledCount > 0) { - const power = args[0] as Utils.IntegerHolder; + const power = args[0] as Utils.NumberHolder; power.value = this.multiplier * stockpilingTag.stockpiledCount; return true; } @@ -4165,9 +4377,9 @@ const hasStockpileStacksCondition: MoveConditionFunc = (user) => { */ export class MultiHitPowerIncrementAttr extends VariablePowerAttr { /** The max number of base power increments allowed for this move */ - private maxHits: integer; + private maxHits: number; - constructor(maxHits: integer) { + constructor(maxHits: number) { super(); this.maxHits = maxHits; @@ -4230,7 +4442,7 @@ export class LastMoveDoublePowerAttr extends VariablePowerAttr { pokemonActed.push(enemy); } - if (user.scene.currentBattle.double) { + if (globalScene.currentBattle.double) { const userAlly = user.getAlly(); const enemyAlly = enemy?.getAlly(); @@ -4332,7 +4544,7 @@ export class CueNextRoundAttr extends MoveEffectAttr { } override apply(user: Pokemon, target: Pokemon, move: Move, args?: any[]): boolean { - const nextRoundPhase = user.scene.findPhase(phase => + const nextRoundPhase = globalScene.findPhase(phase => phase instanceof MovePhase && phase.move.moveId === Moves.ROUND ); @@ -4341,10 +4553,10 @@ export class CueNextRoundAttr extends MoveEffectAttr { } // Update the phase queue so that the next Pokemon using Round moves next - const nextRoundIndex = user.scene.phaseQueue.indexOf(nextRoundPhase); - const nextMoveIndex = user.scene.phaseQueue.findIndex(phase => phase instanceof MovePhase); + const nextRoundIndex = globalScene.phaseQueue.indexOf(nextRoundPhase); + const nextMoveIndex = globalScene.phaseQueue.findIndex(phase => phase instanceof MovePhase); if (nextRoundIndex !== nextMoveIndex) { - user.scene.prependToPhase(user.scene.phaseQueue.splice(nextRoundIndex, 1)[0], MovePhase); + globalScene.prependToPhase(globalScene.phaseQueue.splice(nextRoundIndex, 1)[0], MovePhase); } // Mark the corresponding Pokemon as having "joined the Round" (for doubling power later) @@ -4353,13 +4565,76 @@ export class CueNextRoundAttr extends MoveEffectAttr { } } +/** + * Attribute that changes stat stages before the damage is calculated + */ +export class StatChangeBeforeDmgCalcAttr extends MoveAttr { + /** + * Applies Stat Changes before damage is calculated + * + * @param user {@linkcode Pokemon} that called {@linkcode move} + * @param target {@linkcode Pokemon} that is the target of {@linkcode move} + * @param move {@linkcode Move} called by {@linkcode user} + * @param args N/A + * + * @returns true if stat stages where correctly applied + */ + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + return false; + } +} + +/** + * Steals the postitive Stat stages of the target before damage calculation so stat changes + * apply to damage calculation (e.g. {@linkcode Moves.SPECTRAL_THIEF}) + * {@link https://bulbapedia.bulbagarden.net/wiki/Spectral_Thief_(move) | Spectral Thief} + */ +export class SpectralThiefAttr extends StatChangeBeforeDmgCalcAttr { + /** + * steals max amount of positive stats of the target while not exceeding the limit of max 6 stat stages + * + * @param user {@linkcode Pokemon} that called {@linkcode move} + * @param target {@linkcode Pokemon} that is the target of {@linkcode move} + * @param move {@linkcode Move} called by {@linkcode user} + * @param args N/A + * + * @returns true if stat stages where correctly stolen + */ + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + /** + * Copy all positive stat stages to user and reduce copied stat stages on target. + */ + for (const s of BATTLE_STATS) { + const statStageValueTarget = target.getStatStage(s); + const statStageValueUser = user.getStatStage(s); + + if (statStageValueTarget > 0) { + /** + * Only value of up to 6 can be stolen (stat stages don't exceed 6) + */ + const availableToSteal = Math.min(statStageValueTarget, 6 - statStageValueUser); + + globalScene.unshiftPhase(new StatStageChangePhase(user.getBattlerIndex(), this.selfTarget, [ s ], availableToSteal)); + target.setStatStage(s, statStageValueTarget - availableToSteal); + } + } + + target.updateInfo(); + user.updateInfo(); + globalScene.queueMessage(i18next.t("moveTriggers:stealPositiveStats", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target) })); + + return true; + } + +} + export class VariableAtkAttr extends MoveAttr { constructor() { super(); } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - //const atk = args[0] as Utils.IntegerHolder; + //const atk = args[0] as Utils.NumberHolder; return false; } } @@ -4369,7 +4644,7 @@ export class TargetAtkUserAtkAttr extends VariableAtkAttr { super(); } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.IntegerHolder).value = target.getEffectiveStat(Stat.ATK, target); + (args[0] as Utils.NumberHolder).value = target.getEffectiveStat(Stat.ATK, target); return true; } } @@ -4380,7 +4655,7 @@ export class DefAtkAttr extends VariableAtkAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.IntegerHolder).value = user.getEffectiveStat(Stat.DEF, target); + (args[0] as Utils.NumberHolder).value = user.getEffectiveStat(Stat.DEF, target); return true; } } @@ -4391,7 +4666,7 @@ export class VariableDefAttr extends MoveAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - //const def = args[0] as Utils.IntegerHolder; + //const def = args[0] as Utils.NumberHolder; return false; } } @@ -4402,7 +4677,7 @@ export class DefDefAttr extends VariableDefAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.IntegerHolder).value = target.getEffectiveStat(Stat.DEF, user); + (args[0] as Utils.NumberHolder).value = target.getEffectiveStat(Stat.DEF, user); return true; } } @@ -4419,9 +4694,9 @@ export class VariableAccuracyAttr extends MoveAttr { */ export class ThunderAccuracyAttr extends VariableAccuracyAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - if (!user.scene.arena.weather?.isEffectSuppressed(user.scene)) { + if (!globalScene.arena.weather?.isEffectSuppressed()) { const accuracy = args[0] as Utils.NumberHolder; - const weatherType = user.scene.arena.weather?.weatherType || WeatherType.NONE; + const weatherType = globalScene.arena.weather?.weatherType || WeatherType.NONE; switch (weatherType) { case WeatherType.SUNNY: case WeatherType.HARSH_SUN: @@ -4445,9 +4720,9 @@ export class ThunderAccuracyAttr extends VariableAccuracyAttr { */ export class StormAccuracyAttr extends VariableAccuracyAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - if (!user.scene.arena.weather?.isEffectSuppressed(user.scene)) { + if (!globalScene.arena.weather?.isEffectSuppressed()) { const accuracy = args[0] as Utils.NumberHolder; - const weatherType = user.scene.arena.weather?.weatherType || WeatherType.NONE; + const weatherType = globalScene.arena.weather?.weatherType || WeatherType.NONE; switch (weatherType) { case WeatherType.RAIN: case WeatherType.HEAVY_RAIN: @@ -4501,9 +4776,9 @@ export class ToxicAccuracyAttr extends VariableAccuracyAttr { export class BlizzardAccuracyAttr extends VariableAccuracyAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - if (!user.scene.arena.weather?.isEffectSuppressed(user.scene)) { + if (!globalScene.arena.weather?.isEffectSuppressed()) { const accuracy = args[0] as Utils.NumberHolder; - const weatherType = user.scene.arena.weather?.weatherType || WeatherType.NONE; + const weatherType = globalScene.arena.weather?.weatherType || WeatherType.NONE; if (weatherType === WeatherType.HAIL || weatherType === WeatherType.SNOW) { accuracy.value = -1; return true; @@ -4544,7 +4819,8 @@ export class TeraMoveCategoryAttr extends VariableMoveCategoryAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const category = (args[0] as Utils.NumberHolder); - if (user.isTerastallized() && user.getEffectiveStat(Stat.ATK, target, move) > user.getEffectiveStat(Stat.SPATK, target, move)) { + if (user.isTerastallized && user.getEffectiveStat(Stat.ATK, target, move, true, true, false, false, true) > + user.getEffectiveStat(Stat.SPATK, target, move, true, true, false, false, true)) { category.value = MoveCategory.PHYSICAL; return true; } @@ -4571,7 +4847,7 @@ export class TeraBlastPowerAttr extends VariablePowerAttr { */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const power = args[0] as Utils.NumberHolder; - if (user.isTerastallized() && user.getTeraType() === Type.STELLAR) { + if (user.isTerastallized && user.getTeraType() === Type.STELLAR) { power.value = 100; return true; } @@ -4629,30 +4905,6 @@ export class VariableMoveTypeAttr extends MoveAttr { } } -/** - * Attribute used for Tera Starstorm that changes the move type to Stellar - * @extends VariableMoveTypeAttr - */ -export class TeraStarstormTypeAttr extends VariableMoveTypeAttr { - /** - * - * @param user the {@linkcode Pokemon} using the move - * @param target n/a - * @param move n/a - * @param args[0] {@linkcode Utils.NumberHolder} the move type - * @returns `true` if the move type is changed to {@linkcode Type.STELLAR}, `false` otherwise - */ - override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - if (user.isTerastallized() && (user.hasFusionSpecies(Species.TERAPAGOS) || user.species.speciesId === Species.TERAPAGOS)) { - const moveType = args[0] as Utils.NumberHolder; - - moveType.value = Type.STELLAR; - return true; - } - return false; - } -} - export class FormChangeItemTypeAttr extends VariableMoveTypeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const moveType = args[0]; @@ -4800,8 +5052,8 @@ export class WeatherBallTypeAttr extends VariableMoveTypeAttr { return false; } - if (!user.scene.arena.weather?.isEffectSuppressed(user.scene)) { - switch (user.scene.arena.weather?.weatherType) { + if (!globalScene.arena.weather?.isEffectSuppressed()) { + switch (globalScene.arena.weather?.weatherType) { case WeatherType.SUNNY: case WeatherType.HARSH_SUN: moveType.value = Type.FIRE; @@ -4851,7 +5103,7 @@ export class TerrainPulseTypeAttr extends VariableMoveTypeAttr { return false; } - const currentTerrain = user.scene.arena.getTerrainType(); + const currentTerrain = globalScene.arena.getTerrainType(); switch (currentTerrain) { case TerrainType.MISTY: moveType.value = Type.FAIRY; @@ -4918,7 +5170,7 @@ export class TeraBlastTypeAttr extends VariableMoveTypeAttr { return false; } - if (user.isTerastallized()) { + if (user.isTerastallized) { moveType.value = user.getTeraType(); // changes move type to tera type return true; } @@ -4927,6 +5179,30 @@ export class TeraBlastTypeAttr extends VariableMoveTypeAttr { } } +/** + * Attribute used for Tera Starstorm that changes the move type to Stellar + * @extends VariableMoveTypeAttr + */ +export class TeraStarstormTypeAttr extends VariableMoveTypeAttr { + /** + * + * @param user the {@linkcode Pokemon} using the move + * @param target n/a + * @param move n/a + * @param args[0] {@linkcode Utils.NumberHolder} the move type + * @returns `true` if the move type is changed to {@linkcode Type.STELLAR}, `false` otherwise + */ + override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + if (user.isTerastallized && user.hasSpecies(Species.TERAPAGOS)) { + const moveType = args[0] as Utils.NumberHolder; + + moveType.value = Type.STELLAR; + return true; + } + return false; + } +} + export class MatchUserTypeAttr extends VariableMoveTypeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const moveType = args[0]; @@ -4960,7 +5236,7 @@ export class CombinedPledgeTypeAttr extends VariableMoveTypeAttr { return false; } - const combinedPledgeMove = user.turnData.combiningPledge; + const combinedPledgeMove = user?.turnData?.combiningPledge; if (!combinedPledgeMove) { return false; } @@ -5146,7 +5422,7 @@ const crashDamageFunc = (user: Pokemon, move: Move) => { } user.damageAndUpdate(Utils.toDmgValue(user.getMaxHp() / 2), HitResult.OTHER, false, true); - user.scene.queueMessage(i18next.t("moveTriggers:keptGoingAndCrashed", { pokemonName: getPokemonNameWithAffix(user) })); + globalScene.queueMessage(i18next.t("moveTriggers:keptGoingAndCrashed", { pokemonName: getPokemonNameWithAffix(user) })); user.turnData.damageTaken += Utils.toDmgValue(user.getMaxHp() / 2); return true; @@ -5236,12 +5512,12 @@ export class SemiInvulnerableAttr extends MoveEffectAttr { export class AddBattlerTagAttr extends MoveEffectAttr { public tagType: BattlerTagType; - public turnCountMin: integer; - public turnCountMax: integer; + public turnCountMin: number; + public turnCountMax: number; protected cancelOnFail: boolean; private failOnOverlap: boolean; - constructor(tagType: BattlerTagType, selfTarget: boolean = false, failOnOverlap: boolean = false, turnCountMin: integer = 0, turnCountMax?: integer, lastHitOnly: boolean = false, cancelOnFail: boolean = false) { + constructor(tagType: BattlerTagType, selfTarget: boolean = false, failOnOverlap: boolean = false, turnCountMin: number = 0, turnCountMax?: number, lastHitOnly: boolean = false, cancelOnFail: boolean = false) { super(selfTarget, { lastHitOnly: lastHitOnly }); this.tagType = tagType; @@ -5278,7 +5554,7 @@ export class AddBattlerTagAttr extends MoveEffectAttr { : null; } - getTagTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer | void { + getTagTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): number | void { switch (this.tagType) { case BattlerTagType.RECHARGING: case BattlerTagType.PERISH_SONG: @@ -5316,6 +5592,7 @@ export class AddBattlerTagAttr extends MoveEffectAttr { case BattlerTagType.INGRAIN: case BattlerTagType.IGNORE_ACCURACY: case BattlerTagType.AQUA_RING: + case BattlerTagType.MAGIC_COAT: return 3; case BattlerTagType.PROTECTED: case BattlerTagType.FLYING: @@ -5325,7 +5602,7 @@ export class AddBattlerTagAttr extends MoveEffectAttr { } } - getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { + getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { let moveChance = this.getMoveChance(user, target, move, this.selfTarget, false); if (moveChance < 0) { moveChance = 100; @@ -5392,7 +5669,7 @@ export class GulpMissileTagAttr extends MoveEffectAttr { return false; } - getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { + getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { const isCramorant = user.hasAbility(Abilities.GULP_MISSILE) && user.species.speciesId === Species.CRAMORANT; return isCramorant && !user.getTag(GulpMissileTag) ? 10 : 0; } @@ -5436,12 +5713,12 @@ export class CurseAttr extends MoveEffectAttr { apply(user: Pokemon, target: Pokemon, move:Move, args: any[]): boolean { if (user.getTypes(true).includes(Type.GHOST)) { if (target.getTag(BattlerTagType.CURSED)) { - user.scene.queueMessage(i18next.t("battle:attackFailed")); + globalScene.queueMessage(i18next.t("battle:attackFailed")); return false; } const curseRecoilDamage = Math.max(1, Math.floor(user.getMaxHp() / 2)); user.damageAndUpdate(curseRecoilDamage, HitResult.OTHER, false, true, true); - user.scene.queueMessage( + globalScene.queueMessage( i18next.t("battlerTags:cursedOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(user), pokemonName: getPokemonNameWithAffix(target) @@ -5451,8 +5728,8 @@ export class CurseAttr extends MoveEffectAttr { target.addTag(BattlerTagType.CURSED, 0, move.id, user.id); return true; } else { - user.scene.unshiftPhase(new StatStageChangePhase(user.scene, user.getBattlerIndex(), true, [ Stat.ATK, Stat.DEF ], 1)); - user.scene.unshiftPhase(new StatStageChangePhase(user.scene, user.getBattlerIndex(), true, [ Stat.SPD ], -1)); + globalScene.unshiftPhase(new StatStageChangePhase(user.getBattlerIndex(), true, [ Stat.ATK, Stat.DEF ], 1)); + globalScene.unshiftPhase(new StatStageChangePhase(user.getBattlerIndex(), true, [ Stat.SPD ], -1)); return true; } } @@ -5523,7 +5800,7 @@ export class ConfuseAttr extends AddBattlerTagAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (!this.selfTarget && target.isSafeguarded(user)) { if (move.category === MoveCategory.STATUS) { - user.scene.queueMessage(i18next.t("moveTriggers:safeguard", { targetName: getPokemonNameWithAffix(target) })); + globalScene.queueMessage(i18next.t("moveTriggers:safeguard", { targetName: getPokemonNameWithAffix(target) })); } return false; } @@ -5583,7 +5860,7 @@ export class IgnoreAccuracyAttr extends AddBattlerTagAttr { return false; } - user.scene.queueMessage(i18next.t("moveTriggers:tookAimAtTarget", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target) })); + globalScene.queueMessage(i18next.t("moveTriggers:tookAimAtTarget", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target) })); return true; } @@ -5599,7 +5876,7 @@ export class FaintCountdownAttr extends AddBattlerTagAttr { return false; } - user.scene.queueMessage(i18next.t("moveTriggers:faintCountdown", { pokemonName: getPokemonNameWithAffix(target), turnCount: this.turnCountMin - 1 })); + globalScene.queueMessage(i18next.t("moveTriggers:faintCountdown", { pokemonName: getPokemonNameWithAffix(target), turnCount: this.turnCountMin - 1 })); return true; } @@ -5629,7 +5906,7 @@ export class RemoveAllSubstitutesAttr extends MoveEffectAttr { return false; } - user.scene.getField(true).forEach(pokemon => + globalScene.getField(true).forEach(pokemon => pokemon.findAndRemoveTags(tag => tag.tagType === BattlerTagType.SUBSTITUTE)); return true; } @@ -5654,7 +5931,7 @@ export class HitsTagAttr extends MoveAttr { this.doubleDamage = !!doubleDamage; } - getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { + getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { return target.getTag(this.tagType) ? this.doubleDamage ? 10 : 5 : 0; } } @@ -5672,11 +5949,11 @@ export class HitsTagForDoubleDamageAttr extends HitsTagAttr { export class AddArenaTagAttr extends MoveEffectAttr { public tagType: ArenaTagType; - public turnCount: integer; + public turnCount: number; private failOnOverlap: boolean; public selfSideTarget: boolean; - constructor(tagType: ArenaTagType, turnCount?: integer | null, failOnOverlap: boolean = false, selfSideTarget: boolean = false) { + constructor(tagType: ArenaTagType, turnCount?: number | null, failOnOverlap: boolean = false, selfSideTarget: boolean = false) { super(true); this.tagType = tagType; @@ -5692,7 +5969,7 @@ export class AddArenaTagAttr extends MoveEffectAttr { if ((move.chance < 0 || move.chance === 100 || user.randSeedInt(100) < move.chance) && user.getLastXMoves(1)[0]?.result === MoveResult.SUCCESS) { const side = (this.selfSideTarget ? user : target).isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; - user.scene.arena.addTag(this.tagType, this.turnCount, move.id, user.id, side); + globalScene.arena.addTag(this.tagType, this.turnCount, move.id, user.id, side); return true; } @@ -5701,7 +5978,7 @@ export class AddArenaTagAttr extends MoveEffectAttr { getCondition(): MoveConditionFunc | null { return this.failOnOverlap - ? (user, target, move) => !user.scene.arena.getTagOnSide(this.tagType, target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY) + ? (user, target, move) => !globalScene.arena.getTagOnSide(this.tagType, target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY) : null; } } @@ -5730,7 +6007,7 @@ export class RemoveArenaTagsAttr extends MoveEffectAttr { const side = (this.selfSideTarget ? user : target).isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; for (const tagType of this.tagTypes) { - user.scene.arena.removeTagOnSide(tagType, side); + globalScene.arena.removeTagOnSide(tagType, side); } return true; @@ -5741,7 +6018,7 @@ export class AddArenaTrapTagAttr extends AddArenaTagAttr { getCondition(): MoveConditionFunc { return (user, target, move) => { const side = (this.selfSideTarget ? user : target).isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; - const tag = user.scene.arena.getTagOnSide(this.tagType, side) as ArenaTrapTag; + const tag = globalScene.arena.getTagOnSide(this.tagType, side) as ArenaTrapTag; if (!tag) { return true; } @@ -5765,9 +6042,9 @@ export class AddArenaTrapTagHitAttr extends AddArenaTagAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const moveChance = this.getMoveChance(user, target, move, this.selfTarget, true); const side = (this.selfSideTarget ? user : target).isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; - const tag = user.scene.arena.getTagOnSide(this.tagType, side) as ArenaTrapTag; + const tag = globalScene.arena.getTagOnSide(this.tagType, side) as ArenaTrapTag; if ((moveChance < 0 || moveChance === 100 || user.randSeedInt(100) < moveChance) && user.getLastXMoves(1)[0]?.result === MoveResult.SUCCESS) { - user.scene.arena.addTag(this.tagType, 0, move.id, user.id, side); + globalScene.arena.addTag(this.tagType, 0, move.id, user.id, side); if (!tag) { return true; } @@ -5793,20 +6070,20 @@ export class RemoveArenaTrapAttr extends MoveEffectAttr { } if (this.targetBothSides) { - user.scene.arena.removeTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.PLAYER); - user.scene.arena.removeTagOnSide(ArenaTagType.TOXIC_SPIKES, ArenaTagSide.PLAYER); - user.scene.arena.removeTagOnSide(ArenaTagType.STEALTH_ROCK, ArenaTagSide.PLAYER); - user.scene.arena.removeTagOnSide(ArenaTagType.STICKY_WEB, ArenaTagSide.PLAYER); + globalScene.arena.removeTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.PLAYER); + globalScene.arena.removeTagOnSide(ArenaTagType.TOXIC_SPIKES, ArenaTagSide.PLAYER); + globalScene.arena.removeTagOnSide(ArenaTagType.STEALTH_ROCK, ArenaTagSide.PLAYER); + globalScene.arena.removeTagOnSide(ArenaTagType.STICKY_WEB, ArenaTagSide.PLAYER); - user.scene.arena.removeTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.ENEMY); - user.scene.arena.removeTagOnSide(ArenaTagType.TOXIC_SPIKES, ArenaTagSide.ENEMY); - user.scene.arena.removeTagOnSide(ArenaTagType.STEALTH_ROCK, ArenaTagSide.ENEMY); - user.scene.arena.removeTagOnSide(ArenaTagType.STICKY_WEB, ArenaTagSide.ENEMY); + globalScene.arena.removeTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.ENEMY); + globalScene.arena.removeTagOnSide(ArenaTagType.TOXIC_SPIKES, ArenaTagSide.ENEMY); + globalScene.arena.removeTagOnSide(ArenaTagType.STEALTH_ROCK, ArenaTagSide.ENEMY); + globalScene.arena.removeTagOnSide(ArenaTagType.STICKY_WEB, ArenaTagSide.ENEMY); } else { - user.scene.arena.removeTagOnSide(ArenaTagType.SPIKES, target.isPlayer() ? ArenaTagSide.ENEMY : ArenaTagSide.PLAYER); - user.scene.arena.removeTagOnSide(ArenaTagType.TOXIC_SPIKES, target.isPlayer() ? ArenaTagSide.ENEMY : ArenaTagSide.PLAYER); - user.scene.arena.removeTagOnSide(ArenaTagType.STEALTH_ROCK, target.isPlayer() ? ArenaTagSide.ENEMY : ArenaTagSide.PLAYER); - user.scene.arena.removeTagOnSide(ArenaTagType.STICKY_WEB, target.isPlayer() ? ArenaTagSide.ENEMY : ArenaTagSide.PLAYER); + globalScene.arena.removeTagOnSide(ArenaTagType.SPIKES, target.isPlayer() ? ArenaTagSide.ENEMY : ArenaTagSide.PLAYER); + globalScene.arena.removeTagOnSide(ArenaTagType.TOXIC_SPIKES, target.isPlayer() ? ArenaTagSide.ENEMY : ArenaTagSide.PLAYER); + globalScene.arena.removeTagOnSide(ArenaTagType.STEALTH_ROCK, target.isPlayer() ? ArenaTagSide.ENEMY : ArenaTagSide.PLAYER); + globalScene.arena.removeTagOnSide(ArenaTagType.STICKY_WEB, target.isPlayer() ? ArenaTagSide.ENEMY : ArenaTagSide.PLAYER); } return true; @@ -5829,17 +6106,17 @@ export class RemoveScreensAttr extends MoveEffectAttr { } if (this.targetBothSides) { - user.scene.arena.removeTagOnSide(ArenaTagType.REFLECT, ArenaTagSide.PLAYER); - user.scene.arena.removeTagOnSide(ArenaTagType.LIGHT_SCREEN, ArenaTagSide.PLAYER); - user.scene.arena.removeTagOnSide(ArenaTagType.AURORA_VEIL, ArenaTagSide.PLAYER); + globalScene.arena.removeTagOnSide(ArenaTagType.REFLECT, ArenaTagSide.PLAYER); + globalScene.arena.removeTagOnSide(ArenaTagType.LIGHT_SCREEN, ArenaTagSide.PLAYER); + globalScene.arena.removeTagOnSide(ArenaTagType.AURORA_VEIL, ArenaTagSide.PLAYER); - user.scene.arena.removeTagOnSide(ArenaTagType.REFLECT, ArenaTagSide.ENEMY); - user.scene.arena.removeTagOnSide(ArenaTagType.LIGHT_SCREEN, ArenaTagSide.ENEMY); - user.scene.arena.removeTagOnSide(ArenaTagType.AURORA_VEIL, ArenaTagSide.ENEMY); + globalScene.arena.removeTagOnSide(ArenaTagType.REFLECT, ArenaTagSide.ENEMY); + globalScene.arena.removeTagOnSide(ArenaTagType.LIGHT_SCREEN, ArenaTagSide.ENEMY); + globalScene.arena.removeTagOnSide(ArenaTagType.AURORA_VEIL, ArenaTagSide.ENEMY); } else { - user.scene.arena.removeTagOnSide(ArenaTagType.REFLECT, target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY); - user.scene.arena.removeTagOnSide(ArenaTagType.LIGHT_SCREEN, target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY); - user.scene.arena.removeTagOnSide(ArenaTagType.AURORA_VEIL, target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY); + globalScene.arena.removeTagOnSide(ArenaTagType.REFLECT, target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY); + globalScene.arena.removeTagOnSide(ArenaTagType.LIGHT_SCREEN, target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY); + globalScene.arena.removeTagOnSide(ArenaTagType.AURORA_VEIL, target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY); } return true; @@ -5865,25 +6142,25 @@ export class SwapArenaTagsAttr extends MoveEffectAttr { return false; } - const tagPlayerTemp = user.scene.arena.findTagsOnSide((t => this.SwapTags.includes(t.tagType)), ArenaTagSide.PLAYER); - const tagEnemyTemp = user.scene.arena.findTagsOnSide((t => this.SwapTags.includes(t.tagType)), ArenaTagSide.ENEMY); + const tagPlayerTemp = globalScene.arena.findTagsOnSide((t => this.SwapTags.includes(t.tagType)), ArenaTagSide.PLAYER); + const tagEnemyTemp = globalScene.arena.findTagsOnSide((t => this.SwapTags.includes(t.tagType)), ArenaTagSide.ENEMY); if (tagPlayerTemp) { for (const swapTagsType of tagPlayerTemp) { - user.scene.arena.removeTagOnSide(swapTagsType.tagType, ArenaTagSide.PLAYER, true); - user.scene.arena.addTag(swapTagsType.tagType, swapTagsType.turnCount, swapTagsType.sourceMove, swapTagsType.sourceId!, ArenaTagSide.ENEMY, true); // TODO: is the bang correct? + globalScene.arena.removeTagOnSide(swapTagsType.tagType, ArenaTagSide.PLAYER, true); + globalScene.arena.addTag(swapTagsType.tagType, swapTagsType.turnCount, swapTagsType.sourceMove, swapTagsType.sourceId!, ArenaTagSide.ENEMY, true); // TODO: is the bang correct? } } if (tagEnemyTemp) { for (const swapTagsType of tagEnemyTemp) { - user.scene.arena.removeTagOnSide(swapTagsType.tagType, ArenaTagSide.ENEMY, true); - user.scene.arena.addTag(swapTagsType.tagType, swapTagsType.turnCount, swapTagsType.sourceMove, swapTagsType.sourceId!, ArenaTagSide.PLAYER, true); // TODO: is the bang correct? + globalScene.arena.removeTagOnSide(swapTagsType.tagType, ArenaTagSide.ENEMY, true); + globalScene.arena.addTag(swapTagsType.tagType, swapTagsType.turnCount, swapTagsType.sourceMove, swapTagsType.sourceId!, ArenaTagSide.PLAYER, true); // TODO: is the bang correct? } } - user.scene.queueMessage(i18next.t("moveTriggers:swapArenaTags", { pokemonName: getPokemonNameWithAffix(user) })); + globalScene.queueMessage(i18next.t("moveTriggers:swapArenaTags", { pokemonName: getPokemonNameWithAffix(user) })); return true; } } @@ -5932,44 +6209,44 @@ export class RevivalBlessingAttr extends MoveEffectAttr { * @param args N/A * @returns Promise, true if function succeeds. */ - apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise { - return new Promise(resolve => { - // If user is player, checks if the user has fainted pokemon - if (user instanceof PlayerPokemon - && user.scene.getPlayerParty().findIndex(p => p.isFainted()) > -1) { - (user as PlayerPokemon).revivalBlessing().then(() => { - resolve(true); - }); - // If user is enemy, checks that it is a trainer, and it has fainted non-boss pokemon in party - } else if (user instanceof EnemyPokemon - && user.hasTrainer() - && user.scene.getEnemyParty().findIndex(p => p.isFainted() && !p.isBoss()) > -1) { - // Selects a random fainted pokemon - const faintedPokemon = user.scene.getEnemyParty().filter(p => p.isFainted() && !p.isBoss()); - const pokemon = faintedPokemon[user.randSeedInt(faintedPokemon.length)]; - const slotIndex = user.scene.getEnemyParty().findIndex(p => pokemon.id === p.id); - pokemon.resetStatus(); - pokemon.heal(Math.min(Utils.toDmgValue(0.5 * pokemon.getMaxHp()), pokemon.getMaxHp())); - user.scene.queueMessage(i18next.t("moveTriggers:revivalBlessing", { pokemonName: getPokemonNameWithAffix(pokemon) }), 0, true); + override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + // If user is player, checks if the user has fainted pokemon + if (user instanceof PlayerPokemon) { + globalScene.unshiftPhase(new RevivalBlessingPhase(user)); + return true; + } else if (user instanceof EnemyPokemon && user.hasTrainer() && globalScene.getEnemyParty().findIndex((p) => p.isFainted() && !p.isBoss()) > -1) { + // If used by an enemy trainer with at least one fainted non-boss Pokemon, this + // revives one of said Pokemon selected at random. + const faintedPokemon = globalScene.getEnemyParty().filter((p) => p.isFainted() && !p.isBoss()); + const pokemon = faintedPokemon[user.randSeedInt(faintedPokemon.length)]; + const slotIndex = globalScene.getEnemyParty().findIndex((p) => pokemon.id === p.id); + pokemon.resetStatus(); + pokemon.heal(Math.min(Utils.toDmgValue(0.5 * pokemon.getMaxHp()), pokemon.getMaxHp())); + globalScene.queueMessage(i18next.t("moveTriggers:revivalBlessing", { pokemonName: getPokemonNameWithAffix(pokemon) }), 0, true); - if (user.scene.currentBattle.double && user.scene.getEnemyParty().length > 1) { - const allyPokemon = user.getAlly(); - if (slotIndex <= 1) { - user.scene.unshiftPhase(new SwitchSummonPhase(user.scene, SwitchType.SWITCH, pokemon.getFieldIndex(), slotIndex, false, false)); - } else if (allyPokemon.isFainted()) { - user.scene.unshiftPhase(new SwitchSummonPhase(user.scene, SwitchType.SWITCH, allyPokemon.getFieldIndex(), slotIndex, false, false)); - } + if (globalScene.currentBattle.double && globalScene.getEnemyParty().length > 1) { + const allyPokemon = user.getAlly(); + if (slotIndex <= 1) { + globalScene.unshiftPhase(new SwitchSummonPhase(SwitchType.SWITCH, pokemon.getFieldIndex(), slotIndex, false, false)); + } else if (allyPokemon.isFainted()) { + globalScene.unshiftPhase(new SwitchSummonPhase(SwitchType.SWITCH, allyPokemon.getFieldIndex(), slotIndex, false, false)); } - resolve(true); - } else { - user.scene.queueMessage(i18next.t("battle:attackFailed")); - resolve(false); } - }); + return true; + } + return false; } - getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { - if (user.hasTrainer() && user.scene.getEnemyParty().findIndex(p => p.isFainted() && !p.isBoss()) > -1) { + getCondition(): MoveConditionFunc { + return (user, target, move) => + (user instanceof PlayerPokemon && globalScene.getPlayerParty().some((p) => p.isFainted())) || + (user instanceof EnemyPokemon && + user.hasTrainer() && + globalScene.getEnemyParty().some((p) => p.isFainted() && !p.isBoss())); + } + + override getUserBenefitScore(user: Pokemon, _target: Pokemon, _move: Move): number { + if (user.hasTrainer() && globalScene.getEnemyParty().some((p) => p.isFainted() && !p.isBoss())) { return 20; } @@ -6018,7 +6295,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { // Find indices of off-field Pokemon that are eligible to be switched into const eligibleNewIndices: number[] = []; - switchOutTarget.scene.getPlayerParty().forEach((pokemon, index) => { + globalScene.getPlayerParty().forEach((pokemon, index) => { if (pokemon.isAllowedInBattle() && !pokemon.isOnField()) { eligibleNewIndices.push(index); } @@ -6032,9 +6309,8 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { if (this.switchType === SwitchType.FORCE_SWITCH) { switchOutTarget.leaveField(true); const slotIndex = eligibleNewIndices[user.randSeedInt(eligibleNewIndices.length)]; - user.scene.prependToPhase( + globalScene.prependToPhase( new SwitchSummonPhase( - user.scene, this.switchType, switchOutTarget.getFieldIndex(), slotIndex, @@ -6045,9 +6321,8 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { ); } else { switchOutTarget.leaveField(this.switchType === SwitchType.SWITCH); - user.scene.prependToPhase( + globalScene.prependToPhase( new SwitchPhase( - user.scene, this.switchType, switchOutTarget.getFieldIndex(), true, @@ -6059,10 +6334,10 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { } } return false; - } else if (user.scene.currentBattle.battleType !== BattleType.WILD) { // Switch out logic for enemy trainers + } else if (globalScene.currentBattle.battleType !== BattleType.WILD) { // Switch out logic for enemy trainers // Find indices of off-field Pokemon that are eligible to be switched into const eligibleNewIndices: number[] = []; - switchOutTarget.scene.getEnemyParty().forEach((pokemon, index) => { + globalScene.getEnemyParty().forEach((pokemon, index) => { if (pokemon.isAllowedInBattle() && !pokemon.isOnField()) { eligibleNewIndices.push(index); } @@ -6076,9 +6351,8 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { if (this.switchType === SwitchType.FORCE_SWITCH) { switchOutTarget.leaveField(true); const slotIndex = eligibleNewIndices[user.randSeedInt(eligibleNewIndices.length)]; - user.scene.prependToPhase( + globalScene.prependToPhase( new SwitchSummonPhase( - user.scene, this.switchType, switchOutTarget.getFieldIndex(), slotIndex, @@ -6089,12 +6363,11 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { ); } else { switchOutTarget.leaveField(this.switchType === SwitchType.SWITCH); - user.scene.prependToPhase( + globalScene.prependToPhase( new SwitchSummonPhase( - user.scene, this.switchType, switchOutTarget.getFieldIndex(), - (user.scene.currentBattle.trainer ? user.scene.currentBattle.trainer.getNextSummonIndex((switchOutTarget as EnemyPokemon).trainerSlot) : 0), + (globalScene.currentBattle.trainer ? globalScene.currentBattle.trainer.getNextSummonIndex((switchOutTarget as EnemyPokemon).trainerSlot) : 0), false, false ), @@ -6115,32 +6388,32 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { } } - if (user.scene.currentBattle.waveIndex % 10 === 0) { + if (globalScene.currentBattle.waveIndex % 10 === 0) { return false; } - // Don't allow wild mons to flee with U-turn et al + // Don't allow wild mons to flee with U-turn et al. if (this.selfSwitch && !user.isPlayer() && move.category !== MoveCategory.STATUS) { return false; } if (switchOutTarget.hp > 0) { switchOutTarget.leaveField(false); - user.scene.queueMessage(i18next.t("moveTriggers:fled", { pokemonName: getPokemonNameWithAffix(switchOutTarget) }), null, true, 500); + globalScene.queueMessage(i18next.t("moveTriggers:fled", { pokemonName: getPokemonNameWithAffix(switchOutTarget) }), null, true, 500); // in double battles redirect potential moves off fled pokemon - if (switchOutTarget.scene.currentBattle.double) { + if (globalScene.currentBattle.double) { const allyPokemon = switchOutTarget.getAlly(); - switchOutTarget.scene.redirectPokemonMoves(switchOutTarget, allyPokemon); + globalScene.redirectPokemonMoves(switchOutTarget, allyPokemon); } } if (!switchOutTarget.getAlly()?.isActive(true)) { - user.scene.clearEnemyHeldItemModifiers(); + globalScene.clearEnemyHeldItemModifiers(); if (switchOutTarget.hp) { - user.scene.pushPhase(new BattleEndPhase(user.scene, false)); - user.scene.pushPhase(new NewBattlePhase(user.scene)); + globalScene.pushPhase(new BattleEndPhase(false)); + globalScene.pushPhase(new NewBattlePhase()); } } } @@ -6152,10 +6425,12 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { return (user, target, move) => (move.category !== MoveCategory.STATUS || this.getSwitchOutCondition()(user, target, move)); } - getFailedText(user: Pokemon, target: Pokemon, move: Move, cancelled: Utils.BooleanHolder): string | null { + getFailedText(_user: Pokemon, target: Pokemon, _move: Move): string | undefined { const blockedByAbility = new Utils.BooleanHolder(false); applyAbAttrs(ForceSwitchOutImmunityAbAttr, target, blockedByAbility); - return blockedByAbility.value ? i18next.t("moveTriggers:cannotBeSwitchedOut", { pokemonName: getPokemonNameWithAffix(target) }) : null; + if (blockedByAbility.value) { + return i18next.t("moveTriggers:cannotBeSwitchedOut", { pokemonName: getPokemonNameWithAffix(target) }); + } } getSwitchOutCondition(): MoveConditionFunc { @@ -6170,11 +6445,11 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { // Dondozo with an allied Tatsugiri in its mouth cannot be forced out const commandedTag = switchOutTarget.getTag(BattlerTagType.COMMANDED); - if (commandedTag?.getSourcePokemon(switchOutTarget.scene)?.isActive(true)) { + if (commandedTag?.getSourcePokemon()?.isActive(true)) { return false; } - if (!player && user.scene.currentBattle.isBattleMysteryEncounter() && !user.scene.currentBattle.mysteryEncounter?.fleeAllowed) { + if (!player && globalScene.currentBattle.isBattleMysteryEncounter() && !globalScene.currentBattle.mysteryEncounter?.fleeAllowed) { // Don't allow wild opponents to be force switched during MEs with flee disabled return false; } @@ -6184,30 +6459,30 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { return !blockedByAbility.value; } - if (!player && user.scene.currentBattle.battleType === BattleType.WILD) { + if (!player && globalScene.currentBattle.battleType === BattleType.WILD) { if (this.isBatonPass()) { return false; } // Don't allow wild opponents to flee on the boss stage since it can ruin a run early on - if (user.scene.currentBattle.waveIndex % 10 === 0) { + if (globalScene.currentBattle.waveIndex % 10 === 0) { return false; } } - const party = player ? user.scene.getPlayerParty() : user.scene.getEnemyParty(); - return (!player && !user.scene.currentBattle.battleType) + const party = player ? globalScene.getPlayerParty() : globalScene.getEnemyParty(); + return (!player && !globalScene.currentBattle.battleType) || party.filter(p => p.isAllowedInBattle() - && (player || (p as EnemyPokemon).trainerSlot === (switchOutTarget as EnemyPokemon).trainerSlot)).length > user.scene.currentBattle.getBattlerCount(); + && (player || (p as EnemyPokemon).trainerSlot === (switchOutTarget as EnemyPokemon).trainerSlot)).length > globalScene.currentBattle.getBattlerCount(); }; } - getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { - if (!user.scene.getEnemyParty().find(p => p.isActive() && !p.isOnField())) { + getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { + if (!globalScene.getEnemyParty().find(p => p.isActive() && !p.isOnField())) { return -20; } let ret = this.selfSwitch ? Math.floor((1 - user.getHpRatio()) * 20) : super.getUserBenefitScore(user, target, move); if (this.selfSwitch && this.isBatonPass()) { - const statStageTotal = user.getStatStages().reduce((s: integer, total: integer) => total += s, 0); + const statStageTotal = user.getStatStages().reduce((s: number, total: number) => total += s, 0); ret = ret / 2 + (Phaser.Tweens.Builders.GetEaseFunction("Sine.easeOut")(Math.min(Math.abs(statStageTotal), 10) / 10) * (statStageTotal >= 0 ? 10 : -10)); } return ret; @@ -6231,13 +6506,13 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { export class ChillyReceptionAttr extends ForceSwitchOutAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - user.scene.arena.trySetWeather(WeatherType.SNOW, true); + globalScene.arena.trySetWeather(WeatherType.SNOW, true); return super.apply(user, target, move, args); } getCondition(): MoveConditionFunc { // chilly reception move will go through if the weather is change-able to snow, or the user can switch out, else move will fail - return (user, target, move) => user.scene.arena.weather?.weatherType !== WeatherType.SNOW || super.getSwitchOutCondition()(user, target, move); + return (user, target, move) => globalScene.arena.weather?.weatherType !== WeatherType.SNOW || super.getSwitchOutCondition()(user, target, move); } } export class RemoveTypeAttr extends MoveEffectAttr { @@ -6257,7 +6532,7 @@ export class RemoveTypeAttr extends MoveEffectAttr { return false; } - if (user.isTerastallized() && user.getTeraType() === this.removedType) { // active tera types cannot be removed + if (user.isTerastallized && user.getTeraType() === this.removedType) { // active tera types cannot be removed return false; } @@ -6295,7 +6570,7 @@ export class CopyTypeAttr extends MoveEffectAttr { user.summonData.types = targetTypes; user.updateInfo(); - user.scene.queueMessage(i18next.t("moveTriggers:copyType", { pokemonName: getPokemonNameWithAffix(user), targetPokemonName: getPokemonNameWithAffix(target) })); + globalScene.queueMessage(i18next.t("moveTriggers:copyType", { pokemonName: getPokemonNameWithAffix(user), targetPokemonName: getPokemonNameWithAffix(target) })); return true; } @@ -6315,18 +6590,18 @@ export class CopyBiomeTypeAttr extends MoveEffectAttr { return false; } - const terrainType = user.scene.arena.getTerrainType(); + const terrainType = globalScene.arena.getTerrainType(); let typeChange: Type; if (terrainType !== TerrainType.NONE) { - typeChange = this.getTypeForTerrain(user.scene.arena.getTerrainType()); + typeChange = this.getTypeForTerrain(globalScene.arena.getTerrainType()); } else { - typeChange = this.getTypeForBiome(user.scene.arena.biomeType); + typeChange = this.getTypeForBiome(globalScene.arena.biomeType); } user.summonData.types = [ typeChange ]; user.updateInfo(); - user.scene.queueMessage(i18next.t("moveTriggers:transformedIntoType", { pokemonName: getPokemonNameWithAffix(user), typeName: i18next.t(`pokemonInfo:Type.${Type[typeChange]}`) })); + globalScene.queueMessage(i18next.t("moveTriggers:transformedIntoType", { pokemonName: getPokemonNameWithAffix(user), typeName: i18next.t(`pokemonInfo:Type.${Type[typeChange]}`) })); return true; } @@ -6431,13 +6706,13 @@ export class ChangeTypeAttr extends MoveEffectAttr { target.summonData.types = [ this.type ]; target.updateInfo(); - user.scene.queueMessage(i18next.t("moveTriggers:transformedIntoType", { pokemonName: getPokemonNameWithAffix(target), typeName: i18next.t(`pokemonInfo:Type.${Type[this.type]}`) })); + globalScene.queueMessage(i18next.t("moveTriggers:transformedIntoType", { pokemonName: getPokemonNameWithAffix(target), typeName: i18next.t(`pokemonInfo:Type.${Type[this.type]}`) })); return true; } getCondition(): MoveConditionFunc { - return (user, target, move) => !target.isTerastallized() && !target.hasAbility(Abilities.MULTITYPE) && !target.hasAbility(Abilities.RKS_SYSTEM) && !(target.getTypes().length === 1 && target.getTypes()[0] === this.type); + return (user, target, move) => !target.isTerastallized && !target.hasAbility(Abilities.MULTITYPE) && !target.hasAbility(Abilities.RKS_SYSTEM) && !(target.getTypes().length === 1 && target.getTypes()[0] === this.type); } } @@ -6454,13 +6729,13 @@ export class AddTypeAttr extends MoveEffectAttr { target.summonData.addedType = this.type; target.updateInfo(); - user.scene.queueMessage(i18next.t("moveTriggers:addType", { typeName: i18next.t(`pokemonInfo:Type.${Type[this.type]}`), pokemonName: getPokemonNameWithAffix(target) })); + globalScene.queueMessage(i18next.t("moveTriggers:addType", { typeName: i18next.t(`pokemonInfo:Type.${Type[this.type]}`), pokemonName: getPokemonNameWithAffix(target) })); return true; } getCondition(): MoveConditionFunc { - return (user, target, move) => !target.isTerastallized() && !target.getTypes().includes(this.type); + return (user, target, move) => !target.isTerastallized && !target.getTypes().includes(this.type); } } @@ -6476,58 +6751,49 @@ export class FirstMoveTypeAttr extends MoveEffectAttr { const firstMoveType = target.getMoveset()[0]?.getMove().type!; // TODO: is this bang correct? user.summonData.types = [ firstMoveType ]; - user.scene.queueMessage(i18next.t("battle:transformedIntoType", { pokemonName: getPokemonNameWithAffix(user), type: i18next.t(`pokemonInfo:Type.${Type[firstMoveType]}`) })); + globalScene.queueMessage(i18next.t("battle:transformedIntoType", { pokemonName: getPokemonNameWithAffix(user), type: i18next.t(`pokemonInfo:Type.${Type[firstMoveType]}`) })); return true; } } -export class RandomMovesetMoveAttr extends OverrideMoveEffectAttr { - private enemyMoveset: boolean | null; - - constructor(enemyMoveset?: boolean) { - super(); - - this.enemyMoveset = enemyMoveset!; // TODO: is this bang correct? - } - +/** + * Attribute used to call a move. + * Used by other move attributes: {@linkcode RandomMoveAttr}, {@linkcode RandomMovesetMoveAttr}, {@linkcode CopyMoveAttr} + * @see {@linkcode apply} for move call + * @extends OverrideMoveEffectAttr + */ +class CallMoveAttr extends OverrideMoveEffectAttr { + protected invalidMoves: Moves[]; + protected hasTarget: boolean; apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const moveset = (!this.enemyMoveset ? user : target).getMoveset(); - const moves = moveset.filter(m => !m?.getMove().hasFlag(MoveFlags.IGNORE_VIRTUAL)); - if (moves.length) { - const move = moves[user.randSeedInt(moves.length)]; - const moveIndex = moveset.findIndex(m => m?.moveId === move?.moveId); - const moveTargets = getMoveTargets(user, move?.moveId!); // TODO: is this bang correct? - if (!moveTargets.targets.length) { - return false; - } - let selectTargets: BattlerIndex[]; - switch (true) { - case (moveTargets.multiple || moveTargets.targets.length === 1): { - selectTargets = moveTargets.targets; - break; - } - case (moveTargets.targets.indexOf(target.getBattlerIndex()) > -1): { - selectTargets = [ target.getBattlerIndex() ]; - break; - } - default: { - moveTargets.targets.splice(moveTargets.targets.indexOf(user.getAlly().getBattlerIndex())); - selectTargets = [ moveTargets.targets[user.randSeedInt(moveTargets.targets.length)] ]; - break; - } - } - const targets = selectTargets; - user.getMoveQueue().push({ move: move?.moveId!, targets: targets, ignorePP: true }); // TODO: is this bang correct? - user.scene.unshiftPhase(new MovePhase(user.scene, user, targets, moveset[moveIndex]!, true)); // There's a PR to re-do the move(s) that use this Attr, gonna put `!` for now - return true; + const replaceMoveTarget = move.moveTarget === MoveTarget.NEAR_OTHER ? MoveTarget.NEAR_ENEMY : undefined; + const moveTargets = getMoveTargets(user, move.id, replaceMoveTarget); + if (moveTargets.targets.length === 0) { + return false; } - - return false; + const targets = moveTargets.multiple || moveTargets.targets.length === 1 + ? moveTargets.targets + : [ this.hasTarget ? target.getBattlerIndex() : moveTargets.targets[user.randSeedInt(moveTargets.targets.length)] ]; // account for Mirror Move having a target already + user.getMoveQueue().push({ move: move.id, targets: targets, virtual: true, ignorePP: true }); + globalScene.unshiftPhase(new LoadMoveAnimPhase(move.id)); + globalScene.unshiftPhase(new MovePhase(user, targets, new PokemonMove(move.id, 0, 0, true), true, true)); + return true; } } -export class RandomMoveAttr extends OverrideMoveEffectAttr { +/** + * Attribute used to call a random move. + * Used for {@linkcode Moves.METRONOME} + * @see {@linkcode apply} for move selection and move call + * @extends CallMoveAttr to call a selected move + */ +export class RandomMoveAttr extends CallMoveAttr { + constructor(invalidMoves: Moves[]) { + super(); + this.invalidMoves = invalidMoves; + } + /** * This function exists solely to allow tests to override the randomly selected move by mocking this function. */ @@ -6535,213 +6801,521 @@ export class RandomMoveAttr extends OverrideMoveEffectAttr { return null; } - apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise { - return new Promise(resolve => { - const moveIds = Utils.getEnumValues(Moves).filter(m => !allMoves[m].hasFlag(MoveFlags.IGNORE_VIRTUAL) && !allMoves[m].name.endsWith(" (N)")); - const moveId = this.getMoveOverride() ?? moveIds[user.randSeedInt(moveIds.length)]; - - const moveTargets = getMoveTargets(user, moveId); - if (!moveTargets.targets.length) { - resolve(false); - return; - } - const targets = moveTargets.multiple || moveTargets.targets.length === 1 - ? moveTargets.targets - : moveTargets.targets.indexOf(target.getBattlerIndex()) > -1 - ? [ target.getBattlerIndex() ] - : [ moveTargets.targets[user.randSeedInt(moveTargets.targets.length)] ]; - user.getMoveQueue().push({ move: moveId, targets: targets, ignorePP: true }); - user.scene.unshiftPhase(new MovePhase(user.scene, user, targets, new PokemonMove(moveId, 0, 0, true), true)); - initMoveAnim(user.scene, moveId).then(() => { - loadMoveAnimAssets(user.scene, [ moveId ], true) - .then(() => resolve(true)); - }); - }); - } -} - -export class NaturePowerAttr extends OverrideMoveEffectAttr { - apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise { - return new Promise(resolve => { - let moveId; - switch (user.scene.arena.getTerrainType()) { - // this allows terrains to 'override' the biome move - case TerrainType.NONE: - switch (user.scene.arena.biomeType) { - case Biome.TOWN: - moveId = Moves.ROUND; - break; - case Biome.METROPOLIS: - moveId = Moves.TRI_ATTACK; - break; - case Biome.SLUM: - moveId = Moves.SLUDGE_BOMB; - break; - case Biome.PLAINS: - moveId = Moves.SILVER_WIND; - break; - case Biome.GRASS: - moveId = Moves.GRASS_KNOT; - break; - case Biome.TALL_GRASS: - moveId = Moves.POLLEN_PUFF; - break; - case Biome.MEADOW: - moveId = Moves.GIGA_DRAIN; - break; - case Biome.FOREST: - moveId = Moves.BUG_BUZZ; - break; - case Biome.JUNGLE: - moveId = Moves.LEAF_STORM; - break; - case Biome.SEA: - moveId = Moves.HYDRO_PUMP; - break; - case Biome.SWAMP: - moveId = Moves.MUD_BOMB; - break; - case Biome.BEACH: - moveId = Moves.SCALD; - break; - case Biome.LAKE: - moveId = Moves.BUBBLE_BEAM; - break; - case Biome.SEABED: - moveId = Moves.BRINE; - break; - case Biome.ISLAND: - moveId = Moves.LEAF_TORNADO; - break; - case Biome.MOUNTAIN: - moveId = Moves.AIR_SLASH; - break; - case Biome.BADLANDS: - moveId = Moves.EARTH_POWER; - break; - case Biome.DESERT: - moveId = Moves.SCORCHING_SANDS; - break; - case Biome.WASTELAND: - moveId = Moves.DRAGON_PULSE; - break; - case Biome.CONSTRUCTION_SITE: - moveId = Moves.STEEL_BEAM; - break; - case Biome.CAVE: - moveId = Moves.POWER_GEM; - break; - case Biome.ICE_CAVE: - moveId = Moves.ICE_BEAM; - break; - case Biome.SNOWY_FOREST: - moveId = Moves.FROST_BREATH; - break; - case Biome.VOLCANO: - moveId = Moves.LAVA_PLUME; - break; - case Biome.GRAVEYARD: - moveId = Moves.SHADOW_BALL; - break; - case Biome.RUINS: - moveId = Moves.ANCIENT_POWER; - break; - case Biome.TEMPLE: - moveId = Moves.EXTRASENSORY; - break; - case Biome.DOJO: - moveId = Moves.FOCUS_BLAST; - break; - case Biome.FAIRY_CAVE: - moveId = Moves.ALLURING_VOICE; - break; - case Biome.ABYSS: - moveId = Moves.OMINOUS_WIND; - break; - case Biome.SPACE: - moveId = Moves.DRACO_METEOR; - break; - case Biome.FACTORY: - moveId = Moves.FLASH_CANNON; - break; - case Biome.LABORATORY: - moveId = Moves.ZAP_CANNON; - break; - case Biome.POWER_PLANT: - moveId = Moves.CHARGE_BEAM; - break; - case Biome.END: - moveId = Moves.ETERNABEAM; - break; - } - break; - case TerrainType.MISTY: - moveId = Moves.MOONBLAST; - break; - case TerrainType.ELECTRIC: - moveId = Moves.THUNDERBOLT; - break; - case TerrainType.GRASSY: - moveId = Moves.ENERGY_BALL; - break; - case TerrainType.PSYCHIC: - moveId = Moves.PSYCHIC; - break; - default: - // Just in case there's no match - moveId = Moves.TRI_ATTACK; - break; - } - - user.getMoveQueue().push({ move: moveId, targets: [ target.getBattlerIndex() ], ignorePP: true }); - user.scene.unshiftPhase(new MovePhase(user.scene, user, [ target.getBattlerIndex() ], new PokemonMove(moveId, 0, 0, true), true)); - initMoveAnim(user.scene, moveId).then(() => { - loadMoveAnimAssets(user.scene, [ moveId ], true) - .then(() => resolve(true)); - }); - }); - } -} - -const lastMoveCopiableCondition: MoveConditionFunc = (user, target, move) => { - const copiableMove = user.scene.currentBattle.lastMove; - - if (!copiableMove) { - return false; - } - - if (allMoves[copiableMove].isChargingMove()) { - return false; - } - - // TODO: Add last turn of Bide - - return true; -}; - -export class CopyMoveAttr extends OverrideMoveEffectAttr { - apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const lastMove = user.scene.currentBattle.lastMove; - - const moveTargets = getMoveTargets(user, lastMove); - if (!moveTargets.targets.length) { - return false; + /** + * User calls a random moveId. + * + * Invalid moves are indicated by what is passed in to invalidMoves: {@linkcode invalidMetronomeMoves} + * @param user Pokemon that used the move and will call a random move + * @param target Pokemon that will be targeted by the random move (if single target) + * @param move Move being used + * @param args Unused + */ + override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + const moveIds = Utils.getEnumValues(Moves).map(m => !this.invalidMoves.includes(m) && !allMoves[m].name.endsWith(" (N)") ? m : Moves.NONE); + let moveId: Moves = Moves.NONE; + do { + moveId = this.getMoveOverride() ?? moveIds[user.randSeedInt(moveIds.length)]; } + while (moveId === Moves.NONE); + return super.apply(user, target, allMoves[moveId], args); + } +} - const targets = moveTargets.multiple || moveTargets.targets.length === 1 - ? moveTargets.targets - : moveTargets.targets.indexOf(target.getBattlerIndex()) > -1 - ? [ target.getBattlerIndex() ] - : [ moveTargets.targets[user.randSeedInt(moveTargets.targets.length)] ]; - user.getMoveQueue().push({ move: lastMove, targets: targets, ignorePP: true }); +/** + * Attribute used to call a random move in the user or party's moveset. + * Used for {@linkcode Moves.ASSIST} and {@linkcode Moves.SLEEP_TALK} + * + * Fails if the user has no callable moves. + * + * Invalid moves are indicated by what is passed in to invalidMoves: {@linkcode invalidAssistMoves} or {@linkcode invalidSleepTalkMoves} + * @extends RandomMoveAttr to use the callMove function on a moveId + * @see {@linkcode getCondition} for move selection + */ +export class RandomMovesetMoveAttr extends CallMoveAttr { + private includeParty: boolean; + private moveId: number; + constructor(invalidMoves: Moves[], includeParty: boolean = false) { + super(); + this.includeParty = includeParty; + this.invalidMoves = invalidMoves; + } - user.scene.unshiftPhase(new MovePhase(user.scene, user as PlayerPokemon, targets, new PokemonMove(lastMove, 0, 0, true), true)); - - return true; + /** + * User calls a random moveId selected in {@linkcode getCondition} + * @param user Pokemon that used the move and will call a random move + * @param target Pokemon that will be targeted by the random move (if single target) + * @param move Move being used + * @param args Unused + */ + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + return super.apply(user, target, allMoves[this.moveId], args); } getCondition(): MoveConditionFunc { - return lastMoveCopiableCondition; + return (user, target, move) => { + // includeParty will be true for Assist, false for Sleep Talk + let allies: Pokemon[]; + if (this.includeParty) { + allies = user.isPlayer() ? globalScene.getPlayerParty().filter(p => p !== user) : globalScene.getEnemyParty().filter(p => p !== user); + } else { + allies = [ user ]; + } + const partyMoveset = allies.map(p => p.moveset).flat(); + const moves = partyMoveset.filter(m => !this.invalidMoves.includes(m!.moveId) && !m!.getMove().name.endsWith(" (N)")); + if (moves.length === 0) { + return false; + } + + this.moveId = moves[user.randSeedInt(moves.length)]!.moveId; + return true; + }; + } +} + +const invalidMetronomeMoves: Moves[] = [ + Moves.AFTER_YOU, + Moves.APPLE_ACID, + Moves.ARMOR_CANNON, + Moves.ASSIST, + Moves.ASTRAL_BARRAGE, + Moves.AURA_WHEEL, + Moves.BANEFUL_BUNKER, + Moves.BEAK_BLAST, + Moves.BEHEMOTH_BASH, + Moves.BEHEMOTH_BLADE, + Moves.BELCH, + Moves.BESTOW, + Moves.BLAZING_TORQUE, + Moves.BODY_PRESS, + Moves.BRANCH_POKE, + Moves.BREAKING_SWIPE, + Moves.CELEBRATE, + Moves.CHATTER, + Moves.CHILLING_WATER, + Moves.CHILLY_RECEPTION, + Moves.CLANGOROUS_SOUL, + Moves.COLLISION_COURSE, + Moves.COMBAT_TORQUE, + Moves.COMEUPPANCE, + Moves.COPYCAT, + Moves.COUNTER, + Moves.COVET, + Moves.CRAFTY_SHIELD, + Moves.DECORATE, + Moves.DESTINY_BOND, + Moves.DETECT, + Moves.DIAMOND_STORM, + Moves.DOODLE, + Moves.DOUBLE_IRON_BASH, + Moves.DOUBLE_SHOCK, + Moves.DRAGON_ASCENT, + Moves.DRAGON_ENERGY, + Moves.DRUM_BEATING, + Moves.DYNAMAX_CANNON, + Moves.ELECTRO_DRIFT, + Moves.ENDURE, + Moves.ETERNABEAM, + Moves.FALSE_SURRENDER, + Moves.FEINT, + Moves.FIERY_WRATH, + Moves.FILLET_AWAY, + Moves.FLEUR_CANNON, + Moves.FOCUS_PUNCH, + Moves.FOLLOW_ME, + Moves.FREEZE_SHOCK, + Moves.FREEZING_GLARE, + Moves.GLACIAL_LANCE, + Moves.GRAV_APPLE, + Moves.HELPING_HAND, + Moves.HOLD_HANDS, + Moves.HYPER_DRILL, + Moves.HYPERSPACE_FURY, + Moves.HYPERSPACE_HOLE, + Moves.ICE_BURN, + Moves.INSTRUCT, + Moves.JET_PUNCH, + Moves.JUNGLE_HEALING, + Moves.KINGS_SHIELD, + Moves.LIFE_DEW, + Moves.LIGHT_OF_RUIN, + Moves.MAKE_IT_RAIN, + Moves.MAGICAL_TORQUE, + Moves.MAT_BLOCK, + Moves.ME_FIRST, + Moves.METEOR_ASSAULT, + Moves.METRONOME, + Moves.MIMIC, + Moves.MIND_BLOWN, + Moves.MIRROR_COAT, + Moves.MIRROR_MOVE, + Moves.MOONGEIST_BEAM, + Moves.NATURE_POWER, + Moves.NATURES_MADNESS, + Moves.NOXIOUS_TORQUE, + Moves.OBSTRUCT, + Moves.ORDER_UP, + Moves.ORIGIN_PULSE, + Moves.OVERDRIVE, + Moves.PHOTON_GEYSER, + Moves.PLASMA_FISTS, + Moves.POPULATION_BOMB, + Moves.POUNCE, + Moves.POWER_SHIFT, + Moves.PRECIPICE_BLADES, + Moves.PROTECT, + Moves.PYRO_BALL, + Moves.QUASH, + Moves.QUICK_GUARD, + Moves.RAGE_FIST, + Moves.RAGE_POWDER, + Moves.RAGING_BULL, + Moves.RAGING_FURY, + Moves.RELIC_SONG, + Moves.REVIVAL_BLESSING, + Moves.RUINATION, + Moves.SALT_CURE, + Moves.SECRET_SWORD, + Moves.SHED_TAIL, + Moves.SHELL_TRAP, + Moves.SILK_TRAP, + Moves.SKETCH, + Moves.SLEEP_TALK, + Moves.SNAP_TRAP, + Moves.SNARL, + Moves.SNATCH, + Moves.SNORE, + Moves.SNOWSCAPE, + Moves.SPECTRAL_THIEF, + Moves.SPICY_EXTRACT, + Moves.SPIKY_SHIELD, + Moves.SPIRIT_BREAK, + Moves.SPOTLIGHT, + Moves.STEAM_ERUPTION, + Moves.STEEL_BEAM, + Moves.STRANGE_STEAM, + Moves.STRUGGLE, + Moves.SUNSTEEL_STRIKE, + Moves.SURGING_STRIKES, + Moves.SWITCHEROO, + Moves.TECHNO_BLAST, + Moves.TERA_STARSTORM, + Moves.THIEF, + Moves.THOUSAND_ARROWS, + Moves.THOUSAND_WAVES, + Moves.THUNDER_CAGE, + Moves.THUNDEROUS_KICK, + Moves.TIDY_UP, + Moves.TRAILBLAZE, + Moves.TRANSFORM, + Moves.TRICK, + Moves.TWIN_BEAM, + Moves.V_CREATE, + Moves.WICKED_BLOW, + Moves.WICKED_TORQUE, + Moves.WIDE_GUARD, +]; + +const invalidAssistMoves: Moves[] = [ + Moves.ASSIST, + Moves.BANEFUL_BUNKER, + Moves.BEAK_BLAST, + Moves.BELCH, + Moves.BESTOW, + Moves.BOUNCE, + Moves.CELEBRATE, + Moves.CHATTER, + Moves.CIRCLE_THROW, + Moves.COPYCAT, + Moves.COUNTER, + Moves.COVET, + Moves.DESTINY_BOND, + Moves.DETECT, + Moves.DIG, + Moves.DIVE, + Moves.DRAGON_TAIL, + Moves.ENDURE, + Moves.FEINT, + Moves.FLY, + Moves.FOCUS_PUNCH, + Moves.FOLLOW_ME, + Moves.HELPING_HAND, + Moves.HOLD_HANDS, + Moves.KINGS_SHIELD, + Moves.MAT_BLOCK, + Moves.ME_FIRST, + Moves.METRONOME, + Moves.MIMIC, + Moves.MIRROR_COAT, + Moves.MIRROR_MOVE, + Moves.NATURE_POWER, + Moves.PHANTOM_FORCE, + Moves.PROTECT, + Moves.RAGE_POWDER, + Moves.ROAR, + Moves.SHADOW_FORCE, + Moves.SHELL_TRAP, + Moves.SKETCH, + Moves.SKY_DROP, + Moves.SLEEP_TALK, + Moves.SNATCH, + Moves.SPIKY_SHIELD, + Moves.SPOTLIGHT, + Moves.STRUGGLE, + Moves.SWITCHEROO, + Moves.THIEF, + Moves.TRANSFORM, + Moves.TRICK, + Moves.WHIRLWIND, +]; + +const invalidSleepTalkMoves: Moves[] = [ + Moves.ASSIST, + Moves.BELCH, + Moves.BEAK_BLAST, + Moves.BIDE, + Moves.BOUNCE, + Moves.COPYCAT, + Moves.DIG, + Moves.DIVE, + Moves.DYNAMAX_CANNON, + Moves.FREEZE_SHOCK, + Moves.FLY, + Moves.FOCUS_PUNCH, + Moves.GEOMANCY, + Moves.ICE_BURN, + Moves.ME_FIRST, + Moves.METRONOME, + Moves.MIRROR_MOVE, + Moves.MIMIC, + Moves.PHANTOM_FORCE, + Moves.RAZOR_WIND, + Moves.SHADOW_FORCE, + Moves.SHELL_TRAP, + Moves.SKETCH, + Moves.SKULL_BASH, + Moves.SKY_ATTACK, + Moves.SKY_DROP, + Moves.SLEEP_TALK, + Moves.SOLAR_BLADE, + Moves.SOLAR_BEAM, + Moves.STRUGGLE, + Moves.UPROAR, +]; + +const invalidCopycatMoves = [ + Moves.ASSIST, + Moves.BANEFUL_BUNKER, + Moves.BEAK_BLAST, + Moves.BEHEMOTH_BASH, + Moves.BEHEMOTH_BLADE, + Moves.BESTOW, + Moves.CELEBRATE, + Moves.CHATTER, + Moves.CIRCLE_THROW, + Moves.COPYCAT, + Moves.COUNTER, + Moves.COVET, + Moves.DESTINY_BOND, + Moves.DETECT, + Moves.DRAGON_TAIL, + Moves.ENDURE, + Moves.FEINT, + Moves.FOCUS_PUNCH, + Moves.FOLLOW_ME, + Moves.HELPING_HAND, + Moves.HOLD_HANDS, + Moves.KINGS_SHIELD, + Moves.MAT_BLOCK, + Moves.ME_FIRST, + Moves.METRONOME, + Moves.MIMIC, + Moves.MIRROR_COAT, + Moves.MIRROR_MOVE, + Moves.PROTECT, + Moves.RAGE_POWDER, + Moves.ROAR, + Moves.SHELL_TRAP, + Moves.SKETCH, + Moves.SLEEP_TALK, + Moves.SNATCH, + Moves.SPIKY_SHIELD, + Moves.SPOTLIGHT, + Moves.STRUGGLE, + Moves.SWITCHEROO, + Moves.THIEF, + Moves.TRANSFORM, + Moves.TRICK, + Moves.WHIRLWIND, +]; + +export class NaturePowerAttr extends OverrideMoveEffectAttr { + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + let moveId; + switch (globalScene.arena.getTerrainType()) { + // this allows terrains to 'override' the biome move + case TerrainType.NONE: + switch (globalScene.arena.biomeType) { + case Biome.TOWN: + moveId = Moves.ROUND; + break; + case Biome.METROPOLIS: + moveId = Moves.TRI_ATTACK; + break; + case Biome.SLUM: + moveId = Moves.SLUDGE_BOMB; + break; + case Biome.PLAINS: + moveId = Moves.SILVER_WIND; + break; + case Biome.GRASS: + moveId = Moves.GRASS_KNOT; + break; + case Biome.TALL_GRASS: + moveId = Moves.POLLEN_PUFF; + break; + case Biome.MEADOW: + moveId = Moves.GIGA_DRAIN; + break; + case Biome.FOREST: + moveId = Moves.BUG_BUZZ; + break; + case Biome.JUNGLE: + moveId = Moves.LEAF_STORM; + break; + case Biome.SEA: + moveId = Moves.HYDRO_PUMP; + break; + case Biome.SWAMP: + moveId = Moves.MUD_BOMB; + break; + case Biome.BEACH: + moveId = Moves.SCALD; + break; + case Biome.LAKE: + moveId = Moves.BUBBLE_BEAM; + break; + case Biome.SEABED: + moveId = Moves.BRINE; + break; + case Biome.ISLAND: + moveId = Moves.LEAF_TORNADO; + break; + case Biome.MOUNTAIN: + moveId = Moves.AIR_SLASH; + break; + case Biome.BADLANDS: + moveId = Moves.EARTH_POWER; + break; + case Biome.DESERT: + moveId = Moves.SCORCHING_SANDS; + break; + case Biome.WASTELAND: + moveId = Moves.DRAGON_PULSE; + break; + case Biome.CONSTRUCTION_SITE: + moveId = Moves.STEEL_BEAM; + break; + case Biome.CAVE: + moveId = Moves.POWER_GEM; + break; + case Biome.ICE_CAVE: + moveId = Moves.ICE_BEAM; + break; + case Biome.SNOWY_FOREST: + moveId = Moves.FROST_BREATH; + break; + case Biome.VOLCANO: + moveId = Moves.LAVA_PLUME; + break; + case Biome.GRAVEYARD: + moveId = Moves.SHADOW_BALL; + break; + case Biome.RUINS: + moveId = Moves.ANCIENT_POWER; + break; + case Biome.TEMPLE: + moveId = Moves.EXTRASENSORY; + break; + case Biome.DOJO: + moveId = Moves.FOCUS_BLAST; + break; + case Biome.FAIRY_CAVE: + moveId = Moves.ALLURING_VOICE; + break; + case Biome.ABYSS: + moveId = Moves.OMINOUS_WIND; + break; + case Biome.SPACE: + moveId = Moves.DRACO_METEOR; + break; + case Biome.FACTORY: + moveId = Moves.FLASH_CANNON; + break; + case Biome.LABORATORY: + moveId = Moves.ZAP_CANNON; + break; + case Biome.POWER_PLANT: + moveId = Moves.CHARGE_BEAM; + break; + case Biome.END: + moveId = Moves.ETERNABEAM; + break; + } + break; + case TerrainType.MISTY: + moveId = Moves.MOONBLAST; + break; + case TerrainType.ELECTRIC: + moveId = Moves.THUNDERBOLT; + break; + case TerrainType.GRASSY: + moveId = Moves.ENERGY_BALL; + break; + case TerrainType.PSYCHIC: + moveId = Moves.PSYCHIC; + break; + default: + // Just in case there's no match + moveId = Moves.TRI_ATTACK; + break; + } + + user.getMoveQueue().push({ move: moveId, targets: [ target.getBattlerIndex() ], ignorePP: true }); + globalScene.unshiftPhase(new LoadMoveAnimPhase(moveId)); + globalScene.unshiftPhase(new MovePhase(user, [ target.getBattlerIndex() ], new PokemonMove(moveId, 0, 0, true), true)); + return true; + } +} + +/** + * Attribute used to copy a previously-used move. + * Used for {@linkcode Moves.COPYCAT} and {@linkcode Moves.MIRROR_MOVE} + * @see {@linkcode apply} for move selection and move call + * @extends CallMoveAttr to call a selected move + */ +export class CopyMoveAttr extends CallMoveAttr { + private mirrorMove: boolean; + constructor(mirrorMove: boolean, invalidMoves: Moves[] = []) { + super(); + this.mirrorMove = mirrorMove; + this.invalidMoves = invalidMoves; + } + + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + this.hasTarget = this.mirrorMove; + const lastMove = this.mirrorMove ? target.getLastXMoves()[0].move : globalScene.currentBattle.lastMove; + return super.apply(user, target, allMoves[lastMove], args); + } + + getCondition(): MoveConditionFunc { + return (user, target, move) => { + if (this.mirrorMove) { + return target.getMoveHistory().length !== 0; + } else { + const lastMove = globalScene.currentBattle.lastMove; + return lastMove !== undefined && !this.invalidMoves.includes(lastMove); + } + }; } } @@ -6768,26 +7342,41 @@ export class RepeatMoveAttr extends MoveEffectAttr { // get the last move used (excluding status based failures) as well as the corresponding moveset slot const lastMove = target.getLastXMoves(-1).find(m => m.move !== Moves.NONE)!; const movesetMove = target.getMoveset().find(m => m?.moveId === lastMove.move)!; - const moveTargets = lastMove.targets ?? []; + // If the last move used can hit more than one target or has variable targets, + // re-compute the targets for the attack + // (mainly for alternating double/single battle shenanigans) + // Rampaging moves (e.g. Outrage) are not included due to being incompatible with Instruct + // TODO: Fix this once dragon darts gets smart targeting + let moveTargets = movesetMove.getMove().isMultiTarget() ? getMoveTargets(target, lastMove.move).targets : lastMove.targets; - user.scene.queueMessage(i18next.t("moveTriggers:instructingMove", { + /** In the event the instructed move's only target is a fainted opponent, redirect it to an alive ally if possible + Normally, all yet-unexecuted move phases would swap over when the enemy in question faints + (see `redirectPokemonMoves` in `battle-scene.ts`), + but since instruct adds a new move phase pre-emptively, we need to handle this interaction manually. + */ + const firstTarget = globalScene.getField()[moveTargets[0]]; + if (globalScene.currentBattle.double && moveTargets.length === 1 && firstTarget.isFainted() && firstTarget !== target.getAlly()) { + const ally = firstTarget.getAlly(); + if (ally.isActive()) { // ally exists, is not dead and can sponge the blast + moveTargets = [ ally.getBattlerIndex() ]; + } + } + + globalScene.queueMessage(i18next.t("moveTriggers:instructingMove", { userPokemonName: getPokemonNameWithAffix(user), targetPokemonName: getPokemonNameWithAffix(target) })); target.getMoveQueue().unshift({ move: lastMove.move, targets: moveTargets, ignorePP: false }); target.turnData.extraTurns++; - target.scene.appendToPhase(new MovePhase(target.scene, target, moveTargets, movesetMove), MoveEndPhase); + globalScene.appendToPhase(new MovePhase(target, moveTargets, movesetMove), MoveEndPhase); return true; } getCondition(): MoveConditionFunc { return (user, target, move) => { - // TODO: Confirm behavior of instructing move known by target but called by another move const lastMove = target.getLastXMoves(-1).find(m => m.move !== Moves.NONE); const movesetMove = target.getMoveset().find(m => m?.moveId === lastMove?.move); - const moveTargets = lastMove?.targets ?? []; - // TODO: Add a way of adding moves to list procedurally rather than a pre-defined blacklist - const unrepeatablemoves = [ + const uninstructableMoves = [ // Locking/Continually Executed moves Moves.OUTRAGE, Moves.RAGING_FURY, @@ -6842,19 +7431,19 @@ export class RepeatMoveAttr extends MoveEffectAttr { // TODO: Add Max/G-Move blockage if or when they are implemented ]; - if (!movesetMove // called move not in target's moveset (dancer, forgetting the move, etc.) + if (!lastMove?.move // no move to instruct + || !movesetMove // called move not in target's moveset (forgetting the move, etc.) || movesetMove.ppUsed === movesetMove.getMovePp() // move out of pp - || allMoves[lastMove?.move ?? Moves.NONE].isChargingMove() // called move is a charging/recharging move - || !moveTargets.length // called move has no targets - || unrepeatablemoves.includes(lastMove?.move ?? Moves.NONE)) { // called move is explicitly in the banlist + || allMoves[lastMove.move].isChargingMove() // called move is a charging/recharging move + || uninstructableMoves.includes(lastMove.move)) { // called move is in the banlist return false; } return true; }; } - getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { - // TODO: Make the AI acutally use instruct + getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { + // TODO: Make the AI actually use instruct /* Ideally, the AI would score instruct based on the scorings of the on-field pokemons' * last used moves at the time of using Instruct (by the time the instructor gets to act) * with respect to the user's side. @@ -6893,8 +7482,8 @@ export class ReducePpMoveAttr extends MoveEffectAttr { movesetMove!.ppUsed = Math.min((movesetMove?.ppUsed!) + this.reduction, movesetMove?.getMovePp()!); // TODO: is the bang correct? const message = i18next.t("battle:ppReduced", { targetName: getPokemonNameWithAffix(target), moveName: movesetMove?.getName(), reduction: (movesetMove?.ppUsed!) - lastPpUsed }); // TODO: is the bang correct? - user.scene.eventTarget.dispatchEvent(new MoveUsedEvent(target?.id, movesetMove?.getMove()!, movesetMove?.ppUsed!)); // TODO: are these bangs correct? - user.scene.queueMessage(message); + globalScene.eventTarget.dispatchEvent(new MoveUsedEvent(target?.id, movesetMove?.getMove()!, movesetMove?.ppUsed!)); // TODO: are these bangs correct? + globalScene.queueMessage(message); return true; } @@ -7005,7 +7594,7 @@ export class MovesetCopyMoveAttr extends OverrideMoveEffectAttr { user.summonData.moveset = user.getMoveset().slice(0); user.summonData.moveset[thisMoveIndex] = new PokemonMove(copiedMove.id, 0, 0); - user.scene.queueMessage(i18next.t("moveTriggers:copiedMove", { pokemonName: getPokemonNameWithAffix(user), moveName: copiedMove.name })); + globalScene.queueMessage(i18next.t("moveTriggers:copiedMove", { pokemonName: getPokemonNameWithAffix(user), moveName: copiedMove.name })); return true; } @@ -7055,7 +7644,7 @@ export class SketchAttr extends MoveEffectAttr { user.setMove(sketchIndex, sketchedMove.id); - user.scene.queueMessage(i18next.t("moveTriggers:sketchedMove", { pokemonName: getPokemonNameWithAffix(user), moveName: sketchedMove.name })); + globalScene.queueMessage(i18next.t("moveTriggers:sketchedMove", { pokemonName: getPokemonNameWithAffix(user), moveName: sketchedMove.name })); return true; } @@ -7112,10 +7701,10 @@ export class AbilityChangeAttr extends MoveEffectAttr { const moveTarget = this.selfTarget ? user : target; - moveTarget.summonData.ability = this.ability; - user.scene.triggerPokemonFormChange(moveTarget, SpeciesFormChangeRevertWeatherFormTrigger); + globalScene.queueMessage(i18next.t("moveTriggers:acquiredAbility", { pokemonName: getPokemonNameWithAffix((this.selfTarget ? user : target)), abilityName: allAbilities[this.ability].name })); - user.scene.queueMessage(i18next.t("moveTriggers:acquiredAbility", { pokemonName: getPokemonNameWithAffix((this.selfTarget ? user : target)), abilityName: allAbilities[this.ability].name })); + moveTarget.setTempAbility(allAbilities[this.ability]); + globalScene.triggerPokemonFormChange(moveTarget, SpeciesFormChangeRevertWeatherFormTrigger); return true; } @@ -7139,13 +7728,13 @@ export class AbilityCopyAttr extends MoveEffectAttr { return false; } - user.summonData.ability = target.getAbility().id; + globalScene.queueMessage(i18next.t("moveTriggers:copiedTargetAbility", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), abilityName: allAbilities[target.getAbility().id].name })); - user.scene.queueMessage(i18next.t("moveTriggers:copiedTargetAbility", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), abilityName: allAbilities[target.getAbility().id].name })); + user.setTempAbility(target.getAbility()); - if (this.copyToPartner && user.scene.currentBattle?.double && user.getAlly().hp) { - user.getAlly().summonData.ability = target.getAbility().id; - user.getAlly().scene.queueMessage(i18next.t("moveTriggers:copiedTargetAbility", { pokemonName: getPokemonNameWithAffix(user.getAlly()), targetName: getPokemonNameWithAffix(target), abilityName: allAbilities[target.getAbility().id].name })); + if (this.copyToPartner && globalScene.currentBattle?.double && user.getAlly().hp) { + globalScene.queueMessage(i18next.t("moveTriggers:copiedTargetAbility", { pokemonName: getPokemonNameWithAffix(user.getAlly()), targetName: getPokemonNameWithAffix(target), abilityName: allAbilities[target.getAbility().id].name })); + user.getAlly().setTempAbility(target.getAbility()); } return true; @@ -7154,7 +7743,7 @@ export class AbilityCopyAttr extends MoveEffectAttr { getCondition(): MoveConditionFunc { return (user, target, move) => { let ret = !target.getAbility().hasAttr(UncopiableAbilityAbAttr) && !user.getAbility().hasAttr(UnsuppressableAbilityAbAttr); - if (this.copyToPartner && user.scene.currentBattle?.double) { + if (this.copyToPartner && globalScene.currentBattle?.double) { ret = ret && (!user.getAlly().hp || !user.getAlly().getAbility().hasAttr(UnsuppressableAbilityAbAttr)); } else { ret = ret && user.getAbility().id !== target.getAbility().id; @@ -7176,9 +7765,9 @@ export class AbilityGiveAttr extends MoveEffectAttr { return false; } - target.summonData.ability = user.getAbility().id; + globalScene.queueMessage(i18next.t("moveTriggers:acquiredAbility", { pokemonName: getPokemonNameWithAffix(target), abilityName: allAbilities[user.getAbility().id].name })); - user.scene.queueMessage(i18next.t("moveTriggers:acquiredAbility", { pokemonName: getPokemonNameWithAffix(target), abilityName: allAbilities[user.getAbility().id].name })); + target.setTempAbility(user.getAbility()); return true; } @@ -7194,15 +7783,14 @@ export class SwitchAbilitiesAttr extends MoveEffectAttr { return false; } - const tempAbilityId = user.getAbility().id; - user.summonData.ability = target.getAbility().id; - target.summonData.ability = tempAbilityId; + const tempAbility = user.getAbility(); - user.scene.queueMessage(i18next.t("moveTriggers:swappedAbilitiesWithTarget", { pokemonName: getPokemonNameWithAffix(user) })); + globalScene.queueMessage(i18next.t("moveTriggers:swappedAbilitiesWithTarget", { pokemonName: getPokemonNameWithAffix(user) })); + + user.setTempAbility(target.getAbility()); + target.setTempAbility(tempAbility); // Swaps Forecast/Flower Gift from Castform/Cherrim - user.scene.arena.triggerWeatherBasedFormChangesToNormal(); - // Swaps Forecast/Flower Gift to Castform/Cherrim (edge case) - user.scene.arena.triggerWeatherBasedFormChanges(); + globalScene.arena.triggerWeatherBasedFormChangesToNormal(); return true; } @@ -7227,10 +7815,11 @@ export class SuppressAbilitiesAttr extends MoveEffectAttr { return false; } - target.summonData.abilitySuppressed = true; - target.scene.arena.triggerWeatherBasedFormChangesToNormal(); + globalScene.queueMessage(i18next.t("moveTriggers:suppressAbilities", { pokemonName: getPokemonNameWithAffix(target) })); - target.scene.queueMessage(i18next.t("moveTriggers:suppressAbilities", { pokemonName: getPokemonNameWithAffix(target) })); + target.suppressAbility(); + + globalScene.arena.triggerWeatherBasedFormChangesToNormal(); return true; } @@ -7274,49 +7863,15 @@ export class SuppressAbilitiesIfActedAttr extends MoveEffectAttr { * Used by Transform */ export class TransformAttr extends MoveEffectAttr { - async apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise { + override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (!super.apply(user, target, move, args)) { return false; } - const promises: Promise[] = []; - user.summonData.speciesForm = target.getSpeciesForm(); - user.summonData.ability = target.getAbility().id; - user.summonData.gender = target.getGender(); + globalScene.unshiftPhase(new PokemonTransformPhase(user.getBattlerIndex(), target.getBattlerIndex())); - // Power Trick's effect will not preserved after using Transform - user.removeTag(BattlerTagType.POWER_TRICK); + globalScene.queueMessage(i18next.t("moveTriggers:transformedIntoTarget", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target) })); - // Copy all stats (except HP) - for (const s of EFFECTIVE_STATS) { - user.setStat(s, target.getStat(s, false), false); - } - - // Copy all stat stages - for (const s of BATTLE_STATS) { - user.setStatStage(s, target.getStatStage(s)); - } - - user.summonData.moveset = target.getMoveset().map((m) => { - if (m) { - // If PP value is less than 5, do nothing. If greater, we need to reduce the value to 5. - return new PokemonMove(m.moveId, 0, 0, false, Math.min(m.getMove().pp, 5)); - } else { - console.warn(`Transform: somehow iterating over a ${m} value when copying moveset!`); - return new PokemonMove(Moves.NONE); - } - }); - user.summonData.types = target.getTypes(); - promises.push(user.updateInfo()); - - user.scene.queueMessage(i18next.t("moveTriggers:transformedIntoTarget", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target) })); - - promises.push(user.loadAssets(false).then(() => { - user.playAnim(); - user.updateInfo(); - })); - - await Promise.all(promises); return true; } } @@ -7352,7 +7907,7 @@ export class SwapStatAttr extends MoveEffectAttr { user.setStat(this.stat, target.getStat(this.stat, false), false); target.setStat(this.stat, temp, false); - user.scene.queueMessage(i18next.t("moveTriggers:switchedStat", { + globalScene.queueMessage(i18next.t("moveTriggers:switchedStat", { pokemonName: getPokemonNameWithAffix(user), stat: i18next.t(getStatKey(this.stat)), })); @@ -7398,7 +7953,7 @@ export class ShiftStatAttr extends MoveEffectAttr { user.setStat(this.statToSwitch, secondStat, false); user.setStat(this.statToSwitchWith, firstStat, false); - user.scene.queueMessage(i18next.t("moveTriggers:shiftedStats", { + globalScene.queueMessage(i18next.t("moveTriggers:shiftedStats", { pokemonName: getPokemonNameWithAffix(user), statToSwitch: i18next.t(getStatKey(this.statToSwitch)), statToSwitchWith: i18next.t(getStatKey(this.statToSwitchWith)) @@ -7414,7 +7969,7 @@ export class ShiftStatAttr extends MoveEffectAttr { * @param move n/a * @returns number of points to add to the user's benefit score */ - override getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { + override getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { return user.getStat(this.statToSwitchWith, false) > user.getStat(this.statToSwitch, false) ? 10 : 0; } } @@ -7457,7 +8012,7 @@ export class AverageStatsAttr extends MoveEffectAttr { target.setStat(s, avg, false); } - user.scene.queueMessage(i18next.t(this.msgKey, { pokemonName: getPokemonNameWithAffix(user) })); + globalScene.queueMessage(i18next.t(this.msgKey, { pokemonName: getPokemonNameWithAffix(user) })); return true; } @@ -7466,7 +8021,7 @@ export class AverageStatsAttr extends MoveEffectAttr { } export class DiscourageFrequentUseAttr extends MoveAttr { - getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { + getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { const lastMoves = user.getLastXMoves(4); console.log(lastMoves); for (let m = 0; m < lastMoves.length; m++) { @@ -7485,8 +8040,8 @@ export class MoneyAttr extends MoveEffectAttr { } apply(user: Pokemon, target: Pokemon, move: Move): boolean { - user.scene.currentBattle.moneyScattered += user.scene.getWaveMoneyAmount(0.2); - user.scene.queueMessage(i18next.t("moveTriggers:coinsScatteredEverywhere")); + globalScene.currentBattle.moneyScattered += globalScene.getWaveMoneyAmount(0.2); + globalScene.queueMessage(i18next.t("moveTriggers:coinsScatteredEverywhere")); return true; } } @@ -7510,7 +8065,7 @@ export class DestinyBondAttr extends MoveEffectAttr { * @returns true */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - user.scene.queueMessage(`${i18next.t("moveTriggers:tryingToTakeFoeDown", { pokemonName: getPokemonNameWithAffix(user) })}`); + globalScene.queueMessage(`${i18next.t("moveTriggers:tryingToTakeFoeDown", { pokemonName: getPokemonNameWithAffix(user) })}`); user.addTag(BattlerTagType.DESTINY_BOND, undefined, move.id, user.id); return true; } @@ -7582,31 +8137,6 @@ export class LastResortAttr extends MoveAttr { } } - -/** - * The move only works if the target has a transferable held item - * @extends MoveAttr - * @see {@linkcode getCondition} - */ -export class AttackedByItemAttr extends MoveAttr { - /** - * @returns the {@linkcode MoveConditionFunc} for this {@linkcode Move} - */ - getCondition(): MoveConditionFunc { - return (user: Pokemon, target: Pokemon, move: Move) => { - const heldItems = target.getHeldItems().filter(i => i.isTransferable); - if (heldItems.length === 0) { - return false; - } - - const itemName = heldItems[0]?.type?.name ?? "item"; - target.scene.queueMessage(i18next.t("moveTriggers:attackedByItem", { pokemonName: getPokemonNameWithAffix(target), itemName: itemName })); - - return true; - }; - } -} - export class VariableTargetAttr extends MoveAttr { private targetChangeFunc: (user: Pokemon, target: Pokemon, move: Move) => number; @@ -7639,30 +8169,80 @@ export class AfterYouAttr extends MoveEffectAttr { * @returns true */ override apply(user: Pokemon, target: Pokemon, _move: Move, _args: any[]): boolean { - user.scene.queueMessage(i18next.t("moveTriggers:afterYou", { targetName: getPokemonNameWithAffix(target) })); + globalScene.queueMessage(i18next.t("moveTriggers:afterYou", { targetName: getPokemonNameWithAffix(target) })); //Will find next acting phase of the targeted pokémon, delete it and queue it next on successful delete. - const nextAttackPhase = target.scene.findPhase((phase) => phase.pokemon === target); - if (nextAttackPhase && target.scene.tryRemovePhase((phase: MovePhase) => phase.pokemon === target)) { - target.scene.prependToPhase(new MovePhase(target.scene, target, [ ...nextAttackPhase.targets ], nextAttackPhase.move), MovePhase); + const nextAttackPhase = globalScene.findPhase((phase) => phase.pokemon === target); + if (nextAttackPhase && globalScene.tryRemovePhase((phase: MovePhase) => phase.pokemon === target)) { + globalScene.prependToPhase(new MovePhase(target, [ ...nextAttackPhase.targets ], nextAttackPhase.move), MovePhase); } return true; } } -const failOnGravityCondition: MoveConditionFunc = (user, target, move) => !user.scene.arena.getTag(ArenaTagType.GRAVITY); +/** + * Move effect to force the target to move last, ignoring priority. + * If applied to multiple targets, they move in speed order after all other moves. + * @extends MoveEffectAttr + */ +export class ForceLastAttr extends MoveEffectAttr { + /** + * Forces the target of this move to move last. + * + * @param user {@linkcode Pokemon} that is using the move. + * @param target {@linkcode Pokemon} that will be forced to move last. + * @param move {@linkcode Move} {@linkcode Moves.QUASH} + * @param _args N/A + * @returns true + */ + override apply(user: Pokemon, target: Pokemon, _move: Move, _args: any[]): boolean { + globalScene.queueMessage(i18next.t("moveTriggers:forceLast", { targetPokemonName: getPokemonNameWithAffix(target) })); + + const targetMovePhase = globalScene.findPhase((phase) => phase.pokemon === target); + if (targetMovePhase && !targetMovePhase.isForcedLast() && globalScene.tryRemovePhase((phase: MovePhase) => phase.pokemon === target)) { + // Finding the phase to insert the move in front of - + // Either the end of the turn or in front of another, slower move which has also been forced last + const prependPhase = globalScene.findPhase((phase) => + [ MovePhase, MoveEndPhase ].every(cls => !(phase instanceof cls)) + || (phase instanceof MovePhase) && phaseForcedSlower(phase, target, !!globalScene.arena.getTag(ArenaTagType.TRICK_ROOM)) + ); + if (prependPhase) { + globalScene.phaseQueue.splice( + globalScene.phaseQueue.indexOf(prependPhase), + 0, + new MovePhase(target, [ ...targetMovePhase.targets ], targetMovePhase.move, false, false, false, true) + ); + } + } + return true; + } +} + +/** Returns whether a {@linkcode MovePhase} has been forced last and the corresponding pokemon is slower than {@linkcode target} */ +const phaseForcedSlower = (phase: MovePhase, target: Pokemon, trickRoom: boolean): boolean => { + let slower: boolean; + // quashed pokemon still have speed ties + if (phase.pokemon.getEffectiveStat(Stat.SPD) === target.getEffectiveStat(Stat.SPD)) { + slower = !!target.randSeedInt(2); + } else { + slower = !trickRoom ? phase.pokemon.getEffectiveStat(Stat.SPD) < target.getEffectiveStat(Stat.SPD) : phase.pokemon.getEffectiveStat(Stat.SPD) > target.getEffectiveStat(Stat.SPD); + } + return phase.isForcedLast() && slower; +}; + +const failOnGravityCondition: MoveConditionFunc = (user, target, move) => !globalScene.arena.getTag(ArenaTagType.GRAVITY); const failOnBossCondition: MoveConditionFunc = (user, target, move) => !target.isBossImmune(); -const failIfSingleBattle: MoveConditionFunc = (user, target, move) => user.scene.currentBattle.double; +const failIfSingleBattle: MoveConditionFunc = (user, target, move) => globalScene.currentBattle.double; const failIfDampCondition: MoveConditionFunc = (user, target, move) => { const cancelled = new Utils.BooleanHolder(false); - user.scene.getField(true).map(p=>applyAbAttrs(FieldPreventExplosiveMovesAbAttr, p, cancelled)); + globalScene.getField(true).map(p=>applyAbAttrs(FieldPreventExplosiveMovesAbAttr, p, cancelled)); // Queue a message if an ability prevented usage of the move if (cancelled.value) { - user.scene.queueMessage(i18next.t("moveTriggers:cannotUseMove", { pokemonName: getPokemonNameWithAffix(user), moveName: move.name })); + globalScene.queueMessage(i18next.t("moveTriggers:cannotUseMove", { pokemonName: getPokemonNameWithAffix(user), moveName: move.name })); } return !cancelled.value; }; @@ -7671,55 +8251,77 @@ const userSleptOrComatoseCondition: MoveConditionFunc = (user: Pokemon, target: const targetSleptOrComatoseCondition: MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => target.status?.effect === StatusEffect.SLEEP || target.hasAbility(Abilities.COMATOSE); -const failIfLastCondition: MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => user.scene.phaseQueue.find(phase => phase instanceof MovePhase) !== undefined; +const failIfLastCondition: MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => globalScene.phaseQueue.find(phase => phase instanceof MovePhase) !== undefined; const failIfLastInPartyCondition: MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => { - const party: Pokemon[] = user.isPlayer() ? user.scene.getPlayerParty() : user.scene.getEnemyParty(); + const party: Pokemon[] = user.isPlayer() ? globalScene.getPlayerParty() : globalScene.getEnemyParty(); return party.some(pokemon => pokemon.isActive() && !pokemon.isOnField()); }; const failIfGhostTypeCondition: MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => !target.isOfType(Type.GHOST); +const failIfNoTargetHeldItemsCondition: MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => target.getHeldItems().filter(i => i.isTransferable)?.length > 0; + +const attackedByItemMessageFunc = (user: Pokemon, target: Pokemon, move: Move) => { + const heldItems = target.getHeldItems().filter(i => i.isTransferable); + if (heldItems.length === 0) { + return ""; + } + const itemName = heldItems[0]?.type?.name ?? "item"; + const message: string = i18next.t("moveTriggers:attackedByItem", { pokemonName: getPokemonNameWithAffix(target), itemName: itemName }); + return message; +}; + export type MoveAttrFilter = (attr: MoveAttr) => boolean; -function applyMoveAttrsInternal(attrFilter: MoveAttrFilter, user: Pokemon | null, target: Pokemon | null, move: Move, args: any[]): Promise { - return new Promise(resolve => { - const attrPromises: Promise[] = []; - const moveAttrs = move.attrs.filter(a => attrFilter(a)); - for (const attr of moveAttrs) { - const result = attr.apply(user, target, move, args); - if (result instanceof Promise) { - attrPromises.push(result); - } - } - Promise.allSettled(attrPromises).then(() => resolve()); - }); +function applyMoveAttrsInternal( + attrFilter: MoveAttrFilter, + user: Pokemon | null, + target: Pokemon | null, + move: Move, + args: any[], +): void { + move.attrs.filter((attr) => attrFilter(attr)).forEach((attr) => attr.apply(user, target, move, args)); } -function applyMoveChargeAttrsInternal(attrFilter: MoveAttrFilter, user: Pokemon | null, target: Pokemon | null, move: ChargingMove, args: any[]): Promise { - return new Promise(resolve => { - const chargeAttrPromises: Promise[] = []; - const chargeMoveAttrs = move.chargeAttrs.filter(a => attrFilter(a)); - for (const attr of chargeMoveAttrs) { - const result = attr.apply(user, target, move, args); - if (result instanceof Promise) { - chargeAttrPromises.push(result); - } - } - Promise.allSettled(chargeAttrPromises).then(() => resolve()); - }); +function applyMoveChargeAttrsInternal( + attrFilter: MoveAttrFilter, + user: Pokemon | null, + target: Pokemon | null, + move: ChargingMove, + args: any[], +): void { + move.chargeAttrs.filter((attr) => attrFilter(attr)).forEach((attr) => attr.apply(user, target, move, args)); } -export function applyMoveAttrs(attrType: Constructor, user: Pokemon | null, target: Pokemon | null, move: Move, ...args: any[]): Promise { - return applyMoveAttrsInternal((attr: MoveAttr) => attr instanceof attrType, user, target, move, args); +export function applyMoveAttrs( + attrType: Constructor, + user: Pokemon | null, + target: Pokemon | null, + move: Move, + ...args: any[] +): void { + applyMoveAttrsInternal((attr: MoveAttr) => attr instanceof attrType, user, target, move, args); } -export function applyFilteredMoveAttrs(attrFilter: MoveAttrFilter, user: Pokemon, target: Pokemon | null, move: Move, ...args: any[]): Promise { - return applyMoveAttrsInternal(attrFilter, user, target, move, args); +export function applyFilteredMoveAttrs( + attrFilter: MoveAttrFilter, + user: Pokemon, + target: Pokemon | null, + move: Move, + ...args: any[] +): void { + applyMoveAttrsInternal(attrFilter, user, target, move, args); } -export function applyMoveChargeAttrs(attrType: Constructor, user: Pokemon | null, target: Pokemon | null, move: ChargingMove, ...args: any[]): Promise { - return applyMoveChargeAttrsInternal((attr: MoveAttr) => attr instanceof attrType, user, target, move, args); +export function applyMoveChargeAttrs( + attrType: Constructor, + user: Pokemon | null, + target: Pokemon | null, + move: ChargingMove, + ...args: any[] +): void { + applyMoveChargeAttrsInternal((attr: MoveAttr) => attr instanceof attrType, user, target, move, args); } export class MoveCondition { @@ -7733,7 +8335,7 @@ export class MoveCondition { return this.func(user, target, move); } - getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { + getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { return 0; } } @@ -7743,7 +8345,7 @@ export class FirstMoveCondition extends MoveCondition { super((user, target, move) => user.battleSummonData?.waveTurnCount === 1); } - getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { + getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { return this.apply(user, target, move) ? 10 : -20; } } @@ -7757,7 +8359,7 @@ export class FirstMoveCondition extends MoveCondition { export class UpperHandCondition extends MoveCondition { constructor() { super((user, target, move) => { - const targetCommand = user.scene.currentBattle.turnCommands[target.getBattlerIndex()]; + const targetCommand = globalScene.currentBattle.turnCommands[target.getBattlerIndex()]; return !!targetCommand && targetCommand.command === Command.FIGHT @@ -7816,13 +8418,13 @@ export class ResistLastMoveTypeAttr extends MoveEffectAttr { return false; } const userTypes = user.getTypes(); - const validTypes = this.getTypeResistances(user.scene.gameMode, moveData.type).filter(t => !userTypes.includes(t)); // valid types are ones that are not already the user's types + const validTypes = this.getTypeResistances(globalScene.gameMode, moveData.type).filter(t => !userTypes.includes(t)); // valid types are ones that are not already the user's types if (!validTypes.length) { return false; } const type = validTypes[user.randSeedInt(validTypes.length)]; user.summonData.types = [ type ]; - user.scene.queueMessage(i18next.t("battle:transformedIntoType", { pokemonName: getPokemonNameWithAffix(user), type: Utils.toReadableString(Type[type]) })); + globalScene.queueMessage(i18next.t("battle:transformedIntoType", { pokemonName: getPokemonNameWithAffix(user), type: Utils.toReadableString(Type[type]) })); user.updateInfo(); return true; @@ -7881,7 +8483,7 @@ export class ExposedMoveAttr extends AddBattlerTagAttr { return false; } - user.scene.queueMessage(i18next.t("moveTriggers:exposedMove", { pokemonName: getPokemonNameWithAffix(user), targetPokemonName: getPokemonNameWithAffix(target) })); + globalScene.queueMessage(i18next.t("moveTriggers:exposedMove", { pokemonName: getPokemonNameWithAffix(user), targetPokemonName: getPokemonNameWithAffix(target) })); return true; } @@ -7895,11 +8497,20 @@ export type MoveTargetSet = { multiple: boolean; }; -export function getMoveTargets(user: Pokemon, move: Moves): MoveTargetSet { +export function getMoveTargets(user: Pokemon, move: Moves, replaceTarget?: MoveTarget): MoveTargetSet { const variableTarget = new Utils.NumberHolder(0); user.getOpponents().forEach(p => applyMoveAttrs(VariableTargetAttr, user, p, allMoves[move], variableTarget)); - const moveTarget = allMoves[move].hasAttr(VariableTargetAttr) ? variableTarget.value : move ? allMoves[move].moveTarget : move === undefined ? MoveTarget.NEAR_ENEMY : []; + let moveTarget: MoveTarget | undefined; + if (allMoves[move].hasAttr(VariableTargetAttr)) { + moveTarget = variableTarget.value; + } else if (replaceTarget !== undefined) { + moveTarget = replaceTarget; + } else if (move) { + moveTarget = allMoves[move].moveTarget; + } else if (move === undefined) { + moveTarget = MoveTarget.NEAR_ENEMY; + } const opponents = user.getOpponents(); let set: Pokemon[] = []; @@ -7991,7 +8602,6 @@ export function initMoves() { .chargeText(i18next.t("moveTriggers:whippedUpAWhirlwind", { pokemonName: "{USER}" })) .attr(HighCritAttr) .windMove() - .ignoresVirtual() .target(MoveTarget.ALL_NEAR_ENEMIES), new SelfStatusMove(Moves.SWORDS_DANCE, Type.NORMAL, -1, 20, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.ATK ], 2, true) @@ -8006,12 +8616,12 @@ export function initMoves() { .attr(ForceSwitchOutAttr, false, SwitchType.FORCE_SWITCH) .ignoresSubstitute() .hidesTarget() - .windMove(), + .windMove() + .reflectable(), new ChargingAttackMove(Moves.FLY, Type.FLYING, MoveCategory.PHYSICAL, 90, 95, 15, -1, 0, 1) .chargeText(i18next.t("moveTriggers:flewUpHigh", { pokemonName: "{USER}" })) .chargeAttr(SemiInvulnerableAttr, BattlerTagType.FLYING) - .condition(failOnGravityCondition) - .ignoresVirtual(), + .condition(failOnGravityCondition), new AttackMove(Moves.BIND, Type.NORMAL, MoveCategory.PHYSICAL, 15, 85, 20, -1, 0, 1) .attr(TrapAttr, BattlerTagType.BIND), new AttackMove(Moves.SLAM, Type.NORMAL, MoveCategory.PHYSICAL, 80, 75, 20, -1, 0, 1), @@ -8031,7 +8641,8 @@ export function initMoves() { new AttackMove(Moves.ROLLING_KICK, Type.FIGHTING, MoveCategory.PHYSICAL, 60, 85, 15, 30, 0, 1) .attr(FlinchAttr), new StatusMove(Moves.SAND_ATTACK, Type.GROUND, 100, 15, -1, 0, 1) - .attr(StatStageChangeAttr, [ Stat.ACC ], -1), + .attr(StatStageChangeAttr, [ Stat.ACC ], -1) + .reflectable(), new AttackMove(Moves.HEADBUTT, Type.NORMAL, MoveCategory.PHYSICAL, 70, 100, 15, 30, 0, 1) .attr(FlinchAttr), new AttackMove(Moves.HORN_ATTACK, Type.NORMAL, MoveCategory.PHYSICAL, 65, 100, 25, -1, 0, 1), @@ -8060,7 +8671,8 @@ export function initMoves() { .recklessMove(), new StatusMove(Moves.TAIL_WHIP, Type.NORMAL, 100, 30, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.DEF ], -1) - .target(MoveTarget.ALL_NEAR_ENEMIES), + .target(MoveTarget.ALL_NEAR_ENEMIES) + .reflectable(), new AttackMove(Moves.POISON_STING, Type.POISON, MoveCategory.PHYSICAL, 15, 100, 35, 30, 0, 1) .attr(StatusEffectAttr, StatusEffect.POISON) .makesContact(false), @@ -8073,30 +8685,39 @@ export function initMoves() { .makesContact(false), new StatusMove(Moves.LEER, Type.NORMAL, 100, 30, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.DEF ], -1) - .target(MoveTarget.ALL_NEAR_ENEMIES), + .target(MoveTarget.ALL_NEAR_ENEMIES) + .reflectable(), new AttackMove(Moves.BITE, Type.DARK, MoveCategory.PHYSICAL, 60, 100, 25, 30, 0, 1) .attr(FlinchAttr) .bitingMove(), new StatusMove(Moves.GROWL, Type.NORMAL, 100, 40, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.ATK ], -1) .soundBased() - .target(MoveTarget.ALL_NEAR_ENEMIES), + .target(MoveTarget.ALL_NEAR_ENEMIES) + .reflectable(), new StatusMove(Moves.ROAR, Type.NORMAL, -1, 20, -1, -6, 1) .attr(ForceSwitchOutAttr, false, SwitchType.FORCE_SWITCH) .soundBased() - .hidesTarget(), + .hidesTarget() + .reflectable(), new StatusMove(Moves.SING, Type.NORMAL, 55, 15, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.SLEEP) - .soundBased(), + .soundBased() + .reflectable(), new StatusMove(Moves.SUPERSONIC, Type.NORMAL, 55, 20, -1, 0, 1) .attr(ConfuseAttr) - .soundBased(), + .soundBased() + .reflectable(), new AttackMove(Moves.SONIC_BOOM, Type.NORMAL, MoveCategory.SPECIAL, -1, 90, 20, -1, 0, 1) .attr(FixedDamageAttr, 20), new StatusMove(Moves.DISABLE, Type.NORMAL, 100, 20, -1, 0, 1) .attr(AddBattlerTagAttr, BattlerTagType.DISABLED, false, true) - .condition((user, target, move) => target.getMoveHistory().reverse().find(m => m.move !== Moves.NONE && m.move !== Moves.STRUGGLE && !m.virtual) !== undefined) - .ignoresSubstitute(), + .condition((user, target, move) => { + const lastRealMove = target.getLastXMoves(-1).find(m => !m.virtual); + return !Utils.isNullOrUndefined(lastRealMove) && lastRealMove.move !== Moves.NONE && lastRealMove.move !== Moves.STRUGGLE; + }) + .ignoresSubstitute() + .reflectable(), new AttackMove(Moves.ACID, Type.POISON, MoveCategory.SPECIAL, 40, 100, 30, 10, 0, 1) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -1) .target(MoveTarget.ALL_NEAR_ENEMIES), @@ -8149,7 +8770,8 @@ export function initMoves() { .triageMove(), new StatusMove(Moves.LEECH_SEED, Type.GRASS, 90, 10, -1, 0, 1) .attr(LeechSeedAttr) - .condition((user, target, move) => !target.getTag(BattlerTagType.SEEDED) && !target.isOfType(Type.GRASS)), + .condition((user, target, move) => !target.getTag(BattlerTagType.SEEDED) && !target.isOfType(Type.GRASS)) + .reflectable(), new SelfStatusMove(Moves.GROWTH, Type.NORMAL, -1, 20, -1, 0, 1) .attr(GrowthStatStageChangeAttr), new AttackMove(Moves.RAZOR_LEAF, Type.GRASS, MoveCategory.PHYSICAL, 55, 95, 25, -1, 0, 1) @@ -8160,17 +8782,19 @@ export function initMoves() { new ChargingAttackMove(Moves.SOLAR_BEAM, Type.GRASS, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 1) .chargeText(i18next.t("moveTriggers:tookInSunlight", { pokemonName: "{USER}" })) .chargeAttr(WeatherInstantChargeAttr, [ WeatherType.SUNNY, WeatherType.HARSH_SUN ]) - .attr(AntiSunlightPowerDecreaseAttr) - .ignoresVirtual(), + .attr(AntiSunlightPowerDecreaseAttr), new StatusMove(Moves.POISON_POWDER, Type.POISON, 75, 35, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.POISON) - .powderMove(), + .powderMove() + .reflectable(), new StatusMove(Moves.STUN_SPORE, Type.GRASS, 75, 30, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) - .powderMove(), + .powderMove() + .reflectable(), new StatusMove(Moves.SLEEP_POWDER, Type.GRASS, 75, 15, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.SLEEP) - .powderMove(), + .powderMove() + .reflectable(), new AttackMove(Moves.PETAL_DANCE, Type.GRASS, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 1) .attr(FrenzyAttr) .attr(MissEffectAttr, frenzyMissFunc) @@ -8180,7 +8804,8 @@ export function initMoves() { .target(MoveTarget.RANDOM_NEAR_ENEMY), new StatusMove(Moves.STRING_SHOT, Type.BUG, 95, 40, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.SPD ], -2) - .target(MoveTarget.ALL_NEAR_ENEMIES), + .target(MoveTarget.ALL_NEAR_ENEMIES) + .reflectable(), new AttackMove(Moves.DRAGON_RAGE, Type.DRAGON, MoveCategory.SPECIAL, -1, 100, 10, -1, 0, 1) .attr(FixedDamageAttr, 40), new AttackMove(Moves.FIRE_SPIN, Type.FIRE, MoveCategory.SPECIAL, 35, 85, 15, -1, 0, 1) @@ -8191,7 +8816,8 @@ export function initMoves() { .attr(StatusEffectAttr, StatusEffect.PARALYSIS), new StatusMove(Moves.THUNDER_WAVE, Type.ELECTRIC, 90, 20, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) - .attr(RespectAttackTypeImmunityAttr), + .attr(RespectAttackTypeImmunityAttr) + .reflectable(), new AttackMove(Moves.THUNDER, Type.ELECTRIC, MoveCategory.SPECIAL, 110, 70, 10, 30, 0, 1) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .attr(ThunderAccuracyAttr) @@ -8200,7 +8826,7 @@ export function initMoves() { .makesContact(false), new AttackMove(Moves.EARTHQUAKE, Type.GROUND, MoveCategory.PHYSICAL, 100, 100, 10, -1, 0, 1) .attr(HitsTagForDoubleDamageAttr, BattlerTagType.UNDERGROUND) - .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() ? 0.5 : 1) + .attr(MovePowerMultiplierAttr, (user, target, move) => globalScene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() ? 0.5 : 1) .makesContact(false) .target(MoveTarget.ALL_NEAR_OTHERS), new AttackMove(Moves.FISSURE, Type.GROUND, MoveCategory.PHYSICAL, 200, 30, 5, -1, 0, 1) @@ -8210,17 +8836,18 @@ export function initMoves() { .makesContact(false), new ChargingAttackMove(Moves.DIG, Type.GROUND, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 1) .chargeText(i18next.t("moveTriggers:dugAHole", { pokemonName: "{USER}" })) - .chargeAttr(SemiInvulnerableAttr, BattlerTagType.UNDERGROUND) - .ignoresVirtual(), + .chargeAttr(SemiInvulnerableAttr, BattlerTagType.UNDERGROUND), new StatusMove(Moves.TOXIC, Type.POISON, 90, 10, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.TOXIC) - .attr(ToxicAccuracyAttr), + .attr(ToxicAccuracyAttr) + .reflectable(), new AttackMove(Moves.CONFUSION, Type.PSYCHIC, MoveCategory.SPECIAL, 50, 100, 25, 10, 0, 1) .attr(ConfuseAttr), new AttackMove(Moves.PSYCHIC, Type.PSYCHIC, MoveCategory.SPECIAL, 90, 100, 10, 10, 0, 1) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -1), new StatusMove(Moves.HYPNOSIS, Type.PSYCHIC, 60, 20, -1, 0, 1) - .attr(StatusEffectAttr, StatusEffect.SLEEP), + .attr(StatusEffectAttr, StatusEffect.SLEEP) + .reflectable(), new SelfStatusMove(Moves.MEDITATE, Type.PSYCHIC, -1, 40, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.ATK ], 1, true), new SelfStatusMove(Moves.AGILITY, Type.PSYCHIC, -1, 30, -1, 0, 1) @@ -8235,11 +8862,11 @@ export function initMoves() { .attr(LevelDamageAttr), new StatusMove(Moves.MIMIC, Type.NORMAL, -1, 10, -1, 0, 1) .attr(MovesetCopyMoveAttr) - .ignoresSubstitute() - .ignoresVirtual(), + .ignoresSubstitute(), new StatusMove(Moves.SCREECH, Type.NORMAL, 85, 40, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.DEF ], -2) - .soundBased(), + .soundBased() + .reflectable(), new SelfStatusMove(Moves.DOUBLE_TEAM, Type.NORMAL, -1, 15, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.EVA ], 1, true), new SelfStatusMove(Moves.RECOVER, Type.NORMAL, -1, 5, -1, 0, 1) @@ -8251,9 +8878,11 @@ export function initMoves() { .attr(AddBattlerTagAttr, BattlerTagType.MINIMIZED, true, false) .attr(StatStageChangeAttr, [ Stat.EVA ], 2, true), new StatusMove(Moves.SMOKESCREEN, Type.NORMAL, 100, 20, -1, 0, 1) - .attr(StatStageChangeAttr, [ Stat.ACC ], -1), + .attr(StatStageChangeAttr, [ Stat.ACC ], -1) + .reflectable(), new StatusMove(Moves.CONFUSE_RAY, Type.GHOST, 100, 10, -1, 0, 1) - .attr(ConfuseAttr), + .attr(ConfuseAttr) + .reflectable(), new SelfStatusMove(Moves.WITHDRAW, Type.WATER, -1, 40, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.DEF ], 1, true), new SelfStatusMove(Moves.DEFENSE_CURL, Type.NORMAL, -1, 40, -1, 0, 1) @@ -8272,15 +8901,12 @@ export function initMoves() { new SelfStatusMove(Moves.FOCUS_ENERGY, Type.NORMAL, -1, 30, -1, 0, 1) .attr(AddBattlerTagAttr, BattlerTagType.CRIT_BOOST, true, true), new AttackMove(Moves.BIDE, Type.NORMAL, MoveCategory.PHYSICAL, -1, -1, 10, -1, 1, 1) - .ignoresVirtual() .target(MoveTarget.USER) .unimplemented(), new SelfStatusMove(Moves.METRONOME, Type.NORMAL, -1, 10, -1, 0, 1) - .attr(RandomMoveAttr) - .ignoresVirtual(), + .attr(RandomMoveAttr, invalidMetronomeMoves), new StatusMove(Moves.MIRROR_MOVE, Type.FLYING, -1, 20, -1, 0, 1) - .attr(CopyMoveAttr) - .ignoresVirtual(), + .attr(CopyMoveAttr, true), new AttackMove(Moves.SELF_DESTRUCT, Type.NORMAL, MoveCategory.PHYSICAL, 200, 100, 5, -1, 0, 1) .attr(SacrificialAttr) .makesContact(false) @@ -8308,8 +8934,7 @@ export function initMoves() { .target(MoveTarget.ALL_NEAR_ENEMIES), new ChargingAttackMove(Moves.SKULL_BASH, Type.NORMAL, MoveCategory.PHYSICAL, 130, 100, 10, -1, 0, 1) .chargeText(i18next.t("moveTriggers:loweredItsHead", { pokemonName: "{USER}" })) - .chargeAttr(StatStageChangeAttr, [ Stat.DEF ], 1, true) - .ignoresVirtual(), + .chargeAttr(StatStageChangeAttr, [ Stat.DEF ], 1, true), new AttackMove(Moves.SPIKE_CANNON, Type.NORMAL, MoveCategory.PHYSICAL, 20, 100, 15, -1, 0, 1) .attr(MultiHitAttr) .makesContact(false), @@ -8318,7 +8943,8 @@ export function initMoves() { new SelfStatusMove(Moves.AMNESIA, Type.PSYCHIC, -1, 20, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.SPDEF ], 2, true), new StatusMove(Moves.KINESIS, Type.PSYCHIC, 80, 15, -1, 0, 1) - .attr(StatStageChangeAttr, [ Stat.ACC ], -1), + .attr(StatStageChangeAttr, [ Stat.ACC ], -1) + .reflectable(), new SelfStatusMove(Moves.SOFT_BOILED, Type.NORMAL, -1, 5, -1, 0, 1) .attr(HealAttr, 0.5) .triageMove(), @@ -8328,14 +8954,16 @@ export function initMoves() { .condition(failOnGravityCondition) .recklessMove(), new StatusMove(Moves.GLARE, Type.NORMAL, 100, 30, -1, 0, 1) - .attr(StatusEffectAttr, StatusEffect.PARALYSIS), + .attr(StatusEffectAttr, StatusEffect.PARALYSIS) + .reflectable(), new AttackMove(Moves.DREAM_EATER, Type.PSYCHIC, MoveCategory.SPECIAL, 100, 100, 15, -1, 0, 1) .attr(HitHealAttr) .condition(targetSleptOrComatoseCondition) .triageMove(), new StatusMove(Moves.POISON_GAS, Type.POISON, 90, 40, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.POISON) - .target(MoveTarget.ALL_NEAR_ENEMIES), + .target(MoveTarget.ALL_NEAR_ENEMIES) + .reflectable(), new AttackMove(Moves.BARRAGE, Type.NORMAL, MoveCategory.PHYSICAL, 15, 85, 20, -1, 0, 1) .attr(MultiHitAttr) .makesContact(false) @@ -8344,13 +8972,13 @@ export function initMoves() { .attr(HitHealAttr) .triageMove(), new StatusMove(Moves.LOVELY_KISS, Type.NORMAL, 75, 10, -1, 0, 1) - .attr(StatusEffectAttr, StatusEffect.SLEEP), + .attr(StatusEffectAttr, StatusEffect.SLEEP) + .reflectable(), new ChargingAttackMove(Moves.SKY_ATTACK, Type.FLYING, MoveCategory.PHYSICAL, 140, 90, 5, 30, 0, 1) .chargeText(i18next.t("moveTriggers:isGlowing", { pokemonName: "{USER}" })) .attr(HighCritAttr) .attr(FlinchAttr) - .makesContact(false) - .ignoresVirtual(), + .makesContact(false), new StatusMove(Moves.TRANSFORM, Type.NORMAL, -1, 10, -1, 0, 1) .attr(TransformAttr) // transforming from or into fusion pokemon causes various problems (such as crashes) @@ -8364,12 +8992,15 @@ export function initMoves() { .punchingMove(), new StatusMove(Moves.SPORE, Type.GRASS, 100, 15, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.SLEEP) - .powderMove(), + .powderMove() + .reflectable(), new StatusMove(Moves.FLASH, Type.NORMAL, 100, 20, -1, 0, 1) - .attr(StatStageChangeAttr, [ Stat.ACC ], -1), + .attr(StatStageChangeAttr, [ Stat.ACC ], -1) + .reflectable(), new AttackMove(Moves.PSYWAVE, Type.PSYCHIC, MoveCategory.SPECIAL, -1, 100, 15, -1, 0, 1) .attr(RandomLevelDamageAttr), new SelfStatusMove(Moves.SPLASH, Type.NORMAL, -1, 40, -1, 0, 1) + .attr(SplashAttr) .condition(failOnGravityCondition), new SelfStatusMove(Moves.ACID_ARMOR, Type.POISON, -1, 20, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.DEF ], 2, true), @@ -8409,16 +9040,14 @@ export function initMoves() { .attr(HighCritAttr) .slicingMove(), new SelfStatusMove(Moves.SUBSTITUTE, Type.NORMAL, -1, 10, -1, 0, 1) - .attr(AddSubstituteAttr), + .attr(AddSubstituteAttr, 0.25, false), new AttackMove(Moves.STRUGGLE, Type.NORMAL, MoveCategory.PHYSICAL, 50, -1, 1, -1, 0, 1) .attr(RecoilAttr, true, 0.25, true) .attr(TypelessAttr) - .ignoresVirtual() .target(MoveTarget.RANDOM_NEAR_ENEMY), new StatusMove(Moves.SKETCH, Type.NORMAL, -1, 1, -1, 0, 2) .ignoresSubstitute() - .attr(SketchAttr) - .ignoresVirtual(), + .attr(SketchAttr), new AttackMove(Moves.TRIPLE_KICK, Type.FIGHTING, MoveCategory.PHYSICAL, 10, 90, 10, -1, 0, 2) .attr(MultiHitAttr, MultiHitType._3) .attr(MultiHitPowerIncrementAttr, 3) @@ -8427,7 +9056,8 @@ export function initMoves() { .attr(StealHeldItemChanceAttr, 0.3), new StatusMove(Moves.SPIDER_WEB, Type.BUG, -1, 10, -1, 0, 2) .condition(failIfGhostTypeCondition) - .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, true, 1), + .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, true, 1) + .reflectable(), new StatusMove(Moves.MIND_READER, Type.NORMAL, -1, 5, -1, 0, 2) .attr(IgnoreAccuracyAttr), new StatusMove(Moves.NIGHTMARE, Type.GHOST, 100, 15, -1, 0, 2) @@ -8458,12 +9088,14 @@ export function initMoves() { new StatusMove(Moves.COTTON_SPORE, Type.GRASS, 100, 40, -1, 0, 2) .attr(StatStageChangeAttr, [ Stat.SPD ], -2) .powderMove() - .target(MoveTarget.ALL_NEAR_ENEMIES), + .target(MoveTarget.ALL_NEAR_ENEMIES) + .reflectable(), new AttackMove(Moves.REVERSAL, Type.FIGHTING, MoveCategory.PHYSICAL, -1, 100, 15, -1, 0, 2) .attr(LowHpPowerAttr), new StatusMove(Moves.SPITE, Type.GHOST, 100, 10, -1, 0, 2) .ignoresSubstitute() - .attr(ReducePpMoveAttr, 4), + .attr(ReducePpMoveAttr, 4) + .reflectable(), new AttackMove(Moves.POWDER_SNOW, Type.ICE, MoveCategory.SPECIAL, 40, 100, 25, 10, 0, 2) .attr(StatusEffectAttr, StatusEffect.FREEZE) .target(MoveTarget.ALL_NEAR_ENEMIES), @@ -8473,13 +9105,15 @@ export function initMoves() { new AttackMove(Moves.MACH_PUNCH, Type.FIGHTING, MoveCategory.PHYSICAL, 40, 100, 30, -1, 1, 2) .punchingMove(), new StatusMove(Moves.SCARY_FACE, Type.NORMAL, 100, 10, -1, 0, 2) - .attr(StatStageChangeAttr, [ Stat.SPD ], -2), + .attr(StatStageChangeAttr, [ Stat.SPD ], -2) + .reflectable(), new AttackMove(Moves.FEINT_ATTACK, Type.DARK, MoveCategory.PHYSICAL, 60, -1, 20, -1, 0, 2), new StatusMove(Moves.SWEET_KISS, Type.FAIRY, 75, 10, -1, 0, 2) - .attr(ConfuseAttr), + .attr(ConfuseAttr) + .reflectable(), new SelfStatusMove(Moves.BELLY_DRUM, Type.NORMAL, -1, 10, -1, 0, 2) .attr(CutHpStatStageBoostAttr, [ Stat.ATK ], 12, 2, (user) => { - user.scene.queueMessage(i18next.t("moveTriggers:cutOwnHpAndMaximizedStat", { pokemonName: getPokemonNameWithAffix(user), statName: i18next.t(getStatKey(Stat.ATK)) })); + globalScene.queueMessage(i18next.t("moveTriggers:cutOwnHpAndMaximizedStat", { pokemonName: getPokemonNameWithAffix(user), statName: i18next.t(getStatKey(Stat.ATK)) })); }), new AttackMove(Moves.SLUDGE_BOMB, Type.POISON, MoveCategory.SPECIAL, 90, 100, 10, 30, 0, 2) .attr(StatusEffectAttr, StatusEffect.POISON) @@ -8491,13 +9125,15 @@ export function initMoves() { .ballBombMove(), new StatusMove(Moves.SPIKES, Type.GROUND, -1, 20, -1, 0, 2) .attr(AddArenaTrapTagAttr, ArenaTagType.SPIKES) - .target(MoveTarget.ENEMY_SIDE), + .target(MoveTarget.ENEMY_SIDE) + .reflectable(), new AttackMove(Moves.ZAP_CANNON, Type.ELECTRIC, MoveCategory.SPECIAL, 120, 50, 5, 100, 0, 2) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .ballBombMove(), new StatusMove(Moves.FORESIGHT, Type.NORMAL, -1, 40, -1, 0, 2) .attr(ExposedMoveAttr, BattlerTagType.IGNORE_GHOST) - .ignoresSubstitute(), + .ignoresSubstitute() + .reflectable(), new SelfStatusMove(Moves.DESTINY_BOND, Type.GHOST, -1, 5, -1, 0, 2) .ignoresProtect() .attr(DestinyBondAttr) @@ -8543,7 +9179,8 @@ export function initMoves() { .attr(ProtectAttr, BattlerTagType.ENDURING) .condition(failIfLastCondition), new StatusMove(Moves.CHARM, Type.FAIRY, 100, 20, -1, 0, 2) - .attr(StatStageChangeAttr, [ Stat.ATK ], -2), + .attr(StatStageChangeAttr, [ Stat.ATK ], -2) + .reflectable(), new AttackMove(Moves.ROLLOUT, Type.ROCK, MoveCategory.PHYSICAL, 30, 90, 20, -1, 0, 2) .partial() // Does not lock the user, also does not increase damage properly .attr(ConsecutiveUseDoublePowerAttr, 5, true, true, Moves.DEFENSE_CURL), @@ -8551,7 +9188,8 @@ export function initMoves() { .attr(SurviveDamageAttr), new StatusMove(Moves.SWAGGER, Type.NORMAL, 85, 15, -1, 0, 2) .attr(StatStageChangeAttr, [ Stat.ATK ], 2) - .attr(ConfuseAttr), + .attr(ConfuseAttr) + .reflectable(), new SelfStatusMove(Moves.MILK_DRINK, Type.NORMAL, -1, 5, -1, 0, 2) .attr(HealAttr, 0.5) .triageMove(), @@ -8564,17 +9202,18 @@ export function initMoves() { .attr(StatStageChangeAttr, [ Stat.DEF ], 1, true), new StatusMove(Moves.MEAN_LOOK, Type.NORMAL, -1, 5, -1, 0, 2) .condition(failIfGhostTypeCondition) - .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, true, 1), + .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, true, 1) + .reflectable(), new StatusMove(Moves.ATTRACT, Type.NORMAL, 100, 15, -1, 0, 2) .attr(AddBattlerTagAttr, BattlerTagType.INFATUATED) .ignoresSubstitute() - .condition((user, target, move) => user.isOppositeGender(target)), + .condition((user, target, move) => user.isOppositeGender(target)) + .reflectable(), new SelfStatusMove(Moves.SLEEP_TALK, Type.NORMAL, -1, 10, -1, 0, 2) .attr(BypassSleepAttr) - .attr(RandomMovesetMoveAttr) + .attr(RandomMovesetMoveAttr, invalidSleepTalkMoves, false) .condition(userSleptOrComatoseCondition) - .target(MoveTarget.ALL_ENEMIES) - .ignoresVirtual(), + .target(MoveTarget.NEAR_ENEMY), new StatusMove(Moves.HEAL_BELL, Type.NORMAL, -1, 5, -1, 0, 2) .attr(PartyStatusCureAttr, i18next.t("moveTriggers:bellChimed"), Abilities.SOUNDPROOF) .soundBased() @@ -8599,7 +9238,7 @@ export function initMoves() { new AttackMove(Moves.MAGNITUDE, Type.GROUND, MoveCategory.PHYSICAL, -1, 100, 30, -1, 0, 2) .attr(PreMoveMessageAttr, magnitudeMessageFunc) .attr(MagnitudePowerAttr) - .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() ? 0.5 : 1) + .attr(MovePowerMultiplierAttr, (user, target, move) => globalScene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() ? 0.5 : 1) .attr(HitsTagForDoubleDamageAttr, BattlerTagType.UNDERGROUND) .makesContact(false) .target(MoveTarget.ALL_NEAR_OTHERS), @@ -8616,7 +9255,8 @@ export function initMoves() { new StatusMove(Moves.ENCORE, Type.NORMAL, 100, 5, -1, 0, 2) .attr(AddBattlerTagAttr, BattlerTagType.ENCORE, false, true) .ignoresSubstitute() - .condition((user, target, move) => new EncoreTag(user.id).canAdd(target)), + .condition((user, target, move) => new EncoreTag(user.id).canAdd(target)) + .reflectable(), new AttackMove(Moves.PURSUIT, Type.DARK, MoveCategory.PHYSICAL, 40, 100, 20, -1, 0, 2) .partial(), // No effect implemented new AttackMove(Moves.RAPID_SPIN, Type.NORMAL, MoveCategory.PHYSICAL, 50, 100, 40, 100, 0, 2) @@ -8637,7 +9277,8 @@ export function initMoves() { .attr(RemoveArenaTrapAttr), new StatusMove(Moves.SWEET_SCENT, Type.NORMAL, 100, 20, -1, 0, 2) .attr(StatStageChangeAttr, [ Stat.EVA ], -2) - .target(MoveTarget.ALL_NEAR_ENEMIES), + .target(MoveTarget.ALL_NEAR_ENEMIES) + .reflectable(), new AttackMove(Moves.IRON_TAIL, Type.STEEL, MoveCategory.PHYSICAL, 100, 75, 15, 30, 0, 2) .attr(StatStageChangeAttr, [ Stat.DEF ], -1), new AttackMove(Moves.METAL_CLAW, Type.STEEL, MoveCategory.PHYSICAL, 50, 95, 35, 10, 0, 2) @@ -8699,7 +9340,6 @@ export function initMoves() { .attr(FlinchAttr) .condition(new FirstMoveCondition()), new AttackMove(Moves.UPROAR, Type.NORMAL, MoveCategory.SPECIAL, 90, 100, 10, -1, 0, 3) - .ignoresVirtual() .soundBased() .target(MoveTarget.RANDOM_NEAR_ENEMY) .partial(), // Does not lock the user, does not stop Pokemon from sleeping @@ -8726,12 +9366,15 @@ export function initMoves() { new StatusMove(Moves.TORMENT, Type.DARK, 100, 15, -1, 0, 3) .ignoresSubstitute() .edgeCase() // Incomplete implementation because of Uproar's partial implementation - .attr(AddBattlerTagAttr, BattlerTagType.TORMENT, false, true, 1), + .attr(AddBattlerTagAttr, BattlerTagType.TORMENT, false, true, 1) + .reflectable(), new StatusMove(Moves.FLATTER, Type.DARK, 100, 15, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPATK ], 1) - .attr(ConfuseAttr), + .attr(ConfuseAttr) + .reflectable(), new StatusMove(Moves.WILL_O_WISP, Type.FIRE, 85, 15, -1, 0, 3) - .attr(StatusEffectAttr, StatusEffect.BURN), + .attr(StatusEffectAttr, StatusEffect.BURN) + .reflectable(), new StatusMove(Moves.MEMENTO, Type.DARK, 100, 10, -1, 0, 3) .attr(SacrificialAttrOnHit) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -2), @@ -8741,23 +9384,22 @@ export function initMoves() { .attr(BypassBurnDamageReductionAttr), new AttackMove(Moves.FOCUS_PUNCH, Type.FIGHTING, MoveCategory.PHYSICAL, 150, 100, 20, -1, -3, 3) .attr(MessageHeaderAttr, (user, move) => i18next.t("moveTriggers:isTighteningFocus", { pokemonName: getPokemonNameWithAffix(user) })) - .punchingMove() - .ignoresVirtual() - .condition((user, target, move) => !user.turnData.attacksReceived.find(r => r.damage)), + .attr(PreUseInterruptAttr, (user, target, move) => i18next.t("moveTriggers:lostFocus", { pokemonName: getPokemonNameWithAffix(user) }), user => !!user.turnData.attacksReceived.find(r => r.damage)) + .punchingMove(), new AttackMove(Moves.SMELLING_SALTS, Type.NORMAL, MoveCategory.PHYSICAL, 70, 100, 10, -1, 0, 3) .attr(MovePowerMultiplierAttr, (user, target, move) => target.status?.effect === StatusEffect.PARALYSIS ? 2 : 1) .attr(HealStatusEffectAttr, true, StatusEffect.PARALYSIS), new SelfStatusMove(Moves.FOLLOW_ME, Type.NORMAL, -1, 20, -1, 2, 3) .attr(AddBattlerTagAttr, BattlerTagType.CENTER_OF_ATTENTION, true), new StatusMove(Moves.NATURE_POWER, Type.NORMAL, -1, 20, -1, 0, 3) - .attr(NaturePowerAttr) - .ignoresVirtual(), + .attr(NaturePowerAttr), new SelfStatusMove(Moves.CHARGE, Type.ELECTRIC, -1, 20, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPDEF ], 1, true) .attr(AddBattlerTagAttr, BattlerTagType.CHARGED, true, false), new StatusMove(Moves.TAUNT, Type.DARK, 100, 20, -1, 0, 3) .ignoresSubstitute() - .attr(AddBattlerTagAttr, BattlerTagType.TAUNT, false, true, 4), + .attr(AddBattlerTagAttr, BattlerTagType.TAUNT, false, true, 4) + .reflectable(), new StatusMove(Moves.HELPING_HAND, Type.NORMAL, -1, 20, -1, 5, 3) .attr(AddBattlerTagAttr, BattlerTagType.HELPING_HAND) .ignoresSubstitute() @@ -8772,8 +9414,7 @@ export function initMoves() { .triageMove() .attr(AddArenaTagAttr, ArenaTagType.WISH, 2, true), new SelfStatusMove(Moves.ASSIST, Type.NORMAL, -1, 20, -1, 0, 3) - .attr(RandomMovesetMoveAttr, true) - .ignoresVirtual(), + .attr(RandomMovesetMoveAttr, invalidAssistMoves, true), new SelfStatusMove(Moves.INGRAIN, Type.GRASS, -1, 20, -1, 0, 3) .attr(AddBattlerTagAttr, BattlerTagType.INGRAIN, true, true) .attr(AddBattlerTagAttr, BattlerTagType.IGNORE_FLYING, true, true) @@ -8781,7 +9422,12 @@ export function initMoves() { new AttackMove(Moves.SUPERPOWER, Type.FIGHTING, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF ], -1, true), new SelfStatusMove(Moves.MAGIC_COAT, Type.PSYCHIC, -1, 15, -1, 4, 3) - .unimplemented(), + .attr(AddBattlerTagAttr, BattlerTagType.MAGIC_COAT, true, true, 0) + .condition(failIfLastCondition) + // Interactions with stomping tantrum, instruct, and other moves that + // rely on move history + // Also will not reflect roar / whirlwind if the target has ForceSwitchOutImmunityAbAttr + .edgeCase(), new SelfStatusMove(Moves.RECYCLE, Type.NORMAL, -1, 10, -1, 0, 3) .unimplemented(), new AttackMove(Moves.REVENGE, Type.FIGHTING, MoveCategory.PHYSICAL, 60, 100, 10, -1, -4, 3) @@ -8790,7 +9436,8 @@ export function initMoves() { .attr(RemoveScreensAttr), new StatusMove(Moves.YAWN, Type.NORMAL, -1, 10, -1, 0, 3) .attr(AddBattlerTagAttr, BattlerTagType.DROWSY, false, true) - .condition((user, target, move) => !target.status && !target.isSafeguarded(user)), + .condition((user, target, move) => !target.status && !target.isSafeguarded(user)) + .reflectable(), new AttackMove(Moves.KNOCK_OFF, Type.DARK, MoveCategory.PHYSICAL, 65, 100, 20, -1, 0, 3) .attr(MovePowerMultiplierAttr, (user, target, move) => target.getHeldItems().filter(i => i.isTransferable).length > 0 ? 1.5 : 1) .attr(RemoveHeldItemAttr, false), @@ -8820,8 +9467,7 @@ export function initMoves() { new ChargingAttackMove(Moves.DIVE, Type.WATER, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 3) .chargeText(i18next.t("moveTriggers:hidUnderwater", { pokemonName: "{USER}" })) .chargeAttr(SemiInvulnerableAttr, BattlerTagType.UNDERWATER) - .chargeAttr(GulpMissileTagAttr) - .ignoresVirtual(), + .chargeAttr(GulpMissileTagAttr), new AttackMove(Moves.ARM_THRUST, Type.FIGHTING, MoveCategory.PHYSICAL, 15, 100, 20, -1, 0, 3) .attr(MultiHitAttr), new SelfStatusMove(Moves.CAMOUFLAGE, Type.NORMAL, -1, 20, -1, 0, 3) @@ -8835,7 +9481,8 @@ export function initMoves() { .ballBombMove(), new StatusMove(Moves.FEATHER_DANCE, Type.FLYING, 100, 15, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.ATK ], -2) - .danceMove(), + .danceMove() + .reflectable(), new StatusMove(Moves.TEETER_DANCE, Type.NORMAL, 100, 20, -1, 0, 3) .attr(ConfuseAttr) .danceMove() @@ -8875,13 +9522,14 @@ export function initMoves() { .attr(FlinchAttr), new AttackMove(Moves.WEATHER_BALL, Type.NORMAL, MoveCategory.SPECIAL, 50, 100, 10, -1, 0, 3) .attr(WeatherBallTypeAttr) - .attr(MovePowerMultiplierAttr, (user, target, move) => [ WeatherType.SUNNY, WeatherType.RAIN, WeatherType.SANDSTORM, WeatherType.HAIL, WeatherType.SNOW, WeatherType.FOG, WeatherType.HEAVY_RAIN, WeatherType.HARSH_SUN ].includes(user.scene.arena.weather?.weatherType!) && !user.scene.arena.weather?.isEffectSuppressed(user.scene) ? 2 : 1) // TODO: is this bang correct? + .attr(MovePowerMultiplierAttr, (user, target, move) => [ WeatherType.SUNNY, WeatherType.RAIN, WeatherType.SANDSTORM, WeatherType.HAIL, WeatherType.SNOW, WeatherType.FOG, WeatherType.HEAVY_RAIN, WeatherType.HARSH_SUN ].includes(globalScene.arena.weather?.weatherType!) && !globalScene.arena.weather?.isEffectSuppressed() ? 2 : 1) // TODO: is this bang correct? .ballBombMove(), new StatusMove(Moves.AROMATHERAPY, Type.GRASS, -1, 5, -1, 0, 3) .attr(PartyStatusCureAttr, i18next.t("moveTriggers:soothingAromaWaftedThroughArea"), Abilities.SAP_SIPPER) .target(MoveTarget.PARTY), new StatusMove(Moves.FAKE_TEARS, Type.DARK, 100, 20, -1, 0, 3) - .attr(StatStageChangeAttr, [ Stat.SPDEF ], -2), + .attr(StatStageChangeAttr, [ Stat.SPDEF ], -2) + .reflectable(), new AttackMove(Moves.AIR_CUTTER, Type.FLYING, MoveCategory.SPECIAL, 60, 95, 25, -1, 0, 3) .attr(HighCritAttr) .slicingMove() @@ -8892,7 +9540,8 @@ export function initMoves() { .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE), new StatusMove(Moves.ODOR_SLEUTH, Type.NORMAL, -1, 40, -1, 0, 3) .attr(ExposedMoveAttr, BattlerTagType.IGNORE_GHOST) - .ignoresSubstitute(), + .ignoresSubstitute() + .reflectable(), new AttackMove(Moves.ROCK_TOMB, Type.ROCK, MoveCategory.PHYSICAL, 60, 95, 15, 100, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPD ], -1) .makesContact(false), @@ -8901,12 +9550,15 @@ export function initMoves() { .windMove(), new StatusMove(Moves.METAL_SOUND, Type.STEEL, 85, 40, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -2) - .soundBased(), + .soundBased() + .reflectable(), new StatusMove(Moves.GRASS_WHISTLE, Type.GRASS, 55, 15, -1, 0, 3) .attr(StatusEffectAttr, StatusEffect.SLEEP) - .soundBased(), + .soundBased() + .reflectable(), new StatusMove(Moves.TICKLE, Type.NORMAL, 100, 20, -1, 0, 3) - .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF ], -1), + .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF ], -1) + .reflectable(), new SelfStatusMove(Moves.COSMIC_POWER, Type.PSYCHIC, -1, 20, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.DEF, Stat.SPDEF ], 1, true), new AttackMove(Moves.WATER_SPOUT, Type.WATER, MoveCategory.SPECIAL, 150, 100, 5, -1, 0, 3) @@ -8944,7 +9596,8 @@ export function initMoves() { .attr(StatStageChangeAttr, [ Stat.DEF ], 2, true), new StatusMove(Moves.BLOCK, Type.NORMAL, -1, 5, -1, 0, 3) .condition(failIfGhostTypeCondition) - .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, true, 1), + .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, true, 1) + .reflectable(), new StatusMove(Moves.HOWL, Type.NORMAL, -1, 40, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.ATK ], 1) .soundBased() @@ -8958,8 +9611,7 @@ export function initMoves() { .chargeText(i18next.t("moveTriggers:sprangUp", { pokemonName: "{USER}" })) .chargeAttr(SemiInvulnerableAttr, BattlerTagType.FLYING) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) - .condition(failOnGravityCondition) - .ignoresVirtual(), + .condition(failOnGravityCondition), new AttackMove(Moves.MUD_SHOT, Type.GROUND, MoveCategory.SPECIAL, 55, 95, 15, 100, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPD ], -1), new AttackMove(Moves.POISON_TAIL, Type.POISON, MoveCategory.PHYSICAL, 50, 100, 25, 10, 0, 3) @@ -9008,7 +9660,8 @@ export function initMoves() { .target(MoveTarget.BOTH_SIDES), new StatusMove(Moves.MIRACLE_EYE, Type.PSYCHIC, -1, 40, -1, 0, 4) .attr(ExposedMoveAttr, BattlerTagType.IGNORE_DARK) - .ignoresSubstitute(), + .ignoresSubstitute() + .reflectable(), new AttackMove(Moves.WAKE_UP_SLAP, Type.FIGHTING, MoveCategory.PHYSICAL, 70, 100, 10, -1, 0, 4) .attr(MovePowerMultiplierAttr, (user, target, move) => targetSleptOrComatoseCondition(user, target, move) ? 2 : 1) .attr(HealStatusEffectAttr, false, StatusEffect.SLEEP), @@ -9020,7 +9673,8 @@ export function initMoves() { .ballBombMove(), new SelfStatusMove(Moves.HEALING_WISH, Type.PSYCHIC, -1, 10, -1, 0, 4) .attr(SacrificialFullRestoreAttr, false, "moveTriggers:sacrificialFullRestore") - .triageMove(), + .triageMove() + .condition(failIfLastInPartyCondition), new AttackMove(Moves.BRINE, Type.WATER, MoveCategory.SPECIAL, 65, 100, 10, -1, 0, 4) .attr(MovePowerMultiplierAttr, (user, target, move) => target.getHpRatio() < 0.5 ? 2 : 1), new AttackMove(Moves.NATURAL_GIFT, Type.NORMAL, MoveCategory.PHYSICAL, -1, 100, 15, -1, 0, 4) @@ -9050,10 +9704,11 @@ export function initMoves() { new AttackMove(Moves.CLOSE_COMBAT, Type.FIGHTING, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 4) .attr(StatStageChangeAttr, [ Stat.DEF, Stat.SPDEF ], -1, true), new AttackMove(Moves.PAYBACK, Type.DARK, MoveCategory.PHYSICAL, 50, 100, 10, -1, 0, 4) - .attr(MovePowerMultiplierAttr, (user, target, move) => target.getLastXMoves(1).find(m => m.turn === target.scene.currentBattle.turn) || user.scene.currentBattle.turnCommands[target.getBattlerIndex()]?.command === Command.BALL ? 2 : 1), + .attr(MovePowerMultiplierAttr, (user, target, move) => target.getLastXMoves(1).find(m => m.turn === globalScene.currentBattle.turn) || globalScene.currentBattle.turnCommands[target.getBattlerIndex()]?.command === Command.BALL ? 2 : 1), new AttackMove(Moves.ASSURANCE, Type.DARK, MoveCategory.PHYSICAL, 60, 100, 10, -1, 0, 4) .attr(MovePowerMultiplierAttr, (user, target, move) => target.turnData.damageTaken > 0 ? 2 : 1), new StatusMove(Moves.EMBARGO, Type.DARK, 100, 15, -1, 0, 4) + .reflectable() .unimplemented(), new AttackMove(Moves.FLING, Type.DARK, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 4) .makesContact(false) @@ -9073,25 +9728,25 @@ export function initMoves() { .attr(LessPPMorePowerAttr), new StatusMove(Moves.HEAL_BLOCK, Type.PSYCHIC, 100, 15, -1, 0, 4) .attr(AddBattlerTagAttr, BattlerTagType.HEAL_BLOCK, false, true, 5) - .target(MoveTarget.ALL_NEAR_ENEMIES), + .target(MoveTarget.ALL_NEAR_ENEMIES) + .reflectable(), new AttackMove(Moves.WRING_OUT, Type.NORMAL, MoveCategory.SPECIAL, -1, 100, 5, -1, 0, 4) .attr(OpponentHighHpPowerAttr, 120) .makesContact(), new SelfStatusMove(Moves.POWER_TRICK, Type.PSYCHIC, -1, 10, -1, 0, 4) .attr(AddBattlerTagAttr, BattlerTagType.POWER_TRICK, true), new StatusMove(Moves.GASTRO_ACID, Type.POISON, 100, 10, -1, 0, 4) - .attr(SuppressAbilitiesAttr), + .attr(SuppressAbilitiesAttr) + .reflectable(), new StatusMove(Moves.LUCKY_CHANT, Type.NORMAL, -1, 30, -1, 0, 4) .attr(AddArenaTagAttr, ArenaTagType.NO_CRIT, 5, true, true) .target(MoveTarget.USER_SIDE), new StatusMove(Moves.ME_FIRST, Type.NORMAL, -1, 20, -1, 0, 4) .ignoresSubstitute() - .ignoresVirtual() .target(MoveTarget.NEAR_ENEMY) .unimplemented(), new SelfStatusMove(Moves.COPYCAT, Type.NORMAL, -1, 20, -1, 0, 4) - .attr(CopyMoveAttr) - .ignoresVirtual(), + .attr(CopyMoveAttr, false, invalidCopycatMoves), new StatusMove(Moves.POWER_SWAP, Type.PSYCHIC, -1, 10, 100, 0, 4) .attr(SwapStatStagesAttr, [ Stat.ATK, Stat.SPATK ]) .ignoresSubstitute(), @@ -9104,12 +9759,14 @@ export function initMoves() { new AttackMove(Moves.LAST_RESORT, Type.NORMAL, MoveCategory.PHYSICAL, 140, 100, 5, -1, 0, 4) .attr(LastResortAttr), new StatusMove(Moves.WORRY_SEED, Type.GRASS, 100, 10, -1, 0, 4) - .attr(AbilityChangeAttr, Abilities.INSOMNIA), + .attr(AbilityChangeAttr, Abilities.INSOMNIA) + .reflectable(), new AttackMove(Moves.SUCKER_PUNCH, Type.DARK, MoveCategory.PHYSICAL, 70, 100, 5, -1, 1, 4) - .condition((user, target, move) => user.scene.currentBattle.turnCommands[target.getBattlerIndex()]?.command === Command.FIGHT && !target.turnData.acted && allMoves[user.scene.currentBattle.turnCommands[target.getBattlerIndex()]?.move?.move!].category !== MoveCategory.STATUS), // TODO: is this bang correct? + .condition((user, target, move) => globalScene.currentBattle.turnCommands[target.getBattlerIndex()]?.command === Command.FIGHT && !target.turnData.acted && allMoves[globalScene.currentBattle.turnCommands[target.getBattlerIndex()]?.move?.move!].category !== MoveCategory.STATUS), // TODO: is this bang correct? new StatusMove(Moves.TOXIC_SPIKES, Type.POISON, -1, 20, -1, 0, 4) .attr(AddArenaTrapTagAttr, ArenaTagType.TOXIC_SPIKES) - .target(MoveTarget.ENEMY_SIDE), + .target(MoveTarget.ENEMY_SIDE) + .reflectable(), new StatusMove(Moves.HEART_SWAP, Type.PSYCHIC, -1, 10, -1, 0, 4) .attr(SwapStatStagesAttr, BATTLE_STATS) .ignoresSubstitute(), @@ -9117,7 +9774,7 @@ export function initMoves() { .attr(AddBattlerTagAttr, BattlerTagType.AQUA_RING, true, true), new SelfStatusMove(Moves.MAGNET_RISE, Type.ELECTRIC, -1, 10, -1, 0, 4) .attr(AddBattlerTagAttr, BattlerTagType.FLOATING, true, true, 5) - .condition((user, target, move) => !user.scene.arena.getTag(ArenaTagType.GRAVITY) && [ BattlerTagType.FLOATING, BattlerTagType.IGNORE_FLYING, BattlerTagType.INGRAIN ].every((tag) => !user.getTag(tag))), + .condition((user, target, move) => !globalScene.arena.getTag(ArenaTagType.GRAVITY) && [ BattlerTagType.FLOATING, BattlerTagType.IGNORE_FLYING, BattlerTagType.INGRAIN ].every((tag) => !user.getTag(tag))), new AttackMove(Moves.FLARE_BLITZ, Type.FIRE, MoveCategory.PHYSICAL, 120, 100, 15, 10, 0, 4) .attr(RecoilAttr, false, 0.33) .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE) @@ -9220,7 +9877,9 @@ export function initMoves() { .attr(ClearWeatherAttr, WeatherType.FOG) .attr(ClearTerrainAttr) .attr(RemoveScreensAttr, false) - .attr(RemoveArenaTrapAttr, true), + .attr(RemoveArenaTrapAttr, true) + .attr(RemoveArenaTagsAttr, [ ArenaTagType.MIST, ArenaTagType.SAFEGUARD ], false) + .reflectable(), new StatusMove(Moves.TRICK_ROOM, Type.PSYCHIC, -1, 5, -1, -7, 4) .attr(AddArenaTagAttr, ArenaTagType.TRICK_ROOM, 5) .ignoresProtect() @@ -9258,10 +9917,12 @@ export function initMoves() { new StatusMove(Moves.CAPTIVATE, Type.NORMAL, 100, 20, -1, 0, 4) .attr(StatStageChangeAttr, [ Stat.SPATK ], -2) .condition((user, target, move) => target.isOppositeGender(user)) - .target(MoveTarget.ALL_NEAR_ENEMIES), + .target(MoveTarget.ALL_NEAR_ENEMIES) + .reflectable(), new StatusMove(Moves.STEALTH_ROCK, Type.ROCK, -1, 20, -1, 0, 4) .attr(AddArenaTrapTagAttr, ArenaTagType.STEALTH_ROCK) - .target(MoveTarget.ENEMY_SIDE), + .target(MoveTarget.ENEMY_SIDE) + .reflectable(), new AttackMove(Moves.GRASS_KNOT, Type.GRASS, MoveCategory.SPECIAL, -1, 100, 20, -1, 0, 4) .attr(WeightPowerAttr) .makesContact(), @@ -9298,14 +9959,16 @@ export function initMoves() { new SelfStatusMove(Moves.LUNAR_DANCE, Type.PSYCHIC, -1, 10, -1, 0, 4) .attr(SacrificialFullRestoreAttr, true, "moveTriggers:lunarDanceRestore") .danceMove() - .triageMove(), + .triageMove() + .condition(failIfLastInPartyCondition), new AttackMove(Moves.CRUSH_GRIP, Type.NORMAL, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 4) .attr(OpponentHighHpPowerAttr, 120), new AttackMove(Moves.MAGMA_STORM, Type.FIRE, MoveCategory.SPECIAL, 100, 75, 5, -1, 0, 4) .attr(TrapAttr, BattlerTagType.MAGMA_STORM), new StatusMove(Moves.DARK_VOID, Type.DARK, 80, 10, -1, 0, 4) //Accuracy from Generations 4-6 .attr(StatusEffectAttr, StatusEffect.SLEEP) - .target(MoveTarget.ALL_NEAR_ENEMIES), + .target(MoveTarget.ALL_NEAR_ENEMIES) + .reflectable(), new AttackMove(Moves.SEED_FLARE, Type.GRASS, MoveCategory.SPECIAL, 120, 85, 5, 40, 0, 4) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -2), new AttackMove(Moves.OMINOUS_WIND, Type.GHOST, MoveCategory.SPECIAL, 60, 100, 5, 10, 0, 4) @@ -9314,8 +9977,7 @@ export function initMoves() { new ChargingAttackMove(Moves.SHADOW_FORCE, Type.GHOST, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 4) .chargeText(i18next.t("moveTriggers:vanishedInstantly", { pokemonName: "{USER}" })) .chargeAttr(SemiInvulnerableAttr, BattlerTagType.HIDDEN) - .ignoresProtect() - .ignoresVirtual(), + .ignoresProtect(), new SelfStatusMove(Moves.HONE_CLAWS, Type.DARK, -1, 15, -1, 0, 5) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.ACC ], 1, true), new StatusMove(Moves.WIDE_GUARD, Type.ROCK, -1, 10, -1, 3, 5) @@ -9346,7 +10008,8 @@ export function initMoves() { .condition((_user, target, _move) => !(target.species.speciesId === Species.GENGAR && target.getFormKey() === "mega")) .condition((_user, target, _move) => Utils.isNullOrUndefined(target.getTag(BattlerTagType.INGRAIN)) && Utils.isNullOrUndefined(target.getTag(BattlerTagType.IGNORE_FLYING))) .attr(AddBattlerTagAttr, BattlerTagType.TELEKINESIS, false, true, 3) - .attr(AddBattlerTagAttr, BattlerTagType.FLOATING, false, true, 3), + .attr(AddBattlerTagAttr, BattlerTagType.FLOATING, false, true, 3) + .reflectable(), new StatusMove(Moves.MAGIC_ROOM, Type.PSYCHIC, -1, 10, -1, 0, 5) .ignoresProtect() .target(MoveTarget.BOTH_SIDES) @@ -9379,7 +10042,8 @@ export function initMoves() { .attr(ElectroBallPowerAttr) .ballBombMove(), new StatusMove(Moves.SOAK, Type.WATER, 100, 20, -1, 0, 5) - .attr(ChangeTypeAttr, Type.WATER), + .attr(ChangeTypeAttr, Type.WATER) + .reflectable(), new AttackMove(Moves.FLAME_CHARGE, Type.FIRE, MoveCategory.PHYSICAL, 50, 100, 20, 100, 0, 5) .attr(StatStageChangeAttr, [ Stat.SPD ], 1, true), new SelfStatusMove(Moves.COIL, Type.POISON, -1, 20, -1, 0, 5) @@ -9392,9 +10056,11 @@ export function initMoves() { new AttackMove(Moves.FOUL_PLAY, Type.DARK, MoveCategory.PHYSICAL, 95, 100, 15, -1, 0, 5) .attr(TargetAtkUserAtkAttr), new StatusMove(Moves.SIMPLE_BEAM, Type.NORMAL, 100, 15, -1, 0, 5) - .attr(AbilityChangeAttr, Abilities.SIMPLE), + .attr(AbilityChangeAttr, Abilities.SIMPLE) + .reflectable(), new StatusMove(Moves.ENTRAINMENT, Type.NORMAL, 100, 15, -1, 0, 5) - .attr(AbilityGiveAttr), + .attr(AbilityGiveAttr) + .reflectable(), new StatusMove(Moves.AFTER_YOU, Type.NORMAL, -1, 15, -1, 0, 5) .ignoresProtect() .ignoresSubstitute() @@ -9432,7 +10098,8 @@ export function initMoves() { new StatusMove(Moves.HEAL_PULSE, Type.PSYCHIC, -1, 10, -1, 0, 5) .attr(HealAttr, 0.5, false, false) .pulseMove() - .triageMove(), + .triageMove() + .reflectable(), new AttackMove(Moves.HEX, Type.GHOST, MoveCategory.SPECIAL, 65, 100, 10, -1, 0, 5) .attr( MovePowerMultiplierAttr, @@ -9442,7 +10109,6 @@ export function initMoves() { .chargeAttr(SemiInvulnerableAttr, BattlerTagType.FLYING) .condition(failOnGravityCondition) .condition((user, target, move) => !target.getTag(BattlerTagType.SUBSTITUTE)) - .ignoresVirtual() .partial(), // Should immobilize the target, Flying types should take no damage. cf https://bulbapedia.bulbagarden.net/wiki/Sky_Drop_(move) and https://www.smogon.com/dex/sv/moves/sky-drop/ new SelfStatusMove(Moves.SHIFT_GEAR, Type.STEEL, -1, 10, -1, 0, 5) .attr(StatStageChangeAttr, [ Stat.ATK ], 1, true) @@ -9455,7 +10121,8 @@ export function initMoves() { .attr(RemoveHeldItemAttr, true), new StatusMove(Moves.QUASH, Type.DARK, 100, 15, -1, 0, 5) .condition(failIfSingleBattle) - .unimplemented(), + .condition((user, target, move) => !target.turnData.acted) + .attr(ForceLastAttr), new AttackMove(Moves.ACROBATICS, Type.FLYING, MoveCategory.PHYSICAL, 55, 100, 15, -1, 0, 5) .attr(MovePowerMultiplierAttr, (user, target, move) => Math.max(1, 2 - 0.2 * user.getHeldItems().filter(i => i.isTransferable).reduce((v, m) => v + m.stackCount, 0))), new StatusMove(Moves.REFLECT_TYPE, Type.NORMAL, -1, 15, -1, 0, 5) @@ -9463,9 +10130,9 @@ export function initMoves() { .attr(CopyTypeAttr), new AttackMove(Moves.RETALIATE, Type.NORMAL, MoveCategory.PHYSICAL, 70, 100, 5, -1, 0, 5) .attr(MovePowerMultiplierAttr, (user, target, move) => { - const turn = user.scene.currentBattle.turn; - const lastPlayerFaint = user.scene.currentBattle.playerFaintsHistory[user.scene.currentBattle.playerFaintsHistory.length - 1]; - const lastEnemyFaint = user.scene.currentBattle.enemyFaintsHistory[user.scene.currentBattle.enemyFaintsHistory.length - 1]; + const turn = globalScene.currentBattle.turn; + const lastPlayerFaint = globalScene.currentBattle.playerFaintsHistory[globalScene.currentBattle.playerFaintsHistory.length - 1]; + const lastEnemyFaint = globalScene.currentBattle.enemyFaintsHistory[globalScene.currentBattle.enemyFaintsHistory.length - 1]; return ( (lastPlayerFaint !== undefined && turn - lastPlayerFaint.turn === 1 && user.isPlayer()) || (lastEnemyFaint !== undefined && turn - lastEnemyFaint.turn === 1 && !user.isPlayer()) @@ -9511,7 +10178,7 @@ export function initMoves() { .target(MoveTarget.ALL_NEAR_ENEMIES), new AttackMove(Moves.BULLDOZE, Type.GROUND, MoveCategory.PHYSICAL, 60, 100, 20, 100, 0, 5) .attr(StatStageChangeAttr, [ Stat.SPD ], -1) - .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() ? 0.5 : 1) + .attr(MovePowerMultiplierAttr, (user, target, move) => globalScene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() ? 0.5 : 1) .makesContact(false) .target(MoveTarget.ALL_NEAR_OTHERS), new AttackMove(Moves.FROST_BREATH, Type.ICE, MoveCategory.SPECIAL, 60, 90, 10, 100, 0, 5) @@ -9599,8 +10266,7 @@ export function initMoves() { .makesContact(false), new ChargingAttackMove(Moves.ICE_BURN, Type.ICE, MoveCategory.SPECIAL, 140, 90, 5, 30, 0, 5) .chargeText(i18next.t("moveTriggers:becameCloakedInFreezingAir", { pokemonName: "{USER}" })) - .attr(StatusEffectAttr, StatusEffect.BURN) - .ignoresVirtual(), + .attr(StatusEffectAttr, StatusEffect.BURN), new AttackMove(Moves.SNARL, Type.DARK, MoveCategory.SPECIAL, 55, 95, 15, 100, 0, 5) .attr(StatStageChangeAttr, [ Stat.SPATK ], -1) .soundBased() @@ -9632,24 +10298,26 @@ export function initMoves() { .target(MoveTarget.ALL) .condition((user, target, move) => { // If any fielded pokémon is grass-type and grounded. - return [ ...user.scene.getEnemyParty(), ...user.scene.getPlayerParty() ].some((poke) => poke.isOfType(Type.GRASS) && poke.isGrounded()); + return [ ...globalScene.getEnemyParty(), ...globalScene.getPlayerParty() ].some((poke) => poke.isOfType(Type.GRASS) && poke.isGrounded()); }) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], 1, false, { condition: (user, target, move) => target.isOfType(Type.GRASS) && target.isGrounded() }), new StatusMove(Moves.STICKY_WEB, Type.BUG, -1, 20, -1, 0, 6) .attr(AddArenaTrapTagAttr, ArenaTagType.STICKY_WEB) - .target(MoveTarget.ENEMY_SIDE), + .target(MoveTarget.ENEMY_SIDE) + .reflectable(), new AttackMove(Moves.FELL_STINGER, Type.BUG, MoveCategory.PHYSICAL, 50, 100, 25, -1, 0, 6) .attr(PostVictoryStatStageChangeAttr, [ Stat.ATK ], 3, true ), new ChargingAttackMove(Moves.PHANTOM_FORCE, Type.GHOST, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6) .chargeText(i18next.t("moveTriggers:vanishedInstantly", { pokemonName: "{USER}" })) .chargeAttr(SemiInvulnerableAttr, BattlerTagType.HIDDEN) - .ignoresProtect() - .ignoresVirtual(), + .ignoresProtect(), new StatusMove(Moves.TRICK_OR_TREAT, Type.GHOST, 100, 20, -1, 0, 6) - .attr(AddTypeAttr, Type.GHOST), + .attr(AddTypeAttr, Type.GHOST) + .reflectable(), new StatusMove(Moves.NOBLE_ROAR, Type.NORMAL, 100, 30, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -1) - .soundBased(), + .soundBased() + .reflectable(), new StatusMove(Moves.ION_DELUGE, Type.ELECTRIC, -1, 25, -1, 1, 6) .attr(AddArenaTagAttr, ArenaTagType.ION_DELUGE) .target(MoveTarget.BOTH_SIDES), @@ -9658,7 +10326,8 @@ export function initMoves() { .target(MoveTarget.ALL_NEAR_OTHERS) .triageMove(), new StatusMove(Moves.FORESTS_CURSE, Type.GRASS, 100, 20, -1, 0, 6) - .attr(AddTypeAttr, Type.GRASS), + .attr(AddTypeAttr, Type.GRASS) + .reflectable(), new AttackMove(Moves.PETAL_BLIZZARD, Type.GRASS, MoveCategory.PHYSICAL, 90, 100, 15, -1, 0, 6) .windMove() .makesContact(false) @@ -9672,9 +10341,11 @@ export function initMoves() { new StatusMove(Moves.PARTING_SHOT, Type.DARK, 100, 20, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -1, false, { trigger: MoveEffectTrigger.PRE_APPLY }) .attr(ForceSwitchOutAttr, true) - .soundBased(), + .soundBased() + .reflectable(), new StatusMove(Moves.TOPSY_TURVY, Type.DARK, -1, 20, -1, 0, 6) - .attr(InvertStatsAttr), + .attr(InvertStatsAttr) + .reflectable(), new AttackMove(Moves.DRAINING_KISS, Type.FAIRY, MoveCategory.SPECIAL, 50, 100, 10, -1, 0, 6) .attr(HitHealAttr, 0.75) .makesContact() @@ -9713,10 +10384,12 @@ export function initMoves() { .condition(failIfLastCondition), new StatusMove(Moves.PLAY_NICE, Type.NORMAL, -1, 20, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.ATK ], -1) - .ignoresSubstitute(), + .ignoresSubstitute() + .reflectable(), new StatusMove(Moves.CONFIDE, Type.NORMAL, -1, 20, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.SPATK ], -1) - .soundBased(), + .soundBased() + .reflectable(), new AttackMove(Moves.DIAMOND_STORM, Type.ROCK, MoveCategory.PHYSICAL, 100, 95, 5, 50, 0, 6) .attr(StatStageChangeAttr, [ Stat.DEF ], 2, true, { firstTargetOnly: true }) .makesContact(false) @@ -9743,18 +10416,20 @@ export function initMoves() { .condition(failIfSingleBattle) .target(MoveTarget.NEAR_ALLY), new StatusMove(Moves.EERIE_IMPULSE, Type.ELECTRIC, 100, 15, -1, 0, 6) - .attr(StatStageChangeAttr, [ Stat.SPATK ], -2), + .attr(StatStageChangeAttr, [ Stat.SPATK ], -2) + .reflectable(), new StatusMove(Moves.VENOM_DRENCH, Type.POISON, 100, 20, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK, Stat.SPD ], -1, false, { condition: (user, target, move) => target.status?.effect === StatusEffect.POISON || target.status?.effect === StatusEffect.TOXIC }) - .target(MoveTarget.ALL_NEAR_ENEMIES), + .target(MoveTarget.ALL_NEAR_ENEMIES) + .reflectable(), new StatusMove(Moves.POWDER, Type.BUG, 100, 20, -1, 1, 6) .attr(AddBattlerTagAttr, BattlerTagType.POWDER, false, true) .ignoresSubstitute() - .powderMove(), + .powderMove() + .reflectable(), new ChargingSelfStatusMove(Moves.GEOMANCY, Type.FAIRY, -1, 10, -1, 0, 6) .chargeText(i18next.t("moveTriggers:isChargingPower", { pokemonName: "{USER}" })) - .attr(StatStageChangeAttr, [ Stat.SPATK, Stat.SPDEF, Stat.SPD ], 2, true) - .ignoresVirtual(), + .attr(StatStageChangeAttr, [ Stat.SPATK, Stat.SPDEF, Stat.SPD ], 2, true), new StatusMove(Moves.MAGNETIC_FLUX, Type.ELECTRIC, -1, 20, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.DEF, Stat.SPDEF ], 1, false, { condition: (user, target, move) => !![ Abilities.PLUS, Abilities.MINUS ].find(a => target.hasAbility(a, false)) }) .ignoresSubstitute() @@ -9768,12 +10443,14 @@ export function initMoves() { .target(MoveTarget.BOTH_SIDES), new AttackMove(Moves.DAZZLING_GLEAM, Type.FAIRY, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 6) .target(MoveTarget.ALL_NEAR_ENEMIES), - new SelfStatusMove(Moves.CELEBRATE, Type.NORMAL, -1, 40, -1, 0, 6), + new SelfStatusMove(Moves.CELEBRATE, Type.NORMAL, -1, 40, -1, 0, 6) + .attr(CelebrateAttr), new StatusMove(Moves.HOLD_HANDS, Type.NORMAL, -1, 40, -1, 0, 6) .ignoresSubstitute() .target(MoveTarget.NEAR_ALLY), new StatusMove(Moves.BABY_DOLL_EYES, Type.FAIRY, 100, 30, -1, 1, 6) - .attr(StatStageChangeAttr, [ Stat.ATK ], -1), + .attr(StatStageChangeAttr, [ Stat.ATK ], -1) + .reflectable(), new AttackMove(Moves.NUZZLE, Type.ELECTRIC, MoveCategory.PHYSICAL, 20, 100, 20, 100, 0, 6) .attr(StatusEffectAttr, StatusEffect.PARALYSIS), new AttackMove(Moves.HOLD_BACK, Type.NORMAL, MoveCategory.PHYSICAL, 40, 100, 40, -1, 0, 6) @@ -9821,116 +10498,79 @@ export function initMoves() { .ignoresProtect(), /* Unused */ new AttackMove(Moves.BREAKNECK_BLITZ__PHYSICAL, Type.NORMAL, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.BREAKNECK_BLITZ__SPECIAL, Type.NORMAL, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.ALL_OUT_PUMMELING__PHYSICAL, Type.FIGHTING, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.ALL_OUT_PUMMELING__SPECIAL, Type.FIGHTING, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.SUPERSONIC_SKYSTRIKE__PHYSICAL, Type.FLYING, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.SUPERSONIC_SKYSTRIKE__SPECIAL, Type.FLYING, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.ACID_DOWNPOUR__PHYSICAL, Type.POISON, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.ACID_DOWNPOUR__SPECIAL, Type.POISON, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.TECTONIC_RAGE__PHYSICAL, Type.GROUND, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.TECTONIC_RAGE__SPECIAL, Type.GROUND, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.CONTINENTAL_CRUSH__PHYSICAL, Type.ROCK, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.CONTINENTAL_CRUSH__SPECIAL, Type.ROCK, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.SAVAGE_SPIN_OUT__PHYSICAL, Type.BUG, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.SAVAGE_SPIN_OUT__SPECIAL, Type.BUG, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.NEVER_ENDING_NIGHTMARE__PHYSICAL, Type.GHOST, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.NEVER_ENDING_NIGHTMARE__SPECIAL, Type.GHOST, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.CORKSCREW_CRASH__PHYSICAL, Type.STEEL, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.CORKSCREW_CRASH__SPECIAL, Type.STEEL, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.INFERNO_OVERDRIVE__PHYSICAL, Type.FIRE, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.INFERNO_OVERDRIVE__SPECIAL, Type.FIRE, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.HYDRO_VORTEX__PHYSICAL, Type.WATER, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.HYDRO_VORTEX__SPECIAL, Type.WATER, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.BLOOM_DOOM__PHYSICAL, Type.GRASS, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.BLOOM_DOOM__SPECIAL, Type.GRASS, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.GIGAVOLT_HAVOC__PHYSICAL, Type.ELECTRIC, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.GIGAVOLT_HAVOC__SPECIAL, Type.ELECTRIC, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.SHATTERED_PSYCHE__PHYSICAL, Type.PSYCHIC, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.SHATTERED_PSYCHE__SPECIAL, Type.PSYCHIC, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.SUBZERO_SLAMMER__PHYSICAL, Type.ICE, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.SUBZERO_SLAMMER__SPECIAL, Type.ICE, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.DEVASTATING_DRAKE__PHYSICAL, Type.DRAGON, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.DEVASTATING_DRAKE__SPECIAL, Type.DRAGON, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.BLACK_HOLE_ECLIPSE__PHYSICAL, Type.DARK, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.BLACK_HOLE_ECLIPSE__SPECIAL, Type.DARK, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.TWINKLE_TACKLE__PHYSICAL, Type.FAIRY, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.TWINKLE_TACKLE__SPECIAL, Type.FAIRY, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.CATASTROPIKA, Type.ELECTRIC, MoveCategory.PHYSICAL, 210, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), /* End Unused */ new SelfStatusMove(Moves.SHORE_UP, Type.GROUND, -1, 5, -1, 0, 7) .attr(SandHealAttr) @@ -9953,14 +10593,16 @@ export function initMoves() { .attr(StatStageChangeAttr, [ Stat.SPD ], -1, true) .punchingMove(), new StatusMove(Moves.FLORAL_HEALING, Type.FAIRY, -1, 10, -1, 0, 7) - .attr(BoostHealAttr, 0.5, 2 / 3, true, false, (user, target, move) => user.scene.arena.terrain?.terrainType === TerrainType.GRASSY) - .triageMove(), + .attr(BoostHealAttr, 0.5, 2 / 3, true, false, (user, target, move) => globalScene.arena.terrain?.terrainType === TerrainType.GRASSY) + .triageMove() + .reflectable(), new AttackMove(Moves.HIGH_HORSEPOWER, Type.GROUND, MoveCategory.PHYSICAL, 95, 95, 10, -1, 0, 7), new StatusMove(Moves.STRENGTH_SAP, Type.GRASS, 100, 10, -1, 0, 7) .attr(HitHealAttr, null, Stat.ATK) .attr(StatStageChangeAttr, [ Stat.ATK ], -1) .condition((user, target, move) => target.getStatStage(Stat.ATK) > -6) - .triageMove(), + .triageMove() + .reflectable(), new ChargingAttackMove(Moves.SOLAR_BLADE, Type.GRASS, MoveCategory.PHYSICAL, 125, 100, 10, -1, 0, 7) .chargeText(i18next.t("moveTriggers:isGlowing", { pokemonName: "{USER}" })) .chargeAttr(WeatherInstantChargeAttr, [ WeatherType.SUNNY, WeatherType.HARSH_SUN ]) @@ -9970,10 +10612,12 @@ export function initMoves() { .makesContact(false), new StatusMove(Moves.SPOTLIGHT, Type.NORMAL, -1, 15, -1, 3, 7) .attr(AddBattlerTagAttr, BattlerTagType.CENTER_OF_ATTENTION, false) - .condition(failIfSingleBattle), + .condition(failIfSingleBattle) + .reflectable(), new StatusMove(Moves.TOXIC_THREAD, Type.POISON, 100, 20, -1, 0, 7) .attr(StatusEffectAttr, StatusEffect.POISON) - .attr(StatStageChangeAttr, [ Stat.SPD ], -1), + .attr(StatStageChangeAttr, [ Stat.SPD ], -1) + .reflectable(), new SelfStatusMove(Moves.LASER_FOCUS, Type.NORMAL, -1, 30, -1, 0, 7) .attr(AddBattlerTagAttr, BattlerTagType.ALWAYS_CRIT, true, false), new StatusMove(Moves.GEAR_UP, Type.STEEL, -1, 20, -1, 0, 7) @@ -10006,7 +10650,7 @@ export function initMoves() { .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE) .attr(AddBattlerTagAttr, BattlerTagType.BURNED_UP, true, false) .attr(RemoveTypeAttr, Type.FIRE, (user) => { - user.scene.queueMessage(i18next.t("moveTriggers:burnedItselfOut", { pokemonName: getPokemonNameWithAffix(user) })); + globalScene.queueMessage(i18next.t("moveTriggers:burnedItselfOut", { pokemonName: getPokemonNameWithAffix(user) })); }), new StatusMove(Moves.SPEED_SWAP, Type.PSYCHIC, -1, 10, -1, 0, 7) .attr(SwapStatAttr, Stat.SPD) @@ -10017,7 +10661,8 @@ export function initMoves() { (user: Pokemon, target: Pokemon, move: Move) => isNonVolatileStatusEffect(target.status?.effect!)) // TODO: is this bang correct? .attr(HealAttr, 0.5) .attr(HealStatusEffectAttr, false, getNonVolatileStatusEffects()) - .triageMove(), + .triageMove() + .reflectable(), new AttackMove(Moves.REVELATION_DANCE, Type.NORMAL, MoveCategory.SPECIAL, 90, 100, 15, -1, 0, 7) .danceMove() .attr(MatchUserTypeAttr), @@ -10029,7 +10674,10 @@ export function initMoves() { new StatusMove(Moves.INSTRUCT, Type.PSYCHIC, -1, 15, -1, 0, 7) .ignoresSubstitute() .attr(RepeatMoveAttr) - .edgeCase(), // incorrect interactions with Gigaton Hammer, Blood Moon & Torment + // incorrect interactions with Gigaton Hammer, Blood Moon & Torment + // Also has incorrect interactions with Dancer due to the latter + // erroneously adding copied moves to move history. + .edgeCase(), new AttackMove(Moves.BEAK_BLAST, Type.FLYING, MoveCategory.PHYSICAL, 100, 100, 15, -1, -3, 7) .attr(BeakBlastHeaderAttr) .ballBombMove() @@ -10042,40 +10690,38 @@ export function initMoves() { new AttackMove(Moves.BRUTAL_SWING, Type.DARK, MoveCategory.PHYSICAL, 60, 100, 20, -1, 0, 7) .target(MoveTarget.ALL_NEAR_OTHERS), new StatusMove(Moves.AURORA_VEIL, Type.ICE, -1, 20, -1, 0, 7) - .condition((user, target, move) => (user.scene.arena.weather?.weatherType === WeatherType.HAIL || user.scene.arena.weather?.weatherType === WeatherType.SNOW) && !user.scene.arena.weather?.isEffectSuppressed(user.scene)) + .condition((user, target, move) => (globalScene.arena.weather?.weatherType === WeatherType.HAIL || globalScene.arena.weather?.weatherType === WeatherType.SNOW) && !globalScene.arena.weather?.isEffectSuppressed()) .attr(AddArenaTagAttr, ArenaTagType.AURORA_VEIL, 5, true) .target(MoveTarget.USER_SIDE), /* Unused */ new AttackMove(Moves.SINISTER_ARROW_RAID, Type.GHOST, MoveCategory.PHYSICAL, 180, -1, 1, -1, 0, 7) + .unimplemented() .makesContact(false) - .edgeCase() // I assume it's because the user needs spirit shackle and decidueye - .ignoresVirtual(), + .edgeCase(), // I assume it's because the user needs spirit shackle and decidueye new AttackMove(Moves.MALICIOUS_MOONSAULT, Type.DARK, MoveCategory.PHYSICAL, 180, -1, 1, -1, 0, 7) + .unimplemented() .attr(AlwaysHitMinimizeAttr) .attr(HitsTagAttr, BattlerTagType.MINIMIZED, true) - .edgeCase() // I assume it's because it needs darkest lariat and incineroar - .ignoresVirtual(), + .edgeCase(), // I assume it's because it needs darkest lariat and incineroar new AttackMove(Moves.OCEANIC_OPERETTA, Type.WATER, MoveCategory.SPECIAL, 195, -1, 1, -1, 0, 7) - .edgeCase() // I assume it's because it needs sparkling aria and primarina - .ignoresVirtual(), + .unimplemented() + .edgeCase(), // I assume it's because it needs sparkling aria and primarina new AttackMove(Moves.GUARDIAN_OF_ALOLA, Type.FAIRY, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.SOUL_STEALING_7_STAR_STRIKE, Type.GHOST, MoveCategory.PHYSICAL, 195, -1, 1, -1, 0, 7) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.STOKED_SPARKSURFER, Type.ELECTRIC, MoveCategory.SPECIAL, 175, -1, 1, 100, 0, 7) - .edgeCase() // I assume it's because it needs thunderbolt and Alola Raichu - .ignoresVirtual(), + .unimplemented() + .edgeCase(), // I assume it's because it needs thunderbolt and Alola Raichu new AttackMove(Moves.PULVERIZING_PANCAKE, Type.NORMAL, MoveCategory.PHYSICAL, 210, -1, 1, -1, 0, 7) - .edgeCase() // I assume it's because it needs giga impact and snorlax - .ignoresVirtual(), + .unimplemented() + .edgeCase(), // I assume it's because it needs giga impact and snorlax new SelfStatusMove(Moves.EXTREME_EVOBOOST, Type.NORMAL, -1, 1, -1, 0, 7) - .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ], 2, true) - .ignoresVirtual(), + .unimplemented() + .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ], 2, true), new AttackMove(Moves.GENESIS_SUPERNOVA, Type.PSYCHIC, MoveCategory.SPECIAL, 185, -1, 1, 100, 0, 7) - .attr(TerrainChangeAttr, TerrainType.PSYCHIC) - .ignoresVirtual(), + .unimplemented() + .attr(TerrainChangeAttr, TerrainType.PSYCHIC), /* End Unused */ new AttackMove(Moves.SHELL_TRAP, Type.FIRE, MoveCategory.SPECIAL, 150, 100, 5, -1, -3, 7) .attr(AddBattlerTagHeaderAttr, BattlerTagType.SHELL_TRAP) @@ -10098,14 +10744,15 @@ export function initMoves() { new AttackMove(Moves.PRISMATIC_LASER, Type.PSYCHIC, MoveCategory.SPECIAL, 160, 100, 10, -1, 0, 7) .attr(RechargeAttr), new AttackMove(Moves.SPECTRAL_THIEF, Type.GHOST, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 7) - .ignoresSubstitute() - .partial(), // Does not steal stats + .attr(SpectralThiefAttr) + .ignoresSubstitute(), new AttackMove(Moves.SUNSTEEL_STRIKE, Type.STEEL, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 7) .ignoresAbilities(), new AttackMove(Moves.MOONGEIST_BEAM, Type.GHOST, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 7) .ignoresAbilities(), new StatusMove(Moves.TEARFUL_LOOK, Type.NORMAL, -1, 20, -1, 0, 7) - .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -1), + .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -1) + .reflectable(), new AttackMove(Moves.ZING_ZAP, Type.ELECTRIC, MoveCategory.PHYSICAL, 80, 100, 10, 30, 0, 7) .attr(FlinchAttr), new AttackMove(Moves.NATURES_MADNESS, Type.FAIRY, MoveCategory.SPECIAL, -1, 90, 10, -1, 0, 7) @@ -10114,8 +10761,8 @@ export function initMoves() { .attr(FormChangeItemTypeAttr), /* Unused */ new AttackMove(Moves.TEN_MILLION_VOLT_THUNDERBOLT, Type.ELECTRIC, MoveCategory.SPECIAL, 195, -1, 1, -1, 0, 7) - .edgeCase() // I assume it's because it needs thunderbolt and pikachu in a cap - .ignoresVirtual(), + .unimplemented() + .edgeCase(), // I assume it's because it needs thunderbolt and pikachu in a cap /* End Unused */ new AttackMove(Moves.MIND_BLOWN, Type.FIRE, MoveCategory.SPECIAL, 150, 100, 5, -1, 0, 7) .condition(failIfDampCondition) @@ -10129,28 +10776,28 @@ export function initMoves() { .ignoresAbilities(), /* Unused */ new AttackMove(Moves.LIGHT_THAT_BURNS_THE_SKY, Type.PSYCHIC, MoveCategory.SPECIAL, 200, -1, 1, -1, 0, 7) + .unimplemented() .attr(PhotonGeyserCategoryAttr) - .ignoresAbilities() - .ignoresVirtual(), + .ignoresAbilities(), new AttackMove(Moves.SEARING_SUNRAZE_SMASH, Type.STEEL, MoveCategory.PHYSICAL, 200, -1, 1, -1, 0, 7) - .ignoresAbilities() - .ignoresVirtual(), + .unimplemented() + .ignoresAbilities(), new AttackMove(Moves.MENACING_MOONRAZE_MAELSTROM, Type.GHOST, MoveCategory.SPECIAL, 200, -1, 1, -1, 0, 7) - .ignoresAbilities() - .ignoresVirtual(), + .unimplemented() + .ignoresAbilities(), new AttackMove(Moves.LETS_SNUGGLE_FOREVER, Type.FAIRY, MoveCategory.PHYSICAL, 190, -1, 1, -1, 0, 7) - .edgeCase() // I assume it needs play rough and mimikyu - .ignoresVirtual(), + .unimplemented() + .edgeCase(), // I assume it needs play rough and mimikyu new AttackMove(Moves.SPLINTERED_STORMSHARDS, Type.ROCK, MoveCategory.PHYSICAL, 190, -1, 1, -1, 0, 7) + .unimplemented() .attr(ClearTerrainAttr) - .makesContact(false) - .ignoresVirtual(), + .makesContact(false), new AttackMove(Moves.CLANGOROUS_SOULBLAZE, Type.DRAGON, MoveCategory.SPECIAL, 185, -1, 1, 100, 0, 7) + .unimplemented() .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ], 1, true, { firstTargetOnly: true }) .soundBased() .target(MoveTarget.ALL_NEAR_ENEMIES) - .edgeCase() // I assume it needs clanging scales and Kommo-O - .ignoresVirtual(), + .edgeCase(), // I assume it needs clanging scales and Kommo-O /* End Unused */ new AttackMove(Moves.ZIPPY_ZAP, Type.ELECTRIC, MoveCategory.PHYSICAL, 50, 100, 15, -1, 2, 7) // LGPE Implementation .attr(CritOnlyAttr), @@ -10162,9 +10809,8 @@ export function initMoves() { new AttackMove(Moves.PIKA_PAPOW, Type.ELECTRIC, MoveCategory.SPECIAL, -1, -1, 20, -1, 0, 7) .attr(FriendshipPowerAttr), new AttackMove(Moves.BOUNCY_BUBBLE, Type.WATER, MoveCategory.SPECIAL, 60, 100, 20, -1, 0, 7) - .attr(HitHealAttr) // Custom - .triageMove() - .target(MoveTarget.ALL_NEAR_ENEMIES), + .attr(HitHealAttr, 1) + .triageMove(), new AttackMove(Moves.BUZZY_BUZZ, Type.ELECTRIC, MoveCategory.SPECIAL, 60, 100, 20, 100, 0, 7) .attr(StatusEffectAttr, StatusEffect.PARALYSIS), new AttackMove(Moves.SIZZLY_SLIDE, Type.FIRE, MoveCategory.PHYSICAL, 60, 100, 20, 100, 0, 7) @@ -10188,23 +10834,22 @@ export function initMoves() { .punchingMove(), /* Unused */ new SelfStatusMove(Moves.MAX_GUARD, Type.NORMAL, -1, 10, -1, 4, 8) + .unimplemented() .attr(ProtectAttr) - .condition(failIfLastCondition) - .ignoresVirtual(), + .condition(failIfLastCondition), /* End Unused */ new AttackMove(Moves.DYNAMAX_CANNON, Type.DRAGON, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 8) .attr(MovePowerMultiplierAttr, (user, target, move) => { // Move is only stronger against overleveled foes. - if (target.level > target.scene.getMaxExpLevel()) { + if (target.level > globalScene.getMaxExpLevel()) { const dynamaxCannonPercentMarginBeforeFullDamage = 0.05; // How much % above MaxExpLevel of wave will the target need to be to take full damage. // The move's power scales as the margin is approached, reaching double power when it does or goes over it. - return 1 + Math.min(1, (target.level - target.scene.getMaxExpLevel()) / (target.scene.getMaxExpLevel() * dynamaxCannonPercentMarginBeforeFullDamage)); + return 1 + Math.min(1, (target.level - globalScene.getMaxExpLevel()) / (globalScene.getMaxExpLevel() * dynamaxCannonPercentMarginBeforeFullDamage)); } else { return 1; } }) - .attr(DiscourageFrequentUseAttr) - .ignoresVirtual(), + .attr(DiscourageFrequentUseAttr), new AttackMove(Moves.SNIPE_SHOT, Type.WATER, MoveCategory.SPECIAL, 80, 100, 15, -1, 0, 8) .attr(HighCritAttr) @@ -10216,7 +10861,7 @@ export function initMoves() { .attr(EatBerryAttr) .attr(StatStageChangeAttr, [ Stat.DEF ], 2, true) .condition((user) => { - const userBerries = user.scene.findModifiers(m => m instanceof BerryModifier, user.isPlayer()); + const userBerries = globalScene.findModifiers(m => m instanceof BerryModifier, user.isPlayer()); return userBerries.length > 0; }) .edgeCase(), // Stuff Cheeks should not be selectable when the user does not have a berry, see wiki @@ -10226,10 +10871,12 @@ export function initMoves() { .condition((user, target, move) => user.getTag(TrappedTag)?.sourceMove !== Moves.NO_RETREAT), // fails if the user is currently trapped by No Retreat new StatusMove(Moves.TAR_SHOT, Type.ROCK, 100, 15, -1, 0, 8) .attr(StatStageChangeAttr, [ Stat.SPD ], -1) - .attr(AddBattlerTagAttr, BattlerTagType.TAR_SHOT, false), + .attr(AddBattlerTagAttr, BattlerTagType.TAR_SHOT, false) + .reflectable(), new StatusMove(Moves.MAGIC_POWDER, Type.PSYCHIC, 100, 20, -1, 0, 8) .attr(ChangeTypeAttr, Type.PSYCHIC) - .powderMove(), + .powderMove() + .reflectable(), new AttackMove(Moves.DRAGON_DARTS, Type.DRAGON, MoveCategory.PHYSICAL, 50, 100, 10, -1, 0, 8) .attr(MultiHitAttr, MultiHitType._2) .makesContact(false) @@ -10247,78 +10894,61 @@ export function initMoves() { .bitingMove(), new StatusMove(Moves.COURT_CHANGE, Type.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 ]), + /* Unused */ new AttackMove(Moves.MAX_FLARE, Type.FIRE, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.MAX_FLUTTERBY, Type.BUG, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.MAX_LIGHTNING, Type.ELECTRIC, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.MAX_STRIKE, Type.NORMAL, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.MAX_KNUCKLE, Type.FIGHTING, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.MAX_PHANTASM, Type.GHOST, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.MAX_HAILSTORM, Type.ICE, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.MAX_OOZE, Type.POISON, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.MAX_GEYSER, Type.WATER, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.MAX_AIRSTREAM, Type.FLYING, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.MAX_STARFALL, Type.FAIRY, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.MAX_WYRMWIND, Type.DRAGON, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.MAX_MINDSTORM, Type.PSYCHIC, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.MAX_ROCKFALL, Type.ROCK, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.MAX_QUAKE, Type.GROUND, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.MAX_DARKNESS, Type.DARK, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.MAX_OVERGROWTH, Type.GRASS, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), new AttackMove(Moves.MAX_STEELSPIKE, Type.STEEL, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) - .unimplemented() - .ignoresVirtual(), + .unimplemented(), /* End Unused */ new SelfStatusMove(Moves.CLANGOROUS_SOUL, Type.DRAGON, 100, 5, -1, 0, 8) .attr(CutHpStatStageBoostAttr, [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ], 1, 3) @@ -10357,7 +10987,7 @@ export function initMoves() { .attr(StatStageChangeAttr, [ Stat.SPDEF ], -1), new AttackMove(Moves.GRAV_APPLE, Type.GRASS, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 8) .attr(StatStageChangeAttr, [ Stat.DEF ], -1) - .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTag(ArenaTagType.GRAVITY) ? 1.5 : 1) + .attr(MovePowerMultiplierAttr, (user, target, move) => globalScene.arena.getTag(ArenaTagType.GRAVITY) ? 1.5 : 1) .makesContact(false), new AttackMove(Moves.SPIRIT_BREAK, Type.FAIRY, MoveCategory.PHYSICAL, 75, 100, 15, 100, 0, 8) .attr(StatStageChangeAttr, [ Stat.SPATK ], -1), @@ -10379,11 +11009,11 @@ export function initMoves() { new AttackMove(Moves.STEEL_BEAM, Type.STEEL, MoveCategory.SPECIAL, 140, 95, 5, -1, 0, 8) .attr(HalfSacrificialAttr), new AttackMove(Moves.EXPANDING_FORCE, Type.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 8) - .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.PSYCHIC && user.isGrounded() ? 1.5 : 1) - .attr(VariableTargetAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.PSYCHIC && user.isGrounded() ? MoveTarget.ALL_NEAR_ENEMIES : MoveTarget.NEAR_OTHER), + .attr(MovePowerMultiplierAttr, (user, target, move) => globalScene.arena.getTerrainType() === TerrainType.PSYCHIC && user.isGrounded() ? 1.5 : 1) + .attr(VariableTargetAttr, (user, target, move) => globalScene.arena.getTerrainType() === TerrainType.PSYCHIC && user.isGrounded() ? MoveTarget.ALL_NEAR_ENEMIES : MoveTarget.NEAR_OTHER), new AttackMove(Moves.STEEL_ROLLER, Type.STEEL, MoveCategory.PHYSICAL, 130, 100, 5, -1, 0, 8) .attr(ClearTerrainAttr) - .condition((user, target, move) => !!user.scene.arena.terrain), + .condition((user, target, move) => !!globalScene.arena.terrain), new AttackMove(Moves.SCALE_SHOT, Type.DRAGON, MoveCategory.PHYSICAL, 25, 90, 20, -1, 0, 8) .attr(StatStageChangeAttr, [ Stat.SPD ], 1, true, { lastHitOnly: true }) .attr(StatStageChangeAttr, [ Stat.DEF ], -1, true, { lastHitOnly: true }) @@ -10391,8 +11021,7 @@ export function initMoves() { .makesContact(false), new ChargingAttackMove(Moves.METEOR_BEAM, Type.ROCK, MoveCategory.SPECIAL, 120, 90, 10, -1, 0, 8) .chargeText(i18next.t("moveTriggers:isOverflowingWithSpacePower", { pokemonName: "{USER}" })) - .chargeAttr(StatStageChangeAttr, [ Stat.SPATK ], 1, true) - .ignoresVirtual(), + .chargeAttr(StatStageChangeAttr, [ Stat.SPATK ], 1, true), new AttackMove(Moves.SHELL_SIDE_ARM, Type.POISON, MoveCategory.SPECIAL, 90, 100, 10, 20, 0, 8) .attr(ShellSideArmCategoryAttr) .attr(StatusEffectAttr, StatusEffect.POISON) @@ -10400,16 +11029,16 @@ export function initMoves() { new AttackMove(Moves.MISTY_EXPLOSION, Type.FAIRY, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 8) .attr(SacrificialAttr) .target(MoveTarget.ALL_NEAR_OTHERS) - .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.MISTY && user.isGrounded() ? 1.5 : 1) + .attr(MovePowerMultiplierAttr, (user, target, move) => globalScene.arena.getTerrainType() === TerrainType.MISTY && user.isGrounded() ? 1.5 : 1) .condition(failIfDampCondition) .makesContact(false), new AttackMove(Moves.GRASSY_GLIDE, Type.GRASS, MoveCategory.PHYSICAL, 55, 100, 20, -1, 0, 8) - .attr(IncrementMovePriorityAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY && user.isGrounded()), + .attr(IncrementMovePriorityAttr, (user, target, move) => globalScene.arena.getTerrainType() === TerrainType.GRASSY && user.isGrounded()), new AttackMove(Moves.RISING_VOLTAGE, Type.ELECTRIC, MoveCategory.SPECIAL, 70, 100, 20, -1, 0, 8) - .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.ELECTRIC && target.isGrounded() ? 2 : 1), + .attr(MovePowerMultiplierAttr, (user, target, move) => globalScene.arena.getTerrainType() === TerrainType.ELECTRIC && target.isGrounded() ? 2 : 1), new AttackMove(Moves.TERRAIN_PULSE, Type.NORMAL, MoveCategory.SPECIAL, 50, 100, 10, -1, 0, 8) .attr(TerrainPulseTypeAttr) - .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() !== TerrainType.NONE && user.isGrounded() ? 2 : 1) + .attr(MovePowerMultiplierAttr, (user, target, move) => globalScene.arena.getTerrainType() !== TerrainType.NONE && user.isGrounded() ? 2 : 1) .pulseMove(), new AttackMove(Moves.SKITTER_SMACK, Type.BUG, MoveCategory.PHYSICAL, 70, 90, 10, 100, 0, 8) .attr(StatStageChangeAttr, [ Stat.SPATK ], -1), @@ -10419,10 +11048,12 @@ export function initMoves() { new AttackMove(Moves.LASH_OUT, Type.DARK, MoveCategory.PHYSICAL, 75, 100, 5, -1, 0, 8) .attr(MovePowerMultiplierAttr, (user, _target, _move) => user.turnData.statStagesDecreased ? 2 : 1), new AttackMove(Moves.POLTERGEIST, Type.GHOST, MoveCategory.PHYSICAL, 110, 90, 5, -1, 0, 8) - .attr(AttackedByItemAttr) + .condition(failIfNoTargetHeldItemsCondition) + .attr(PreMoveMessageAttr, attackedByItemMessageFunc) .makesContact(false), new StatusMove(Moves.CORROSIVE_GAS, Type.POISON, 100, 40, -1, 0, 8) .target(MoveTarget.ALL_NEAR_OTHERS) + .reflectable() .unimplemented(), new StatusMove(Moves.COACHING, Type.FIGHTING, -1, 10, -1, 0, 8) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF ], 1) @@ -10657,8 +11288,7 @@ export function initMoves() { .attr(TeraMoveCategoryAttr) .attr(TeraBlastTypeAttr) .attr(TeraBlastPowerAttr) - .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -1, true, { condition: (user, target, move) => user.isTerastallized() && user.isOfType(Type.STELLAR) }) - .partial(), /** Does not ignore abilities that affect stats, relevant in determining the move's category {@see TeraMoveCategoryAttr} */ + .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -1, true, { condition: (user, target, move) => user.isTerastallized && user.isOfType(Type.STELLAR) }), new SelfStatusMove(Moves.SILK_TRAP, Type.BUG, -1, 10, -1, 4, 9) .attr(ProtectAttr, BattlerTagType.SILK_TRAP) .condition(failIfLastCondition), @@ -10668,8 +11298,7 @@ export function initMoves() { .attr(ConfuseAttr) .recklessMove(), new AttackMove(Moves.LAST_RESPECTS, Type.GHOST, MoveCategory.PHYSICAL, 50, 100, 10, -1, 0, 9) - .partial() // Counter resets every wave instead of on arena reset - .attr(MovePowerMultiplierAttr, (user, target, move) => 1 + Math.min(user.isPlayer() ? user.scene.currentBattle.playerFaints : user.scene.currentBattle.enemyFaints, 100)) + .attr(MovePowerMultiplierAttr, (user, target, move) => 1 + Math.min(user.isPlayer() ? globalScene.arena.playerFaints : globalScene.currentBattle.enemyFaints, 100)) .makesContact(false), new AttackMove(Moves.LUMINA_CRASH, Type.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 10, 100, 0, 9) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -2), @@ -10693,7 +11322,7 @@ export function initMoves() { .attr(AddBattlerTagAttr, BattlerTagType.ALWAYS_GET_HIT, true, false, 0, 0, true) .attr(AddBattlerTagAttr, BattlerTagType.RECEIVE_DOUBLE_DAMAGE, true, false, 0, 0, true) .condition((user, target, move) => { - return !(target.getTag(BattlerTagType.PROTECTED)?.tagType === "PROTECTED" || target.scene.arena.getTag(ArenaTagType.MAT_BLOCK)?.tagType === "MAT_BLOCK"); + return !(target.getTag(BattlerTagType.PROTECTED)?.tagType === "PROTECTED" || globalScene.arena.getTag(ArenaTagType.MAT_BLOCK)?.tagType === "MAT_BLOCK"); }), new StatusMove(Moves.REVIVAL_BLESSING, Type.NORMAL, -1, 1, -1, 0, 9) .triageMove() @@ -10744,11 +11373,11 @@ export function initMoves() { .attr(StatStageChangeAttr, [ Stat.SPATK ], -1, true, { firstTargetOnly: true }) .target(MoveTarget.ALL_NEAR_ENEMIES), new AttackMove(Moves.PSYBLADE, Type.PSYCHIC, MoveCategory.PHYSICAL, 80, 100, 15, -1, 0, 9) - .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.ELECTRIC && user.isGrounded() ? 1.5 : 1) + .attr(MovePowerMultiplierAttr, (user, target, move) => globalScene.arena.getTerrainType() === TerrainType.ELECTRIC && user.isGrounded() ? 1.5 : 1) .slicingMove(), new AttackMove(Moves.HYDRO_STEAM, Type.WATER, MoveCategory.SPECIAL, 80, 100, 15, -1, 0, 9) .attr(IgnoreWeatherTypeDebuffAttr, WeatherType.SUNNY) - .attr(MovePowerMultiplierAttr, (user, target, move) => [ WeatherType.SUNNY, WeatherType.HARSH_SUN ].includes(user.scene.arena.weather?.weatherType!) && !user.scene.arena.weather?.isEffectSuppressed(user.scene) ? 1.5 : 1), // TODO: is this bang correct? + .attr(MovePowerMultiplierAttr, (user, target, move) => [ WeatherType.SUNNY, WeatherType.HARSH_SUN ].includes(globalScene.arena.weather?.weatherType!) && !globalScene.arena.weather?.isEffectSuppressed() ? 1.5 : 1), // TODO: is this bang correct? new AttackMove(Moves.RUINATION, Type.DARK, MoveCategory.SPECIAL, -1, 90, 10, -1, 0, 9) .attr(TargetHalfHpDamageAttr), new AttackMove(Moves.COLLISION_COURSE, Type.FIGHTING, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 9) @@ -10757,7 +11386,7 @@ export function initMoves() { .attr(MovePowerMultiplierAttr, (user, target, move) => target.getAttackTypeEffectiveness(move.type, user) >= 2 ? 5461 / 4096 : 1) .makesContact(), new SelfStatusMove(Moves.SHED_TAIL, Type.NORMAL, -1, 10, -1, 0, 9) - .attr(AddSubstituteAttr, 0.5) + .attr(AddSubstituteAttr, 0.5, true) .attr(ForceSwitchOutAttr, true, SwitchType.SHED_TAIL) .condition(failIfLastInPartyCondition), new SelfStatusMove(Moves.CHILLY_RECEPTION, Type.ICE, -1, 10, -1, 0, 9) @@ -10781,8 +11410,8 @@ export function initMoves() { new AttackMove(Moves.TWIN_BEAM, Type.PSYCHIC, MoveCategory.SPECIAL, 40, 100, 10, -1, 0, 9) .attr(MultiHitAttr, MultiHitType._2), new AttackMove(Moves.RAGE_FIST, Type.GHOST, MoveCategory.PHYSICAL, 50, 100, 10, -1, 0, 9) - .partial() // Counter resets every wave instead of on arena reset - .attr(HitCountPowerAttr) + .edgeCase() // Counter incorrectly increases on confusion self-hits + .attr(RageFistPowerAttr) .punchingMove(), new AttackMove(Moves.ARMOR_CANNON, Type.FIRE, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 9) .attr(StatStageChangeAttr, [ Stat.DEF, Stat.SPDEF ], -1, true), @@ -10797,7 +11426,7 @@ export function initMoves() { }) .attr(AddBattlerTagAttr, BattlerTagType.DOUBLE_SHOCKED, true, false) .attr(RemoveTypeAttr, Type.ELECTRIC, (user) => { - user.scene.queueMessage(i18next.t("moveTriggers:usedUpAllElectricity", { pokemonName: getPokemonNameWithAffix(user) })); + globalScene.queueMessage(i18next.t("moveTriggers:usedUpAllElectricity", { pokemonName: getPokemonNameWithAffix(user) })); }), new AttackMove(Moves.GIGATON_HAMMER, Type.STEEL, MoveCategory.PHYSICAL, 160, 100, 5, -1, 0, 9) .makesContact(false) @@ -10850,12 +11479,11 @@ export function initMoves() { new ChargingAttackMove(Moves.ELECTRO_SHOT, Type.ELECTRIC, MoveCategory.SPECIAL, 130, 100, 10, 100, 0, 9) .chargeText(i18next.t("moveTriggers:absorbedElectricity", { pokemonName: "{USER}" })) .chargeAttr(StatStageChangeAttr, [ Stat.SPATK ], 1, true) - .chargeAttr(WeatherInstantChargeAttr, [ WeatherType.RAIN, WeatherType.HEAVY_RAIN ]) - .ignoresVirtual(), + .chargeAttr(WeatherInstantChargeAttr, [ WeatherType.RAIN, WeatherType.HEAVY_RAIN ]), new AttackMove(Moves.TERA_STARSTORM, Type.NORMAL, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 9) .attr(TeraMoveCategoryAttr) .attr(TeraStarstormTypeAttr) - .attr(VariableTargetAttr, (user, target, move) => (user.hasFusionSpecies(Species.TERAPAGOS) || user.species.speciesId === Species.TERAPAGOS) && user.isTerastallized() ? MoveTarget.ALL_NEAR_ENEMIES : MoveTarget.NEAR_OTHER) + .attr(VariableTargetAttr, (user, target, move) => user.hasSpecies(Species.TERAPAGOS) && user.isTerastallized ? MoveTarget.ALL_NEAR_ENEMIES : MoveTarget.NEAR_OTHER) .partial(), /** Does not ignore abilities that affect stats, relevant in determining the move's category {@see TeraMoveCategoryAttr} */ new AttackMove(Moves.FICKLE_BEAM, Type.DRAGON, MoveCategory.SPECIAL, 80, 100, 5, 30, 0, 9) .attr(PreMoveMessageAttr, doublePowerChanceMessageFunc) @@ -10864,7 +11492,7 @@ export function initMoves() { .attr(ProtectAttr, BattlerTagType.BURNING_BULWARK) .condition(failIfLastCondition), new AttackMove(Moves.THUNDERCLAP, Type.ELECTRIC, MoveCategory.SPECIAL, 70, 100, 5, -1, 1, 9) - .condition((user, target, move) => user.scene.currentBattle.turnCommands[target.getBattlerIndex()]?.command === Command.FIGHT && !target.turnData.acted && allMoves[user.scene.currentBattle.turnCommands[target.getBattlerIndex()]?.move?.move!].category !== MoveCategory.STATUS), // TODO: is this bang correct? + .condition((user, target, move) => globalScene.currentBattle.turnCommands[target.getBattlerIndex()]?.command === Command.FIGHT && !target.turnData.acted && allMoves[globalScene.currentBattle.turnCommands[target.getBattlerIndex()]?.move?.move!].category !== MoveCategory.STATUS), // TODO: is this bang correct? new AttackMove(Moves.MIGHTY_CLEAVE, Type.ROCK, MoveCategory.PHYSICAL, 95, 100, 5, -1, 0, 9) .slicingMove() .ignoresProtect(), 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 f0155b4f2a4..407644ee939 100644 --- a/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts +++ b/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts @@ -1,15 +1,17 @@ -import { EnemyPartyConfig, initBattleWithEnemyConfig, leaveEncounterWithoutBattle, setEncounterRewards, transitionMysteryEncounterIntroVisuals, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import { globalScene } from "#app/global-scene"; +import type { EnemyPartyConfig } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import { initBattleWithEnemyConfig, leaveEncounterWithoutBattle, setEncounterRewards, transitionMysteryEncounterIntroVisuals, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { trainerConfigs, } from "#app/data/trainer-config"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import BattleScene from "#app/battle-scene"; -import MysteryEncounter, { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; +import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { TrainerType } from "#enums/trainer-type"; import { Species } from "#enums/species"; import { getSpriteKeysFromSpecies } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import { randSeedInt } from "#app/utils"; import i18next from "i18next"; -import { IEggOptions } from "#app/data/egg"; +import type { IEggOptions } from "#app/data/egg"; import { EggSourceType } from "#enums/egg-source-types"; import { EggTier } from "#enums/egg-type"; import { PartyHealPhase } from "#app/phases/party-heal-phase"; @@ -36,8 +38,8 @@ export const ATrainersTestEncounter: MysteryEncounter = }, ]) .withAutoHideIntroVisuals(false) - .withOnInit((scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOnInit(() => { + const encounter = globalScene.currentBattle.mysteryEncounter!; // Randomly pick from 1 of the 5 stat trainers to spawn let trainerType: TrainerType; @@ -138,23 +140,22 @@ export const ATrainersTestEncounter: MysteryEncounter = buttonLabel: `${namespace}:option.1.label`, buttonTooltip: `${namespace}:option.1.tooltip` }, - async (scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + async () => { + const encounter = globalScene.currentBattle.mysteryEncounter!; // Battle the stat trainer for an Egg and great rewards const config: EnemyPartyConfig = encounter.enemyPartyConfigs[0]; - await transitionMysteryEncounterIntroVisuals(scene); + await transitionMysteryEncounterIntroVisuals(); const eggOptions: IEggOptions = { - scene, pulled: false, sourceType: EggSourceType.EVENT, eggDescriptor: encounter.misc.trainerEggDescription, tier: EggTier.EPIC }; encounter.setDialogueToken("eggType", i18next.t(`${namespace}:eggTypes.epic`)); - setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [ modifierTypes.SACRED_ASH ], guaranteedModifierTiers: [ ModifierTier.ROGUE, ModifierTier.ULTRA ], fillRemaining: true }, [ eggOptions ]); - await initBattleWithEnemyConfig(scene, config); + setEncounterRewards({ guaranteedModifierTypeFuncs: [ modifierTypes.SACRED_ASH ], guaranteedModifierTiers: [ ModifierTier.ROGUE, ModifierTier.ULTRA ], fillRemaining: true }, [ eggOptions ]); + await initBattleWithEnemyConfig(config); } ) .withSimpleOption( @@ -162,21 +163,20 @@ export const ATrainersTestEncounter: MysteryEncounter = buttonLabel: `${namespace}:option.2.label`, buttonTooltip: `${namespace}:option.2.tooltip` }, - async (scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + async () => { + const encounter = globalScene.currentBattle.mysteryEncounter!; // Full heal party - scene.unshiftPhase(new PartyHealPhase(scene, true)); + globalScene.unshiftPhase(new PartyHealPhase(true)); const eggOptions: IEggOptions = { - scene, pulled: false, sourceType: EggSourceType.EVENT, eggDescriptor: encounter.misc.trainerEggDescription, tier: EggTier.RARE }; encounter.setDialogueToken("eggType", i18next.t(`${namespace}:eggTypes.rare`)); - setEncounterRewards(scene, { fillRemaining: false, rerollMultiplier: -1 }, [ eggOptions ]); - leaveEncounterWithoutBattle(scene); + setEncounterRewards({ fillRemaining: false, rerollMultiplier: -1 }, [ eggOptions ]); + leaveEncounterWithoutBattle(); } ) .withOutroDialogue([ diff --git a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts index 6b0f239d28d..1499d953941 100644 --- a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts +++ b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts @@ -1,10 +1,14 @@ -import { EnemyPartyConfig, generateModifierType, initBattleWithEnemyConfig, leaveEncounterWithoutBattle, setEncounterRewards, transitionMysteryEncounterIntroVisuals, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import Pokemon, { EnemyPokemon, PokemonMove } from "#app/field/pokemon"; -import { BerryModifierType, modifierTypes, PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; +import type { EnemyPartyConfig } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import { generateModifierType, initBattleWithEnemyConfig, leaveEncounterWithoutBattle, setEncounterRewards, transitionMysteryEncounterIntroVisuals, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import type Pokemon from "#app/field/pokemon"; +import { EnemyPokemon, PokemonMove } from "#app/field/pokemon"; +import type { BerryModifierType, PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/modifier/modifier-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { Species } from "#enums/species"; -import BattleScene from "#app/battle-scene"; -import MysteryEncounter, { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; +import { globalScene } from "#app/global-scene"; +import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; import { PersistentModifierRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements"; import { queueEncounterMessage } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; @@ -19,8 +23,8 @@ import { BattlerIndex } from "#app/battle"; import { applyModifierTypeToPlayerPokemon, catchPokemon, getHighestLevelPlayerPokemon } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import { TrainerSlot } from "#app/data/trainer-config"; import { PokeballType } from "#enums/pokeball"; -import HeldModifierConfig from "#app/interfaces/held-modifier-config"; -import { BerryType } from "#enums/berry-type"; +import type HeldModifierConfig from "#app/interfaces/held-modifier-config"; +import type { BerryType } from "#enums/berry-type"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { Stat } from "#enums/stat"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; @@ -170,18 +174,18 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) - .withOnInit((scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOnInit(() => { + const encounter = globalScene.currentBattle.mysteryEncounter!; - scene.loadSe("PRSFX- Bug Bite", "battle_anims", "PRSFX- Bug Bite.wav"); - scene.loadSe("Follow Me", "battle_anims", "Follow Me.mp3"); + globalScene.loadSe("PRSFX- Bug Bite", "battle_anims", "PRSFX- Bug Bite.wav"); + globalScene.loadSe("Follow Me", "battle_anims", "Follow Me.mp3"); // Get all player berry items, remove from party, and store reference - const berryItems = scene.findModifiers(m => m instanceof BerryModifier) as BerryModifier[]; + const berryItems = globalScene.findModifiers(m => m instanceof BerryModifier) as BerryModifier[]; // Sort berries by party member ID to more easily re-add later if necessary const berryItemsMap = new Map(); - scene.getPlayerParty().forEach(pokemon => { + globalScene.getPlayerParty().forEach(pokemon => { const pokemonBerries = berryItems.filter(b => b.pokemonId === pokemon.id); if (pokemonBerries?.length > 0) { berryItemsMap.set(pokemon.id, pokemonBerries); @@ -196,7 +200,7 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = // Can't define stack count on a ModifierType, have to just create separate instances for each stack // Overflow berries will be "lost" on the boss, but it's un-catchable anyway for (let i = 0; i < berryMod.stackCount; i++) { - const modifierType = generateModifierType(scene, modifierTypes.BERRY, [ berryMod.berryType ]) as PokemonHeldItemModifierType; + const modifierType = generateModifierType(modifierTypes.BERRY, [ berryMod.berryType ]) as PokemonHeldItemModifierType; bossModifierConfigs.push({ modifier: modifierType }); } }); @@ -204,7 +208,7 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = // Do NOT remove the real berries yet or else it will be persisted in the session data // SpDef buff below wave 50, +1 to all stats otherwise - const statChangesForBattle: (Stat.ATK | Stat.DEF | Stat.SPATK | Stat.SPDEF | Stat.SPD | Stat.ACC | Stat.EVA)[] = scene.currentBattle.waveIndex < 50 ? + const statChangesForBattle: (Stat.ATK | Stat.DEF | Stat.SPATK | Stat.SPDEF | Stat.SPD | Stat.ACC | Stat.EVA)[] = globalScene.currentBattle.waveIndex < 50 ? [ Stat.SPDEF ] : [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ]; @@ -221,8 +225,8 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = modifierConfigs: bossModifierConfigs, tags: [ BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON ], mysteryEncounterBattleEffects: (pokemon: Pokemon) => { - queueEncounterMessage(pokemon.scene, `${namespace}:option.1.boss_enraged`); - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, statChangesForBattle, 1)); + queueEncounterMessage(`${namespace}:option.1.boss_enraged`); + globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, statChangesForBattle, 1)); } } ], @@ -233,18 +237,18 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = return true; }) - .withOnVisualsStart((scene: BattleScene) => { - doGreedentSpriteSteal(scene); - doBerrySpritePile(scene); + .withOnVisualsStart(() => { + doGreedentSpriteSteal(); + doBerrySpritePile(); // Remove the berries from the party // Session has been safely saved at this point, so data won't be lost - const berryItems = scene.findModifiers(m => m instanceof BerryModifier) as BerryModifier[]; + const berryItems = globalScene.findModifiers(m => m instanceof BerryModifier) as BerryModifier[]; berryItems.forEach(berryMod => { - scene.removeModifier(berryMod); + globalScene.removeModifier(berryMod); }); - scene.updateModifiers(true); + globalScene.updateModifiers(true); return true; }) @@ -260,26 +264,26 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = }, ], }) - .withOptionPhase(async (scene: BattleScene) => { + .withOptionPhase(async () => { // Pick battle - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; // Provides 1x Reviver Seed to each party member at end of battle - const revSeed = generateModifierType(scene, modifierTypes.REVIVER_SEED); + const revSeed = generateModifierType(modifierTypes.REVIVER_SEED); encounter.setDialogueToken("foodReward", revSeed?.name ?? i18next.t("modifierType:ModifierType.REVIVER_SEED.name")); const givePartyPokemonReviverSeeds = () => { - const party = scene.getPlayerParty(); + const party = globalScene.getPlayerParty(); party.forEach(p => { const heldItems = p.getHeldItems(); if (revSeed && !heldItems.some(item => item instanceof PokemonInstantReviveModifier)) { const seedModifier = revSeed.newModifier(p); - scene.addModifier(seedModifier, false, false, false, true); + globalScene.addModifier(seedModifier, false, false, false, true); } }); - queueEncounterMessage(scene, `${namespace}:option.1.food_stash`); + queueEncounterMessage(`${namespace}:option.1.food_stash`); }; - setEncounterRewards(scene, { fillRemaining: true }, undefined, givePartyPokemonReviverSeeds); + setEncounterRewards({ fillRemaining: true }, undefined, givePartyPokemonReviverSeeds); encounter.startOfBattleEffects.push({ sourceBattlerIndex: BattlerIndex.ENEMY, targets: [ BattlerIndex.ENEMY ], @@ -287,8 +291,8 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = ignorePp: true }); - await transitionMysteryEncounterIntroVisuals(scene, true, true, 500); - await initBattleWithEnemyConfig(scene, encounter.enemyPartyConfigs[0]); + await transitionMysteryEncounterIntroVisuals(true, true, 500); + await initBattleWithEnemyConfig(encounter.enemyPartyConfigs[0]); }) .build() ) @@ -304,12 +308,12 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = }, ], }) - .withOptionPhase(async (scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOptionPhase(async () => { + const encounter = globalScene.currentBattle.mysteryEncounter!; const berryMap = encounter.misc.berryItemsMap; // Returns 2/5 of the berries stolen to each Pokemon - const party = scene.getPlayerParty(); + const party = globalScene.getPlayerParty(); party.forEach(pokemon => { const stolenBerries: BerryModifier[] = berryMap.get(pokemon.id); const berryTypesAsArray: BerryType[] = []; @@ -322,15 +326,15 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = Phaser.Math.RND.shuffle(berryTypesAsArray); const randBerryType = berryTypesAsArray.pop(); - const berryModType = generateModifierType(scene, modifierTypes.BERRY, [ randBerryType ]) as BerryModifierType; - applyModifierTypeToPlayerPokemon(scene, pokemon, berryModType); + const berryModType = generateModifierType(modifierTypes.BERRY, [ randBerryType ]) as BerryModifierType; + applyModifierTypeToPlayerPokemon(pokemon, berryModType); } } }); - await scene.updateModifiers(true); + await globalScene.updateModifiers(true); - await transitionMysteryEncounterIntroVisuals(scene, true, true, 500); - leaveEncounterWithoutBattle(scene, true); + await transitionMysteryEncounterIntroVisuals(true, true, 500); + leaveEncounterWithoutBattle(true); }) .build() ) @@ -346,36 +350,36 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = }, ], }) - .withPreOptionPhase(async (scene: BattleScene) => { + .withPreOptionPhase(async () => { // Animate berries being eaten - doGreedentEatBerries(scene); - doBerrySpritePile(scene, true); + doGreedentEatBerries(); + doBerrySpritePile(true); return true; }) - .withOptionPhase(async (scene: BattleScene) => { + .withOptionPhase(async () => { // Let it have the food // Greedent joins the team, level equal to 2 below highest party member (shiny locked) - const level = getHighestLevelPlayerPokemon(scene, false, true).level - 2; - const greedent = new EnemyPokemon(scene, getPokemonSpecies(Species.GREEDENT), level, TrainerSlot.NONE, false, true); + const level = getHighestLevelPlayerPokemon(false, true).level - 2; + const greedent = new EnemyPokemon(getPokemonSpecies(Species.GREEDENT), level, TrainerSlot.NONE, false, true); greedent.moveset = [ new PokemonMove(Moves.THRASH), new PokemonMove(Moves.BODY_PRESS), new PokemonMove(Moves.STUFF_CHEEKS), new PokemonMove(Moves.SLACK_OFF) ]; greedent.passive = true; - await transitionMysteryEncounterIntroVisuals(scene, true, true, 500); - await catchPokemon(scene, greedent, null, PokeballType.POKEBALL, false); - leaveEncounterWithoutBattle(scene, true); + await transitionMysteryEncounterIntroVisuals(true, true, 500); + await catchPokemon(greedent, null, PokeballType.POKEBALL, false); + leaveEncounterWithoutBattle(true); }) .build() ) .build(); -function doGreedentSpriteSteal(scene: BattleScene) { +function doGreedentSpriteSteal() { const shakeDelay = 50; const slideDelay = 500; - const greedentSprites = scene.currentBattle.mysteryEncounter!.introVisuals?.getSpriteAtIndex(1); + const greedentSprites = globalScene.currentBattle.mysteryEncounter!.introVisuals?.getSpriteAtIndex(1); - scene.playSound("battle_anims/Follow Me"); - scene.tweens.chain({ + globalScene.playSound("battle_anims/Follow Me"); + globalScene.tweens.chain({ targets: greedentSprites, tweens: [ { // Slide Greedent diagonally @@ -445,10 +449,10 @@ function doGreedentSpriteSteal(scene: BattleScene) { }); } -function doGreedentEatBerries(scene: BattleScene) { - const greedentSprites = scene.currentBattle.mysteryEncounter!.introVisuals?.getSpriteAtIndex(1); +function doGreedentEatBerries() { + const greedentSprites = globalScene.currentBattle.mysteryEncounter!.introVisuals?.getSpriteAtIndex(1); let index = 1; - scene.tweens.add({ + globalScene.tweens.add({ targets: greedentSprites, duration: 150, ease: "Cubic.easeOut", @@ -456,11 +460,11 @@ function doGreedentEatBerries(scene: BattleScene) { y: "-=8", loop: 5, onStart: () => { - scene.playSound("battle_anims/PRSFX- Bug Bite"); + globalScene.playSound("battle_anims/PRSFX- Bug Bite"); }, onLoop: () => { if (index % 2 === 0) { - scene.playSound("battle_anims/PRSFX- Bug Bite"); + globalScene.playSound("battle_anims/PRSFX- Bug Bite"); } index++; } @@ -468,17 +472,15 @@ function doGreedentEatBerries(scene: BattleScene) { } /** - * - * @param scene * @param isEat Default false. Will "create" pile when false, and remove pile when true. */ -function doBerrySpritePile(scene: BattleScene, isEat: boolean = false) { +function doBerrySpritePile(isEat: boolean = false) { const berryAddDelay = 150; let animationOrder = [ "starf", "sitrus", "lansat", "salac", "apicot", "enigma", "liechi", "ganlon", "lum", "petaya", "leppa" ]; if (isEat) { animationOrder = animationOrder.reverse(); } - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; animationOrder.forEach((berry, i) => { const introVisualsIndex = encounter.spriteConfigs.findIndex(config => config.spriteKey?.includes(berry)); let sprite: Phaser.GameObjects.Sprite, tintSprite: Phaser.GameObjects.Sprite; @@ -487,7 +489,7 @@ function doBerrySpritePile(scene: BattleScene, isEat: boolean = false) { sprite = sprites[0]; tintSprite = sprites[1]; } - scene.time.delayedCall(berryAddDelay * i + 400, () => { + globalScene.time.delayedCall(berryAddDelay * i + 400, () => { if (sprite) { sprite.setVisible(!isEat); } @@ -497,20 +499,20 @@ function doBerrySpritePile(scene: BattleScene, isEat: boolean = false) { // Animate Petaya berry falling off the pile if (berry === "petaya" && sprite && tintSprite && !isEat) { - scene.time.delayedCall(200, () => { - doBerryBounce(scene, [ sprite, tintSprite ], 30, 500); + globalScene.time.delayedCall(200, () => { + doBerryBounce([ sprite, tintSprite ], 30, 500); }); } }); }); } -function doBerryBounce(scene: BattleScene, berrySprites: Phaser.GameObjects.Sprite[], yd: number, baseBounceDuration: number) { +function doBerryBounce(berrySprites: Phaser.GameObjects.Sprite[], yd: number, baseBounceDuration: number) { let bouncePower = 1; let bounceYOffset = yd; const doBounce = () => { - scene.tweens.add({ + globalScene.tweens.add({ targets: berrySprites, y: "+=" + bounceYOffset, x: { value: "+=" + (bouncePower * bouncePower * 10), ease: "Linear" }, @@ -522,7 +524,7 @@ function doBerryBounce(scene: BattleScene, berrySprites: Phaser.GameObjects.Spri if (bouncePower) { bounceYOffset = bounceYOffset * bouncePower; - scene.tweens.add({ + globalScene.tweens.add({ targets: berrySprites, y: "-=" + bounceYOffset, x: { value: "+=" + (bouncePower * bouncePower * 10), ease: "Linear" }, diff --git a/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts b/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts index 1e20b73e351..671eb3d3ab8 100644 --- a/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts +++ b/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts @@ -2,8 +2,9 @@ import { generateModifierType, leaveEncounterWithoutBattle, setEncounterExp, upd import { modifierTypes } from "#app/modifier/modifier-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { Species } from "#enums/species"; -import BattleScene from "#app/battle-scene"; -import MysteryEncounter, { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; +import { globalScene } from "#app/global-scene"; +import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; import { AbilityRequirement, CombinationPokemonRequirement, MoveRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements"; import { getHighestStatTotalPlayerPokemon } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; @@ -69,14 +70,14 @@ export const AnOfferYouCantRefuseEncounter: MysteryEncounter = .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) - .withOnInit((scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; - const pokemon = getHighestStatTotalPlayerPokemon(scene, true, true); + .withOnInit(() => { + const encounter = globalScene.currentBattle.mysteryEncounter!; + const pokemon = getHighestStatTotalPlayerPokemon(true, true); const baseSpecies = pokemon.getSpeciesForm().getRootSpeciesId(); const starterValue: number = speciesStarterCosts[baseSpecies] ?? 1; const multiplier = Math.max(MONEY_MAXIMUM_MULTIPLIER / 10 * starterValue, MONEY_MINIMUM_MULTIPLIER); - const price = scene.getWaveMoneyAmount(multiplier); + const price = globalScene.getWaveMoneyAmount(multiplier); encounter.setDialogueToken("strongestPokemon", pokemon.getNameToRender()); encounter.setDialogueToken("price", price.toString()); @@ -89,7 +90,7 @@ export const AnOfferYouCantRefuseEncounter: MysteryEncounter = // If player meets the combo OR requirements for option 2, populate the token const opt2Req = encounter.options[1].primaryPokemonRequirements[0]; - if (opt2Req.meetsRequirement(scene)) { + if (opt2Req.meetsRequirement()) { const abilityToken = encounter.dialogueTokens["option2PrimaryAbility"]; const moveToken = encounter.dialogueTokens["option2PrimaryMove"]; if (abilityToken) { @@ -99,7 +100,7 @@ export const AnOfferYouCantRefuseEncounter: MysteryEncounter = } } - const shinyCharm = generateModifierType(scene, modifierTypes.SHINY_CHARM); + const shinyCharm = generateModifierType(modifierTypes.SHINY_CHARM); encounter.setDialogueToken("itemName", shinyCharm?.name ?? i18next.t("modifierType:ModifierType.SHINY_CHARM.name")); encounter.setDialogueToken("liepardName", getPokemonSpecies(Species.LIEPARD).getName()); @@ -118,17 +119,17 @@ export const AnOfferYouCantRefuseEncounter: MysteryEncounter = }, ], }) - .withPreOptionPhase(async (scene: BattleScene): Promise => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withPreOptionPhase(async (): Promise => { + const encounter = globalScene.currentBattle.mysteryEncounter!; // Update money and remove pokemon from party - updatePlayerMoney(scene, encounter.misc.price); - scene.removePokemonFromPlayerParty(encounter.misc.pokemon); + updatePlayerMoney(encounter.misc.price); + globalScene.removePokemonFromPlayerParty(encounter.misc.pokemon); return true; }) - .withOptionPhase(async (scene: BattleScene) => { + .withOptionPhase(async () => { // Give the player a Shiny Charm - scene.unshiftPhase(new ModifierRewardPhase(scene, modifierTypes.SHINY_CHARM)); - leaveEncounterWithoutBattle(scene, true); + globalScene.unshiftPhase(new ModifierRewardPhase(modifierTypes.SHINY_CHARM)); + leaveEncounterWithoutBattle(true); }) .build() ) @@ -152,15 +153,15 @@ export const AnOfferYouCantRefuseEncounter: MysteryEncounter = }, ], }) - .withOptionPhase(async (scene: BattleScene) => { + .withOptionPhase(async () => { // Extort the rich kid for money - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; // Update money and remove pokemon from party - updatePlayerMoney(scene, encounter.misc.price); + updatePlayerMoney(encounter.misc.price); - setEncounterExp(scene, encounter.options[1].primaryPokemon!.id, getPokemonSpecies(Species.LIEPARD).baseExp, true); + setEncounterExp(encounter.options[1].primaryPokemon!.id, getPokemonSpecies(Species.LIEPARD).baseExp, true); - leaveEncounterWithoutBattle(scene, true); + leaveEncounterWithoutBattle(true); }) .build() ) @@ -175,9 +176,9 @@ export const AnOfferYouCantRefuseEncounter: MysteryEncounter = }, ], }, - async (scene: BattleScene) => { + async () => { // Leave encounter with no rewards or exp - leaveEncounterWithoutBattle(scene, true); + leaveEncounterWithoutBattle(true); return true; } ) diff --git a/src/data/mystery-encounters/encounters/berries-abound-encounter.ts b/src/data/mystery-encounters/encounters/berries-abound-encounter.ts index 786ca3e8fc0..550d9bd4f13 100644 --- a/src/data/mystery-encounters/encounters/berries-abound-encounter.ts +++ b/src/data/mystery-encounters/encounters/berries-abound-encounter.ts @@ -1,28 +1,35 @@ import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; +import type { + EnemyPartyConfig } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { - EnemyPartyConfig, generateModifierType, generateModifierTypeOption, + generateModifierType, + generateModifierTypeOption, + getRandomEncounterSpecies, initBattleWithEnemyConfig, - leaveEncounterWithoutBattle, setEncounterExp, + leaveEncounterWithoutBattle, + setEncounterExp, setEncounterRewards } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import Pokemon, { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; -import { +import type { PlayerPokemon } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; +import type { BerryModifierType, - getPartyLuckValue, + ModifierTypeOption } from "#app/modifier/modifier-type"; +import { ModifierPoolType, - ModifierTypeOption, modifierTypes, + modifierTypes, regenerateModifierPoolThresholds, } from "#app/modifier/modifier-type"; import { randSeedInt } from "#app/utils"; import { BattlerTagType } from "#enums/battler-tag-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import BattleScene from "#app/battle-scene"; -import MysteryEncounter, { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; +import { globalScene } from "#app/global-scene"; +import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { queueEncounterMessage, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { getPokemonNameWithAffix } from "#app/messages"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; -import { TrainerSlot } from "#app/data/trainer-config"; import { applyModifierTypeToPlayerPokemon, getEncounterPokemonLevelForWave, getHighestStatPlayerPokemon, getSpriteKeysFromPokemon, STANDARD_ENCOUNTER_BOOSTED_LEVEL_MODIFIER } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import PokemonData from "#app/system/pokemon-data"; import { BerryModifier } from "#app/modifier/modifier"; @@ -53,18 +60,17 @@ export const BerriesAboundEncounter: MysteryEncounter = text: `${namespace}:intro`, }, ]) - .withOnInit((scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOnInit(() => { + const encounter = globalScene.currentBattle.mysteryEncounter!; // Calculate boss mon - const level = getEncounterPokemonLevelForWave(scene, STANDARD_ENCOUNTER_BOOSTED_LEVEL_MODIFIER); - const bossSpecies = scene.arena.randomSpecies(scene.currentBattle.waveIndex, level, 0, getPartyLuckValue(scene.getPlayerParty()), true); - const bossPokemon = new EnemyPokemon(scene, bossSpecies, level, TrainerSlot.NONE, true); + const level = getEncounterPokemonLevelForWave(STANDARD_ENCOUNTER_BOOSTED_LEVEL_MODIFIER); + const bossPokemon = getRandomEncounterSpecies(level, true); encounter.setDialogueToken("enemyPokemon", getPokemonNameWithAffix(bossPokemon)); const config: EnemyPartyConfig = { pokemonConfigs: [{ level: level, - species: bossSpecies, + species: bossPokemon.species, dataSource: new PokemonData(bossPokemon), isBoss: true }], @@ -74,10 +80,10 @@ export const BerriesAboundEncounter: MysteryEncounter = // Calculate the number of extra berries that player receives // 10-40: 2, 40-120: 4, 120-160: 5, 160-180: 7 const numBerries = - scene.currentBattle.waveIndex > 160 ? 7 - : scene.currentBattle.waveIndex > 120 ? 5 - : scene.currentBattle.waveIndex > 40 ? 4 : 2; - regenerateModifierPoolThresholds(scene.getPlayerParty(), ModifierPoolType.PLAYER, 0); + globalScene.currentBattle.waveIndex > 160 ? 7 + : globalScene.currentBattle.waveIndex > 120 ? 5 + : globalScene.currentBattle.waveIndex > 40 ? 4 : 2; + regenerateModifierPoolThresholds(globalScene.getPlayerParty(), ModifierPoolType.PLAYER, 0); encounter.misc = { numBerries }; const { spriteKey, fileRoot } = getSpriteKeysFromPokemon(bossPokemon); @@ -105,7 +111,7 @@ export const BerriesAboundEncounter: MysteryEncounter = ]; // Get fastest party pokemon for option 2 - const fastestPokemon = getHighestStatPlayerPokemon(scene, PERMANENT_STATS[Stat.SPD], true, false); + const fastestPokemon = getHighestStatPlayerPokemon(PERMANENT_STATS[Stat.SPD], true, false); encounter.misc.fastestPokemon = fastestPokemon; encounter.misc.enemySpeed = bossPokemon.getStat(Stat.SPD); encounter.setDialogueToken("fastestPokemon", fastestPokemon.getNameToRender()); @@ -126,34 +132,34 @@ export const BerriesAboundEncounter: MysteryEncounter = }, ], }, - async (scene: BattleScene) => { + async () => { // Pick battle - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; const numBerries = encounter.misc.numBerries; const doBerryRewards = () => { const berryText = i18next.t(`${namespace}:berries`); - scene.playSound("item_fanfare"); - queueEncounterMessage(scene, i18next.t("battle:rewardGainCount", { modifierName: berryText, count: numBerries })); + globalScene.playSound("item_fanfare"); + queueEncounterMessage(i18next.t("battle:rewardGainCount", { modifierName: berryText, count: numBerries })); // Generate a random berry and give it to the first Pokemon with room for it for (let i = 0; i < numBerries; i++) { - tryGiveBerry(scene); + tryGiveBerry(); } }; const shopOptions: ModifierTypeOption[] = []; for (let i = 0; i < 5; i++) { // Generate shop berries - const mod = generateModifierTypeOption(scene, modifierTypes.BERRY); + const mod = generateModifierTypeOption(modifierTypes.BERRY); if (mod) { shopOptions.push(mod); } } - setEncounterRewards(scene, { guaranteedModifierTypeOptions: shopOptions, fillRemaining: false }, undefined, doBerryRewards); - await initBattleWithEnemyConfig(scene, scene.currentBattle.mysteryEncounter!.enemyPartyConfigs[0]); + setEncounterRewards({ guaranteedModifierTypeOptions: shopOptions, fillRemaining: false }, undefined, doBerryRewards); + await initBattleWithEnemyConfig(globalScene.currentBattle.mysteryEncounter!.enemyPartyConfigs[0]); } ) .withOption( @@ -163,9 +169,9 @@ export const BerriesAboundEncounter: MysteryEncounter = buttonLabel: `${namespace}:option.2.label`, buttonTooltip: `${namespace}:option.2.tooltip` }) - .withOptionPhase(async (scene: BattleScene) => { + .withOptionPhase(async () => { // Pick race for berries - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; const fastestPokemon: PlayerPokemon = encounter.misc.fastestPokemon; const enemySpeed: number = encounter.misc.enemySpeed; const speedDiff = fastestPokemon.getStat(Stat.SPD) / (enemySpeed * 1.1); @@ -174,7 +180,7 @@ export const BerriesAboundEncounter: MysteryEncounter = const shopOptions: ModifierTypeOption[] = []; for (let i = 0; i < 5; i++) { // Generate shop berries - const mod = generateModifierTypeOption(scene, modifierTypes.BERRY); + const mod = generateModifierTypeOption(modifierTypes.BERRY); if (mod) { shopOptions.push(mod); } @@ -185,29 +191,29 @@ export const BerriesAboundEncounter: MysteryEncounter = const doBerryRewards = () => { const berryText = i18next.t(`${namespace}:berries`); - scene.playSound("item_fanfare"); - queueEncounterMessage(scene, i18next.t("battle:rewardGainCount", { modifierName: berryText, count: numBerries })); + globalScene.playSound("item_fanfare"); + queueEncounterMessage(i18next.t("battle:rewardGainCount", { modifierName: berryText, count: numBerries })); // Generate a random berry and give it to the first Pokemon with room for it for (let i = 0; i < numBerries; i++) { - tryGiveBerry(scene); + tryGiveBerry(); } }; // Defense/Spd buffs below wave 50, +1 to all stats otherwise - const statChangesForBattle: (Stat.ATK | Stat.DEF | Stat.SPATK | Stat.SPDEF | Stat.SPD | Stat.ACC | Stat.EVA)[] = scene.currentBattle.waveIndex < 50 ? + const statChangesForBattle: (Stat.ATK | Stat.DEF | Stat.SPATK | Stat.SPDEF | Stat.SPD | Stat.ACC | Stat.EVA)[] = globalScene.currentBattle.waveIndex < 50 ? [ Stat.DEF, Stat.SPDEF, Stat.SPD ] : [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ]; - const config = scene.currentBattle.mysteryEncounter!.enemyPartyConfigs[0]; + const config = globalScene.currentBattle.mysteryEncounter!.enemyPartyConfigs[0]; config.pokemonConfigs![0].tags = [ BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON ]; config.pokemonConfigs![0].mysteryEncounterBattleEffects = (pokemon: Pokemon) => { - queueEncounterMessage(pokemon.scene, `${namespace}:option.2.boss_enraged`); - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, statChangesForBattle, 1)); + queueEncounterMessage(`${namespace}:option.2.boss_enraged`); + globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, statChangesForBattle, 1)); }; - setEncounterRewards(scene, { guaranteedModifierTypeOptions: shopOptions, fillRemaining: false }, undefined, doBerryRewards); - await showEncounterText(scene, `${namespace}:option.2.selected_bad`); - await initBattleWithEnemyConfig(scene, config); + setEncounterRewards({ guaranteedModifierTypeOptions: shopOptions, fillRemaining: false }, undefined, doBerryRewards); + await showEncounterText(`${namespace}:option.2.selected_bad`); + await initBattleWithEnemyConfig(config); return; } else { // Gains 1 berry for every 10% faster the player's pokemon is than the enemy, up to a max of numBerries, minimum of 2 @@ -216,19 +222,19 @@ export const BerriesAboundEncounter: MysteryEncounter = const doFasterBerryRewards = () => { const berryText = i18next.t(`${namespace}:berries`); - scene.playSound("item_fanfare"); - queueEncounterMessage(scene, i18next.t("battle:rewardGainCount", { modifierName: berryText, count: numBerriesGrabbed })); + globalScene.playSound("item_fanfare"); + queueEncounterMessage(i18next.t("battle:rewardGainCount", { modifierName: berryText, count: numBerriesGrabbed })); // Generate a random berry and give it to the first Pokemon with room for it (trying to give to fastest first) for (let i = 0; i < numBerriesGrabbed; i++) { - tryGiveBerry(scene, fastestPokemon); + tryGiveBerry(fastestPokemon); } }; - setEncounterExp(scene, fastestPokemon.id, encounter.enemyPartyConfigs[0].pokemonConfigs![0].species.baseExp); - setEncounterRewards(scene, { guaranteedModifierTypeOptions: shopOptions, fillRemaining: false }, undefined, doFasterBerryRewards); - await showEncounterText(scene, `${namespace}:option.2.selected`); - leaveEncounterWithoutBattle(scene); + setEncounterExp(fastestPokemon.id, encounter.enemyPartyConfigs[0].pokemonConfigs![0].species.baseExp); + setEncounterRewards({ guaranteedModifierTypeOptions: shopOptions, fillRemaining: false }, undefined, doFasterBerryRewards); + await showEncounterText(`${namespace}:option.2.selected`); + leaveEncounterWithoutBattle(); } }) .build() @@ -243,38 +249,38 @@ export const BerriesAboundEncounter: MysteryEncounter = }, ], }, - async (scene: BattleScene) => { + async () => { // Leave encounter with no rewards or exp - leaveEncounterWithoutBattle(scene, true); + leaveEncounterWithoutBattle(true); return true; } ) .build(); -function tryGiveBerry(scene: BattleScene, prioritizedPokemon?: PlayerPokemon) { +function tryGiveBerry(prioritizedPokemon?: PlayerPokemon) { const berryType = randSeedInt(Object.keys(BerryType).filter(s => !isNaN(Number(s))).length) as BerryType; - const berry = generateModifierType(scene, modifierTypes.BERRY, [ berryType ]) as BerryModifierType; + const berry = generateModifierType(modifierTypes.BERRY, [ berryType ]) as BerryModifierType; - const party = scene.getPlayerParty(); + const party = globalScene.getPlayerParty(); // Will try to apply to prioritized pokemon first, then do normal application method if it fails if (prioritizedPokemon) { - const heldBerriesOfType = scene.findModifier(m => m instanceof BerryModifier + const heldBerriesOfType = globalScene.findModifier(m => m instanceof BerryModifier && m.pokemonId === prioritizedPokemon.id && (m as BerryModifier).berryType === berryType, true) as BerryModifier; - if (!heldBerriesOfType || heldBerriesOfType.getStackCount() < heldBerriesOfType.getMaxStackCount(scene)) { - applyModifierTypeToPlayerPokemon(scene, prioritizedPokemon, berry); + if (!heldBerriesOfType || heldBerriesOfType.getStackCount() < heldBerriesOfType.getMaxStackCount()) { + applyModifierTypeToPlayerPokemon(prioritizedPokemon, berry); return; } } // Iterate over the party until berry was successfully given for (const pokemon of party) { - const heldBerriesOfType = scene.findModifier(m => m instanceof BerryModifier + const heldBerriesOfType = globalScene.findModifier(m => m instanceof BerryModifier && m.pokemonId === pokemon.id && (m as BerryModifier).berryType === berryType, true) as BerryModifier; - if (!heldBerriesOfType || heldBerriesOfType.getStackCount() < heldBerriesOfType.getMaxStackCount(scene)) { - applyModifierTypeToPlayerPokemon(scene, pokemon, berry); + if (!heldBerriesOfType || heldBerriesOfType.getStackCount() < heldBerriesOfType.getMaxStackCount()) { + applyModifierTypeToPlayerPokemon(pokemon, berry); return; } } 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 ecd6972902b..209cc7a7ec5 100644 --- a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts +++ b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts @@ -1,5 +1,7 @@ +import type { + EnemyPartyConfig } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { - EnemyPartyConfig, generateModifierType, + generateModifierType, generateModifierTypeOption, initBattleWithEnemyConfig, leaveEncounterWithoutBattle, @@ -17,17 +19,20 @@ import { } from "#app/data/trainer-config"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { PartyMemberStrength } from "#enums/party-member-strength"; -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { isNullOrUndefined, randSeedInt, randSeedShuffle } from "#app/utils"; -import MysteryEncounter, { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; +import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { TrainerType } from "#enums/trainer-type"; import { Species } from "#enums/species"; -import Pokemon, { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; +import type { PlayerPokemon } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; +import { PokemonMove } from "#app/field/pokemon"; import { getEncounterText, showEncounterDialogue } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { LearnMovePhase } from "#app/phases/learn-move-phase"; import { Moves } from "#enums/moves"; -import { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; +import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { @@ -37,14 +42,17 @@ import { TypeRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements"; import { Type } from "#enums/type"; -import { AttackTypeBoosterModifierType, ModifierTypeOption, modifierTypes } from "#app/modifier/modifier-type"; +import type { AttackTypeBoosterModifierType, ModifierTypeOption } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/modifier/modifier-type"; +import type { + PokemonHeldItemModifier +} from "#app/modifier/modifier"; import { AttackTypeBoosterModifier, BypassSpeedChanceModifier, ContactHeldItemTransferChanceModifier, GigantamaxAccessModifier, - MegaEvolutionAccessModifier, - PokemonHeldItemModifier + MegaEvolutionAccessModifier } from "#app/modifier/modifier"; import i18next from "i18next"; import MoveInfoOverlay from "#app/ui/move-info-overlay"; @@ -214,12 +222,12 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = text: `${namespace}:intro_dialogue`, }, ]) - .withOnInit((scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOnInit(() => { + const encounter = globalScene.currentBattle.mysteryEncounter!; // Calculates what trainers are available for battle in the encounter // Bug type superfan trainer config - const config = getTrainerConfigForWave(scene.currentBattle.waveIndex); + const config = getTrainerConfigForWave(globalScene.currentBattle.waveIndex); const spriteKey = config.getSpriteKey(); encounter.enemyPartyConfigs.push({ trainerConfig: config, @@ -227,7 +235,7 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = }); let beedrillKeys: { spriteKey: string, fileRoot: string }, butterfreeKeys: { spriteKey: string, fileRoot: string }; - if (scene.currentBattle.waveIndex < WAVE_LEVEL_BREAKPOINTS[3]) { + if (globalScene.currentBattle.waveIndex < WAVE_LEVEL_BREAKPOINTS[3]) { beedrillKeys = getSpriteKeysFromSpecies(Species.BEEDRILL, false); butterfreeKeys = getSpriteKeysFromSpecies(Species.BUTTERFREE, false); } else { @@ -270,9 +278,9 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = ]; const requiredItems = [ - generateModifierType(scene, modifierTypes.QUICK_CLAW), - generateModifierType(scene, modifierTypes.GRIP_CLAW), - generateModifierType(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [ Type.BUG ]), + generateModifierType(modifierTypes.QUICK_CLAW), + generateModifierType(modifierTypes.GRIP_CLAW), + generateModifierType(modifierTypes.ATTACK_TYPE_BOOSTER, [ Type.BUG ]), ]; const requiredItemString = requiredItems.map(m => m?.name ?? "unknown").join("/"); @@ -295,9 +303,9 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = }, ], }, - async (scene: BattleScene) => { + async () => { // Select battle the bug trainer - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; const config: EnemyPartyConfig = encounter.enemyPartyConfigs[0]; // Init the moves available for tutor @@ -313,9 +321,9 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = // Assigns callback that teaches move before continuing to rewards encounter.onRewards = doBugTypeMoveTutor; - setEncounterRewards(scene, { fillRemaining: true }); - await transitionMysteryEncounterIntroVisuals(scene, true, true); - await initBattleWithEnemyConfig(scene, config); + setEncounterRewards({ fillRemaining: true }); + await transitionMysteryEncounterIntroVisuals(true, true); + await initBattleWithEnemyConfig(config); } ) .withOption(MysteryEncounterOptionBuilder @@ -326,17 +334,17 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = buttonTooltip: `${namespace}:option.2.tooltip`, disabledButtonTooltip: `${namespace}:option.2.disabled_tooltip` }) - .withPreOptionPhase(async (scene: BattleScene) => { + .withPreOptionPhase(async () => { // Player shows off their bug types - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; // Player gets different rewards depending on the number of bug types they have - const numBugTypes = scene.getPlayerParty().filter(p => p.isOfType(Type.BUG, true)).length; + const numBugTypes = globalScene.getPlayerParty().filter(p => p.isOfType(Type.BUG, true)).length; const numBugTypesText = i18next.t(`${namespace}:numBugTypes`, { count: numBugTypes }); encounter.setDialogueToken("numBugTypes", numBugTypesText); if (numBugTypes < 2) { - setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [ modifierTypes.SUPER_LURE, modifierTypes.GREAT_BALL ], fillRemaining: false }); + setEncounterRewards({ guaranteedModifierTypeFuncs: [ modifierTypes.SUPER_LURE, modifierTypes.GREAT_BALL ], fillRemaining: false }); encounter.selectedOption!.dialogue!.selected = [ { speaker: `${namespace}:speaker`, @@ -344,7 +352,7 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = }, ]; } else if (numBugTypes < 4) { - setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [ modifierTypes.QUICK_CLAW, modifierTypes.MAX_LURE, modifierTypes.ULTRA_BALL ], fillRemaining: false }); + setEncounterRewards({ guaranteedModifierTypeFuncs: [ modifierTypes.QUICK_CLAW, modifierTypes.MAX_LURE, modifierTypes.ULTRA_BALL ], fillRemaining: false }); encounter.selectedOption!.dialogue!.selected = [ { speaker: `${namespace}:speaker`, @@ -352,7 +360,7 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = }, ]; } else if (numBugTypes < 6) { - setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [ modifierTypes.GRIP_CLAW, modifierTypes.MAX_LURE, modifierTypes.ROGUE_BALL ], fillRemaining: false }); + setEncounterRewards({ guaranteedModifierTypeFuncs: [ modifierTypes.GRIP_CLAW, modifierTypes.MAX_LURE, modifierTypes.ROGUE_BALL ], fillRemaining: false }); encounter.selectedOption!.dialogue!.selected = [ { speaker: `${namespace}:speaker`, @@ -362,28 +370,28 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = } else { // If the player has any evolution/form change items that are valid for their party, // spawn one of those items in addition to Dynamax Band, Mega Band, and Master Ball - const modifierOptions: ModifierTypeOption[] = [ generateModifierTypeOption(scene, modifierTypes.MASTER_BALL)! ]; + const modifierOptions: ModifierTypeOption[] = [ generateModifierTypeOption(modifierTypes.MASTER_BALL)! ]; const specialOptions: ModifierTypeOption[] = []; - if (!scene.findModifier(m => m instanceof MegaEvolutionAccessModifier)) { - modifierOptions.push(generateModifierTypeOption(scene, modifierTypes.MEGA_BRACELET)!); + if (!globalScene.findModifier(m => m instanceof MegaEvolutionAccessModifier)) { + modifierOptions.push(generateModifierTypeOption(modifierTypes.MEGA_BRACELET)!); } - if (!scene.findModifier(m => m instanceof GigantamaxAccessModifier)) { - modifierOptions.push(generateModifierTypeOption(scene, modifierTypes.DYNAMAX_BAND)!); + if (!globalScene.findModifier(m => m instanceof GigantamaxAccessModifier)) { + modifierOptions.push(generateModifierTypeOption(modifierTypes.DYNAMAX_BAND)!); } - const nonRareEvolutionModifier = generateModifierTypeOption(scene, modifierTypes.EVOLUTION_ITEM); + const nonRareEvolutionModifier = generateModifierTypeOption(modifierTypes.EVOLUTION_ITEM); if (nonRareEvolutionModifier) { specialOptions.push(nonRareEvolutionModifier); } - const rareEvolutionModifier = generateModifierTypeOption(scene, modifierTypes.RARE_EVOLUTION_ITEM); + const rareEvolutionModifier = generateModifierTypeOption(modifierTypes.RARE_EVOLUTION_ITEM); if (rareEvolutionModifier) { specialOptions.push(rareEvolutionModifier); } - const formChangeModifier = generateModifierTypeOption(scene, modifierTypes.FORM_CHANGE_ITEM); + const formChangeModifier = generateModifierTypeOption(modifierTypes.FORM_CHANGE_ITEM); if (formChangeModifier) { specialOptions.push(formChangeModifier); } - const rareFormChangeModifier = generateModifierTypeOption(scene, modifierTypes.RARE_FORM_CHANGE_ITEM); + const rareFormChangeModifier = generateModifierTypeOption(modifierTypes.RARE_FORM_CHANGE_ITEM); if (rareFormChangeModifier) { specialOptions.push(rareFormChangeModifier); } @@ -391,7 +399,7 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = modifierOptions.push(specialOptions[randSeedInt(specialOptions.length)]); } - setEncounterRewards(scene, { guaranteedModifierTypeOptions: modifierOptions, fillRemaining: false }); + setEncounterRewards({ guaranteedModifierTypeOptions: modifierOptions, fillRemaining: false }); encounter.selectedOption!.dialogue!.selected = [ { speaker: `${namespace}:speaker`, @@ -400,9 +408,9 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = ]; } }) - .withOptionPhase(async (scene: BattleScene) => { + .withOptionPhase(async () => { // Player shows off their bug types - leaveEncounterWithoutBattle(scene); + leaveEncounterWithoutBattle(); }) .build()) .withOption(MysteryEncounterOptionBuilder @@ -429,8 +437,8 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = ], secondOptionPrompt: `${namespace}:option.3.select_prompt`, }) - .withPreOptionPhase(async (scene: BattleScene): Promise => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withPreOptionPhase(async (): Promise => { + const encounter = globalScene.currentBattle.mysteryEncounter!; const onPokemonSelected = (pokemon: PlayerPokemon) => { // Get Pokemon held items and filter for valid ones @@ -466,27 +474,27 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = (item instanceof AttackTypeBoosterModifier && (item.type as AttackTypeBoosterModifierType).moveType === Type.BUG); }); if (!hasValidItem) { - return getEncounterText(scene, `${namespace}:option.3.invalid_selection`) ?? null; + return getEncounterText(`${namespace}:option.3.invalid_selection`) ?? null; } return null; }; - return selectPokemonForOption(scene, onPokemonSelected, undefined, selectableFilter); + return selectPokemonForOption(onPokemonSelected, undefined, selectableFilter); }) - .withOptionPhase(async (scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOptionPhase(async () => { + const encounter = globalScene.currentBattle.mysteryEncounter!; const modifier = encounter.misc.chosenModifier; const chosenPokemon: PlayerPokemon = encounter.misc.chosenPokemon; chosenPokemon.loseHeldItem(modifier, false); - scene.updateModifiers(true, true); + globalScene.updateModifiers(true, true); - const bugNet = generateModifierTypeOption(scene, modifierTypes.MYSTERY_ENCOUNTER_GOLDEN_BUG_NET)!; + const bugNet = generateModifierTypeOption(modifierTypes.MYSTERY_ENCOUNTER_GOLDEN_BUG_NET)!; bugNet.type.tier = ModifierTier.ROGUE; - setEncounterRewards(scene, { guaranteedModifierTypeOptions: [ bugNet ], guaranteedModifierTypeFuncs: [ modifierTypes.REVIVER_SEED ], fillRemaining: false }); - leaveEncounterWithoutBattle(scene, true); + setEncounterRewards({ guaranteedModifierTypeOptions: [ bugNet ], guaranteedModifierTypeFuncs: [ modifierTypes.REVIVER_SEED ], fillRemaining: false }); + leaveEncounterWithoutBattle(true); }) .build()) .withOutroDialogue([ @@ -642,22 +650,22 @@ function getTrainerConfigForWave(waveIndex: number) { return config; } -function doBugTypeMoveTutor(scene: BattleScene): Promise { +function doBugTypeMoveTutor(): Promise { return new Promise(async resolve => { - const moveOptions = scene.currentBattle.mysteryEncounter!.misc.moveTutorOptions; - await showEncounterDialogue(scene, `${namespace}:battle_won`, `${namespace}:speaker`); + const moveOptions = globalScene.currentBattle.mysteryEncounter!.misc.moveTutorOptions; + await showEncounterDialogue(`${namespace}:battle_won`, `${namespace}:speaker`); const overlayScale = 1; - const moveInfoOverlay = new MoveInfoOverlay(scene, { + const moveInfoOverlay = new MoveInfoOverlay({ delayVisibility: false, scale: overlayScale, onSide: true, right: true, x: 1, y: -MoveInfoOverlay.getHeight(overlayScale, true) - 1, - width: (scene.game.canvas.width / 6) - 2, + width: (globalScene.game.canvas.width / 6) - 2, }); - scene.ui.add(moveInfoOverlay); + globalScene.ui.add(moveInfoOverlay); const optionSelectItems = moveOptions.map((move: PokemonMove) => { const option: OptionSelectItem = { @@ -680,7 +688,7 @@ function doBugTypeMoveTutor(scene: BattleScene): Promise { moveInfoOverlay.setVisible(false); }; - const result = await selectOptionThenPokemon(scene, optionSelectItems, `${namespace}:teach_move_prompt`, undefined, onHoverOverCancel); + const result = await selectOptionThenPokemon(optionSelectItems, `${namespace}:teach_move_prompt`, undefined, onHoverOverCancel); // let forceExit = !!result; if (!result) { moveInfoOverlay.active = false; @@ -691,7 +699,7 @@ function doBugTypeMoveTutor(scene: BattleScene): Promise { // Option select complete, handle if they are learning a move if (result && result.selectedOptionIndex < moveOptions.length) { - scene.unshiftPhase(new LearnMovePhase(scene, result.selectedPokemonIndex, moveOptions[result.selectedOptionIndex].moveId)); + globalScene.unshiftPhase(new LearnMovePhase(result.selectedPokemonIndex, moveOptions[result.selectedOptionIndex].moveId)); } // Complete battle and go to rewards diff --git a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts index 6bd6856604b..e660b0b873c 100644 --- a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts +++ b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts @@ -1,11 +1,14 @@ -import { EnemyPartyConfig, generateModifierType, initBattleWithEnemyConfig, leaveEncounterWithoutBattle, loadCustomMovesForEncounter, selectPokemonForOption, setEncounterRewards, transitionMysteryEncounterIntroVisuals } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import type { EnemyPartyConfig } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import { generateModifierType, initBattleWithEnemyConfig, leaveEncounterWithoutBattle, loadCustomMovesForEncounter, selectPokemonForOption, setEncounterRewards, transitionMysteryEncounterIntroVisuals } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { trainerConfigs, TrainerPartyCompoundTemplate, TrainerPartyTemplate, } from "#app/data/trainer-config"; import { ModifierTier } from "#app/modifier/modifier-tier"; -import { ModifierPoolType, modifierTypes, PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; +import type { PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; +import { ModifierPoolType, modifierTypes } from "#app/modifier/modifier-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { PartyMemberStrength } from "#enums/party-member-strength"; -import BattleScene from "#app/battle-scene"; -import MysteryEncounter, { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; +import { globalScene } from "#app/global-scene"; +import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { Species } from "#enums/species"; import { TrainerType } from "#enums/trainer-type"; @@ -19,8 +22,9 @@ import { randSeedInt, randSeedShuffle } from "#app/utils"; import { showEncounterDialogue, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { Mode } from "#app/ui/ui"; import i18next from "i18next"; -import { OptionSelectConfig } from "#app/ui/abstact-option-select-ui-handler"; -import { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; +import type { OptionSelectConfig } from "#app/ui/abstact-option-select-ui-handler"; +import type { PlayerPokemon } from "#app/field/pokemon"; +import { PokemonMove } from "#app/field/pokemon"; import { Ability } from "#app/data/ability"; import { BerryModifier } from "#app/modifier/modifier"; import { BerryType } from "#enums/berry-type"; @@ -105,8 +109,8 @@ export const ClowningAroundEncounter: MysteryEncounter = speaker: `${namespace}:speaker` }, ]) - .withOnInit((scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOnInit(() => { + const encounter = globalScene.currentBattle.mysteryEncounter!; const clownTrainerType = TrainerType.HARLEQUIN; const clownConfig = trainerConfigs[clownTrainerType].clone(); @@ -123,6 +127,13 @@ export const ClowningAroundEncounter: MysteryEncounter = encounter.setDialogueToken("ability", new Ability(ability, 3).name); encounter.misc = { ability }; + // Decide the random types for Blacephalon. They should not be the same. + const firstType: number = randSeedInt(18); + let secondType: number = randSeedInt(17); + if ( secondType >= firstType ) { + secondType++; + } + encounter.enemyPartyConfigs.push({ trainerConfig: clownConfig, pokemonConfigs: [ // Overrides first 2 pokemon to be Mr. Mime and Blacephalon @@ -133,7 +144,7 @@ export const ClowningAroundEncounter: MysteryEncounter = }, { // Blacephalon has the random ability from pool, and 2 entirely random types to fit with the theme of the encounter species: getPokemonSpecies(Species.BLACEPHALON), - customPokemonData: new CustomPokemonData({ ability: ability, types: [ randSeedInt(18), randSeedInt(18) ]}), + customPokemonData: new CustomPokemonData({ ability: ability, types: [ firstType, secondType ]}), isBoss: true, moveSet: [ Moves.TRICK, Moves.HYPNOSIS, Moves.SHADOW_BALL, Moves.MIND_BLOWN ] }, @@ -142,7 +153,7 @@ export const ClowningAroundEncounter: MysteryEncounter = }); // Load animations/sfx for start of fight moves - loadCustomMovesForEncounter(scene, [ Moves.ROLE_PLAY, Moves.TAUNT ]); + loadCustomMovesForEncounter([ Moves.ROLE_PLAY, Moves.TAUNT ]); encounter.setDialogueToken("blacephalonName", getPokemonSpecies(Species.BLACEPHALON).getName()); @@ -165,12 +176,12 @@ export const ClowningAroundEncounter: MysteryEncounter = }, ], }) - .withOptionPhase(async (scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOptionPhase(async () => { + const encounter = globalScene.currentBattle.mysteryEncounter!; // Spawn battle const config: EnemyPartyConfig = encounter.enemyPartyConfigs[0]; - setEncounterRewards(scene, { fillRemaining: true }); + setEncounterRewards({ fillRemaining: true }); // TODO: when Magic Room and Wonder Room are implemented, add those to start of battle encounter.startOfBattleEffects.push( @@ -193,28 +204,28 @@ export const ClowningAroundEncounter: MysteryEncounter = ignorePp: true }); - await transitionMysteryEncounterIntroVisuals(scene); - await initBattleWithEnemyConfig(scene, config); + await transitionMysteryEncounterIntroVisuals(); + await initBattleWithEnemyConfig(config); }) - .withPostOptionPhase(async (scene: BattleScene): Promise => { + .withPostOptionPhase(async (): Promise => { // After the battle, offer the player the opportunity to permanently swap ability - const abilityWasSwapped = await handleSwapAbility(scene); + const abilityWasSwapped = await handleSwapAbility(); if (abilityWasSwapped) { - await showEncounterText(scene, `${namespace}:option.1.ability_gained`); + await showEncounterText(`${namespace}:option.1.ability_gained`); } // Play animations once ability swap is complete // Trainer sprite that is shown at end of battle is not the same as mystery encounter intro visuals - scene.tweens.add({ - targets: scene.currentBattle.trainer, + globalScene.tweens.add({ + targets: globalScene.currentBattle.trainer, x: "+=16", y: "-=16", alpha: 0, ease: "Sine.easeInOut", duration: 250 }); - const background = new EncounterBattleAnim(EncounterAnim.SMOKESCREEN, scene.getPlayerPokemon()!, scene.getPlayerPokemon()); - background.playWithoutTargets(scene, 230, 40, 2); + const background = new EncounterBattleAnim(EncounterAnim.SMOKESCREEN, globalScene.getPlayerPokemon()!, globalScene.getPlayerPokemon()); + background.playWithoutTargets(230, 40, 2); return true; }) .build() @@ -239,13 +250,13 @@ export const ClowningAroundEncounter: MysteryEncounter = }, ], }) - .withPreOptionPhase(async (scene: BattleScene) => { + .withPreOptionPhase(async () => { // Swap player's items on pokemon with the most items // Item comparisons look at whichever Pokemon has the greatest number of TRANSFERABLE, non-berry items // So Vitamins, form change items, etc. are not included - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; - const party = scene.getPlayerParty(); + const party = globalScene.getPlayerParty(); let mostHeldItemsPokemon = party[0]; let count = mostHeldItemsPokemon.getHeldItems() .filter(m => m.isTransferable && !(m instanceof BerryModifier)) @@ -270,10 +281,10 @@ export const ClowningAroundEncounter: MysteryEncounter = items.filter(m => m instanceof BerryModifier) .forEach(m => { numBerries += m.stackCount; - scene.removeModifier(m); + globalScene.removeModifier(m); }); - generateItemsOfTier(scene, mostHeldItemsPokemon, numBerries, "Berries"); + generateItemsOfTier(mostHeldItemsPokemon, numBerries, "Berries"); // Shuffle Transferable held items in the same tier (only shuffles Ultra and Rogue atm) // For the purpose of this ME, Soothe Bells and Lucky Eggs are counted as Ultra tier @@ -286,24 +297,24 @@ export const ClowningAroundEncounter: MysteryEncounter = const tier = type.tier ?? ModifierTier.ULTRA; if (type.id === "GOLDEN_EGG" || tier === ModifierTier.ROGUE) { numRogue += m.stackCount; - scene.removeModifier(m); + globalScene.removeModifier(m); } else if (type.id === "LUCKY_EGG" || type.id === "SOOTHE_BELL" || tier === ModifierTier.ULTRA) { numUltra += m.stackCount; - scene.removeModifier(m); + globalScene.removeModifier(m); } }); - generateItemsOfTier(scene, mostHeldItemsPokemon, numUltra, ModifierTier.ULTRA); - generateItemsOfTier(scene, mostHeldItemsPokemon, numRogue, ModifierTier.ROGUE); + generateItemsOfTier(mostHeldItemsPokemon, numUltra, ModifierTier.ULTRA); + generateItemsOfTier(mostHeldItemsPokemon, numRogue, ModifierTier.ROGUE); }) - .withOptionPhase(async (scene: BattleScene) => { - leaveEncounterWithoutBattle(scene, true); + .withOptionPhase(async () => { + leaveEncounterWithoutBattle(true); }) - .withPostOptionPhase(async (scene: BattleScene) => { + .withPostOptionPhase(async () => { // Play animations - const background = new EncounterBattleAnim(EncounterAnim.SMOKESCREEN, scene.getPlayerPokemon()!, scene.getPlayerPokemon()); - background.playWithoutTargets(scene, 230, 40, 2); - await transitionMysteryEncounterIntroVisuals(scene, true, true, 200); + const background = new EncounterBattleAnim(EncounterAnim.SMOKESCREEN, globalScene.getPlayerPokemon()!, globalScene.getPlayerPokemon()); + background.playWithoutTargets(230, 40, 2); + await transitionMysteryEncounterIntroVisuals(true, true, 200); }) .build() ) @@ -327,10 +338,10 @@ export const ClowningAroundEncounter: MysteryEncounter = }, ], }) - .withPreOptionPhase(async (scene: BattleScene) => { + .withPreOptionPhase(async () => { // Randomize the second type of all player's pokemon // If the pokemon does not normally have a second type, it will gain 1 - for (const pokemon of scene.getPlayerParty()) { + for (const pokemon of globalScene.getPlayerParty()) { const originalTypes = pokemon.getTypes(false, false, true); // If the Pokemon has non-status moves that don't match the Pokemon's type, prioritizes those as the new type @@ -343,7 +354,7 @@ export const ClowningAroundEncounter: MysteryEncounter = priorityTypes = randSeedShuffle(priorityTypes); } - const newTypes = [ originalTypes[0] ]; + const newTypes = [ Type.UNKNOWN ]; let secondType: Type | null = null; while (secondType === null || secondType === newTypes[0] || originalTypes.includes(secondType)) { if (priorityTypes.length > 0) { @@ -367,14 +378,14 @@ export const ClowningAroundEncounter: MysteryEncounter = } } }) - .withOptionPhase(async (scene: BattleScene) => { - leaveEncounterWithoutBattle(scene, true); + .withOptionPhase(async () => { + leaveEncounterWithoutBattle(true); }) - .withPostOptionPhase(async (scene: BattleScene) => { + .withPostOptionPhase(async () => { // Play animations - const background = new EncounterBattleAnim(EncounterAnim.SMOKESCREEN, scene.getPlayerPokemon()!, scene.getPlayerPokemon()); - background.playWithoutTargets(scene, 230, 40, 2); - await transitionMysteryEncounterIntroVisuals(scene, true, true, 200); + const background = new EncounterBattleAnim(EncounterAnim.SMOKESCREEN, globalScene.getPlayerPokemon()!, globalScene.getPlayerPokemon()); + background.playWithoutTargets(230, 40, 2); + await transitionMysteryEncounterIntroVisuals(true, true, 200); }) .build() ) @@ -385,24 +396,24 @@ export const ClowningAroundEncounter: MysteryEncounter = ]) .build(); -async function handleSwapAbility(scene: BattleScene) { +async function handleSwapAbility() { return new Promise(async resolve => { - await showEncounterDialogue(scene, `${namespace}:option.1.apply_ability_dialogue`, `${namespace}:speaker`); - await showEncounterText(scene, `${namespace}:option.1.apply_ability_message`); + await showEncounterDialogue(`${namespace}:option.1.apply_ability_dialogue`, `${namespace}:speaker`); + await showEncounterText(`${namespace}:option.1.apply_ability_message`); - scene.ui.setMode(Mode.MESSAGE).then(() => { - displayYesNoOptions(scene, resolve); + globalScene.ui.setMode(Mode.MESSAGE).then(() => { + displayYesNoOptions(resolve); }); }); } -function displayYesNoOptions(scene: BattleScene, resolve) { - showEncounterText(scene, `${namespace}:option.1.ability_prompt`, null, 500, false); +function displayYesNoOptions(resolve) { + showEncounterText(`${namespace}:option.1.ability_prompt`, null, 500, false); const fullOptions = [ { label: i18next.t("menu:yes"), handler: () => { - onYesAbilitySwap(scene, resolve); + onYesAbilitySwap(resolve); return true; } }, @@ -420,29 +431,29 @@ function displayYesNoOptions(scene: BattleScene, resolve) { maxOptions: 7, yOffset: 0 }; - scene.ui.setModeWithoutClear(Mode.OPTION_SELECT, config, null, true); + globalScene.ui.setModeWithoutClear(Mode.OPTION_SELECT, config, null, true); } -function onYesAbilitySwap(scene: BattleScene, resolve) { +function onYesAbilitySwap(resolve) { const onPokemonSelected = (pokemon: PlayerPokemon) => { // Do ability swap - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; applyAbilityOverrideToPokemon(pokemon, encounter.misc.ability); encounter.setDialogueToken("chosenPokemon", pokemon.getNameToRender()); - scene.ui.setMode(Mode.MESSAGE).then(() => resolve(true)); + globalScene.ui.setMode(Mode.MESSAGE).then(() => resolve(true)); }; const onPokemonNotSelected = () => { - scene.ui.setMode(Mode.MESSAGE).then(() => { - displayYesNoOptions(scene, resolve); + globalScene.ui.setMode(Mode.MESSAGE).then(() => { + displayYesNoOptions(resolve); }); }; - selectPokemonForOption(scene, onPokemonSelected, onPokemonNotSelected); + selectPokemonForOption(onPokemonSelected, onPokemonNotSelected); } -function generateItemsOfTier(scene: BattleScene, pokemon: PlayerPokemon, numItems: number, tier: ModifierTier | "Berries") { +function generateItemsOfTier(pokemon: PlayerPokemon, numItems: number, tier: ModifierTier | "Berries") { // These pools have to be defined at runtime so that modifierTypes exist // Pools have instances of the modifier type equal to the max stacks that modifier can be applied to any one pokemon // This is to prevent "over-generating" a random item of a certain type during item swaps @@ -495,11 +506,11 @@ function generateItemsOfTier(scene: BattleScene, pokemon: PlayerPokemon, numItem const newItemType = pool[randIndex]; let newMod: PokemonHeldItemModifierType; if (tier === "Berries") { - newMod = generateModifierType(scene, modifierTypes.BERRY, [ newItemType[0] ]) as PokemonHeldItemModifierType; + newMod = generateModifierType(modifierTypes.BERRY, [ newItemType[0] ]) as PokemonHeldItemModifierType; } else { - newMod = generateModifierType(scene, newItemType[0]) as PokemonHeldItemModifierType; + newMod = generateModifierType(newItemType[0]) as PokemonHeldItemModifierType; } - applyModifierTypeToPlayerPokemon(scene, pokemon, newMod); + applyModifierTypeToPlayerPokemon(pokemon, newMod); // Decrement max stacks and remove from pool if at max newItemType[1]--; if (newItemType[1] <= 0) { diff --git a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts index 841aadd7c36..88e5794e816 100644 --- a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts +++ b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts @@ -1,22 +1,26 @@ import { BattlerIndex } from "#app/battle"; -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { EncounterBattleAnim } from "#app/data/battle-anims"; -import MysteryEncounter, { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; +import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; import { MoveRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements"; import { DANCING_MOVES } from "#app/data/mystery-encounters/requirements/requirement-groups"; import { getEncounterText, queueEncounterMessage } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; -import { EnemyPartyConfig, initBattleWithEnemyConfig, leaveEncounterWithoutBattle, selectPokemonForOption, setEncounterRewards } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import type { EnemyPartyConfig } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import { initBattleWithEnemyConfig, leaveEncounterWithoutBattle, selectPokemonForOption, setEncounterRewards } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { catchPokemon, getEncounterPokemonLevelForWave, STANDARD_ENCOUNTER_BOOSTED_LEVEL_MODIFIER } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { TrainerSlot } from "#app/data/trainer-config"; -import Pokemon, { EnemyPokemon, PlayerPokemon, PokemonMove } from "#app/field/pokemon"; +import type { PlayerPokemon } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; +import { EnemyPokemon, PokemonMove } from "#app/field/pokemon"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; import { modifierTypes } from "#app/modifier/modifier-type"; import { LearnMovePhase } from "#app/phases/learn-move-phase"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import PokemonData from "#app/system/pokemon-data"; -import { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; +import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import { BattlerTagType } from "#enums/battler-tag-type"; import { Biome } from "#enums/biome"; import { EncounterAnim } from "#enums/encounter-anims"; @@ -91,10 +95,10 @@ export const DancingLessonsEncounter: MysteryEncounter = .withAutoHideIntroVisuals(false) .withCatchAllowed(true) .withFleeAllowed(false) - .withOnVisualsStart((scene: BattleScene) => { - const oricorio = scene.getEnemyPokemon()!; - const danceAnim = new EncounterBattleAnim(EncounterAnim.DANCE, oricorio, scene.getPlayerPokemon()!); - danceAnim.play(scene, false, () => { + .withOnVisualsStart(() => { + const oricorio = globalScene.getEnemyPokemon()!; + const danceAnim = new EncounterBattleAnim(EncounterAnim.DANCE, oricorio, globalScene.getPlayerPokemon()!); + danceAnim.play(false, () => { if (oricorio.shiny) { oricorio.sparkle(); } @@ -110,12 +114,12 @@ export const DancingLessonsEncounter: MysteryEncounter = .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) - .withOnInit((scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOnInit(() => { + const encounter = globalScene.currentBattle.mysteryEncounter!; const species = getPokemonSpecies(Species.ORICORIO); - const level = getEncounterPokemonLevelForWave(scene, STANDARD_ENCOUNTER_BOOSTED_LEVEL_MODIFIER); - const enemyPokemon = new EnemyPokemon(scene, species, level, TrainerSlot.NONE, false); + const level = getEncounterPokemonLevelForWave(STANDARD_ENCOUNTER_BOOSTED_LEVEL_MODIFIER); + const enemyPokemon = new EnemyPokemon(species, level, TrainerSlot.NONE, false); if (!enemyPokemon.moveset.some(m => m && m.getMove().id === Moves.REVELATION_DANCE)) { if (enemyPokemon.moveset.length < 4) { enemyPokemon.moveset.push(new PokemonMove(Moves.REVELATION_DANCE)); @@ -126,7 +130,7 @@ export const DancingLessonsEncounter: MysteryEncounter = // Set the form index based on the biome // Defaults to Baile style if somehow nothing matches - const currentBiome = scene.arena.biomeType; + const currentBiome = globalScene.arena.biomeType; if (BAILE_STYLE_BIOMES.includes(currentBiome)) { enemyPokemon.formIndex = 0; } else if (POM_POM_STYLE_BIOMES.includes(currentBiome)) { @@ -140,14 +144,14 @@ export const DancingLessonsEncounter: MysteryEncounter = } const oricorioData = new PokemonData(enemyPokemon); - const oricorio = scene.addEnemyPokemon(species, level, TrainerSlot.NONE, false, false, oricorioData); + const oricorio = globalScene.addEnemyPokemon(species, level, TrainerSlot.NONE, false, false, oricorioData); // Adds a real Pokemon sprite to the field (required for the animation) - scene.getEnemyParty().forEach(enemyPokemon => { - scene.field.remove(enemyPokemon, true); + globalScene.getEnemyParty().forEach(enemyPokemon => { + enemyPokemon.leaveField(true, true, true); }); - scene.currentBattle.enemyParty = [ oricorio ]; - scene.field.add(oricorio); + globalScene.currentBattle.enemyParty = [ oricorio ]; + globalScene.field.add(oricorio); // Spawns on offscreen field oricorio.x -= 300; encounter.loadAssets.push(oricorio.loadAssets()); @@ -160,8 +164,8 @@ export const DancingLessonsEncounter: MysteryEncounter = // Gets +1 to all stats except SPD on battle start tags: [ BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON ], mysteryEncounterBattleEffects: (pokemon: Pokemon) => { - queueEncounterMessage(pokemon.scene, `${namespace}:option.1.boss_enraged`); - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF ], 1)); + queueEncounterMessage(`${namespace}:option.1.boss_enraged`); + globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF ], 1)); } }], }; @@ -186,9 +190,9 @@ export const DancingLessonsEncounter: MysteryEncounter = }, ], }) - .withOptionPhase(async (scene: BattleScene) => { + .withOptionPhase(async () => { // Pick battle - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; encounter.startOfBattleEffects.push({ sourceBattlerIndex: BattlerIndex.ENEMY, @@ -197,9 +201,9 @@ export const DancingLessonsEncounter: MysteryEncounter = ignorePp: true }); - await hideOricorioPokemon(scene); - setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [ modifierTypes.BATON ], fillRemaining: true }); - await initBattleWithEnemyConfig(scene, encounter.enemyPartyConfigs[0]); + await hideOricorioPokemon(); + setEncounterRewards({ guaranteedModifierTypeFuncs: [ modifierTypes.BATON ], fillRemaining: true }); + await initBattleWithEnemyConfig(encounter.enemyPartyConfigs[0]); }) .build() ) @@ -215,25 +219,25 @@ export const DancingLessonsEncounter: MysteryEncounter = }, ], }) - .withPreOptionPhase(async (scene: BattleScene) => { + .withPreOptionPhase(async () => { // Learn its Dance - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; const onPokemonSelected = (pokemon: PlayerPokemon) => { encounter.setDialogueToken("selectedPokemon", pokemon.getNameToRender()); - scene.unshiftPhase(new LearnMovePhase(scene, scene.getPlayerParty().indexOf(pokemon), Moves.REVELATION_DANCE)); + globalScene.unshiftPhase(new LearnMovePhase(globalScene.getPlayerParty().indexOf(pokemon), Moves.REVELATION_DANCE)); // Play animation again to "learn" the dance - const danceAnim = new EncounterBattleAnim(EncounterAnim.DANCE, scene.getEnemyPokemon()!, scene.getPlayerPokemon()); - danceAnim.play(scene); + const danceAnim = new EncounterBattleAnim(EncounterAnim.DANCE, globalScene.getEnemyPokemon()!, globalScene.getPlayerPokemon()); + danceAnim.play(); }; - return selectPokemonForOption(scene, onPokemonSelected); + return selectPokemonForOption(onPokemonSelected); }) - .withOptionPhase(async (scene: BattleScene) => { + .withOptionPhase(async () => { // Learn its Dance - await hideOricorioPokemon(scene); - leaveEncounterWithoutBattle(scene, true); + await hideOricorioPokemon(); + leaveEncounterWithoutBattle(true); }) .build() ) @@ -252,9 +256,9 @@ export const DancingLessonsEncounter: MysteryEncounter = }, ], }) - .withPreOptionPhase(async (scene: BattleScene) => { + .withPreOptionPhase(async () => { // Open menu for selecting pokemon with a Dancing move - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; const onPokemonSelected = (pokemon: PlayerPokemon) => { // Return the options for nature selection return pokemon.moveset @@ -281,20 +285,20 @@ export const DancingLessonsEncounter: MysteryEncounter = if (!pokemon.isAllowedInBattle()) { return i18next.t("partyUiHandler:cantBeUsed", { pokemonName: pokemon.getNameToRender() }) ?? null; } - const meetsReqs = encounter.options[2].pokemonMeetsPrimaryRequirements(scene, pokemon); + const meetsReqs = encounter.options[2].pokemonMeetsPrimaryRequirements(pokemon); if (!meetsReqs) { - return getEncounterText(scene, `${namespace}:invalid_selection`) ?? null; + return getEncounterText(`${namespace}:invalid_selection`) ?? null; } return null; }; - return selectPokemonForOption(scene, onPokemonSelected, undefined, selectableFilter); + return selectPokemonForOption(onPokemonSelected, undefined, selectableFilter); }) - .withOptionPhase(async (scene: BattleScene) => { + .withOptionPhase(async () => { // Show the Oricorio a dance, and recruit it - const encounter = scene.currentBattle.mysteryEncounter!; - const oricorio = encounter.misc.oricorioData.toPokemon(scene); + const encounter = globalScene.currentBattle.mysteryEncounter!; + const oricorio = encounter.misc.oricorioData.toPokemon(); oricorio.passive = true; // Ensure the Oricorio's moveset gains the Dance move the player used @@ -307,18 +311,18 @@ export const DancingLessonsEncounter: MysteryEncounter = } } - await hideOricorioPokemon(scene); - await catchPokemon(scene, oricorio, null, PokeballType.POKEBALL, false); - leaveEncounterWithoutBattle(scene, true); + await hideOricorioPokemon(); + await catchPokemon(oricorio, null, PokeballType.POKEBALL, false); + leaveEncounterWithoutBattle(true); }) .build() ) .build(); -function hideOricorioPokemon(scene: BattleScene) { +function hideOricorioPokemon() { return new Promise(resolve => { - const oricorioSprite = scene.getEnemyParty()[0]; - scene.tweens.add({ + const oricorioSprite = globalScene.getEnemyParty()[0]; + globalScene.tweens.add({ targets: oricorioSprite, x: "+=16", y: "-=16", @@ -326,7 +330,7 @@ function hideOricorioPokemon(scene: BattleScene) { ease: "Sine.easeInOut", duration: 750, onComplete: () => { - scene.field.remove(oricorioSprite, true); + globalScene.field.remove(oricorioSprite, true); resolve(); } }); diff --git a/src/data/mystery-encounters/encounters/dark-deal-encounter.ts b/src/data/mystery-encounters/encounters/dark-deal-encounter.ts index 05d6501f256..3b6ab8b0c05 100644 --- a/src/data/mystery-encounters/encounters/dark-deal-encounter.ts +++ b/src/data/mystery-encounters/encounters/dark-deal-encounter.ts @@ -1,18 +1,21 @@ -import { Type } from "#enums/type"; +import type { Type } from "#enums/type"; import { isNullOrUndefined, randSeedInt } from "#app/utils"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { Species } from "#enums/species"; -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { modifierTypes } from "#app/modifier/modifier-type"; import { getPokemonSpecies } from "#app/data/pokemon-species"; -import MysteryEncounter, { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; +import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; -import { EnemyPartyConfig, EnemyPokemonConfig, initBattleWithEnemyConfig, leaveEncounterWithoutBattle, } from "../utils/encounter-phase-utils"; +import type { EnemyPartyConfig, EnemyPokemonConfig } from "../utils/encounter-phase-utils"; +import { initBattleWithEnemyConfig, leaveEncounterWithoutBattle, } from "../utils/encounter-phase-utils"; import { getRandomPlayerPokemon, getRandomSpeciesByStarterCost } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { ModifierRewardPhase } from "#app/phases/modifier-reward-phase"; -import { PokemonFormChangeItemModifier, PokemonHeldItemModifier } from "#app/modifier/modifier"; +import type { PokemonHeldItemModifier } from "#app/modifier/modifier"; +import { PokemonFormChangeItemModifier } from "#app/modifier/modifier"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; import { Challenges } from "#enums/challenges"; @@ -138,16 +141,16 @@ export const DarkDealEncounter: MysteryEncounter = }, ], }) - .withPreOptionPhase(async (scene: BattleScene) => { + .withPreOptionPhase(async () => { // Removes random pokemon (including fainted) from party and adds name to dialogue data tokens // Will never return last battle able mon and instead pick fainted/unable to battle - const removedPokemon = getRandomPlayerPokemon(scene, true, false, true); + const removedPokemon = getRandomPlayerPokemon(true, false, true); // Get all the pokemon's held items const modifiers = removedPokemon.getHeldItems().filter(m => !(m instanceof PokemonFormChangeItemModifier)); - scene.removePokemonFromPlayerParty(removedPokemon); + globalScene.removePokemonFromPlayerParty(removedPokemon); - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; encounter.setDialogueToken("pokeName", removedPokemon.getNameToRender()); // Store removed pokemon types @@ -156,16 +159,16 @@ export const DarkDealEncounter: MysteryEncounter = modifiers }; }) - .withOptionPhase(async (scene: BattleScene) => { + .withOptionPhase(async () => { // Give the player 5 Rogue Balls - const encounter = scene.currentBattle.mysteryEncounter!; - scene.unshiftPhase(new ModifierRewardPhase(scene, modifierTypes.ROGUE_BALL)); + const encounter = globalScene.currentBattle.mysteryEncounter!; + globalScene.unshiftPhase(new ModifierRewardPhase(modifierTypes.ROGUE_BALL)); // Start encounter with random legendary (7-10 starter strength) that has level additive // If this is a mono-type challenge, always ensure the required type is filtered for let bossTypes: Type[] = encounter.misc.removedTypes; - const singleTypeChallenges = scene.gameMode.challenges.filter(c => c.value && c.id === Challenges.SINGLE_TYPE); - if (scene.gameMode.isChallenge && singleTypeChallenges.length > 0) { + const singleTypeChallenges = globalScene.gameMode.challenges.filter(c => c.value && c.id === Challenges.SINGLE_TYPE); + if (globalScene.gameMode.isChallenge && singleTypeChallenges.length > 0) { bossTypes = singleTypeChallenges.map(c => (c.value - 1) as Type); } @@ -191,7 +194,7 @@ export const DarkDealEncounter: MysteryEncounter = const config: EnemyPartyConfig = { pokemonConfigs: [ pokemonConfig ], }; - await initBattleWithEnemyConfig(scene, config); + await initBattleWithEnemyConfig(config); }) .build() ) @@ -206,9 +209,9 @@ export const DarkDealEncounter: MysteryEncounter = }, ], }, - async (scene: BattleScene) => { + async () => { // Leave encounter with no rewards or exp - leaveEncounterWithoutBattle(scene, true); + leaveEncounterWithoutBattle(true); return true; } ) diff --git a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts index a3a97a01238..f382f130540 100644 --- a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts +++ b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts @@ -1,18 +1,23 @@ -import BattleScene from "#app/battle-scene"; -import MysteryEncounter, { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; +import { globalScene } from "#app/global-scene"; +import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; import { CombinationPokemonRequirement, HeldItemRequirement, MoneyRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements"; import { getEncounterText, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { generateModifierType, leaveEncounterWithoutBattle, selectPokemonForOption, updatePlayerMoney, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { applyModifierTypeToPlayerPokemon } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import { getPokemonSpecies } from "#app/data/pokemon-species"; -import Pokemon, { PlayerPokemon } from "#app/field/pokemon"; +import type { PlayerPokemon } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; -import { BerryModifier, HealingBoosterModifier, LevelIncrementBoosterModifier, MoneyMultiplierModifier, PokemonHeldItemModifier, PokemonInstantReviveModifier, PreserveBerryModifier } from "#app/modifier/modifier"; -import { modifierTypes, PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; +import type { PokemonHeldItemModifier, PokemonInstantReviveModifier } from "#app/modifier/modifier"; +import { BerryModifier, HealingBoosterModifier, LevelIncrementBoosterModifier, MoneyMultiplierModifier, PreserveBerryModifier } from "#app/modifier/modifier"; +import type { PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/modifier/modifier-type"; import { ModifierRewardPhase } from "#app/phases/modifier-reward-phase"; import i18next from "#app/plugins/i18n"; -import { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; +import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; +import { randSeedItem } from "#app/utils"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; @@ -35,6 +40,23 @@ const OPTION_3_DISALLOWED_MODIFIERS = [ const DELIBIRDY_MONEY_PRICE_MULTIPLIER = 2; +const doEventReward = () => { + const event_buff = globalScene.eventManager.getDelibirdyBuff(); + if (event_buff.length > 0) { + const candidates = event_buff.filter((c => { + const mtype = generateModifierType(modifierTypes[c]); + const existingCharm = globalScene.findModifier(m => m.type.id === mtype?.id); + return !(existingCharm && existingCharm.getStackCount() >= existingCharm.getMaxStackCount()); + })); + if (candidates.length > 0) { + globalScene.unshiftPhase(new ModifierRewardPhase(modifierTypes[randSeedItem(candidates)])); + } else { + // At max stacks, give a Voucher instead + globalScene.unshiftPhase(new ModifierRewardPhase(modifierTypes.VOUCHER)); + } + } +}; + /** * Delibird-y encounter. * @see {@link https://github.com/pagefaultgames/pokerogue/issues/3804 | GitHub Issue #3804} @@ -96,15 +118,15 @@ export const DelibirdyEncounter: MysteryEncounter = text: `${namespace}:outro`, } ]) - .withOnInit((scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOnInit(() => { + const encounter = globalScene.currentBattle.mysteryEncounter!; encounter.setDialogueToken("delibirdName", getPokemonSpecies(Species.DELIBIRD).getName()); - scene.loadBgm("mystery_encounter_delibirdy", "mystery_encounter_delibirdy.mp3"); + globalScene.loadBgm("mystery_encounter_delibirdy", "mystery_encounter_delibirdy.mp3"); return true; }) - .withOnVisualsStart((scene: BattleScene) => { - scene.fadeAndSwitchBgm("mystery_encounter_delibirdy"); + .withOnVisualsStart(() => { + globalScene.fadeAndSwitchBgm("mystery_encounter_delibirdy"); return true; }) .withOption( @@ -120,27 +142,29 @@ export const DelibirdyEncounter: MysteryEncounter = }, ], }) - .withPreOptionPhase(async (scene: BattleScene): Promise => { - const encounter = scene.currentBattle.mysteryEncounter!; - updatePlayerMoney(scene, -(encounter.options[0].requirements[0] as MoneyRequirement).requiredMoney, true, false); + .withPreOptionPhase(async (): Promise => { + const encounter = globalScene.currentBattle.mysteryEncounter!; + updatePlayerMoney(-(encounter.options[0].requirements[0] as MoneyRequirement).requiredMoney, true, false); return true; }) - .withOptionPhase(async (scene: BattleScene) => { + .withOptionPhase(async () => { // Give the player an Amulet Coin // Check if the player has max stacks of that item already - const existing = scene.findModifier(m => m instanceof MoneyMultiplierModifier) as MoneyMultiplierModifier; + const existing = globalScene.findModifier(m => m instanceof MoneyMultiplierModifier) as MoneyMultiplierModifier; - if (existing && existing.getStackCount() >= existing.getMaxStackCount(scene)) { + if (existing && existing.getStackCount() >= existing.getMaxStackCount()) { // At max stacks, give the first party pokemon a Shell Bell instead - const shellBell = generateModifierType(scene, modifierTypes.SHELL_BELL) as PokemonHeldItemModifierType; - await applyModifierTypeToPlayerPokemon(scene, scene.getPlayerPokemon()!, shellBell); - scene.playSound("item_fanfare"); - await showEncounterText(scene, i18next.t("battle:rewardGain", { modifierName: shellBell.name }), null, undefined, true); + const shellBell = generateModifierType(modifierTypes.SHELL_BELL) as PokemonHeldItemModifierType; + await applyModifierTypeToPlayerPokemon(globalScene.getPlayerPokemon()!, shellBell); + globalScene.playSound("item_fanfare"); + await showEncounterText(i18next.t("battle:rewardGain", { modifierName: shellBell.name }), null, undefined, true); + doEventReward(); } else { - scene.unshiftPhase(new ModifierRewardPhase(scene, modifierTypes.AMULET_COIN)); + globalScene.unshiftPhase(new ModifierRewardPhase(modifierTypes.AMULET_COIN)); + doEventReward(); } - leaveEncounterWithoutBattle(scene, true); + leaveEncounterWithoutBattle(true); }) .build() ) @@ -158,8 +182,8 @@ export const DelibirdyEncounter: MysteryEncounter = }, ], }) - .withPreOptionPhase(async (scene: BattleScene): Promise => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withPreOptionPhase(async (): Promise => { + const encounter = globalScene.currentBattle.mysteryEncounter!; const onPokemonSelected = (pokemon: PlayerPokemon) => { // Get Pokemon held items and filter for valid ones const validItems = pokemon.getHeldItems().filter((it) => { @@ -185,53 +209,57 @@ export const DelibirdyEncounter: MysteryEncounter = const selectableFilter = (pokemon: Pokemon) => { // If pokemon has valid item, it can be selected - const meetsReqs = encounter.options[1].pokemonMeetsPrimaryRequirements(scene, pokemon); + const meetsReqs = encounter.options[1].pokemonMeetsPrimaryRequirements(pokemon); if (!meetsReqs) { - return getEncounterText(scene, `${namespace}:invalid_selection`) ?? null; + return getEncounterText(`${namespace}:invalid_selection`) ?? null; } return null; }; - return selectPokemonForOption(scene, onPokemonSelected, undefined, selectableFilter); + return selectPokemonForOption(onPokemonSelected, undefined, selectableFilter); }) - .withOptionPhase(async (scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOptionPhase(async () => { + const encounter = globalScene.currentBattle.mysteryEncounter!; const modifier: BerryModifier | PokemonInstantReviveModifier = encounter.misc.chosenModifier; const chosenPokemon: PlayerPokemon = encounter.misc.chosenPokemon; // Give the player a Candy Jar if they gave a Berry, and a Berry Pouch for Reviver Seed if (modifier instanceof BerryModifier) { // Check if the player has max stacks of that Candy Jar already - const existing = scene.findModifier(m => m instanceof LevelIncrementBoosterModifier) as LevelIncrementBoosterModifier; + const existing = globalScene.findModifier(m => m instanceof LevelIncrementBoosterModifier) as LevelIncrementBoosterModifier; - if (existing && existing.getStackCount() >= existing.getMaxStackCount(scene)) { + if (existing && existing.getStackCount() >= existing.getMaxStackCount()) { // At max stacks, give the first party pokemon a Shell Bell instead - const shellBell = generateModifierType(scene, modifierTypes.SHELL_BELL) as PokemonHeldItemModifierType; - await applyModifierTypeToPlayerPokemon(scene, scene.getPlayerPokemon()!, shellBell); - scene.playSound("item_fanfare"); - await showEncounterText(scene, i18next.t("battle:rewardGain", { modifierName: shellBell.name }), null, undefined, true); + const shellBell = generateModifierType(modifierTypes.SHELL_BELL) as PokemonHeldItemModifierType; + await applyModifierTypeToPlayerPokemon(globalScene.getPlayerPokemon()!, shellBell); + globalScene.playSound("item_fanfare"); + await showEncounterText(i18next.t("battle:rewardGain", { modifierName: shellBell.name }), null, undefined, true); + doEventReward(); } else { - scene.unshiftPhase(new ModifierRewardPhase(scene, modifierTypes.CANDY_JAR)); + globalScene.unshiftPhase(new ModifierRewardPhase(modifierTypes.CANDY_JAR)); + doEventReward(); } } else { // Check if the player has max stacks of that Berry Pouch already - const existing = scene.findModifier(m => m instanceof PreserveBerryModifier) as PreserveBerryModifier; + const existing = globalScene.findModifier(m => m instanceof PreserveBerryModifier) as PreserveBerryModifier; - if (existing && existing.getStackCount() >= existing.getMaxStackCount(scene)) { + if (existing && existing.getStackCount() >= existing.getMaxStackCount()) { // At max stacks, give the first party pokemon a Shell Bell instead - const shellBell = generateModifierType(scene, modifierTypes.SHELL_BELL) as PokemonHeldItemModifierType; - await applyModifierTypeToPlayerPokemon(scene, scene.getPlayerPokemon()!, shellBell); - scene.playSound("item_fanfare"); - await showEncounterText(scene, i18next.t("battle:rewardGain", { modifierName: shellBell.name }), null, undefined, true); + const shellBell = generateModifierType(modifierTypes.SHELL_BELL) as PokemonHeldItemModifierType; + await applyModifierTypeToPlayerPokemon(globalScene.getPlayerPokemon()!, shellBell); + globalScene.playSound("item_fanfare"); + await showEncounterText(i18next.t("battle:rewardGain", { modifierName: shellBell.name }), null, undefined, true); + doEventReward(); } else { - scene.unshiftPhase(new ModifierRewardPhase(scene, modifierTypes.BERRY_POUCH)); + globalScene.unshiftPhase(new ModifierRewardPhase(modifierTypes.BERRY_POUCH)); + doEventReward(); } } chosenPokemon.loseHeldItem(modifier, false); - leaveEncounterWithoutBattle(scene, true); + leaveEncounterWithoutBattle(true); }) .build() ) @@ -249,8 +277,8 @@ export const DelibirdyEncounter: MysteryEncounter = }, ], }) - .withPreOptionPhase(async (scene: BattleScene): Promise => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withPreOptionPhase(async (): Promise => { + const encounter = globalScene.currentBattle.mysteryEncounter!; const onPokemonSelected = (pokemon: PlayerPokemon) => { // Get Pokemon held items and filter for valid ones const validItems = pokemon.getHeldItems().filter((it) => { @@ -276,37 +304,39 @@ export const DelibirdyEncounter: MysteryEncounter = const selectableFilter = (pokemon: Pokemon) => { // If pokemon has valid item, it can be selected - const meetsReqs = encounter.options[2].pokemonMeetsPrimaryRequirements(scene, pokemon); + const meetsReqs = encounter.options[2].pokemonMeetsPrimaryRequirements(pokemon); if (!meetsReqs) { - return getEncounterText(scene, `${namespace}:invalid_selection`) ?? null; + return getEncounterText(`${namespace}:invalid_selection`) ?? null; } return null; }; - return selectPokemonForOption(scene, onPokemonSelected, undefined, selectableFilter); + return selectPokemonForOption(onPokemonSelected, undefined, selectableFilter); }) - .withOptionPhase(async (scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOptionPhase(async () => { + const encounter = globalScene.currentBattle.mysteryEncounter!; const modifier = encounter.misc.chosenModifier; const chosenPokemon: PlayerPokemon = encounter.misc.chosenPokemon; // Check if the player has max stacks of Healing Charm already - const existing = scene.findModifier(m => m instanceof HealingBoosterModifier) as HealingBoosterModifier; + const existing = globalScene.findModifier(m => m instanceof HealingBoosterModifier) as HealingBoosterModifier; - if (existing && existing.getStackCount() >= existing.getMaxStackCount(scene)) { + if (existing && existing.getStackCount() >= existing.getMaxStackCount()) { // At max stacks, give the first party pokemon a Shell Bell instead - const shellBell = generateModifierType(scene, modifierTypes.SHELL_BELL) as PokemonHeldItemModifierType; - await applyModifierTypeToPlayerPokemon(scene, scene.getPlayerParty()[0], shellBell); - scene.playSound("item_fanfare"); - await showEncounterText(scene, i18next.t("battle:rewardGain", { modifierName: shellBell.name }), null, undefined, true); + const shellBell = generateModifierType(modifierTypes.SHELL_BELL) as PokemonHeldItemModifierType; + await applyModifierTypeToPlayerPokemon(globalScene.getPlayerParty()[0], shellBell); + globalScene.playSound("item_fanfare"); + await showEncounterText(i18next.t("battle:rewardGain", { modifierName: shellBell.name }), null, undefined, true); + doEventReward(); } else { - scene.unshiftPhase(new ModifierRewardPhase(scene, modifierTypes.HEALING_CHARM)); + globalScene.unshiftPhase(new ModifierRewardPhase(modifierTypes.HEALING_CHARM)); + doEventReward(); } chosenPokemon.loseHeldItem(modifier, false); - leaveEncounterWithoutBattle(scene, true); + leaveEncounterWithoutBattle(true); }) .build() ) diff --git a/src/data/mystery-encounters/encounters/department-store-sale-encounter.ts b/src/data/mystery-encounters/encounters/department-store-sale-encounter.ts index 10034d19263..b2bc13ca744 100644 --- a/src/data/mystery-encounters/encounters/department-store-sale-encounter.ts +++ b/src/data/mystery-encounters/encounters/department-store-sale-encounter.ts @@ -2,12 +2,13 @@ import { leaveEncounterWithoutBattle, setEncounterRewards, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import { ModifierTypeFunc, modifierTypes } from "#app/modifier/modifier-type"; +import type { ModifierTypeFunc } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/modifier/modifier-type"; import { randSeedInt } from "#app/utils"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { Species } from "#enums/species"; -import BattleScene from "#app/battle-scene"; -import MysteryEncounter, { +import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import { MysteryEncounterBuilder, } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; @@ -60,7 +61,7 @@ export const DepartmentStoreSaleEncounter: MysteryEncounter = buttonLabel: `${namespace}:option.1.label`, buttonTooltip: `${namespace}:option.1.tooltip`, }, - async (scene: BattleScene) => { + async () => { // Choose TMs const modifiers: ModifierTypeFunc[] = []; let i = 0; @@ -77,8 +78,8 @@ export const DepartmentStoreSaleEncounter: MysteryEncounter = i++; } - setEncounterRewards(scene, { guaranteedModifierTypeFuncs: modifiers, fillRemaining: false, }); - leaveEncounterWithoutBattle(scene); + setEncounterRewards({ guaranteedModifierTypeFuncs: modifiers, fillRemaining: false, }); + leaveEncounterWithoutBattle(); } ) .withSimpleOption( @@ -86,7 +87,7 @@ export const DepartmentStoreSaleEncounter: MysteryEncounter = buttonLabel: `${namespace}:option.2.label`, buttonTooltip: `${namespace}:option.2.tooltip`, }, - async (scene: BattleScene) => { + async () => { // Choose Vitamins const modifiers: ModifierTypeFunc[] = []; let i = 0; @@ -101,8 +102,8 @@ export const DepartmentStoreSaleEncounter: MysteryEncounter = i++; } - setEncounterRewards(scene, { guaranteedModifierTypeFuncs: modifiers, fillRemaining: false, }); - leaveEncounterWithoutBattle(scene); + setEncounterRewards({ guaranteedModifierTypeFuncs: modifiers, fillRemaining: false, }); + leaveEncounterWithoutBattle(); } ) .withSimpleOption( @@ -110,7 +111,7 @@ export const DepartmentStoreSaleEncounter: MysteryEncounter = buttonLabel: `${namespace}:option.3.label`, buttonTooltip: `${namespace}:option.3.tooltip`, }, - async (scene: BattleScene) => { + async () => { // Choose X Items const modifiers: ModifierTypeFunc[] = []; let i = 0; @@ -125,8 +126,8 @@ export const DepartmentStoreSaleEncounter: MysteryEncounter = i++; } - setEncounterRewards(scene, { guaranteedModifierTypeFuncs: modifiers, fillRemaining: false, }); - leaveEncounterWithoutBattle(scene); + setEncounterRewards({ guaranteedModifierTypeFuncs: modifiers, fillRemaining: false, }); + leaveEncounterWithoutBattle(); } ) .withSimpleOption( @@ -134,7 +135,7 @@ export const DepartmentStoreSaleEncounter: MysteryEncounter = buttonLabel: `${namespace}:option.4.label`, buttonTooltip: `${namespace}:option.4.tooltip`, }, - async (scene: BattleScene) => { + async () => { // Choose Pokeballs const modifiers: ModifierTypeFunc[] = []; let i = 0; @@ -153,8 +154,8 @@ export const DepartmentStoreSaleEncounter: MysteryEncounter = i++; } - setEncounterRewards(scene, { guaranteedModifierTypeFuncs: modifiers, fillRemaining: false, }); - leaveEncounterWithoutBattle(scene); + setEncounterRewards({ guaranteedModifierTypeFuncs: modifiers, fillRemaining: false, }); + leaveEncounterWithoutBattle(); } ) .withOutroDialogue([ diff --git a/src/data/mystery-encounters/encounters/field-trip-encounter.ts b/src/data/mystery-encounters/encounters/field-trip-encounter.ts index 1c26df0cf71..8bb5c68eec0 100644 --- a/src/data/mystery-encounters/encounters/field-trip-encounter.ts +++ b/src/data/mystery-encounters/encounters/field-trip-encounter.ts @@ -1,12 +1,13 @@ import { MoveCategory } from "#app/data/move"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; import { generateModifierTypeOption, leaveEncounterWithoutBattle, selectPokemonForOption, setEncounterExp, setEncounterRewards } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; +import type { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; import { modifierTypes } from "#app/modifier/modifier-type"; -import { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; +import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import BattleScene from "#app/battle-scene"; -import MysteryEncounter, { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; +import { globalScene } from "#app/global-scene"; +import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { Stat } from "#enums/stat"; @@ -64,8 +65,8 @@ export const FieldTripEncounter: MysteryEncounter = buttonTooltip: `${namespace}:option.1.tooltip`, secondOptionPrompt: `${namespace}:second_option_prompt`, }) - .withPreOptionPhase(async (scene: BattleScene): Promise => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withPreOptionPhase(async (): Promise => { + const encounter = globalScene.currentBattle.mysteryEncounter!; const onPokemonSelected = (pokemon: PlayerPokemon) => { // Return the options for Pokemon move valid for this option return pokemon.moveset.map((move: PokemonMove) => { @@ -74,7 +75,7 @@ export const FieldTripEncounter: MysteryEncounter = handler: () => { // Pokemon and move selected encounter.setDialogueToken("moveCategory", i18next.t(`${namespace}:physical`)); - pokemonAndMoveChosen(scene, pokemon, move, MoveCategory.PHYSICAL); + pokemonAndMoveChosen(pokemon, move, MoveCategory.PHYSICAL); return true; }, }; @@ -82,23 +83,23 @@ export const FieldTripEncounter: MysteryEncounter = }); }; - return selectPokemonForOption(scene, onPokemonSelected); + return selectPokemonForOption(onPokemonSelected); }) - .withOptionPhase(async (scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOptionPhase(async () => { + const encounter = globalScene.currentBattle.mysteryEncounter!; if (encounter.misc.correctMove) { const modifiers = [ - generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_STAGE_BOOSTER, [ Stat.ATK ])!, - generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_STAGE_BOOSTER, [ Stat.DEF ])!, - generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_STAGE_BOOSTER, [ Stat.SPD ])!, - generateModifierTypeOption(scene, modifierTypes.DIRE_HIT)!, - generateModifierTypeOption(scene, modifierTypes.RARER_CANDY)!, + generateModifierTypeOption(modifierTypes.TEMP_STAT_STAGE_BOOSTER, [ Stat.ATK ])!, + generateModifierTypeOption(modifierTypes.TEMP_STAT_STAGE_BOOSTER, [ Stat.DEF ])!, + generateModifierTypeOption(modifierTypes.TEMP_STAT_STAGE_BOOSTER, [ Stat.SPD ])!, + generateModifierTypeOption(modifierTypes.DIRE_HIT)!, + generateModifierTypeOption(modifierTypes.RARER_CANDY)!, ]; - setEncounterRewards(scene, { guaranteedModifierTypeOptions: modifiers, fillRemaining: false }); + setEncounterRewards({ guaranteedModifierTypeOptions: modifiers, fillRemaining: false }); } - leaveEncounterWithoutBattle(scene, !encounter.misc.correctMove); + leaveEncounterWithoutBattle(!encounter.misc.correctMove); }) .build() ) @@ -110,8 +111,8 @@ export const FieldTripEncounter: MysteryEncounter = buttonTooltip: `${namespace}:option.2.tooltip`, secondOptionPrompt: `${namespace}:second_option_prompt`, }) - .withPreOptionPhase(async (scene: BattleScene): Promise => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withPreOptionPhase(async (): Promise => { + const encounter = globalScene.currentBattle.mysteryEncounter!; const onPokemonSelected = (pokemon: PlayerPokemon) => { // Return the options for Pokemon move valid for this option return pokemon.moveset.map((move: PokemonMove) => { @@ -120,7 +121,7 @@ export const FieldTripEncounter: MysteryEncounter = handler: () => { // Pokemon and move selected encounter.setDialogueToken("moveCategory", i18next.t(`${namespace}:special`)); - pokemonAndMoveChosen(scene, pokemon, move, MoveCategory.SPECIAL); + pokemonAndMoveChosen(pokemon, move, MoveCategory.SPECIAL); return true; }, }; @@ -128,23 +129,23 @@ export const FieldTripEncounter: MysteryEncounter = }); }; - return selectPokemonForOption(scene, onPokemonSelected); + return selectPokemonForOption(onPokemonSelected); }) - .withOptionPhase(async (scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOptionPhase(async () => { + const encounter = globalScene.currentBattle.mysteryEncounter!; if (encounter.misc.correctMove) { const modifiers = [ - generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_STAGE_BOOSTER, [ Stat.SPATK ])!, - generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_STAGE_BOOSTER, [ Stat.SPDEF ])!, - generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_STAGE_BOOSTER, [ Stat.SPD ])!, - generateModifierTypeOption(scene, modifierTypes.DIRE_HIT)!, - generateModifierTypeOption(scene, modifierTypes.RARER_CANDY)!, + generateModifierTypeOption(modifierTypes.TEMP_STAT_STAGE_BOOSTER, [ Stat.SPATK ])!, + generateModifierTypeOption(modifierTypes.TEMP_STAT_STAGE_BOOSTER, [ Stat.SPDEF ])!, + generateModifierTypeOption(modifierTypes.TEMP_STAT_STAGE_BOOSTER, [ Stat.SPD ])!, + generateModifierTypeOption(modifierTypes.DIRE_HIT)!, + generateModifierTypeOption(modifierTypes.RARER_CANDY)!, ]; - setEncounterRewards(scene, { guaranteedModifierTypeOptions: modifiers, fillRemaining: false }); + setEncounterRewards({ guaranteedModifierTypeOptions: modifiers, fillRemaining: false }); } - leaveEncounterWithoutBattle(scene, !encounter.misc.correctMove); + leaveEncounterWithoutBattle(!encounter.misc.correctMove); }) .build() ) @@ -156,8 +157,8 @@ export const FieldTripEncounter: MysteryEncounter = buttonTooltip: `${namespace}:option.3.tooltip`, secondOptionPrompt: `${namespace}:second_option_prompt`, }) - .withPreOptionPhase(async (scene: BattleScene): Promise => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withPreOptionPhase(async (): Promise => { + const encounter = globalScene.currentBattle.mysteryEncounter!; const onPokemonSelected = (pokemon: PlayerPokemon) => { // Return the options for Pokemon move valid for this option return pokemon.moveset.map((move: PokemonMove) => { @@ -166,7 +167,7 @@ export const FieldTripEncounter: MysteryEncounter = handler: () => { // Pokemon and move selected encounter.setDialogueToken("moveCategory", i18next.t(`${namespace}:status`)); - pokemonAndMoveChosen(scene, pokemon, move, MoveCategory.STATUS); + pokemonAndMoveChosen(pokemon, move, MoveCategory.STATUS); return true; }, }; @@ -174,30 +175,30 @@ export const FieldTripEncounter: MysteryEncounter = }); }; - return selectPokemonForOption(scene, onPokemonSelected); + return selectPokemonForOption(onPokemonSelected); }) - .withOptionPhase(async (scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOptionPhase(async () => { + const encounter = globalScene.currentBattle.mysteryEncounter!; if (encounter.misc.correctMove) { const modifiers = [ - generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_STAGE_BOOSTER, [ Stat.ACC ])!, - generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_STAGE_BOOSTER, [ Stat.SPD ])!, - generateModifierTypeOption(scene, modifierTypes.GREAT_BALL)!, - generateModifierTypeOption(scene, modifierTypes.IV_SCANNER)!, - generateModifierTypeOption(scene, modifierTypes.RARER_CANDY)!, + generateModifierTypeOption(modifierTypes.TEMP_STAT_STAGE_BOOSTER, [ Stat.ACC ])!, + generateModifierTypeOption(modifierTypes.TEMP_STAT_STAGE_BOOSTER, [ Stat.SPD ])!, + generateModifierTypeOption(modifierTypes.GREAT_BALL)!, + generateModifierTypeOption(modifierTypes.IV_SCANNER)!, + generateModifierTypeOption(modifierTypes.RARER_CANDY)!, ]; - setEncounterRewards(scene, { guaranteedModifierTypeOptions: modifiers, fillRemaining: false }); + setEncounterRewards({ guaranteedModifierTypeOptions: modifiers, fillRemaining: false }); } - leaveEncounterWithoutBattle(scene, !encounter.misc.correctMove); + leaveEncounterWithoutBattle(!encounter.misc.correctMove); }) .build() ) .build(); -function pokemonAndMoveChosen(scene: BattleScene, pokemon: PlayerPokemon, move: PokemonMove, correctMoveCategory: MoveCategory) { - const encounter = scene.currentBattle.mysteryEncounter!; +function pokemonAndMoveChosen(pokemon: PlayerPokemon, move: PokemonMove, correctMoveCategory: MoveCategory) { + const encounter = globalScene.currentBattle.mysteryEncounter!; const correctMove = move.getMove().category === correctMoveCategory; encounter.setDialogueToken("pokeName", pokemon.getNameToRender()); encounter.setDialogueToken("move", move.getName()); @@ -214,7 +215,7 @@ function pokemonAndMoveChosen(scene: BattleScene, pokemon: PlayerPokemon, move: text: `${namespace}:incorrect_exp`, }, ]; - setEncounterExp(scene, scene.getPlayerParty().map((p) => p.id), 50); + setEncounterExp(globalScene.getPlayerParty().map((p) => p.id), 50); } else { encounter.selectedOption!.dialogue!.selected = [ { @@ -228,7 +229,7 @@ function pokemonAndMoveChosen(scene: BattleScene, pokemon: PlayerPokemon, move: text: `${namespace}:correct_exp`, }, ]; - setEncounterExp(scene, [ pokemon.id ], 100); + setEncounterExp([ pokemon.id ], 100); } encounter.misc = { correctMove: correctMove, diff --git a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts index bbc979e844e..c52540584b3 100644 --- a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts +++ b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts @@ -1,16 +1,20 @@ import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; -import { EnemyPartyConfig, initBattleWithEnemyConfig, loadCustomMovesForEncounter, leaveEncounterWithoutBattle, setEncounterExp, setEncounterRewards, transitionMysteryEncounterIntroVisuals, generateModifierType } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import { AttackTypeBoosterModifierType, modifierTypes, } from "#app/modifier/modifier-type"; +import type { EnemyPartyConfig } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import { initBattleWithEnemyConfig, loadCustomMovesForEncounter, leaveEncounterWithoutBattle, setEncounterExp, setEncounterRewards, transitionMysteryEncounterIntroVisuals, generateModifierType } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import type { AttackTypeBoosterModifierType } from "#app/modifier/modifier-type"; +import { modifierTypes, } from "#app/modifier/modifier-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import BattleScene from "#app/battle-scene"; -import MysteryEncounter, { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; +import { globalScene } from "#app/global-scene"; +import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { AbilityRequirement, CombinationPokemonRequirement, TypeRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements"; import { Species } from "#enums/species"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { Gender } from "#app/data/gender"; import { Type } from "#enums/type"; import { BattlerIndex } from "#app/battle"; -import Pokemon, { PokemonMove } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; +import { PokemonMove } from "#app/field/pokemon"; import { Moves } from "#enums/moves"; import { EncounterBattleAnim } from "#app/data/battle-anims"; import { WeatherType } from "#enums/weather-type"; @@ -58,8 +62,8 @@ export const FieryFalloutEncounter: MysteryEncounter = text: `${namespace}:intro`, }, ]) - .withOnInit((scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOnInit(() => { + const encounter = globalScene.currentBattle.mysteryEncounter!; // Calculate boss mons const volcaronaSpecies = getPokemonSpecies(Species.VOLCARONA); @@ -71,7 +75,7 @@ export const FieryFalloutEncounter: MysteryEncounter = gender: Gender.MALE, tags: [ BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON ], mysteryEncounterBattleEffects: (pokemon: Pokemon) => { - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ Stat.SPDEF, Stat.SPD ], 1)); + globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ Stat.SPDEF, Stat.SPD ], 1)); } }, { @@ -80,7 +84,7 @@ export const FieryFalloutEncounter: MysteryEncounter = gender: Gender.FEMALE, tags: [ BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON ], mysteryEncounterBattleEffects: (pokemon: Pokemon) => { - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ Stat.SPDEF, Stat.SPD ], 1)); + globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ Stat.SPDEF, Stat.SPD ], 1)); } } ], @@ -113,25 +117,25 @@ export const FieryFalloutEncounter: MysteryEncounter = ]; // Load animations/sfx for Volcarona moves - loadCustomMovesForEncounter(scene, [ Moves.FIRE_SPIN, Moves.QUIVER_DANCE ]); + loadCustomMovesForEncounter([ Moves.FIRE_SPIN, Moves.QUIVER_DANCE ]); - scene.arena.trySetWeather(WeatherType.SUNNY, true); + globalScene.arena.trySetWeather(WeatherType.SUNNY, true); encounter.setDialogueToken("volcaronaName", getPokemonSpecies(Species.VOLCARONA).getName()); return true; }) - .withOnVisualsStart((scene: BattleScene) => { + .withOnVisualsStart(() => { // Play animations - const background = new EncounterBattleAnim(EncounterAnim.MAGMA_BG, scene.getPlayerPokemon()!, scene.getPlayerPokemon()); - background.playWithoutTargets(scene, 200, 70, 2, 3); - const animation = new EncounterBattleAnim(EncounterAnim.MAGMA_SPOUT, scene.getPlayerPokemon()!, scene.getPlayerPokemon()); - animation.playWithoutTargets(scene, 80, 100, 2); - scene.time.delayedCall(600, () => { - animation.playWithoutTargets(scene, -20, 100, 2); + const background = new EncounterBattleAnim(EncounterAnim.MAGMA_BG, globalScene.getPlayerPokemon()!, globalScene.getPlayerPokemon()); + background.playWithoutTargets(200, 70, 2, 3); + const animation = new EncounterBattleAnim(EncounterAnim.MAGMA_SPOUT, globalScene.getPlayerPokemon()!, globalScene.getPlayerPokemon()); + animation.playWithoutTargets(80, 100, 2); + globalScene.time.delayedCall(600, () => { + animation.playWithoutTargets(-20, 100, 2); }); - scene.time.delayedCall(1200, () => { - animation.playWithoutTargets(scene, 140, 150, 2); + globalScene.time.delayedCall(1200, () => { + animation.playWithoutTargets(140, 150, 2); }); return true; @@ -150,10 +154,10 @@ export const FieryFalloutEncounter: MysteryEncounter = }, ], }, - async (scene: BattleScene) => { + async () => { // Pick battle - const encounter = scene.currentBattle.mysteryEncounter!; - setEncounterRewards(scene, { fillRemaining: true }, undefined, () => giveLeadPokemonAttackTypeBoostItem(scene)); + const encounter = globalScene.currentBattle.mysteryEncounter!; + setEncounterRewards({ fillRemaining: true }, undefined, () => giveLeadPokemonAttackTypeBoostItem()); encounter.startOfBattleEffects.push( { @@ -168,7 +172,7 @@ export const FieryFalloutEncounter: MysteryEncounter = move: new PokemonMove(Moves.FIRE_SPIN), ignorePp: true }); - await initBattleWithEnemyConfig(scene, scene.currentBattle.mysteryEncounter!.enemyPartyConfigs[0]); + await initBattleWithEnemyConfig(globalScene.currentBattle.mysteryEncounter!.enemyPartyConfigs[0]); } ) .withSimpleOption( @@ -181,15 +185,15 @@ export const FieryFalloutEncounter: MysteryEncounter = }, ], }, - async (scene: BattleScene) => { + async () => { // Damage non-fire types and burn 1 random non-fire type member + give it Heatproof - const encounter = scene.currentBattle.mysteryEncounter!; - const nonFireTypes = scene.getPlayerParty().filter((p) => p.isAllowedInBattle() && !p.getTypes().includes(Type.FIRE)); + const encounter = globalScene.currentBattle.mysteryEncounter!; + const nonFireTypes = globalScene.getPlayerParty().filter((p) => p.isAllowedInBattle() && !p.getTypes().includes(Type.FIRE)); for (const pkm of nonFireTypes) { const percentage = DAMAGE_PERCENTAGE / 100; const damage = Math.floor(pkm.getMaxHp() * percentage); - applyDamageToPokemon(scene, pkm, damage); + applyDamageToPokemon(pkm, damage); } // Burn random member @@ -201,7 +205,7 @@ export const FieryFalloutEncounter: MysteryEncounter = // Burn applied encounter.setDialogueToken("burnedPokemon", chosenPokemon.getNameToRender()); encounter.setDialogueToken("abilityName", new Ability(Abilities.HEATPROOF, 3).name); - queueEncounterMessage(scene, `${namespace}:option.2.target_burned`); + queueEncounterMessage(`${namespace}:option.2.target_burned`); // Also permanently change the burned Pokemon's ability to Heatproof applyAbilityOverrideToPokemon(chosenPokemon, Abilities.HEATPROOF); @@ -209,7 +213,7 @@ export const FieryFalloutEncounter: MysteryEncounter = } // No rewards - leaveEncounterWithoutBattle(scene, true); + leaveEncounterWithoutBattle(true); } ) .withOption( @@ -231,44 +235,44 @@ export const FieryFalloutEncounter: MysteryEncounter = }, ], }) - .withPreOptionPhase(async (scene: BattleScene) => { + .withPreOptionPhase(async () => { // Do NOT await this, to prevent player from repeatedly pressing options - transitionMysteryEncounterIntroVisuals(scene, false, false, 2000); + transitionMysteryEncounterIntroVisuals(false, false, 2000); }) - .withOptionPhase(async (scene: BattleScene) => { + .withOptionPhase(async () => { // Fire types help calm the Volcarona - const encounter = scene.currentBattle.mysteryEncounter!; - await transitionMysteryEncounterIntroVisuals(scene); - setEncounterRewards(scene, + const encounter = globalScene.currentBattle.mysteryEncounter!; + await transitionMysteryEncounterIntroVisuals(); + setEncounterRewards( { fillRemaining: true }, undefined, () => { - giveLeadPokemonAttackTypeBoostItem(scene); + giveLeadPokemonAttackTypeBoostItem(); }); const primary = encounter.options[2].primaryPokemon!; - setEncounterExp(scene, [ primary.id ], getPokemonSpecies(Species.VOLCARONA).baseExp * 2); - leaveEncounterWithoutBattle(scene); + setEncounterExp([ primary.id ], getPokemonSpecies(Species.VOLCARONA).baseExp * 2); + leaveEncounterWithoutBattle(); }) .build() ) .build(); -function giveLeadPokemonAttackTypeBoostItem(scene: BattleScene) { +function giveLeadPokemonAttackTypeBoostItem() { // Give first party pokemon attack type boost item for free at end of battle - const leadPokemon = scene.getPlayerParty()?.[0]; + const leadPokemon = globalScene.getPlayerParty()?.[0]; if (leadPokemon) { // Generate type booster held item, default to Charcoal if item fails to generate - let boosterModifierType = generateModifierType(scene, modifierTypes.ATTACK_TYPE_BOOSTER) as AttackTypeBoosterModifierType; + let boosterModifierType = generateModifierType(modifierTypes.ATTACK_TYPE_BOOSTER) as AttackTypeBoosterModifierType; if (!boosterModifierType) { - boosterModifierType = generateModifierType(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [ Type.FIRE ]) as AttackTypeBoosterModifierType; + boosterModifierType = generateModifierType(modifierTypes.ATTACK_TYPE_BOOSTER, [ Type.FIRE ]) as AttackTypeBoosterModifierType; } - applyModifierTypeToPlayerPokemon(scene, leadPokemon, boosterModifierType); + applyModifierTypeToPlayerPokemon(leadPokemon, boosterModifierType); - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; encounter.setDialogueToken("itemName", boosterModifierType.name); encounter.setDialogueToken("leadPokemon", leadPokemon.getNameToRender()); - queueEncounterMessage(scene, `${namespace}:found_item`); + queueEncounterMessage(`${namespace}:found_item`); } } diff --git a/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts b/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts index 3533e10df29..1667a15e7c9 100644 --- a/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts +++ b/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts @@ -1,27 +1,30 @@ import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; +import type { + EnemyPartyConfig } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { - EnemyPartyConfig, + getRandomEncounterSpecies, initBattleWithEnemyConfig, - leaveEncounterWithoutBattle, setEncounterExp, + leaveEncounterWithoutBattle, + setEncounterExp, setEncounterRewards } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { STEALING_MOVES } from "#app/data/mystery-encounters/requirements/requirement-groups"; -import Pokemon, { EnemyPokemon } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; import { ModifierTier } from "#app/modifier/modifier-tier"; +import type { + ModifierTypeOption } from "#app/modifier/modifier-type"; import { - getPartyLuckValue, getPlayerModifierTypeOptions, ModifierPoolType, - ModifierTypeOption, regenerateModifierPoolThresholds, } from "#app/modifier/modifier-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import BattleScene from "#app/battle-scene"; -import MysteryEncounter, { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; +import { globalScene } from "#app/global-scene"; +import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MoveRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; -import { TrainerSlot } from "#app/data/trainer-config"; import { getEncounterPokemonLevelForWave, getSpriteKeysFromPokemon, STANDARD_ENCOUNTER_BOOSTED_LEVEL_MODIFIER } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import PokemonData from "#app/system/pokemon-data"; import { BattlerTagType } from "#enums/battler-tag-type"; @@ -51,26 +54,25 @@ export const FightOrFlightEncounter: MysteryEncounter = text: `${namespace}:intro`, }, ]) - .withOnInit((scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOnInit(() => { + const encounter = globalScene.currentBattle.mysteryEncounter!; // Calculate boss mon - const level = getEncounterPokemonLevelForWave(scene, STANDARD_ENCOUNTER_BOOSTED_LEVEL_MODIFIER); - const bossSpecies = scene.arena.randomSpecies(scene.currentBattle.waveIndex, level, 0, getPartyLuckValue(scene.getPlayerParty()), true); - const bossPokemon = new EnemyPokemon(scene, bossSpecies, level, TrainerSlot.NONE, true); + const level = getEncounterPokemonLevelForWave(STANDARD_ENCOUNTER_BOOSTED_LEVEL_MODIFIER); + const bossPokemon = getRandomEncounterSpecies(level, true); encounter.setDialogueToken("enemyPokemon", bossPokemon.getNameToRender()); const config: EnemyPartyConfig = { pokemonConfigs: [{ level: level, - species: bossSpecies, + species: bossPokemon.species, dataSource: new PokemonData(bossPokemon), isBoss: true, tags: [ BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON ], mysteryEncounterBattleEffects: (pokemon: Pokemon) => { - queueEncounterMessage(pokemon.scene, `${namespace}:option.1.stat_boost`); + queueEncounterMessage(`${namespace}:option.1.stat_boost`); // Randomly boost 1 stat 2 stages // Cannot boost Spd, Acc, or Evasion - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ randSeedInt(4, 1) ], 2)); + globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ randSeedInt(4, 1) ], 2)); } }], }; @@ -79,18 +81,18 @@ export const FightOrFlightEncounter: MysteryEncounter = // Calculate item // Waves 10-40 GREAT, 60-120 ULTRA, 120-160 ROGUE, 160-180 MASTER const tier = - scene.currentBattle.waveIndex > 160 + globalScene.currentBattle.waveIndex > 160 ? ModifierTier.MASTER - : scene.currentBattle.waveIndex > 120 + : globalScene.currentBattle.waveIndex > 120 ? ModifierTier.ROGUE - : scene.currentBattle.waveIndex > 40 + : globalScene.currentBattle.waveIndex > 40 ? ModifierTier.ULTRA : ModifierTier.GREAT; - regenerateModifierPoolThresholds(scene.getPlayerParty(), ModifierPoolType.PLAYER, 0); + regenerateModifierPoolThresholds(globalScene.getPlayerParty(), ModifierPoolType.PLAYER, 0); let item: ModifierTypeOption | null = null; // TMs and Candy Jar excluded from possible rewards as they're too swingy in value for a singular item reward while (!item || item.type.id.includes("TM_") || item.type.id === "CANDY_JAR") { - item = getPlayerModifierTypeOptions(1, scene.getPlayerParty(), [], { guaranteedModifierTiers: [ tier ], allowLuckUpgrades: false })[0]; + item = getPlayerModifierTypeOptions(1, globalScene.getPlayerParty(), [], { guaranteedModifierTiers: [ tier ], allowLuckUpgrades: false })[0]; } encounter.setDialogueToken("itemName", item.type.name); encounter.misc = item; @@ -136,12 +138,12 @@ export const FightOrFlightEncounter: MysteryEncounter = }, ], }, - async (scene: BattleScene) => { + async () => { // Pick battle // Pokemon will randomly boost 1 stat by 2 stages - const item = scene.currentBattle.mysteryEncounter!.misc as ModifierTypeOption; - setEncounterRewards(scene, { guaranteedModifierTypeOptions: [ item ], fillRemaining: false }); - await initBattleWithEnemyConfig(scene, scene.currentBattle.mysteryEncounter!.enemyPartyConfigs[0]); + const item = globalScene.currentBattle.mysteryEncounter!.misc as ModifierTypeOption; + setEncounterRewards({ guaranteedModifierTypeOptions: [ item ], fillRemaining: false }); + await initBattleWithEnemyConfig(globalScene.currentBattle.mysteryEncounter!.enemyPartyConfigs[0]); } ) .withOption( @@ -158,16 +160,16 @@ export const FightOrFlightEncounter: MysteryEncounter = } ] }) - .withOptionPhase(async (scene: BattleScene) => { + .withOptionPhase(async () => { // Pick steal - const encounter = scene.currentBattle.mysteryEncounter!; - const item = scene.currentBattle.mysteryEncounter!.misc as ModifierTypeOption; - setEncounterRewards(scene, { guaranteedModifierTypeOptions: [ item ], fillRemaining: false }); + const encounter = globalScene.currentBattle.mysteryEncounter!; + const item = globalScene.currentBattle.mysteryEncounter!.misc as ModifierTypeOption; + setEncounterRewards({ guaranteedModifierTypeOptions: [ item ], fillRemaining: false }); // Use primaryPokemon to execute the thievery const primaryPokemon = encounter.options[1].primaryPokemon!; - setEncounterExp(scene, primaryPokemon.id, encounter.enemyPartyConfigs[0].pokemonConfigs![0].species.baseExp); - leaveEncounterWithoutBattle(scene); + setEncounterExp(primaryPokemon.id, encounter.enemyPartyConfigs[0].pokemonConfigs![0].species.baseExp); + leaveEncounterWithoutBattle(); }) .build() ) @@ -181,9 +183,9 @@ export const FightOrFlightEncounter: MysteryEncounter = }, ], }, - async (scene: BattleScene) => { + async () => { // Leave encounter with no rewards or exp - leaveEncounterWithoutBattle(scene, true); + leaveEncounterWithoutBattle(true); return true; } ) diff --git a/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts b/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts index 84c3e56a836..287376f8bd0 100644 --- a/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts +++ b/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts @@ -1,10 +1,13 @@ import { leaveEncounterWithoutBattle, selectPokemonForOption, setEncounterRewards, transitionMysteryEncounterIntroVisuals, updatePlayerMoney, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import BattleScene from "#app/battle-scene"; -import MysteryEncounter, { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; +import { globalScene } from "#app/global-scene"; +import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; import { TrainerSlot } from "#app/data/trainer-config"; -import Pokemon, { FieldPosition, PlayerPokemon } from "#app/field/pokemon"; +import type { PlayerPokemon } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; +import { FieldPosition } from "#app/field/pokemon"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { MoneyRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements"; import { queueEncounterMessage, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; @@ -38,8 +41,6 @@ export const FunAndGamesEncounter: MysteryEncounter = .withSceneWaveRangeRequirement(...CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES) .withSceneRequirement(new MoneyRequirement(0, 1.5)) // Cost equal to 1 Max Potion to play .withAutoHideIntroVisuals(false) - // Allows using move without a visible enemy pokemon - .withBattleAnimationsWithoutTargets(true) // The Wobbuffet won't use moves .withSkipEnemyBattleTurns(true) // Will skip COMMAND selection menu and go straight to FIGHT (move select) menu @@ -80,14 +81,14 @@ export const FunAndGamesEncounter: MysteryEncounter = .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) - .withOnInit((scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; - scene.loadBgm("mystery_encounter_fun_and_games", "mystery_encounter_fun_and_games.mp3"); + .withOnInit(() => { + const encounter = globalScene.currentBattle.mysteryEncounter!; + globalScene.loadBgm("mystery_encounter_fun_and_games", "mystery_encounter_fun_and_games.mp3"); encounter.setDialogueToken("wobbuffetName", getPokemonSpecies(Species.WOBBUFFET).getName()); return true; }) - .withOnVisualsStart((scene: BattleScene) => { - scene.fadeAndSwitchBgm("mystery_encounter_fun_and_games"); + .withOnVisualsStart(() => { + globalScene.fadeAndSwitchBgm("mystery_encounter_fun_and_games"); return true; }) .withOption(MysteryEncounterOptionBuilder @@ -102,9 +103,9 @@ export const FunAndGamesEncounter: MysteryEncounter = }, ], }) - .withPreOptionPhase(async (scene: BattleScene) => { + .withPreOptionPhase(async () => { // Select Pokemon for minigame - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; const onPokemonSelected = (pokemon: PlayerPokemon) => { encounter.misc = { playerPokemon: pokemon, @@ -113,28 +114,28 @@ export const FunAndGamesEncounter: MysteryEncounter = // Only Pokemon that are not KOed/legal can be selected const selectableFilter = (pokemon: Pokemon) => { - return isPokemonValidForEncounterOptionSelection(pokemon, scene, `${namespace}:invalid_selection`); + return isPokemonValidForEncounterOptionSelection(pokemon, `${namespace}:invalid_selection`); }; - return selectPokemonForOption(scene, onPokemonSelected, undefined, selectableFilter); + return selectPokemonForOption(onPokemonSelected, undefined, selectableFilter); }) - .withOptionPhase(async (scene: BattleScene) => { + .withOptionPhase(async () => { // Start minigame - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; encounter.misc.turnsRemaining = 3; // Update money const moneyCost = (encounter.options[0].requirements[0] as MoneyRequirement).requiredMoney; - updatePlayerMoney(scene, -moneyCost, true, false); - await showEncounterText(scene, i18next.t("mysteryEncounterMessages:paid_money", { amount: moneyCost })); + updatePlayerMoney(-moneyCost, true, false); + await showEncounterText(i18next.t("mysteryEncounterMessages:paid_money", { amount: moneyCost })); // Handlers for battle events encounter.onTurnStart = handleNextTurn; // triggered during TurnInitPhase encounter.doContinueEncounter = handleLoseMinigame; // triggered during MysteryEncounterRewardsPhase, post VictoryPhase if the player KOs Wobbuffet - hideShowmanIntroSprite(scene); - await summonPlayerPokemon(scene); - await showWobbuffetHealthBar(scene); + hideShowmanIntroSprite(); + await summonPlayerPokemon(); + await showWobbuffetHealthBar(); return true; }) @@ -150,22 +151,22 @@ export const FunAndGamesEncounter: MysteryEncounter = }, ], }, - async (scene: BattleScene) => { + async () => { // Leave encounter with no rewards or exp - await transitionMysteryEncounterIntroVisuals(scene, true, true); - leaveEncounterWithoutBattle(scene, true); + await transitionMysteryEncounterIntroVisuals(true, true); + leaveEncounterWithoutBattle(true); return true; } ) .build(); -async function summonPlayerPokemon(scene: BattleScene) { +async function summonPlayerPokemon() { return new Promise(async resolve => { - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; const playerPokemon = encounter.misc.playerPokemon; // Swaps the chosen Pokemon and the first player's lead Pokemon in the party - const party = scene.getPlayerParty(); + const party = globalScene.getPlayerParty(); const chosenIndex = party.indexOf(playerPokemon); if (chosenIndex !== 0) { const leadPokemon = party[0]; @@ -175,36 +176,36 @@ async function summonPlayerPokemon(scene: BattleScene) { // Do trainer summon animation let playerAnimationPromise: Promise | undefined; - scene.ui.showText(i18next.t("battle:playerGo", { pokemonName: getPokemonNameWithAffix(playerPokemon) })); - scene.pbTray.hide(); - scene.trainer.setTexture(`trainer_${scene.gameData.gender === PlayerGender.FEMALE ? "f" : "m"}_back_pb`); - scene.time.delayedCall(562, () => { - scene.trainer.setFrame("2"); - scene.time.delayedCall(64, () => { - scene.trainer.setFrame("3"); + globalScene.ui.showText(i18next.t("battle:playerGo", { pokemonName: getPokemonNameWithAffix(playerPokemon) })); + globalScene.pbTray.hide(); + globalScene.trainer.setTexture(`trainer_${globalScene.gameData.gender === PlayerGender.FEMALE ? "f" : "m"}_back_pb`); + globalScene.time.delayedCall(562, () => { + globalScene.trainer.setFrame("2"); + globalScene.time.delayedCall(64, () => { + globalScene.trainer.setFrame("3"); }); }); - scene.tweens.add({ - targets: scene.trainer, + globalScene.tweens.add({ + targets: globalScene.trainer, x: -36, duration: 1000, - onComplete: () => scene.trainer.setVisible(false) + onComplete: () => globalScene.trainer.setVisible(false) }); - scene.time.delayedCall(750, () => { - playerAnimationPromise = summonPlayerPokemonAnimation(scene, playerPokemon); + globalScene.time.delayedCall(750, () => { + playerAnimationPromise = summonPlayerPokemonAnimation(playerPokemon); }); // Also loads Wobbuffet data (cannot be shiny) const enemySpecies = getPokemonSpecies(Species.WOBBUFFET); - scene.currentBattle.enemyParty = []; - const wobbuffet = scene.addEnemyPokemon(enemySpecies, encounter.misc.playerPokemon.level, TrainerSlot.NONE, false, true); + globalScene.currentBattle.enemyParty = []; + const wobbuffet = globalScene.addEnemyPokemon(enemySpecies, encounter.misc.playerPokemon.level, TrainerSlot.NONE, false, true); wobbuffet.ivs = [ 0, 0, 0, 0, 0, 0 ]; wobbuffet.setNature(Nature.MILD); wobbuffet.setAlpha(0); wobbuffet.setVisible(false); wobbuffet.calculateStats(); - scene.currentBattle.enemyParty[0] = wobbuffet; - scene.gameData.setPokemonSeen(wobbuffet, true); + globalScene.currentBattle.enemyParty[0] = wobbuffet; + globalScene.gameData.setPokemonSeen(wobbuffet, true); await wobbuffet.loadAssets(); const id = setInterval(checkPlayerAnimationPromise, 500); async function checkPlayerAnimationPromise() { @@ -217,37 +218,37 @@ async function summonPlayerPokemon(scene: BattleScene) { }); } -function handleLoseMinigame(scene: BattleScene) { +function handleLoseMinigame() { return new Promise(async resolve => { // Check Wobbuffet is still alive - const wobbuffet = scene.getEnemyPokemon(); + const wobbuffet = globalScene.getEnemyPokemon(); if (!wobbuffet || wobbuffet.isFainted(true) || wobbuffet.hp === 0) { // Player loses // End the battle if (wobbuffet) { wobbuffet.hideInfo(); - scene.field.remove(wobbuffet); + wobbuffet.leaveField(); } - transitionMysteryEncounterIntroVisuals(scene, true, true); - scene.currentBattle.enemyParty = []; - scene.currentBattle.mysteryEncounter!.doContinueEncounter = undefined; - leaveEncounterWithoutBattle(scene, true); - await showEncounterText(scene, `${namespace}:ko`); - const reviveCost = scene.getWaveMoneyAmount(1.5); - updatePlayerMoney(scene, -reviveCost, true, false); + transitionMysteryEncounterIntroVisuals(true, true); + globalScene.currentBattle.enemyParty = []; + globalScene.currentBattle.mysteryEncounter!.doContinueEncounter = undefined; + leaveEncounterWithoutBattle(true); + await showEncounterText(`${namespace}:ko`); + const reviveCost = globalScene.getWaveMoneyAmount(1.5); + updatePlayerMoney(-reviveCost, true, false); } resolve(); }); } -function handleNextTurn(scene: BattleScene) { - const encounter = scene.currentBattle.mysteryEncounter!; +function handleNextTurn() { + const encounter = globalScene.currentBattle.mysteryEncounter!; - const wobbuffet = scene.getEnemyPokemon(); + const wobbuffet = globalScene.getEnemyPokemon(); if (!wobbuffet) { // Should never be triggered, just handling the edge case - handleLoseMinigame(scene); + handleLoseMinigame(); return true; } if (encounter.misc.turnsRemaining <= 0) { @@ -257,15 +258,15 @@ function handleNextTurn(scene: BattleScene) { let isHealPhase = false; if (healthRatio < 0.03) { // Grand prize - setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [ modifierTypes.MULTI_LENS ], fillRemaining: false }); + setEncounterRewards({ guaranteedModifierTypeFuncs: [ modifierTypes.MULTI_LENS ], fillRemaining: false }); resultMessageKey = `${namespace}:best_result`; } else if (healthRatio < 0.15) { // 2nd prize - setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [ modifierTypes.SCOPE_LENS ], fillRemaining: false }); + setEncounterRewards({ guaranteedModifierTypeFuncs: [ modifierTypes.SCOPE_LENS ], fillRemaining: false }); resultMessageKey = `${namespace}:great_result`; } else if (healthRatio < 0.33) { // 3rd prize - setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [ modifierTypes.WIDE_LENS ], fillRemaining: false }); + setEncounterRewards({ guaranteedModifierTypeFuncs: [ modifierTypes.WIDE_LENS ], fillRemaining: false }); resultMessageKey = `${namespace}:good_result`; } else { // No prize @@ -275,22 +276,22 @@ function handleNextTurn(scene: BattleScene) { // End the battle wobbuffet.hideInfo(); - scene.field.remove(wobbuffet); - scene.currentBattle.enemyParty = []; - scene.currentBattle.mysteryEncounter!.doContinueEncounter = undefined; - leaveEncounterWithoutBattle(scene, isHealPhase); + wobbuffet.leaveField(); + globalScene.currentBattle.enemyParty = []; + globalScene.currentBattle.mysteryEncounter!.doContinueEncounter = undefined; + leaveEncounterWithoutBattle(isHealPhase); // Must end the TurnInit phase prematurely so battle phases aren't added to queue - queueEncounterMessage(scene, `${namespace}:end_game`); - queueEncounterMessage(scene, resultMessageKey); + queueEncounterMessage(`${namespace}:end_game`); + queueEncounterMessage(resultMessageKey); // Skip remainder of TurnInitPhase return true; } else { if (encounter.misc.turnsRemaining < 3) { // Display charging messages on turns that aren't the initial turn - queueEncounterMessage(scene, `${namespace}:charging_continue`); + queueEncounterMessage(`${namespace}:charging_continue`); } - queueEncounterMessage(scene, `${namespace}:turn_remaining_${encounter.misc.turnsRemaining}`); + queueEncounterMessage(`${namespace}:turn_remaining_${encounter.misc.turnsRemaining}`); encounter.misc.turnsRemaining--; } @@ -298,33 +299,33 @@ function handleNextTurn(scene: BattleScene) { return false; } -async function showWobbuffetHealthBar(scene: BattleScene) { - const wobbuffet = scene.getEnemyPokemon()!; +async function showWobbuffetHealthBar() { + const wobbuffet = globalScene.getEnemyPokemon()!; - scene.add.existing(wobbuffet); - scene.field.add(wobbuffet); + globalScene.add.existing(wobbuffet); + globalScene.field.add(wobbuffet); - const playerPokemon = scene.getPlayerPokemon() as Pokemon; + const playerPokemon = globalScene.getPlayerPokemon() as Pokemon; if (playerPokemon?.isOnField()) { - scene.field.moveBelow(wobbuffet, playerPokemon); + globalScene.field.moveBelow(wobbuffet, playerPokemon); } // Show health bar and trigger cry wobbuffet.showInfo(); - scene.time.delayedCall(1000, () => { + globalScene.time.delayedCall(1000, () => { wobbuffet.cry(); }); wobbuffet.resetSummonData(); // Track the HP change across turns - scene.currentBattle.mysteryEncounter!.misc.wobbuffetHealth = wobbuffet.hp; + globalScene.currentBattle.mysteryEncounter!.misc.wobbuffetHealth = wobbuffet.hp; } -function summonPlayerPokemonAnimation(scene: BattleScene, pokemon: PlayerPokemon): Promise { +function summonPlayerPokemonAnimation(pokemon: PlayerPokemon): Promise { return new Promise(resolve => { - const pokeball = scene.addFieldSprite(36, 80, "pb", getPokeballAtlasKey(pokemon.pokeball)); + const pokeball = globalScene.addFieldSprite(36, 80, "pb", getPokeballAtlasKey(pokemon.pokeball)); pokeball.setVisible(false); pokeball.setOrigin(0.5, 0.625); - scene.field.add(pokeball); + globalScene.field.add(pokeball); pokemon.setFieldPosition(FieldPosition.CENTER, 0); @@ -332,32 +333,32 @@ function summonPlayerPokemonAnimation(scene: BattleScene, pokemon: PlayerPokemon pokeball.setVisible(true); - scene.tweens.add({ + globalScene.tweens.add({ targets: pokeball, duration: 650, x: 100 + fpOffset[0] }); - scene.tweens.add({ + globalScene.tweens.add({ targets: pokeball, duration: 150, ease: "Cubic.easeOut", y: 70 + fpOffset[1], onComplete: () => { - scene.tweens.add({ + globalScene.tweens.add({ targets: pokeball, duration: 500, ease: "Cubic.easeIn", angle: 1440, y: 132 + fpOffset[1], onComplete: () => { - scene.playSound("se/pb_rel"); + globalScene.playSound("se/pb_rel"); pokeball.destroy(); - scene.add.existing(pokemon); - scene.field.add(pokemon); - addPokeballOpenParticles(scene, pokemon.x, pokemon.y - 16, pokemon.pokeball); - scene.updateModifiers(true); - scene.updateFieldScale(); + globalScene.add.existing(pokemon); + globalScene.field.add(pokemon); + addPokeballOpenParticles(pokemon.x, pokemon.y - 16, pokemon.pokeball); + globalScene.updateModifiers(true); + globalScene.updateFieldScale(); pokemon.showInfo(); pokemon.playAnim(); pokemon.setVisible(true); @@ -365,8 +366,8 @@ function summonPlayerPokemonAnimation(scene: BattleScene, pokemon: PlayerPokemon pokemon.setScale(0.5); pokemon.tint(getPokeballTintColor(pokemon.pokeball)); pokemon.untint(250, "Sine.easeIn"); - scene.updateFieldScale(); - scene.tweens.add({ + globalScene.updateFieldScale(); + globalScene.tweens.add({ targets: pokemon, duration: 250, ease: "Sine.easeIn", @@ -375,15 +376,15 @@ function summonPlayerPokemonAnimation(scene: BattleScene, pokemon: PlayerPokemon pokemon.cry(pokemon.getHpRatio() > 0.25 ? undefined : { rate: 0.85 }); pokemon.getSprite().clearTint(); pokemon.resetSummonData(); - scene.time.delayedCall(1000, () => { + globalScene.time.delayedCall(1000, () => { if (pokemon.isShiny()) { - scene.unshiftPhase(new ShinySparklePhase(scene, pokemon.getBattlerIndex())); + globalScene.unshiftPhase(new ShinySparklePhase(pokemon.getBattlerIndex())); } pokemon.resetTurnData(); - scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeActiveTrigger, true); - scene.pushPhase(new PostSummonPhase(scene, pokemon.getBattlerIndex())); + globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeActiveTrigger, true); + globalScene.pushPhase(new PostSummonPhase(pokemon.getBattlerIndex())); resolve(); }); } @@ -395,13 +396,13 @@ function summonPlayerPokemonAnimation(scene: BattleScene, pokemon: PlayerPokemon }); } -function hideShowmanIntroSprite(scene: BattleScene) { - const carnivalGame = scene.currentBattle.mysteryEncounter!.introVisuals?.getSpriteAtIndex(0)[0]; - const wobbuffet = scene.currentBattle.mysteryEncounter!.introVisuals?.getSpriteAtIndex(1)[0]; - const showMan = scene.currentBattle.mysteryEncounter!.introVisuals?.getSpriteAtIndex(2)[0]; +function hideShowmanIntroSprite() { + const carnivalGame = globalScene.currentBattle.mysteryEncounter!.introVisuals?.getSpriteAtIndex(0)[0]; + const wobbuffet = globalScene.currentBattle.mysteryEncounter!.introVisuals?.getSpriteAtIndex(1)[0]; + const showMan = globalScene.currentBattle.mysteryEncounter!.introVisuals?.getSpriteAtIndex(2)[0]; // Hide the showman - scene.tweens.add({ + globalScene.tweens.add({ targets: showMan, x: "+=16", y: "-=16", @@ -411,7 +412,7 @@ function hideShowmanIntroSprite(scene: BattleScene) { }); // Slide the Wobbuffet and Game over slightly - scene.tweens.add({ + globalScene.tweens.add({ targets: [ wobbuffet, carnivalGame ], x: "+=16", ease: "Sine.easeInOut", 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 fa445d75d4f..f494aaf2c28 100644 --- a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts +++ b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts @@ -2,20 +2,26 @@ import { leaveEncounterWithoutBattle, selectPokemonForOption, setEncounterReward import { TrainerSlot, } from "#app/data/trainer-config"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { MusicPreference } from "#app/system/settings/settings"; -import { getPlayerModifierTypeOptions, ModifierPoolType, ModifierTypeOption, regenerateModifierPoolThresholds } from "#app/modifier/modifier-type"; +import type { ModifierTypeOption } from "#app/modifier/modifier-type"; +import { getPlayerModifierTypeOptions, ModifierPoolType, regenerateModifierPoolThresholds } from "#app/modifier/modifier-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import BattleScene from "#app/battle-scene"; -import MysteryEncounter, { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; +import { globalScene } from "#app/global-scene"; +import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { Species } from "#enums/species"; -import PokemonSpecies, { allSpecies, getPokemonSpecies } from "#app/data/pokemon-species"; +import type PokemonSpecies from "#app/data/pokemon-species"; +import { allSpecies, getPokemonSpecies } from "#app/data/pokemon-species"; import { getTypeRgb } from "#app/data/type"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { NumberHolder, isNullOrUndefined, randInt, randSeedInt, randSeedShuffle } from "#app/utils"; -import Pokemon, { EnemyPokemon, PlayerPokemon, PokemonMove } from "#app/field/pokemon"; -import { HiddenAbilityRateBoosterModifier, PokemonFormChangeItemModifier, PokemonHeldItemModifier, ShinyRateBoosterModifier, SpeciesStatBoosterModifier } from "#app/modifier/modifier"; -import { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; +import type { PlayerPokemon } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; +import { EnemyPokemon, PokemonMove } from "#app/field/pokemon"; +import type { PokemonHeldItemModifier } from "#app/modifier/modifier"; +import { HiddenAbilityRateBoosterModifier, PokemonFormChangeItemModifier, ShinyRateBoosterModifier, SpeciesStatBoosterModifier } from "#app/modifier/modifier"; +import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import PokemonData from "#app/system/pokemon-data"; import i18next from "i18next"; import { Gender, getGenderSymbol } from "#app/data/gender"; @@ -102,24 +108,24 @@ export const GlobalTradeSystemEncounter: MysteryEncounter = .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) - .withOnInit((scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOnInit(() => { + const encounter = globalScene.currentBattle.mysteryEncounter!; // Load bgm let bgmKey: string; - if (scene.musicPreference === MusicPreference.CONSISTENT) { + if (globalScene.musicPreference === MusicPreference.GENFIVE) { bgmKey = "mystery_encounter_gen_5_gts"; - scene.loadBgm(bgmKey, `${bgmKey}.mp3`); + globalScene.loadBgm(bgmKey, `${bgmKey}.mp3`); } else { // Mixed option bgmKey = "mystery_encounter_gen_6_gts"; - scene.loadBgm(bgmKey, `${bgmKey}.mp3`); + globalScene.loadBgm(bgmKey, `${bgmKey}.mp3`); } // Load possible trade options // Maps current party member's id to 3 EnemyPokemon objects // None of the trade options can be the same species - const tradeOptionsMap: Map = getPokemonTradeOptions(scene); + const tradeOptionsMap: Map = getPokemonTradeOptions(); encounter.misc = { tradeOptionsMap, bgmKey @@ -127,8 +133,8 @@ export const GlobalTradeSystemEncounter: MysteryEncounter = return true; }) - .withOnVisualsStart((scene: BattleScene) => { - scene.fadeAndSwitchBgm(scene.currentBattle.mysteryEncounter!.misc.bgmKey); + .withOnVisualsStart(() => { + globalScene.fadeAndSwitchBgm(globalScene.currentBattle.mysteryEncounter!.misc.bgmKey); return true; }) .withOption( @@ -140,8 +146,8 @@ export const GlobalTradeSystemEncounter: MysteryEncounter = buttonTooltip: `${namespace}:option.1.tooltip`, secondOptionPrompt: `${namespace}:option.1.trade_options_prompt`, }) - .withPreOptionPhase(async (scene: BattleScene): Promise => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withPreOptionPhase(async (): Promise => { + const encounter = globalScene.currentBattle.mysteryEncounter!; const onPokemonSelected = (pokemon: PlayerPokemon) => { // Get the trade species options for the selected pokemon const tradeOptionsMap: Map = encounter.misc.tradeOptionsMap; @@ -165,17 +171,17 @@ export const GlobalTradeSystemEncounter: MysteryEncounter = const formName = tradePokemon.species.forms && tradePokemon.species.forms.length > tradePokemon.formIndex ? tradePokemon.species.forms[tradePokemon.formIndex].formName : null; const line1 = i18next.t("pokemonInfoContainer:ability") + " " + tradePokemon.getAbility().name + (tradePokemon.getGender() !== Gender.GENDERLESS ? " | " + i18next.t("pokemonInfoContainer:gender") + " " + getGenderSymbol(tradePokemon.getGender()) : ""); const line2 = i18next.t("pokemonInfoContainer:nature") + " " + getNatureName(tradePokemon.getNature()) + (formName ? " | " + i18next.t("pokemonInfoContainer:form") + " " + formName : ""); - showEncounterText(scene, `${line1}\n${line2}`, 0, 0, false); + showEncounterText(`${line1}\n${line2}`, 0, 0, false); }, }; return option; }); }; - return selectPokemonForOption(scene, onPokemonSelected); + return selectPokemonForOption(onPokemonSelected); }) - .withOptionPhase(async (scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOptionPhase(async () => { + const encounter = globalScene.currentBattle.mysteryEncounter!; const tradedPokemon: PlayerPokemon = encounter.misc.tradedPokemon; const receivedPokemonData: EnemyPokemon = encounter.misc.receivedPokemon; const modifiers = tradedPokemon.getHeldItems().filter(m => !(m instanceof PokemonFormChangeItemModifier) && !(m instanceof SpeciesStatBoosterModifier)); @@ -185,32 +191,32 @@ export const GlobalTradeSystemEncounter: MysteryEncounter = encounter.setDialogueToken("tradeTrainerName", traderName.trim()); // Remove the original party member from party - scene.removePokemonFromPlayerParty(tradedPokemon, false); + globalScene.removePokemonFromPlayerParty(tradedPokemon, false); // Set data properly, then generate the new Pokemon's assets receivedPokemonData.passive = tradedPokemon.passive; // Pokeball to Ultra ball, randomly receivedPokemonData.pokeball = randInt(4) as PokeballType; const dataSource = new PokemonData(receivedPokemonData); - const newPlayerPokemon = scene.addPlayerPokemon(receivedPokemonData.species, receivedPokemonData.level, dataSource.abilityIndex, dataSource.formIndex, dataSource.gender, dataSource.shiny, dataSource.variant, dataSource.ivs, dataSource.nature, dataSource); - scene.getPlayerParty().push(newPlayerPokemon); + const newPlayerPokemon = globalScene.addPlayerPokemon(receivedPokemonData.species, receivedPokemonData.level, dataSource.abilityIndex, dataSource.formIndex, dataSource.gender, dataSource.shiny, dataSource.variant, dataSource.ivs, dataSource.nature, dataSource); + globalScene.getPlayerParty().push(newPlayerPokemon); await newPlayerPokemon.loadAssets(); for (const mod of modifiers) { mod.pokemonId = newPlayerPokemon.id; - scene.addModifier(mod, true, false, false, true); + globalScene.addModifier(mod, true, false, false, true); } // Show the trade animation - await showTradeBackground(scene); - await doPokemonTradeSequence(scene, tradedPokemon, newPlayerPokemon); - await showEncounterText(scene, `${namespace}:trade_received`, null, 0, true, 4000); - scene.playBgm(encounter.misc.bgmKey); - await addPokemonDataToDexAndValidateAchievements(scene, newPlayerPokemon); - await hideTradeBackground(scene); + await showTradeBackground(); + await doPokemonTradeSequence(tradedPokemon, newPlayerPokemon); + await showEncounterText(`${namespace}:trade_received`, null, 0, true, 4000); + globalScene.playBgm(encounter.misc.bgmKey); + await addPokemonDataToDexAndValidateAchievements(newPlayerPokemon); + await hideTradeBackground(); tradedPokemon.destroy(); - leaveEncounterWithoutBattle(scene, true); + leaveEncounterWithoutBattle(true); }) .build() ) @@ -222,19 +228,19 @@ export const GlobalTradeSystemEncounter: MysteryEncounter = buttonLabel: `${namespace}:option.2.label`, buttonTooltip: `${namespace}:option.2.tooltip`, }) - .withPreOptionPhase(async (scene: BattleScene): Promise => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withPreOptionPhase(async (): Promise => { + const encounter = globalScene.currentBattle.mysteryEncounter!; const onPokemonSelected = (pokemon: PlayerPokemon) => { // Randomly generate a Wonder Trade pokemon - const randomTradeOption = generateTradeOption(scene.getPlayerParty().map(p => p.species)); - const tradePokemon = new EnemyPokemon(scene, randomTradeOption, pokemon.level, TrainerSlot.NONE, false); + const randomTradeOption = generateTradeOption(globalScene.getPlayerParty().map(p => p.species)); + const tradePokemon = new EnemyPokemon(randomTradeOption, pokemon.level, TrainerSlot.NONE, false); // Extra shiny roll at 1/128 odds (boosted by events and charms) if (!tradePokemon.shiny) { const shinyThreshold = new NumberHolder(WONDER_TRADE_SHINY_CHANCE); - if (scene.eventManager.isEventActive()) { - shinyThreshold.value *= scene.eventManager.getShinyMultiplier(); + if (globalScene.eventManager.isEventActive()) { + shinyThreshold.value *= globalScene.eventManager.getShinyMultiplier(); } - scene.applyModifiers(ShinyRateBoosterModifier, true, shinyThreshold); + globalScene.applyModifiers(ShinyRateBoosterModifier, true, shinyThreshold); // Base shiny chance of 512/65536 -> 1/128, affected by events and Shiny Charms // Maximum shiny chance of 4096/65536 -> 1/16, cannot improve further after that @@ -248,7 +254,7 @@ export const GlobalTradeSystemEncounter: MysteryEncounter = if (tradePokemon.species.abilityHidden) { if (tradePokemon.abilityIndex < hiddenIndex) { const hiddenAbilityChance = new NumberHolder(64); - scene.applyModifiers(HiddenAbilityRateBoosterModifier, true, hiddenAbilityChance); + globalScene.applyModifiers(HiddenAbilityRateBoosterModifier, true, hiddenAbilityChance); const hasHiddenAbility = !randSeedInt(hiddenAbilityChance.value); @@ -281,10 +287,10 @@ export const GlobalTradeSystemEncounter: MysteryEncounter = encounter.misc.receivedPokemon = tradePokemon; }; - return selectPokemonForOption(scene, onPokemonSelected); + return selectPokemonForOption(onPokemonSelected); }) - .withOptionPhase(async (scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOptionPhase(async () => { + const encounter = globalScene.currentBattle.mysteryEncounter!; const tradedPokemon: PlayerPokemon = encounter.misc.tradedPokemon; const receivedPokemonData: EnemyPokemon = encounter.misc.receivedPokemon; const modifiers = tradedPokemon.getHeldItems().filter(m => !(m instanceof PokemonFormChangeItemModifier) && !(m instanceof SpeciesStatBoosterModifier)); @@ -294,31 +300,31 @@ export const GlobalTradeSystemEncounter: MysteryEncounter = encounter.setDialogueToken("tradeTrainerName", traderName.trim()); // Remove the original party member from party - scene.removePokemonFromPlayerParty(tradedPokemon, false); + globalScene.removePokemonFromPlayerParty(tradedPokemon, false); // Set data properly, then generate the new Pokemon's assets receivedPokemonData.passive = tradedPokemon.passive; receivedPokemonData.pokeball = randInt(4) as PokeballType; const dataSource = new PokemonData(receivedPokemonData); - const newPlayerPokemon = scene.addPlayerPokemon(receivedPokemonData.species, receivedPokemonData.level, dataSource.abilityIndex, dataSource.formIndex, dataSource.gender, dataSource.shiny, dataSource.variant, dataSource.ivs, dataSource.nature, dataSource); - scene.getPlayerParty().push(newPlayerPokemon); + const newPlayerPokemon = globalScene.addPlayerPokemon(receivedPokemonData.species, receivedPokemonData.level, dataSource.abilityIndex, dataSource.formIndex, dataSource.gender, dataSource.shiny, dataSource.variant, dataSource.ivs, dataSource.nature, dataSource); + globalScene.getPlayerParty().push(newPlayerPokemon); await newPlayerPokemon.loadAssets(); for (const mod of modifiers) { mod.pokemonId = newPlayerPokemon.id; - scene.addModifier(mod, true, false, false, true); + globalScene.addModifier(mod, true, false, false, true); } // Show the trade animation - await showTradeBackground(scene); - await doPokemonTradeSequence(scene, tradedPokemon, newPlayerPokemon); - await showEncounterText(scene, `${namespace}:trade_received`, null, 0, true, 4000); - scene.playBgm(encounter.misc.bgmKey); - await addPokemonDataToDexAndValidateAchievements(scene, newPlayerPokemon); - await hideTradeBackground(scene); + await showTradeBackground(); + await doPokemonTradeSequence(tradedPokemon, newPlayerPokemon); + await showEncounterText(`${namespace}:trade_received`, null, 0, true, 4000); + globalScene.playBgm(encounter.misc.bgmKey); + await addPokemonDataToDexAndValidateAchievements(newPlayerPokemon); + await hideTradeBackground(); tradedPokemon.destroy(); - leaveEncounterWithoutBattle(scene, true); + leaveEncounterWithoutBattle(true); }) .build() ) @@ -330,8 +336,8 @@ export const GlobalTradeSystemEncounter: MysteryEncounter = buttonTooltip: `${namespace}:option.3.tooltip`, secondOptionPrompt: `${namespace}:option.3.trade_options_prompt`, }) - .withPreOptionPhase(async (scene: BattleScene): Promise => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withPreOptionPhase(async (): Promise => { + const encounter = globalScene.currentBattle.mysteryEncounter!; const onPokemonSelected = (pokemon: PlayerPokemon) => { // Get Pokemon held items and filter for valid ones const validItems = pokemon.getHeldItems().filter((it) => { @@ -359,18 +365,18 @@ export const GlobalTradeSystemEncounter: MysteryEncounter = return it.isTransferable; }).length > 0; if (!meetsReqs) { - return getEncounterText(scene, `${namespace}:option.3.invalid_selection`) ?? null; + return getEncounterText(`${namespace}:option.3.invalid_selection`) ?? null; } return null; }; - return selectPokemonForOption(scene, onPokemonSelected, undefined, selectableFilter); + return selectPokemonForOption(onPokemonSelected, undefined, selectableFilter); }) - .withOptionPhase(async (scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOptionPhase(async () => { + const encounter = globalScene.currentBattle.mysteryEncounter!; const modifier = encounter.misc.chosenModifier as PokemonHeldItemModifier; - const party = scene.getPlayerParty(); + const party = globalScene.getPlayerParty(); const chosenPokemon: PlayerPokemon = encounter.misc.chosenPokemon; // Check tier of the traded item, the received item will be one tier up @@ -397,16 +403,16 @@ export const GlobalTradeSystemEncounter: MysteryEncounter = } encounter.setDialogueToken("itemName", item.type.name); - setEncounterRewards(scene, { guaranteedModifierTypeOptions: [ item ], fillRemaining: false }); + setEncounterRewards({ guaranteedModifierTypeOptions: [ item ], fillRemaining: false }); chosenPokemon.loseHeldItem(modifier, false); - await scene.updateModifiers(true, true); + await globalScene.updateModifiers(true, true); // Generate a trainer name const traderName = generateRandomTraderName(); encounter.setDialogueToken("tradeTrainerName", traderName.trim()); - await showEncounterText(scene, `${namespace}:item_trade_selected`); - leaveEncounterWithoutBattle(scene); + await showEncounterText(`${namespace}:item_trade_selected`); + leaveEncounterWithoutBattle(); }) .build() ) @@ -420,30 +426,30 @@ export const GlobalTradeSystemEncounter: MysteryEncounter = }, ], }, - async (scene: BattleScene) => { + async () => { // Leave encounter with no rewards or exp - leaveEncounterWithoutBattle(scene, true); + leaveEncounterWithoutBattle(true); return true; } ) .build(); -function getPokemonTradeOptions(scene: BattleScene): Map { +function getPokemonTradeOptions(): Map { const tradeOptionsMap: Map = new Map(); // Starts by filtering out any current party members as valid resulting species - const alreadyUsedSpecies: PokemonSpecies[] = scene.getPlayerParty().map(p => p.species); + const alreadyUsedSpecies: PokemonSpecies[] = globalScene.getPlayerParty().map(p => p.species); - scene.getPlayerParty().forEach(pokemon => { + globalScene.getPlayerParty().forEach(pokemon => { // If the party member is legendary/mythical, the only trade options available are always pulled from generation-specific legendary trade pools if (pokemon.species.legendary || pokemon.species.subLegendary || pokemon.species.mythical) { const generation = pokemon.species.generation; const tradeOptions: EnemyPokemon[] = LEGENDARY_TRADE_POOLS[generation].map(s => { const pokemonSpecies = getPokemonSpecies(s); - return new EnemyPokemon(scene, pokemonSpecies, 5, TrainerSlot.NONE, false); + return new EnemyPokemon(pokemonSpecies, 5, TrainerSlot.NONE, false); }); tradeOptionsMap.set(pokemon.id, tradeOptions); } else { - const originalBst = pokemon.calculateBaseStats().reduce((a, b) => a + b, 0); + const originalBst = pokemon.getSpeciesForm().getBaseStatTotal(); const tradeOptions: PokemonSpecies[] = []; for (let i = 0; i < 3; i++) { @@ -454,7 +460,7 @@ function getPokemonTradeOptions(scene: BattleScene): Map // Add trade options to map tradeOptionsMap.set(pokemon.id, tradeOptions.map(s => { - return new EnemyPokemon(scene, s, pokemon.level, TrainerSlot.NONE, false); + return new EnemyPokemon(s, pokemon.level, TrainerSlot.NONE, false); })); } }); @@ -497,28 +503,28 @@ function generateTradeOption(alreadyUsedSpecies: PokemonSpecies[], originalBst?: return newSpecies!; } -function showTradeBackground(scene: BattleScene) { +function showTradeBackground() { return new Promise(resolve => { - const tradeContainer = scene.add.container(0, -scene.game.canvas.height / 6); + const tradeContainer = globalScene.add.container(0, -globalScene.game.canvas.height / 6); tradeContainer.setName("Trade Background"); - const flyByStaticBg = scene.add.rectangle(0, 0, scene.game.canvas.width / 6, scene.game.canvas.height / 6, 0); + const flyByStaticBg = globalScene.add.rectangle(0, 0, globalScene.game.canvas.width / 6, globalScene.game.canvas.height / 6, 0); flyByStaticBg.setName("Black Background"); flyByStaticBg.setOrigin(0, 0); flyByStaticBg.setVisible(false); tradeContainer.add(flyByStaticBg); - const tradeBaseBg = scene.add.image(0, 0, "default_bg"); + const tradeBaseBg = globalScene.add.image(0, 0, "default_bg"); tradeBaseBg.setName("Trade Background Image"); tradeBaseBg.setOrigin(0, 0); tradeContainer.add(tradeBaseBg); - scene.fieldUI.add(tradeContainer); - scene.fieldUI.bringToTop(tradeContainer); + globalScene.fieldUI.add(tradeContainer); + globalScene.fieldUI.bringToTop(tradeContainer); tradeContainer.setVisible(true); tradeContainer.alpha = 0; - scene.tweens.add({ + globalScene.tweens.add({ targets: tradeContainer, alpha: 1, duration: 500, @@ -530,17 +536,17 @@ function showTradeBackground(scene: BattleScene) { }); } -function hideTradeBackground(scene: BattleScene) { +function hideTradeBackground() { return new Promise(resolve => { - const transformationContainer = scene.fieldUI.getByName("Trade Background"); + const transformationContainer = globalScene.fieldUI.getByName("Trade Background"); - scene.tweens.add({ + globalScene.tweens.add({ targets: transformationContainer, alpha: 0, duration: 1000, ease: "Sine.easeInOut", onComplete: () => { - scene.fieldUI.remove(transformationContainer, true); + globalScene.fieldUI.remove(transformationContainer, true); resolve(); } }); @@ -549,13 +555,12 @@ function hideTradeBackground(scene: BattleScene) { /** * Initiates an "evolution-like" animation to transform a previousPokemon (presumably from the player's party) into a new one, not necessarily an evolution species. - * @param scene * @param tradedPokemon * @param receivedPokemon */ -function doPokemonTradeSequence(scene: BattleScene, tradedPokemon: PlayerPokemon, receivedPokemon: PlayerPokemon) { +function doPokemonTradeSequence(tradedPokemon: PlayerPokemon, receivedPokemon: PlayerPokemon) { return new Promise(resolve => { - const tradeContainer = scene.fieldUI.getByName("Trade Background") as Phaser.GameObjects.Container; + const tradeContainer = globalScene.fieldUI.getByName("Trade Background") as Phaser.GameObjects.Container; const tradeBaseBg = tradeContainer.getByName("Trade Background Image") as Phaser.GameObjects.Image; let tradedPokemonSprite: Phaser.GameObjects.Sprite; @@ -564,8 +569,8 @@ function doPokemonTradeSequence(scene: BattleScene, tradedPokemon: PlayerPokemon let receivedPokemonTintSprite: Phaser.GameObjects.Sprite; const getPokemonSprite = () => { - const ret = scene.addPokemonSprite(tradedPokemon, tradeBaseBg.displayWidth / 2, tradeBaseBg.displayHeight / 2, "pkmn__sub"); - ret.setPipeline(scene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], ignoreTimeTint: true }); + const ret = globalScene.addPokemonSprite(tradedPokemon, tradeBaseBg.displayWidth / 2, tradeBaseBg.displayHeight / 2, "pkmn__sub"); + ret.setPipeline(globalScene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], ignoreTimeTint: true }); return ret; }; @@ -589,7 +594,7 @@ function doPokemonTradeSequence(scene: BattleScene, tradedPokemon: PlayerPokemon console.error(`Failed to play animation for ${spriteKey}`, err); } - sprite.setPipeline(scene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], hasShadow: false, teraColor: getTypeRgb(tradedPokemon.getTeraType()) }); + sprite.setPipeline(globalScene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], hasShadow: false, teraColor: getTypeRgb(tradedPokemon.getTeraType()), isTerastallized: tradedPokemon.isTerastallized }); sprite.setPipelineData("ignoreTimeTint", true); sprite.setPipelineData("spriteKey", tradedPokemon.getSpriteKey()); sprite.setPipelineData("shiny", tradedPokemon.shiny); @@ -610,7 +615,7 @@ function doPokemonTradeSequence(scene: BattleScene, tradedPokemon: PlayerPokemon console.error(`Failed to play animation for ${spriteKey}`, err); } - sprite.setPipeline(scene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], hasShadow: false, teraColor: getTypeRgb(tradedPokemon.getTeraType()) }); + sprite.setPipeline(globalScene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], hasShadow: false, teraColor: getTypeRgb(tradedPokemon.getTeraType()), isTerastallized: tradedPokemon.isTerastallized }); sprite.setPipelineData("ignoreTimeTint", true); sprite.setPipelineData("spriteKey", receivedPokemon.getSpriteKey()); sprite.setPipelineData("shiny", receivedPokemon.shiny); @@ -625,45 +630,45 @@ function doPokemonTradeSequence(scene: BattleScene, tradedPokemon: PlayerPokemon // Traded pokemon pokeball const tradedPbAtlasKey = getPokeballAtlasKey(tradedPokemon.pokeball); - const tradedPokeball: Phaser.GameObjects.Sprite = scene.add.sprite(tradeBaseBg.displayWidth / 2, tradeBaseBg.displayHeight / 2, "pb", tradedPbAtlasKey); + const tradedPokeball: Phaser.GameObjects.Sprite = globalScene.add.sprite(tradeBaseBg.displayWidth / 2, tradeBaseBg.displayHeight / 2, "pb", tradedPbAtlasKey); tradedPokeball.setVisible(false); tradeContainer.add(tradedPokeball); // Received pokemon pokeball const receivedPbAtlasKey = getPokeballAtlasKey(receivedPokemon.pokeball); - const receivedPokeball: Phaser.GameObjects.Sprite = scene.add.sprite(tradeBaseBg.displayWidth / 2, tradeBaseBg.displayHeight / 2, "pb", receivedPbAtlasKey); + const receivedPokeball: Phaser.GameObjects.Sprite = globalScene.add.sprite(tradeBaseBg.displayWidth / 2, tradeBaseBg.displayHeight / 2, "pb", receivedPbAtlasKey); receivedPokeball.setVisible(false); tradeContainer.add(receivedPokeball); - scene.tweens.add({ + globalScene.tweens.add({ targets: tradedPokemonSprite, alpha: 1, ease: "Cubic.easeInOut", duration: 500, onComplete: async () => { - scene.fadeOutBgm(1000, false); - await showEncounterText(scene, `${namespace}:pokemon_trade_selected`); + globalScene.fadeOutBgm(1000, false); + await showEncounterText(`${namespace}:pokemon_trade_selected`); tradedPokemon.cry(); - scene.playBgm("evolution"); - await showEncounterText(scene, `${namespace}:pokemon_trade_goodbye`); + globalScene.playBgm("evolution"); + await showEncounterText(`${namespace}:pokemon_trade_goodbye`); tradedPokeball.setAlpha(0); tradedPokeball.setVisible(true); - scene.tweens.add({ + globalScene.tweens.add({ targets: tradedPokeball, alpha: 1, ease: "Cubic.easeInOut", duration: 250, onComplete: () => { tradedPokeball.setTexture("pb", `${tradedPbAtlasKey}_opening`); - scene.time.delayedCall(17, () => tradedPokeball.setTexture("pb", `${tradedPbAtlasKey}_open`)); - scene.playSound("se/pb_rel"); + globalScene.time.delayedCall(17, () => tradedPokeball.setTexture("pb", `${tradedPbAtlasKey}_open`)); + globalScene.playSound("se/pb_rel"); tradedPokemonTintSprite.setVisible(true); // TODO: need to add particles to fieldUI instead of field - // addPokeballOpenParticles(scene, tradedPokemon.x, tradedPokemon.y, tradedPokemon.pokeball); + // addPokeballOpenParticles(tradedPokemon.x, tradedPokemon.y, tradedPokemon.pokeball); - scene.tweens.add({ + globalScene.tweens.add({ targets: [ tradedPokemonTintSprite, tradedPokemonSprite ], duration: 500, ease: "Sine.easeIn", @@ -672,30 +677,30 @@ function doPokemonTradeSequence(scene: BattleScene, tradedPokemon: PlayerPokemon tradedPokemonSprite.setVisible(false); tradedPokeball.setTexture("pb", `${tradedPbAtlasKey}_opening`); tradedPokemonTintSprite.setVisible(false); - scene.playSound("se/pb_catch"); - scene.time.delayedCall(17, () => tradedPokeball.setTexture("pb", `${tradedPbAtlasKey}`)); + globalScene.playSound("se/pb_catch"); + globalScene.time.delayedCall(17, () => tradedPokeball.setTexture("pb", `${tradedPbAtlasKey}`)); - scene.tweens.add({ + globalScene.tweens.add({ targets: tradedPokeball, y: "+=10", duration: 200, delay: 250, ease: "Cubic.easeIn", onComplete: () => { - scene.playSound("se/pb_bounce_1"); + globalScene.playSound("se/pb_bounce_1"); - scene.tweens.add({ + globalScene.tweens.add({ targets: tradedPokeball, y: "-=100", duration: 200, delay: 1000, ease: "Cubic.easeInOut", onStart: () => { - scene.playSound("se/pb_throw"); + globalScene.playSound("se/pb_throw"); }, onComplete: async () => { - await doPokemonTradeFlyBySequence(scene, tradedPokemonSprite, receivedPokemonSprite); - await doTradeReceivedSequence(scene, receivedPokemon, receivedPokemonSprite, receivedPokemonTintSprite, receivedPokeball, receivedPbAtlasKey); + await doPokemonTradeFlyBySequence(tradedPokemonSprite, receivedPokemonSprite); + await doTradeReceivedSequence(receivedPokemon, receivedPokemonSprite, receivedPokemonTintSprite, receivedPokeball, receivedPbAtlasKey); resolve(); } }); @@ -710,9 +715,9 @@ function doPokemonTradeSequence(scene: BattleScene, tradedPokemon: PlayerPokemon }); } -function doPokemonTradeFlyBySequence(scene: BattleScene, tradedPokemonSprite: Phaser.GameObjects.Sprite, receivedPokemonSprite: Phaser.GameObjects.Sprite) { +function doPokemonTradeFlyBySequence(tradedPokemonSprite: Phaser.GameObjects.Sprite, receivedPokemonSprite: Phaser.GameObjects.Sprite) { return new Promise(resolve => { - const tradeContainer = scene.fieldUI.getByName("Trade Background") as Phaser.GameObjects.Container; + const tradeContainer = globalScene.fieldUI.getByName("Trade Background") as Phaser.GameObjects.Container; const tradeBaseBg = tradeContainer.getByName("Trade Background Image") as Phaser.GameObjects.Image; const flyByStaticBg = tradeContainer.getByName("Black Background") as Phaser.GameObjects.Rectangle; flyByStaticBg.setVisible(true); @@ -733,47 +738,47 @@ function doPokemonTradeFlyBySequence(scene: BattleScene, tradedPokemonSprite: Ph const BASE_ANIM_DURATION = 1000; // Fade out trade background - scene.tweens.add({ + globalScene.tweens.add({ targets: tradeBaseBg, alpha: 0, ease: "Cubic.easeInOut", duration: FADE_DELAY, onComplete: () => { - scene.tweens.add({ + globalScene.tweens.add({ targets: [ receivedPokemonSprite, tradedPokemonSprite ], y: tradeBaseBg.displayWidth / 2 - 100, ease: "Cubic.easeInOut", duration: BASE_ANIM_DURATION * 3, onComplete: () => { - scene.tweens.add({ + globalScene.tweens.add({ targets: receivedPokemonSprite, x: tradeBaseBg.displayWidth / 4, ease: "Cubic.easeInOut", duration: BASE_ANIM_DURATION / 2, delay: ANIM_DELAY }); - scene.tweens.add({ + globalScene.tweens.add({ targets: tradedPokemonSprite, x: tradeBaseBg.displayWidth * 3 / 4, ease: "Cubic.easeInOut", duration: BASE_ANIM_DURATION / 2, delay: ANIM_DELAY, onComplete: () => { - scene.tweens.add({ + globalScene.tweens.add({ targets: receivedPokemonSprite, y: "+=200", ease: "Cubic.easeInOut", duration: BASE_ANIM_DURATION * 2, delay: ANIM_DELAY, }); - scene.tweens.add({ + globalScene.tweens.add({ targets: tradedPokemonSprite, y: "-=200", ease: "Cubic.easeInOut", duration: BASE_ANIM_DURATION * 2, delay: ANIM_DELAY, onComplete: () => { - scene.tweens.add({ + globalScene.tweens.add({ targets: tradeBaseBg, alpha: 1, ease: "Cubic.easeInOut", @@ -793,9 +798,9 @@ function doPokemonTradeFlyBySequence(scene: BattleScene, tradedPokemonSprite: Ph }); } -function doTradeReceivedSequence(scene: BattleScene, receivedPokemon: PlayerPokemon, receivedPokemonSprite: Phaser.GameObjects.Sprite, receivedPokemonTintSprite: Phaser.GameObjects.Sprite, receivedPokeballSprite: Phaser.GameObjects.Sprite, receivedPbAtlasKey: string) { +function doTradeReceivedSequence(receivedPokemon: PlayerPokemon, receivedPokemonSprite: Phaser.GameObjects.Sprite, receivedPokemonTintSprite: Phaser.GameObjects.Sprite, receivedPokeballSprite: Phaser.GameObjects.Sprite, receivedPbAtlasKey: string) { return new Promise(resolve => { - const tradeContainer = scene.fieldUI.getByName("Trade Background") as Phaser.GameObjects.Container; + const tradeContainer = globalScene.fieldUI.getByName("Trade Background") as Phaser.GameObjects.Container; const tradeBaseBg = tradeContainer.getByName("Trade Background Image") as Phaser.GameObjects.Image; receivedPokemonSprite.setVisible(false); @@ -812,7 +817,7 @@ function doTradeReceivedSequence(scene: BattleScene, receivedPokemon: PlayerPoke // Received pokemon sparkles let pokemonShinySparkle: Phaser.GameObjects.Sprite; if (receivedPokemon.shiny) { - pokemonShinySparkle = scene.add.sprite(receivedPokemonSprite.x, receivedPokemonSprite.y, "shiny"); + pokemonShinySparkle = globalScene.add.sprite(receivedPokemonSprite.x, receivedPokemonSprite.y, "shiny"); pokemonShinySparkle.setVisible(false); tradeContainer.add(pokemonShinySparkle); } @@ -820,19 +825,19 @@ function doTradeReceivedSequence(scene: BattleScene, receivedPokemon: PlayerPoke const BASE_ANIM_DURATION = 1000; // Pokeball falls to the screen - scene.playSound("se/pb_throw"); - scene.tweens.add({ + globalScene.playSound("se/pb_throw"); + globalScene.tweens.add({ targets: receivedPokeballSprite, y: "+=100", ease: "Cubic.easeInOut", duration: BASE_ANIM_DURATION, onComplete: () => { - scene.playSound("se/pb_bounce_1"); - scene.time.delayedCall(100, () => scene.playSound("se/pb_bounce_1")); + globalScene.playSound("se/pb_bounce_1"); + globalScene.time.delayedCall(100, () => globalScene.playSound("se/pb_bounce_1")); - scene.time.delayedCall(2000, () => { - scene.playSound("se/pb_rel"); - scene.fadeOutBgm(500, false); + globalScene.time.delayedCall(2000, () => { + globalScene.playSound("se/pb_rel"); + globalScene.fadeOutBgm(500, false); receivedPokemon.cry(); receivedPokemonTintSprite.scale = 0.25; receivedPokemonTintSprite.alpha = 1; @@ -841,14 +846,14 @@ function doTradeReceivedSequence(scene: BattleScene, receivedPokemon: PlayerPoke receivedPokemonTintSprite.alpha = 1; receivedPokemonTintSprite.setVisible(true); receivedPokeballSprite.setTexture("pb", `${receivedPbAtlasKey}_opening`); - scene.time.delayedCall(17, () => receivedPokeballSprite.setTexture("pb", `${receivedPbAtlasKey}_open`)); - scene.tweens.add({ + globalScene.time.delayedCall(17, () => receivedPokeballSprite.setTexture("pb", `${receivedPbAtlasKey}_open`)); + globalScene.tweens.add({ targets: receivedPokemonSprite, duration: 250, ease: "Sine.easeOut", scale: 1 }); - scene.tweens.add({ + globalScene.tweens.add({ targets: receivedPokemonTintSprite, duration: 250, ease: "Sine.easeOut", @@ -856,12 +861,12 @@ function doTradeReceivedSequence(scene: BattleScene, receivedPokemon: PlayerPoke alpha: 0, onComplete: () => { if (receivedPokemon.shiny) { - scene.time.delayedCall(500, () => { - doShinySparkleAnim(scene, pokemonShinySparkle, receivedPokemon.variant); + globalScene.time.delayedCall(500, () => { + doShinySparkleAnim(pokemonShinySparkle, receivedPokemon.variant); }); } receivedPokeballSprite.destroy(); - scene.time.delayedCall(2000, () => resolve()); + globalScene.time.delayedCall(2000, () => resolve()); } }); }); diff --git a/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts b/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts index a8cb076bbe9..34c808359b7 100644 --- a/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts +++ b/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts @@ -2,8 +2,9 @@ import { getPokemonSpecies } from "#app/data/pokemon-species"; import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import BattleScene from "#app/battle-scene"; -import MysteryEncounter, { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; +import { globalScene } from "#app/global-scene"; +import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; import { leaveEncounterWithoutBattle, setEncounterExp } from "../utils/encounter-phase-utils"; import { applyDamageToPokemon } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; @@ -41,8 +42,8 @@ export const LostAtSeaEncounter: MysteryEncounter = MysteryEncounterBuilder.with }, ]) .withIntroDialogue([{ text: `${namespace}:intro` }]) - .withOnInit((scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOnInit(() => { + const encounter = globalScene.currentBattle.mysteryEncounter!; encounter.setDialogueToken("damagePercentage", String(DAMAGE_PERCENTAGE)); encounter.setDialogueToken("option1RequiredMove", new PokemonMove(OPTION_1_REQUIRED_MOVE).getName()); @@ -70,7 +71,7 @@ export const LostAtSeaEncounter: MysteryEncounter = MysteryEncounterBuilder.with }, ], }) - .withOptionPhase(async (scene: BattleScene) => handlePokemonGuidingYouPhase(scene)) + .withOptionPhase(async () => handlePokemonGuidingYouPhase()) .build() ) .withOption( @@ -89,7 +90,7 @@ export const LostAtSeaEncounter: MysteryEncounter = MysteryEncounterBuilder.with }, ], }) - .withOptionPhase(async (scene: BattleScene) => handlePokemonGuidingYouPhase(scene)) + .withOptionPhase(async () => handlePokemonGuidingYouPhase()) .build() ) .withSimpleOption( @@ -103,16 +104,16 @@ export const LostAtSeaEncounter: MysteryEncounter = MysteryEncounterBuilder.with }, ], }, - async (scene: BattleScene) => { - const allowedPokemon = scene.getPlayerParty().filter((p) => p.isAllowedInBattle()); + async () => { + const allowedPokemon = globalScene.getPlayerParty().filter((p) => p.isAllowedInBattle()); for (const pkm of allowedPokemon) { const percentage = DAMAGE_PERCENTAGE / 100; const damage = Math.floor(pkm.getMaxHp() * percentage); - applyDamageToPokemon(scene, pkm, damage); + applyDamageToPokemon(pkm, damage); } - leaveEncounterWithoutBattle(scene); + leaveEncounterWithoutBattle(); return true; } @@ -126,19 +127,17 @@ export const LostAtSeaEncounter: MysteryEncounter = MysteryEncounterBuilder.with /** * Generic handler for using a guiding pokemon to guide you back. - * - * @param scene Battle scene */ -function handlePokemonGuidingYouPhase(scene: BattleScene) { +function handlePokemonGuidingYouPhase() { const laprasSpecies = getPokemonSpecies(Species.LAPRAS); - const { mysteryEncounter } = scene.currentBattle; + const { mysteryEncounter } = globalScene.currentBattle; if (mysteryEncounter?.selectedOption?.primaryPokemon?.id) { - setEncounterExp(scene, mysteryEncounter.selectedOption.primaryPokemon.id, laprasSpecies.baseExp, true); + setEncounterExp(mysteryEncounter.selectedOption.primaryPokemon.id, laprasSpecies.baseExp, true); } else { console.warn("Lost at sea: No guide pokemon found but pokemon guides player. huh!?"); } - leaveEncounterWithoutBattle(scene); + leaveEncounterWithoutBattle(); return true; } diff --git a/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts b/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts index 7fdd29d36a2..36e12b34e10 100644 --- a/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts +++ b/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts @@ -1,5 +1,6 @@ +import type { + EnemyPartyConfig } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { - EnemyPartyConfig, initBattleWithEnemyConfig, setEncounterRewards, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; @@ -13,9 +14,10 @@ import { ModifierTier } from "#app/modifier/modifier-tier"; import { modifierTypes } from "#app/modifier/modifier-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { PartyMemberStrength } from "#enums/party-member-strength"; -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import * as Utils from "#app/utils"; -import MysteryEncounter, { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; +import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; @@ -37,12 +39,12 @@ export const MysteriousChallengersEncounter: MysteryEncounter = text: `${namespace}:intro`, }, ]) - .withOnInit((scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOnInit(() => { + const encounter = globalScene.currentBattle.mysteryEncounter!; // Calculates what trainers are available for battle in the encounter // Normal difficulty trainer is randomly pulled from biome - const normalTrainerType = scene.arena.randomTrainerType(scene.currentBattle.waveIndex); + const normalTrainerType = globalScene.arena.randomTrainerType(globalScene.currentBattle.waveIndex); const normalConfig = trainerConfigs[normalTrainerType].clone(); let female = false; if (normalConfig.hasGenders) { @@ -57,16 +59,16 @@ export const MysteriousChallengersEncounter: MysteryEncounter = // Hard difficulty trainer is another random trainer, but with AVERAGE_BALANCED config // Number of mons is based off wave: 1-20 is 2, 20-40 is 3, etc. capping at 6 after wave 100 let retries = 0; - let hardTrainerType = scene.arena.randomTrainerType(scene.currentBattle.waveIndex); + let hardTrainerType = globalScene.arena.randomTrainerType(globalScene.currentBattle.waveIndex); while (retries < 5 && hardTrainerType === normalTrainerType) { // Will try to use a different trainer from the normal trainer type - hardTrainerType = scene.arena.randomTrainerType(scene.currentBattle.waveIndex); + hardTrainerType = globalScene.arena.randomTrainerType(globalScene.currentBattle.waveIndex); retries++; } const hardTemplate = new TrainerPartyCompoundTemplate( new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER, false, true), new TrainerPartyTemplate( - Math.min(Math.ceil(scene.currentBattle.waveIndex / 20), 5), + Math.min(Math.ceil(globalScene.currentBattle.waveIndex / 20), 5), PartyMemberStrength.AVERAGE, false, true @@ -87,8 +89,8 @@ export const MysteriousChallengersEncounter: MysteryEncounter = // Brutal trainer is pulled from pool of boss trainers (gym leaders) for the biome // They are given an E4 template team, so will be stronger than usual boss encounter and always have 6 mons - const brutalTrainerType = scene.arena.randomTrainerType( - scene.currentBattle.waveIndex, + const brutalTrainerType = globalScene.arena.randomTrainerType( + globalScene.currentBattle.waveIndex, true ); const e4Template = trainerPartyTemplates.ELITE_FOUR; @@ -145,18 +147,18 @@ export const MysteriousChallengersEncounter: MysteryEncounter = }, ], }, - async (scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + async () => { + const encounter = globalScene.currentBattle.mysteryEncounter!; // Spawn standard trainer battle with memory mushroom reward const config: EnemyPartyConfig = encounter.enemyPartyConfigs[0]; - setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [ modifierTypes.TM_COMMON, modifierTypes.TM_GREAT, modifierTypes.MEMORY_MUSHROOM ], fillRemaining: true }); + setEncounterRewards({ guaranteedModifierTypeFuncs: [ modifierTypes.TM_COMMON, modifierTypes.TM_GREAT, modifierTypes.MEMORY_MUSHROOM ], fillRemaining: true }); // Seed offsets to remove possibility of different trainers having exact same teams let initBattlePromise: Promise; - scene.executeWithSeedOffset(() => { - initBattlePromise = initBattleWithEnemyConfig(scene, config); - }, scene.currentBattle.waveIndex * 10); + globalScene.executeWithSeedOffset(() => { + initBattlePromise = initBattleWithEnemyConfig(config); + }, globalScene.currentBattle.waveIndex * 10); await initBattlePromise!; } ) @@ -170,18 +172,18 @@ export const MysteriousChallengersEncounter: MysteryEncounter = }, ], }, - async (scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + async () => { + const encounter = globalScene.currentBattle.mysteryEncounter!; // Spawn hard fight const config: EnemyPartyConfig = encounter.enemyPartyConfigs[1]; - setEncounterRewards(scene, { guaranteedModifierTiers: [ ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.GREAT, ModifierTier.GREAT ], fillRemaining: true }); + setEncounterRewards({ guaranteedModifierTiers: [ ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.GREAT, ModifierTier.GREAT ], fillRemaining: true }); // Seed offsets to remove possibility of different trainers having exact same teams let initBattlePromise: Promise; - scene.executeWithSeedOffset(() => { - initBattlePromise = initBattleWithEnemyConfig(scene, config); - }, scene.currentBattle.waveIndex * 100); + globalScene.executeWithSeedOffset(() => { + initBattlePromise = initBattleWithEnemyConfig(config); + }, globalScene.currentBattle.waveIndex * 100); await initBattlePromise!; } ) @@ -195,21 +197,21 @@ export const MysteriousChallengersEncounter: MysteryEncounter = }, ], }, - async (scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + async () => { + const encounter = globalScene.currentBattle.mysteryEncounter!; // Spawn brutal fight const config: EnemyPartyConfig = encounter.enemyPartyConfigs[2]; // To avoid player level snowballing from picking this option encounter.expMultiplier = 0.9; - setEncounterRewards(scene, { guaranteedModifierTiers: [ ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.GREAT ], fillRemaining: true }); + setEncounterRewards({ guaranteedModifierTiers: [ ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.GREAT ], fillRemaining: true }); // Seed offsets to remove possibility of different trainers having exact same teams let initBattlePromise: Promise; - scene.executeWithSeedOffset(() => { - initBattlePromise = initBattleWithEnemyConfig(scene, config); - }, scene.currentBattle.waveIndex * 1000); + globalScene.executeWithSeedOffset(() => { + initBattlePromise = initBattleWithEnemyConfig(config); + }, globalScene.currentBattle.waveIndex * 1000); await initBattlePromise!; } ) diff --git a/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts b/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts index 877deee66b7..9b4999020d0 100644 --- a/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts +++ b/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts @@ -1,8 +1,10 @@ -import BattleScene from "#app/battle-scene"; -import MysteryEncounter, { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; +import { globalScene } from "#app/global-scene"; +import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; import { queueEncounterMessage, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; -import { EnemyPartyConfig, initBattleWithEnemyConfig, leaveEncounterWithoutBattle, setEncounterRewards, transitionMysteryEncounterIntroVisuals } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import type { EnemyPartyConfig } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import { initBattleWithEnemyConfig, leaveEncounterWithoutBattle, setEncounterRewards, transitionMysteryEncounterIntroVisuals } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { getHighestLevelPlayerPokemon, koPlayerPokemon } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; @@ -66,8 +68,8 @@ export const MysteriousChestEncounter: MysteryEncounter = .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) - .withOnInit((scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOnInit(() => { + const encounter = globalScene.currentBattle.mysteryEncounter!; // Calculate boss mon const config: EnemyPartyConfig = { @@ -106,9 +108,9 @@ export const MysteriousChestEncounter: MysteryEncounter = }, ], }) - .withPreOptionPhase(async (scene: BattleScene) => { + .withPreOptionPhase(async () => { // Play animation - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; const introVisuals = encounter.introVisuals!; // Determine roll first @@ -128,13 +130,13 @@ export const MysteriousChestEncounter: MysteryEncounter = introVisuals.spriteConfigs[1].disableAnimation = false; introVisuals.playAnim(); }) - .withOptionPhase(async (scene: BattleScene) => { + .withOptionPhase(async () => { // Open the chest - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; const roll = encounter.misc.roll; if (roll >= RAND_LENGTH - COMMON_REWARDS_PERCENT) { // Choose between 2 COMMON / 2 GREAT tier items (20%) - setEncounterRewards(scene, { + setEncounterRewards({ guaranteedModifierTiers: [ ModifierTier.COMMON, ModifierTier.COMMON, @@ -143,11 +145,11 @@ export const MysteriousChestEncounter: MysteryEncounter = ], }); // Display result message then proceed to rewards - queueEncounterMessage(scene, `${namespace}:option.1.normal`); - leaveEncounterWithoutBattle(scene); + queueEncounterMessage(`${namespace}:option.1.normal`); + leaveEncounterWithoutBattle(); } else if (roll >= RAND_LENGTH - COMMON_REWARDS_PERCENT - ULTRA_REWARDS_PERCENT) { // Choose between 3 ULTRA tier items (30%) - setEncounterRewards(scene, { + setEncounterRewards({ guaranteedModifierTiers: [ ModifierTier.ULTRA, ModifierTier.ULTRA, @@ -155,39 +157,39 @@ export const MysteriousChestEncounter: MysteryEncounter = ], }); // Display result message then proceed to rewards - queueEncounterMessage(scene, `${namespace}:option.1.good`); - leaveEncounterWithoutBattle(scene); + queueEncounterMessage(`${namespace}:option.1.good`); + leaveEncounterWithoutBattle(); } else if (roll >= RAND_LENGTH - COMMON_REWARDS_PERCENT - ULTRA_REWARDS_PERCENT - ROGUE_REWARDS_PERCENT) { // Choose between 2 ROGUE tier items (10%) - setEncounterRewards(scene, { guaranteedModifierTiers: [ ModifierTier.ROGUE, ModifierTier.ROGUE ]}); + setEncounterRewards({ guaranteedModifierTiers: [ ModifierTier.ROGUE, ModifierTier.ROGUE ]}); // Display result message then proceed to rewards - queueEncounterMessage(scene, `${namespace}:option.1.great`); - leaveEncounterWithoutBattle(scene); + queueEncounterMessage(`${namespace}:option.1.great`); + leaveEncounterWithoutBattle(); } else if (roll >= RAND_LENGTH - COMMON_REWARDS_PERCENT - ULTRA_REWARDS_PERCENT - ROGUE_REWARDS_PERCENT - MASTER_REWARDS_PERCENT) { // Choose 1 MASTER tier item (5%) - setEncounterRewards(scene, { guaranteedModifierTiers: [ ModifierTier.MASTER ]}); + setEncounterRewards({ guaranteedModifierTiers: [ ModifierTier.MASTER ]}); // Display result message then proceed to rewards - queueEncounterMessage(scene, `${namespace}:option.1.amazing`); - leaveEncounterWithoutBattle(scene); + queueEncounterMessage(`${namespace}:option.1.amazing`); + leaveEncounterWithoutBattle(); } else { // Your highest level unfainted Pokemon gets OHKO. Start battle against a Gimmighoul (35%) - const highestLevelPokemon = getHighestLevelPlayerPokemon(scene, true, false); - koPlayerPokemon(scene, highestLevelPokemon); + const highestLevelPokemon = getHighestLevelPlayerPokemon(true, false); + koPlayerPokemon(highestLevelPokemon); encounter.setDialogueToken("pokeName", highestLevelPokemon.getNameToRender()); - await showEncounterText(scene, `${namespace}:option.1.bad`); + await showEncounterText(`${namespace}:option.1.bad`); // Handle game over edge case - const allowedPokemon = scene.getPokemonAllowedInBattle(); + const allowedPokemon = globalScene.getPokemonAllowedInBattle(); if (allowedPokemon.length === 0) { // If there are no longer any legal pokemon in the party, game over. - scene.clearPhaseQueue(); - scene.unshiftPhase(new GameOverPhase(scene)); + globalScene.clearPhaseQueue(); + globalScene.unshiftPhase(new GameOverPhase()); } else { // Show which Pokemon was KOed, then start battle against Gimmighoul - await transitionMysteryEncounterIntroVisuals(scene, true, true, 500); - setEncounterRewards(scene, { fillRemaining: true }); - await initBattleWithEnemyConfig(scene, encounter.enemyPartyConfigs[0]); + await transitionMysteryEncounterIntroVisuals(true, true, 500); + setEncounterRewards({ fillRemaining: true }); + await initBattleWithEnemyConfig(encounter.enemyPartyConfigs[0]); } } }) @@ -203,9 +205,9 @@ export const MysteriousChestEncounter: MysteryEncounter = }, ], }, - async (scene: BattleScene) => { + async () => { // Leave encounter with no rewards or exp - leaveEncounterWithoutBattle(scene, true); + leaveEncounterWithoutBattle(true); return true; } ) diff --git a/src/data/mystery-encounters/encounters/part-timer-encounter.ts b/src/data/mystery-encounters/encounters/part-timer-encounter.ts index 092d2ab2673..4db8e2eb6e8 100644 --- a/src/data/mystery-encounters/encounters/part-timer-encounter.ts +++ b/src/data/mystery-encounters/encounters/part-timer-encounter.ts @@ -1,8 +1,9 @@ import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; import { leaveEncounterWithoutBattle, selectPokemonForOption, setEncounterExp, setEncounterRewards, transitionMysteryEncounterIntroVisuals, updatePlayerMoney } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import BattleScene from "#app/battle-scene"; -import MysteryEncounter, { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; +import { globalScene } from "#app/global-scene"; +import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MoveRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; @@ -10,7 +11,8 @@ import { Stat } from "#enums/stat"; import { CHARMING_MOVES } from "#app/data/mystery-encounters/requirements/requirement-groups"; import { showEncounterDialogue, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import i18next from "i18next"; -import Pokemon, { PlayerPokemon } from "#app/field/pokemon"; +import type { PlayerPokemon } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; import { isPokemonValidForEncounterOptionSelection } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; @@ -52,20 +54,20 @@ export const PartTimerEncounter: MysteryEncounter = text: `${namespace}:intro_dialogue`, }, ]) - .withOnInit((scene: BattleScene) => { + .withOnInit(() => { // Load sfx - scene.loadSe("PRSFX- Horn Drill1", "battle_anims", "PRSFX- Horn Drill1.wav"); - scene.loadSe("PRSFX- Horn Drill3", "battle_anims", "PRSFX- Horn Drill3.wav"); - scene.loadSe("PRSFX- Guillotine2", "battle_anims", "PRSFX- Guillotine2.wav"); - scene.loadSe("PRSFX- Heavy Slam2", "battle_anims", "PRSFX- Heavy Slam2.wav"); + globalScene.loadSe("PRSFX- Horn Drill1", "battle_anims", "PRSFX- Horn Drill1.wav"); + globalScene.loadSe("PRSFX- Horn Drill3", "battle_anims", "PRSFX- Horn Drill3.wav"); + globalScene.loadSe("PRSFX- Guillotine2", "battle_anims", "PRSFX- Guillotine2.wav"); + globalScene.loadSe("PRSFX- Heavy Slam2", "battle_anims", "PRSFX- Heavy Slam2.wav"); - scene.loadSe("PRSFX- Agility", "battle_anims", "PRSFX- Agility.wav"); - scene.loadSe("PRSFX- Extremespeed1", "battle_anims", "PRSFX- Extremespeed1.wav"); - scene.loadSe("PRSFX- Accelerock1", "battle_anims", "PRSFX- Accelerock1.wav"); + globalScene.loadSe("PRSFX- Agility", "battle_anims", "PRSFX- Agility.wav"); + globalScene.loadSe("PRSFX- Extremespeed1", "battle_anims", "PRSFX- Extremespeed1.wav"); + globalScene.loadSe("PRSFX- Accelerock1", "battle_anims", "PRSFX- Accelerock1.wav"); - scene.loadSe("PRSFX- Captivate", "battle_anims", "PRSFX- Captivate.wav"); - scene.loadSe("PRSFX- Attract2", "battle_anims", "PRSFX- Attract2.wav"); - scene.loadSe("PRSFX- Aurora Veil2", "battle_anims", "PRSFX- Aurora Veil2.wav"); + globalScene.loadSe("PRSFX- Captivate", "battle_anims", "PRSFX- Captivate.wav"); + globalScene.loadSe("PRSFX- Attract2", "battle_anims", "PRSFX- Attract2.wav"); + globalScene.loadSe("PRSFX- Aurora Veil2", "battle_anims", "PRSFX- Aurora Veil2.wav"); return true; }) @@ -84,8 +86,8 @@ export const PartTimerEncounter: MysteryEncounter = } ] }) - .withPreOptionPhase(async (scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withPreOptionPhase(async () => { + const encounter = globalScene.currentBattle.mysteryEncounter!; const onPokemonSelected = (pokemon: PlayerPokemon) => { encounter.setDialogueToken("selectedPokemon", pokemon.getNameToRender()); @@ -109,41 +111,41 @@ export const PartTimerEncounter: MysteryEncounter = } }); - setEncounterExp(scene, pokemon.id, 100); + setEncounterExp(pokemon.id, 100); // Hide intro visuals - transitionMysteryEncounterIntroVisuals(scene, true, false); + transitionMysteryEncounterIntroVisuals(true, false); // Play sfx for "working" - doDeliverySfx(scene); + doDeliverySfx(); }; // Only Pokemon non-KOd pokemon can be selected const selectableFilter = (pokemon: Pokemon) => { - return isPokemonValidForEncounterOptionSelection(pokemon, scene, `${namespace}:invalid_selection`); + return isPokemonValidForEncounterOptionSelection(pokemon, `${namespace}:invalid_selection`); }; - return selectPokemonForOption(scene, onPokemonSelected, undefined, selectableFilter); + return selectPokemonForOption(onPokemonSelected, undefined, selectableFilter); }) - .withOptionPhase(async (scene: BattleScene) => { + .withOptionPhase(async () => { // Pick Deliveries // Bring visuals back in - await transitionMysteryEncounterIntroVisuals(scene, false, false); + await transitionMysteryEncounterIntroVisuals(false, false); - const moneyMultiplier = scene.currentBattle.mysteryEncounter!.misc.moneyMultiplier; + const moneyMultiplier = globalScene.currentBattle.mysteryEncounter!.misc.moneyMultiplier; // Give money and do dialogue if (moneyMultiplier > 2.5) { - await showEncounterDialogue(scene, `${namespace}:job_complete_good`, `${namespace}:speaker`); + await showEncounterDialogue(`${namespace}:job_complete_good`, `${namespace}:speaker`); } else { - await showEncounterDialogue(scene, `${namespace}:job_complete_bad`, `${namespace}:speaker`); + await showEncounterDialogue(`${namespace}:job_complete_bad`, `${namespace}:speaker`); } - const moneyChange = scene.getWaveMoneyAmount(moneyMultiplier); - updatePlayerMoney(scene, moneyChange, true, false); - await showEncounterText(scene, i18next.t("mysteryEncounterMessages:receive_money", { amount: moneyChange })); - await showEncounterText(scene, `${namespace}:pokemon_tired`); + const moneyChange = globalScene.getWaveMoneyAmount(moneyMultiplier); + updatePlayerMoney(moneyChange, true, false); + await showEncounterText(i18next.t("mysteryEncounterMessages:receive_money", { amount: moneyChange })); + await showEncounterText(`${namespace}:pokemon_tired`); - setEncounterRewards(scene, { fillRemaining: true }); - leaveEncounterWithoutBattle(scene); + setEncounterRewards({ fillRemaining: true }); + leaveEncounterWithoutBattle(); }) .build() ) @@ -158,8 +160,8 @@ export const PartTimerEncounter: MysteryEncounter = } ] }) - .withPreOptionPhase(async (scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withPreOptionPhase(async () => { + const encounter = globalScene.currentBattle.mysteryEncounter!; const onPokemonSelected = (pokemon: PlayerPokemon) => { encounter.setDialogueToken("selectedPokemon", pokemon.getNameToRender()); @@ -186,41 +188,41 @@ export const PartTimerEncounter: MysteryEncounter = } }); - setEncounterExp(scene, pokemon.id, 100); + setEncounterExp(pokemon.id, 100); // Hide intro visuals - transitionMysteryEncounterIntroVisuals(scene, true, false); + transitionMysteryEncounterIntroVisuals(true, false); // Play sfx for "working" - doStrongWorkSfx(scene); + doStrongWorkSfx(); }; // Only Pokemon non-KOd pokemon can be selected const selectableFilter = (pokemon: Pokemon) => { - return isPokemonValidForEncounterOptionSelection(pokemon, scene, `${namespace}:invalid_selection`); + return isPokemonValidForEncounterOptionSelection(pokemon, `${namespace}:invalid_selection`); }; - return selectPokemonForOption(scene, onPokemonSelected, undefined, selectableFilter); + return selectPokemonForOption(onPokemonSelected, undefined, selectableFilter); }) - .withOptionPhase(async (scene: BattleScene) => { + .withOptionPhase(async () => { // Pick Move Warehouse items // Bring visuals back in - await transitionMysteryEncounterIntroVisuals(scene, false, false); + await transitionMysteryEncounterIntroVisuals(false, false); - const moneyMultiplier = scene.currentBattle.mysteryEncounter!.misc.moneyMultiplier; + const moneyMultiplier = globalScene.currentBattle.mysteryEncounter!.misc.moneyMultiplier; // Give money and do dialogue if (moneyMultiplier > 2.5) { - await showEncounterDialogue(scene, `${namespace}:job_complete_good`, `${namespace}:speaker`); + await showEncounterDialogue(`${namespace}:job_complete_good`, `${namespace}:speaker`); } else { - await showEncounterDialogue(scene, `${namespace}:job_complete_bad`, `${namespace}:speaker`); + await showEncounterDialogue(`${namespace}:job_complete_bad`, `${namespace}:speaker`); } - const moneyChange = scene.getWaveMoneyAmount(moneyMultiplier); - updatePlayerMoney(scene, moneyChange, true, false); - await showEncounterText(scene, i18next.t("mysteryEncounterMessages:receive_money", { amount: moneyChange })); - await showEncounterText(scene, `${namespace}:pokemon_tired`); + const moneyChange = globalScene.getWaveMoneyAmount(moneyMultiplier); + updatePlayerMoney(moneyChange, true, false); + await showEncounterText(i18next.t("mysteryEncounterMessages:receive_money", { amount: moneyChange })); + await showEncounterText(`${namespace}:pokemon_tired`); - setEncounterRewards(scene, { fillRemaining: true }); - leaveEncounterWithoutBattle(scene); + setEncounterRewards({ fillRemaining: true }); + leaveEncounterWithoutBattle(); }) .build() ) @@ -238,8 +240,8 @@ export const PartTimerEncounter: MysteryEncounter = }, ], }) - .withPreOptionPhase(async (scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withPreOptionPhase(async () => { + const encounter = globalScene.currentBattle.mysteryEncounter!; const selectedPokemon = encounter.selectedOption?.primaryPokemon!; encounter.setDialogueToken("selectedPokemon", selectedPokemon.getNameToRender()); @@ -251,28 +253,28 @@ export const PartTimerEncounter: MysteryEncounter = } }); - setEncounterExp(scene, selectedPokemon.id, 100); + setEncounterExp(selectedPokemon.id, 100); // Hide intro visuals - transitionMysteryEncounterIntroVisuals(scene, true, false); + transitionMysteryEncounterIntroVisuals(true, false); // Play sfx for "working" - doSalesSfx(scene); + doSalesSfx(); return true; }) - .withOptionPhase(async (scene: BattleScene) => { + .withOptionPhase(async () => { // Assist with Sales // Bring visuals back in - await transitionMysteryEncounterIntroVisuals(scene, false, false); + await transitionMysteryEncounterIntroVisuals(false, false); // Give money and do dialogue - await showEncounterDialogue(scene, `${namespace}:job_complete_good`, `${namespace}:speaker`); - const moneyChange = scene.getWaveMoneyAmount(2.5); - updatePlayerMoney(scene, moneyChange, true, false); - await showEncounterText(scene, i18next.t("mysteryEncounterMessages:receive_money", { amount: moneyChange })); - await showEncounterText(scene, `${namespace}:pokemon_tired`); + await showEncounterDialogue(`${namespace}:job_complete_good`, `${namespace}:speaker`); + const moneyChange = globalScene.getWaveMoneyAmount(2.5); + updatePlayerMoney(moneyChange, true, false); + await showEncounterText(i18next.t("mysteryEncounterMessages:receive_money", { amount: moneyChange })); + await showEncounterText(`${namespace}:pokemon_tired`); - setEncounterRewards(scene, { fillRemaining: true }); - leaveEncounterWithoutBattle(scene); + setEncounterRewards({ fillRemaining: true }); + leaveEncounterWithoutBattle(); }) .build() ) @@ -284,51 +286,51 @@ export const PartTimerEncounter: MysteryEncounter = ]) .build(); -function doStrongWorkSfx(scene: BattleScene) { - scene.playSound("battle_anims/PRSFX- Horn Drill1"); - scene.playSound("battle_anims/PRSFX- Horn Drill1"); +function doStrongWorkSfx() { + globalScene.playSound("battle_anims/PRSFX- Horn Drill1"); + globalScene.playSound("battle_anims/PRSFX- Horn Drill1"); - scene.time.delayedCall(1000, () => { - scene.playSound("battle_anims/PRSFX- Guillotine2"); + globalScene.time.delayedCall(1000, () => { + globalScene.playSound("battle_anims/PRSFX- Guillotine2"); }); - scene.time.delayedCall(2000, () => { - scene.playSound("battle_anims/PRSFX- Heavy Slam2"); + globalScene.time.delayedCall(2000, () => { + globalScene.playSound("battle_anims/PRSFX- Heavy Slam2"); }); - scene.time.delayedCall(2500, () => { - scene.playSound("battle_anims/PRSFX- Guillotine2"); + globalScene.time.delayedCall(2500, () => { + globalScene.playSound("battle_anims/PRSFX- Guillotine2"); }); } -function doDeliverySfx(scene: BattleScene) { - scene.playSound("battle_anims/PRSFX- Accelerock1"); +function doDeliverySfx() { + globalScene.playSound("battle_anims/PRSFX- Accelerock1"); - scene.time.delayedCall(1500, () => { - scene.playSound("battle_anims/PRSFX- Extremespeed1"); + globalScene.time.delayedCall(1500, () => { + globalScene.playSound("battle_anims/PRSFX- Extremespeed1"); }); - scene.time.delayedCall(2000, () => { - scene.playSound("battle_anims/PRSFX- Extremespeed1"); + globalScene.time.delayedCall(2000, () => { + globalScene.playSound("battle_anims/PRSFX- Extremespeed1"); }); - scene.time.delayedCall(2250, () => { - scene.playSound("battle_anims/PRSFX- Agility"); + globalScene.time.delayedCall(2250, () => { + globalScene.playSound("battle_anims/PRSFX- Agility"); }); } -function doSalesSfx(scene: BattleScene) { - scene.playSound("battle_anims/PRSFX- Captivate"); +function doSalesSfx() { + globalScene.playSound("battle_anims/PRSFX- Captivate"); - scene.time.delayedCall(1500, () => { - scene.playSound("battle_anims/PRSFX- Attract2"); + globalScene.time.delayedCall(1500, () => { + globalScene.playSound("battle_anims/PRSFX- Attract2"); }); - scene.time.delayedCall(2000, () => { - scene.playSound("battle_anims/PRSFX- Aurora Veil2"); + globalScene.time.delayedCall(2000, () => { + globalScene.playSound("battle_anims/PRSFX- Aurora Veil2"); }); - scene.time.delayedCall(3000, () => { - scene.playSound("battle_anims/PRSFX- Attract2"); + globalScene.time.delayedCall(3000, () => { + globalScene.playSound("battle_anims/PRSFX- Attract2"); }); } diff --git a/src/data/mystery-encounters/encounters/safari-zone-encounter.ts b/src/data/mystery-encounters/encounters/safari-zone-encounter.ts index e16cf2d6973..130c55c361e 100644 --- a/src/data/mystery-encounters/encounters/safari-zone-encounter.ts +++ b/src/data/mystery-encounters/encounters/safari-zone-encounter.ts @@ -1,15 +1,18 @@ import { initSubsequentOptionSelect, leaveEncounterWithoutBattle, transitionMysteryEncounterIntroVisuals, updatePlayerMoney, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import BattleScene from "#app/battle-scene"; -import MysteryEncounter, { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; -import MysteryEncounterOption, { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; +import { globalScene } from "#app/global-scene"; +import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; +import type MysteryEncounterOption from "#app/data/mystery-encounters/mystery-encounter-option"; +import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; import { TrainerSlot } from "#app/data/trainer-config"; import { HiddenAbilityRateBoosterModifier, IvScannerModifier } from "#app/modifier/modifier"; -import { EnemyPokemon } from "#app/field/pokemon"; +import type { EnemyPokemon } from "#app/field/pokemon"; import { PokeballType } from "#enums/pokeball"; import { PlayerGender } from "#enums/player-gender"; -import { IntegerHolder, randSeedInt } from "#app/utils"; -import PokemonSpecies, { getPokemonSpecies } from "#app/data/pokemon-species"; +import { NumberHolder, randSeedInt } from "#app/utils"; +import type PokemonSpecies from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/data/pokemon-species"; import { MoneyRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements"; import { doPlayerFlee, doPokemonFlee, getRandomSpeciesByStarterCost, trainerThrowPokeball } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import { getEncounterText, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; @@ -59,8 +62,8 @@ export const SafariZoneEncounter: MysteryEncounter = .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) - .withOnInit((scene: BattleScene) => { - scene.currentBattle.mysteryEncounter?.setDialogueToken("numEncounters", NUM_SAFARI_ENCOUNTERS.toString()); + .withOnInit(() => { + globalScene.currentBattle.mysteryEncounter?.setDialogueToken("numEncounters", NUM_SAFARI_ENCOUNTERS.toString()); return true; }) .withOption(MysteryEncounterOptionBuilder @@ -75,25 +78,25 @@ export const SafariZoneEncounter: MysteryEncounter = }, ], }) - .withOptionPhase(async (scene: BattleScene) => { + .withOptionPhase(async () => { // Start safari encounter - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; encounter.continuousEncounter = true; encounter.misc = { safariPokemonRemaining: NUM_SAFARI_ENCOUNTERS }; - updatePlayerMoney(scene, -(encounter.options[0].requirements[0] as MoneyRequirement).requiredMoney); + updatePlayerMoney(-(encounter.options[0].requirements[0] as MoneyRequirement).requiredMoney); // Load bait/mud assets - scene.loadSe("PRSFX- Bug Bite", "battle_anims", "PRSFX- Bug Bite.wav"); - scene.loadSe("PRSFX- Sludge Bomb2", "battle_anims", "PRSFX- Sludge Bomb2.wav"); - scene.loadSe("PRSFX- Taunt2", "battle_anims", "PRSFX- Taunt2.wav"); - scene.loadAtlas("safari_zone_bait", "mystery-encounters"); - scene.loadAtlas("safari_zone_mud", "mystery-encounters"); + globalScene.loadSe("PRSFX- Bug Bite", "battle_anims", "PRSFX- Bug Bite.wav"); + globalScene.loadSe("PRSFX- Sludge Bomb2", "battle_anims", "PRSFX- Sludge Bomb2.wav"); + globalScene.loadSe("PRSFX- Taunt2", "battle_anims", "PRSFX- Taunt2.wav"); + globalScene.loadAtlas("safari_zone_bait", "mystery-encounters"); + globalScene.loadAtlas("safari_zone_mud", "mystery-encounters"); // Clear enemy party - scene.currentBattle.enemyParty = []; - await transitionMysteryEncounterIntroVisuals(scene); - await summonSafariPokemon(scene); - initSubsequentOptionSelect(scene, { overrideOptions: safariZoneGameOptions, hideDescription: true }); + globalScene.currentBattle.enemyParty = []; + await transitionMysteryEncounterIntroVisuals(); + await summonSafariPokemon(); + initSubsequentOptionSelect({ overrideOptions: safariZoneGameOptions, hideDescription: true }); return true; }) .build() @@ -108,9 +111,9 @@ export const SafariZoneEncounter: MysteryEncounter = }, ], }, - async (scene: BattleScene) => { + async () => { // Leave encounter with no rewards or exp - leaveEncounterWithoutBattle(scene, true); + leaveEncounterWithoutBattle(true); return true; } ) @@ -143,26 +146,26 @@ const safariZoneGameOptions: MysteryEncounterOption[] = [ } ], }) - .withOptionPhase(async (scene: BattleScene) => { + .withOptionPhase(async () => { // Throw a ball option - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; const pokemon = encounter.misc.pokemon; - const catchResult = await throwPokeball(scene, pokemon); + const catchResult = await throwPokeball(pokemon); if (catchResult) { // You caught pokemon // Check how many safari pokemon left if (encounter.misc.safariPokemonRemaining > 0) { - await summonSafariPokemon(scene); - initSubsequentOptionSelect(scene, { overrideOptions: safariZoneGameOptions, startingCursorIndex: 0, hideDescription: true }); + await summonSafariPokemon(); + initSubsequentOptionSelect({ overrideOptions: safariZoneGameOptions, startingCursorIndex: 0, hideDescription: true }); } else { // End safari mode encounter.continuousEncounter = false; - leaveEncounterWithoutBattle(scene, true); + leaveEncounterWithoutBattle(true); } } else { // Pokemon catch failed, end turn - await doEndTurn(scene, 0); + await doEndTurn(0); } return true; }) @@ -178,22 +181,22 @@ const safariZoneGameOptions: MysteryEncounterOption[] = [ }, ], }) - .withOptionPhase(async (scene: BattleScene) => { + .withOptionPhase(async () => { // Throw bait option - const pokemon = scene.currentBattle.mysteryEncounter!.misc.pokemon; - await throwBait(scene, pokemon); + const pokemon = globalScene.currentBattle.mysteryEncounter!.misc.pokemon; + await throwBait(pokemon); // 100% chance to increase catch stage +2 - tryChangeCatchStage(scene, 2); + tryChangeCatchStage(2); // 80% chance to increase flee stage +1 - const fleeChangeResult = tryChangeFleeStage(scene, 1, 8); + const fleeChangeResult = tryChangeFleeStage(1, 8); if (!fleeChangeResult) { - await showEncounterText(scene, getEncounterText(scene, `${namespace}:safari.busy_eating`) ?? "", null, 1000, false ); + await showEncounterText(getEncounterText(`${namespace}:safari.busy_eating`) ?? "", null, 1000, false ); } else { - await showEncounterText(scene, getEncounterText(scene, `${namespace}:safari.eating`) ?? "", null, 1000, false); + await showEncounterText(getEncounterText(`${namespace}:safari.eating`) ?? "", null, 1000, false); } - await doEndTurn(scene, 1); + await doEndTurn(1); return true; }) .build(), @@ -208,21 +211,21 @@ const safariZoneGameOptions: MysteryEncounterOption[] = [ }, ], }) - .withOptionPhase(async (scene: BattleScene) => { + .withOptionPhase(async () => { // Throw mud option - const pokemon = scene.currentBattle.mysteryEncounter!.misc.pokemon; - await throwMud(scene, pokemon); + const pokemon = globalScene.currentBattle.mysteryEncounter!.misc.pokemon; + await throwMud(pokemon); // 100% chance to decrease flee stage -2 - tryChangeFleeStage(scene, -2); + tryChangeFleeStage(-2); // 80% chance to decrease catch stage -1 - const catchChangeResult = tryChangeCatchStage(scene, -1, 8); + const catchChangeResult = tryChangeCatchStage(-1, 8); if (!catchChangeResult) { - await showEncounterText(scene, getEncounterText(scene, `${namespace}:safari.beside_itself_angry`) ?? "", null, 1000, false ); + await showEncounterText(getEncounterText(`${namespace}:safari.beside_itself_angry`) ?? "", null, 1000, false ); } else { - await showEncounterText(scene, getEncounterText(scene, `${namespace}:safari.angry`) ?? "", null, 1000, false ); + await showEncounterText(getEncounterText(`${namespace}:safari.angry`) ?? "", null, 1000, false ); } - await doEndTurn(scene, 2); + await doEndTurn(2); return true; }) .build(), @@ -232,40 +235,40 @@ const safariZoneGameOptions: MysteryEncounterOption[] = [ buttonLabel: `${namespace}:safari.4.label`, buttonTooltip: `${namespace}:safari.4.tooltip`, }) - .withOptionPhase(async (scene: BattleScene) => { + .withOptionPhase(async () => { // Flee option - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; const pokemon = encounter.misc.pokemon; - await doPlayerFlee(scene, pokemon); + await doPlayerFlee(pokemon); // Check how many safari pokemon left if (encounter.misc.safariPokemonRemaining > 0) { - await summonSafariPokemon(scene); - initSubsequentOptionSelect(scene, { overrideOptions: safariZoneGameOptions, startingCursorIndex: 3, hideDescription: true }); + await summonSafariPokemon(); + initSubsequentOptionSelect({ overrideOptions: safariZoneGameOptions, startingCursorIndex: 3, hideDescription: true }); } else { // End safari mode encounter.continuousEncounter = false; - leaveEncounterWithoutBattle(scene, true); + leaveEncounterWithoutBattle(true); } return true; }) .build() ]; -async function summonSafariPokemon(scene: BattleScene) { - const encounter = scene.currentBattle.mysteryEncounter!; +async function summonSafariPokemon() { + const encounter = globalScene.currentBattle.mysteryEncounter!; // Message pokemon remaining encounter.setDialogueToken("remainingCount", encounter.misc.safariPokemonRemaining); - scene.queueMessage(getEncounterText(scene, `${namespace}:safari.remaining_count`) ?? "", null, true); + globalScene.queueMessage(getEncounterText(`${namespace}:safari.remaining_count`) ?? "", null, true); // Generate pokemon using safariPokemonRemaining so they are always the same pokemon no matter how many turns are taken // Safari pokemon roll twice on shiny and HA chances, but are otherwise normal let enemySpecies; let pokemon; - scene.executeWithSeedOffset(() => { + globalScene.executeWithSeedOffset(() => { enemySpecies = getSafariSpeciesSpawn(); - const level = scene.currentBattle.getLevelForWave(); - enemySpecies = getPokemonSpecies(enemySpecies.getWildSpeciesForLevel(level, true, false, scene.gameMode)); - pokemon = scene.addEnemyPokemon(enemySpecies, level, TrainerSlot.NONE, false); + const level = globalScene.currentBattle.getLevelForWave(); + enemySpecies = getPokemonSpecies(enemySpecies.getWildSpeciesForLevel(level, true, false, globalScene.gameMode)); + pokemon = globalScene.addEnemyPokemon(enemySpecies, level, TrainerSlot.NONE, false); // Roll shiny twice if (!pokemon.shiny) { @@ -276,8 +279,8 @@ async function summonSafariPokemon(scene: BattleScene) { if (pokemon.species.abilityHidden) { const hiddenIndex = pokemon.species.ability2 ? 2 : 1; if (pokemon.abilityIndex < hiddenIndex) { - const hiddenAbilityChance = new IntegerHolder(256); - scene.applyModifiers(HiddenAbilityRateBoosterModifier, true, hiddenAbilityChance); + const hiddenAbilityChance = new NumberHolder(256); + globalScene.applyModifiers(HiddenAbilityRateBoosterModifier, true, hiddenAbilityChance); const hasHiddenAbility = !randSeedInt(hiddenAbilityChance.value); @@ -289,10 +292,10 @@ async function summonSafariPokemon(scene: BattleScene) { pokemon.calculateStats(); - scene.currentBattle.enemyParty.unshift(pokemon); - }, scene.currentBattle.waveIndex * 1000 * encounter.misc.safariPokemonRemaining); + globalScene.currentBattle.enemyParty.unshift(pokemon); + }, globalScene.currentBattle.waveIndex * 1000 * encounter.misc.safariPokemonRemaining); - scene.gameData.setPokemonSeen(pokemon, true); + globalScene.gameData.setPokemonSeen(pokemon, true); await pokemon.loadAssets(); // Reset safari catch and flee rates @@ -301,7 +304,7 @@ async function summonSafariPokemon(scene: BattleScene) { encounter.misc.pokemon = pokemon; encounter.misc.safariPokemonRemaining -= 1; - scene.unshiftPhase(new SummonPhase(scene, 0, false)); + globalScene.unshiftPhase(new SummonPhase(0, false)); encounter.setDialogueToken("pokemonName", getPokemonNameWithAffix(pokemon)); @@ -310,49 +313,49 @@ async function summonSafariPokemon(scene: BattleScene) { // shows up and the IV scanner breaks. For now, we place the IV scanner code // separately so that at least the IV scanner works. - const ivScannerModifier = scene.findModifier(m => m instanceof IvScannerModifier); + const ivScannerModifier = globalScene.findModifier(m => m instanceof IvScannerModifier); if (ivScannerModifier) { - scene.pushPhase(new ScanIvsPhase(scene, pokemon.getBattlerIndex(), Math.min(ivScannerModifier.getStackCount() * 2, 6))); + globalScene.pushPhase(new ScanIvsPhase(pokemon.getBattlerIndex())); } } -function throwPokeball(scene: BattleScene, pokemon: EnemyPokemon): Promise { +function throwPokeball(pokemon: EnemyPokemon): Promise { const baseCatchRate = pokemon.species.catchRate; // Catch stage ranges from -6 to +6 (like stat boost stages) - const safariCatchStage = scene.currentBattle.mysteryEncounter!.misc.catchStage; + const safariCatchStage = globalScene.currentBattle.mysteryEncounter!.misc.catchStage; // Catch modifier ranges from 2/8 (-6 stage) to 8/2 (+6) const safariModifier = (2 + Math.min(Math.max(safariCatchStage, 0), 6)) / (2 - Math.max(Math.min(safariCatchStage, 0), -6)); // Catch rate same as safari ball const pokeballMultiplier = 1.5; const catchRate = Math.round(baseCatchRate * pokeballMultiplier * safariModifier); const ballTwitchRate = Math.round(1048560 / Math.sqrt(Math.sqrt(16711680 / catchRate))); - return trainerThrowPokeball(scene, pokemon, PokeballType.POKEBALL, ballTwitchRate); + return trainerThrowPokeball(pokemon, PokeballType.POKEBALL, ballTwitchRate); } -async function throwBait(scene: BattleScene, pokemon: EnemyPokemon): Promise { +async function throwBait(pokemon: EnemyPokemon): Promise { const originalY: number = pokemon.y; const fpOffset = pokemon.getFieldPositionOffset(); - const bait: Phaser.GameObjects.Sprite = scene.addFieldSprite(16 + 75, 80 + 25, "safari_zone_bait", "0001.png"); + const bait: Phaser.GameObjects.Sprite = globalScene.addFieldSprite(16 + 75, 80 + 25, "safari_zone_bait", "0001.png"); bait.setOrigin(0.5, 0.625); - scene.field.add(bait); + globalScene.field.add(bait); return new Promise(resolve => { - scene.trainer.setTexture(`trainer_${scene.gameData.gender === PlayerGender.FEMALE ? "f" : "m"}_back_pb`); - scene.time.delayedCall(TRAINER_THROW_ANIMATION_TIMES[0], () => { - scene.playSound("se/pb_throw"); + globalScene.trainer.setTexture(`trainer_${globalScene.gameData.gender === PlayerGender.FEMALE ? "f" : "m"}_back_pb`); + globalScene.time.delayedCall(TRAINER_THROW_ANIMATION_TIMES[0], () => { + globalScene.playSound("se/pb_throw"); // Trainer throw frames - scene.trainer.setFrame("2"); - scene.time.delayedCall(TRAINER_THROW_ANIMATION_TIMES[1], () => { - scene.trainer.setFrame("3"); - scene.time.delayedCall(TRAINER_THROW_ANIMATION_TIMES[2], () => { - scene.trainer.setTexture(`trainer_${scene.gameData.gender === PlayerGender.FEMALE ? "f" : "m"}_back`); + globalScene.trainer.setFrame("2"); + globalScene.time.delayedCall(TRAINER_THROW_ANIMATION_TIMES[1], () => { + globalScene.trainer.setFrame("3"); + globalScene.time.delayedCall(TRAINER_THROW_ANIMATION_TIMES[2], () => { + globalScene.trainer.setTexture(`trainer_${globalScene.gameData.gender === PlayerGender.FEMALE ? "f" : "m"}_back`); }); }); // Pokeball move and catch logic - scene.tweens.add({ + globalScene.tweens.add({ targets: bait, x: { value: 210 + fpOffset[0], ease: "Linear" }, y: { value: 55 + fpOffset[1], ease: "Cubic.easeOut" }, @@ -360,8 +363,8 @@ async function throwBait(scene: BattleScene, pokemon: EnemyPokemon): Promise { let index = 1; - scene.time.delayedCall(768, () => { - scene.tweens.add({ + globalScene.time.delayedCall(768, () => { + globalScene.tweens.add({ targets: pokemon, duration: 150, ease: "Cubic.easeOut", @@ -369,12 +372,12 @@ async function throwBait(scene: BattleScene, pokemon: EnemyPokemon): Promise { - scene.playSound("battle_anims/PRSFX- Bug Bite"); + globalScene.playSound("battle_anims/PRSFX- Bug Bite"); bait.setFrame("0002.png"); }, onLoop: () => { if (index % 2 === 0) { - scene.playSound("battle_anims/PRSFX- Bug Bite"); + globalScene.playSound("battle_anims/PRSFX- Bug Bite"); } if (index === 4) { bait.setFrame("0003.png"); @@ -382,7 +385,7 @@ async function throwBait(scene: BattleScene, pokemon: EnemyPokemon): Promise { - scene.time.delayedCall(256, () => { + globalScene.time.delayedCall(256, () => { bait.destroy(); resolve(true); }); @@ -395,55 +398,55 @@ async function throwBait(scene: BattleScene, pokemon: EnemyPokemon): Promise { +async function throwMud(pokemon: EnemyPokemon): Promise { const originalY: number = pokemon.y; const fpOffset = pokemon.getFieldPositionOffset(); - const mud: Phaser.GameObjects.Sprite = scene.addFieldSprite(16 + 75, 80 + 35, "safari_zone_mud", "0001.png"); + const mud: Phaser.GameObjects.Sprite = globalScene.addFieldSprite(16 + 75, 80 + 35, "safari_zone_mud", "0001.png"); mud.setOrigin(0.5, 0.625); - scene.field.add(mud); + globalScene.field.add(mud); return new Promise(resolve => { - scene.trainer.setTexture(`trainer_${scene.gameData.gender === PlayerGender.FEMALE ? "f" : "m"}_back_pb`); - scene.time.delayedCall(TRAINER_THROW_ANIMATION_TIMES[0], () => { - scene.playSound("se/pb_throw"); + globalScene.trainer.setTexture(`trainer_${globalScene.gameData.gender === PlayerGender.FEMALE ? "f" : "m"}_back_pb`); + globalScene.time.delayedCall(TRAINER_THROW_ANIMATION_TIMES[0], () => { + globalScene.playSound("se/pb_throw"); // Trainer throw frames - scene.trainer.setFrame("2"); - scene.time.delayedCall(TRAINER_THROW_ANIMATION_TIMES[1], () => { - scene.trainer.setFrame("3"); - scene.time.delayedCall(TRAINER_THROW_ANIMATION_TIMES[2], () => { - scene.trainer.setTexture(`trainer_${scene.gameData.gender === PlayerGender.FEMALE ? "f" : "m"}_back`); + globalScene.trainer.setFrame("2"); + globalScene.time.delayedCall(TRAINER_THROW_ANIMATION_TIMES[1], () => { + globalScene.trainer.setFrame("3"); + globalScene.time.delayedCall(TRAINER_THROW_ANIMATION_TIMES[2], () => { + globalScene.trainer.setTexture(`trainer_${globalScene.gameData.gender === PlayerGender.FEMALE ? "f" : "m"}_back`); }); }); // Mud throw and splat - scene.tweens.add({ + globalScene.tweens.add({ targets: mud, x: { value: 230 + fpOffset[0], ease: "Linear" }, y: { value: 55 + fpOffset[1], ease: "Cubic.easeOut" }, duration: 500, onComplete: () => { // Mud frame 2 - scene.playSound("battle_anims/PRSFX- Sludge Bomb2"); + globalScene.playSound("battle_anims/PRSFX- Sludge Bomb2"); mud.setFrame("0002.png"); // Mud splat - scene.time.delayedCall(200, () => { + globalScene.time.delayedCall(200, () => { mud.setFrame("0003.png"); - scene.time.delayedCall(400, () => { + globalScene.time.delayedCall(400, () => { mud.setFrame("0004.png"); }); }); // Fade mud then angry animation - scene.tweens.add({ + globalScene.tweens.add({ targets: mud, alpha: 0, ease: "Cubic.easeIn", duration: 1000, onComplete: () => { mud.destroy(); - scene.tweens.add({ + globalScene.tweens.add({ targets: pokemon, duration: 300, ease: "Cubic.easeOut", @@ -451,10 +454,10 @@ async function throwMud(scene: BattleScene, pokemon: EnemyPokemon): Promise { - scene.playSound("battle_anims/PRSFX- Taunt2"); + globalScene.playSound("battle_anims/PRSFX- Taunt2"); }, onLoop: () => { - scene.playSound("battle_anims/PRSFX- Taunt2"); + globalScene.playSound("battle_anims/PRSFX- Taunt2"); }, onComplete: () => { resolve(true); @@ -478,53 +481,53 @@ function isPokemonFlee(pokemon: EnemyPokemon, fleeStage: number): boolean { return roll < fleeRate; } -function tryChangeFleeStage(scene: BattleScene, change: number, chance?: number): boolean { +function tryChangeFleeStage(change: number, chance?: number): boolean { if (chance && randSeedInt(10) >= chance) { return false; } - const currentFleeStage = scene.currentBattle.mysteryEncounter!.misc.fleeStage ?? 0; - scene.currentBattle.mysteryEncounter!.misc.fleeStage = Math.min(Math.max(currentFleeStage + change, -6), 6); + const currentFleeStage = globalScene.currentBattle.mysteryEncounter!.misc.fleeStage ?? 0; + globalScene.currentBattle.mysteryEncounter!.misc.fleeStage = Math.min(Math.max(currentFleeStage + change, -6), 6); return true; } -function tryChangeCatchStage(scene: BattleScene, change: number, chance?: number): boolean { +function tryChangeCatchStage(change: number, chance?: number): boolean { if (chance && randSeedInt(10) >= chance) { return false; } - const currentCatchStage = scene.currentBattle.mysteryEncounter!.misc.catchStage ?? 0; - scene.currentBattle.mysteryEncounter!.misc.catchStage = Math.min(Math.max(currentCatchStage + change, -6), 6); + const currentCatchStage = globalScene.currentBattle.mysteryEncounter!.misc.catchStage ?? 0; + globalScene.currentBattle.mysteryEncounter!.misc.catchStage = Math.min(Math.max(currentCatchStage + change, -6), 6); return true; } -async function doEndTurn(scene: BattleScene, cursorIndex: number) { +async function doEndTurn(cursorIndex: number) { // First cleanup and destroy old Pokemon objects that were left in the enemyParty // They are left in enemyParty temporarily so that VictoryPhase properly handles EXP - const party = scene.getEnemyParty(); + const party = globalScene.getEnemyParty(); if (party.length > 1) { for (let i = 1; i < party.length; i++) { party[i].destroy(); } - scene.currentBattle.enemyParty = party.slice(0, 1); + globalScene.currentBattle.enemyParty = party.slice(0, 1); } - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; const pokemon = encounter.misc.pokemon; const isFlee = isPokemonFlee(pokemon, encounter.misc.fleeStage); if (isFlee) { // Pokemon flees! - await doPokemonFlee(scene, pokemon); + await doPokemonFlee(pokemon); // Check how many safari pokemon left if (encounter.misc.safariPokemonRemaining > 0) { - await summonSafariPokemon(scene); - initSubsequentOptionSelect(scene, { overrideOptions: safariZoneGameOptions, startingCursorIndex: cursorIndex, hideDescription: true }); + await summonSafariPokemon(); + initSubsequentOptionSelect({ overrideOptions: safariZoneGameOptions, startingCursorIndex: cursorIndex, hideDescription: true }); } else { // End safari mode encounter.continuousEncounter = false; - leaveEncounterWithoutBattle(scene, true); + leaveEncounterWithoutBattle(true); } } else { - scene.queueMessage(getEncounterText(scene, `${namespace}:safari.watching`) ?? "", 0, null, 1000); - initSubsequentOptionSelect(scene, { overrideOptions: safariZoneGameOptions, startingCursorIndex: cursorIndex, hideDescription: true }); + globalScene.queueMessage(getEncounterText(`${namespace}:safari.watching`) ?? "", 0, null, 1000); + initSubsequentOptionSelect({ overrideOptions: safariZoneGameOptions, startingCursorIndex: cursorIndex, hideDescription: true }); } } diff --git a/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts b/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts index 3f1ace47b0f..d5362df28e7 100644 --- a/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts +++ b/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts @@ -1,18 +1,20 @@ import { generateModifierType, leaveEncounterWithoutBattle, selectPokemonForOption, setEncounterExp, updatePlayerMoney, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import Pokemon, { PlayerPokemon } from "#app/field/pokemon"; +import type { PlayerPokemon } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; import { modifierTypes } from "#app/modifier/modifier-type"; import { randSeedInt } from "#app/utils"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { Species } from "#enums/species"; -import BattleScene from "#app/battle-scene"; -import MysteryEncounter, { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; +import { globalScene } from "#app/global-scene"; +import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; import { MoneyRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements"; import { getEncounterText, queueEncounterMessage } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { applyDamageToPokemon, applyModifierTypeToPlayerPokemon, isPokemonValidForEncounterOptionSelection } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; -import { Nature } from "#enums/nature"; +import type { Nature } from "#enums/nature"; import { getNatureName } from "#app/data/nature"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; import i18next from "i18next"; @@ -79,15 +81,15 @@ export const ShadyVitaminDealerEncounter: MysteryEncounter = }, ], }) - .withPreOptionPhase(async (scene: BattleScene): Promise => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withPreOptionPhase(async (): Promise => { + const encounter = globalScene.currentBattle.mysteryEncounter!; const onPokemonSelected = (pokemon: PlayerPokemon) => { // Update money - updatePlayerMoney(scene, -(encounter.options[0].requirements[0] as MoneyRequirement).requiredMoney); + updatePlayerMoney(-(encounter.options[0].requirements[0] as MoneyRequirement).requiredMoney); // Calculate modifiers and dialogue tokens const modifiers = [ - generateModifierType(scene, modifierTypes.BASE_STAT_BOOSTER)!, - generateModifierType(scene, modifierTypes.BASE_STAT_BOOSTER)!, + generateModifierType(modifierTypes.BASE_STAT_BOOSTER)!, + generateModifierType(modifierTypes.BASE_STAT_BOOSTER)!, ]; encounter.setDialogueToken("boost1", modifiers[0].name); encounter.setDialogueToken("boost2", modifiers[1].name); @@ -103,34 +105,34 @@ export const ShadyVitaminDealerEncounter: MysteryEncounter = if (!pokemon.isAllowedInChallenge()) { return i18next.t("partyUiHandler:cantBeUsed", { pokemonName: pokemon.getNameToRender() }) ?? null; } - if (!encounter.pokemonMeetsPrimaryRequirements(scene, pokemon)) { - return getEncounterText(scene, `${namespace}:invalid_selection`) ?? null; + if (!encounter.pokemonMeetsPrimaryRequirements(pokemon)) { + return getEncounterText(`${namespace}:invalid_selection`) ?? null; } return null; }; - return selectPokemonForOption(scene, onPokemonSelected, undefined, selectableFilter); + return selectPokemonForOption(onPokemonSelected, undefined, selectableFilter); }) - .withOptionPhase(async (scene: BattleScene) => { + .withOptionPhase(async () => { // Choose Cheap Option - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; const chosenPokemon = encounter.misc.chosenPokemon; const modifiers = encounter.misc.modifiers; for (const modType of modifiers) { - await applyModifierTypeToPlayerPokemon(scene, chosenPokemon, modType); + await applyModifierTypeToPlayerPokemon(chosenPokemon, modType); } - leaveEncounterWithoutBattle(scene, true); + leaveEncounterWithoutBattle(true); }) - .withPostOptionPhase(async (scene: BattleScene) => { + .withPostOptionPhase(async () => { // Damage and status applied after dealer leaves (to make thematic sense) - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; const chosenPokemon = encounter.misc.chosenPokemon as PlayerPokemon; // Pokemon takes half max HP damage and nature is randomized (does not update dex) - applyDamageToPokemon(scene, chosenPokemon, Math.floor(chosenPokemon.getMaxHp() / 2)); + applyDamageToPokemon(chosenPokemon, Math.floor(chosenPokemon.getMaxHp() / 2)); const currentNature = chosenPokemon.nature; let newNature = randSeedInt(25) as Nature; @@ -140,8 +142,8 @@ export const ShadyVitaminDealerEncounter: MysteryEncounter = chosenPokemon.setCustomNature(newNature); encounter.setDialogueToken("newNature", getNatureName(newNature)); - queueEncounterMessage(scene, `${namespace}:cheap_side_effects`); - setEncounterExp(scene, [ chosenPokemon.id ], 100); + queueEncounterMessage(`${namespace}:cheap_side_effects`); + setEncounterExp([ chosenPokemon.id ], 100); await chosenPokemon.updateInfo(); }) .build() @@ -159,15 +161,15 @@ export const ShadyVitaminDealerEncounter: MysteryEncounter = }, ], }) - .withPreOptionPhase(async (scene: BattleScene): Promise => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withPreOptionPhase(async (): Promise => { + const encounter = globalScene.currentBattle.mysteryEncounter!; const onPokemonSelected = (pokemon: PlayerPokemon) => { // Update money - updatePlayerMoney(scene, -(encounter.options[1].requirements[0] as MoneyRequirement).requiredMoney); + updatePlayerMoney(-(encounter.options[1].requirements[0] as MoneyRequirement).requiredMoney); // Calculate modifiers and dialogue tokens const modifiers = [ - generateModifierType(scene, modifierTypes.BASE_STAT_BOOSTER)!, - generateModifierType(scene, modifierTypes.BASE_STAT_BOOSTER)!, + generateModifierType(modifierTypes.BASE_STAT_BOOSTER)!, + generateModifierType(modifierTypes.BASE_STAT_BOOSTER)!, ]; encounter.setDialogueToken("boost1", modifiers[0].name); encounter.setDialogueToken("boost2", modifiers[1].name); @@ -179,30 +181,30 @@ export const ShadyVitaminDealerEncounter: MysteryEncounter = // Only Pokemon that can gain benefits are unfainted const selectableFilter = (pokemon: Pokemon) => { - return isPokemonValidForEncounterOptionSelection(pokemon, scene, `${namespace}:invalid_selection`); + return isPokemonValidForEncounterOptionSelection(pokemon, `${namespace}:invalid_selection`); }; - return selectPokemonForOption(scene, onPokemonSelected, undefined, selectableFilter); + return selectPokemonForOption(onPokemonSelected, undefined, selectableFilter); }) - .withOptionPhase(async (scene: BattleScene) => { + .withOptionPhase(async () => { // Choose Expensive Option - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; const chosenPokemon = encounter.misc.chosenPokemon; const modifiers = encounter.misc.modifiers; for (const modType of modifiers) { - await applyModifierTypeToPlayerPokemon(scene, chosenPokemon, modType); + await applyModifierTypeToPlayerPokemon(chosenPokemon, modType); } - leaveEncounterWithoutBattle(scene, true); + leaveEncounterWithoutBattle(true); }) - .withPostOptionPhase(async (scene: BattleScene) => { + .withPostOptionPhase(async () => { // Status applied after dealer leaves (to make thematic sense) - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; const chosenPokemon = encounter.misc.chosenPokemon; - queueEncounterMessage(scene, `${namespace}:no_bad_effects`); - setEncounterExp(scene, [ chosenPokemon.id ], 100); + queueEncounterMessage(`${namespace}:no_bad_effects`); + setEncounterExp([ chosenPokemon.id ], 100); await chosenPokemon.updateInfo(); }) @@ -219,9 +221,9 @@ export const ShadyVitaminDealerEncounter: MysteryEncounter = } ] }, - async (scene: BattleScene) => { + async () => { // Leave encounter with no rewards or exp - leaveEncounterWithoutBattle(scene, true); + leaveEncounterWithoutBattle(true); return true; } ) diff --git a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts index 8dd03e12caa..923d8f06c23 100644 --- a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts +++ b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts @@ -1,13 +1,16 @@ import { STEALING_MOVES } from "#app/data/mystery-encounters/requirements/requirement-groups"; -import { modifierTypes, PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; +import type { PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/modifier/modifier-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { Species } from "#enums/species"; -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { StatusEffect } from "#enums/status-effect"; -import MysteryEncounter, { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; +import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; import { MoveRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements"; -import { EnemyPartyConfig, EnemyPokemonConfig, generateModifierType, initBattleWithEnemyConfig, leaveEncounterWithoutBattle, loadCustomMovesForEncounter, setEncounterExp, setEncounterRewards, } from "../utils/encounter-phase-utils"; +import type { EnemyPartyConfig, EnemyPokemonConfig } from "../utils/encounter-phase-utils"; +import { generateModifierType, initBattleWithEnemyConfig, leaveEncounterWithoutBattle, loadCustomMovesForEncounter, setEncounterExp, setEncounterRewards, } from "../utils/encounter-phase-utils"; import { queueEncounterMessage } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { Moves } from "#enums/moves"; import { BattlerIndex } from "#app/battle"; @@ -51,8 +54,8 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = text: `${namespace}:intro`, }, ]) - .withOnInit((scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOnInit(() => { + const encounter = globalScene.currentBattle.mysteryEncounter!; console.log(encounter); // Calculate boss mon @@ -65,11 +68,11 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = moveSet: [ Moves.REST, Moves.SLEEP_TALK, Moves.CRUNCH, Moves.GIGA_IMPACT ], modifierConfigs: [ { - modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.SITRUS ]) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.BERRY, [ BerryType.SITRUS ]) as PokemonHeldItemModifierType, stackCount: 2 }, { - modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.ENIGMA ]) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.BERRY, [ BerryType.ENIGMA ]) as PokemonHeldItemModifierType, stackCount: 2 }, ], @@ -83,7 +86,7 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = encounter.enemyPartyConfigs = [ config ]; // Load animations/sfx for Snorlax fight start moves - loadCustomMovesForEncounter(scene, [ Moves.SNORE ]); + loadCustomMovesForEncounter([ Moves.SNORE ]); encounter.setDialogueToken("snorlaxName", getPokemonSpecies(Species.SNORLAX).getName()); @@ -103,10 +106,10 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = }, ], }, - async (scene: BattleScene) => { + async () => { // Pick battle - const encounter = scene.currentBattle.mysteryEncounter!; - setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [ modifierTypes.LEFTOVERS ], fillRemaining: true }); + const encounter = globalScene.currentBattle.mysteryEncounter!; + setEncounterRewards({ guaranteedModifierTypeFuncs: [ modifierTypes.LEFTOVERS ], fillRemaining: true }); encounter.startOfBattleEffects.push( { sourceBattlerIndex: BattlerIndex.ENEMY, @@ -120,7 +123,7 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = move: new PokemonMove(Moves.SNORE), ignorePp: true }); - await initBattleWithEnemyConfig(scene, encounter.enemyPartyConfigs[0]); + await initBattleWithEnemyConfig(encounter.enemyPartyConfigs[0]); } ) .withSimpleOption( @@ -133,12 +136,12 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = }, ], }, - async (scene: BattleScene) => { + async () => { // Fall asleep waiting for Snorlax // Full heal party - scene.unshiftPhase(new PartyHealPhase(scene, true)); - queueEncounterMessage(scene, `${namespace}:option.2.rest_result`); - leaveEncounterWithoutBattle(scene); + globalScene.unshiftPhase(new PartyHealPhase(true)); + queueEncounterMessage(`${namespace}:option.2.rest_result`); + leaveEncounterWithoutBattle(); } ) .withOption( @@ -155,13 +158,13 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = } ] }) - .withOptionPhase(async (scene: BattleScene) => { + .withOptionPhase(async () => { // Steal the Snorlax's Leftovers - const instance = scene.currentBattle.mysteryEncounter!; - setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [ modifierTypes.LEFTOVERS ], fillRemaining: false }); + const instance = globalScene.currentBattle.mysteryEncounter!; + setEncounterRewards({ guaranteedModifierTypeFuncs: [ modifierTypes.LEFTOVERS ], fillRemaining: false }); // Snorlax exp to Pokemon that did the stealing - setEncounterExp(scene, instance.primaryPokemon!.id, getPokemonSpecies(Species.SNORLAX).baseExp); - leaveEncounterWithoutBattle(scene); + setEncounterExp(instance.primaryPokemon!.id, getPokemonSpecies(Species.SNORLAX).baseExp); + leaveEncounterWithoutBattle(); }) .build() ) diff --git a/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts b/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts index 042e9278673..16015c80fc8 100644 --- a/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts +++ b/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts @@ -1,10 +1,13 @@ -import { EnemyPartyConfig, generateModifierTypeOption, initBattleWithEnemyConfig, setEncounterExp, setEncounterRewards, transitionMysteryEncounterIntroVisuals, updatePlayerMoney, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import type { EnemyPartyConfig } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import { generateModifierTypeOption, initBattleWithEnemyConfig, setEncounterExp, setEncounterRewards, transitionMysteryEncounterIntroVisuals, updatePlayerMoney, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { randSeedInt } from "#app/utils"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import BattleScene from "#app/battle-scene"; -import MysteryEncounter, { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; +import { globalScene } from "#app/global-scene"; +import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MoneyRequirement, WaveModulusRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements"; -import Pokemon, { EnemyPokemon } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; +import { EnemyPokemon } from "#app/field/pokemon"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; import { queueEncounterMessage, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import PokemonData from "#app/system/pokemon-data"; @@ -62,9 +65,9 @@ export const TeleportingHijinksEncounter: MysteryEncounter = .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) - .withOnInit((scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; - const price = scene.getWaveMoneyAmount(MONEY_COST_MULTIPLIER); + .withOnInit(() => { + const encounter = globalScene.currentBattle.mysteryEncounter!; + const price = globalScene.getWaveMoneyAmount(MONEY_COST_MULTIPLIER); encounter.setDialogueToken("price", price.toString()); encounter.misc = { price @@ -85,14 +88,14 @@ export const TeleportingHijinksEncounter: MysteryEncounter = } ], }) - .withPreOptionPhase(async (scene: BattleScene) => { + .withPreOptionPhase(async () => { // Update money - updatePlayerMoney(scene, -scene.currentBattle.mysteryEncounter!.misc.price, true, false); + updatePlayerMoney(-globalScene.currentBattle.mysteryEncounter!.misc.price, true, false); }) - .withOptionPhase(async (scene: BattleScene) => { - const config: EnemyPartyConfig = await doBiomeTransitionDialogueAndBattleInit(scene); - setEncounterRewards(scene, { fillRemaining: true }); - await initBattleWithEnemyConfig(scene, config); + .withOptionPhase(async () => { + const config: EnemyPartyConfig = await doBiomeTransitionDialogueAndBattleInit(); + setEncounterRewards({ fillRemaining: true }); + await initBattleWithEnemyConfig(config); }) .build() ) @@ -110,11 +113,11 @@ export const TeleportingHijinksEncounter: MysteryEncounter = } ], }) - .withOptionPhase(async (scene: BattleScene) => { - const config: EnemyPartyConfig = await doBiomeTransitionDialogueAndBattleInit(scene); - setEncounterRewards(scene, { fillRemaining: true }); - setEncounterExp(scene, scene.currentBattle.mysteryEncounter!.selectedOption!.primaryPokemon!.id, 100); - await initBattleWithEnemyConfig(scene, config); + .withOptionPhase(async () => { + const config: EnemyPartyConfig = await doBiomeTransitionDialogueAndBattleInit(); + setEncounterRewards({ fillRemaining: true }); + setEncounterExp(globalScene.currentBattle.mysteryEncounter!.selectedOption!.primaryPokemon!.id, 100); + await initBattleWithEnemyConfig(config); }) .build() ) @@ -128,14 +131,14 @@ export const TeleportingHijinksEncounter: MysteryEncounter = }, ], }, - async (scene: BattleScene) => { + async () => { // Inspect the Machine - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; // Init enemy - const level = getEncounterPokemonLevelForWave(scene, STANDARD_ENCOUNTER_BOOSTED_LEVEL_MODIFIER); - const bossSpecies = scene.arena.randomSpecies(scene.currentBattle.waveIndex, level, 0, getPartyLuckValue(scene.getPlayerParty()), true); - const bossPokemon = new EnemyPokemon(scene, bossSpecies, level, TrainerSlot.NONE, true); + const level = getEncounterPokemonLevelForWave(STANDARD_ENCOUNTER_BOOSTED_LEVEL_MODIFIER); + const bossSpecies = globalScene.arena.randomSpecies(globalScene.currentBattle.waveIndex, level, 0, getPartyLuckValue(globalScene.getPlayerParty()), true); + const bossPokemon = new EnemyPokemon(bossSpecies, level, TrainerSlot.NONE, true); encounter.setDialogueToken("enemyPokemon", getPokemonNameWithAffix(bossPokemon)); const config: EnemyPartyConfig = { pokemonConfigs: [{ @@ -146,36 +149,37 @@ export const TeleportingHijinksEncounter: MysteryEncounter = }], }; - const magnet = generateModifierTypeOption(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [ Type.STEEL ])!; - const metalCoat = generateModifierTypeOption(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [ Type.ELECTRIC ])!; - setEncounterRewards(scene, { guaranteedModifierTypeOptions: [ magnet, metalCoat ], fillRemaining: true }); - await transitionMysteryEncounterIntroVisuals(scene, true, true); - await initBattleWithEnemyConfig(scene, config); + const magnet = generateModifierTypeOption(modifierTypes.ATTACK_TYPE_BOOSTER, [ Type.STEEL ])!; + const metalCoat = generateModifierTypeOption(modifierTypes.ATTACK_TYPE_BOOSTER, [ Type.ELECTRIC ])!; + setEncounterRewards({ guaranteedModifierTypeOptions: [ magnet, metalCoat ], fillRemaining: true }); + await transitionMysteryEncounterIntroVisuals(true, true); + await initBattleWithEnemyConfig(config); } ) .build(); -async function doBiomeTransitionDialogueAndBattleInit(scene: BattleScene) { - const encounter = scene.currentBattle.mysteryEncounter!; +async function doBiomeTransitionDialogueAndBattleInit() { + const encounter = globalScene.currentBattle.mysteryEncounter!; // Calculate new biome (cannot be current biome) - const filteredBiomes = BIOME_CANDIDATES.filter(b => scene.arena.biomeType !== b); + const filteredBiomes = BIOME_CANDIDATES.filter(b => globalScene.arena.biomeType !== b); const newBiome = filteredBiomes[randSeedInt(filteredBiomes.length)]; // Show dialogue and transition biome - await showEncounterText(scene, `${namespace}:transport`); - await Promise.all([ animateBiomeChange(scene, newBiome), transitionMysteryEncounterIntroVisuals(scene) ]); - scene.playBgm(); - await showEncounterText(scene, `${namespace}:attacked`); + await showEncounterText(`${namespace}:transport`); + await Promise.all([ animateBiomeChange(newBiome), transitionMysteryEncounterIntroVisuals() ]); + globalScene.updateBiomeWaveText(); + globalScene.playBgm(); + await showEncounterText(`${namespace}:attacked`); // Init enemy - const level = getEncounterPokemonLevelForWave(scene, STANDARD_ENCOUNTER_BOOSTED_LEVEL_MODIFIER); - const bossSpecies = scene.arena.randomSpecies(scene.currentBattle.waveIndex, level, 0, getPartyLuckValue(scene.getPlayerParty()), true); - const bossPokemon = new EnemyPokemon(scene, bossSpecies, level, TrainerSlot.NONE, true); + const level = getEncounterPokemonLevelForWave(STANDARD_ENCOUNTER_BOOSTED_LEVEL_MODIFIER); + const bossSpecies = globalScene.arena.randomSpecies(globalScene.currentBattle.waveIndex, level, 0, getPartyLuckValue(globalScene.getPlayerParty()), true); + const bossPokemon = new EnemyPokemon(bossSpecies, level, TrainerSlot.NONE, true); encounter.setDialogueToken("enemyPokemon", getPokemonNameWithAffix(bossPokemon)); // Defense/Spd buffs below wave 50, +1 to all stats otherwise - const statChangesForBattle: (Stat.ATK | Stat.DEF | Stat.SPATK | Stat.SPDEF | Stat.SPD | Stat.ACC | Stat.EVA)[] = scene.currentBattle.waveIndex < 50 ? + const statChangesForBattle: (Stat.ATK | Stat.DEF | Stat.SPATK | Stat.SPDEF | Stat.SPD | Stat.ACC | Stat.EVA)[] = globalScene.currentBattle.waveIndex < 50 ? [ Stat.DEF, Stat.SPDEF, Stat.SPD ] : [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ]; @@ -187,8 +191,8 @@ async function doBiomeTransitionDialogueAndBattleInit(scene: BattleScene) { isBoss: true, tags: [ BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON ], mysteryEncounterBattleEffects: (pokemon: Pokemon) => { - queueEncounterMessage(pokemon.scene, `${namespace}:boss_enraged`); - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, statChangesForBattle, 1)); + queueEncounterMessage(`${namespace}:boss_enraged`); + globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, statChangesForBattle, 1)); } }], }; @@ -196,46 +200,46 @@ async function doBiomeTransitionDialogueAndBattleInit(scene: BattleScene) { return config; } -async function animateBiomeChange(scene: BattleScene, nextBiome: Biome) { +async function animateBiomeChange(nextBiome: Biome) { return new Promise(resolve => { - scene.tweens.add({ - targets: [ scene.arenaEnemy, scene.lastEnemyTrainer ], + globalScene.tweens.add({ + targets: [ globalScene.arenaEnemy, globalScene.lastEnemyTrainer ], x: "+=300", duration: 2000, onComplete: () => { - scene.newArena(nextBiome); + globalScene.newArena(nextBiome); const biomeKey = getBiomeKey(nextBiome); const bgTexture = `${biomeKey}_bg`; - scene.arenaBgTransition.setTexture(bgTexture); - scene.arenaBgTransition.setAlpha(0); - scene.arenaBgTransition.setVisible(true); - scene.arenaPlayerTransition.setBiome(nextBiome); - scene.arenaPlayerTransition.setAlpha(0); - scene.arenaPlayerTransition.setVisible(true); + globalScene.arenaBgTransition.setTexture(bgTexture); + globalScene.arenaBgTransition.setAlpha(0); + globalScene.arenaBgTransition.setVisible(true); + globalScene.arenaPlayerTransition.setBiome(nextBiome); + globalScene.arenaPlayerTransition.setAlpha(0); + globalScene.arenaPlayerTransition.setVisible(true); - scene.tweens.add({ - targets: [ scene.arenaPlayer, scene.arenaBgTransition, scene.arenaPlayerTransition ], + globalScene.tweens.add({ + targets: [ globalScene.arenaPlayer, globalScene.arenaBgTransition, globalScene.arenaPlayerTransition ], duration: 1000, ease: "Sine.easeInOut", - alpha: (target: any) => target === scene.arenaPlayer ? 0 : 1, + alpha: (target: any) => target === globalScene.arenaPlayer ? 0 : 1, onComplete: () => { - scene.arenaBg.setTexture(bgTexture); - scene.arenaPlayer.setBiome(nextBiome); - scene.arenaPlayer.setAlpha(1); - scene.arenaEnemy.setBiome(nextBiome); - scene.arenaEnemy.setAlpha(1); - scene.arenaNextEnemy.setBiome(nextBiome); - scene.arenaBgTransition.setVisible(false); - scene.arenaPlayerTransition.setVisible(false); - if (scene.lastEnemyTrainer) { - scene.lastEnemyTrainer.destroy(); + globalScene.arenaBg.setTexture(bgTexture); + globalScene.arenaPlayer.setBiome(nextBiome); + globalScene.arenaPlayer.setAlpha(1); + globalScene.arenaEnemy.setBiome(nextBiome); + globalScene.arenaEnemy.setAlpha(1); + globalScene.arenaNextEnemy.setBiome(nextBiome); + globalScene.arenaBgTransition.setVisible(false); + globalScene.arenaPlayerTransition.setVisible(false); + if (globalScene.lastEnemyTrainer) { + globalScene.lastEnemyTrainer.destroy(); } resolve(); - scene.tweens.add({ - targets: scene.arenaEnemy, + globalScene.tweens.add({ + targets: globalScene.arenaEnemy, x: "-=300", }); } 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 5ac9852f27a..a4e80c158bb 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 @@ -1,9 +1,11 @@ -import { EnemyPartyConfig, generateModifierType, handleMysteryEncounterBattleFailed, initBattleWithEnemyConfig, setEncounterRewards, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import type { EnemyPartyConfig } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import { handleMysteryEncounterBattleFailed, initBattleWithEnemyConfig, setEncounterRewards, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { trainerConfigs } from "#app/data/trainer-config"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { randSeedShuffle } from "#app/utils"; -import MysteryEncounter, { MysteryEncounterBuilder } from "../mystery-encounter"; +import type MysteryEncounter from "../mystery-encounter"; +import { MysteryEncounterBuilder } from "../mystery-encounter"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; import { Biome } from "#enums/biome"; @@ -14,17 +16,17 @@ import { getPokemonSpecies } from "#app/data/pokemon-species"; import { speciesStarterCosts } from "#app/data/balance/starters"; import { Nature } from "#enums/nature"; import { Moves } from "#enums/moves"; -import { PlayerPokemon } from "#app/field/pokemon"; +import type { PlayerPokemon } from "#app/field/pokemon"; import { getEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; -import { IEggOptions } from "#app/data/egg"; +import type { IEggOptions } from "#app/data/egg"; import { EggSourceType } from "#enums/egg-source-types"; import { EggTier } from "#enums/egg-type"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; -import { modifierTypes, PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/modifier/modifier-type"; import { Type } from "#enums/type"; import { getPokeballTintColor } from "#app/data/pokeball"; -import { PokemonHeldItemModifier } from "#app/modifier/modifier"; +import type { PokemonHeldItemModifier } from "#app/modifier/modifier"; /** the i18n namespace for the encounter */ const namespace = "mysteryEncounters/theExpertPokemonBreeder"; @@ -93,14 +95,14 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = text: `${namespace}:intro_dialogue`, }, ]) - .withOnInit((scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; - const waveIndex = scene.currentBattle.waveIndex; + .withOnInit(() => { + const encounter = globalScene.currentBattle.mysteryEncounter!; + const waveIndex = globalScene.currentBattle.waveIndex; // Calculates what trainers are available for battle in the encounter // If player is in space biome, uses special "Space" version of the trainer encounter.enemyPartyConfigs = [ - getPartyConfig(scene) + getPartyConfig() ]; const cleffaSpecies = waveIndex < FIRST_STAGE_EVOLUTION_WAVE ? Species.CLEFFA : waveIndex < FINAL_STAGE_EVOLUTION_WAVE ? Species.CLEFAIRY : Species.CLEFABLE; @@ -125,7 +127,7 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = ]; // Determine the 3 pokemon the player can battle with - let partyCopy = scene.getPlayerParty().slice(0); + let partyCopy = globalScene.getPlayerParty().slice(0); partyCopy = partyCopy .filter(p => p.isAllowedInBattle()) .sort((a, b) => a.friendship - b.friendship); @@ -139,7 +141,7 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = // Dialogue and egg calcs for Pokemon 1 const [ pokemon1CommonEggs, pokemon1RareEggs ] = calculateEggRewardsForPokemon(pokemon1); - let pokemon1Tooltip = getEncounterText(scene, `${namespace}:option.1.tooltip_base`)!; + let pokemon1Tooltip = getEncounterText(`${namespace}:option.1.tooltip_base`)!; if (pokemon1RareEggs > 0) { const eggsText = i18next.t(`${namespace}:numEggs`, { count: pokemon1RareEggs, rarity: i18next.t("egg:greatTier") }); pokemon1Tooltip += i18next.t(`${namespace}:eggs_tooltip`, { eggs: eggsText }); @@ -154,7 +156,7 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = // Dialogue and egg calcs for Pokemon 2 const [ pokemon2CommonEggs, pokemon2RareEggs ] = calculateEggRewardsForPokemon(pokemon2); - let pokemon2Tooltip = getEncounterText(scene, `${namespace}:option.2.tooltip_base`)!; + let pokemon2Tooltip = getEncounterText(`${namespace}:option.2.tooltip_base`)!; if (pokemon2RareEggs > 0) { const eggsText = i18next.t(`${namespace}:numEggs`, { count: pokemon2RareEggs, rarity: i18next.t("egg:greatTier") }); pokemon2Tooltip += i18next.t(`${namespace}:eggs_tooltip`, { eggs: eggsText }); @@ -169,7 +171,7 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = // Dialogue and egg calcs for Pokemon 3 const [ pokemon3CommonEggs, pokemon3RareEggs ] = calculateEggRewardsForPokemon(pokemon3); - let pokemon3Tooltip = getEncounterText(scene, `${namespace}:option.3.tooltip_base`)!; + let pokemon3Tooltip = getEncounterText(`${namespace}:option.3.tooltip_base`)!; if (pokemon3RareEggs > 0) { const eggsText = i18next.t(`${namespace}:numEggs`, { count: pokemon3RareEggs, rarity: i18next.t("egg:greatTier") }); pokemon3Tooltip += i18next.t(`${namespace}:eggs_tooltip`, { eggs: eggsText }); @@ -212,22 +214,22 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = }, ], }) - .withOptionPhase(async (scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOptionPhase(async () => { + const encounter = globalScene.currentBattle.mysteryEncounter!; // Spawn battle with first pokemon const config: EnemyPartyConfig = encounter.enemyPartyConfigs[0]; const { pokemon1, pokemon1CommonEggs, pokemon1RareEggs } = encounter.misc; encounter.misc.chosenPokemon = pokemon1; encounter.setDialogueToken("chosenPokemon", pokemon1.getNameToRender()); - const eggOptions = getEggOptions(scene, pokemon1CommonEggs, pokemon1RareEggs); - setEncounterRewards(scene, + const eggOptions = getEggOptions(pokemon1CommonEggs, pokemon1RareEggs); + setEncounterRewards( { guaranteedModifierTypeFuncs: [ modifierTypes.SOOTHE_BELL ], fillRemaining: true }, eggOptions, - () => doPostEncounterCleanup(scene)); + () => doPostEncounterCleanup()); // Remove all Pokemon from the party except the chosen Pokemon - removePokemonFromPartyAndStoreHeldItems(scene, encounter, pokemon1); + removePokemonFromPartyAndStoreHeldItems(encounter, pokemon1); // Configure outro dialogue for egg rewards encounter.dialogue.outro = [ @@ -248,7 +250,7 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = } encounter.onGameOver = onGameOver; - await initBattleWithEnemyConfig(scene, config); + await initBattleWithEnemyConfig(config); }) .build() ) @@ -264,22 +266,22 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = }, ], }) - .withOptionPhase(async (scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOptionPhase(async () => { + const encounter = globalScene.currentBattle.mysteryEncounter!; // Spawn battle with second pokemon const config: EnemyPartyConfig = encounter.enemyPartyConfigs[0]; const { pokemon2, pokemon2CommonEggs, pokemon2RareEggs } = encounter.misc; encounter.misc.chosenPokemon = pokemon2; encounter.setDialogueToken("chosenPokemon", pokemon2.getNameToRender()); - const eggOptions = getEggOptions(scene, pokemon2CommonEggs, pokemon2RareEggs); - setEncounterRewards(scene, + const eggOptions = getEggOptions(pokemon2CommonEggs, pokemon2RareEggs); + setEncounterRewards( { guaranteedModifierTypeFuncs: [ modifierTypes.SOOTHE_BELL ], fillRemaining: true }, eggOptions, - () => doPostEncounterCleanup(scene)); + () => doPostEncounterCleanup()); // Remove all Pokemon from the party except the chosen Pokemon - removePokemonFromPartyAndStoreHeldItems(scene, encounter, pokemon2); + removePokemonFromPartyAndStoreHeldItems(encounter, pokemon2); // Configure outro dialogue for egg rewards encounter.dialogue.outro = [ @@ -300,7 +302,7 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = } encounter.onGameOver = onGameOver; - await initBattleWithEnemyConfig(scene, config); + await initBattleWithEnemyConfig(config); }) .build() ) @@ -316,22 +318,22 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = }, ], }) - .withOptionPhase(async (scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOptionPhase(async () => { + const encounter = globalScene.currentBattle.mysteryEncounter!; // Spawn battle with third pokemon const config: EnemyPartyConfig = encounter.enemyPartyConfigs[0]; const { pokemon3, pokemon3CommonEggs, pokemon3RareEggs } = encounter.misc; encounter.misc.chosenPokemon = pokemon3; encounter.setDialogueToken("chosenPokemon", pokemon3.getNameToRender()); - const eggOptions = getEggOptions(scene, pokemon3CommonEggs, pokemon3RareEggs); - setEncounterRewards(scene, + const eggOptions = getEggOptions(pokemon3CommonEggs, pokemon3RareEggs); + setEncounterRewards( { guaranteedModifierTypeFuncs: [ modifierTypes.SOOTHE_BELL ], fillRemaining: true }, eggOptions, - () => doPostEncounterCleanup(scene)); + () => doPostEncounterCleanup()); // Remove all Pokemon from the party except the chosen Pokemon - removePokemonFromPartyAndStoreHeldItems(scene, encounter, pokemon3); + removePokemonFromPartyAndStoreHeldItems(encounter, pokemon3); // Configure outro dialogue for egg rewards encounter.dialogue.outro = [ @@ -352,7 +354,7 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = } encounter.onGameOver = onGameOver; - await initBattleWithEnemyConfig(scene, config); + await initBattleWithEnemyConfig(config); }) .build() ) @@ -364,9 +366,9 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = ]) .build(); -function getPartyConfig(scene: BattleScene): EnemyPartyConfig { +function getPartyConfig(): EnemyPartyConfig { // Bug type superfan trainer config - const waveIndex = scene.currentBattle.waveIndex; + const waveIndex = globalScene.currentBattle.waveIndex; const breederConfig = trainerConfigs[TrainerType.EXPERT_POKEMON_BREEDER].clone(); breederConfig.name = i18next.t(trainerNameKey); @@ -384,16 +386,12 @@ function getPartyConfig(scene: BattleScene): EnemyPartyConfig { nature: Nature.ADAMANT, moveSet: [ Moves.METEOR_MASH, Moves.FIRE_PUNCH, Moves.ICE_PUNCH, Moves.THUNDER_PUNCH ], ivs: [ 31, 31, 31, 31, 31, 31 ], - modifierConfigs: [ - { - modifier: generateModifierType(scene, modifierTypes.TERA_SHARD, [ Type.STEEL ]) as PokemonHeldItemModifierType, - } - ] + tera: Type.STEEL, } ] }; - if (scene.arena.biomeType === Biome.SPACE) { + if (globalScene.arena.biomeType === Biome.SPACE) { // All 3 members always Cleffa line, but different configs baseConfig.pokemonConfigs!.push({ nickname: i18next.t(`${namespace}:cleffa_2_nickname`, { speciesName: getPokemonSpecies(cleffaSpecies).getName() }), @@ -449,7 +447,7 @@ function getSpeciesFromPool(speciesPool: (Species | BreederSpeciesEvolution)[][] } function calculateEggRewardsForPokemon(pokemon: PlayerPokemon): [number, number] { - const bst = pokemon.calculateBaseStats().reduce((a, b) => a + b, 0); + const bst = pokemon.getSpeciesForm().getBaseStatTotal(); // 1 point for every 20 points below 680 BST the pokemon is, (max 18, min 1) const pointsFromBst = Math.min(Math.max(Math.floor((680 - bst) / 20), 1), 18); @@ -476,14 +474,13 @@ function calculateEggRewardsForPokemon(pokemon: PlayerPokemon): [number, number] return [ numCommons, numRares ]; } -function getEggOptions(scene: BattleScene, commonEggs: number, rareEggs: number) { +function getEggOptions(commonEggs: number, rareEggs: number) { const eggDescription = i18next.t(`${namespace}:title`) + ":\n" + i18next.t(trainerNameKey); const eggOptions: IEggOptions[] = []; if (commonEggs > 0) { for (let i = 0; i < commonEggs; i++) { eggOptions.push({ - scene, pulled: false, sourceType: EggSourceType.EVENT, eggDescriptor: eggDescription, @@ -494,7 +491,6 @@ function getEggOptions(scene: BattleScene, commonEggs: number, rareEggs: number) if (rareEggs > 0) { for (let i = 0; i < rareEggs; i++) { eggOptions.push({ - scene, pulled: false, sourceType: EggSourceType.EVENT, eggDescriptor: eggDescription, @@ -506,36 +502,36 @@ function getEggOptions(scene: BattleScene, commonEggs: number, rareEggs: number) return eggOptions; } -function removePokemonFromPartyAndStoreHeldItems(scene: BattleScene, encounter: MysteryEncounter, chosenPokemon: PlayerPokemon) { - const party = scene.getPlayerParty(); +function removePokemonFromPartyAndStoreHeldItems(encounter: MysteryEncounter, chosenPokemon: PlayerPokemon) { + const party = globalScene.getPlayerParty(); const chosenIndex = party.indexOf(chosenPokemon); party[chosenIndex] = party[0]; party[0] = chosenPokemon; - encounter.misc.originalParty = scene.getPlayerParty().slice(1); + encounter.misc.originalParty = globalScene.getPlayerParty().slice(1); encounter.misc.originalPartyHeldItems = encounter.misc.originalParty .map(p => p.getHeldItems()); - scene["party"] = [ + globalScene["party"] = [ chosenPokemon ]; } -function restorePartyAndHeldItems(scene: BattleScene) { - const encounter = scene.currentBattle.mysteryEncounter!; +function restorePartyAndHeldItems() { + const encounter = globalScene.currentBattle.mysteryEncounter!; // Restore original party - scene.getPlayerParty().push(...encounter.misc.originalParty); + globalScene.getPlayerParty().push(...encounter.misc.originalParty); // Restore held items const originalHeldItems = encounter.misc.originalPartyHeldItems; originalHeldItems.forEach((pokemonHeldItemsList: PokemonHeldItemModifier[]) => { pokemonHeldItemsList.forEach(heldItem => { - scene.addModifier(heldItem, true, false, false, true); + globalScene.addModifier(heldItem, true, false, false, true); }); }); - scene.updateModifiers(true); + globalScene.updateModifiers(true); } -function onGameOver(scene: BattleScene) { - const encounter = scene.currentBattle.mysteryEncounter!; +function onGameOver() { + const encounter = globalScene.currentBattle.mysteryEncounter!; encounter.dialogue.outro = [ { @@ -545,7 +541,7 @@ function onGameOver(scene: BattleScene) { ]; // Restore original party, player loses all friendship with chosen mon (it remains fainted) - restorePartyAndHeldItems(scene); + restorePartyAndHeldItems(); const chosenPokemon = encounter.misc.chosenPokemon; chosenPokemon.friendship = 0; @@ -556,33 +552,33 @@ function onGameOver(scene: BattleScene) { encounter.misc.encounterFailed = true; // Revert BGM - scene.playBgm(scene.arena.bgm); + globalScene.playBgm(globalScene.arena.bgm); // Clear any leftover battle phases - scene.clearPhaseQueue(); - scene.clearPhaseQueueSplice(); + globalScene.clearPhaseQueue(); + globalScene.clearPhaseQueueSplice(); // Return enemy Pokemon - const pokemon = scene.getEnemyPokemon(); + const pokemon = globalScene.getEnemyPokemon(); if (pokemon) { - scene.playSound("se/pb_rel"); + globalScene.playSound("se/pb_rel"); pokemon.hideInfo(); pokemon.tint(getPokeballTintColor(pokemon.pokeball), 1, 250, "Sine.easeIn"); - scene.tweens.add({ + globalScene.tweens.add({ targets: pokemon, duration: 250, ease: "Sine.easeIn", scale: 0.5, onComplete: () => { - scene.field.remove(pokemon, true); + pokemon.leaveField(true, true, true); } }); } // Show the enemy trainer - scene.time.delayedCall(250, () => { - const sprites = scene.currentBattle.trainer?.getSprites(); - const tintSprites = scene.currentBattle.trainer?.getTintSprites(); + globalScene.time.delayedCall(250, () => { + const sprites = globalScene.currentBattle.trainer?.getSprites(); + const tintSprites = globalScene.currentBattle.trainer?.getTintSprites(); if (sprites && tintSprites) { for (let i = 0; i < sprites.length; i++) { sprites[i].setVisible(true); @@ -591,8 +587,8 @@ function onGameOver(scene: BattleScene) { tintSprites[i].clearTint(); } } - scene.tweens.add({ - targets: scene.currentBattle.trainer, + globalScene.tweens.add({ + targets: globalScene.currentBattle.trainer, x: "-=16", y: "+=16", alpha: 1, @@ -602,16 +598,16 @@ function onGameOver(scene: BattleScene) { }); - handleMysteryEncounterBattleFailed(scene, true); + handleMysteryEncounterBattleFailed(true); return false; } -function doPostEncounterCleanup(scene: BattleScene) { - const encounter = scene.currentBattle.mysteryEncounter!; +function doPostEncounterCleanup() { + const encounter = globalScene.currentBattle.mysteryEncounter!; if (!encounter.misc.encounterFailed) { // Give 20 friendship to the chosen pokemon encounter.misc.chosenPokemon.addFriendship(FRIENDSHIP_ADDED); - restorePartyAndHeldItems(scene); + restorePartyAndHeldItems(); } } diff --git a/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts b/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts index feb6e68d1d1..ff4dd9750c9 100644 --- a/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts @@ -1,15 +1,18 @@ import { leaveEncounterWithoutBattle, transitionMysteryEncounterIntroVisuals, updatePlayerMoney, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { isNullOrUndefined, randSeedInt } from "#app/utils"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import BattleScene from "#app/battle-scene"; -import MysteryEncounter, { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; +import { globalScene } from "#app/global-scene"; +import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MoneyRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements"; import { catchPokemon, getRandomSpeciesByStarterCost, getSpriteKeysFromPokemon } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; -import PokemonSpecies, { getPokemonSpecies } from "#app/data/pokemon-species"; +import type PokemonSpecies from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/data/pokemon-species"; import { speciesStarterCosts } from "#app/data/balance/starters"; import { Species } from "#enums/species"; import { PokeballType } from "#enums/pokeball"; -import { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; +import type { EnemyPokemon } from "#app/field/pokemon"; +import { PlayerPokemon } from "#app/field/pokemon"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; import { showEncounterDialogue } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import PokemonData from "#app/system/pokemon-data"; @@ -58,8 +61,8 @@ export const ThePokemonSalesmanEncounter: MysteryEncounter = .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) - .withOnInit((scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOnInit(() => { + const encounter = globalScene.currentBattle.mysteryEncounter!; let species = getSalesmanSpeciesOffer(); let tries = 0; @@ -74,9 +77,9 @@ export const ThePokemonSalesmanEncounter: MysteryEncounter = if (randSeedInt(SHINY_MAGIKARP_WEIGHT) === 0 || isNullOrUndefined(species.abilityHidden) || species.abilityHidden === Abilities.NONE) { // If no HA mon found or you roll 1%, give shiny Magikarp with random variant species = getPokemonSpecies(Species.MAGIKARP); - pokemon = new PlayerPokemon(scene, species, 5, 2, species.formIndex, undefined, true); + pokemon = new PlayerPokemon(species, 5, 2, species.formIndex, undefined, true); } else { - pokemon = new PlayerPokemon(scene, species, 5, 2, species.formIndex); + pokemon = new PlayerPokemon(species, 5, 2, species.formIndex); } pokemon.generateAndPopulateMoveset(); @@ -101,7 +104,7 @@ export const ThePokemonSalesmanEncounter: MysteryEncounter = encounter.dialogue.encounterOptionsDialogue!.description = `${namespace}:description_shiny`; encounter.options[0].dialogue!.buttonTooltip = `${namespace}:option.1.tooltip_shiny`; } - const price = scene.getWaveMoneyAmount(priceMultiplier); + const price = globalScene.getWaveMoneyAmount(priceMultiplier); encounter.setDialogueToken("purchasePokemon", pokemon.getNameToRender()); encounter.setDialogueToken("price", price.toString()); encounter.misc = { @@ -127,24 +130,24 @@ export const ThePokemonSalesmanEncounter: MysteryEncounter = } ], }) - .withOptionPhase(async (scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOptionPhase(async () => { + const encounter = globalScene.currentBattle.mysteryEncounter!; const price = encounter.misc.price; const purchasedPokemon = encounter.misc.pokemon as PlayerPokemon; // Update money - updatePlayerMoney(scene, -price, true, false); + updatePlayerMoney(-price, true, false); // Show dialogue - await showEncounterDialogue(scene, `${namespace}:option.1.selected_dialogue`, `${namespace}:speaker`); - await transitionMysteryEncounterIntroVisuals(scene); + await showEncounterDialogue(`${namespace}:option.1.selected_dialogue`, `${namespace}:speaker`); + await transitionMysteryEncounterIntroVisuals(); // "Catch" purchased pokemon const data = new PokemonData(purchasedPokemon); data.player = false; - await catchPokemon(scene, data.toPokemon(scene) as EnemyPokemon, null, PokeballType.POKEBALL, true, true); + await catchPokemon(data.toPokemon() as EnemyPokemon, null, PokeballType.POKEBALL, true, true); - leaveEncounterWithoutBattle(scene, true); + leaveEncounterWithoutBattle(true); }) .build() ) @@ -158,9 +161,9 @@ export const ThePokemonSalesmanEncounter: MysteryEncounter = }, ], }, - async (scene: BattleScene) => { + async () => { // Leave encounter with no rewards or exp - leaveEncounterWithoutBattle(scene, true); + leaveEncounterWithoutBattle(true); return true; } ) diff --git a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts index c5cfd3f954e..9e94e87938e 100644 --- a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts @@ -1,12 +1,16 @@ -import { EnemyPartyConfig, initBattleWithEnemyConfig, loadCustomMovesForEncounter, leaveEncounterWithoutBattle, setEncounterRewards, transitionMysteryEncounterIntroVisuals, generateModifierType } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import { modifierTypes, PokemonHeldItemModifierType, } from "#app/modifier/modifier-type"; +import type { EnemyPartyConfig } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import { initBattleWithEnemyConfig, loadCustomMovesForEncounter, leaveEncounterWithoutBattle, setEncounterRewards, transitionMysteryEncounterIntroVisuals, generateModifierType } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import type { PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/modifier/modifier-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import BattleScene from "#app/battle-scene"; -import MysteryEncounter, { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; +import { globalScene } from "#app/global-scene"; +import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { Species } from "#enums/species"; import { Nature } from "#enums/nature"; -import Pokemon, { PokemonMove } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; +import { PokemonMove } from "#app/field/pokemon"; import { queueEncounterMessage, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { modifyPlayerPokemonBST } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import { Moves } from "#enums/moves"; @@ -67,8 +71,8 @@ export const TheStrongStuffEncounter: MysteryEncounter = text: `${namespace}:intro`, }, ]) - .withOnInit((scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOnInit(() => { + const encounter = globalScene.currentBattle.mysteryEncounter!; // Calculate boss mon const config: EnemyPartyConfig = { @@ -85,26 +89,26 @@ export const TheStrongStuffEncounter: MysteryEncounter = moveSet: [ Moves.INFESTATION, Moves.SALT_CURE, Moves.GASTRO_ACID, Moves.HEAL_ORDER ], modifierConfigs: [ { - modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.SITRUS ]) as PokemonHeldItemModifierType + modifier: generateModifierType(modifierTypes.BERRY, [ BerryType.SITRUS ]) as PokemonHeldItemModifierType }, { - modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.ENIGMA ]) as PokemonHeldItemModifierType + modifier: generateModifierType(modifierTypes.BERRY, [ BerryType.ENIGMA ]) as PokemonHeldItemModifierType }, { - modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.APICOT ]) as PokemonHeldItemModifierType + modifier: generateModifierType(modifierTypes.BERRY, [ BerryType.APICOT ]) as PokemonHeldItemModifierType }, { - modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.GANLON ]) as PokemonHeldItemModifierType + modifier: generateModifierType(modifierTypes.BERRY, [ BerryType.GANLON ]) as PokemonHeldItemModifierType }, { - modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.LUM ]) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.BERRY, [ BerryType.LUM ]) as PokemonHeldItemModifierType, stackCount: 2 } ], tags: [ BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON ], mysteryEncounterBattleEffects: (pokemon: Pokemon) => { - queueEncounterMessage(pokemon.scene, `${namespace}:option.2.stat_boost`); - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ Stat.DEF, Stat.SPDEF ], 2)); + queueEncounterMessage(`${namespace}:option.2.stat_boost`); + globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ Stat.DEF, Stat.SPDEF ], 2)); } } ], @@ -112,7 +116,7 @@ export const TheStrongStuffEncounter: MysteryEncounter = encounter.enemyPartyConfigs = [ config ]; - loadCustomMovesForEncounter(scene, [ Moves.GASTRO_ACID, Moves.STEALTH_ROCK ]); + loadCustomMovesForEncounter([ Moves.GASTRO_ACID, Moves.STEALTH_ROCK ]); encounter.setDialogueToken("shuckleName", getPokemonSpecies(Species.SHUCKLE).getName()); @@ -132,19 +136,19 @@ export const TheStrongStuffEncounter: MysteryEncounter = } ] }, - async (scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + async () => { + const encounter = globalScene.currentBattle.mysteryEncounter!; // Do blackout and hide intro visuals during blackout - scene.time.delayedCall(750, () => { - transitionMysteryEncounterIntroVisuals(scene, true, true, 50); + globalScene.time.delayedCall(750, () => { + transitionMysteryEncounterIntroVisuals(true, true, 50); }); // -15 to all base stats of highest BST (halved for HP), +10 to all base stats of rest of party (halved for HP) // Sort party by bst - const sortedParty = scene.getPlayerParty().slice(0) + const sortedParty = globalScene.getPlayerParty().slice(0) .sort((pokemon1, pokemon2) => { - const pokemon1Bst = pokemon1.calculateBaseStats().reduce((a, b) => a + b, 0); - const pokemon2Bst = pokemon2.calculateBaseStats().reduce((a, b) => a + b, 0); + const pokemon1Bst = pokemon1.getSpeciesForm().getBaseStatTotal(); + const pokemon2Bst = pokemon2.getSpeciesForm().getBaseStatTotal(); return pokemon2Bst - pokemon1Bst; }); @@ -161,15 +165,15 @@ export const TheStrongStuffEncounter: MysteryEncounter = encounter.setDialogueToken("reductionValue", HIGH_BST_REDUCTION_VALUE.toString()); encounter.setDialogueToken("increaseValue", BST_INCREASE_VALUE.toString()); - await showEncounterText(scene, `${namespace}:option.1.selected_2`, null, undefined, true); + await showEncounterText(`${namespace}:option.1.selected_2`, null, undefined, true); encounter.dialogue.outro = [ { text: `${namespace}:outro`, } ]; - setEncounterRewards(scene, { fillRemaining: true }); - leaveEncounterWithoutBattle(scene, true); + setEncounterRewards({ fillRemaining: true }); + leaveEncounterWithoutBattle(true); return true; } ) @@ -183,10 +187,10 @@ export const TheStrongStuffEncounter: MysteryEncounter = }, ], }, - async (scene: BattleScene) => { + async () => { // Pick battle - const encounter = scene.currentBattle.mysteryEncounter!; - setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [ modifierTypes.SOUL_DEW ], fillRemaining: true }); + const encounter = globalScene.currentBattle.mysteryEncounter!; + setEncounterRewards({ guaranteedModifierTypeFuncs: [ modifierTypes.SOUL_DEW ], fillRemaining: true }); encounter.startOfBattleEffects.push( { sourceBattlerIndex: BattlerIndex.ENEMY, @@ -202,8 +206,8 @@ export const TheStrongStuffEncounter: MysteryEncounter = }); encounter.dialogue.outro = []; - await transitionMysteryEncounterIntroVisuals(scene, true, true, 500); - await initBattleWithEnemyConfig(scene, encounter.enemyPartyConfigs[0]); + await transitionMysteryEncounterIntroVisuals(true, true, 500); + await initBattleWithEnemyConfig(encounter.enemyPartyConfigs[0]); } ) .build(); diff --git a/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts b/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts index f4446241873..7d3f6f4c5bc 100644 --- a/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts @@ -1,8 +1,11 @@ -import { EnemyPartyConfig, generateModifierType, generateModifierTypeOption, initBattleWithEnemyConfig, leaveEncounterWithoutBattle, setEncounterRewards, transitionMysteryEncounterIntroVisuals, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import { modifierTypes, PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; +import type { EnemyPartyConfig } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import { generateModifierType, generateModifierTypeOption, initBattleWithEnemyConfig, leaveEncounterWithoutBattle, setEncounterRewards, transitionMysteryEncounterIntroVisuals, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import type { PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/modifier/modifier-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import BattleScene from "#app/battle-scene"; -import MysteryEncounter, { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; +import { globalScene } from "#app/global-scene"; +import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { TrainerType } from "#enums/trainer-type"; import { Species } from "#enums/species"; @@ -13,7 +16,7 @@ import { Nature } from "#enums/nature"; import { Type } from "#enums/type"; import { BerryType } from "#enums/berry-type"; import { Stat } from "#enums/stat"; -import { SpeciesFormChangeManualTrigger } from "#app/data/pokemon-forms"; +import { SpeciesFormChangeAbilityTrigger } from "#app/data/pokemon-forms"; import { applyPostBattleInitAbAttrs, PostBattleInitAbAttr } from "#app/data/ability"; import { showEncounterDialogue, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; @@ -83,15 +86,15 @@ export const TheWinstrateChallengeEncounter: MysteryEncounter = }, ]) .withAutoHideIntroVisuals(false) - .withOnInit((scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOnInit(() => { + const encounter = globalScene.currentBattle.mysteryEncounter!; // Loaded back to front for pop() operations - encounter.enemyPartyConfigs.push(getVitoTrainerConfig(scene)); - encounter.enemyPartyConfigs.push(getVickyTrainerConfig(scene)); - encounter.enemyPartyConfigs.push(getViviTrainerConfig(scene)); - encounter.enemyPartyConfigs.push(getVictoriaTrainerConfig(scene)); - encounter.enemyPartyConfigs.push(getVictorTrainerConfig(scene)); + encounter.enemyPartyConfigs.push(getVitoTrainerConfig()); + encounter.enemyPartyConfigs.push(getVickyTrainerConfig()); + encounter.enemyPartyConfigs.push(getViviTrainerConfig()); + encounter.enemyPartyConfigs.push(getVictoriaTrainerConfig()); + encounter.enemyPartyConfigs.push(getVictorTrainerConfig()); return true; }) @@ -110,13 +113,13 @@ export const TheWinstrateChallengeEncounter: MysteryEncounter = }, ], }, - async (scene: BattleScene) => { + async () => { // Spawn 5 trainer battles back to back with Macho Brace in rewards - scene.currentBattle.mysteryEncounter!.doContinueEncounter = async (scene: BattleScene) => { - await endTrainerBattleAndShowDialogue(scene); + globalScene.currentBattle.mysteryEncounter!.doContinueEncounter = async () => { + await endTrainerBattleAndShowDialogue(); }; - await transitionMysteryEncounterIntroVisuals(scene, true, false); - await spawnNextTrainerOrEndEncounter(scene); + await transitionMysteryEncounterIntroVisuals(true, false); + await spawnNextTrainerOrEndEncounter(); } ) .withSimpleOption( @@ -130,47 +133,47 @@ export const TheWinstrateChallengeEncounter: MysteryEncounter = }, ], }, - async (scene: BattleScene) => { + async () => { // Refuse the challenge, they full heal the party and give the player a Rarer Candy - scene.unshiftPhase(new PartyHealPhase(scene, true)); - setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [ modifierTypes.RARER_CANDY ], fillRemaining: false }); - leaveEncounterWithoutBattle(scene); + globalScene.unshiftPhase(new PartyHealPhase(true)); + setEncounterRewards({ guaranteedModifierTypeFuncs: [ modifierTypes.RARER_CANDY ], fillRemaining: false }); + leaveEncounterWithoutBattle(); } ) .build(); -async function spawnNextTrainerOrEndEncounter(scene: BattleScene) { - const encounter = scene.currentBattle.mysteryEncounter!; +async function spawnNextTrainerOrEndEncounter() { + const encounter = globalScene.currentBattle.mysteryEncounter!; const nextConfig = encounter.enemyPartyConfigs.pop(); if (!nextConfig) { - await transitionMysteryEncounterIntroVisuals(scene, false, false); - await showEncounterDialogue(scene, `${namespace}:victory`, `${namespace}:speaker`); + await transitionMysteryEncounterIntroVisuals(false, false); + await showEncounterDialogue(`${namespace}:victory`, `${namespace}:speaker`); // Give 10x Voucher const newModifier = modifierTypes.VOUCHER_PREMIUM().newModifier(); - await scene.addModifier(newModifier); - scene.playSound("item_fanfare"); - await showEncounterText(scene, i18next.t("battle:rewardGain", { modifierName: newModifier?.type.name })); + globalScene.addModifier(newModifier); + globalScene.playSound("item_fanfare"); + await showEncounterText(i18next.t("battle:rewardGain", { modifierName: newModifier?.type.name })); - await showEncounterDialogue(scene, `${namespace}:victory_2`, `${namespace}:speaker`); - scene.ui.clearText(); // Clears "Winstrate" title from screen as rewards get animated in - const machoBrace = generateModifierTypeOption(scene, modifierTypes.MYSTERY_ENCOUNTER_MACHO_BRACE)!; + await showEncounterDialogue(`${namespace}:victory_2`, `${namespace}:speaker`); + globalScene.ui.clearText(); // Clears "Winstrate" title from screen as rewards get animated in + const machoBrace = generateModifierTypeOption(modifierTypes.MYSTERY_ENCOUNTER_MACHO_BRACE)!; machoBrace.type.tier = ModifierTier.MASTER; - setEncounterRewards(scene, { guaranteedModifierTypeOptions: [ machoBrace ], fillRemaining: false }); + setEncounterRewards({ guaranteedModifierTypeOptions: [ machoBrace ], fillRemaining: false }); encounter.doContinueEncounter = undefined; - leaveEncounterWithoutBattle(scene, false, MysteryEncounterMode.NO_BATTLE); + leaveEncounterWithoutBattle(false, MysteryEncounterMode.NO_BATTLE); } else { - await initBattleWithEnemyConfig(scene, nextConfig); + await initBattleWithEnemyConfig(nextConfig); } } -function endTrainerBattleAndShowDialogue(scene: BattleScene): Promise { +function endTrainerBattleAndShowDialogue(): Promise { return new Promise(async resolve => { - if (scene.currentBattle.mysteryEncounter!.enemyPartyConfigs.length === 0) { + if (globalScene.currentBattle.mysteryEncounter!.enemyPartyConfigs.length === 0) { // Battle is over - const trainer = scene.currentBattle.trainer; + const trainer = globalScene.currentBattle.trainer; if (trainer) { - scene.tweens.add({ + globalScene.tweens.add({ targets: trainer, x: "+=16", y: "-=16", @@ -178,38 +181,38 @@ function endTrainerBattleAndShowDialogue(scene: BattleScene): Promise { ease: "Sine.easeInOut", duration: 750, onComplete: () => { - scene.field.remove(trainer, true); + globalScene.field.remove(trainer, true); } }); } - await spawnNextTrainerOrEndEncounter(scene); + await spawnNextTrainerOrEndEncounter(); resolve(); // Wait for all dialogue/post battle stuff to complete before resolving } else { - scene.arena.resetArenaEffects(); - const playerField = scene.getPlayerField(); + globalScene.arena.resetArenaEffects(); + const playerField = globalScene.getPlayerField(); playerField.forEach((pokemon) => pokemon.lapseTag(BattlerTagType.COMMANDED)); - playerField.forEach((_, p) => scene.unshiftPhase(new ReturnPhase(scene, p))); + playerField.forEach((_, p) => globalScene.unshiftPhase(new ReturnPhase(p))); - for (const pokemon of scene.getPlayerParty()) { + for (const pokemon of globalScene.getPlayerParty()) { // Only trigger form change when Eiscue is in Noice form // Hardcoded Eiscue for now in case it is fused with another pokemon if (pokemon.species.speciesId === Species.EISCUE && pokemon.hasAbility(Abilities.ICE_FACE) && pokemon.formIndex === 1) { - scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeManualTrigger); + globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeAbilityTrigger); } pokemon.resetBattleData(); applyPostBattleInitAbAttrs(PostBattleInitAbAttr, pokemon); } - scene.unshiftPhase(new ShowTrainerPhase(scene)); + globalScene.unshiftPhase(new ShowTrainerPhase()); // Hide the trainer and init next battle - const trainer = scene.currentBattle.trainer; + const trainer = globalScene.currentBattle.trainer; // Unassign previous trainer from battle so it isn't destroyed before animation completes - scene.currentBattle.trainer = null; - await spawnNextTrainerOrEndEncounter(scene); + globalScene.currentBattle.trainer = null; + await spawnNextTrainerOrEndEncounter(); if (trainer) { - scene.tweens.add({ + globalScene.tweens.add({ targets: trainer, x: "+=16", y: "-=16", @@ -217,7 +220,7 @@ function endTrainerBattleAndShowDialogue(scene: BattleScene): Promise { ease: "Sine.easeInOut", duration: 750, onComplete: () => { - scene.field.remove(trainer, true); + globalScene.field.remove(trainer, true); resolve(); } }); @@ -226,7 +229,7 @@ function endTrainerBattleAndShowDialogue(scene: BattleScene): Promise { }); } -function getVictorTrainerConfig(scene: BattleScene): EnemyPartyConfig { +function getVictorTrainerConfig(): EnemyPartyConfig { return { trainerType: TrainerType.VICTOR, pokemonConfigs: [ @@ -238,11 +241,11 @@ function getVictorTrainerConfig(scene: BattleScene): EnemyPartyConfig { moveSet: [ Moves.FACADE, Moves.BRAVE_BIRD, Moves.PROTECT, Moves.QUICK_ATTACK ], modifierConfigs: [ { - modifier: generateModifierType(scene, modifierTypes.FLAME_ORB) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.FLAME_ORB) as PokemonHeldItemModifierType, isTransferable: false }, { - modifier: generateModifierType(scene, modifierTypes.FOCUS_BAND) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.FOCUS_BAND) as PokemonHeldItemModifierType, stackCount: 2, isTransferable: false }, @@ -256,11 +259,11 @@ function getVictorTrainerConfig(scene: BattleScene): EnemyPartyConfig { moveSet: [ Moves.FACADE, Moves.OBSTRUCT, Moves.NIGHT_SLASH, Moves.FIRE_PUNCH ], modifierConfigs: [ { - modifier: generateModifierType(scene, modifierTypes.FLAME_ORB) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.FLAME_ORB) as PokemonHeldItemModifierType, isTransferable: false }, { - modifier: generateModifierType(scene, modifierTypes.LEFTOVERS) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.LEFTOVERS) as PokemonHeldItemModifierType, stackCount: 2, isTransferable: false } @@ -270,7 +273,7 @@ function getVictorTrainerConfig(scene: BattleScene): EnemyPartyConfig { }; } -function getVictoriaTrainerConfig(scene: BattleScene): EnemyPartyConfig { +function getVictoriaTrainerConfig(): EnemyPartyConfig { return { trainerType: TrainerType.VICTORIA, pokemonConfigs: [ @@ -282,11 +285,11 @@ function getVictoriaTrainerConfig(scene: BattleScene): EnemyPartyConfig { moveSet: [ Moves.SYNTHESIS, Moves.SLUDGE_BOMB, Moves.GIGA_DRAIN, Moves.SLEEP_POWDER ], modifierConfigs: [ { - modifier: generateModifierType(scene, modifierTypes.SOUL_DEW) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.SOUL_DEW) as PokemonHeldItemModifierType, isTransferable: false }, { - modifier: generateModifierType(scene, modifierTypes.QUICK_CLAW) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.QUICK_CLAW) as PokemonHeldItemModifierType, stackCount: 2, isTransferable: false } @@ -300,12 +303,12 @@ function getVictoriaTrainerConfig(scene: BattleScene): EnemyPartyConfig { moveSet: [ Moves.PSYSHOCK, Moves.MOONBLAST, Moves.SHADOW_BALL, Moves.WILL_O_WISP ], modifierConfigs: [ { - modifier: generateModifierType(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [ Type.PSYCHIC ]) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.ATTACK_TYPE_BOOSTER, [ Type.PSYCHIC ]) as PokemonHeldItemModifierType, stackCount: 1, isTransferable: false }, { - modifier: generateModifierType(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [ Type.FAIRY ]) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.ATTACK_TYPE_BOOSTER, [ Type.FAIRY ]) as PokemonHeldItemModifierType, stackCount: 1, isTransferable: false } @@ -315,7 +318,7 @@ function getVictoriaTrainerConfig(scene: BattleScene): EnemyPartyConfig { }; } -function getViviTrainerConfig(scene: BattleScene): EnemyPartyConfig { +function getViviTrainerConfig(): EnemyPartyConfig { return { trainerType: TrainerType.VIVI, pokemonConfigs: [ @@ -327,12 +330,12 @@ function getViviTrainerConfig(scene: BattleScene): EnemyPartyConfig { moveSet: [ Moves.WATERFALL, Moves.MEGAHORN, Moves.KNOCK_OFF, Moves.REST ], modifierConfigs: [ { - modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.LUM ]) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.BERRY, [ BerryType.LUM ]) as PokemonHeldItemModifierType, stackCount: 2, isTransferable: false }, { - modifier: generateModifierType(scene, modifierTypes.BASE_STAT_BOOSTER, [ Stat.HP ]) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.BASE_STAT_BOOSTER, [ Stat.HP ]) as PokemonHeldItemModifierType, stackCount: 4, isTransferable: false } @@ -346,12 +349,12 @@ function getViviTrainerConfig(scene: BattleScene): EnemyPartyConfig { moveSet: [ Moves.SPORE, Moves.SWORDS_DANCE, Moves.SEED_BOMB, Moves.DRAIN_PUNCH ], modifierConfigs: [ { - modifier: generateModifierType(scene, modifierTypes.BASE_STAT_BOOSTER, [ Stat.HP ]) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.BASE_STAT_BOOSTER, [ Stat.HP ]) as PokemonHeldItemModifierType, stackCount: 4, isTransferable: false }, { - modifier: generateModifierType(scene, modifierTypes.TOXIC_ORB) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.TOXIC_ORB) as PokemonHeldItemModifierType, isTransferable: false } ] @@ -364,7 +367,7 @@ function getViviTrainerConfig(scene: BattleScene): EnemyPartyConfig { moveSet: [ Moves.EARTH_POWER, Moves.FIRE_BLAST, Moves.YAWN, Moves.PROTECT ], modifierConfigs: [ { - modifier: generateModifierType(scene, modifierTypes.QUICK_CLAW) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.QUICK_CLAW) as PokemonHeldItemModifierType, stackCount: 3, isTransferable: false }, @@ -374,7 +377,7 @@ function getViviTrainerConfig(scene: BattleScene): EnemyPartyConfig { }; } -function getVickyTrainerConfig(scene: BattleScene): EnemyPartyConfig { +function getVickyTrainerConfig(): EnemyPartyConfig { return { trainerType: TrainerType.VICKY, pokemonConfigs: [ @@ -386,7 +389,7 @@ function getVickyTrainerConfig(scene: BattleScene): EnemyPartyConfig { moveSet: [ Moves.AXE_KICK, Moves.ICE_PUNCH, Moves.ZEN_HEADBUTT, Moves.BULLET_PUNCH ], modifierConfigs: [ { - modifier: generateModifierType(scene, modifierTypes.SHELL_BELL) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.SHELL_BELL) as PokemonHeldItemModifierType, isTransferable: false } ] @@ -395,7 +398,7 @@ function getVickyTrainerConfig(scene: BattleScene): EnemyPartyConfig { }; } -function getVitoTrainerConfig(scene: BattleScene): EnemyPartyConfig { +function getVitoTrainerConfig(): EnemyPartyConfig { return { trainerType: TrainerType.VITO, pokemonConfigs: [ @@ -407,7 +410,7 @@ function getVitoTrainerConfig(scene: BattleScene): EnemyPartyConfig { moveSet: [ Moves.THUNDERBOLT, Moves.GIGA_DRAIN, Moves.FOUL_PLAY, Moves.THUNDER_WAVE ], modifierConfigs: [ { - modifier: generateModifierType(scene, modifierTypes.BASE_STAT_BOOSTER, [ Stat.SPD ]) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.BASE_STAT_BOOSTER, [ Stat.SPD ]) as PokemonHeldItemModifierType, stackCount: 2, isTransferable: false } @@ -421,47 +424,47 @@ function getVitoTrainerConfig(scene: BattleScene): EnemyPartyConfig { moveSet: [ Moves.SLUDGE_BOMB, Moves.GIGA_DRAIN, Moves.ICE_BEAM, Moves.EARTHQUAKE ], modifierConfigs: [ { - modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.SITRUS ]) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.BERRY, [ BerryType.SITRUS ]) as PokemonHeldItemModifierType, stackCount: 2, }, { - modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.APICOT ]) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.BERRY, [ BerryType.APICOT ]) as PokemonHeldItemModifierType, stackCount: 2, }, { - modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.GANLON ]) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.BERRY, [ BerryType.GANLON ]) as PokemonHeldItemModifierType, stackCount: 2, }, { - modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.STARF ]) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.BERRY, [ BerryType.STARF ]) as PokemonHeldItemModifierType, stackCount: 2, }, { - modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.SALAC ]) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.BERRY, [ BerryType.SALAC ]) as PokemonHeldItemModifierType, stackCount: 2, }, { - modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.LUM ]) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.BERRY, [ BerryType.LUM ]) as PokemonHeldItemModifierType, stackCount: 2, }, { - modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.LANSAT ]) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.BERRY, [ BerryType.LANSAT ]) as PokemonHeldItemModifierType, stackCount: 2, }, { - modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.LIECHI ]) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.BERRY, [ BerryType.LIECHI ]) as PokemonHeldItemModifierType, stackCount: 2, }, { - modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.PETAYA ]) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.BERRY, [ BerryType.PETAYA ]) as PokemonHeldItemModifierType, stackCount: 2, }, { - modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.ENIGMA ]) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.BERRY, [ BerryType.ENIGMA ]) as PokemonHeldItemModifierType, stackCount: 2, }, { - modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.LEPPA ]) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.BERRY, [ BerryType.LEPPA ]) as PokemonHeldItemModifierType, stackCount: 2, } ] @@ -474,7 +477,7 @@ function getVitoTrainerConfig(scene: BattleScene): EnemyPartyConfig { moveSet: [ Moves.DRILL_PECK, Moves.QUICK_ATTACK, Moves.THRASH, Moves.KNOCK_OFF ], modifierConfigs: [ { - modifier: generateModifierType(scene, modifierTypes.KINGS_ROCK) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.KINGS_ROCK) as PokemonHeldItemModifierType, stackCount: 2, isTransferable: false } @@ -488,7 +491,7 @@ function getVitoTrainerConfig(scene: BattleScene): EnemyPartyConfig { moveSet: [ Moves.PSYCHIC, Moves.SHADOW_BALL, Moves.FOCUS_BLAST, Moves.THUNDERBOLT ], modifierConfigs: [ { - modifier: generateModifierType(scene, modifierTypes.WIDE_LENS) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.WIDE_LENS) as PokemonHeldItemModifierType, stackCount: 2, isTransferable: false }, @@ -502,7 +505,7 @@ function getVitoTrainerConfig(scene: BattleScene): EnemyPartyConfig { moveSet: [ Moves.EARTHQUAKE, Moves.U_TURN, Moves.FLARE_BLITZ, Moves.ROCK_SLIDE ], modifierConfigs: [ { - modifier: generateModifierType(scene, modifierTypes.QUICK_CLAW) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.QUICK_CLAW) as PokemonHeldItemModifierType, stackCount: 2, isTransferable: false }, diff --git a/src/data/mystery-encounters/encounters/training-session-encounter.ts b/src/data/mystery-encounters/encounters/training-session-encounter.ts index 725c4ba79eb..9cb388e343c 100644 --- a/src/data/mystery-encounters/encounters/training-session-encounter.ts +++ b/src/data/mystery-encounters/encounters/training-session-encounter.ts @@ -1,22 +1,26 @@ -import { Ability, allAbilities } from "#app/data/ability"; -import { EnemyPartyConfig, initBattleWithEnemyConfig, leaveEncounterWithoutBattle, selectPokemonForOption, setEncounterRewards, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import type { Ability } from "#app/data/ability"; +import { allAbilities } from "#app/data/ability"; +import type { EnemyPartyConfig } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import { initBattleWithEnemyConfig, leaveEncounterWithoutBattle, selectPokemonForOption, setEncounterRewards, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { getNatureName } from "#app/data/nature"; import { speciesStarterCosts } from "#app/data/balance/starters"; -import Pokemon, { PlayerPokemon } from "#app/field/pokemon"; -import { PokemonHeldItemModifier } from "#app/modifier/modifier"; +import type { PlayerPokemon } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; +import type { PokemonHeldItemModifier } from "#app/modifier/modifier"; import { AbilityAttr } from "#app/system/game-data"; import PokemonData from "#app/system/pokemon-data"; -import { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; +import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import { isNullOrUndefined, randSeedShuffle } from "#app/utils"; import { BattlerTagType } from "#enums/battler-tag-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import BattleScene from "#app/battle-scene"; -import MysteryEncounter, { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; +import { globalScene } from "#app/global-scene"; +import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; import { queueEncounterMessage, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; -import HeldModifierConfig from "#app/interfaces/held-modifier-config"; +import type HeldModifierConfig from "#app/interfaces/held-modifier-config"; import i18next from "i18next"; import { getStatKey } from "#enums/stat"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; @@ -71,8 +75,8 @@ export const TrainingSessionEncounter: MysteryEncounter = }, ], }) - .withPreOptionPhase(async (scene: BattleScene): Promise => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withPreOptionPhase(async (): Promise => { + const encounter = globalScene.currentBattle.mysteryEncounter!; const onPokemonSelected = (pokemon: PlayerPokemon) => { encounter.misc = { playerPokemon: pokemon, @@ -81,24 +85,24 @@ export const TrainingSessionEncounter: MysteryEncounter = // Only Pokemon that are not KOed/legal can be trained const selectableFilter = (pokemon: Pokemon) => { - return isPokemonValidForEncounterOptionSelection(pokemon, scene, `${namespace}:invalid_selection`); + return isPokemonValidForEncounterOptionSelection(pokemon, `${namespace}:invalid_selection`); }; - return selectPokemonForOption(scene, onPokemonSelected, undefined, selectableFilter); + return selectPokemonForOption(onPokemonSelected, undefined, selectableFilter); }) - .withOptionPhase(async (scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOptionPhase(async () => { + const encounter = globalScene.currentBattle.mysteryEncounter!; const playerPokemon: PlayerPokemon = encounter.misc.playerPokemon; // Spawn light training session with chosen pokemon // Every 50 waves, add +1 boss segment, capping at 5 const segments = Math.min( - 2 + Math.floor(scene.currentBattle.waveIndex / 50), + 2 + Math.floor(globalScene.currentBattle.waveIndex / 50), 5 ); const modifiers = new ModifiersHolder(); - const config = getEnemyConfig(scene, playerPokemon, segments, modifiers); - scene.removePokemonFromPlayerParty(playerPokemon, false); + const config = getEnemyConfig(playerPokemon, segments, modifiers); + globalScene.removePokemonFromPlayerParty(playerPokemon, false); const onBeforeRewardsPhase = () => { encounter.setDialogueToken("stat1", "-"); @@ -148,23 +152,23 @@ export const TrainingSessionEncounter: MysteryEncounter = if (improvedCount > 0) { playerPokemon.calculateStats(); - scene.gameData.updateSpeciesDexIvs(playerPokemon.species.getRootSpeciesId(true), playerPokemon.ivs); - scene.gameData.setPokemonCaught(playerPokemon, false); + globalScene.gameData.updateSpeciesDexIvs(playerPokemon.species.getRootSpeciesId(true), playerPokemon.ivs); + globalScene.gameData.setPokemonCaught(playerPokemon, false); } // Add pokemon and mods back - scene.getPlayerParty().push(playerPokemon); + globalScene.getPlayerParty().push(playerPokemon); for (const mod of modifiers.value) { mod.pokemonId = playerPokemon.id; - scene.addModifier(mod, true, false, false, true); + globalScene.addModifier(mod, true, false, false, true); } - scene.updateModifiers(true); - queueEncounterMessage(scene, `${namespace}:option.1.finished`); + globalScene.updateModifiers(true); + queueEncounterMessage(`${namespace}:option.1.finished`); }; - setEncounterRewards(scene, { fillRemaining: true }, undefined, onBeforeRewardsPhase); + setEncounterRewards({ fillRemaining: true }, undefined, onBeforeRewardsPhase); - await initBattleWithEnemyConfig(scene, config); + await initBattleWithEnemyConfig(config); }) .build() ) @@ -182,15 +186,15 @@ export const TrainingSessionEncounter: MysteryEncounter = }, ], }) - .withPreOptionPhase(async (scene: BattleScene): Promise => { + .withPreOptionPhase(async (): Promise => { // Open menu for selecting pokemon and Nature - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; const natures = new Array(25).fill(null).map((val, i) => i as Nature); const onPokemonSelected = (pokemon: PlayerPokemon) => { // Return the options for nature selection return natures.map((nature: Nature) => { const option: OptionSelectItem = { - label: getNatureName(nature, true, true, true, scene.uiTheme), + label: getNatureName(nature, true, true, true, globalScene.uiTheme), handler: () => { // Pokemon and second option selected encounter.setDialogueToken("nature", getNatureName(nature)); @@ -207,40 +211,40 @@ export const TrainingSessionEncounter: MysteryEncounter = // Only Pokemon that are not KOed/legal can be trained const selectableFilter = (pokemon: Pokemon) => { - return isPokemonValidForEncounterOptionSelection(pokemon, scene, `${namespace}:invalid_selection`); + return isPokemonValidForEncounterOptionSelection(pokemon, `${namespace}:invalid_selection`); }; - return selectPokemonForOption(scene, onPokemonSelected, undefined, selectableFilter); + return selectPokemonForOption(onPokemonSelected, undefined, selectableFilter); }) - .withOptionPhase(async (scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOptionPhase(async () => { + const encounter = globalScene.currentBattle.mysteryEncounter!; const playerPokemon: PlayerPokemon = encounter.misc.playerPokemon; // Spawn medium training session with chosen pokemon // Every 40 waves, add +1 boss segment, capping at 6 - const segments = Math.min(2 + Math.floor(scene.currentBattle.waveIndex / 40), 6); + const segments = Math.min(2 + Math.floor(globalScene.currentBattle.waveIndex / 40), 6); const modifiers = new ModifiersHolder(); - const config = getEnemyConfig(scene, playerPokemon, segments, modifiers); - scene.removePokemonFromPlayerParty(playerPokemon, false); + const config = getEnemyConfig(playerPokemon, segments, modifiers); + globalScene.removePokemonFromPlayerParty(playerPokemon, false); const onBeforeRewardsPhase = () => { - queueEncounterMessage(scene, `${namespace}:option.2.finished`); + queueEncounterMessage(`${namespace}:option.2.finished`); // Add the pokemon back to party with Nature change playerPokemon.setCustomNature(encounter.misc.chosenNature); - scene.gameData.unlockSpeciesNature(playerPokemon.species, encounter.misc.chosenNature); + globalScene.gameData.unlockSpeciesNature(playerPokemon.species, encounter.misc.chosenNature); // Add pokemon and modifiers back - scene.getPlayerParty().push(playerPokemon); + globalScene.getPlayerParty().push(playerPokemon); for (const mod of modifiers.value) { mod.pokemonId = playerPokemon.id; - scene.addModifier(mod, true, false, false, true); + globalScene.addModifier(mod, true, false, false, true); } - scene.updateModifiers(true); + globalScene.updateModifiers(true); }; - setEncounterRewards(scene, { fillRemaining: true }, undefined, onBeforeRewardsPhase); + setEncounterRewards({ fillRemaining: true }, undefined, onBeforeRewardsPhase); - await initBattleWithEnemyConfig(scene, config); + await initBattleWithEnemyConfig(config); }) .build() ) @@ -258,9 +262,9 @@ export const TrainingSessionEncounter: MysteryEncounter = }, ], }) - .withPreOptionPhase(async (scene: BattleScene): Promise => { + .withPreOptionPhase(async (): Promise => { // Open menu for selecting pokemon and ability to learn - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; const onPokemonSelected = (pokemon: PlayerPokemon) => { // Return the options for ability selection const speciesForm = !!pokemon.getFusionSpeciesForm() @@ -286,7 +290,7 @@ export const TrainingSessionEncounter: MysteryEncounter = return true; }, onHover: () => { - showEncounterText(scene, ability.description, 0, 0, false); + showEncounterText(ability.description, 0, 0, false); }, }; optionSelectItems.push(option); @@ -298,28 +302,28 @@ export const TrainingSessionEncounter: MysteryEncounter = // Only Pokemon that are not KOed/legal can be trained const selectableFilter = (pokemon: Pokemon) => { - return isPokemonValidForEncounterOptionSelection(pokemon, scene, `${namespace}:invalid_selection`); + return isPokemonValidForEncounterOptionSelection(pokemon, `${namespace}:invalid_selection`); }; - return selectPokemonForOption(scene, onPokemonSelected, undefined, selectableFilter); + return selectPokemonForOption(onPokemonSelected, undefined, selectableFilter); }) - .withOptionPhase(async (scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOptionPhase(async () => { + const encounter = globalScene.currentBattle.mysteryEncounter!; const playerPokemon: PlayerPokemon = encounter.misc.playerPokemon; // Spawn hard training session with chosen pokemon // Every 30 waves, add +1 boss segment, capping at 6 // Also starts with +1 to all stats - const segments = Math.min(2 + Math.floor(scene.currentBattle.waveIndex / 30), 6); + const segments = Math.min(2 + Math.floor(globalScene.currentBattle.waveIndex / 30), 6); const modifiers = new ModifiersHolder(); - const config = getEnemyConfig(scene, playerPokemon, segments, modifiers); + const config = getEnemyConfig(playerPokemon, segments, modifiers); config.pokemonConfigs![0].tags = [ BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON, ]; - scene.removePokemonFromPlayerParty(playerPokemon, false); + globalScene.removePokemonFromPlayerParty(playerPokemon, false); const onBeforeRewardsPhase = () => { - queueEncounterMessage(scene, `${namespace}:option.3.finished`); + queueEncounterMessage(`${namespace}:option.3.finished`); // Add the pokemon back to party with ability change const abilityIndex = encounter.misc.abilityIndex; @@ -330,8 +334,8 @@ export const TrainingSessionEncounter: MysteryEncounter = const rootFusionSpecies = playerPokemon.fusionSpecies?.getRootSpeciesId(); if (!isNullOrUndefined(rootFusionSpecies) && speciesStarterCosts.hasOwnProperty(rootFusionSpecies) - && !!scene.gameData.dexData[rootFusionSpecies].caughtAttr) { - scene.gameData.starterData[rootFusionSpecies].abilityAttr |= playerPokemon.fusionAbilityIndex !== 1 || playerPokemon.fusionSpecies?.ability2 + && !!globalScene.gameData.dexData[rootFusionSpecies].caughtAttr) { + globalScene.gameData.starterData[rootFusionSpecies].abilityAttr |= playerPokemon.fusionAbilityIndex !== 1 || playerPokemon.fusionSpecies?.ability2 ? 1 << playerPokemon.fusionAbilityIndex : AbilityAttr.ABILITY_HIDDEN; } @@ -340,20 +344,20 @@ export const TrainingSessionEncounter: MysteryEncounter = } playerPokemon.calculateStats(); - scene.gameData.setPokemonCaught(playerPokemon, false); + globalScene.gameData.setPokemonCaught(playerPokemon, false); // Add pokemon and mods back - scene.getPlayerParty().push(playerPokemon); + globalScene.getPlayerParty().push(playerPokemon); for (const mod of modifiers.value) { mod.pokemonId = playerPokemon.id; - scene.addModifier(mod, true, false, false, true); + globalScene.addModifier(mod, true, false, false, true); } - scene.updateModifiers(true); + globalScene.updateModifiers(true); }; - setEncounterRewards(scene, { fillRemaining: true }, undefined, onBeforeRewardsPhase); + setEncounterRewards({ fillRemaining: true }, undefined, onBeforeRewardsPhase); - await initBattleWithEnemyConfig(scene, config); + await initBattleWithEnemyConfig(config); }) .build() ) @@ -367,15 +371,15 @@ export const TrainingSessionEncounter: MysteryEncounter = }, ], }, - async (scene: BattleScene) => { + async () => { // Leave encounter with no rewards or exp - leaveEncounterWithoutBattle(scene, true); + leaveEncounterWithoutBattle(true); return true; } ) .build(); -function getEnemyConfig(scene: BattleScene, playerPokemon: PlayerPokemon, segments: number, modifiers: ModifiersHolder): EnemyPartyConfig { +function getEnemyConfig(playerPokemon: PlayerPokemon, segments: number, modifiers: ModifiersHolder): EnemyPartyConfig { playerPokemon.resetSummonData(); // Passes modifiers by reference 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 dfd89cdfb63..a17b05c4e33 100644 --- a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts +++ b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts @@ -1,8 +1,11 @@ -import { EnemyPartyConfig, EnemyPokemonConfig, generateModifierType, initBattleWithEnemyConfig, leaveEncounterWithoutBattle, loadCustomMovesForEncounter, setEncounterRewards, transitionMysteryEncounterIntroVisuals, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import { modifierTypes, PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; +import type { EnemyPartyConfig, EnemyPokemonConfig } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import { generateModifierType, initBattleWithEnemyConfig, leaveEncounterWithoutBattle, loadCustomMovesForEncounter, setEncounterRewards, transitionMysteryEncounterIntroVisuals, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import type { PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/modifier/modifier-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import BattleScene from "#app/battle-scene"; -import MysteryEncounter, { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; +import { globalScene } from "#app/global-scene"; +import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; @@ -58,8 +61,8 @@ export const TrashToTreasureEncounter: MysteryEncounter = .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) - .withOnInit((scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOnInit(() => { + const encounter = globalScene.currentBattle.mysteryEncounter!; // Calculate boss mon (shiny locked) const bossSpecies = getPokemonSpecies(Species.GARBODOR); @@ -79,10 +82,10 @@ export const TrashToTreasureEncounter: MysteryEncounter = encounter.enemyPartyConfigs = [ config ]; // Load animations/sfx for Garbodor fight start moves - loadCustomMovesForEncounter(scene, [ Moves.TOXIC, Moves.AMNESIA ]); + loadCustomMovesForEncounter([ Moves.TOXIC, Moves.AMNESIA ]); - scene.loadSe("PRSFX- Dig2", "battle_anims", "PRSFX- Dig2.wav"); - scene.loadSe("PRSFX- Venom Drench", "battle_anims", "PRSFX- Venom Drench.wav"); + globalScene.loadSe("PRSFX- Dig2", "battle_anims", "PRSFX- Dig2.wav"); + globalScene.loadSe("PRSFX- Venom Drench", "battle_anims", "PRSFX- Venom Drench.wav"); encounter.setDialogueToken("costMultiplier", SHOP_ITEM_COST_MULTIPLIER.toString()); @@ -100,24 +103,24 @@ export const TrashToTreasureEncounter: MysteryEncounter = }, ], }) - .withPreOptionPhase(async (scene: BattleScene) => { + .withPreOptionPhase(async () => { // Play Dig2 and then Venom Drench sfx - doGarbageDig(scene); + doGarbageDig(); }) - .withOptionPhase(async (scene: BattleScene) => { + .withOptionPhase(async () => { // Gain 2 Leftovers and 2 Shell Bell - await transitionMysteryEncounterIntroVisuals(scene); - await tryApplyDigRewardItems(scene); + await transitionMysteryEncounterIntroVisuals(); + await tryApplyDigRewardItems(); - const blackSludge = generateModifierType(scene, modifierTypes.MYSTERY_ENCOUNTER_BLACK_SLUDGE, [ SHOP_ITEM_COST_MULTIPLIER ]); + const blackSludge = generateModifierType(modifierTypes.MYSTERY_ENCOUNTER_BLACK_SLUDGE, [ SHOP_ITEM_COST_MULTIPLIER ]); const modifier = blackSludge?.newModifier(); if (modifier) { - await scene.addModifier(modifier, false, false, false, true); - scene.playSound("battle_anims/PRSFX- Venom Drench", { volume: 2 }); - await showEncounterText(scene, i18next.t("battle:rewardGain", { modifierName: modifier.type.name }), null, undefined, true); + await globalScene.addModifier(modifier, false, false, false, true); + globalScene.playSound("battle_anims/PRSFX- Venom Drench", { volume: 2 }); + await showEncounterText(i18next.t("battle:rewardGain", { modifierName: modifier.type.name }), null, undefined, true); } - leaveEncounterWithoutBattle(scene, true); + leaveEncounterWithoutBattle(true); }) .build() ) @@ -133,15 +136,15 @@ export const TrashToTreasureEncounter: MysteryEncounter = }, ], }) - .withOptionPhase(async (scene: BattleScene) => { + .withOptionPhase(async () => { // Investigate garbage, battle Gmax Garbodor - scene.setFieldScale(0.75); - await showEncounterText(scene, `${namespace}:option.2.selected_2`); - await transitionMysteryEncounterIntroVisuals(scene); + globalScene.setFieldScale(0.75); + await showEncounterText(`${namespace}:option.2.selected_2`); + await transitionMysteryEncounterIntroVisuals(); - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; - setEncounterRewards(scene, { guaranteedModifierTiers: [ ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.GREAT ], fillRemaining: true }); + setEncounterRewards({ guaranteedModifierTiers: [ ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.GREAT ], fillRemaining: true }); encounter.startOfBattleEffects.push( { sourceBattlerIndex: BattlerIndex.ENEMY, @@ -155,81 +158,81 @@ export const TrashToTreasureEncounter: MysteryEncounter = move: new PokemonMove(Moves.AMNESIA), ignorePp: true }); - await initBattleWithEnemyConfig(scene, encounter.enemyPartyConfigs[0]); + await initBattleWithEnemyConfig(encounter.enemyPartyConfigs[0]); }) .build() ) .build(); -async function tryApplyDigRewardItems(scene: BattleScene) { - const shellBell = generateModifierType(scene, modifierTypes.SHELL_BELL) as PokemonHeldItemModifierType; - const leftovers = generateModifierType(scene, modifierTypes.LEFTOVERS) as PokemonHeldItemModifierType; +async function tryApplyDigRewardItems() { + const shellBell = generateModifierType(modifierTypes.SHELL_BELL) as PokemonHeldItemModifierType; + const leftovers = generateModifierType(modifierTypes.LEFTOVERS) as PokemonHeldItemModifierType; - const party = scene.getPlayerParty(); + const party = globalScene.getPlayerParty(); // Iterate over the party until an item was successfully given // First leftovers for (const pokemon of party) { - const heldItems = scene.findModifiers(m => m instanceof PokemonHeldItemModifier + const heldItems = globalScene.findModifiers(m => m instanceof PokemonHeldItemModifier && m.pokemonId === pokemon.id, true) as PokemonHeldItemModifier[]; const existingLeftovers = heldItems.find(m => m instanceof TurnHealModifier) as TurnHealModifier; - if (!existingLeftovers || existingLeftovers.getStackCount() < existingLeftovers.getMaxStackCount(scene)) { - await applyModifierTypeToPlayerPokemon(scene, pokemon, leftovers); + if (!existingLeftovers || existingLeftovers.getStackCount() < existingLeftovers.getMaxStackCount()) { + await applyModifierTypeToPlayerPokemon(pokemon, leftovers); break; } } // Second leftovers for (const pokemon of party) { - const heldItems = scene.findModifiers(m => m instanceof PokemonHeldItemModifier + const heldItems = globalScene.findModifiers(m => m instanceof PokemonHeldItemModifier && m.pokemonId === pokemon.id, true) as PokemonHeldItemModifier[]; const existingLeftovers = heldItems.find(m => m instanceof TurnHealModifier) as TurnHealModifier; - if (!existingLeftovers || existingLeftovers.getStackCount() < existingLeftovers.getMaxStackCount(scene)) { - await applyModifierTypeToPlayerPokemon(scene, pokemon, leftovers); + if (!existingLeftovers || existingLeftovers.getStackCount() < existingLeftovers.getMaxStackCount()) { + await applyModifierTypeToPlayerPokemon(pokemon, leftovers); break; } } - scene.playSound("item_fanfare"); - await showEncounterText(scene, i18next.t("battle:rewardGainCount", { modifierName: leftovers.name, count: 2 }), null, undefined, true); + globalScene.playSound("item_fanfare"); + await showEncounterText(i18next.t("battle:rewardGainCount", { modifierName: leftovers.name, count: 2 }), null, undefined, true); // First Shell bell for (const pokemon of party) { - const heldItems = scene.findModifiers(m => m instanceof PokemonHeldItemModifier + const heldItems = globalScene.findModifiers(m => m instanceof PokemonHeldItemModifier && m.pokemonId === pokemon.id, true) as PokemonHeldItemModifier[]; const existingShellBell = heldItems.find(m => m instanceof HitHealModifier) as HitHealModifier; - if (!existingShellBell || existingShellBell.getStackCount() < existingShellBell.getMaxStackCount(scene)) { - await applyModifierTypeToPlayerPokemon(scene, pokemon, shellBell); + if (!existingShellBell || existingShellBell.getStackCount() < existingShellBell.getMaxStackCount()) { + await applyModifierTypeToPlayerPokemon(pokemon, shellBell); break; } } // Second Shell bell for (const pokemon of party) { - const heldItems = scene.findModifiers(m => m instanceof PokemonHeldItemModifier + const heldItems = globalScene.findModifiers(m => m instanceof PokemonHeldItemModifier && m.pokemonId === pokemon.id, true) as PokemonHeldItemModifier[]; const existingShellBell = heldItems.find(m => m instanceof HitHealModifier) as HitHealModifier; - if (!existingShellBell || existingShellBell.getStackCount() < existingShellBell.getMaxStackCount(scene)) { - await applyModifierTypeToPlayerPokemon(scene, pokemon, shellBell); + if (!existingShellBell || existingShellBell.getStackCount() < existingShellBell.getMaxStackCount()) { + await applyModifierTypeToPlayerPokemon(pokemon, shellBell); break; } } - scene.playSound("item_fanfare"); - await showEncounterText(scene, i18next.t("battle:rewardGainCount", { modifierName: shellBell.name, count: 2 }), null, undefined, true); + globalScene.playSound("item_fanfare"); + await showEncounterText(i18next.t("battle:rewardGainCount", { modifierName: shellBell.name, count: 2 }), null, undefined, true); } -function doGarbageDig(scene: BattleScene) { - scene.playSound("battle_anims/PRSFX- Dig2"); - scene.time.delayedCall(SOUND_EFFECT_WAIT_TIME, () => { - scene.playSound("battle_anims/PRSFX- Dig2"); - scene.playSound("battle_anims/PRSFX- Venom Drench", { volume: 2 }); +function doGarbageDig() { + globalScene.playSound("battle_anims/PRSFX- Dig2"); + globalScene.time.delayedCall(SOUND_EFFECT_WAIT_TIME, () => { + globalScene.playSound("battle_anims/PRSFX- Dig2"); + globalScene.playSound("battle_anims/PRSFX- Venom Drench", { volume: 2 }); }); - scene.time.delayedCall(SOUND_EFFECT_WAIT_TIME * 2, () => { - scene.playSound("battle_anims/PRSFX- Dig2"); + globalScene.time.delayedCall(SOUND_EFFECT_WAIT_TIME * 2, () => { + globalScene.playSound("battle_anims/PRSFX- Dig2"); }); } diff --git a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts index d3679825ac8..6e6381888f1 100644 --- a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts +++ b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts @@ -1,19 +1,21 @@ import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; -import { EnemyPartyConfig, initBattleWithEnemyConfig, leaveEncounterWithoutBattle, setEncounterExp, setEncounterRewards } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import type { EnemyPartyConfig } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import { getRandomEncounterSpecies, initBattleWithEnemyConfig, leaveEncounterWithoutBattle, setEncounterExp, setEncounterRewards } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { CHARMING_MOVES } from "#app/data/mystery-encounters/requirements/requirement-groups"; -import Pokemon, { EnemyPokemon, PokemonMove } from "#app/field/pokemon"; -import { getPartyLuckValue } from "#app/modifier/modifier-type"; +import type Pokemon from "#app/field/pokemon"; +import type { EnemyPokemon } from "#app/field/pokemon"; +import { PokemonMove } from "#app/field/pokemon"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import BattleScene from "#app/battle-scene"; -import MysteryEncounter, { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; +import { globalScene } from "#app/global-scene"; +import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MoveRequirement, PersistentModifierRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; -import { TrainerSlot } from "#app/data/trainer-config"; import { catchPokemon, getHighestLevelPlayerPokemon, getSpriteKeysFromPokemon } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import PokemonData from "#app/system/pokemon-data"; import { isNullOrUndefined, randSeedInt } from "#app/utils"; -import { Moves } from "#enums/moves"; +import type { Moves } from "#enums/moves"; import { BattlerIndex } from "#app/battle"; import { SelfStatusMove } from "#app/data/move"; import { PokeballType } from "#enums/pokeball"; @@ -45,14 +47,13 @@ export const UncommonBreedEncounter: MysteryEncounter = text: `${namespace}:intro`, }, ]) - .withOnInit((scene: BattleScene) => { - const encounter = scene.currentBattle.mysteryEncounter!; + .withOnInit(() => { + const encounter = globalScene.currentBattle.mysteryEncounter!; // Calculate boss mon // Level equal to 2 below highest party member - const level = getHighestLevelPlayerPokemon(scene, false, true).level - 2; - const species = scene.arena.randomSpecies(scene.currentBattle.waveIndex, level, 0, getPartyLuckValue(scene.getPlayerParty()), true); - const pokemon = new EnemyPokemon(scene, species, level, TrainerSlot.NONE, true); + const level = getHighestLevelPlayerPokemon(false, true).level - 2; + const pokemon = getRandomEncounterSpecies(level, true, true); // Pokemon will always have one of its egg moves in its moveset const eggMoves = pokemon.getEggMoves(); @@ -73,20 +74,20 @@ export const UncommonBreedEncounter: MysteryEncounter = } // Defense/Spd buffs below wave 50, +1 to all stats otherwise - const statChangesForBattle: (Stat.ATK | Stat.DEF | Stat.SPATK | Stat.SPDEF | Stat.SPD | Stat.ACC | Stat.EVA)[] = scene.currentBattle.waveIndex < 50 ? + const statChangesForBattle: (Stat.ATK | Stat.DEF | Stat.SPATK | Stat.SPDEF | Stat.SPD | Stat.ACC | Stat.EVA)[] = globalScene.currentBattle.waveIndex < 50 ? [ Stat.DEF, Stat.SPDEF, Stat.SPD ] : [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ]; const config: EnemyPartyConfig = { pokemonConfigs: [{ level: level, - species: species, + species: pokemon.species, dataSource: new PokemonData(pokemon), isBoss: false, tags: [ BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON ], mysteryEncounterBattleEffects: (pokemon: Pokemon) => { - queueEncounterMessage(pokemon.scene, `${namespace}:option.1.stat_boost`); - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, statChangesForBattle, 1)); + queueEncounterMessage(`${namespace}:option.1.stat_boost`); + globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, statChangesForBattle, 1)); } }], }; @@ -107,16 +108,16 @@ export const UncommonBreedEncounter: MysteryEncounter = ]; encounter.setDialogueToken("enemyPokemon", pokemon.getNameToRender()); - scene.loadSe("PRSFX- Spotlight2", "battle_anims", "PRSFX- Spotlight2.wav"); + globalScene.loadSe("PRSFX- Spotlight2", "battle_anims", "PRSFX- Spotlight2.wav"); return true; }) - .withOnVisualsStart((scene: BattleScene) => { + .withOnVisualsStart(() => { // Animate the pokemon - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; const pokemonSprite = encounter.introVisuals!.getSprites(); // Bounce at the end, then shiny sparkle if the Pokemon is shiny - scene.tweens.add({ + globalScene.tweens.add({ targets: pokemonSprite, duration: 300, ease: "Cubic.easeOut", @@ -126,7 +127,7 @@ export const UncommonBreedEncounter: MysteryEncounter = onComplete: () => encounter.introVisuals?.playShinySparkles() }); - scene.time.delayedCall(500, () => scene.playSound("battle_anims/PRSFX- Spotlight2")); + globalScene.time.delayedCall(500, () => globalScene.playSound("battle_anims/PRSFX- Spotlight2")); return true; }) .setLocalizationKey(`${namespace}`) @@ -143,9 +144,9 @@ export const UncommonBreedEncounter: MysteryEncounter = }, ], }, - async (scene: BattleScene) => { + async () => { // Pick battle - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; const eggMove = encounter.misc.eggMove; if (!isNullOrUndefined(eggMove)) { @@ -163,8 +164,8 @@ export const UncommonBreedEncounter: MysteryEncounter = }); } - setEncounterRewards(scene, { fillRemaining: true }); - await initBattleWithEnemyConfig(scene, encounter.enemyPartyConfigs[0]); + setEncounterRewards({ fillRemaining: true }); + await initBattleWithEnemyConfig(encounter.enemyPartyConfigs[0]); } ) .withOption( @@ -181,33 +182,33 @@ export const UncommonBreedEncounter: MysteryEncounter = } ] }) - .withOptionPhase(async (scene: BattleScene) => { + .withOptionPhase(async () => { // Give it some food // Remove 4 random berries from player's party // Get all player berry items, remove from party, and store reference - const berryItems: BerryModifier[] = scene.findModifiers(m => m instanceof BerryModifier) as BerryModifier[]; + const berryItems: BerryModifier[] = globalScene.findModifiers(m => m instanceof BerryModifier) as BerryModifier[]; for (let i = 0; i < 4; i++) { const index = randSeedInt(berryItems.length); const randBerry = berryItems[index]; randBerry.stackCount--; if (randBerry.stackCount === 0) { - scene.removeModifier(randBerry); + globalScene.removeModifier(randBerry); berryItems.splice(index, 1); } } - await scene.updateModifiers(true, true); + await globalScene.updateModifiers(true, true); // Pokemon joins the team, with 2 egg moves - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; const pokemon = encounter.misc.pokemon; // Give 1 additional egg move givePokemonExtraEggMove(pokemon, encounter.misc.eggMove); - await catchPokemon(scene, pokemon, null, PokeballType.POKEBALL, false); - setEncounterRewards(scene, { fillRemaining: true }); - leaveEncounterWithoutBattle(scene); + await catchPokemon(pokemon, null, PokeballType.POKEBALL, false); + setEncounterRewards({ fillRemaining: true }); + leaveEncounterWithoutBattle(); }) .build() ) @@ -225,10 +226,10 @@ export const UncommonBreedEncounter: MysteryEncounter = } ] }) - .withOptionPhase(async (scene: BattleScene) => { + .withOptionPhase(async () => { // Attract the pokemon with a move // Pokemon joins the team, with 2 egg moves and IVs rolled an additional time - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; const pokemon = encounter.misc.pokemon; // Give 1 additional egg move @@ -240,12 +241,12 @@ export const UncommonBreedEncounter: MysteryEncounter = return newValue > iv ? newValue : iv; }); - await catchPokemon(scene, pokemon, null, PokeballType.POKEBALL, false); + await catchPokemon(pokemon, null, PokeballType.POKEBALL, false); if (encounter.selectedOption?.primaryPokemon?.id) { - setEncounterExp(scene, encounter.selectedOption.primaryPokemon.id, pokemon.getExpValue(), false); + setEncounterExp(encounter.selectedOption.primaryPokemon.id, pokemon.getExpValue(), false); } - setEncounterRewards(scene, { fillRemaining: true }); - leaveEncounterWithoutBattle(scene); + setEncounterRewards({ fillRemaining: true }); + leaveEncounterWithoutBattle(); }) .build() ) diff --git a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts index 3d2e8493d44..454d179c003 100644 --- a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts +++ b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts @@ -1,20 +1,27 @@ import { Type } from "#enums/type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { Species } from "#enums/species"; -import BattleScene from "#app/battle-scene"; -import MysteryEncounter, { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; +import { globalScene } from "#app/global-scene"; +import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; -import { EnemyPartyConfig, EnemyPokemonConfig, generateModifierType, initBattleWithEnemyConfig, leaveEncounterWithoutBattle, setEncounterRewards, } from "../utils/encounter-phase-utils"; +import type { EnemyPartyConfig, EnemyPokemonConfig } from "../utils/encounter-phase-utils"; +import { generateModifierType, initBattleWithEnemyConfig, leaveEncounterWithoutBattle, setEncounterRewards, } from "../utils/encounter-phase-utils"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; -import Pokemon, { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; -import { IntegerHolder, isNullOrUndefined, randSeedInt, randSeedShuffle } from "#app/utils"; -import PokemonSpecies, { allSpecies, getPokemonSpecies } from "#app/data/pokemon-species"; -import { HiddenAbilityRateBoosterModifier, PokemonFormChangeItemModifier, PokemonHeldItemModifier } from "#app/modifier/modifier"; +import type { PlayerPokemon } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; +import { PokemonMove } from "#app/field/pokemon"; +import { NumberHolder, isNullOrUndefined, randSeedInt, randSeedShuffle } from "#app/utils"; +import type PokemonSpecies from "#app/data/pokemon-species"; +import { allSpecies, getPokemonSpecies } from "#app/data/pokemon-species"; +import type { PokemonHeldItemModifier } from "#app/modifier/modifier"; +import { HiddenAbilityRateBoosterModifier, PokemonFormChangeItemModifier } from "#app/modifier/modifier"; import { achvs } from "#app/system/achv"; import { CustomPokemonData } from "#app/data/custom-pokemon-data"; import { showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; -import { modifierTypes, PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; +import type { PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/modifier/modifier-type"; import i18next from "#app/plugins/i18n"; import { doPokemonTransformationSequence, TransformationScreenPosition } from "#app/data/mystery-encounters/utils/encounter-transformation-sequence"; import { getLevelTotalExp } from "#app/data/exp"; @@ -25,7 +32,7 @@ import { PlayerGender } from "#enums/player-gender"; import { TrainerType } from "#enums/trainer-type"; import PokemonData from "#app/system/pokemon-data"; import { Nature } from "#enums/nature"; -import HeldModifierConfig from "#app/interfaces/held-modifier-config"; +import type HeldModifierConfig from "#app/interfaces/held-modifier-config"; import { trainerConfigs, TrainerPartyTemplate } from "#app/data/trainer-config"; import { PartyMemberStrength } from "#enums/party-member-strength"; @@ -138,21 +145,21 @@ export const WeirdDreamEncounter: MysteryEncounter = .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) - .withOnInit((scene: BattleScene) => { - scene.loadBgm("mystery_encounter_weird_dream", "mystery_encounter_weird_dream.mp3"); + .withOnInit(() => { + globalScene.loadBgm("mystery_encounter_weird_dream", "mystery_encounter_weird_dream.mp3"); // Calculate all the newly transformed Pokemon and begin asset load - const teamTransformations = getTeamTransformations(scene); + const teamTransformations = getTeamTransformations(); const loadAssets = teamTransformations.map(t => (t.newPokemon as PlayerPokemon).loadAssets()); - scene.currentBattle.mysteryEncounter!.misc = { + globalScene.currentBattle.mysteryEncounter!.misc = { teamTransformations, loadAssets }; return true; }) - .withOnVisualsStart((scene: BattleScene) => { - scene.fadeAndSwitchBgm("mystery_encounter_weird_dream"); + .withOnVisualsStart(() => { + globalScene.fadeAndSwitchBgm("mystery_encounter_weird_dream"); return true; }) .withOption( @@ -168,25 +175,25 @@ export const WeirdDreamEncounter: MysteryEncounter = } ], }) - .withPreOptionPhase(async (scene: BattleScene) => { + .withPreOptionPhase(async () => { // Play the animation as the player goes through the dialogue - scene.time.delayedCall(1000, () => { - doShowDreamBackground(scene); + globalScene.time.delayedCall(1000, () => { + doShowDreamBackground(); }); - for (const transformation of scene.currentBattle.mysteryEncounter!.misc.teamTransformations) { - scene.removePokemonFromPlayerParty(transformation.previousPokemon, false); - scene.getPlayerParty().push(transformation.newPokemon); + for (const transformation of globalScene.currentBattle.mysteryEncounter!.misc.teamTransformations) { + globalScene.removePokemonFromPlayerParty(transformation.previousPokemon, false); + globalScene.getPlayerParty().push(transformation.newPokemon); } }) - .withOptionPhase(async (scene: BattleScene) => { + .withOptionPhase(async () => { // Starts cutscene dialogue, but does not await so that cutscene plays as player goes through dialogue - const cutsceneDialoguePromise = showEncounterText(scene, `${namespace}:option.1.cutscene`); + const cutsceneDialoguePromise = showEncounterText(`${namespace}:option.1.cutscene`); // Change the entire player's party // Wait for all new Pokemon assets to be loaded before showing transformation animations - await Promise.all(scene.currentBattle.mysteryEncounter!.misc.loadAssets); - const transformations = scene.currentBattle.mysteryEncounter!.misc.teamTransformations; + await Promise.all(globalScene.currentBattle.mysteryEncounter!.misc.loadAssets); + const transformations = globalScene.currentBattle.mysteryEncounter!.misc.teamTransformations; // If there are 1-3 transformations, do them centered back to back // Otherwise, the first 3 transformations are executed side-by-side, then any remaining 1-3 transformations occur in those same respective positions @@ -195,21 +202,21 @@ export const WeirdDreamEncounter: MysteryEncounter = const pokemon1 = transformation.previousPokemon; const pokemon2 = transformation.newPokemon; - await doPokemonTransformationSequence(scene, pokemon1, pokemon2, TransformationScreenPosition.CENTER); + await doPokemonTransformationSequence(pokemon1, pokemon2, TransformationScreenPosition.CENTER); } } else { - await doSideBySideTransformations(scene, transformations); + await doSideBySideTransformations(transformations); } // Make sure player has finished cutscene dialogue await cutsceneDialoguePromise; - doHideDreamBackground(scene); - await showEncounterText(scene, `${namespace}:option.1.dream_complete`); + doHideDreamBackground(); + await showEncounterText(`${namespace}:option.1.dream_complete`); - await doNewTeamPostProcess(scene, transformations); - setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [ modifierTypes.MEMORY_MUSHROOM, modifierTypes.ROGUE_BALL, modifierTypes.MINT, modifierTypes.MINT, modifierTypes.MINT ], fillRemaining: false }); - leaveEncounterWithoutBattle(scene, true); + await doNewTeamPostProcess(transformations); + setEncounterRewards({ guaranteedModifierTypeFuncs: [ modifierTypes.MEMORY_MUSHROOM, modifierTypes.ROGUE_BALL, modifierTypes.MINT, modifierTypes.MINT, modifierTypes.MINT ], fillRemaining: false }); + leaveEncounterWithoutBattle(true); }) .build() ) @@ -223,9 +230,9 @@ export const WeirdDreamEncounter: MysteryEncounter = }, ], }, - async (scene: BattleScene) => { + async () => { // Battle your "future" team for some item rewards - const transformations: PokemonTransformation[] = scene.currentBattle.mysteryEncounter!.misc.teamTransformations; + const transformations: PokemonTransformation[] = globalScene.currentBattle.mysteryEncounter!.misc.teamTransformations; // Uses the pokemon that player's party would have transformed into const enemyPokemonConfigs: EnemyPokemonConfig[] = []; @@ -233,7 +240,7 @@ export const WeirdDreamEncounter: MysteryEncounter = const newPokemon = transformation.newPokemon; const previousPokemon = transformation.previousPokemon; - await postProcessTransformedPokemon(scene, previousPokemon, newPokemon, newPokemon.species.getRootSpeciesId(), true); + await postProcessTransformedPokemon(previousPokemon, newPokemon, newPokemon.species.getRootSpeciesId(), true); const dataSource = new PokemonData(newPokemon); dataSource.player = false; @@ -251,7 +258,7 @@ export const WeirdDreamEncounter: MysteryEncounter = if (shouldGetOldGateau(newPokemon)) { const stats = getOldGateauBoostedStats(newPokemon); newPokemonHeldItemConfigs.push({ - modifier: generateModifierType(scene, modifierTypes.MYSTERY_ENCOUNTER_OLD_GATEAU, [ OLD_GATEAU_STATS_UP, stats ]) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.MYSTERY_ENCOUNTER_OLD_GATEAU, [ OLD_GATEAU_STATS_UP, stats ]) as PokemonHeldItemModifierType, stackCount: 1, isTransferable: false }); @@ -268,7 +275,7 @@ export const WeirdDreamEncounter: MysteryEncounter = enemyPokemonConfigs.push(enemyConfig); } - const genderIndex = scene.gameData.gender ?? PlayerGender.UNSET; + const genderIndex = globalScene.gameData.gender ?? PlayerGender.UNSET; const trainerConfig = trainerConfigs[genderIndex === PlayerGender.FEMALE ? TrainerType.FUTURE_SELF_F : TrainerType.FUTURE_SELF_M].clone(); trainerConfig.setPartyTemplates(new TrainerPartyTemplate(transformations.length, PartyMemberStrength.STRONG)); const enemyPartyConfig: EnemyPartyConfig = { @@ -280,7 +287,7 @@ export const WeirdDreamEncounter: MysteryEncounter = const onBeforeRewards = () => { // Before battle rewards, unlock the passive on a pokemon in the player's team for the rest of the run (not permanently) // One random pokemon will get its passive unlocked - const passiveDisabledPokemon = scene.getPlayerParty().filter(p => !p.passive); + const passiveDisabledPokemon = globalScene.getPlayerParty().filter(p => !p.passive); if (passiveDisabledPokemon?.length > 0) { const enablePassiveMon = passiveDisabledPokemon[randSeedInt(passiveDisabledPokemon.length)]; enablePassiveMon.passive = true; @@ -288,10 +295,10 @@ export const WeirdDreamEncounter: MysteryEncounter = } }; - setEncounterRewards(scene, { guaranteedModifierTiers: [ ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.GREAT, ModifierTier.GREAT ], fillRemaining: false }, undefined, onBeforeRewards); + setEncounterRewards({ guaranteedModifierTiers: [ ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.GREAT, ModifierTier.GREAT ], fillRemaining: false }, undefined, onBeforeRewards); - await showEncounterText(scene, `${namespace}:option.2.selected_2`, null, undefined, true); - await initBattleWithEnemyConfig(scene, enemyPartyConfig); + await showEncounterText(`${namespace}:option.2.selected_2`, null, undefined, true); + await initBattleWithEnemyConfig(enemyPartyConfig); } ) .withSimpleOption( @@ -304,9 +311,9 @@ export const WeirdDreamEncounter: MysteryEncounter = }, ], }, - async (scene: BattleScene) => { + async () => { // Leave, reduce party levels by 10% - for (const pokemon of scene.getPlayerParty()) { + for (const pokemon of globalScene.getPlayerParty()) { pokemon.level = Math.max(Math.ceil((100 - PERCENT_LEVEL_LOSS_ON_REFUSE) / 100 * pokemon.level), 1); pokemon.exp = getLevelTotalExp(pokemon.level, pokemon.species.growthRate); pokemon.levelExp = 0; @@ -316,7 +323,7 @@ export const WeirdDreamEncounter: MysteryEncounter = await pokemon.updateInfo(); } - leaveEncounterWithoutBattle(scene, true); + leaveEncounterWithoutBattle(true); return true; } ) @@ -329,8 +336,8 @@ interface PokemonTransformation { heldItems: PokemonHeldItemModifier[]; } -function getTeamTransformations(scene: BattleScene): PokemonTransformation[] { - const party = scene.getPlayerParty(); +function getTeamTransformations(): PokemonTransformation[] { + const party = globalScene.getPlayerParty(); // Removes all pokemon from the party const alreadyUsedSpecies: PokemonSpecies[] = party.map(p => p.species); const pokemonTransformations: PokemonTransformation[] = party.map(p => { @@ -353,7 +360,7 @@ function getTeamTransformations(scene: BattleScene): PokemonTransformation[] { const index = pokemonTransformations.findIndex(p => p.previousPokemon.id === removed.id); pokemonTransformations[index].heldItems = removed.getHeldItems().filter(m => !(m instanceof PokemonFormChangeItemModifier)); - const bst = removed.calculateBaseStats().reduce((a, b) => a + b, 0); + const bst = removed.getSpeciesForm().getBaseStatTotal(); let newBstRange: [number, number]; if (i < 2) { newBstRange = HIGH_BST_TRANSFORM_BASE_VALUES; @@ -379,37 +386,37 @@ function getTeamTransformations(scene: BattleScene): PokemonTransformation[] { for (const transformation of pokemonTransformations) { const newAbilityIndex = randSeedInt(transformation.newSpecies.getAbilityCount()); - transformation.newPokemon = scene.addPlayerPokemon(transformation.newSpecies, transformation.previousPokemon.level, newAbilityIndex, undefined); + transformation.newPokemon = globalScene.addPlayerPokemon(transformation.newSpecies, transformation.previousPokemon.level, newAbilityIndex, undefined); } return pokemonTransformations; } -async function doNewTeamPostProcess(scene: BattleScene, transformations: PokemonTransformation[]) { +async function doNewTeamPostProcess(transformations: PokemonTransformation[]) { let atLeastOneNewStarter = false; for (const transformation of transformations) { const previousPokemon = transformation.previousPokemon; const newPokemon = transformation.newPokemon; const speciesRootForm = newPokemon.species.getRootSpeciesId(); - if (await postProcessTransformedPokemon(scene, previousPokemon, newPokemon, speciesRootForm)) { + if (await postProcessTransformedPokemon(previousPokemon, newPokemon, speciesRootForm)) { atLeastOneNewStarter = true; } // Copy old items to new pokemon for (const item of transformation.heldItems) { item.pokemonId = newPokemon.id; - await scene.addModifier(item, false, false, false, true); + globalScene.addModifier(item, false, false, false, true); } // Any pokemon that is below 570 BST gets +20 permanent BST to 3 stats if (shouldGetOldGateau(newPokemon)) { const stats = getOldGateauBoostedStats(newPokemon); const modType = modifierTypes.MYSTERY_ENCOUNTER_OLD_GATEAU() - .generateType(scene.getPlayerParty(), [ OLD_GATEAU_STATS_UP, stats ]) + .generateType(globalScene.getPlayerParty(), [ OLD_GATEAU_STATS_UP, stats ]) ?.withIdFromFunc(modifierTypes.MYSTERY_ENCOUNTER_OLD_GATEAU); const modifier = modType?.newModifier(newPokemon); if (modifier) { - await scene.addModifier(modifier, false, false, false, true); + globalScene.addModifier(modifier, false, false, false, true); } } @@ -418,7 +425,7 @@ async function doNewTeamPostProcess(scene: BattleScene, transformations: Pokemon } // One random pokemon will get its passive unlocked - const passiveDisabledPokemon = scene.getPlayerParty().filter(p => !p.passive); + const passiveDisabledPokemon = globalScene.getPlayerParty().filter(p => !p.passive); if (passiveDisabledPokemon?.length > 0) { const enablePassiveMon = passiveDisabledPokemon[randSeedInt(passiveDisabledPokemon.length)]; enablePassiveMon.passive = true; @@ -427,27 +434,26 @@ async function doNewTeamPostProcess(scene: BattleScene, transformations: Pokemon // If at least one new starter was unlocked, play 1 fanfare if (atLeastOneNewStarter) { - scene.playSound("level_up_fanfare"); + globalScene.playSound("level_up_fanfare"); } } /** * Applies special changes to the newly transformed pokemon, such as passing previous moves, gaining egg moves, etc. * Returns whether the transformed pokemon unlocks a new starter for the player. - * @param scene * @param previousPokemon * @param newPokemon * @param speciesRootForm * @param forBattle Default `false`. If false, will perform achievements and dex unlocks for the player. */ -async function postProcessTransformedPokemon(scene: BattleScene, previousPokemon: PlayerPokemon, newPokemon: PlayerPokemon, speciesRootForm: Species, forBattle: boolean = false): Promise { +async function postProcessTransformedPokemon(previousPokemon: PlayerPokemon, newPokemon: PlayerPokemon, speciesRootForm: Species, forBattle: boolean = false): Promise { let isNewStarter = false; // Roll HA a second time if (newPokemon.species.abilityHidden) { const hiddenIndex = newPokemon.species.ability2 ? 2 : 1; if (newPokemon.abilityIndex < hiddenIndex) { - const hiddenAbilityChance = new IntegerHolder(256); - scene.applyModifiers(HiddenAbilityRateBoosterModifier, true, hiddenAbilityChance); + const hiddenAbilityChance = new NumberHolder(256); + globalScene.applyModifiers(HiddenAbilityRateBoosterModifier, true, hiddenAbilityChance); const hasHiddenAbility = !randSeedInt(hiddenAbilityChance.value); @@ -469,26 +475,26 @@ async function postProcessTransformedPokemon(scene: BattleScene, previousPokemon // For pokemon at/below 570 BST or any shiny pokemon, unlock it permanently as if you had caught it if (!forBattle && (newPokemon.getSpeciesForm().getBaseStatTotal() <= NON_LEGENDARY_BST_THRESHOLD || newPokemon.isShiny())) { if (newPokemon.getSpeciesForm().abilityHidden && newPokemon.abilityIndex === newPokemon.getSpeciesForm().getAbilityCount() - 1) { - scene.validateAchv(achvs.HIDDEN_ABILITY); + globalScene.validateAchv(achvs.HIDDEN_ABILITY); } if (newPokemon.species.subLegendary) { - scene.validateAchv(achvs.CATCH_SUB_LEGENDARY); + globalScene.validateAchv(achvs.CATCH_SUB_LEGENDARY); } if (newPokemon.species.legendary) { - scene.validateAchv(achvs.CATCH_LEGENDARY); + globalScene.validateAchv(achvs.CATCH_LEGENDARY); } if (newPokemon.species.mythical) { - scene.validateAchv(achvs.CATCH_MYTHICAL); + globalScene.validateAchv(achvs.CATCH_MYTHICAL); } - scene.gameData.updateSpeciesDexIvs(newPokemon.species.getRootSpeciesId(true), newPokemon.ivs); - const newStarterUnlocked = await scene.gameData.setPokemonCaught(newPokemon, true, false, false); + globalScene.gameData.updateSpeciesDexIvs(newPokemon.species.getRootSpeciesId(true), newPokemon.ivs); + const newStarterUnlocked = await globalScene.gameData.setPokemonCaught(newPokemon, true, false, false); if (newStarterUnlocked) { isNewStarter = true; - await showEncounterText(scene, i18next.t("battle:addedAsAStarter", { pokemonName: getPokemonSpecies(speciesRootForm).getName() })); + await showEncounterText(i18next.t("battle:addedAsAStarter", { pokemonName: getPokemonSpecies(speciesRootForm).getName() })); } } @@ -504,8 +510,8 @@ async function postProcessTransformedPokemon(scene: BattleScene, previousPokemon }); // For pokemon that the player owns (including ones just caught), gain a candy - if (!forBattle && !!scene.gameData.dexData[speciesRootForm].caughtAttr) { - scene.gameData.addStarterCandy(getPokemonSpecies(speciesRootForm), 1); + if (!forBattle && !!globalScene.gameData.dexData[speciesRootForm].caughtAttr) { + globalScene.gameData.addStarterCandy(getPokemonSpecies(speciesRootForm), 1); } // Set the moveset of the new pokemon to be the same as previous, but with 1 egg move and 1 (attempted) STAB move of the new species @@ -515,14 +521,14 @@ async function postProcessTransformedPokemon(scene: BattleScene, previousPokemon newPokemon.moveset = previousPokemon.moveset.slice(0); - const newEggMoveIndex = await addEggMoveToNewPokemonMoveset(scene, newPokemon, speciesRootForm, forBattle); + const newEggMoveIndex = await addEggMoveToNewPokemonMoveset(newPokemon, speciesRootForm, forBattle); // Try to add a favored STAB move (might fail if Pokemon already knows a bunch of moves from newPokemonGeneratedMoveset) addFavoredMoveToNewPokemonMoveset(newPokemon, newPokemonGeneratedMoveset, newEggMoveIndex); // Randomize the second type of the pokemon // If the pokemon does not normally have a second type, it will gain 1 - const newTypes = [ newPokemon.getTypes()[0] ]; + const newTypes = [ Type.UNKNOWN ]; let newType = randSeedInt(18) as Type; while (newType === newTypes[0]) { newType = randSeedInt(18) as Type; @@ -597,31 +603,31 @@ function getTransformedSpecies(originalBst: number, bstSearchRange: [number, num return newSpecies; } -function doShowDreamBackground(scene: BattleScene) { - const transformationContainer = scene.add.container(0, -scene.game.canvas.height / 6); +function doShowDreamBackground() { + const transformationContainer = globalScene.add.container(0, -globalScene.game.canvas.height / 6); transformationContainer.name = "Dream Background"; // In case it takes a bit for video to load - const transformationStaticBg = scene.add.rectangle(0, 0, scene.game.canvas.width / 6, scene.game.canvas.height / 6, 0); + const transformationStaticBg = globalScene.add.rectangle(0, 0, globalScene.game.canvas.width / 6, globalScene.game.canvas.height / 6, 0); transformationStaticBg.setName("Black Background"); transformationStaticBg.setOrigin(0, 0); transformationContainer.add(transformationStaticBg); transformationStaticBg.setVisible(true); - const transformationVideoBg: Phaser.GameObjects.Video = scene.add.video(0, 0, "evo_bg").stop(); + const transformationVideoBg: Phaser.GameObjects.Video = globalScene.add.video(0, 0, "evo_bg").stop(); transformationVideoBg.setLoop(true); transformationVideoBg.setOrigin(0, 0); transformationVideoBg.setScale(0.4359673025); transformationContainer.add(transformationVideoBg); - scene.fieldUI.add(transformationContainer); - scene.fieldUI.bringToTop(transformationContainer); + globalScene.fieldUI.add(transformationContainer); + globalScene.fieldUI.bringToTop(transformationContainer); transformationVideoBg.play(); transformationContainer.setVisible(true); transformationContainer.alpha = 0; - scene.tweens.add({ + globalScene.tweens.add({ targets: transformationContainer, alpha: 1, duration: 3000, @@ -629,39 +635,39 @@ function doShowDreamBackground(scene: BattleScene) { }); } -function doHideDreamBackground(scene: BattleScene) { - const transformationContainer = scene.fieldUI.getByName("Dream Background"); +function doHideDreamBackground() { + const transformationContainer = globalScene.fieldUI.getByName("Dream Background"); - scene.tweens.add({ + globalScene.tweens.add({ targets: transformationContainer, alpha: 0, duration: 3000, ease: "Sine.easeInOut", onComplete: () => { - scene.fieldUI.remove(transformationContainer, true); + globalScene.fieldUI.remove(transformationContainer, true); } }); } -function doSideBySideTransformations(scene: BattleScene, transformations: PokemonTransformation[]) { +function doSideBySideTransformations(transformations: PokemonTransformation[]) { return new Promise(resolve => { const allTransformationPromises: Promise[] = []; for (let i = 0; i < 3; i++) { const delay = i * 4000; - scene.time.delayedCall(delay, () => { + globalScene.time.delayedCall(delay, () => { const transformation = transformations[i]; const pokemon1 = transformation.previousPokemon; const pokemon2 = transformation.newPokemon; const screenPosition = i as TransformationScreenPosition; - const transformationPromise = doPokemonTransformationSequence(scene, pokemon1, pokemon2, screenPosition) + const transformationPromise = doPokemonTransformationSequence(pokemon1, pokemon2, screenPosition) .then(() => { if (transformations.length > i + 3) { const nextTransformationAtPosition = transformations[i + 3]; const nextPokemon1 = nextTransformationAtPosition.previousPokemon; const nextPokemon2 = nextTransformationAtPosition.newPokemon; - allTransformationPromises.push(doPokemonTransformationSequence(scene, nextPokemon1, nextPokemon2, screenPosition)); + allTransformationPromises.push(doPokemonTransformationSequence(nextPokemon1, nextPokemon2, screenPosition)); } }); allTransformationPromises.push(transformationPromise); @@ -682,11 +688,10 @@ function doSideBySideTransformations(scene: BattleScene, transformations: Pokemo /** * Returns index of the new egg move within the Pokemon's moveset (not the index of the move in `speciesEggMoves`) - * @param scene * @param newPokemon * @param speciesRootForm */ -async function addEggMoveToNewPokemonMoveset(scene: BattleScene, newPokemon: PlayerPokemon, speciesRootForm: Species, forBattle: boolean = false): Promise { +async function addEggMoveToNewPokemonMoveset(newPokemon: PlayerPokemon, speciesRootForm: Species, forBattle: boolean = false): Promise { let eggMoveIndex: null | number = null; const eggMoves = newPokemon.getEggMoves()?.slice(0); if (eggMoves) { @@ -712,8 +717,8 @@ async function addEggMoveToNewPokemonMoveset(scene: BattleScene, newPokemon: Pla } // For pokemon that the player owns (including ones just caught), unlock the egg move - if (!forBattle && !isNullOrUndefined(randomEggMoveIndex) && !!scene.gameData.dexData[speciesRootForm].caughtAttr) { - await scene.gameData.setEggMoveUnlocked(getPokemonSpecies(speciesRootForm), randomEggMoveIndex, true); + if (!forBattle && !isNullOrUndefined(randomEggMoveIndex) && !!globalScene.gameData.dexData[speciesRootForm].caughtAttr) { + await globalScene.gameData.setEggMoveUnlocked(getPokemonSpecies(speciesRootForm), randomEggMoveIndex, true); } } } diff --git a/src/data/mystery-encounters/mystery-encounter-dialogue.ts b/src/data/mystery-encounters/mystery-encounter-dialogue.ts index e0ba8512d34..39db3d58690 100644 --- a/src/data/mystery-encounters/mystery-encounter-dialogue.ts +++ b/src/data/mystery-encounters/mystery-encounter-dialogue.ts @@ -1,4 +1,4 @@ -import { TextStyle } from "#app/ui/text"; +import type { TextStyle } from "#app/ui/text"; export class TextDisplay { speaker?: string; diff --git a/src/data/mystery-encounters/mystery-encounter-option.ts b/src/data/mystery-encounters/mystery-encounter-option.ts index 4ff8fd95f85..d0078b3686e 100644 --- a/src/data/mystery-encounters/mystery-encounter-option.ts +++ b/src/data/mystery-encounters/mystery-encounter-option.ts @@ -1,15 +1,17 @@ -import { OptionTextDisplay } from "#app/data/mystery-encounters/mystery-encounter-dialogue"; -import { Moves } from "#app/enums/moves"; -import Pokemon, { PlayerPokemon } from "#app/field/pokemon"; -import BattleScene from "#app/battle-scene"; -import { Type } from "#enums/type"; +import type { OptionTextDisplay } from "#app/data/mystery-encounters/mystery-encounter-dialogue"; +import type { Moves } from "#app/enums/moves"; +import type { PlayerPokemon } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; +import { globalScene } from "#app/global-scene"; +import type { Type } from "#enums/type"; import { EncounterPokemonRequirement, EncounterSceneRequirement, MoneyRequirement, TypeRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements"; -import { CanLearnMoveRequirement, CanLearnMoveRequirementOptions } from "./requirements/can-learn-move-requirement"; +import type { CanLearnMoveRequirementOptions } from "./requirements/can-learn-move-requirement"; +import { CanLearnMoveRequirement } from "./requirements/can-learn-move-requirement"; import { isNullOrUndefined, randSeedInt } from "#app/utils"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; -export type OptionPhaseCallback = (scene: BattleScene) => Promise; +export type OptionPhaseCallback = () => Promise; /** * Used by {@linkcode MysteryEncounterOptionBuilder} class to define required/optional properties on the {@linkcode MysteryEncounterOption} class when building. @@ -74,21 +76,19 @@ export default class MysteryEncounterOption implements IMysteryEncounterOption { /** * Returns true if all {@linkcode EncounterRequirement}s for the option are met - * @param scene */ - meetsRequirements(scene: BattleScene): boolean { - return !this.requirements.some(requirement => !requirement.meetsRequirement(scene)) - && this.meetsSupportingRequirementAndSupportingPokemonSelected(scene) - && this.meetsPrimaryRequirementAndPrimaryPokemonSelected(scene); + meetsRequirements(): boolean { + return !this.requirements.some(requirement => !requirement.meetsRequirement()) + && this.meetsSupportingRequirementAndSupportingPokemonSelected() + && this.meetsPrimaryRequirementAndPrimaryPokemonSelected(); } /** * Returns true if all PRIMARY {@linkcode EncounterRequirement}s for the option are met - * @param scene * @param pokemon */ - pokemonMeetsPrimaryRequirements(scene: BattleScene, pokemon: Pokemon): boolean { - return !this.primaryPokemonRequirements.some(req => !req.queryParty(scene.getPlayerParty()).map(p => p.id).includes(pokemon.id)); + pokemonMeetsPrimaryRequirements(pokemon: Pokemon): boolean { + return !this.primaryPokemonRequirements.some(req => !req.queryParty(globalScene.getPlayerParty()).map(p => p.id).includes(pokemon.id)); } /** @@ -96,16 +96,15 @@ export default class MysteryEncounterOption implements IMysteryEncounterOption { * AND there is a valid Pokemon assigned to {@linkcode primaryPokemon}. * If both {@linkcode primaryPokemonRequirements} and {@linkcode secondaryPokemonRequirements} are defined, * can cause scenarios where there are not enough Pokemon that are sufficient for all requirements. - * @param scene */ - meetsPrimaryRequirementAndPrimaryPokemonSelected(scene: BattleScene): boolean { + meetsPrimaryRequirementAndPrimaryPokemonSelected(): boolean { if (!this.primaryPokemonRequirements || this.primaryPokemonRequirements.length === 0) { return true; } - let qualified: PlayerPokemon[] = scene.getPlayerParty(); + let qualified: PlayerPokemon[] = globalScene.getPlayerParty(); for (const req of this.primaryPokemonRequirements) { - if (req.meetsRequirement(scene)) { - const queryParty = req.queryParty(scene.getPlayerParty()); + if (req.meetsRequirement()) { + const queryParty = req.queryParty(globalScene.getPlayerParty()); qualified = qualified.filter(pkmn => queryParty.includes(pkmn)); } else { this.primaryPokemon = undefined; @@ -154,18 +153,17 @@ export default class MysteryEncounterOption implements IMysteryEncounterOption { * AND there is a valid Pokemon assigned to {@linkcode secondaryPokemon} (if applicable). * If both {@linkcode primaryPokemonRequirements} and {@linkcode secondaryPokemonRequirements} are defined, * can cause scenarios where there are not enough Pokemon that are sufficient for all requirements. - * @param scene */ - meetsSupportingRequirementAndSupportingPokemonSelected(scene: BattleScene): boolean { + meetsSupportingRequirementAndSupportingPokemonSelected(): boolean { if (!this.secondaryPokemonRequirements || this.secondaryPokemonRequirements.length === 0) { this.secondaryPokemon = []; return true; } - let qualified: PlayerPokemon[] = scene.getPlayerParty(); + let qualified: PlayerPokemon[] = globalScene.getPlayerParty(); for (const req of this.secondaryPokemonRequirements) { - if (req.meetsRequirement(scene)) { - const queryParty = req.queryParty(scene.getPlayerParty()); + if (req.meetsRequirement()) { + const queryParty = req.queryParty(globalScene.getPlayerParty()); qualified = qualified.filter(pkmn => queryParty.includes(pkmn)); } else { this.secondaryPokemon = []; diff --git a/src/data/mystery-encounters/mystery-encounter-requirements.ts b/src/data/mystery-encounters/mystery-encounter-requirements.ts index 811b622de76..63fb0cc5380 100644 --- a/src/data/mystery-encounters/mystery-encounter-requirements.ts +++ b/src/data/mystery-encounters/mystery-encounter-requirements.ts @@ -1,4 +1,4 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { allAbilities } from "#app/data/ability"; import { EvolutionItem, pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import { Nature } from "#enums/nature"; @@ -6,35 +6,33 @@ import { FormChangeItem, pokemonFormChanges, SpeciesFormChangeItemTrigger } from import { StatusEffect } from "#enums/status-effect"; import { Type } from "#enums/type"; import { WeatherType } from "#enums/weather-type"; -import { PlayerPokemon } from "#app/field/pokemon"; +import type { PlayerPokemon } from "#app/field/pokemon"; import { AttackTypeBoosterModifier } from "#app/modifier/modifier"; -import { AttackTypeBoosterModifierType } from "#app/modifier/modifier-type"; +import type { AttackTypeBoosterModifierType } from "#app/modifier/modifier-type"; import { isNullOrUndefined } from "#app/utils"; -import { Abilities } from "#enums/abilities"; +import type { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; -import { MysteryEncounterType } from "#enums/mystery-encounter-type"; +import type { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { Species } from "#enums/species"; import { SpeciesFormKey } from "#enums/species-form-key"; import { TimeOfDay } from "#enums/time-of-day"; export interface EncounterRequirement { - meetsRequirement(scene: BattleScene): boolean; // Boolean to see if a requirement is met - getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string]; + meetsRequirement(): boolean; // Boolean to see if a requirement is met + getDialogueToken(pokemon?: PlayerPokemon): [string, string]; } export abstract class EncounterSceneRequirement implements EncounterRequirement { /** * Returns whether the EncounterSceneRequirement's... requirements, are met by the given scene - * @param partyPokemon */ - abstract meetsRequirement(scene: BattleScene): boolean; + abstract meetsRequirement(): boolean; /** * Returns a dialogue token key/value pair for a given Requirement. * Should be overridden by child Requirement classes. - * @param scene * @param pokemon */ - abstract getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string]; + abstract getDialogueToken(pokemon?: PlayerPokemon): [string, string]; } /** @@ -61,33 +59,31 @@ export class CombinationSceneRequirement extends EncounterSceneRequirement { /** * Checks if all/any requirements are met (depends on {@linkcode isAnd}) - * @param scene The {@linkcode BattleScene} to check against * @returns true if all/any requirements are met (depends on {@linkcode isAnd}) */ - override meetsRequirement(scene: BattleScene): boolean { + override meetsRequirement(): boolean { return this.isAnd - ? this.requirements.every(req => req.meetsRequirement(scene)) - : this.requirements.some(req => req.meetsRequirement(scene)); + ? this.requirements.every(req => req.meetsRequirement()) + : this.requirements.some(req => req.meetsRequirement()); } /** * Retrieves a dialogue token key/value pair for the given {@linkcode EncounterSceneRequirement | requirements}. - * @param scene The {@linkcode BattleScene} to check against * @param pokemon The {@linkcode PlayerPokemon} to check against * @returns A dialogue token key/value pair * @throws An {@linkcode Error} if {@linkcode isAnd} is `true` (not supported) */ - override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { + override getDialogueToken(pokemon?: PlayerPokemon): [string, string] { if (this.isAnd) { throw new Error("Not implemented (Sorry)"); } else { for (const req of this.requirements) { - if (req.meetsRequirement(scene)) { - return req.getDialogueToken(scene, pokemon); + if (req.meetsRequirement()) { + return req.getDialogueToken(pokemon); } } - return this.requirements[0].getDialogueToken(scene, pokemon); + return this.requirements[0].getDialogueToken(pokemon); } } } @@ -98,9 +94,8 @@ export abstract class EncounterPokemonRequirement implements EncounterRequiremen /** * Returns whether the EncounterPokemonRequirement's... requirements, are met by the given scene - * @param partyPokemon */ - abstract meetsRequirement(scene: BattleScene): boolean; + abstract meetsRequirement(): boolean; /** * Returns all party members that are compatible with this requirement. For non pokemon related requirements, the entire party is returned. @@ -111,10 +106,9 @@ export abstract class EncounterPokemonRequirement implements EncounterRequiremen /** * Returns a dialogue token key/value pair for a given Requirement. * Should be overridden by child Requirement classes. - * @param scene * @param pokemon */ - abstract getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string]; + abstract getDialogueToken(pokemon?: PlayerPokemon): [string, string]; } /** @@ -143,13 +137,12 @@ export class CombinationPokemonRequirement extends EncounterPokemonRequirement { /** * Checks if all/any requirements are met (depends on {@linkcode isAnd}) - * @param scene The {@linkcode BattleScene} to check against * @returns true if all/any requirements are met (depends on {@linkcode isAnd}) */ - override meetsRequirement(scene: BattleScene): boolean { + override meetsRequirement(): boolean { return this.isAnd - ? this.requirements.every(req => req.meetsRequirement(scene)) - : this.requirements.some(req => req.meetsRequirement(scene)); + ? this.requirements.every(req => req.meetsRequirement()) + : this.requirements.some(req => req.meetsRequirement()); } /** @@ -168,22 +161,21 @@ export class CombinationPokemonRequirement extends EncounterPokemonRequirement { /** * Retrieves a dialogue token key/value pair for the given {@linkcode EncounterPokemonRequirement | requirements}. - * @param scene The {@linkcode BattleScene} to check against * @param pokemon The {@linkcode PlayerPokemon} to check against * @returns A dialogue token key/value pair * @throws An {@linkcode Error} if {@linkcode isAnd} is `true` (not supported) */ - override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { + override getDialogueToken(pokemon?: PlayerPokemon): [string, string] { if (this.isAnd) { throw new Error("Not implemented (Sorry)"); } else { for (const req of this.requirements) { - if (req.meetsRequirement(scene)) { - return req.getDialogueToken(scene, pokemon); + if (req.meetsRequirement()) { + return req.getDialogueToken(pokemon); } } - return this.requirements[0].getDialogueToken(scene, pokemon); + return this.requirements[0].getDialogueToken(pokemon); } } } @@ -200,12 +192,12 @@ export class PreviousEncounterRequirement extends EncounterSceneRequirement { this.previousEncounterRequirement = previousEncounterRequirement; } - override meetsRequirement(scene: BattleScene): boolean { - return scene.mysteryEncounterSaveData.encounteredEvents.some(e => e.type === this.previousEncounterRequirement); + override meetsRequirement(): boolean { + return globalScene.mysteryEncounterSaveData.encounteredEvents.some(e => e.type === this.previousEncounterRequirement); } - override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { - return [ "previousEncounter", scene.mysteryEncounterSaveData.encounteredEvents.find(e => e.type === this.previousEncounterRequirement)?.[0].toString() ?? "" ]; + override getDialogueToken(pokemon?: PlayerPokemon): [string, string] { + return [ "previousEncounter", globalScene.mysteryEncounterSaveData.encounteredEvents.find(e => e.type === this.previousEncounterRequirement)?.[0].toString() ?? "" ]; } } @@ -222,9 +214,9 @@ export class WaveRangeRequirement extends EncounterSceneRequirement { this.waveRange = waveRange; } - override meetsRequirement(scene: BattleScene): boolean { + override meetsRequirement(): boolean { if (!isNullOrUndefined(this.waveRange) && this.waveRange[0] <= this.waveRange[1]) { - const waveIndex = scene.currentBattle.waveIndex; + const waveIndex = globalScene.currentBattle.waveIndex; if (waveIndex >= 0 && (this.waveRange[0] >= 0 && this.waveRange[0] > waveIndex) || (this.waveRange[1] >= 0 && this.waveRange[1] < waveIndex)) { return false; } @@ -232,8 +224,8 @@ export class WaveRangeRequirement extends EncounterSceneRequirement { return true; } - override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { - return [ "waveIndex", scene.currentBattle.waveIndex.toString() ]; + override getDialogueToken(pokemon?: PlayerPokemon): [string, string] { + return [ "waveIndex", globalScene.currentBattle.waveIndex.toString() ]; } } @@ -257,12 +249,12 @@ export class WaveModulusRequirement extends EncounterSceneRequirement { this.modulusValue = modulusValue; } - override meetsRequirement(scene: BattleScene): boolean { - return this.waveModuli.includes(scene.currentBattle.waveIndex % this.modulusValue); + override meetsRequirement(): boolean { + return this.waveModuli.includes(globalScene.currentBattle.waveIndex % this.modulusValue); } - override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { - return [ "waveIndex", scene.currentBattle.waveIndex.toString() ]; + override getDialogueToken(pokemon?: PlayerPokemon): [string, string] { + return [ "waveIndex", globalScene.currentBattle.waveIndex.toString() ]; } } @@ -274,8 +266,8 @@ export class TimeOfDayRequirement extends EncounterSceneRequirement { this.requiredTimeOfDay = Array.isArray(timeOfDay) ? timeOfDay : [ timeOfDay ]; } - override meetsRequirement(scene: BattleScene): boolean { - const timeOfDay = scene.arena?.getTimeOfDay(); + override meetsRequirement(): boolean { + const timeOfDay = globalScene.arena?.getTimeOfDay(); if (!isNullOrUndefined(timeOfDay) && this.requiredTimeOfDay?.length > 0 && !this.requiredTimeOfDay.includes(timeOfDay)) { return false; } @@ -283,8 +275,8 @@ export class TimeOfDayRequirement extends EncounterSceneRequirement { return true; } - override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { - return [ "timeOfDay", TimeOfDay[scene.arena.getTimeOfDay()].toLocaleLowerCase() ]; + override getDialogueToken(pokemon?: PlayerPokemon): [string, string] { + return [ "timeOfDay", TimeOfDay[globalScene.arena.getTimeOfDay()].toLocaleLowerCase() ]; } } @@ -296,8 +288,8 @@ export class WeatherRequirement extends EncounterSceneRequirement { this.requiredWeather = Array.isArray(weather) ? weather : [ weather ]; } - override meetsRequirement(scene: BattleScene): boolean { - const currentWeather = scene.arena.weather?.weatherType; + override meetsRequirement(): boolean { + const currentWeather = globalScene.arena.weather?.weatherType; if (!isNullOrUndefined(currentWeather) && this.requiredWeather?.length > 0 && !this.requiredWeather.includes(currentWeather!)) { return false; } @@ -305,8 +297,8 @@ export class WeatherRequirement extends EncounterSceneRequirement { return true; } - override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { - const currentWeather = scene.arena.weather?.weatherType; + override getDialogueToken(pokemon?: PlayerPokemon): [string, string] { + const currentWeather = globalScene.arena.weather?.weatherType; let token = ""; if (!isNullOrUndefined(currentWeather)) { token = WeatherType[currentWeather].replace("_", " ").toLocaleLowerCase(); @@ -331,9 +323,9 @@ export class PartySizeRequirement extends EncounterSceneRequirement { this.excludeDisallowedPokemon = excludeDisallowedPokemon; } - override meetsRequirement(scene: BattleScene): boolean { + override meetsRequirement(): boolean { if (!isNullOrUndefined(this.partySizeRange) && this.partySizeRange[0] <= this.partySizeRange[1]) { - const partySize = this.excludeDisallowedPokemon ? scene.getPokemonAllowedInBattle().length : scene.getPlayerParty().length; + const partySize = this.excludeDisallowedPokemon ? globalScene.getPokemonAllowedInBattle().length : globalScene.getPlayerParty().length; if (partySize >= 0 && (this.partySizeRange[0] >= 0 && this.partySizeRange[0] > partySize) || (this.partySizeRange[1] >= 0 && this.partySizeRange[1] < partySize)) { return false; } @@ -342,8 +334,8 @@ export class PartySizeRequirement extends EncounterSceneRequirement { return true; } - override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { - return [ "partySize", scene.getPlayerParty().length.toString() ]; + override getDialogueToken(pokemon?: PlayerPokemon): [string, string] { + return [ "partySize", globalScene.getPlayerParty().length.toString() ]; } } @@ -357,14 +349,14 @@ export class PersistentModifierRequirement extends EncounterSceneRequirement { this.requiredHeldItemModifiers = Array.isArray(heldItem) ? heldItem : [ heldItem ]; } - override meetsRequirement(scene: BattleScene): boolean { - const partyPokemon = scene.getPlayerParty(); + override meetsRequirement(): boolean { + const partyPokemon = globalScene.getPlayerParty(); if (isNullOrUndefined(partyPokemon) || this.requiredHeldItemModifiers?.length < 0) { return false; } let modifierCount = 0; this.requiredHeldItemModifiers.forEach(modifier => { - const matchingMods = scene.findModifiers(m => m.constructor.name === modifier); + const matchingMods = globalScene.findModifiers(m => m.constructor.name === modifier); if (matchingMods?.length > 0) { matchingMods.forEach(matchingMod => { modifierCount += matchingMod.stackCount; @@ -375,7 +367,7 @@ export class PersistentModifierRequirement extends EncounterSceneRequirement { return modifierCount >= this.minNumberOfItems; } - override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { + override getDialogueToken(pokemon?: PlayerPokemon): [string, string] { return [ "requiredItem", this.requiredHeldItemModifiers[0] ]; } } @@ -390,20 +382,20 @@ export class MoneyRequirement extends EncounterSceneRequirement { this.scalingMultiplier = scalingMultiplier ?? 0; } - override meetsRequirement(scene: BattleScene): boolean { - const money = scene.money; + override meetsRequirement(): boolean { + const money = globalScene.money; if (isNullOrUndefined(money)) { return false; } if (this.scalingMultiplier > 0) { - this.requiredMoney = scene.getWaveMoneyAmount(this.scalingMultiplier); + this.requiredMoney = globalScene.getWaveMoneyAmount(this.scalingMultiplier); } return !(this.requiredMoney > 0 && this.requiredMoney > money); } - override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { - const value = this.scalingMultiplier > 0 ? scene.getWaveMoneyAmount(this.scalingMultiplier).toString() : this.requiredMoney.toString(); + override getDialogueToken(pokemon?: PlayerPokemon): [string, string] { + const value = this.scalingMultiplier > 0 ? globalScene.getWaveMoneyAmount(this.scalingMultiplier).toString() : this.requiredMoney.toString(); return [ "money", value ]; } } @@ -420,8 +412,8 @@ export class SpeciesRequirement extends EncounterPokemonRequirement { this.requiredSpecies = Array.isArray(species) ? species : [ species ]; } - override meetsRequirement(scene: BattleScene): boolean { - const partyPokemon = scene.getPlayerParty(); + override meetsRequirement(): boolean { + const partyPokemon = globalScene.getPlayerParty(); if (isNullOrUndefined(partyPokemon) || this.requiredSpecies?.length < 0) { return false; } @@ -437,7 +429,7 @@ export class SpeciesRequirement extends EncounterPokemonRequirement { } } - override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { + override getDialogueToken(pokemon?: PlayerPokemon): [string, string] { if (pokemon?.species.speciesId && this.requiredSpecies.includes(pokemon.species.speciesId)) { return [ "species", Species[pokemon.species.speciesId] ]; } @@ -458,8 +450,8 @@ export class NatureRequirement extends EncounterPokemonRequirement { this.requiredNature = Array.isArray(nature) ? nature : [ nature ]; } - override meetsRequirement(scene: BattleScene): boolean { - const partyPokemon = scene.getPlayerParty(); + override meetsRequirement(): boolean { + const partyPokemon = globalScene.getPlayerParty(); if (isNullOrUndefined(partyPokemon) || this.requiredNature?.length < 0) { return false; } @@ -475,7 +467,7 @@ export class NatureRequirement extends EncounterPokemonRequirement { } } - override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { + override getDialogueToken(pokemon?: PlayerPokemon): [string, string] { if (!isNullOrUndefined(pokemon?.nature) && this.requiredNature.includes(pokemon.nature)) { return [ "nature", Nature[pokemon.nature] ]; } @@ -497,8 +489,8 @@ export class TypeRequirement extends EncounterPokemonRequirement { this.requiredType = Array.isArray(type) ? type : [ type ]; } - override meetsRequirement(scene: BattleScene): boolean { - let partyPokemon = scene.getPlayerParty(); + override meetsRequirement(): boolean { + let partyPokemon = globalScene.getPlayerParty(); if (isNullOrUndefined(partyPokemon)) { return false; @@ -520,7 +512,7 @@ export class TypeRequirement extends EncounterPokemonRequirement { } } - override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { + override getDialogueToken(pokemon?: PlayerPokemon): [string, string] { const includedTypes = this.requiredType.filter((ty) => pokemon?.getTypes().includes(ty)); if (includedTypes.length > 0) { return [ "type", Type[includedTypes[0]] ]; @@ -544,8 +536,8 @@ export class MoveRequirement extends EncounterPokemonRequirement { this.requiredMoves = Array.isArray(moves) ? moves : [ moves ]; } - override meetsRequirement(scene: BattleScene): boolean { - const partyPokemon = scene.getPlayerParty(); + override meetsRequirement(): boolean { + const partyPokemon = globalScene.getPlayerParty(); if (isNullOrUndefined(partyPokemon) || this.requiredMoves?.length < 0) { return false; } @@ -566,7 +558,7 @@ export class MoveRequirement extends EncounterPokemonRequirement { } } - override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { + override getDialogueToken(pokemon?: PlayerPokemon): [string, string] { const includedMoves = pokemon?.moveset.filter((move) => move?.moveId && this.requiredMoves.includes(move.moveId)); if (includedMoves && includedMoves.length > 0 && includedMoves[0]) { return [ "move", includedMoves[0].getName() ]; @@ -593,8 +585,8 @@ export class CompatibleMoveRequirement extends EncounterPokemonRequirement { this.requiredMoves = Array.isArray(learnableMove) ? learnableMove : [ learnableMove ]; } - override meetsRequirement(scene: BattleScene): boolean { - const partyPokemon = scene.getPlayerParty(); + override meetsRequirement(): boolean { + const partyPokemon = globalScene.getPlayerParty(); if (isNullOrUndefined(partyPokemon) || this.requiredMoves?.length < 0) { return false; } @@ -610,7 +602,7 @@ export class CompatibleMoveRequirement extends EncounterPokemonRequirement { } } - override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { + override getDialogueToken(pokemon?: PlayerPokemon): [string, string] { const includedCompatMoves = this.requiredMoves.filter((reqMove) => pokemon?.compatibleTms.filter((tm) => !pokemon.moveset.find(m => m?.moveId === tm)).includes(reqMove)); if (includedCompatMoves.length > 0) { return [ "compatibleMove", Moves[includedCompatMoves[0]] ]; @@ -634,8 +626,8 @@ export class AbilityRequirement extends EncounterPokemonRequirement { this.requiredAbilities = Array.isArray(abilities) ? abilities : [ abilities ]; } - override meetsRequirement(scene: BattleScene): boolean { - const partyPokemon = scene.getPlayerParty(); + override meetsRequirement(): boolean { + const partyPokemon = globalScene.getPlayerParty(); if (isNullOrUndefined(partyPokemon) || this.requiredAbilities?.length < 0) { return false; } @@ -655,7 +647,7 @@ export class AbilityRequirement extends EncounterPokemonRequirement { } } - override getDialogueToken(_scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { + override getDialogueToken(pokemon?: PlayerPokemon): [string, string] { const matchingAbility = this.requiredAbilities.find(a => pokemon?.hasAbility(a, false)); if (!isNullOrUndefined(matchingAbility)) { return [ "ability", allAbilities[matchingAbility].name ]; @@ -676,8 +668,8 @@ export class StatusEffectRequirement extends EncounterPokemonRequirement { this.requiredStatusEffect = Array.isArray(statusEffect) ? statusEffect : [ statusEffect ]; } - override meetsRequirement(scene: BattleScene): boolean { - const partyPokemon = scene.getPlayerParty(); + override meetsRequirement(): boolean { + const partyPokemon = globalScene.getPlayerParty(); if (isNullOrUndefined(partyPokemon) || this.requiredStatusEffect?.length < 0) { return false; } @@ -713,7 +705,7 @@ export class StatusEffectRequirement extends EncounterPokemonRequirement { } } - override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { + override getDialogueToken(pokemon?: PlayerPokemon): [string, string] { const reqStatus = this.requiredStatusEffect.filter((a) => { if (a === StatusEffect.NONE) { return isNullOrUndefined(pokemon?.status) || isNullOrUndefined(pokemon.status.effect) || pokemon.status.effect === a; @@ -745,8 +737,8 @@ export class CanFormChangeWithItemRequirement extends EncounterPokemonRequiremen this.requiredFormChangeItem = Array.isArray(formChangeItem) ? formChangeItem : [ formChangeItem ]; } - override meetsRequirement(scene: BattleScene): boolean { - const partyPokemon = scene.getPlayerParty(); + override meetsRequirement(): boolean { + const partyPokemon = globalScene.getPlayerParty(); if (isNullOrUndefined(partyPokemon) || this.requiredFormChangeItem?.length < 0) { return false; } @@ -775,7 +767,7 @@ export class CanFormChangeWithItemRequirement extends EncounterPokemonRequiremen } } - override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { + override getDialogueToken(pokemon?: PlayerPokemon): [string, string] { const requiredItems = this.requiredFormChangeItem.filter((formChangeItem) => this.filterByForm(pokemon, formChangeItem)); if (requiredItems.length > 0) { return [ "formChangeItem", FormChangeItem[requiredItems[0]] ]; @@ -797,8 +789,8 @@ export class CanEvolveWithItemRequirement extends EncounterPokemonRequirement { this.requiredEvolutionItem = Array.isArray(evolutionItems) ? evolutionItems : [ evolutionItems ]; } - override meetsRequirement(scene: BattleScene): boolean { - const partyPokemon = scene.getPlayerParty(); + override meetsRequirement(): boolean { + const partyPokemon = globalScene.getPlayerParty(); if (isNullOrUndefined(partyPokemon) || this.requiredEvolutionItem?.length < 0) { return false; } @@ -825,7 +817,7 @@ export class CanEvolveWithItemRequirement extends EncounterPokemonRequirement { } } - override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { + override getDialogueToken(pokemon?: PlayerPokemon): [string, string] { const requiredItems = this.requiredEvolutionItem.filter((evoItem) => this.filterByEvo(pokemon, evoItem)); if (requiredItems.length > 0) { return [ "evolutionItem", EvolutionItem[requiredItems[0]] ]; @@ -848,8 +840,8 @@ export class HeldItemRequirement extends EncounterPokemonRequirement { this.requireTransferable = requireTransferable; } - override meetsRequirement(scene: BattleScene): boolean { - const partyPokemon = scene.getPlayerParty(); + override meetsRequirement(): boolean { + const partyPokemon = globalScene.getPlayerParty(); if (isNullOrUndefined(partyPokemon)) { return false; } @@ -873,7 +865,7 @@ export class HeldItemRequirement extends EncounterPokemonRequirement { } } - override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { + override getDialogueToken(pokemon?: PlayerPokemon): [string, string] { const requiredItems = pokemon?.getHeldItems().filter((it) => { return this.requiredHeldItemModifiers.some(heldItem => it.constructor.name === heldItem) && (!this.requireTransferable || it.isTransferable); @@ -899,8 +891,8 @@ export class AttackTypeBoosterHeldItemTypeRequirement extends EncounterPokemonRe this.requireTransferable = requireTransferable; } - override meetsRequirement(scene: BattleScene): boolean { - const partyPokemon = scene.getPlayerParty(); + override meetsRequirement(): boolean { + const partyPokemon = globalScene.getPlayerParty(); if (isNullOrUndefined(partyPokemon)) { return false; } @@ -928,7 +920,7 @@ export class AttackTypeBoosterHeldItemTypeRequirement extends EncounterPokemonRe } } - override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { + override getDialogueToken(pokemon?: PlayerPokemon): [string, string] { const requiredItems = pokemon?.getHeldItems().filter((it) => { return this.requiredHeldItemTypes.some(heldItemType => it instanceof AttackTypeBoosterModifier @@ -954,10 +946,10 @@ export class LevelRequirement extends EncounterPokemonRequirement { this.requiredLevelRange = requiredLevelRange; } - override meetsRequirement(scene: BattleScene): boolean { + override meetsRequirement(): boolean { // Party Pokemon inside required level range if (!isNullOrUndefined(this.requiredLevelRange) && this.requiredLevelRange[0] <= this.requiredLevelRange[1]) { - const partyPokemon = scene.getPlayerParty(); + const partyPokemon = globalScene.getPlayerParty(); const pokemonInRange = this.queryParty(partyPokemon); if (pokemonInRange.length < this.minNumberOfPokemon) { return false; @@ -975,7 +967,7 @@ export class LevelRequirement extends EncounterPokemonRequirement { } } - override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { + override getDialogueToken(pokemon?: PlayerPokemon): [string, string] { return [ "level", pokemon?.level.toString() ?? "" ]; } } @@ -992,10 +984,10 @@ export class FriendshipRequirement extends EncounterPokemonRequirement { this.requiredFriendshipRange = requiredFriendshipRange; } - override meetsRequirement(scene: BattleScene): boolean { + override meetsRequirement(): boolean { // Party Pokemon inside required friendship range if (!isNullOrUndefined(this.requiredFriendshipRange) && this.requiredFriendshipRange[0] <= this.requiredFriendshipRange[1]) { - const partyPokemon = scene.getPlayerParty(); + const partyPokemon = globalScene.getPlayerParty(); const pokemonInRange = this.queryParty(partyPokemon); if (pokemonInRange.length < this.minNumberOfPokemon) { return false; @@ -1013,7 +1005,7 @@ export class FriendshipRequirement extends EncounterPokemonRequirement { } } - override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { + override getDialogueToken(pokemon?: PlayerPokemon): [string, string] { return [ "friendship", pokemon?.friendship.toString() ?? "" ]; } } @@ -1035,10 +1027,10 @@ export class HealthRatioRequirement extends EncounterPokemonRequirement { this.requiredHealthRange = requiredHealthRange; } - override meetsRequirement(scene: BattleScene): boolean { + override meetsRequirement(): boolean { // Party Pokemon's health inside required health range if (!isNullOrUndefined(this.requiredHealthRange) && this.requiredHealthRange[0] <= this.requiredHealthRange[1]) { - const partyPokemon = scene.getPlayerParty(); + const partyPokemon = globalScene.getPlayerParty(); const pokemonInRange = this.queryParty(partyPokemon); if (pokemonInRange.length < this.minNumberOfPokemon) { return false; @@ -1058,7 +1050,7 @@ export class HealthRatioRequirement extends EncounterPokemonRequirement { } } - override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { + override getDialogueToken(pokemon?: PlayerPokemon): [string, string] { const hpRatio = pokemon?.getHpRatio(); if (!isNullOrUndefined(hpRatio)) { return [ "healthRatio", Math.floor(hpRatio * 100).toString() + "%" ]; @@ -1079,10 +1071,10 @@ export class WeightRequirement extends EncounterPokemonRequirement { this.requiredWeightRange = requiredWeightRange; } - override meetsRequirement(scene: BattleScene): boolean { + override meetsRequirement(): boolean { // Party Pokemon's weight inside required weight range if (!isNullOrUndefined(this.requiredWeightRange) && this.requiredWeightRange[0] <= this.requiredWeightRange[1]) { - const partyPokemon = scene.getPlayerParty(); + const partyPokemon = globalScene.getPlayerParty(); const pokemonInRange = this.queryParty(partyPokemon); if (pokemonInRange.length < this.minNumberOfPokemon) { return false; @@ -1100,7 +1092,7 @@ export class WeightRequirement extends EncounterPokemonRequirement { } } - override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { + override getDialogueToken(pokemon?: PlayerPokemon): [string, string] { return [ "weight", pokemon?.getWeight().toString() ?? "" ]; } } diff --git a/src/data/mystery-encounters/mystery-encounter-save-data.ts b/src/data/mystery-encounters/mystery-encounter-save-data.ts index 259fbff7b85..7c8110628f0 100644 --- a/src/data/mystery-encounters/mystery-encounter-save-data.ts +++ b/src/data/mystery-encounters/mystery-encounter-save-data.ts @@ -1,7 +1,7 @@ -import { MysteryEncounterType } from "#enums/mystery-encounter-type"; +import type { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { BASE_MYSTERY_ENCOUNTER_SPAWN_WEIGHT } from "#app/data/mystery-encounters/mystery-encounters"; import { isNullOrUndefined } from "#app/utils"; -import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; +import type { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; export class SeenEncounterData { type: MysteryEncounterType; diff --git a/src/data/mystery-encounters/mystery-encounter.ts b/src/data/mystery-encounters/mystery-encounter.ts index e341da4e435..c90649e551d 100644 --- a/src/data/mystery-encounters/mystery-encounter.ts +++ b/src/data/mystery-encounters/mystery-encounter.ts @@ -1,21 +1,26 @@ -import { EnemyPartyConfig } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import Pokemon, { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; +import type { EnemyPartyConfig } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import type { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; import { capitalizeFirstLetter, isNullOrUndefined } from "#app/utils"; -import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import BattleScene from "#app/battle-scene"; -import MysteryEncounterIntroVisuals, { MysteryEncounterSpriteConfig } from "#app/field/mystery-encounter-intro"; +import type { MysteryEncounterType } from "#enums/mystery-encounter-type"; +import type { MysteryEncounterSpriteConfig } from "#app/field/mystery-encounter-intro"; +import MysteryEncounterIntroVisuals from "#app/field/mystery-encounter-intro"; import * as Utils from "#app/utils"; -import { StatusEffect } from "#enums/status-effect"; -import MysteryEncounterDialogue, { OptionTextDisplay } from "./mystery-encounter-dialogue"; -import MysteryEncounterOption, { MysteryEncounterOptionBuilder, OptionPhaseCallback } from "./mystery-encounter-option"; +import type { StatusEffect } from "#enums/status-effect"; +import type { OptionTextDisplay } from "./mystery-encounter-dialogue"; +import type MysteryEncounterDialogue from "./mystery-encounter-dialogue"; +import type { OptionPhaseCallback } from "./mystery-encounter-option"; +import type MysteryEncounterOption from "./mystery-encounter-option"; +import { MysteryEncounterOptionBuilder } from "./mystery-encounter-option"; import { EncounterPokemonRequirement, EncounterSceneRequirement, HealthRatioRequirement, PartySizeRequirement, StatusEffectRequirement, WaveRangeRequirement } from "./mystery-encounter-requirements"; -import { BattlerIndex } from "#app/battle"; +import type { BattlerIndex } from "#app/battle"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; -import { GameModes } from "#app/game-mode"; -import { EncounterAnim } from "#enums/encounter-anims"; -import { Challenges } from "#enums/challenges"; +import type { GameModes } from "#app/game-mode"; +import type { EncounterAnim } from "#enums/encounter-anims"; +import type { Challenges } from "#enums/challenges"; +import { globalScene } from "#app/global-scene"; export interface EncounterStartOfBattleEffect { sourcePokemon?: Pokemon; @@ -55,11 +60,11 @@ export interface IMysteryEncounter { skipToFightInput: boolean; preventGameStatsUpdates: boolean; - onInit?: (scene: BattleScene) => boolean; - onVisualsStart?: (scene: BattleScene) => boolean; - doEncounterExp?: (scene: BattleScene) => boolean; - doEncounterRewards?: (scene: BattleScene) => boolean; - doContinueEncounter?: (scene: BattleScene) => Promise; + onInit?: () => boolean; + onVisualsStart?: () => boolean; + doEncounterExp?: () => boolean; + doEncounterRewards?: () => boolean; + doContinueEncounter?: () => Promise; requirements: EncounterSceneRequirement[]; primaryPokemonRequirements: EncounterPokemonRequirement[]; @@ -159,24 +164,24 @@ export default class MysteryEncounter implements IMysteryEncounter { // #region Event callback functions /** Event when Encounter is first loaded, use it for data conditioning */ - onInit?: (scene: BattleScene) => boolean; + onInit?: () => boolean; /** Event when battlefield visuals have finished sliding in and the encounter dialogue begins */ - onVisualsStart?: (scene: BattleScene) => boolean; + onVisualsStart?: () => boolean; /** Event triggered prior to {@linkcode CommandPhase}, during {@linkcode TurnInitPhase} */ - onTurnStart?: (scene: BattleScene) => boolean; + onTurnStart?: () => boolean; /** Event prior to any rewards logic in {@linkcode MysteryEncounterRewardsPhase} */ - onRewards?: (scene: BattleScene) => Promise; + onRewards?: () => Promise; /** Will provide the player party EXP before rewards are displayed for that wave */ - doEncounterExp?: (scene: BattleScene) => boolean; + doEncounterExp?: () => boolean; /** Will provide the player a rewards shop for that wave */ - doEncounterRewards?: (scene: BattleScene) => boolean; + doEncounterRewards?: () => boolean; /** Will execute callback during VictoryPhase of a continuousEncounter */ - doContinueEncounter?: (scene: BattleScene) => Promise; + doContinueEncounter?: () => Promise; /** * Can perform special logic when a ME battle is lost, before GameOver/battle retry prompt. * Should return `true` if it is treated as "real" Game Over, `false` if not. */ - onGameOver?: (scene: BattleScene) => boolean; + onGameOver?: () => boolean; /** * Requirements @@ -296,13 +301,12 @@ export default class MysteryEncounter implements IMysteryEncounter { /** * Checks if the current scene state meets the requirements for the {@linkcode MysteryEncounter} to spawn * This is used to filter the pool of encounters down to only the ones with all requirements met - * @param scene * @returns */ - meetsRequirements(scene: BattleScene): boolean { - const sceneReq = !this.requirements.some(requirement => !requirement.meetsRequirement(scene)); - const secReqs = this.meetsSecondaryRequirementAndSecondaryPokemonSelected(scene); // secondary is checked first to handle cases of primary overlapping with secondary - const priReqs = this.meetsPrimaryRequirementAndPrimaryPokemonSelected(scene); + meetsRequirements(): boolean { + const sceneReq = !this.requirements.some(requirement => !requirement.meetsRequirement()); + const secReqs = this.meetsSecondaryRequirementAndSecondaryPokemonSelected(); // secondary is checked first to handle cases of primary overlapping with secondary + const priReqs = this.meetsPrimaryRequirementAndPrimaryPokemonSelected(); return sceneReq && secReqs && priReqs; } @@ -310,11 +314,10 @@ export default class MysteryEncounter implements IMysteryEncounter { /** * Checks if a specific player pokemon meets all given primary EncounterPokemonRequirements * Used automatically as part of {@linkcode meetsRequirements}, but can also be used to manually check certain Pokemon where needed - * @param scene * @param pokemon */ - pokemonMeetsPrimaryRequirements(scene: BattleScene, pokemon: Pokemon): boolean { - return !this.primaryPokemonRequirements.some(req => !req.queryParty(scene.getPlayerParty()).map(p => p.id).includes(pokemon.id)); + pokemonMeetsPrimaryRequirements(pokemon: Pokemon): boolean { + return !this.primaryPokemonRequirements.some(req => !req.queryParty(globalScene.getPlayerParty()).map(p => p.id).includes(pokemon.id)); } /** @@ -322,22 +325,21 @@ export default class MysteryEncounter implements IMysteryEncounter { * AND there is a valid Pokemon assigned to {@linkcode primaryPokemon}. * If both {@linkcode primaryPokemonRequirements} and {@linkcode secondaryPokemonRequirements} are defined, * can cause scenarios where there are not enough Pokemon that are sufficient for all requirements. - * @param scene */ - private meetsPrimaryRequirementAndPrimaryPokemonSelected(scene: BattleScene): boolean { + private meetsPrimaryRequirementAndPrimaryPokemonSelected(): boolean { if (!this.primaryPokemonRequirements || this.primaryPokemonRequirements.length === 0) { - const activeMon = scene.getPlayerParty().filter(p => p.isActive(true)); + const activeMon = globalScene.getPlayerParty().filter(p => p.isActive(true)); if (activeMon.length > 0) { this.primaryPokemon = activeMon[0]; } else { - this.primaryPokemon = scene.getPlayerParty().filter(p => p.isAllowedInBattle())[0]; + this.primaryPokemon = globalScene.getPlayerParty().filter(p => p.isAllowedInBattle())[0]; } return true; } - let qualified: PlayerPokemon[] = scene.getPlayerParty(); + let qualified: PlayerPokemon[] = globalScene.getPlayerParty(); for (const req of this.primaryPokemonRequirements) { - if (req.meetsRequirement(scene)) { - qualified = qualified.filter(pkmn => req.queryParty(scene.getPlayerParty()).includes(pkmn)); + if (req.meetsRequirement()) { + qualified = qualified.filter(pkmn => req.queryParty(globalScene.getPlayerParty()).includes(pkmn)); } else { this.primaryPokemon = undefined; return false; @@ -386,18 +388,17 @@ export default class MysteryEncounter implements IMysteryEncounter { * AND there is a valid Pokemon assigned to {@linkcode secondaryPokemon} (if applicable). * If both {@linkcode primaryPokemonRequirements} and {@linkcode secondaryPokemonRequirements} are defined, * can cause scenarios where there are not enough Pokemon that are sufficient for all requirements. - * @param scene */ - private meetsSecondaryRequirementAndSecondaryPokemonSelected(scene: BattleScene): boolean { + private meetsSecondaryRequirementAndSecondaryPokemonSelected(): boolean { if (!this.secondaryPokemonRequirements || this.secondaryPokemonRequirements.length === 0) { this.secondaryPokemon = []; return true; } - let qualified: PlayerPokemon[] = scene.getPlayerParty(); + let qualified: PlayerPokemon[] = globalScene.getPlayerParty(); for (const req of this.secondaryPokemonRequirements) { - if (req.meetsRequirement(scene)) { - qualified = qualified.filter(pkmn => req.queryParty(scene.getPlayerParty()).includes(pkmn)); + if (req.meetsRequirement()) { + qualified = qualified.filter(pkmn => req.queryParty(globalScene.getPlayerParty()).includes(pkmn)); } else { this.secondaryPokemon = []; return false; @@ -409,10 +410,9 @@ export default class MysteryEncounter implements IMysteryEncounter { /** * Initializes encounter intro sprites based on the sprite configs defined in spriteConfigs - * @param scene */ - initIntroVisuals(scene: BattleScene): void { - this.introVisuals = new MysteryEncounterIntroVisuals(scene, this); + initIntroVisuals(): void { + this.introVisuals = new MysteryEncounterIntroVisuals(this); } /** @@ -420,11 +420,11 @@ export default class MysteryEncounter implements IMysteryEncounter { * Will use the first support pokemon in list * For multiple support pokemon in the dialogue token, it will have to be overridden. */ - populateDialogueTokensFromRequirements(scene: BattleScene): void { - this.meetsRequirements(scene); + populateDialogueTokensFromRequirements(): void { + this.meetsRequirements(); if (this.requirements?.length > 0) { for (const req of this.requirements) { - const dialogueToken = req.getDialogueToken(scene); + const dialogueToken = req.getDialogueToken(); if (dialogueToken?.length === 2) { this.setDialogueToken(...dialogueToken); } @@ -434,7 +434,7 @@ export default class MysteryEncounter implements IMysteryEncounter { this.setDialogueToken("primaryName", this.primaryPokemon.getNameToRender()); for (const req of this.primaryPokemonRequirements) { if (!req.invertQuery) { - const value = req.getDialogueToken(scene, this.primaryPokemon); + const value = req.getDialogueToken(this.primaryPokemon); if (value?.length === 2) { this.setDialogueToken("primary" + capitalizeFirstLetter(value[0]), value[1]); } @@ -445,7 +445,7 @@ export default class MysteryEncounter implements IMysteryEncounter { this.setDialogueToken("secondaryName", this.secondaryPokemon[0].getNameToRender()); for (const req of this.secondaryPokemonRequirements) { if (!req.invertQuery) { - const value = req.getDialogueToken(scene, this.secondaryPokemon[0]); + const value = req.getDialogueToken(this.secondaryPokemon[0]); if (value?.length === 2) { this.setDialogueToken("primary" + capitalizeFirstLetter(value[0]), value[1]); } @@ -457,11 +457,11 @@ export default class MysteryEncounter implements IMysteryEncounter { // Dialogue tokens for options for (let i = 0; i < this.options.length; i++) { const opt = this.options[i]; - opt.meetsRequirements(scene); + opt.meetsRequirements(); const j = i + 1; if (opt.requirements.length > 0) { for (const req of opt.requirements) { - const dialogueToken = req.getDialogueToken(scene); + const dialogueToken = req.getDialogueToken(); if (dialogueToken?.length === 2) { this.setDialogueToken("option" + j + capitalizeFirstLetter(dialogueToken[0]), dialogueToken[1]); } @@ -471,7 +471,7 @@ export default class MysteryEncounter implements IMysteryEncounter { this.setDialogueToken("option" + j + "PrimaryName", opt.primaryPokemon.getNameToRender()); for (const req of opt.primaryPokemonRequirements) { if (!req.invertQuery) { - const value = req.getDialogueToken(scene, opt.primaryPokemon); + const value = req.getDialogueToken(opt.primaryPokemon); if (value?.length === 2) { this.setDialogueToken("option" + j + "Primary" + capitalizeFirstLetter(value[0]), value[1]); } @@ -482,7 +482,7 @@ export default class MysteryEncounter implements IMysteryEncounter { this.setDialogueToken("option" + j + "SecondaryName", opt.secondaryPokemon[0].getNameToRender()); for (const req of opt.secondaryPokemonRequirements) { if (!req.invertQuery) { - const value = req.getDialogueToken(scene, opt.secondaryPokemon[0]); + const value = req.getDialogueToken(opt.secondaryPokemon[0]); if (value?.length === 2) { this.setDialogueToken("option" + j + "Secondary" + capitalizeFirstLetter(value[0]), value[1]); } @@ -518,10 +518,9 @@ export default class MysteryEncounter implements IMysteryEncounter { /** * Maintains seed offset for RNG consistency * Increments if the same {@linkcode MysteryEncounter} has multiple option select cycles - * @param scene */ - updateSeedOffset(scene: BattleScene) { - const currentOffset = this.seedOffset ?? scene.currentBattle.waveIndex * 1000; + updateSeedOffset() { + const currentOffset = this.seedOffset ?? globalScene.currentBattle.waveIndex * 1000; this.seedOffset = currentOffset + 512; } } @@ -858,7 +857,7 @@ export class MysteryEncounterBuilder implements Partial { * @param doEncounterRewards Synchronous callback function to perform during rewards phase of the encounter * @returns */ - withRewards(doEncounterRewards: (scene: BattleScene) => boolean): this & Required> { + withRewards(doEncounterRewards: () => boolean): this & Required> { return Object.assign(this, { doEncounterRewards: doEncounterRewards }); } @@ -872,7 +871,7 @@ export class MysteryEncounterBuilder implements Partial { * @param doEncounterExp Synchronous callback function to perform during rewards phase of the encounter * @returns */ - withExp(doEncounterExp: (scene: BattleScene) => boolean): this & Required> { + withExp(doEncounterExp: () => boolean): this & Required> { return Object.assign(this, { doEncounterExp: doEncounterExp }); } @@ -883,7 +882,7 @@ export class MysteryEncounterBuilder implements Partial { * @param onInit Synchronous callback function to perform as soon as the encounter is selected for the next phase * @returns */ - withOnInit(onInit: (scene: BattleScene) => boolean): this & Required> { + withOnInit(onInit: () => boolean): this & Required> { return Object.assign(this, { onInit }); } @@ -893,7 +892,7 @@ export class MysteryEncounterBuilder implements Partial { * @param onVisualsStart Synchronous callback function to perform as soon as the enemy field finishes sliding in * @returns */ - withOnVisualsStart(onVisualsStart: (scene: BattleScene) => boolean): this & Required> { + withOnVisualsStart(onVisualsStart: () => boolean): this & Required> { return Object.assign(this, { onVisualsStart: onVisualsStart }); } diff --git a/src/data/mystery-encounters/mystery-encounters.ts b/src/data/mystery-encounters/mystery-encounters.ts index 8c1c3bf6de4..3219640e4e5 100644 --- a/src/data/mystery-encounters/mystery-encounters.ts +++ b/src/data/mystery-encounters/mystery-encounters.ts @@ -10,7 +10,7 @@ import { MysteriousChestEncounter } from "./encounters/mysterious-chest-encounte import { ShadyVitaminDealerEncounter } from "./encounters/shady-vitamin-dealer-encounter"; import { SlumberingSnorlaxEncounter } from "./encounters/slumbering-snorlax-encounter"; import { TrainingSessionEncounter } from "./encounters/training-session-encounter"; -import MysteryEncounter from "./mystery-encounter"; +import type MysteryEncounter from "./mystery-encounter"; import { SafariZoneEncounter } from "#app/data/mystery-encounters/encounters/safari-zone-encounter"; import { FieryFalloutEncounter } from "#app/data/mystery-encounters/encounters/fiery-fallout-encounter"; import { TheStrongStuffEncounter } from "#app/data/mystery-encounters/encounters/the-strong-stuff-encounter"; @@ -177,7 +177,7 @@ export const allMysteryEncounters: { [encounterType: number]: MysteryEncounter } const extremeBiomeEncounters: MysteryEncounterType[] = []; const nonExtremeBiomeEncounters: MysteryEncounterType[] = [ - MysteryEncounterType.FIELD_TRIP, + // MysteryEncounterType.FIELD_TRIP, Disabled MysteryEncounterType.DANCING_LESSONS, // Is also in BADLANDS, DESERT, VOLCANO, WASTELAND, ABYSS ]; @@ -185,7 +185,7 @@ const humanTransitableBiomeEncounters: MysteryEncounterType[] = [ MysteryEncounterType.MYSTERIOUS_CHALLENGERS, MysteryEncounterType.SHADY_VITAMIN_DEALER, MysteryEncounterType.THE_POKEMON_SALESMAN, - MysteryEncounterType.AN_OFFER_YOU_CANT_REFUSE, + // MysteryEncounterType.AN_OFFER_YOU_CANT_REFUSE, Disabled MysteryEncounterType.THE_WINSTRATE_CHALLENGE, MysteryEncounterType.THE_EXPERT_POKEMON_BREEDER ]; diff --git a/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts b/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts index a2c08938fbe..3d454269204 100644 --- a/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts +++ b/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts @@ -1,8 +1,9 @@ -import BattleScene from "#app/battle-scene"; -import { Moves } from "#app/enums/moves"; -import { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; +import type { Moves } from "#app/enums/moves"; +import type { PlayerPokemon } from "#app/field/pokemon"; +import { PokemonMove } from "#app/field/pokemon"; import { isNullOrUndefined } from "#app/utils"; import { EncounterPokemonRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements"; +import { globalScene } from "#app/global-scene"; /** * {@linkcode CanLearnMoveRequirement} options @@ -38,8 +39,8 @@ export class CanLearnMoveRequirement extends EncounterPokemonRequirement { this.invertQuery = options.invertQuery ?? false; } - override meetsRequirement(scene: BattleScene): boolean { - const partyPokemon = scene.getPlayerParty().filter((pkm) => (this.includeFainted ? pkm.isAllowedInChallenge() : pkm.isAllowedInBattle())); + override meetsRequirement(): boolean { + const partyPokemon = globalScene.getPlayerParty().filter((pkm) => (this.includeFainted ? pkm.isAllowedInChallenge() : pkm.isAllowedInBattle())); if (isNullOrUndefined(partyPokemon) || this.requiredMoves?.length < 0) { return false; @@ -63,7 +64,7 @@ export class CanLearnMoveRequirement extends EncounterPokemonRequirement { } } - override getDialogueToken(_scene: BattleScene, _pokemon?: PlayerPokemon): [string, string] { + override getDialogueToken(__pokemon?: PlayerPokemon): [string, string] { return [ "requiredMoves", this.requiredMoves.map(m => new PokemonMove(m).getName()).join(", ") ]; } diff --git a/src/data/mystery-encounters/utils/encounter-dialogue-utils.ts b/src/data/mystery-encounters/utils/encounter-dialogue-utils.ts index acaa7c6244f..df9b6355017 100644 --- a/src/data/mystery-encounters/utils/encounter-dialogue-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-dialogue-utils.ts @@ -1,23 +1,24 @@ -import BattleScene from "#app/battle-scene"; -import { getTextWithColors, TextStyle } from "#app/ui/text"; +import { globalScene } from "#app/global-scene"; +import type { TextStyle } from "#app/ui/text"; +import { getTextWithColors } from "#app/ui/text"; import { UiTheme } from "#enums/ui-theme"; import { isNullOrUndefined } from "#app/utils"; import i18next from "i18next"; /** - * Will inject all relevant dialogue tokens that exist in the {@linkcode BattleScene.currentBattle.mysteryEncounter.dialogueTokens}, into i18n text. + * Will inject all relevant dialogue tokens that exist in the {@linkcode BattlegScene.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 */ -export function getEncounterText(scene: BattleScene, keyOrString?: string, primaryStyle?: TextStyle): string | null { +export function getEncounterText(keyOrString?: string, primaryStyle?: TextStyle): string | null { if (isNullOrUndefined(keyOrString)) { return null; } - const uiTheme = scene.uiTheme ?? UiTheme.DEFAULT; + const uiTheme = globalScene.uiTheme ?? UiTheme.DEFAULT; - let textString: string | null = getTextWithDialogueTokens(scene, keyOrString); + let textString: string | null = getTextWithDialogueTokens(keyOrString); // Can only color the text if a Primary Style is defined // primaryStyle is applied to all text that does not have its own specified style @@ -29,12 +30,12 @@ export function getEncounterText(scene: BattleScene, keyOrString?: string, prima } /** - * Helper function to inject {@linkcode BattleScene.currentBattle.mysteryEncounter.dialogueTokens} into a given content string + * Helper function to inject {@linkcode globalScene.currentBattle.mysteryEncounter.dialogueTokens} into a given content string * @param scene * @param keyOrString */ -function getTextWithDialogueTokens(scene: BattleScene, keyOrString: string): string | null { - const tokens = scene.currentBattle?.mysteryEncounter?.dialogueTokens; +function getTextWithDialogueTokens(keyOrString: string): string | null { + const tokens = globalScene.currentBattle?.mysteryEncounter?.dialogueTokens; if (i18next.exists(keyOrString, tokens)) { return i18next.t(keyOrString, tokens) as string; @@ -48,9 +49,9 @@ function getTextWithDialogueTokens(scene: BattleScene, keyOrString: string): str * @param scene * @param contentKey */ -export function queueEncounterMessage(scene: BattleScene, contentKey: string): void { - const text: string | null = getEncounterText(scene, contentKey); - scene.queueMessage(text ?? "", null, true); +export function queueEncounterMessage(contentKey: string): void { + const text: string | null = getEncounterText(contentKey); + globalScene.queueMessage(text ?? "", null, true); } /** @@ -62,10 +63,10 @@ export function queueEncounterMessage(scene: BattleScene, contentKey: string): v * @param callbackDelay * @param promptDelay */ -export function showEncounterText(scene: BattleScene, contentKey: string, delay: number | null = null, callbackDelay: number = 0, prompt: boolean = true, promptDelay: number | null = null): Promise { +export function showEncounterText(contentKey: string, delay: number | null = null, callbackDelay: number = 0, prompt: boolean = true, promptDelay: number | null = null): Promise { return new Promise(resolve => { - const text: string | null = getEncounterText(scene, contentKey); - scene.ui.showText(text ?? "", delay, () => resolve(), callbackDelay, prompt, promptDelay); + const text: string | null = getEncounterText(contentKey); + globalScene.ui.showText(text ?? "", delay, () => resolve(), callbackDelay, prompt, promptDelay); }); } @@ -77,10 +78,10 @@ export function showEncounterText(scene: BattleScene, contentKey: string, delay: * @param speakerContentKey * @param callbackDelay */ -export function showEncounterDialogue(scene: BattleScene, textContentKey: string, speakerContentKey: string, delay: number | null = null, callbackDelay: number = 0): Promise { +export function showEncounterDialogue(textContentKey: string, speakerContentKey: string, delay: number | null = null, callbackDelay: number = 0): Promise { return new Promise(resolve => { - const text: string | null = getEncounterText(scene, textContentKey); - const speaker: string | null = getEncounterText(scene, speakerContentKey); - scene.ui.showDialogue(text ?? "", speaker ?? "", delay, () => resolve(), callbackDelay); + const text: string | null = getEncounterText(textContentKey); + const speaker: string | null = getEncounterText(speakerContentKey); + globalScene.ui.showDialogue(text ?? "", speaker ?? "", delay, () => resolve(), callbackDelay); }); } diff --git a/src/data/mystery-encounters/utils/encounter-phase-utils.ts b/src/data/mystery-encounters/utils/encounter-phase-utils.ts index d43bce0ace5..1f740763148 100644 --- a/src/data/mystery-encounters/utils/encounter-phase-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-phase-utils.ts @@ -1,34 +1,40 @@ -import Battle, { BattlerIndex, BattleType } from "#app/battle"; +import type Battle from "#app/battle"; +import { BattlerIndex, BattleType } from "#app/battle"; import { biomeLinks, BiomePoolTier } from "#app/data/balance/biomes"; -import MysteryEncounterOption from "#app/data/mystery-encounters/mystery-encounter-option"; +import type MysteryEncounterOption from "#app/data/mystery-encounters/mystery-encounter-option"; import { AVERAGE_ENCOUNTERS_PER_RUN_TARGET, WEIGHT_INCREMENT_ON_SPAWN_MISS } from "#app/data/mystery-encounters/mystery-encounters"; import { showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; -import Pokemon, { AiType, FieldPosition, PlayerPokemon, PokemonMove, PokemonSummonData } from "#app/field/pokemon"; -import { CustomModifierSettings, ModifierPoolType, ModifierType, ModifierTypeGenerator, ModifierTypeOption, modifierTypes, regenerateModifierPoolThresholds } from "#app/modifier/modifier-type"; +import type { AiType, PlayerPokemon } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; +import { EnemyPokemon, FieldPosition, PokemonMove, PokemonSummonData } from "#app/field/pokemon"; +import type { CustomModifierSettings, ModifierType } from "#app/modifier/modifier-type"; +import { getPartyLuckValue, ModifierPoolType, ModifierTypeGenerator, ModifierTypeOption, modifierTypes, regenerateModifierPoolThresholds } from "#app/modifier/modifier-type"; import { MysteryEncounterBattlePhase, MysteryEncounterBattleStartCleanupPhase, MysteryEncounterPhase, MysteryEncounterRewardsPhase } from "#app/phases/mystery-encounter-phases"; -import PokemonData from "#app/system/pokemon-data"; -import { OptionSelectConfig, OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; -import { PartyOption, PartyUiMode, PokemonSelectFilter } from "#app/ui/party-ui-handler"; +import type PokemonData from "#app/system/pokemon-data"; +import type { OptionSelectConfig, OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; +import type { PartyOption, PokemonSelectFilter } from "#app/ui/party-ui-handler"; +import { PartyUiMode } from "#app/ui/party-ui-handler"; import { Mode } from "#app/ui/ui"; import * as Utils from "#app/utils"; -import { isNullOrUndefined } from "#app/utils"; -import { BattlerTagType } from "#enums/battler-tag-type"; +import { isNullOrUndefined, randSeedInt, randSeedItem } from "#app/utils"; +import type { BattlerTagType } from "#enums/battler-tag-type"; import { Biome } from "#enums/biome"; -import { TrainerType } from "#enums/trainer-type"; +import type { TrainerType } from "#enums/trainer-type"; import i18next from "i18next"; -import BattleScene from "#app/battle-scene"; import Trainer, { TrainerVariant } from "#app/field/trainer"; -import { Gender } from "#app/data/gender"; -import { Nature } from "#enums/nature"; -import { Moves } from "#enums/moves"; +import type { Gender } from "#app/data/gender"; +import type { Nature } from "#enums/nature"; +import type { Moves } from "#enums/moves"; import { initMoveAnim, loadMoveAnimAssets } from "#app/data/battle-anims"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; import { Status } from "#app/data/status-effect"; -import { TrainerConfig, trainerConfigs, TrainerSlot } from "#app/data/trainer-config"; -import PokemonSpecies from "#app/data/pokemon-species"; -import { Egg, IEggOptions } from "#app/data/egg"; -import { CustomPokemonData } from "#app/data/custom-pokemon-data"; -import HeldModifierConfig from "#app/interfaces/held-modifier-config"; +import type { TrainerConfig } from "#app/data/trainer-config"; +import { trainerConfigs, TrainerSlot } from "#app/data/trainer-config"; +import type PokemonSpecies from "#app/data/pokemon-species"; +import type { IEggOptions } from "#app/data/egg"; +import { Egg } from "#app/data/egg"; +import type { CustomPokemonData } from "#app/data/custom-pokemon-data"; +import type HeldModifierConfig from "#app/interfaces/held-modifier-config"; import { MovePhase } from "#app/phases/move-phase"; import { EggLapsePhase } from "#app/phases/egg-lapse-phase"; import { TrainerVictoryPhase } from "#app/phases/trainer-victory-phase"; @@ -36,34 +42,39 @@ import { BattleEndPhase } from "#app/phases/battle-end-phase"; import { GameOverPhase } from "#app/phases/game-over-phase"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import { PartyExpPhase } from "#app/phases/party-exp-phase"; -import { Variant } from "#app/data/variant"; +import type { Variant } from "#app/data/variant"; import { StatusEffect } from "#enums/status-effect"; +import { globalScene } from "#app/global-scene"; +import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { Type } from "#app/enums/type"; +import { getNatureName } from "#app/data/nature"; +import { getPokemonNameWithAffix } from "#app/messages"; /** * Animates exclamation sprite over trainer's head at start of encounter * @param scene */ -export function doTrainerExclamation(scene: BattleScene) { - const exclamationSprite = scene.add.sprite(0, 0, "encounter_exclaim"); +export function doTrainerExclamation() { + const exclamationSprite = globalScene.add.sprite(0, 0, "encounter_exclaim"); exclamationSprite.setName("exclamation"); - scene.field.add(exclamationSprite); - scene.field.moveTo(exclamationSprite, scene.field.getAll().length - 1); + globalScene.field.add(exclamationSprite); + globalScene.field.moveTo(exclamationSprite, globalScene.field.getAll().length - 1); exclamationSprite.setVisible(true); exclamationSprite.setPosition(110, 68); - scene.tweens.add({ + globalScene.tweens.add({ targets: exclamationSprite, y: "-=25", ease: "Cubic.easeOut", duration: 300, yoyo: true, onComplete: () => { - scene.time.delayedCall(800, () => { - scene.field.remove(exclamationSprite, true); + globalScene.time.delayedCall(800, () => { + globalScene.field.remove(exclamationSprite, true); }); } }); - scene.playSound("battle_anims/GEN8- Exclaim", { volume: 0.7 }); + globalScene.playSound("battle_anims/GEN8- Exclaim", { volume: 0.7 }); } export interface EnemyPokemonConfig { @@ -90,6 +101,7 @@ export interface EnemyPokemonConfig { modifierConfigs?: HeldModifierConfig[]; tags?: BattlerTagType[]; dataSource?: PokemonData; + tera?: Type; aiType?: AiType; } @@ -114,14 +126,13 @@ export interface EnemyPartyConfig { * Generates an enemy party for a mystery encounter battle * This will override and replace any standard encounter generation logic * Useful for tailoring specific battles to mystery encounters - * @param scene Battle Scene * @param partyConfig Can pass various customizable attributes for the enemy party, see EnemyPartyConfig */ -export async function initBattleWithEnemyConfig(scene: BattleScene, partyConfig: EnemyPartyConfig): Promise { +export async function initBattleWithEnemyConfig(partyConfig: EnemyPartyConfig): Promise { const loaded: boolean = false; const loadEnemyAssets: Promise[] = []; - const battle: Battle = scene.currentBattle; + const battle: Battle = globalScene.currentBattle; let doubleBattle: boolean = partyConfig?.doubleBattle ?? false; @@ -130,10 +141,10 @@ export async function initBattleWithEnemyConfig(scene: BattleScene, partyConfig: const partyTrainerConfig = partyConfig?.trainerConfig; let trainerConfig: TrainerConfig; if (!isNullOrUndefined(trainerType) || partyTrainerConfig) { - scene.currentBattle.mysteryEncounter!.encounterMode = MysteryEncounterMode.TRAINER_BATTLE; - if (scene.currentBattle.trainer) { - scene.currentBattle.trainer.setVisible(false); - scene.currentBattle.trainer.destroy(); + globalScene.currentBattle.mysteryEncounter!.encounterMode = MysteryEncounterMode.TRAINER_BATTLE; + if (globalScene.currentBattle.trainer) { + globalScene.currentBattle.trainer.setVisible(false); + globalScene.currentBattle.trainer.destroy(); } trainerConfig = partyTrainerConfig ? partyTrainerConfig : trainerConfigs[trainerType!]; @@ -141,23 +152,23 @@ export async function initBattleWithEnemyConfig(scene: BattleScene, partyConfig: const doubleTrainer = trainerConfig.doubleOnly || (trainerConfig.hasDouble && !!partyConfig.doubleBattle); doubleBattle = doubleTrainer; const trainerFemale = isNullOrUndefined(partyConfig.female) ? !!(Utils.randSeedInt(2)) : partyConfig.female; - const newTrainer = new Trainer(scene, trainerConfig.trainerType, doubleTrainer ? TrainerVariant.DOUBLE : trainerFemale ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT, undefined, undefined, undefined, trainerConfig); + const newTrainer = new Trainer(trainerConfig.trainerType, doubleTrainer ? TrainerVariant.DOUBLE : trainerFemale ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT, undefined, undefined, undefined, trainerConfig); newTrainer.x += 300; newTrainer.setVisible(false); - scene.field.add(newTrainer); - scene.currentBattle.trainer = newTrainer; + globalScene.field.add(newTrainer); + globalScene.currentBattle.trainer = newTrainer; loadEnemyAssets.push(newTrainer.loadAssets().then(() => newTrainer.initSprite())); - battle.enemyLevels = scene.currentBattle.trainer.getPartyLevels(scene.currentBattle.waveIndex); + battle.enemyLevels = globalScene.currentBattle.trainer.getPartyLevels(globalScene.currentBattle.waveIndex); } else { // Wild - scene.currentBattle.mysteryEncounter!.encounterMode = MysteryEncounterMode.WILD_BATTLE; + globalScene.currentBattle.mysteryEncounter!.encounterMode = MysteryEncounterMode.WILD_BATTLE; const numEnemies = partyConfig?.pokemonConfigs && partyConfig.pokemonConfigs.length > 0 ? partyConfig?.pokemonConfigs?.length : doubleBattle ? 2 : 1; - battle.enemyLevels = new Array(numEnemies).fill(null).map(() => scene.currentBattle.getLevelForWave()); + battle.enemyLevels = new Array(numEnemies).fill(null).map(() => globalScene.currentBattle.getLevelForWave()); } - scene.getEnemyParty().forEach(enemyPokemon => { - scene.field.remove(enemyPokemon, true); + globalScene.getEnemyParty().forEach(enemyPokemon => { + enemyPokemon.leaveField(true, true, true); }); battle.enemyParty = []; battle.double = doubleBattle; @@ -168,7 +179,7 @@ export async function initBattleWithEnemyConfig(scene: BattleScene, partyConfig: // levelAdditiveModifier value of 0.5 will halve the modifier scaling, 2 will double it, etc. // Leaving null/undefined will disable level scaling const mult: number = !isNullOrUndefined(partyConfig.levelAdditiveModifier) ? partyConfig.levelAdditiveModifier : 0; - const additive = Math.max(Math.round((scene.currentBattle.waveIndex / 10) * mult), 0); + const additive = Math.max(Math.round((globalScene.currentBattle.waveIndex / 10) * mult), 0); battle.enemyLevels = battle.enemyLevels.map(level => level + additive); battle.enemyLevels.forEach((level, e) => { @@ -184,7 +195,7 @@ export async function initBattleWithEnemyConfig(scene: BattleScene, partyConfig: dataSource = config.dataSource; enemySpecies = config.species; isBoss = config.isBoss; - battle.enemyParty[e] = scene.addEnemyPokemon(enemySpecies, level, TrainerSlot.TRAINER, isBoss, false, dataSource); + battle.enemyParty[e] = globalScene.addEnemyPokemon(enemySpecies, level, TrainerSlot.TRAINER, isBoss, false, dataSource); } else { battle.enemyParty[e] = battle.trainer.genPartyMember(e); } @@ -196,17 +207,17 @@ export async function initBattleWithEnemyConfig(scene: BattleScene, partyConfig: enemySpecies = config.species; isBoss = config.isBoss; if (isBoss) { - scene.currentBattle.mysteryEncounter!.encounterMode = MysteryEncounterMode.BOSS_BATTLE; + globalScene.currentBattle.mysteryEncounter!.encounterMode = MysteryEncounterMode.BOSS_BATTLE; } } else { - enemySpecies = scene.randomSpecies(battle.waveIndex, level, true); + enemySpecies = globalScene.randomSpecies(battle.waveIndex, level, true); } - battle.enemyParty[e] = scene.addEnemyPokemon(enemySpecies, level, TrainerSlot.NONE, isBoss, false, dataSource); + battle.enemyParty[e] = globalScene.addEnemyPokemon(enemySpecies, level, TrainerSlot.NONE, isBoss, false, dataSource); } } - const enemyPokemon = scene.getEnemyParty()[e]; + const enemyPokemon = globalScene.getEnemyParty()[e]; // Make sure basic data is clean enemyPokemon.hp = enemyPokemon.getMaxHp(); @@ -219,7 +230,7 @@ export async function initBattleWithEnemyConfig(scene: BattleScene, partyConfig: } if (!loaded && isNullOrUndefined(partyConfig.countAsSeen) || partyConfig.countAsSeen) { - scene.gameData.setPokemonSeen(enemyPokemon, true, !!(trainerType || trainerConfig)); + globalScene.gameData.setPokemonSeen(enemyPokemon, true, !!(trainerType || trainerConfig)); } if (partyConfig?.pokemonConfigs && e < partyConfig.pokemonConfigs.length) { @@ -257,7 +268,7 @@ export async function initBattleWithEnemyConfig(scene: BattleScene, partyConfig: // Set Boss if (config.isBoss) { - let segments = !isNullOrUndefined(config.bossSegments) ? config.bossSegments! : scene.getEncounterBossSegments(scene.currentBattle.waveIndex, level, enemySpecies, true); + let segments = !isNullOrUndefined(config.bossSegments) ? config.bossSegments! : globalScene.getEncounterBossSegments(globalScene.currentBattle.waveIndex, level, enemySpecies, true); if (!isNullOrUndefined(config.bossSegmentModifier)) { segments += config.bossSegmentModifier; } @@ -322,6 +333,14 @@ export async function initBattleWithEnemyConfig(scene: BattleScene, partyConfig: tags.forEach(tag => enemyPokemon.addTag(tag)); } + // Set tera + if (config.tera && config.tera !== Type.UNKNOWN) { + enemyPokemon.teraType = config.tera; + if (battle.trainer) { + battle.trainer.config.setInstantTera(e); + } + } + // mysteryEncounterBattleEffects will only be used IFF MYSTERY_ENCOUNTER_POST_SUMMON tag is applied if (config.mysteryEncounterBattleEffects) { enemyPokemon.mysteryEncounterBattleEffects = config.mysteryEncounterBattleEffects; @@ -340,10 +359,34 @@ export async function initBattleWithEnemyConfig(scene: BattleScene, partyConfig: loadEnemyAssets.push(enemyPokemon.loadAssets()); - console.log(`Pokemon: ${enemyPokemon.name}`, `Species ID: ${enemyPokemon.species.speciesId}`, `Stats: ${enemyPokemon.stats}`, `Ability: ${enemyPokemon.getAbility().name}`, `Passive Ability: ${enemyPokemon.getPassiveAbility().name}`); + const stats: string[] = [ + `HP: ${enemyPokemon.stats[0]} (${enemyPokemon.ivs[0]})`, + ` Atk: ${enemyPokemon.stats[1]} (${enemyPokemon.ivs[1]})`, + ` Def: ${enemyPokemon.stats[2]} (${enemyPokemon.ivs[2]})`, + ` Spatk: ${enemyPokemon.stats[3]} (${enemyPokemon.ivs[3]})`, + ` Spdef: ${enemyPokemon.stats[4]} (${enemyPokemon.ivs[4]})`, + ` Spd: ${enemyPokemon.stats[5]} (${enemyPokemon.ivs[5]})`, + ]; + const moveset: string[] = []; + enemyPokemon.getMoveset().forEach((move) => { + moveset.push(move!.getName()); // TODO: remove `!` after moveset-null removal PR + }); + + console.log( + `Pokemon: ${getPokemonNameWithAffix(enemyPokemon)}`, + `| Species ID: ${enemyPokemon.species.speciesId}`, + `| Nature: ${getNatureName(enemyPokemon.nature, true, true, true)}`, + ); + console.log(`Stats (IVs): ${stats}`); + console.log( + `Ability: ${enemyPokemon.getAbility().name}`, + `| Passive Ability${enemyPokemon.hasPassive() ? "" : " (inactive)"}: ${enemyPokemon.getPassiveAbility().name}`, + `${enemyPokemon.isBoss() ? `| Boss Bars: ${enemyPokemon.bossSegments}` : ""}` + ); + console.log("Moveset:", moveset); }); - scene.pushPhase(new MysteryEncounterBattlePhase(scene, partyConfig.disableSwitch)); + globalScene.pushPhase(new MysteryEncounterBattlePhase(partyConfig.disableSwitch)); await Promise.all(loadEnemyAssets); battle.enemyParty.forEach((enemyPokemon_2, e_1) => { @@ -357,11 +400,11 @@ export async function initBattleWithEnemyConfig(scene: BattleScene, partyConfig: } }); if (!loaded) { - regenerateModifierPoolThresholds(scene.getEnemyField(), battle.battleType === BattleType.TRAINER ? ModifierPoolType.TRAINER : ModifierPoolType.WILD); + regenerateModifierPoolThresholds(globalScene.getEnemyField(), battle.battleType === BattleType.TRAINER ? ModifierPoolType.TRAINER : ModifierPoolType.WILD); const customModifierTypes = partyConfig?.pokemonConfigs ?.filter(config => config?.modifierConfigs) .map(config => config.modifierConfigs!); - scene.generateEnemyModifiers(customModifierTypes); + globalScene.generateEnemyModifiers(customModifierTypes); } } @@ -370,45 +413,42 @@ export async function initBattleWithEnemyConfig(scene: BattleScene, partyConfig: * See: [startOfBattleEffects](IMysteryEncounter.startOfBattleEffects) for more details * * This promise does not need to be awaited on if called in an encounter onInit (will just load lazily) - * @param scene * @param moves */ -export function loadCustomMovesForEncounter(scene: BattleScene, moves: Moves | Moves[]) { +export function loadCustomMovesForEncounter(moves: Moves | Moves[]) { moves = Array.isArray(moves) ? moves : [ moves ]; - return Promise.all(moves.map(move => initMoveAnim(scene, move))) - .then(() => loadMoveAnimAssets(scene, moves)); + return Promise.all(moves.map(move => initMoveAnim(move))) + .then(() => loadMoveAnimAssets(moves)); } /** * Will update player money, and animate change (sound optional) - * @param scene * @param changeValue * @param playSound * @param showMessage */ -export function updatePlayerMoney(scene: BattleScene, changeValue: number, playSound: boolean = true, showMessage: boolean = true) { - scene.money = Math.min(Math.max(scene.money + changeValue, 0), Number.MAX_SAFE_INTEGER); - scene.updateMoneyText(); - scene.animateMoneyChanged(false); +export function updatePlayerMoney(changeValue: number, playSound: boolean = true, showMessage: boolean = true) { + globalScene.money = Math.min(Math.max(globalScene.money + changeValue, 0), Number.MAX_SAFE_INTEGER); + globalScene.updateMoneyText(); + globalScene.animateMoneyChanged(false); if (playSound) { - scene.playSound("se/buy"); + globalScene.playSound("se/buy"); } if (showMessage) { if (changeValue < 0) { - scene.queueMessage(i18next.t("mysteryEncounterMessages:paid_money", { amount: -changeValue }), null, true); + globalScene.queueMessage(i18next.t("mysteryEncounterMessages:paid_money", { amount: -changeValue }), null, true); } else { - scene.queueMessage(i18next.t("mysteryEncounterMessages:receive_money", { amount: changeValue }), null, true); + globalScene.queueMessage(i18next.t("mysteryEncounterMessages:receive_money", { amount: changeValue }), null, true); } } } /** * Converts modifier bullshit to an actual item - * @param scene Battle Scene * @param modifier * @param pregenArgs Can specify BerryType for berries, TM for TMs, AttackBoostType for item, etc. */ -export function generateModifierType(scene: BattleScene, modifier: () => ModifierType, pregenArgs?: any[]): ModifierType | null { +export function generateModifierType(modifier: () => ModifierType, pregenArgs?: any[]): ModifierType | null { const modifierId = Object.keys(modifierTypes).find(k => modifierTypes[k] === modifier); if (!modifierId) { return null; @@ -419,19 +459,18 @@ export function generateModifierType(scene: BattleScene, modifier: () => Modifie // Populates item id and tier (order matters) result = result .withIdFromFunc(modifierTypes[modifierId]) - .withTierFromPool(ModifierPoolType.PLAYER, scene.getPlayerParty()); + .withTierFromPool(ModifierPoolType.PLAYER, globalScene.getPlayerParty()); - return result instanceof ModifierTypeGenerator ? result.generateType(scene.getPlayerParty(), pregenArgs) : result; + return result instanceof ModifierTypeGenerator ? result.generateType(globalScene.getPlayerParty(), pregenArgs) : result; } /** * Converts modifier bullshit to an actual item - * @param scene - Battle Scene * @param modifier * @param pregenArgs - can specify BerryType for berries, TM for TMs, AttackBoostType for item, etc. */ -export function generateModifierTypeOption(scene: BattleScene, modifier: () => ModifierType, pregenArgs?: any[]): ModifierTypeOption | null { - const result = generateModifierType(scene, modifier, pregenArgs); +export function generateModifierTypeOption(modifier: () => ModifierType, pregenArgs?: any[]): ModifierTypeOption | null { + const result = generateModifierType(modifier, pregenArgs); if (result) { return new ModifierTypeOption(result, 0); } @@ -440,30 +479,29 @@ export function generateModifierTypeOption(scene: BattleScene, modifier: () => M /** * This function is intended for use inside onPreOptionPhase() of an encounter option - * @param scene * @param onPokemonSelected - Any logic that needs to be performed when Pokemon is chosen * If a second option needs to be selected, onPokemonSelected should return a OptionSelectItem[] object * @param onPokemonNotSelected - Any logic that needs to be performed if no Pokemon is chosen * @param selectablePokemonFilter */ -export function selectPokemonForOption(scene: BattleScene, onPokemonSelected: (pokemon: PlayerPokemon) => void | OptionSelectItem[], onPokemonNotSelected?: () => void, selectablePokemonFilter?: PokemonSelectFilter): Promise { +export function selectPokemonForOption(onPokemonSelected: (pokemon: PlayerPokemon) => void | OptionSelectItem[], onPokemonNotSelected?: () => void, selectablePokemonFilter?: PokemonSelectFilter): Promise { return new Promise(resolve => { - const modeToSetOnExit = scene.ui.getMode(); + const modeToSetOnExit = globalScene.ui.getMode(); // Open party screen to choose pokemon - scene.ui.setMode(Mode.PARTY, PartyUiMode.SELECT, -1, (slotIndex: number, option: PartyOption) => { - if (slotIndex < scene.getPlayerParty().length) { - scene.ui.setMode(modeToSetOnExit).then(() => { - const pokemon = scene.getPlayerParty()[slotIndex]; + globalScene.ui.setMode(Mode.PARTY, PartyUiMode.SELECT, -1, (slotIndex: number, option: PartyOption) => { + if (slotIndex < globalScene.getPlayerParty().length) { + globalScene.ui.setMode(modeToSetOnExit).then(() => { + const pokemon = globalScene.getPlayerParty()[slotIndex]; const secondaryOptions = onPokemonSelected(pokemon); if (!secondaryOptions) { - scene.currentBattle.mysteryEncounter!.setDialogueToken("selectedPokemon", pokemon.getNameToRender()); + globalScene.currentBattle.mysteryEncounter!.setDialogueToken("selectedPokemon", pokemon.getNameToRender()); resolve(true); return; } // There is a second option to choose after selecting the Pokemon - scene.ui.setMode(Mode.MESSAGE).then(() => { + globalScene.ui.setMode(Mode.MESSAGE).then(() => { const displayOptions = () => { // Always appends a cancel option to bottom of options const fullOptions = secondaryOptions.map(option => { @@ -471,7 +509,7 @@ export function selectPokemonForOption(scene: BattleScene, onPokemonSelected: (p const onSelect = option.handler; option.handler = () => { onSelect(); - scene.currentBattle.mysteryEncounter!.setDialogueToken("selectedPokemon", pokemon.getNameToRender()); + globalScene.currentBattle.mysteryEncounter!.setDialogueToken("selectedPokemon", pokemon.getNameToRender()); resolve(true); return true; }; @@ -479,13 +517,13 @@ export function selectPokemonForOption(scene: BattleScene, onPokemonSelected: (p }).concat({ label: i18next.t("menu:cancel"), handler: () => { - scene.ui.clearText(); - scene.ui.setMode(modeToSetOnExit); + globalScene.ui.clearText(); + globalScene.ui.setMode(modeToSetOnExit); resolve(false); return true; }, onHover: () => { - showEncounterText(scene, i18next.t("mysteryEncounterMessages:cancel_option"), 0, 0, false); + showEncounterText(i18next.t("mysteryEncounterMessages:cancel_option"), 0, 0, false); } }); @@ -500,19 +538,19 @@ export function selectPokemonForOption(scene: BattleScene, onPokemonSelected: (p if (fullOptions[0].onHover) { fullOptions[0].onHover(); } - scene.ui.setModeWithoutClear(Mode.OPTION_SELECT, config, null, true); + globalScene.ui.setModeWithoutClear(Mode.OPTION_SELECT, config, null, true); }; - const textPromptKey = scene.currentBattle.mysteryEncounter?.selectedOption?.dialogue?.secondOptionPrompt; + const textPromptKey = globalScene.currentBattle.mysteryEncounter?.selectedOption?.dialogue?.secondOptionPrompt; if (!textPromptKey) { displayOptions(); } else { - showEncounterText(scene, textPromptKey).then(() => displayOptions()); + showEncounterText(textPromptKey).then(() => displayOptions()); } }); }); } else { - scene.ui.setMode(modeToSetOnExit).then(() => { + globalScene.ui.setMode(modeToSetOnExit).then(() => { if (onPokemonNotSelected) { onPokemonNotSelected(); } @@ -529,33 +567,33 @@ interface PokemonAndOptionSelected { } /** - * This function is intended for use inside onPreOptionPhase() of an encounter option - * @param scene - * If a second option needs to be selected, onPokemonSelected should return a OptionSelectItem[] object + * This function is intended for use inside `onPreOptionPhase()` of an encounter option + * + * If a second option needs to be selected, `onPokemonSelected` should return a {@linkcode OptionSelectItem}`[]` object * @param options * @param optionSelectPromptKey * @param selectablePokemonFilter * @param onHoverOverCancelOption */ -export function selectOptionThenPokemon(scene: BattleScene, options: OptionSelectItem[], optionSelectPromptKey: string, selectablePokemonFilter?: PokemonSelectFilter, onHoverOverCancelOption?: () => void): Promise { +export function selectOptionThenPokemon(options: OptionSelectItem[], optionSelectPromptKey: string, selectablePokemonFilter?: PokemonSelectFilter, onHoverOverCancelOption?: () => void): Promise { return new Promise(resolve => { - const modeToSetOnExit = scene.ui.getMode(); + const modeToSetOnExit = globalScene.ui.getMode(); const displayOptions = (config: OptionSelectConfig) => { - scene.ui.setMode(Mode.MESSAGE).then(() => { + globalScene.ui.setMode(Mode.MESSAGE).then(() => { if (!optionSelectPromptKey) { // Do hover over the starting selection option if (fullOptions[0].onHover) { fullOptions[0].onHover(); } - scene.ui.setMode(Mode.OPTION_SELECT, config); + globalScene.ui.setMode(Mode.OPTION_SELECT, config); } else { - showEncounterText(scene, optionSelectPromptKey).then(() => { + showEncounterText(optionSelectPromptKey).then(() => { // Do hover over the starting selection option if (fullOptions[0].onHover) { fullOptions[0].onHover(); } - scene.ui.setMode(Mode.OPTION_SELECT, config); + globalScene.ui.setMode(Mode.OPTION_SELECT, config); }); } }); @@ -563,10 +601,10 @@ export function selectOptionThenPokemon(scene: BattleScene, options: OptionSelec const selectPokemonAfterOption = (selectedOptionIndex: number) => { // Open party screen to choose a Pokemon - scene.ui.setMode(Mode.PARTY, PartyUiMode.SELECT, -1, (slotIndex: number, option: PartyOption) => { - if (slotIndex < scene.getPlayerParty().length) { + globalScene.ui.setMode(Mode.PARTY, PartyUiMode.SELECT, -1, (slotIndex: number, option: PartyOption) => { + if (slotIndex < globalScene.getPlayerParty().length) { // Pokemon and option selected - scene.ui.setMode(modeToSetOnExit).then(() => { + globalScene.ui.setMode(modeToSetOnExit).then(() => { const result: PokemonAndOptionSelected = { selectedPokemonIndex: slotIndex, selectedOptionIndex: selectedOptionIndex }; resolve(result); }); @@ -590,8 +628,8 @@ export function selectOptionThenPokemon(scene: BattleScene, options: OptionSelec }).concat({ label: i18next.t("menu:cancel"), handler: () => { - scene.ui.clearText(); - scene.ui.setMode(modeToSetOnExit); + globalScene.ui.clearText(); + globalScene.ui.setMode(modeToSetOnExit); resolve(null); return true; }, @@ -599,7 +637,7 @@ export function selectOptionThenPokemon(scene: BattleScene, options: OptionSelec if (onHoverOverCancelOption) { onHoverOverCancelOption(); } - showEncounterText(scene, i18next.t("mysteryEncounterMessages:cancel_option"), 0, 0, false); + showEncounterText(i18next.t("mysteryEncounterMessages:cancel_option"), 0, 0, false); } }); @@ -617,27 +655,26 @@ export function selectOptionThenPokemon(scene: BattleScene, options: OptionSelec /** * Will initialize reward phases to follow the mystery encounter * Can have shop displayed or skipped - * @param scene - Battle Scene * @param customShopRewards - adds a shop phase with the specified rewards / reward tiers * @param eggRewards * @param preRewardsCallback - can execute an arbitrary callback before the new phases if necessary (useful for updating items/party/injecting new phases before {@linkcode MysteryEncounterRewardsPhase}) */ -export function setEncounterRewards(scene: BattleScene, customShopRewards?: CustomModifierSettings, eggRewards?: IEggOptions[], preRewardsCallback?: Function) { - scene.currentBattle.mysteryEncounter!.doEncounterRewards = (scene: BattleScene) => { +export function setEncounterRewards(customShopRewards?: CustomModifierSettings, eggRewards?: IEggOptions[], preRewardsCallback?: Function) { + globalScene.currentBattle.mysteryEncounter!.doEncounterRewards = () => { if (preRewardsCallback) { preRewardsCallback(); } if (customShopRewards) { - scene.unshiftPhase(new SelectModifierPhase(scene, 0, undefined, customShopRewards)); + globalScene.unshiftPhase(new SelectModifierPhase(0, undefined, customShopRewards)); } else { - scene.tryRemovePhase(p => p instanceof SelectModifierPhase); + globalScene.tryRemovePhase(p => p instanceof SelectModifierPhase); } if (eggRewards) { eggRewards.forEach(eggOptions => { const egg = new Egg(eggOptions); - egg.addEggToGameData(scene); + egg.addEggToGameData(); }); } @@ -648,10 +685,11 @@ export function setEncounterRewards(scene: BattleScene, customShopRewards?: Cust /** * Will initialize exp phases into the phase queue (these are in addition to any combat or other exp earned) * Exp Share and Exp Balance will still function as normal - * @param scene - Battle Scene * @param participantId - id/s of party pokemon that get full exp value. Other party members will receive Exp Share amounts * @param baseExpValue - gives exp equivalent to a pokemon of the wave index's level. + * * Guidelines: + * ```md * 36 - Sunkern (lowest in game) * 62-64 - regional starter base evos * 100 - Scyther @@ -660,14 +698,15 @@ export function setEncounterRewards(scene: BattleScene, customShopRewards?: Cust * 290 - trio legendaries * 340 - box legendaries * 608 - Blissey (highest in game) + * ``` * https://bulbapedia.bulbagarden.net/wiki/List_of_Pok%C3%A9mon_by_effort_value_yield_(Generation_IX) * @param useWaveIndex - set to false when directly passing the the full exp value instead of baseExpValue */ -export function setEncounterExp(scene: BattleScene, participantId: number | number[], baseExpValue: number, useWaveIndex: boolean = true) { +export function setEncounterExp(participantId: number | number[], baseExpValue: number, useWaveIndex: boolean = true) { const participantIds = Array.isArray(participantId) ? participantId : [ participantId ]; - scene.currentBattle.mysteryEncounter!.doEncounterExp = (scene: BattleScene) => { - scene.unshiftPhase(new PartyExpPhase(scene, baseExpValue, useWaveIndex, new Set(participantIds))); + globalScene.currentBattle.mysteryEncounter!.doEncounterExp = () => { + globalScene.unshiftPhase(new PartyExpPhase(baseExpValue, useWaveIndex, new Set(participantIds))); return true; }; @@ -686,60 +725,57 @@ export class OptionSelectSettings { /** * Can be used to queue a new series of Options to select for an Encounter * MUST be used only in onOptionPhase, will not work in onPreOptionPhase or onPostOptionPhase - * @param scene * @param optionSelectSettings */ -export function initSubsequentOptionSelect(scene: BattleScene, optionSelectSettings: OptionSelectSettings) { - scene.pushPhase(new MysteryEncounterPhase(scene, optionSelectSettings)); +export function initSubsequentOptionSelect(optionSelectSettings: OptionSelectSettings) { + globalScene.pushPhase(new MysteryEncounterPhase(optionSelectSettings)); } /** * Can be used to exit an encounter without any battles or followup * Will skip any shops and rewards, and queue the next encounter phase as normal - * @param scene * @param addHealPhase - when true, will add a shop phase to end of encounter with 0 rewards but healing items are available * @param encounterMode - Can set custom encounter mode if necessary (may be required for forcing Pokemon to return before next phase) */ -export function leaveEncounterWithoutBattle(scene: BattleScene, addHealPhase: boolean = false, encounterMode: MysteryEncounterMode = MysteryEncounterMode.NO_BATTLE) { - scene.currentBattle.mysteryEncounter!.encounterMode = encounterMode; - scene.clearPhaseQueue(); - scene.clearPhaseQueueSplice(); - handleMysteryEncounterVictory(scene, addHealPhase); +export function leaveEncounterWithoutBattle(addHealPhase: boolean = false, encounterMode: MysteryEncounterMode = MysteryEncounterMode.NO_BATTLE) { + globalScene.currentBattle.mysteryEncounter!.encounterMode = encounterMode; + globalScene.clearPhaseQueue(); + globalScene.clearPhaseQueueSplice(); + handleMysteryEncounterVictory(addHealPhase); } /** * - * @param scene * @param addHealPhase - Adds an empty shop phase to allow player to purchase healing items * @param doNotContinue - default `false`. If set to true, will not end the battle and continue to next wave */ -export function handleMysteryEncounterVictory(scene: BattleScene, addHealPhase: boolean = false, doNotContinue: boolean = false) { - const allowedPkm = scene.getPlayerParty().filter((pkm) => pkm.isAllowedInBattle()); +export function handleMysteryEncounterVictory(addHealPhase: boolean = false, doNotContinue: boolean = false) { + const allowedPkm = globalScene.getPlayerParty().filter((pkm) => pkm.isAllowedInBattle()); if (allowedPkm.length === 0) { - scene.clearPhaseQueue(); - scene.unshiftPhase(new GameOverPhase(scene)); + globalScene.clearPhaseQueue(); + globalScene.unshiftPhase(new GameOverPhase()); return; } // If in repeated encounter variant, do nothing // Variant must eventually be swapped in order to handle "true" end of the encounter - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; if (encounter.continuousEncounter || doNotContinue) { return; } else if (encounter.encounterMode === MysteryEncounterMode.NO_BATTLE) { - scene.pushPhase(new MysteryEncounterRewardsPhase(scene, addHealPhase)); - scene.pushPhase(new EggLapsePhase(scene)); - } else if (!scene.getEnemyParty().find(p => encounter.encounterMode !== MysteryEncounterMode.TRAINER_BATTLE ? p.isOnField() : !p?.isFainted(true))) { - scene.pushPhase(new BattleEndPhase(scene, true)); + globalScene.pushPhase(new MysteryEncounterRewardsPhase(addHealPhase)); + globalScene.pushPhase(new EggLapsePhase()); + } else if (!globalScene.getEnemyParty().find(p => encounter.encounterMode !== MysteryEncounterMode.TRAINER_BATTLE ? p.isOnField() : !p?.isFainted(true))) { + globalScene.pushPhase(new BattleEndPhase(true)); if (encounter.encounterMode === MysteryEncounterMode.TRAINER_BATTLE) { - scene.pushPhase(new TrainerVictoryPhase(scene)); + globalScene.pushPhase(new TrainerVictoryPhase()); } - if (scene.gameMode.isEndless || !scene.gameMode.isWaveFinal(scene.currentBattle.waveIndex)) { - scene.pushPhase(new MysteryEncounterRewardsPhase(scene, addHealPhase)); + if (globalScene.gameMode.isEndless || !globalScene.gameMode.isWaveFinal(globalScene.currentBattle.waveIndex)) { + globalScene.pushPhase(new MysteryEncounterRewardsPhase(addHealPhase)); if (!encounter.doContinueEncounter) { // Only lapse eggs once for multi-battle encounters - scene.pushPhase(new EggLapsePhase(scene)); + globalScene.pushPhase(new EggLapsePhase()); } } } @@ -747,48 +783,46 @@ export function handleMysteryEncounterVictory(scene: BattleScene, addHealPhase: /** * Similar to {@linkcode handleMysteryEncounterVictory}, but for cases where the player lost a battle or failed a challenge - * @param scene * @param addHealPhase */ -export function handleMysteryEncounterBattleFailed(scene: BattleScene, addHealPhase: boolean = false, doNotContinue: boolean = false) { - const allowedPkm = scene.getPlayerParty().filter((pkm) => pkm.isAllowedInBattle()); +export function handleMysteryEncounterBattleFailed(addHealPhase: boolean = false, doNotContinue: boolean = false) { + const allowedPkm = globalScene.getPlayerParty().filter((pkm) => pkm.isAllowedInBattle()); if (allowedPkm.length === 0) { - scene.clearPhaseQueue(); - scene.unshiftPhase(new GameOverPhase(scene)); + globalScene.clearPhaseQueue(); + globalScene.unshiftPhase(new GameOverPhase()); return; } // If in repeated encounter variant, do nothing // Variant must eventually be swapped in order to handle "true" end of the encounter - const encounter = scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; if (encounter.continuousEncounter || doNotContinue) { return; } else if (encounter.encounterMode !== MysteryEncounterMode.NO_BATTLE) { - scene.pushPhase(new BattleEndPhase(scene, false)); + globalScene.pushPhase(new BattleEndPhase(false)); } - scene.pushPhase(new MysteryEncounterRewardsPhase(scene, addHealPhase)); + globalScene.pushPhase(new MysteryEncounterRewardsPhase(addHealPhase)); if (!encounter.doContinueEncounter) { // Only lapse eggs once for multi-battle encounters - scene.pushPhase(new EggLapsePhase(scene)); + globalScene.pushPhase(new EggLapsePhase()); } } /** * - * @param scene * @param hide - If true, performs ease out and hide visuals. If false, eases in visuals. Defaults to true * @param destroy - If true, will destroy visuals ONLY ON HIDE TRANSITION. Does nothing on show. Defaults to true * @param duration */ -export function transitionMysteryEncounterIntroVisuals(scene: BattleScene, hide: boolean = true, destroy: boolean = true, duration: number = 750): Promise { +export function transitionMysteryEncounterIntroVisuals(hide: boolean = true, destroy: boolean = true, duration: number = 750): Promise { return new Promise(resolve => { - const introVisuals = scene.currentBattle.mysteryEncounter!.introVisuals; - const enemyPokemon = scene.getEnemyField(); + const introVisuals = globalScene.currentBattle.mysteryEncounter!.introVisuals; + const enemyPokemon = globalScene.getEnemyField(); if (enemyPokemon) { - scene.currentBattle.enemyParty = []; + globalScene.currentBattle.enemyParty = []; } if (introVisuals) { if (!hide) { @@ -800,7 +834,7 @@ export function transitionMysteryEncounterIntroVisuals(scene: BattleScene, hide: } // Transition - scene.tweens.add({ + globalScene.tweens.add({ targets: [ introVisuals, enemyPokemon ], x: `${hide ? "+" : "-"}=16`, y: `${hide ? "-" : "+"}=16`, @@ -809,13 +843,13 @@ export function transitionMysteryEncounterIntroVisuals(scene: BattleScene, hide: duration, onComplete: () => { if (hide && destroy) { - scene.field.remove(introVisuals, true); + globalScene.field.remove(introVisuals, true); enemyPokemon.forEach(pokemon => { - scene.field.remove(pokemon, true); + pokemon.leaveField(true, true, true); }); - scene.currentBattle.mysteryEncounter!.introVisuals = undefined; + globalScene.currentBattle.mysteryEncounter!.introVisuals = undefined; } resolve(true); } @@ -829,11 +863,10 @@ export function transitionMysteryEncounterIntroVisuals(scene: BattleScene, hide: /** * Will queue moves for any pokemon to use before the first CommandPhase of a battle * Mostly useful for allowing {@linkcode MysteryEncounter} enemies to "cheat" and use moves before the first turn - * @param scene */ -export function handleMysteryEncounterBattleStartEffects(scene: BattleScene) { - const encounter = scene.currentBattle.mysteryEncounter; - if (scene.currentBattle.isBattleMysteryEncounter() && encounter && encounter.encounterMode !== MysteryEncounterMode.NO_BATTLE && !encounter.startOfBattleEffectsComplete) { +export function handleMysteryEncounterBattleStartEffects() { + const encounter = globalScene.currentBattle.mysteryEncounter; + if (globalScene.currentBattle.isBattleMysteryEncounter() && encounter && encounter.encounterMode !== MysteryEncounterMode.NO_BATTLE && !encounter.startOfBattleEffectsComplete) { const effects = encounter.startOfBattleEffects; effects.forEach(effect => { let source; @@ -841,24 +874,24 @@ export function handleMysteryEncounterBattleStartEffects(scene: BattleScene) { source = effect.sourcePokemon; } else if (!isNullOrUndefined(effect.sourceBattlerIndex)) { if (effect.sourceBattlerIndex === BattlerIndex.ATTACKER) { - source = scene.getEnemyField()[0]; + source = globalScene.getEnemyField()[0]; } else if (effect.sourceBattlerIndex === BattlerIndex.ENEMY) { - source = scene.getEnemyField()[0]; + source = globalScene.getEnemyField()[0]; } else if (effect.sourceBattlerIndex === BattlerIndex.ENEMY_2) { - source = scene.getEnemyField()[1]; + source = globalScene.getEnemyField()[1]; } else if (effect.sourceBattlerIndex === BattlerIndex.PLAYER) { - source = scene.getPlayerField()[0]; + source = globalScene.getPlayerField()[0]; } else if (effect.sourceBattlerIndex === BattlerIndex.PLAYER_2) { - source = scene.getPlayerField()[1]; + source = globalScene.getPlayerField()[1]; } } else { - source = scene.getEnemyField()[0]; + source = globalScene.getEnemyField()[0]; } - scene.pushPhase(new MovePhase(scene, source, effect.targets, effect.move, effect.followUp, effect.ignorePp)); + globalScene.pushPhase(new MovePhase(source, effect.targets, effect.move, effect.followUp, effect.ignorePp)); }); // Pseudo turn end phase to reset flinch states, Endure, etc. - scene.pushPhase(new MysteryEncounterBattleStartCleanupPhase(scene)); + globalScene.pushPhase(new MysteryEncounterBattleStartCleanupPhase()); encounter.startOfBattleEffectsComplete = true; } @@ -867,25 +900,63 @@ export function handleMysteryEncounterBattleStartEffects(scene: BattleScene) { /** * Can queue extra phases or logic during {@linkcode TurnInitPhase} * Should mostly just be used for injecting custom phases into the battle system on turn start - * @param scene * @return boolean - if true, will skip the remainder of the {@linkcode TurnInitPhase} */ -export function handleMysteryEncounterTurnStartEffects(scene: BattleScene): boolean { - const encounter = scene.currentBattle.mysteryEncounter; - if (scene.currentBattle.isBattleMysteryEncounter() && encounter && encounter.onTurnStart) { - return encounter.onTurnStart(scene); +export function handleMysteryEncounterTurnStartEffects(): boolean { + const encounter = globalScene.currentBattle.mysteryEncounter; + if (globalScene.currentBattle.isBattleMysteryEncounter() && encounter && encounter.onTurnStart) { + return encounter.onTurnStart(); } return false; } +/** + * Helper function for encounters such as {@linkcode UncommonBreedEncounter} which call for a random species including event encounters. + * If the mon is from the event encounter list, it will do an extra shiny roll. + * @param level the level of the mon, which differs between MEs + * @param isBoss whether the mon should be a Boss + * @param rerollHidden whether the mon should get an extra roll for Hidden Ability + * @returns {@linkcode EnemyPokemon} for the requested encounter + */ +export function getRandomEncounterSpecies(level: number, isBoss: boolean = false, rerollHidden: boolean = false): EnemyPokemon { + let bossSpecies: PokemonSpecies; + let isEventEncounter = false; + const eventEncounters = globalScene.eventManager.getEventEncounters(); + let formIndex; + + if (eventEncounters.length > 0 && randSeedInt(2) === 1) { + const eventEncounter = randSeedItem(eventEncounters); + const levelSpecies = getPokemonSpecies(eventEncounter.species).getWildSpeciesForLevel(level, !eventEncounter.blockEvolution, isBoss, globalScene.gameMode); + isEventEncounter = true; + bossSpecies = getPokemonSpecies(levelSpecies); + formIndex = eventEncounter.formIndex; + } else { + bossSpecies = globalScene.arena.randomSpecies(globalScene.currentBattle.waveIndex, level, 0, getPartyLuckValue(globalScene.getPlayerParty()), isBoss); + } + const ret = new EnemyPokemon(bossSpecies, level, TrainerSlot.NONE, isBoss); + if (formIndex) { + ret.formIndex = formIndex; + } + + //Reroll shiny for event encounters + if (isEventEncounter && !ret.shiny) { + ret.trySetShinySeed(); + } + //Reroll hidden ability + if (rerollHidden && ret.abilityIndex !== 2 && ret.species.abilityHidden) { + ret.tryRerollHiddenAbilitySeed(); + } + + return ret; +} + /** * TODO: remove once encounter spawn rate is finalized * Just a helper function to calculate aggregate stats for MEs in a Classic run - * @param scene * @param baseSpawnWeight */ -export function calculateMEAggregateStats(scene: BattleScene, baseSpawnWeight: number) { +export function calculateMEAggregateStats(baseSpawnWeight: number) { const numRuns = 1000; let run = 0; const biomes = Object.keys(Biome).filter(key => isNaN(Number(key))); @@ -898,9 +969,9 @@ export function calculateMEAggregateStats(scene: BattleScene, baseSpawnWeight: n const encountersByBiome = new Map(biomes.map(b => [ b, 0 ])); const validMEfloorsByBiome = new Map(biomes.map(b => [ b, 0 ])); let currentBiome = Biome.TOWN; - let currentArena = scene.newArena(currentBiome); - scene.setSeed(Utils.randomString(24)); - scene.resetSeed(); + let currentArena = globalScene.newArena(currentBiome); + globalScene.setSeed(Utils.randomString(24)); + globalScene.resetSeed(); for (let i = 10; i < 180; i++) { // Boss if (i % 10 === 0) { @@ -911,7 +982,7 @@ export function calculateMEAggregateStats(scene: BattleScene, baseSpawnWeight: n if (i % 10 === 1) { if (Array.isArray(biomeLinks[currentBiome])) { let biomes: Biome[]; - scene.executeWithSeedOffset(() => { + globalScene.executeWithSeedOffset(() => { biomes = (biomeLinks[currentBiome] as (Biome | [Biome, number])[]) .filter(b => { return !Array.isArray(b) || !Utils.randSeedInt(b[1]); @@ -932,20 +1003,20 @@ export function calculateMEAggregateStats(scene: BattleScene, baseSpawnWeight: n if (!(i % 50)) { currentBiome = Biome.END; } else { - currentBiome = scene.generateRandomBiome(i); + currentBiome = globalScene.generateRandomBiome(i); } } - currentArena = scene.newArena(currentBiome); + currentArena = globalScene.newArena(currentBiome); } // Fixed battle - if (scene.gameMode.isFixedBattle(i)) { + if (globalScene.gameMode.isFixedBattle(i)) { continue; } // Trainer - if (scene.gameMode.isWaveTrainer(i, currentArena)) { + if (globalScene.gameMode.isWaveTrainer(i, currentArena)) { continue; } @@ -995,7 +1066,7 @@ export function calculateMEAggregateStats(scene: BattleScene, baseSpawnWeight: n const encountersByBiomeRuns: Map[] = []; const validFloorsByBiome: Map[] = []; while (run < numRuns) { - scene.executeWithSeedOffset(() => { + globalScene.executeWithSeedOffset(() => { const [ numEncounters, encountersByBiome, validMEfloorsByBiome ] = calculateNumEncounters(); encounterRuns.push(numEncounters); encountersByBiomeRuns.push(encountersByBiome); @@ -1047,17 +1118,16 @@ export function calculateMEAggregateStats(scene: BattleScene, baseSpawnWeight: n /** * TODO: remove once encounter spawn rate is finalized * Just a helper function to calculate aggregate stats for MEs in a Classic run - * @param scene * @param luckValue - 0 to 14 */ -export function calculateRareSpawnAggregateStats(scene: BattleScene, luckValue: number) { +export function calculateRareSpawnAggregateStats(luckValue: number) { const numRuns = 1000; let run = 0; const calculateNumRareEncounters = (): any[] => { const bossEncountersByRarity = [ 0, 0, 0, 0 ]; - scene.setSeed(Utils.randomString(24)); - scene.resetSeed(); + globalScene.setSeed(Utils.randomString(24)); + globalScene.resetSeed(); // There are 12 wild boss floors for (let i = 0; i < 12; i++) { // Roll boss tier @@ -1091,7 +1161,7 @@ export function calculateRareSpawnAggregateStats(scene: BattleScene, luckValue: const encounterRuns: number[][] = []; while (run < numRuns) { - scene.executeWithSeedOffset(() => { + globalScene.executeWithSeedOffset(() => { const bossEncountersByRarity = calculateNumRareEncounters(); encounterRuns.push(bossEncountersByRarity); }, 1000 * run); diff --git a/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts b/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts index 072b5e5b160..be7d11d6cf1 100644 --- a/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts @@ -1,28 +1,32 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import i18next from "i18next"; import { isNullOrUndefined, randSeedInt } from "#app/utils"; import { PokemonHeldItemModifier } from "#app/modifier/modifier"; -import Pokemon, { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; +import type { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; import { doPokeballBounceAnim, getPokeballAtlasKey, getPokeballCatchMultiplier, getPokeballTintColor } from "#app/data/pokeball"; import { PlayerGender } from "#enums/player-gender"; import { addPokeballCaptureStars, addPokeballOpenParticles } from "#app/field/anims"; import { getStatusEffectCatchRateMultiplier } from "#app/data/status-effect"; import { achvs } from "#app/system/achv"; import { Mode } from "#app/ui/ui"; -import { PartyOption, PartyUiMode } from "#app/ui/party-ui-handler"; +import type { PartyOption } from "#app/ui/party-ui-handler"; +import { PartyUiMode } from "#app/ui/party-ui-handler"; import { Species } from "#enums/species"; -import { Type } from "#enums/type"; -import PokemonSpecies, { getPokemonSpecies } from "#app/data/pokemon-species"; +import type { Type } from "#enums/type"; +import type PokemonSpecies from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/data/pokemon-species"; import { speciesStarterCosts } from "#app/data/balance/starters"; import { getEncounterText, queueEncounterMessage, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { getPokemonNameWithAffix } from "#app/messages"; -import { modifierTypes, PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; +import type { PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/modifier/modifier-type"; import { Gender } from "#app/data/gender"; -import { PermanentStat } from "#enums/stat"; +import type { PermanentStat } from "#enums/stat"; import { VictoryPhase } from "#app/phases/victory-phase"; import { SummaryUiMode } from "#app/ui/summary-ui-handler"; import { CustomPokemonData } from "#app/data/custom-pokemon-data"; -import { Abilities } from "#enums/abilities"; +import type { Abilities } from "#enums/abilities"; import type { PokeballType } from "#enums/pokeball"; import { StatusEffect } from "#enums/status-effect"; @@ -45,7 +49,6 @@ export function getSpriteKeysFromSpecies(species: Species, female?: boolean, for /** * Gets the sprite key and file root for a given Pokemon (accounts for gender, shiny, variants, forms, and experimental) - * @param pokemon */ export function getSpriteKeysFromPokemon(pokemon: Pokemon): { spriteKey: string, fileRoot: string } { const spriteKey = pokemon.getSpeciesForm().getSpriteKey(pokemon.getGender() === Gender.FEMALE, pokemon.formIndex, pokemon.shiny, pokemon.variant); @@ -57,14 +60,13 @@ export function getSpriteKeysFromPokemon(pokemon: Pokemon): { spriteKey: string, /** * Will never remove the player's last non-fainted Pokemon (if they only have 1). * Otherwise, picks a Pokemon completely at random and removes from the party - * @param scene * @param isAllowed Default `false`. If `true`, only picks from legal mons. If no legal mons are found (or there is 1, with `doNotReturnLastAllowedMon = true`), will return a mon that is not allowed. * @param isFainted Default `false`. If `true`, includes fainted mons. * @param doNotReturnLastAllowedMon Default `false`. If `true`, will never return the last unfainted pokemon in the party. Useful when this function is being used to determine what Pokemon to remove from the party (Don't want to remove last unfainted) * @returns */ -export function getRandomPlayerPokemon(scene: BattleScene, isAllowed: boolean = false, isFainted: boolean = false, doNotReturnLastAllowedMon: boolean = false): PlayerPokemon { - const party = scene.getPlayerParty(); +export function getRandomPlayerPokemon(isAllowed: boolean = false, isFainted: boolean = false, doNotReturnLastAllowedMon: boolean = false): PlayerPokemon { + const party = globalScene.getPlayerParty(); let chosenIndex: number; let chosenPokemon: PlayerPokemon | null = null; const fullyLegalMons = party.filter(p => (!isAllowed || p.isAllowedInChallenge()) && (isFainted || !p.isFainted())); @@ -102,8 +104,8 @@ export function getRandomPlayerPokemon(scene: BattleScene, isAllowed: boolean = * @param isFainted Default false. If true, includes fainted mons. * @returns */ -export function getHighestLevelPlayerPokemon(scene: BattleScene, isAllowed: boolean = false, isFainted: boolean = false): PlayerPokemon { - const party = scene.getPlayerParty(); +export function getHighestLevelPlayerPokemon(isAllowed: boolean = false, isFainted: boolean = false): PlayerPokemon { + const party = globalScene.getPlayerParty(); let pokemon: PlayerPokemon | null = null; for (const p of party) { @@ -128,8 +130,8 @@ export function getHighestLevelPlayerPokemon(scene: BattleScene, isAllowed: bool * @param isFainted Default false. If true, includes fainted mons. * @returns */ -export function getHighestStatPlayerPokemon(scene: BattleScene, stat: PermanentStat, isAllowed: boolean = false, isFainted: boolean = false): PlayerPokemon { - const party = scene.getPlayerParty(); +export function getHighestStatPlayerPokemon(stat: PermanentStat, isAllowed: boolean = false, isFainted: boolean = false): PlayerPokemon { + const party = globalScene.getPlayerParty(); let pokemon: PlayerPokemon | null = null; for (const p of party) { @@ -153,8 +155,8 @@ export function getHighestStatPlayerPokemon(scene: BattleScene, stat: PermanentS * @param isFainted Default false. If true, includes fainted mons. * @returns */ -export function getLowestLevelPlayerPokemon(scene: BattleScene, isAllowed: boolean = false, isFainted: boolean = false): PlayerPokemon { - const party = scene.getPlayerParty(); +export function getLowestLevelPlayerPokemon(isAllowed: boolean = false, isFainted: boolean = false): PlayerPokemon { + const party = globalScene.getPlayerParty(); let pokemon: PlayerPokemon | null = null; for (const p of party) { @@ -178,8 +180,8 @@ export function getLowestLevelPlayerPokemon(scene: BattleScene, isAllowed: boole * @param isFainted Default false. If true, includes fainted mons. * @returns */ -export function getHighestStatTotalPlayerPokemon(scene: BattleScene, isAllowed: boolean = false, isFainted: boolean = false): PlayerPokemon { - const party = scene.getPlayerParty(); +export function getHighestStatTotalPlayerPokemon(isAllowed: boolean = false, isFainted: boolean = false): PlayerPokemon { + const party = globalScene.getPlayerParty(); let pokemon: PlayerPokemon | null = null; for (const p of party) { @@ -253,11 +255,11 @@ export function getRandomSpeciesByStarterCost(starterTiers: number | [number, nu * @param scene the battle scene * @param pokemon the player pokemon to KO */ -export function koPlayerPokemon(scene: BattleScene, pokemon: PlayerPokemon) { +export function koPlayerPokemon(pokemon: PlayerPokemon) { pokemon.hp = 0; pokemon.trySetStatus(StatusEffect.FAINT); pokemon.updateInfo(); - queueEncounterMessage(scene, i18next.t("battle:fainted", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + queueEncounterMessage(i18next.t("battle:fainted", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } /** @@ -269,11 +271,11 @@ export function koPlayerPokemon(scene: BattleScene, pokemon: PlayerPokemon) { * @param value the hp change amount. Positive for heal. Negative for damage * */ -function applyHpChangeToPokemon(scene: BattleScene, pokemon: PlayerPokemon, value: number) { +function applyHpChangeToPokemon(pokemon: PlayerPokemon, value: number) { const hpChange = Math.round(pokemon.hp + value); const nextHp = Math.max(Math.min(hpChange, pokemon.getMaxHp()), 0); if (nextHp === 0) { - koPlayerPokemon(scene, pokemon); + koPlayerPokemon(pokemon); } else { pokemon.hp = nextHp; } @@ -286,7 +288,7 @@ function applyHpChangeToPokemon(scene: BattleScene, pokemon: PlayerPokemon, valu * @param damage the amount of damage to apply * @see {@linkcode applyHpChangeToPokemon} */ -export function applyDamageToPokemon(scene: BattleScene, pokemon: PlayerPokemon, damage: number) { +export function applyDamageToPokemon(pokemon: PlayerPokemon, damage: number) { if (damage <= 0) { console.warn("Healing pokemon with `applyDamageToPokemon` is not recommended! Please use `applyHealToPokemon` instead."); } @@ -294,7 +296,7 @@ export function applyDamageToPokemon(scene: BattleScene, pokemon: PlayerPokemon, if (pokemon.isAllowedInBattle() && pokemon.hp - damage <= 0) { damage = pokemon.hp - 1; } - applyHpChangeToPokemon(scene, pokemon, -damage); + applyHpChangeToPokemon(pokemon, -damage); } /** @@ -304,12 +306,12 @@ export function applyDamageToPokemon(scene: BattleScene, pokemon: PlayerPokemon, * @param heal the amount of heal to apply * @see {@linkcode applyHpChangeToPokemon} */ -export function applyHealToPokemon(scene: BattleScene, pokemon: PlayerPokemon, heal: number) { +export function applyHealToPokemon(pokemon: PlayerPokemon, heal: number) { if (heal <= 0) { console.warn("Damaging pokemon with `applyHealToPokemon` is not recommended! Please use `applyDamageToPokemon` instead."); } - applyHpChangeToPokemon(scene, pokemon, heal); + applyHpChangeToPokemon(pokemon, heal); } /** @@ -320,11 +322,11 @@ export function applyHealToPokemon(scene: BattleScene, pokemon: PlayerPokemon, h */ export async function modifyPlayerPokemonBST(pokemon: PlayerPokemon, value: number) { const modType = modifierTypes.MYSTERY_ENCOUNTER_SHUCKLE_JUICE() - .generateType(pokemon.scene.getPlayerParty(), [ value ]) + .generateType(globalScene.getPlayerParty(), [ value ]) ?.withIdFromFunc(modifierTypes.MYSTERY_ENCOUNTER_SHUCKLE_JUICE); const modifier = modType?.newModifier(pokemon); if (modifier) { - await pokemon.scene.addModifier(modifier, false, false, false, true); + globalScene.addModifier(modifier, false, false, false, true); pokemon.calculateStats(); } } @@ -337,10 +339,10 @@ export async function modifyPlayerPokemonBST(pokemon: PlayerPokemon, value: numb * @param modType * @param fallbackModifierType */ -export async function applyModifierTypeToPlayerPokemon(scene: BattleScene, pokemon: PlayerPokemon, modType: PokemonHeldItemModifierType, fallbackModifierType?: PokemonHeldItemModifierType) { +export async function applyModifierTypeToPlayerPokemon(pokemon: PlayerPokemon, modType: PokemonHeldItemModifierType, fallbackModifierType?: PokemonHeldItemModifierType) { // Check if the Pokemon has max stacks of that item already const modifier = modType.newModifier(pokemon); - const existing = scene.findModifier(m => ( + const existing = globalScene.findModifier(m => ( m instanceof PokemonHeldItemModifier && m.type.id === modType.id && m.pokemonId === pokemon.id && @@ -348,16 +350,16 @@ export async function applyModifierTypeToPlayerPokemon(scene: BattleScene, pokem )) as PokemonHeldItemModifier; // At max stacks - if (existing && existing.getStackCount() >= existing.getMaxStackCount(scene)) { + if (existing && existing.getStackCount() >= existing.getMaxStackCount()) { if (!fallbackModifierType) { return; } // Apply fallback - return applyModifierTypeToPlayerPokemon(scene, pokemon, fallbackModifierType); + return applyModifierTypeToPlayerPokemon(pokemon, fallbackModifierType); } - await scene.addModifier(modifier, false, false, false, true); + globalScene.addModifier(modifier, false, false, false, true); } /** @@ -371,7 +373,7 @@ export async function applyModifierTypeToPlayerPokemon(scene: BattleScene, pokem * @param pokeballType * @param ballTwitchRate - can pass custom ball catch rates (for special events, like safari) */ -export function trainerThrowPokeball(scene: BattleScene, pokemon: EnemyPokemon, pokeballType: PokeballType, ballTwitchRate?: number): Promise { +export function trainerThrowPokeball(pokemon: EnemyPokemon, pokeballType: PokeballType, ballTwitchRate?: number): Promise { const originalY: number = pokemon.y; if (!ballTwitchRate) { @@ -386,43 +388,43 @@ export function trainerThrowPokeball(scene: BattleScene, pokemon: EnemyPokemon, const fpOffset = pokemon.getFieldPositionOffset(); const pokeballAtlasKey = getPokeballAtlasKey(pokeballType); - const pokeball: Phaser.GameObjects.Sprite = scene.addFieldSprite(16 + 75, 80 + 25, "pb", pokeballAtlasKey); + const pokeball: Phaser.GameObjects.Sprite = globalScene.addFieldSprite(16 + 75, 80 + 25, "pb", pokeballAtlasKey); pokeball.setOrigin(0.5, 0.625); - scene.field.add(pokeball); + globalScene.field.add(pokeball); - scene.time.delayedCall(300, () => { - scene.field.moveBelow(pokeball as Phaser.GameObjects.GameObject, pokemon); + globalScene.time.delayedCall(300, () => { + globalScene.field.moveBelow(pokeball as Phaser.GameObjects.GameObject, pokemon); }); return new Promise(resolve => { - scene.trainer.setTexture(`trainer_${scene.gameData.gender === PlayerGender.FEMALE ? "f" : "m"}_back_pb`); - scene.time.delayedCall(512, () => { - scene.playSound("se/pb_throw"); + globalScene.trainer.setTexture(`trainer_${globalScene.gameData.gender === PlayerGender.FEMALE ? "f" : "m"}_back_pb`); + globalScene.time.delayedCall(512, () => { + globalScene.playSound("se/pb_throw"); // Trainer throw frames - scene.trainer.setFrame("2"); - scene.time.delayedCall(256, () => { - scene.trainer.setFrame("3"); - scene.time.delayedCall(768, () => { - scene.trainer.setTexture(`trainer_${scene.gameData.gender === PlayerGender.FEMALE ? "f" : "m"}_back`); + globalScene.trainer.setFrame("2"); + globalScene.time.delayedCall(256, () => { + globalScene.trainer.setFrame("3"); + globalScene.time.delayedCall(768, () => { + globalScene.trainer.setTexture(`trainer_${globalScene.gameData.gender === PlayerGender.FEMALE ? "f" : "m"}_back`); }); }); // Pokeball move and catch logic - scene.tweens.add({ + globalScene.tweens.add({ targets: pokeball, x: { value: 236 + fpOffset[0], ease: "Linear" }, y: { value: 16 + fpOffset[1], ease: "Cubic.easeOut" }, duration: 500, onComplete: () => { pokeball.setTexture("pb", `${pokeballAtlasKey}_opening`); - scene.time.delayedCall(17, () => pokeball.setTexture("pb", `${pokeballAtlasKey}_open`)); - scene.playSound("se/pb_rel"); + globalScene.time.delayedCall(17, () => pokeball.setTexture("pb", `${pokeballAtlasKey}_open`)); + globalScene.playSound("se/pb_rel"); pokemon.tint(getPokeballTintColor(pokeballType)); - addPokeballOpenParticles(scene, pokeball.x, pokeball.y, pokeballType); + addPokeballOpenParticles(pokeball.x, pokeball.y, pokeballType); - scene.tweens.add({ + globalScene.tweens.add({ targets: pokemon, duration: 500, ease: "Sine.easeIn", @@ -431,13 +433,13 @@ export function trainerThrowPokeball(scene: BattleScene, pokemon: EnemyPokemon, onComplete: () => { pokeball.setTexture("pb", `${pokeballAtlasKey}_opening`); pokemon.setVisible(false); - scene.playSound("se/pb_catch"); - scene.time.delayedCall(17, () => pokeball.setTexture("pb", `${pokeballAtlasKey}`)); + globalScene.playSound("se/pb_catch"); + globalScene.time.delayedCall(17, () => pokeball.setTexture("pb", `${pokeballAtlasKey}`)); const doShake = () => { let shakeCount = 0; const pbX = pokeball.x; - const shakeCounter = scene.tweens.addCounter({ + const shakeCounter = globalScene.tweens.addCounter({ from: 0, to: 1, repeat: 4, @@ -456,30 +458,30 @@ export function trainerThrowPokeball(scene: BattleScene, pokemon: EnemyPokemon, onRepeat: () => { if (!pokemon.species.isObtainable()) { shakeCounter.stop(); - failCatch(scene, pokemon, originalY, pokeball, pokeballType).then(() => resolve(false)); + failCatch(pokemon, originalY, pokeball, pokeballType).then(() => resolve(false)); } else if (shakeCount++ < 3) { if (randSeedInt(65536) < ballTwitchRate) { - scene.playSound("se/pb_move"); + globalScene.playSound("se/pb_move"); } else { shakeCounter.stop(); - failCatch(scene, pokemon, originalY, pokeball, pokeballType).then(() => resolve(false)); + failCatch(pokemon, originalY, pokeball, pokeballType).then(() => resolve(false)); } } else { - scene.playSound("se/pb_lock"); - addPokeballCaptureStars(scene, pokeball); + globalScene.playSound("se/pb_lock"); + addPokeballCaptureStars(pokeball); - const pbTint = scene.add.sprite(pokeball.x, pokeball.y, "pb", "pb"); + const pbTint = globalScene.add.sprite(pokeball.x, pokeball.y, "pb", "pb"); pbTint.setOrigin(pokeball.originX, pokeball.originY); pbTint.setTintFill(0); pbTint.setAlpha(0); - scene.field.add(pbTint); - scene.tweens.add({ + globalScene.field.add(pbTint); + globalScene.tweens.add({ targets: pbTint, alpha: 0.375, duration: 200, easing: "Sine.easeOut", onComplete: () => { - scene.tweens.add({ + globalScene.tweens.add({ targets: pbTint, alpha: 0, duration: 200, @@ -491,12 +493,12 @@ export function trainerThrowPokeball(scene: BattleScene, pokemon: EnemyPokemon, } }, onComplete: () => { - catchPokemon(scene, pokemon, pokeball, pokeballType).then(() => resolve(true)); + catchPokemon(pokemon, pokeball, pokeballType).then(() => resolve(true)); } }); }; - scene.time.delayedCall(250, () => doPokeballBounceAnim(scene, pokeball, 16, 72, 350, doShake)); + globalScene.time.delayedCall(250, () => doPokeballBounceAnim(pokeball, 16, 72, 350, doShake)); } }); } @@ -513,9 +515,9 @@ export function trainerThrowPokeball(scene: BattleScene, pokemon: EnemyPokemon, * @param pokeball * @param pokeballType */ -function failCatch(scene: BattleScene, pokemon: EnemyPokemon, originalY: number, pokeball: Phaser.GameObjects.Sprite, pokeballType: PokeballType) { +function failCatch(pokemon: EnemyPokemon, originalY: number, pokeball: Phaser.GameObjects.Sprite, pokeballType: PokeballType) { return new Promise(resolve => { - scene.playSound("se/pb_rel"); + globalScene.playSound("se/pb_rel"); pokemon.setY(originalY); if (pokemon.status?.effect !== StatusEffect.SLEEP) { pokemon.cry(pokemon.getHpRatio() > 0.25 ? undefined : { rate: 0.85 }); @@ -526,19 +528,19 @@ function failCatch(scene: BattleScene, pokemon: EnemyPokemon, originalY: number, const pokeballAtlasKey = getPokeballAtlasKey(pokeballType); pokeball.setTexture("pb", `${pokeballAtlasKey}_opening`); - scene.time.delayedCall(17, () => pokeball.setTexture("pb", `${pokeballAtlasKey}_open`)); + globalScene.time.delayedCall(17, () => pokeball.setTexture("pb", `${pokeballAtlasKey}_open`)); - scene.tweens.add({ + globalScene.tweens.add({ targets: pokemon, duration: 250, ease: "Sine.easeOut", scale: 1 }); - scene.currentBattle.lastUsedPokeball = pokeballType; - removePb(scene, pokeball); + globalScene.currentBattle.lastUsedPokeball = pokeballType; + removePb(pokeball); - scene.ui.showText(i18next.t("battle:pokemonBrokeFree", { pokemonName: pokemon.getNameToRender() }), null, () => resolve(), null, true); + globalScene.ui.showText(i18next.t("battle:pokemonBrokeFree", { pokemonName: pokemon.getNameToRender() }), null, () => resolve(), null, true); }); } @@ -551,56 +553,56 @@ function failCatch(scene: BattleScene, pokemon: EnemyPokemon, originalY: number, * @param showCatchObtainMessage * @param isObtain */ -export async function catchPokemon(scene: BattleScene, pokemon: EnemyPokemon, pokeball: Phaser.GameObjects.Sprite | null, pokeballType: PokeballType, showCatchObtainMessage: boolean = true, isObtain: boolean = false): Promise { +export async function catchPokemon(pokemon: EnemyPokemon, pokeball: Phaser.GameObjects.Sprite | null, pokeballType: PokeballType, showCatchObtainMessage: boolean = true, isObtain: boolean = false): Promise { const speciesForm = !pokemon.fusionSpecies ? pokemon.getSpeciesForm() : pokemon.getFusionSpeciesForm(); if (speciesForm.abilityHidden && (pokemon.fusionSpecies ? pokemon.fusionAbilityIndex : pokemon.abilityIndex) === speciesForm.getAbilityCount() - 1) { - scene.validateAchv(achvs.HIDDEN_ABILITY); + globalScene.validateAchv(achvs.HIDDEN_ABILITY); } if (pokemon.species.subLegendary) { - scene.validateAchv(achvs.CATCH_SUB_LEGENDARY); + globalScene.validateAchv(achvs.CATCH_SUB_LEGENDARY); } if (pokemon.species.legendary) { - scene.validateAchv(achvs.CATCH_LEGENDARY); + globalScene.validateAchv(achvs.CATCH_LEGENDARY); } if (pokemon.species.mythical) { - scene.validateAchv(achvs.CATCH_MYTHICAL); + globalScene.validateAchv(achvs.CATCH_MYTHICAL); } - scene.pokemonInfoContainer.show(pokemon, true); + globalScene.pokemonInfoContainer.show(pokemon, true); - scene.gameData.updateSpeciesDexIvs(pokemon.species.getRootSpeciesId(true), pokemon.ivs); + globalScene.gameData.updateSpeciesDexIvs(pokemon.species.getRootSpeciesId(true), pokemon.ivs); return new Promise(resolve => { const doPokemonCatchMenu = () => { const end = () => { // Ensure the pokemon is in the enemy party in all situations - if (!scene.getEnemyParty().some(p => p.id === pokemon.id)) { - scene.getEnemyParty().push(pokemon); + if (!globalScene.getEnemyParty().some(p => p.id === pokemon.id)) { + globalScene.getEnemyParty().push(pokemon); } - scene.unshiftPhase(new VictoryPhase(scene, pokemon.id, true)); - scene.pokemonInfoContainer.hide(); + globalScene.unshiftPhase(new VictoryPhase(pokemon.id, true)); + globalScene.pokemonInfoContainer.hide(); if (pokeball) { - removePb(scene, pokeball); + removePb(pokeball); } resolve(); }; const removePokemon = () => { if (pokemon) { - scene.field.remove(pokemon, true); + pokemon.leaveField(false, true, true); } }; const addToParty = (slotIndex?: number) => { const newPokemon = pokemon.addToParty(pokeballType, slotIndex); - const modifiers = scene.findModifiers(m => m instanceof PokemonHeldItemModifier, false); - if (scene.getPlayerParty().filter(p => p.isShiny()).length === 6) { - scene.validateAchv(achvs.SHINY_PARTY); + const modifiers = globalScene.findModifiers(m => m instanceof PokemonHeldItemModifier, false); + if (globalScene.getPlayerParty().filter(p => p.isShiny()).length === 6) { + globalScene.validateAchv(achvs.SHINY_PARTY); } - Promise.all(modifiers.map(m => scene.addModifier(m, true))).then(() => { - scene.updateModifiers(true); + Promise.all(modifiers.map(m => globalScene.addModifier(m, true))).then(() => { + globalScene.updateModifiers(true); removePokemon(); if (newPokemon) { newPokemon.loadAssets().then(end); @@ -609,21 +611,21 @@ export async function catchPokemon(scene: BattleScene, pokemon: EnemyPokemon, po } }); }; - Promise.all([ pokemon.hideInfo(), scene.gameData.setPokemonCaught(pokemon) ]).then(() => { - if (scene.getPlayerParty().length === 6) { + Promise.all([ pokemon.hideInfo(), globalScene.gameData.setPokemonCaught(pokemon) ]).then(() => { + if (globalScene.getPlayerParty().length === 6) { const promptRelease = () => { - scene.ui.showText(i18next.t("battle:partyFull", { pokemonName: pokemon.getNameToRender() }), null, () => { - scene.pokemonInfoContainer.makeRoomForConfirmUi(1, true); - scene.ui.setMode(Mode.CONFIRM, () => { - const newPokemon = scene.addPlayerPokemon(pokemon.species, pokemon.level, pokemon.abilityIndex, pokemon.formIndex, pokemon.gender, pokemon.shiny, pokemon.variant, pokemon.ivs, pokemon.nature, pokemon); - scene.ui.setMode(Mode.SUMMARY, newPokemon, 0, SummaryUiMode.DEFAULT, () => { - scene.ui.setMode(Mode.MESSAGE).then(() => { + globalScene.ui.showText(i18next.t("battle:partyFull", { pokemonName: pokemon.getNameToRender() }), null, () => { + globalScene.pokemonInfoContainer.makeRoomForConfirmUi(1, true); + globalScene.ui.setMode(Mode.CONFIRM, () => { + const newPokemon = globalScene.addPlayerPokemon(pokemon.species, pokemon.level, pokemon.abilityIndex, pokemon.formIndex, pokemon.gender, pokemon.shiny, pokemon.variant, pokemon.ivs, pokemon.nature, pokemon); + globalScene.ui.setMode(Mode.SUMMARY, newPokemon, 0, SummaryUiMode.DEFAULT, () => { + globalScene.ui.setMode(Mode.MESSAGE).then(() => { promptRelease(); }); }, false); }, () => { - scene.ui.setMode(Mode.PARTY, PartyUiMode.RELEASE, 0, (slotIndex: integer, _option: PartyOption) => { - scene.ui.setMode(Mode.MESSAGE).then(() => { + globalScene.ui.setMode(Mode.PARTY, PartyUiMode.RELEASE, 0, (slotIndex: number, _option: PartyOption) => { + globalScene.ui.setMode(Mode.MESSAGE).then(() => { if (slotIndex < 6) { addToParty(slotIndex); } else { @@ -632,7 +634,7 @@ export async function catchPokemon(scene: BattleScene, pokemon: EnemyPokemon, po }); }); }, () => { - scene.ui.setMode(Mode.MESSAGE).then(() => { + globalScene.ui.setMode(Mode.MESSAGE).then(() => { removePokemon(); end(); }); @@ -647,7 +649,7 @@ export async function catchPokemon(scene: BattleScene, pokemon: EnemyPokemon, po }; if (showCatchObtainMessage) { - scene.ui.showText(i18next.t(isObtain ? "battle:pokemonObtained" : "battle:pokemonCaught", { pokemonName: pokemon.getNameToRender() }), null, doPokemonCatchMenu, 0, true); + globalScene.ui.showText(i18next.t(isObtain ? "battle:pokemonObtained" : "battle:pokemonCaught", { pokemonName: pokemon.getNameToRender() }), null, doPokemonCatchMenu, 0, true); } else { doPokemonCatchMenu(); } @@ -659,9 +661,9 @@ export async function catchPokemon(scene: BattleScene, pokemon: EnemyPokemon, po * @param scene * @param pokeball */ -function removePb(scene: BattleScene, pokeball: Phaser.GameObjects.Sprite) { +function removePb(pokeball: Phaser.GameObjects.Sprite) { if (pokeball) { - scene.tweens.add({ + globalScene.tweens.add({ targets: pokeball, duration: 250, delay: 250, @@ -679,11 +681,11 @@ function removePb(scene: BattleScene, pokeball: Phaser.GameObjects.Sprite) { * @param scene * @param pokemon */ -export async function doPokemonFlee(scene: BattleScene, pokemon: EnemyPokemon): Promise { +export async function doPokemonFlee(pokemon: EnemyPokemon): Promise { await new Promise(resolve => { - scene.playSound("se/flee"); + globalScene.playSound("se/flee"); // Ease pokemon out - scene.tweens.add({ + globalScene.tweens.add({ targets: pokemon, x: "+=16", y: "-=16", @@ -693,8 +695,8 @@ export async function doPokemonFlee(scene: BattleScene, pokemon: EnemyPokemon): scale: pokemon.getSpriteScale(), onComplete: () => { pokemon.setVisible(false); - scene.field.remove(pokemon, true); - showEncounterText(scene, i18next.t("battle:pokemonFled", { pokemonName: pokemon.getNameToRender() }), null, 600, false) + pokemon.leaveField(true, true, true); + showEncounterText(i18next.t("battle:pokemonFled", { pokemonName: pokemon.getNameToRender() }), null, 600, false) .then(() => { resolve(); }); @@ -708,10 +710,10 @@ export async function doPokemonFlee(scene: BattleScene, pokemon: EnemyPokemon): * @param scene * @param pokemon */ -export function doPlayerFlee(scene: BattleScene, pokemon: EnemyPokemon): Promise { +export function doPlayerFlee(pokemon: EnemyPokemon): Promise { return new Promise(resolve => { // Ease pokemon out - scene.tweens.add({ + globalScene.tweens.add({ targets: pokemon, x: "+=16", y: "-=16", @@ -721,8 +723,8 @@ export function doPlayerFlee(scene: BattleScene, pokemon: EnemyPokemon): Promise scale: pokemon.getSpriteScale(), onComplete: () => { pokemon.setVisible(false); - scene.field.remove(pokemon, true); - showEncounterText(scene, i18next.t("battle:playerFled", { pokemonName: pokemon.getNameToRender() }), null, 600, false) + pokemon.leaveField(true, true, true); + showEncounterText(i18next.t("battle:playerFled", { pokemonName: pokemon.getNameToRender() }), null, 600, false) .then(() => { resolve(); }); @@ -790,35 +792,35 @@ export function getGoldenBugNetSpecies(level: number): PokemonSpecies { * @param scene * @param levelAdditiveModifier Default 0. will add +(1 level / 10 waves * levelAdditiveModifier) to the level calculation */ -export function getEncounterPokemonLevelForWave(scene: BattleScene, levelAdditiveModifier: number = 0) { - const currentBattle = scene.currentBattle; +export function getEncounterPokemonLevelForWave(levelAdditiveModifier: number = 0) { + const currentBattle = globalScene.currentBattle; const baseLevel = currentBattle.getLevelForWave(); // Add a level scaling modifier that is (+1 level per 10 waves) * levelAdditiveModifier return baseLevel + Math.max(Math.round((currentBattle.waveIndex / 10) * levelAdditiveModifier), 0); } -export async function addPokemonDataToDexAndValidateAchievements(scene: BattleScene, pokemon: PlayerPokemon) { +export async function addPokemonDataToDexAndValidateAchievements(pokemon: PlayerPokemon) { const speciesForm = !pokemon.fusionSpecies ? pokemon.getSpeciesForm() : pokemon.getFusionSpeciesForm(); if (speciesForm.abilityHidden && (pokemon.fusionSpecies ? pokemon.fusionAbilityIndex : pokemon.abilityIndex) === speciesForm.getAbilityCount() - 1) { - scene.validateAchv(achvs.HIDDEN_ABILITY); + globalScene.validateAchv(achvs.HIDDEN_ABILITY); } if (pokemon.species.subLegendary) { - scene.validateAchv(achvs.CATCH_SUB_LEGENDARY); + globalScene.validateAchv(achvs.CATCH_SUB_LEGENDARY); } if (pokemon.species.legendary) { - scene.validateAchv(achvs.CATCH_LEGENDARY); + globalScene.validateAchv(achvs.CATCH_LEGENDARY); } if (pokemon.species.mythical) { - scene.validateAchv(achvs.CATCH_MYTHICAL); + globalScene.validateAchv(achvs.CATCH_MYTHICAL); } - scene.gameData.updateSpeciesDexIvs(pokemon.species.getRootSpeciesId(true), pokemon.ivs); - return scene.gameData.setPokemonCaught(pokemon, true, false, false); + globalScene.gameData.updateSpeciesDexIvs(pokemon.species.getRootSpeciesId(true), pokemon.ivs); + return globalScene.gameData.setPokemonCaught(pokemon, true, false, false); } /** @@ -830,12 +832,12 @@ export async function addPokemonDataToDexAndValidateAchievements(scene: BattleSc * @param scene * @param invalidSelectionKey */ -export function isPokemonValidForEncounterOptionSelection(pokemon: Pokemon, scene: BattleScene, invalidSelectionKey: string): string | null { +export function isPokemonValidForEncounterOptionSelection(pokemon: Pokemon, invalidSelectionKey: string): string | null { if (!pokemon.isAllowedInChallenge()) { return i18next.t("partyUiHandler:cantBeUsed", { pokemonName: pokemon.getNameToRender() }) ?? null; } if (!pokemon.isAllowedInBattle()) { - return getEncounterText(scene, invalidSelectionKey) ?? null; + return getEncounterText(invalidSelectionKey) ?? null; } return null; diff --git a/src/data/mystery-encounters/utils/encounter-transformation-sequence.ts b/src/data/mystery-encounters/utils/encounter-transformation-sequence.ts index 424ba15f811..0cb2a695de8 100644 --- a/src/data/mystery-encounters/utils/encounter-transformation-sequence.ts +++ b/src/data/mystery-encounters/utils/encounter-transformation-sequence.ts @@ -1,8 +1,8 @@ -import BattleScene from "#app/battle-scene"; -import { PlayerPokemon } from "#app/field/pokemon"; +import type { PlayerPokemon } from "#app/field/pokemon"; import { getFrameMs } from "#app/utils"; import { cos, sin } from "#app/field/anims"; import { getTypeRgb } from "#app/data/type"; +import { globalScene } from "#app/global-scene"; export enum TransformationScreenPosition { CENTER, @@ -17,10 +17,10 @@ export enum TransformationScreenPosition { * @param transformPokemon * @param screenPosition */ -export function doPokemonTransformationSequence(scene: BattleScene, previousPokemon: PlayerPokemon, transformPokemon: PlayerPokemon, screenPosition: TransformationScreenPosition) { +export function doPokemonTransformationSequence(previousPokemon: PlayerPokemon, transformPokemon: PlayerPokemon, screenPosition: TransformationScreenPosition) { return new Promise(resolve => { - const transformationContainer = scene.fieldUI.getByName("Dream Background") as Phaser.GameObjects.Container; - const transformationBaseBg = scene.add.image(0, 0, "default_bg"); + const transformationContainer = globalScene.fieldUI.getByName("Dream Background") as Phaser.GameObjects.Container; + const transformationBaseBg = globalScene.add.image(0, 0, "default_bg"); transformationBaseBg.setOrigin(0, 0); transformationBaseBg.setVisible(false); transformationContainer.add(transformationBaseBg); @@ -36,8 +36,8 @@ export function doPokemonTransformationSequence(scene: BattleScene, previousPoke const yOffset = screenPosition !== TransformationScreenPosition.CENTER ? -15 : 0; const getPokemonSprite = () => { - const ret = scene.addPokemonSprite(previousPokemon, transformationBaseBg.displayWidth / 2 + xOffset, transformationBaseBg.displayHeight / 2 + yOffset, "pkmn__sub"); - ret.setPipeline(scene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], ignoreTimeTint: true }); + const ret = globalScene.addPokemonSprite(previousPokemon, transformationBaseBg.displayWidth / 2 + xOffset, transformationBaseBg.displayHeight / 2 + yOffset, "pkmn__sub"); + ret.setPipeline(globalScene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], ignoreTimeTint: true }); return ret; }; @@ -61,7 +61,7 @@ export function doPokemonTransformationSequence(scene: BattleScene, previousPoke console.error(`Failed to play animation for ${spriteKey}`, err); } - sprite.setPipeline(scene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], hasShadow: false, teraColor: getTypeRgb(previousPokemon.getTeraType()) }); + sprite.setPipeline(globalScene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], hasShadow: false, teraColor: getTypeRgb(previousPokemon.getTeraType()), isTerastallized: previousPokemon.isTerastallized }); sprite.setPipelineData("ignoreTimeTint", true); sprite.setPipelineData("spriteKey", previousPokemon.getSpriteKey()); sprite.setPipelineData("shiny", previousPokemon.shiny); @@ -94,14 +94,14 @@ export function doPokemonTransformationSequence(scene: BattleScene, previousPoke }); }); - scene.tweens.add({ + globalScene.tweens.add({ targets: pokemonSprite, alpha: 1, ease: "Cubic.easeInOut", duration: 2000, onComplete: () => { - doSpiralUpward(scene, transformationBaseBg, transformationContainer, xOffset, yOffset); - scene.tweens.addCounter({ + doSpiralUpward(transformationBaseBg, transformationContainer, xOffset, yOffset); + globalScene.tweens.addCounter({ from: 0, to: 1, duration: 1000, @@ -110,26 +110,26 @@ export function doPokemonTransformationSequence(scene: BattleScene, previousPoke }, onComplete: () => { pokemonSprite.setVisible(false); - scene.time.delayedCall(700, () => { - doArcDownward(scene, transformationBaseBg, transformationContainer, xOffset, yOffset); - scene.time.delayedCall(1000, () => { + globalScene.time.delayedCall(700, () => { + doArcDownward(transformationBaseBg, transformationContainer, xOffset, yOffset); + globalScene.time.delayedCall(1000, () => { pokemonEvoTintSprite.setScale(0.25); pokemonEvoTintSprite.setVisible(true); - doCycle(scene, 1.5, 6, pokemonTintSprite, pokemonEvoTintSprite).then(() => { + doCycle(1.5, 6, pokemonTintSprite, pokemonEvoTintSprite).then(() => { pokemonEvoSprite.setVisible(true); - doCircleInward(scene, transformationBaseBg, transformationContainer, xOffset, yOffset); + doCircleInward(transformationBaseBg, transformationContainer, xOffset, yOffset); - scene.time.delayedCall(900, () => { - scene.tweens.add({ + globalScene.time.delayedCall(900, () => { + globalScene.tweens.add({ targets: pokemonEvoTintSprite, alpha: 0, duration: 1500, delay: 150, easing: "Sine.easeIn", onComplete: () => { - scene.time.delayedCall(3000, () => { + globalScene.time.delayedCall(3000, () => { resolve(); - scene.tweens.add({ + globalScene.tweens.add({ targets: pokemonEvoSprite, alpha: 0, duration: 2000, @@ -163,17 +163,17 @@ export function doPokemonTransformationSequence(scene: BattleScene, previousPoke * @param xOffset * @param yOffset */ -function doSpiralUpward(scene: BattleScene, transformationBaseBg: Phaser.GameObjects.Image, transformationContainer: Phaser.GameObjects.Container, xOffset: number, yOffset: number) { +function doSpiralUpward(transformationBaseBg: Phaser.GameObjects.Image, transformationContainer: Phaser.GameObjects.Container, xOffset: number, yOffset: number) { let f = 0; - scene.tweens.addCounter({ + globalScene.tweens.addCounter({ repeat: 64, duration: getFrameMs(1), onRepeat: () => { if (f < 64) { if (!(f & 7)) { for (let i = 0; i < 4; i++) { - doSpiralUpwardParticle(scene, (f & 120) * 2 + i * 64, transformationBaseBg, transformationContainer, xOffset, yOffset); + doSpiralUpwardParticle((f & 120) * 2 + i * 64, transformationBaseBg, transformationContainer, xOffset, yOffset); } } f++; @@ -190,17 +190,17 @@ function doSpiralUpward(scene: BattleScene, transformationBaseBg: Phaser.GameObj * @param xOffset * @param yOffset */ -function doArcDownward(scene: BattleScene, transformationBaseBg: Phaser.GameObjects.Image, transformationContainer: Phaser.GameObjects.Container, xOffset: number, yOffset: number) { +function doArcDownward(transformationBaseBg: Phaser.GameObjects.Image, transformationContainer: Phaser.GameObjects.Container, xOffset: number, yOffset: number) { let f = 0; - scene.tweens.addCounter({ + globalScene.tweens.addCounter({ repeat: 96, duration: getFrameMs(1), onRepeat: () => { if (f < 96) { if (f < 6) { for (let i = 0; i < 9; i++) { - doArcDownParticle(scene, i * 16, transformationBaseBg, transformationContainer, xOffset, yOffset); + doArcDownParticle(i * 16, transformationBaseBg, transformationContainer, xOffset, yOffset); } } f++; @@ -217,17 +217,17 @@ function doArcDownward(scene: BattleScene, transformationBaseBg: Phaser.GameObje * @param pokemonTintSprite * @param pokemonEvoTintSprite */ -function doCycle(scene: BattleScene, l: number, lastCycle: number, pokemonTintSprite: Phaser.GameObjects.Sprite, pokemonEvoTintSprite: Phaser.GameObjects.Sprite): Promise { +function doCycle(l: number, lastCycle: number, pokemonTintSprite: Phaser.GameObjects.Sprite, pokemonEvoTintSprite: Phaser.GameObjects.Sprite): Promise { return new Promise(resolve => { const isLastCycle = l === lastCycle; - scene.tweens.add({ + globalScene.tweens.add({ targets: pokemonTintSprite, scale: 0.25, ease: "Cubic.easeInOut", duration: 500 / l, yoyo: !isLastCycle }); - scene.tweens.add({ + globalScene.tweens.add({ targets: pokemonEvoTintSprite, scale: 1, ease: "Cubic.easeInOut", @@ -235,7 +235,7 @@ function doCycle(scene: BattleScene, l: number, lastCycle: number, pokemonTintSp yoyo: !isLastCycle, onComplete: () => { if (l < lastCycle) { - doCycle(scene, l + 0.5, lastCycle, pokemonTintSprite, pokemonEvoTintSprite).then(success => resolve(success)); + doCycle(l + 0.5, lastCycle, pokemonTintSprite, pokemonEvoTintSprite).then(success => resolve(success)); } else { pokemonTintSprite.setVisible(false); resolve(true); @@ -253,20 +253,20 @@ function doCycle(scene: BattleScene, l: number, lastCycle: number, pokemonTintSp * @param xOffset * @param yOffset */ -function doCircleInward(scene: BattleScene, transformationBaseBg: Phaser.GameObjects.Image, transformationContainer: Phaser.GameObjects.Container, xOffset: number, yOffset: number) { +function doCircleInward(transformationBaseBg: Phaser.GameObjects.Image, transformationContainer: Phaser.GameObjects.Container, xOffset: number, yOffset: number) { let f = 0; - scene.tweens.addCounter({ + globalScene.tweens.addCounter({ repeat: 48, duration: getFrameMs(1), onRepeat: () => { if (!f) { for (let i = 0; i < 16; i++) { - doCircleInwardParticle(scene, i * 16, 4, transformationBaseBg, transformationContainer, xOffset, yOffset); + doCircleInwardParticle(i * 16, 4, transformationBaseBg, transformationContainer, xOffset, yOffset); } } else if (f === 32) { for (let i = 0; i < 16; i++) { - doCircleInwardParticle(scene, i * 16, 8, transformationBaseBg, transformationContainer, xOffset, yOffset); + doCircleInwardParticle(i * 16, 8, transformationBaseBg, transformationContainer, xOffset, yOffset); } } f++; @@ -283,15 +283,15 @@ function doCircleInward(scene: BattleScene, transformationBaseBg: Phaser.GameObj * @param xOffset * @param yOffset */ -function doSpiralUpwardParticle(scene: BattleScene, trigIndex: number, transformationBaseBg: Phaser.GameObjects.Image, transformationContainer: Phaser.GameObjects.Container, xOffset: number, yOffset: number) { +function doSpiralUpwardParticle(trigIndex: number, transformationBaseBg: Phaser.GameObjects.Image, transformationContainer: Phaser.GameObjects.Container, xOffset: number, yOffset: number) { const initialX = transformationBaseBg.displayWidth / 2 + xOffset; - const particle = scene.add.image(initialX, 0, "evo_sparkle"); + const particle = globalScene.add.image(initialX, 0, "evo_sparkle"); transformationContainer.add(particle); let f = 0; let amp = 48; - const particleTimer = scene.tweens.addCounter({ + const particleTimer = globalScene.tweens.addCounter({ repeat: -1, duration: getFrameMs(1), onRepeat: () => { @@ -328,16 +328,16 @@ function doSpiralUpwardParticle(scene: BattleScene, trigIndex: number, transform * @param xOffset * @param yOffset */ -function doArcDownParticle(scene: BattleScene, trigIndex: number, transformationBaseBg: Phaser.GameObjects.Image, transformationContainer: Phaser.GameObjects.Container, xOffset: number, yOffset: number) { +function doArcDownParticle(trigIndex: number, transformationBaseBg: Phaser.GameObjects.Image, transformationContainer: Phaser.GameObjects.Container, xOffset: number, yOffset: number) { const initialX = transformationBaseBg.displayWidth / 2 + xOffset; - const particle = scene.add.image(initialX, 0, "evo_sparkle"); + const particle = globalScene.add.image(initialX, 0, "evo_sparkle"); particle.setScale(0.5); transformationContainer.add(particle); let f = 0; let amp = 8; - const particleTimer = scene.tweens.addCounter({ + const particleTimer = globalScene.tweens.addCounter({ repeat: -1, duration: getFrameMs(1), onRepeat: () => { @@ -371,15 +371,15 @@ function doArcDownParticle(scene: BattleScene, trigIndex: number, transformation * @param xOffset * @param yOffset */ -function doCircleInwardParticle(scene: BattleScene, trigIndex: number, speed: number, transformationBaseBg: Phaser.GameObjects.Image, transformationContainer: Phaser.GameObjects.Container, xOffset: number, yOffset: number) { +function doCircleInwardParticle(trigIndex: number, speed: number, transformationBaseBg: Phaser.GameObjects.Image, transformationContainer: Phaser.GameObjects.Container, xOffset: number, yOffset: number) { const initialX = transformationBaseBg.displayWidth / 2 + xOffset; const initialY = transformationBaseBg.displayHeight / 2 + yOffset; - const particle = scene.add.image(initialX, initialY, "evo_sparkle"); + const particle = globalScene.add.image(initialX, initialY, "evo_sparkle"); transformationContainer.add(particle); let amp = 120; - const particleTimer = scene.tweens.addCounter({ + const particleTimer = globalScene.tweens.addCounter({ repeat: -1, duration: getFrameMs(1), onRepeat: () => { diff --git a/src/data/pokeball.ts b/src/data/pokeball.ts index 4c9fc719a4d..7cd9f061cdd 100644 --- a/src/data/pokeball.ts +++ b/src/data/pokeball.ts @@ -1,10 +1,10 @@ +import { globalScene } from "#app/global-scene"; import { CriticalCatchChanceBoosterModifier } from "#app/modifier/modifier"; import { NumberHolder } from "#app/utils"; import { PokeballType } from "#enums/pokeball"; -import BattleScene from "../battle-scene"; import i18next from "i18next"; -export const MAX_PER_TYPE_POKEBALLS: integer = 99; +export const MAX_PER_TYPE_POKEBALLS: number = 99; export function getPokeballAtlasKey(type: PokeballType): string { switch (type) { @@ -85,18 +85,17 @@ export function getPokeballTintColor(type: PokeballType): number { /** * Gets the critical capture chance based on number of mons registered in Dex and modified {@link https://bulbapedia.bulbagarden.net/wiki/Catch_rate Catch rate} * Formula from {@link https://www.dragonflycave.com/mechanics/gen-vi-vii-capturing Dragonfly Cave Gen 6 Capture Mechanics page} - * @param scene {@linkcode BattleScene} current BattleScene * @param modifiedCatchRate the modified catch rate as calculated in {@linkcode AttemptCapturePhase} * @returns the chance of getting a critical capture, out of 256 */ -export function getCriticalCaptureChance(scene: BattleScene, modifiedCatchRate: number): number { - if (scene.gameMode.isFreshStartChallenge()) { +export function getCriticalCaptureChance(modifiedCatchRate: number): number { + if (globalScene.gameMode.isFreshStartChallenge()) { return 0; } - const dexCount = scene.gameData.getSpeciesCount(d => !!d.caughtAttr); + const dexCount = globalScene.gameData.getSpeciesCount(d => !!d.caughtAttr); const catchingCharmMultiplier = new NumberHolder(1); - scene.findModifier(m => m instanceof CriticalCatchChanceBoosterModifier)?.apply(catchingCharmMultiplier); - const dexMultiplier = scene.gameMode.isDaily || dexCount > 800 ? 2.5 + globalScene.findModifier(m => m instanceof CriticalCatchChanceBoosterModifier)?.apply(catchingCharmMultiplier); + const dexMultiplier = globalScene.gameMode.isDaily || dexCount > 800 ? 2.5 : dexCount > 600 ? 2 : dexCount > 400 ? 1.5 : dexCount > 200 ? 1 @@ -105,7 +104,7 @@ export function getCriticalCaptureChance(scene: BattleScene, modifiedCatchRate: return Math.floor(catchingCharmMultiplier.value * dexMultiplier * Math.min(255, modifiedCatchRate) / 6); } -export function doPokeballBounceAnim(scene: BattleScene, pokeball: Phaser.GameObjects.Sprite, y1: number, y2: number, baseBounceDuration: number, callback: Function, isCritical: boolean = false) { +export function doPokeballBounceAnim(pokeball: Phaser.GameObjects.Sprite, y1: number, y2: number, baseBounceDuration: number, callback: Function, isCritical: boolean = false) { let bouncePower = 1; let bounceYOffset = y1; let bounceY = y2; @@ -116,13 +115,13 @@ export function doPokeballBounceAnim(scene: BattleScene, pokeball: Phaser.GameOb let critShakes = 4; const doBounce = () => { - scene.tweens.add({ + globalScene.tweens.add({ targets: pokeball, y: y2, duration: bouncePower * baseBounceDuration, ease: "Cubic.easeIn", onComplete: () => { - scene.playSound("se/pb_bounce_1", { volume: bouncePower }); + globalScene.playSound("se/pb_bounce_1", { volume: bouncePower }); bouncePower = bouncePower > 0.01 ? bouncePower * 0.5 : 0; @@ -130,7 +129,7 @@ export function doPokeballBounceAnim(scene: BattleScene, pokeball: Phaser.GameOb bounceYOffset = yd * bouncePower; bounceY = y2 - bounceYOffset; - scene.tweens.add({ + globalScene.tweens.add({ targets: pokeball, y: bounceY, duration: bouncePower * baseBounceDuration, @@ -145,13 +144,13 @@ export function doPokeballBounceAnim(scene: BattleScene, pokeball: Phaser.GameOb }; const doCritShake = () => { - scene.tweens.add({ + globalScene.tweens.add({ targets: pokeball, x: x2, duration: 125, ease: "Linear", onComplete: () => { - scene.tweens.add({ + globalScene.tweens.add({ targets: pokeball, x: x1, duration: 125, @@ -161,12 +160,12 @@ export function doPokeballBounceAnim(scene: BattleScene, pokeball: Phaser.GameOb if (critShakes > 0) { doCritShake(); } else { - scene.tweens.add({ + globalScene.tweens.add({ targets: pokeball, x: x0, duration: 60, ease: "Linear", - onComplete: () => scene.time.delayedCall(500, doBounce) + onComplete: () => globalScene.time.delayedCall(500, doBounce) }); } } @@ -176,7 +175,7 @@ export function doPokeballBounceAnim(scene: BattleScene, pokeball: Phaser.GameOb }; if (isCritical) { - scene.time.delayedCall(500, doCritShake); + globalScene.time.delayedCall(500, doCritShake); } else { doBounce(); } diff --git a/src/data/pokemon-forms.ts b/src/data/pokemon-forms.ts index a1b2d7896d7..46dfbfecae2 100644 --- a/src/data/pokemon-forms.ts +++ b/src/data/pokemon-forms.ts @@ -1,18 +1,18 @@ -import { PokemonFormChangeItemModifier, TerastallizeModifier } from "../modifier/modifier"; -import Pokemon from "../field/pokemon"; +import { PokemonFormChangeItemModifier } from "../modifier/modifier"; +import type Pokemon from "../field/pokemon"; import { StatusEffect } from "#enums/status-effect"; import { MoveCategory, allMoves } from "./move"; -import { Type } from "#enums/type"; -import { Constructor, nil } from "#app/utils"; +import type { Constructor, nil } from "#app/utils"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import { TimeOfDay } from "#enums/time-of-day"; +import type { TimeOfDay } from "#enums/time-of-day"; import { getPokemonNameWithAffix } from "#app/messages"; import i18next from "i18next"; import { WeatherType } from "#enums/weather-type"; import { Challenges } from "#app/enums/challenges"; import { SpeciesFormKey } from "#enums/species-form-key"; +import { globalScene } from "#app/global-scene"; export enum FormChangeItem { NONE, @@ -211,6 +211,8 @@ export class SpeciesFormChangeCondition { } export abstract class SpeciesFormChangeTrigger { + public description: string = ""; + canChange(pokemon: Pokemon): boolean { return true; } @@ -221,16 +223,19 @@ export abstract class SpeciesFormChangeTrigger { } export class SpeciesFormChangeManualTrigger extends SpeciesFormChangeTrigger { - canChange(pokemon: Pokemon): boolean { - return true; - } +} + +export class SpeciesFormChangeAbilityTrigger extends SpeciesFormChangeTrigger { + public description: string = i18next.t("pokemonEvolutions:Forms.ability"); } export class SpeciesFormChangeCompoundTrigger { + public description: string = ""; public triggers: SpeciesFormChangeTrigger[]; constructor(...triggers: SpeciesFormChangeTrigger[]) { this.triggers = triggers; + this.description = this.triggers.filter(trigger => trigger?.description?.length > 0).map(trigger => trigger.description).join(", "); } canChange(pokemon: Pokemon): boolean { @@ -256,10 +261,13 @@ export class SpeciesFormChangeItemTrigger extends SpeciesFormChangeTrigger { super(); this.item = item; this.active = active; + this.description = this.active ? + i18next.t("pokemonEvolutions:Forms.item", { item: i18next.t(`modifierType:FormChangeItem.${FormChangeItem[this.item]}`) }) : + i18next.t("pokemonEvolutions:Forms.deactivateItem", { item: i18next.t(`modifierType:FormChangeItem.${FormChangeItem[this.item]}`) }); } canChange(pokemon: Pokemon): boolean { - return !!pokemon.scene.findModifier(m => m instanceof PokemonFormChangeItemModifier && m.pokemonId === pokemon.id && m.formChangeItem === this.item && m.active === this.active); + return !!globalScene.findModifier(m => m instanceof PokemonFormChangeItemModifier && m.pokemonId === pokemon.id && m.formChangeItem === this.item && m.active === this.active); } } @@ -269,10 +277,11 @@ export class SpeciesFormChangeTimeOfDayTrigger extends SpeciesFormChangeTrigger constructor(...timesOfDay: TimeOfDay[]) { super(); this.timesOfDay = timesOfDay; + this.description = i18next.t("pokemonEvolutions:Forms.timeOfDay"); } canChange(pokemon: Pokemon): boolean { - return this.timesOfDay.indexOf(pokemon.scene.arena.getTimeOfDay()) > -1; + return this.timesOfDay.indexOf(globalScene.arena.getTimeOfDay()) > -1; } } @@ -282,6 +291,7 @@ export class SpeciesFormChangeActiveTrigger extends SpeciesFormChangeTrigger { constructor(active: boolean = false) { super(); this.active = active; + this.description = this.active ? i18next.t("pokemonEvolutions:Forms.enter") : i18next.t("pokemonEvolutions:Forms.leave"); } canChange(pokemon: Pokemon): boolean { @@ -300,6 +310,7 @@ export class SpeciesFormChangeStatusEffectTrigger extends SpeciesFormChangeTrigg } this.statusEffects = statusEffects; this.invert = invert; + this.description = i18next.t("pokemonEvolutions:Forms.statusEffect"); } canChange(pokemon: Pokemon): boolean { @@ -315,6 +326,9 @@ export class SpeciesFormChangeMoveLearnedTrigger extends SpeciesFormChangeTrigge super(); this.move = move; this.known = known; + const moveKey = Moves[this.move].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join("") as unknown as string; + this.description = known ? i18next.t("pokemonEvolutions:Forms.moveLearned", { move: i18next.t(`move:${moveKey}.name`) }) : + i18next.t("pokemonEvolutions:Forms.moveForgotten", { move: i18next.t(`move:${moveKey}.name`) }); } canChange(pokemon: Pokemon): boolean { @@ -334,13 +348,17 @@ export abstract class SpeciesFormChangeMoveTrigger extends SpeciesFormChangeTrig } export class SpeciesFormChangePreMoveTrigger extends SpeciesFormChangeMoveTrigger { + description = i18next.t("pokemonEvolutions:Forms.preMove"); + canChange(pokemon: Pokemon): boolean { - const command = pokemon.scene.currentBattle.turnCommands[pokemon.getBattlerIndex()]; + const command = globalScene.currentBattle.turnCommands[pokemon.getBattlerIndex()]; return !!command?.move && this.movePredicate(command.move.move) === this.used; } } export class SpeciesFormChangePostMoveTrigger extends SpeciesFormChangeMoveTrigger { + description = i18next.t("pokemonEvolutions:Forms.postMove"); + canChange(pokemon: Pokemon): boolean { return pokemon.summonData && !!pokemon.getLastXMoves(1).filter(m => this.movePredicate(m.move)).length === this.used; } @@ -348,7 +366,7 @@ export class SpeciesFormChangePostMoveTrigger extends SpeciesFormChangeMoveTrigg export class MeloettaFormChangePostMoveTrigger extends SpeciesFormChangePostMoveTrigger { override canChange(pokemon: Pokemon): boolean { - if (pokemon.scene.gameMode.hasChallenge(Challenges.SINGLE_TYPE)) { + if (globalScene.gameMode.hasChallenge(Challenges.SINGLE_TYPE)) { return false; } else { // Meloetta will not transform if it has the ability Sheer Force when using Relic Song @@ -366,10 +384,11 @@ export class SpeciesDefaultFormMatchTrigger extends SpeciesFormChangeTrigger { constructor(formKey: string) { super(); this.formKey = formKey; + this.description = ""; } canChange(pokemon: Pokemon): boolean { - return this.formKey === pokemon.species.forms[pokemon.scene.getSpeciesFormIndex(pokemon.species, pokemon.gender, pokemon.getNature(), true)].formKey; + return this.formKey === pokemon.species.forms[globalScene.getSpeciesFormIndex(pokemon.species, pokemon.gender, pokemon.getNature(), true)].formKey; } } @@ -379,22 +398,7 @@ export class SpeciesDefaultFormMatchTrigger extends SpeciesFormChangeTrigger { * @extends SpeciesFormChangeTrigger */ export class SpeciesFormChangeTeraTrigger extends SpeciesFormChangeTrigger { - /** The Tera type that triggers the form change */ - private teraType: Type; - - constructor(teraType: Type) { - super(); - this.teraType = teraType; - } - - /** - * Checks if the associated Pokémon has the required Tera Shard that matches with the associated Tera type. - * @param {Pokemon} pokemon the Pokémon that is trying to do the form change - * @returns `true` if the Pokémon can change forms, `false` otherwise - */ - canChange(pokemon: Pokemon): boolean { - return !!pokemon.scene.findModifier(m => m instanceof TerastallizeModifier && m.pokemonId === pokemon.id && m.teraType === this.teraType); - } + description = i18next.t("pokemonEvolutions:Forms.tera" ); } /** @@ -403,9 +407,7 @@ export class SpeciesFormChangeTeraTrigger extends SpeciesFormChangeTrigger { * @extends SpeciesFormChangeTrigger */ export class SpeciesFormChangeLapseTeraTrigger extends SpeciesFormChangeTrigger { - canChange(pokemon: Pokemon): boolean { - return !!pokemon.scene.findModifier(m => m instanceof TerastallizeModifier && m.pokemonId === pokemon.id); - } + description = i18next.t("pokemonEvolutions:Forms.teraLapse"); } /** @@ -423,6 +425,7 @@ export class SpeciesFormChangeWeatherTrigger extends SpeciesFormChangeTrigger { super(); this.ability = ability; this.weathers = weathers; + this.description = i18next.t("pokemonEvolutions:Forms.weather"); } /** @@ -432,8 +435,8 @@ export class SpeciesFormChangeWeatherTrigger extends SpeciesFormChangeTrigger { * @returns `true` if the Pokemon can change forms, `false` otherwise */ canChange(pokemon: Pokemon): boolean { - const currentWeather = pokemon.scene.arena.weather?.weatherType ?? WeatherType.NONE; - const isWeatherSuppressed = pokemon.scene.arena.weather?.isEffectSuppressed(pokemon.scene); + const currentWeather = globalScene.arena.weather?.weatherType ?? WeatherType.NONE; + const isWeatherSuppressed = globalScene.arena.weather?.isEffectSuppressed(); const isAbilitySuppressed = pokemon.summonData.abilitySuppressed; return !isAbilitySuppressed && !isWeatherSuppressed && (pokemon.hasAbility(this.ability) && this.weathers.includes(currentWeather)); @@ -456,6 +459,7 @@ export class SpeciesFormChangeRevertWeatherFormTrigger extends SpeciesFormChange super(); this.ability = ability; this.weathers = weathers; + this.description = i18next.t("pokemonEvolutions:Forms.weatherRevert"); } /** @@ -466,8 +470,8 @@ export class SpeciesFormChangeRevertWeatherFormTrigger extends SpeciesFormChange */ canChange(pokemon: Pokemon): boolean { if (pokemon.hasAbility(this.ability, false, true)) { - const currentWeather = pokemon.scene.arena.weather?.weatherType ?? WeatherType.NONE; - const isWeatherSuppressed = pokemon.scene.arena.weather?.isEffectSuppressed(pokemon.scene); + const currentWeather = globalScene.arena.weather?.weatherType ?? WeatherType.NONE; + const isWeatherSuppressed = globalScene.arena.weather?.isEffectSuppressed(); const isAbilitySuppressed = pokemon.summonData.abilitySuppressed; const summonDataAbility = pokemon.summonData.ability; const isAbilityChanged = summonDataAbility !== this.ability && summonDataAbility !== Abilities.NONE; @@ -510,7 +514,7 @@ export function getSpeciesFormChangeMessage(pokemon: Pokemon, formChange: Specie * @returns A {@linkcode SpeciesFormChangeCondition} checking if that species is registered as caught */ function getSpeciesDependentFormChangeCondition(species: Species): SpeciesFormChangeCondition { - return new SpeciesFormChangeCondition(p => !!p.scene.gameData.dexData[species].caughtAttr); + return new SpeciesFormChangeCondition(p => !!globalScene.gameData.dexData[species].caughtAttr); } interface PokemonFormChanges { @@ -731,27 +735,27 @@ export const pokemonFormChanges: PokemonFormChanges = { new SpeciesFormChange(Species.SHAYMIN, "land", "sky", new SpeciesFormChangeItemTrigger(FormChangeItem.GRACIDEA)), ], [Species.ARCEUS]: [ - new SpeciesFormChange(Species.ARCEUS, "normal", "fighting", new SpeciesFormChangeItemTrigger(FormChangeItem.FIST_PLATE)), - new SpeciesFormChange(Species.ARCEUS, "normal", "flying", new SpeciesFormChangeItemTrigger(FormChangeItem.SKY_PLATE)), - new SpeciesFormChange(Species.ARCEUS, "normal", "poison", new SpeciesFormChangeItemTrigger(FormChangeItem.TOXIC_PLATE)), - new SpeciesFormChange(Species.ARCEUS, "normal", "ground", new SpeciesFormChangeItemTrigger(FormChangeItem.EARTH_PLATE)), - new SpeciesFormChange(Species.ARCEUS, "normal", "rock", new SpeciesFormChangeItemTrigger(FormChangeItem.STONE_PLATE)), - new SpeciesFormChange(Species.ARCEUS, "normal", "bug", new SpeciesFormChangeItemTrigger(FormChangeItem.INSECT_PLATE)), - new SpeciesFormChange(Species.ARCEUS, "normal", "ghost", new SpeciesFormChangeItemTrigger(FormChangeItem.SPOOKY_PLATE)), - new SpeciesFormChange(Species.ARCEUS, "normal", "steel", new SpeciesFormChangeItemTrigger(FormChangeItem.IRON_PLATE)), - new SpeciesFormChange(Species.ARCEUS, "normal", "fire", new SpeciesFormChangeItemTrigger(FormChangeItem.FLAME_PLATE)), - new SpeciesFormChange(Species.ARCEUS, "normal", "water", new SpeciesFormChangeItemTrigger(FormChangeItem.SPLASH_PLATE)), - new SpeciesFormChange(Species.ARCEUS, "normal", "grass", new SpeciesFormChangeItemTrigger(FormChangeItem.MEADOW_PLATE)), - new SpeciesFormChange(Species.ARCEUS, "normal", "electric", new SpeciesFormChangeItemTrigger(FormChangeItem.ZAP_PLATE)), - new SpeciesFormChange(Species.ARCEUS, "normal", "psychic", new SpeciesFormChangeItemTrigger(FormChangeItem.MIND_PLATE)), - new SpeciesFormChange(Species.ARCEUS, "normal", "ice", new SpeciesFormChangeItemTrigger(FormChangeItem.ICICLE_PLATE)), - new SpeciesFormChange(Species.ARCEUS, "normal", "dragon", new SpeciesFormChangeItemTrigger(FormChangeItem.DRACO_PLATE)), - new SpeciesFormChange(Species.ARCEUS, "normal", "dark", new SpeciesFormChangeItemTrigger(FormChangeItem.DREAD_PLATE)), - new SpeciesFormChange(Species.ARCEUS, "normal", "fairy", new SpeciesFormChangeItemTrigger(FormChangeItem.PIXIE_PLATE)) + new SpeciesFormChange(Species.ARCEUS, "normal", "fighting", new SpeciesFormChangeItemTrigger(FormChangeItem.FIST_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), + new SpeciesFormChange(Species.ARCEUS, "normal", "flying", new SpeciesFormChangeItemTrigger(FormChangeItem.SKY_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), + new SpeciesFormChange(Species.ARCEUS, "normal", "poison", new SpeciesFormChangeItemTrigger(FormChangeItem.TOXIC_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), + new SpeciesFormChange(Species.ARCEUS, "normal", "ground", new SpeciesFormChangeItemTrigger(FormChangeItem.EARTH_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), + new SpeciesFormChange(Species.ARCEUS, "normal", "rock", new SpeciesFormChangeItemTrigger(FormChangeItem.STONE_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), + new SpeciesFormChange(Species.ARCEUS, "normal", "bug", new SpeciesFormChangeItemTrigger(FormChangeItem.INSECT_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), + new SpeciesFormChange(Species.ARCEUS, "normal", "ghost", new SpeciesFormChangeItemTrigger(FormChangeItem.SPOOKY_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), + new SpeciesFormChange(Species.ARCEUS, "normal", "steel", new SpeciesFormChangeItemTrigger(FormChangeItem.IRON_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), + new SpeciesFormChange(Species.ARCEUS, "normal", "fire", new SpeciesFormChangeItemTrigger(FormChangeItem.FLAME_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), + new SpeciesFormChange(Species.ARCEUS, "normal", "water", new SpeciesFormChangeItemTrigger(FormChangeItem.SPLASH_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), + new SpeciesFormChange(Species.ARCEUS, "normal", "grass", new SpeciesFormChangeItemTrigger(FormChangeItem.MEADOW_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), + new SpeciesFormChange(Species.ARCEUS, "normal", "electric", new SpeciesFormChangeItemTrigger(FormChangeItem.ZAP_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), + new SpeciesFormChange(Species.ARCEUS, "normal", "psychic", new SpeciesFormChangeItemTrigger(FormChangeItem.MIND_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), + new SpeciesFormChange(Species.ARCEUS, "normal", "ice", new SpeciesFormChangeItemTrigger(FormChangeItem.ICICLE_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), + new SpeciesFormChange(Species.ARCEUS, "normal", "dragon", new SpeciesFormChangeItemTrigger(FormChangeItem.DRACO_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), + new SpeciesFormChange(Species.ARCEUS, "normal", "dark", new SpeciesFormChangeItemTrigger(FormChangeItem.DREAD_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), + new SpeciesFormChange(Species.ARCEUS, "normal", "fairy", new SpeciesFormChangeItemTrigger(FormChangeItem.PIXIE_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), ], [Species.DARMANITAN]: [ - new SpeciesFormChange(Species.DARMANITAN, "", "zen", new SpeciesFormChangeManualTrigger(), true), - new SpeciesFormChange(Species.DARMANITAN, "zen", "", new SpeciesFormChangeManualTrigger(), true) + new SpeciesFormChange(Species.DARMANITAN, "", "zen", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(Species.DARMANITAN, "zen", "", new SpeciesFormChangeAbilityTrigger(), true) ], [Species.GARBODOR]: [ new SpeciesFormChange(Species.GARBODOR, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) @@ -770,8 +774,8 @@ export const pokemonFormChanges: PokemonFormChanges = { new SpeciesFormChange(Species.KYUREM, "", "white", new SpeciesFormChangeItemTrigger(FormChangeItem.LIGHT_STONE), false, getSpeciesDependentFormChangeCondition(Species.RESHIRAM)) ], [Species.KELDEO]: [ - new SpeciesFormChange(Species.KELDEO, "ordinary", "resolute", new SpeciesFormChangeMoveLearnedTrigger(Moves.SECRET_SWORD)), - new SpeciesFormChange(Species.KELDEO, "resolute", "ordinary", new SpeciesFormChangeMoveLearnedTrigger(Moves.SECRET_SWORD, false)) + new SpeciesFormChange(Species.KELDEO, "ordinary", "resolute", new SpeciesFormChangeMoveLearnedTrigger(Moves.SECRET_SWORD), false, new SpeciesFormChangeCondition(() => globalScene.gameMode.isDaily !== true)), + new SpeciesFormChange(Species.KELDEO, "resolute", "ordinary", new SpeciesFormChangeMoveLearnedTrigger(Moves.SECRET_SWORD, false), false, new SpeciesFormChangeCondition(() => globalScene.gameMode.isDaily !== true)) ], [Species.MELOETTA]: [ new SpeciesFormChange(Species.MELOETTA, "aria", "pirouette", new MeloettaFormChangePostMoveTrigger(Moves.RELIC_SONG), true), @@ -784,12 +788,12 @@ export const pokemonFormChanges: PokemonFormChanges = { new SpeciesFormChange(Species.GENESECT, "", "douse", new SpeciesFormChangeItemTrigger(FormChangeItem.DOUSE_DRIVE)) ], [Species.GRENINJA]: [ - new SpeciesFormChange(Species.GRENINJA, "battle-bond", "ash", new SpeciesFormChangeManualTrigger(), true), - new SpeciesFormChange(Species.GRENINJA, "ash", "battle-bond", new SpeciesFormChangeManualTrigger(), true) + new SpeciesFormChange(Species.GRENINJA, "battle-bond", "ash", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(Species.GRENINJA, "ash", "battle-bond", new SpeciesFormChangeAbilityTrigger(), true) ], [Species.PALAFIN] : [ - new SpeciesFormChange(Species.PALAFIN, "zero", "hero", new SpeciesFormChangeManualTrigger(), true), - new SpeciesFormChange(Species.PALAFIN, "hero", "zero", new SpeciesFormChangeManualTrigger(), true) + new SpeciesFormChange(Species.PALAFIN, "zero", "hero", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(Species.PALAFIN, "hero", "zero", new SpeciesFormChangeAbilityTrigger(), true) ], [Species.AEGISLASH]: [ new SpeciesFormChange(Species.AEGISLASH, "blade", "shield", new SpeciesFormChangePreMoveTrigger(Moves.KINGS_SHIELD), true, new SpeciesFormChangeCondition(p => p.hasAbility(Abilities.STANCE_CHANGE))), @@ -801,10 +805,10 @@ export const pokemonFormChanges: PokemonFormChanges = { new SpeciesFormChange(Species.XERNEAS, "active", "neutral", new SpeciesFormChangeActiveTrigger(false), true) ], [Species.ZYGARDE]: [ - new SpeciesFormChange(Species.ZYGARDE, "50-pc", "complete", new SpeciesFormChangeManualTrigger(), true), - new SpeciesFormChange(Species.ZYGARDE, "complete", "50-pc", new SpeciesFormChangeManualTrigger(), true), - new SpeciesFormChange(Species.ZYGARDE, "10-pc", "10-complete", new SpeciesFormChangeManualTrigger(), true), - new SpeciesFormChange(Species.ZYGARDE, "10-complete", "10-pc", new SpeciesFormChangeManualTrigger(), true) + new SpeciesFormChange(Species.ZYGARDE, "50-pc", "complete", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(Species.ZYGARDE, "complete", "50-pc", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(Species.ZYGARDE, "10-pc", "10-complete", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(Species.ZYGARDE, "10-complete", "10-pc", new SpeciesFormChangeAbilityTrigger(), true) ], [Species.DIANCIE]: [ new SpeciesFormChange(Species.DIANCIE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.DIANCITE)) @@ -813,47 +817,47 @@ export const pokemonFormChanges: PokemonFormChanges = { new SpeciesFormChange(Species.HOOPA, "", "unbound", new SpeciesFormChangeItemTrigger(FormChangeItem.PRISON_BOTTLE)) ], [Species.WISHIWASHI]: [ - new SpeciesFormChange(Species.WISHIWASHI, "", "school", new SpeciesFormChangeManualTrigger(), true), - new SpeciesFormChange(Species.WISHIWASHI, "school", "", new SpeciesFormChangeManualTrigger(), true) + new SpeciesFormChange(Species.WISHIWASHI, "", "school", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(Species.WISHIWASHI, "school", "", new SpeciesFormChangeAbilityTrigger(), true) ], [Species.SILVALLY]: [ - new SpeciesFormChange(Species.SILVALLY, "normal", "fighting", new SpeciesFormChangeItemTrigger(FormChangeItem.FIGHTING_MEMORY)), - new SpeciesFormChange(Species.SILVALLY, "normal", "flying", new SpeciesFormChangeItemTrigger(FormChangeItem.FLYING_MEMORY)), - new SpeciesFormChange(Species.SILVALLY, "normal", "poison", new SpeciesFormChangeItemTrigger(FormChangeItem.POISON_MEMORY)), - new SpeciesFormChange(Species.SILVALLY, "normal", "ground", new SpeciesFormChangeItemTrigger(FormChangeItem.GROUND_MEMORY)), - new SpeciesFormChange(Species.SILVALLY, "normal", "rock", new SpeciesFormChangeItemTrigger(FormChangeItem.ROCK_MEMORY)), - new SpeciesFormChange(Species.SILVALLY, "normal", "bug", new SpeciesFormChangeItemTrigger(FormChangeItem.BUG_MEMORY)), - new SpeciesFormChange(Species.SILVALLY, "normal", "ghost", new SpeciesFormChangeItemTrigger(FormChangeItem.GHOST_MEMORY)), - new SpeciesFormChange(Species.SILVALLY, "normal", "steel", new SpeciesFormChangeItemTrigger(FormChangeItem.STEEL_MEMORY)), - new SpeciesFormChange(Species.SILVALLY, "normal", "fire", new SpeciesFormChangeItemTrigger(FormChangeItem.FIRE_MEMORY)), - new SpeciesFormChange(Species.SILVALLY, "normal", "water", new SpeciesFormChangeItemTrigger(FormChangeItem.WATER_MEMORY)), - new SpeciesFormChange(Species.SILVALLY, "normal", "grass", new SpeciesFormChangeItemTrigger(FormChangeItem.GRASS_MEMORY)), - new SpeciesFormChange(Species.SILVALLY, "normal", "electric", new SpeciesFormChangeItemTrigger(FormChangeItem.ELECTRIC_MEMORY)), - new SpeciesFormChange(Species.SILVALLY, "normal", "psychic", new SpeciesFormChangeItemTrigger(FormChangeItem.PSYCHIC_MEMORY)), - new SpeciesFormChange(Species.SILVALLY, "normal", "ice", new SpeciesFormChangeItemTrigger(FormChangeItem.ICE_MEMORY)), - new SpeciesFormChange(Species.SILVALLY, "normal", "dragon", new SpeciesFormChangeItemTrigger(FormChangeItem.DRAGON_MEMORY)), - new SpeciesFormChange(Species.SILVALLY, "normal", "dark", new SpeciesFormChangeItemTrigger(FormChangeItem.DARK_MEMORY)), - new SpeciesFormChange(Species.SILVALLY, "normal", "fairy", new SpeciesFormChangeItemTrigger(FormChangeItem.FAIRY_MEMORY)) + new SpeciesFormChange(Species.SILVALLY, "normal", "fighting", new SpeciesFormChangeItemTrigger(FormChangeItem.FIGHTING_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))), + new SpeciesFormChange(Species.SILVALLY, "normal", "flying", new SpeciesFormChangeItemTrigger(FormChangeItem.FLYING_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))), + new SpeciesFormChange(Species.SILVALLY, "normal", "poison", new SpeciesFormChangeItemTrigger(FormChangeItem.POISON_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))), + new SpeciesFormChange(Species.SILVALLY, "normal", "ground", new SpeciesFormChangeItemTrigger(FormChangeItem.GROUND_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))), + new SpeciesFormChange(Species.SILVALLY, "normal", "rock", new SpeciesFormChangeItemTrigger(FormChangeItem.ROCK_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))), + new SpeciesFormChange(Species.SILVALLY, "normal", "bug", new SpeciesFormChangeItemTrigger(FormChangeItem.BUG_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))), + new SpeciesFormChange(Species.SILVALLY, "normal", "ghost", new SpeciesFormChangeItemTrigger(FormChangeItem.GHOST_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))), + new SpeciesFormChange(Species.SILVALLY, "normal", "steel", new SpeciesFormChangeItemTrigger(FormChangeItem.STEEL_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))), + new SpeciesFormChange(Species.SILVALLY, "normal", "fire", new SpeciesFormChangeItemTrigger(FormChangeItem.FIRE_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))), + new SpeciesFormChange(Species.SILVALLY, "normal", "water", new SpeciesFormChangeItemTrigger(FormChangeItem.WATER_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))), + new SpeciesFormChange(Species.SILVALLY, "normal", "grass", new SpeciesFormChangeItemTrigger(FormChangeItem.GRASS_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))), + new SpeciesFormChange(Species.SILVALLY, "normal", "electric", new SpeciesFormChangeItemTrigger(FormChangeItem.ELECTRIC_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))), + new SpeciesFormChange(Species.SILVALLY, "normal", "psychic", new SpeciesFormChangeItemTrigger(FormChangeItem.PSYCHIC_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))), + new SpeciesFormChange(Species.SILVALLY, "normal", "ice", new SpeciesFormChangeItemTrigger(FormChangeItem.ICE_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))), + new SpeciesFormChange(Species.SILVALLY, "normal", "dragon", new SpeciesFormChangeItemTrigger(FormChangeItem.DRAGON_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))), + new SpeciesFormChange(Species.SILVALLY, "normal", "dark", new SpeciesFormChangeItemTrigger(FormChangeItem.DARK_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))), + new SpeciesFormChange(Species.SILVALLY, "normal", "fairy", new SpeciesFormChangeItemTrigger(FormChangeItem.FAIRY_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))) ], [Species.MINIOR]: [ - new SpeciesFormChange(Species.MINIOR, "red-meteor", "red", new SpeciesFormChangeManualTrigger(), true), - new SpeciesFormChange(Species.MINIOR, "red", "red-meteor", new SpeciesFormChangeManualTrigger(), true), - new SpeciesFormChange(Species.MINIOR, "orange-meteor", "orange", new SpeciesFormChangeManualTrigger(), true), - new SpeciesFormChange(Species.MINIOR, "orange", "orange-meteor", new SpeciesFormChangeManualTrigger(), true), - new SpeciesFormChange(Species.MINIOR, "yellow-meteor", "yellow", new SpeciesFormChangeManualTrigger(), true), - new SpeciesFormChange(Species.MINIOR, "yellow", "yellow-meteor", new SpeciesFormChangeManualTrigger(), true), - new SpeciesFormChange(Species.MINIOR, "green-meteor", "green", new SpeciesFormChangeManualTrigger(), true), - new SpeciesFormChange(Species.MINIOR, "green", "green-meteor", new SpeciesFormChangeManualTrigger(), true), - new SpeciesFormChange(Species.MINIOR, "blue-meteor", "blue", new SpeciesFormChangeManualTrigger(), true), - new SpeciesFormChange(Species.MINIOR, "blue", "blue-meteor", new SpeciesFormChangeManualTrigger(), true), - new SpeciesFormChange(Species.MINIOR, "indigo-meteor", "indigo", new SpeciesFormChangeManualTrigger(), true), - new SpeciesFormChange(Species.MINIOR, "indigo", "indigo-meteor", new SpeciesFormChangeManualTrigger(), true), - new SpeciesFormChange(Species.MINIOR, "violet-meteor", "violet", new SpeciesFormChangeManualTrigger(), true), - new SpeciesFormChange(Species.MINIOR, "violet", "violet-meteor", new SpeciesFormChangeManualTrigger(), true) + new SpeciesFormChange(Species.MINIOR, "red-meteor", "red", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(Species.MINIOR, "red", "red-meteor", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(Species.MINIOR, "orange-meteor", "orange", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(Species.MINIOR, "orange", "orange-meteor", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(Species.MINIOR, "yellow-meteor", "yellow", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(Species.MINIOR, "yellow", "yellow-meteor", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(Species.MINIOR, "green-meteor", "green", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(Species.MINIOR, "green", "green-meteor", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(Species.MINIOR, "blue-meteor", "blue", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(Species.MINIOR, "blue", "blue-meteor", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(Species.MINIOR, "indigo-meteor", "indigo", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(Species.MINIOR, "indigo", "indigo-meteor", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(Species.MINIOR, "violet-meteor", "violet", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(Species.MINIOR, "violet", "violet-meteor", new SpeciesFormChangeAbilityTrigger(), true) ], [Species.MIMIKYU]: [ - new SpeciesFormChange(Species.MIMIKYU, "disguised", "busted", new SpeciesFormChangeManualTrigger(), true), - new SpeciesFormChange(Species.MIMIKYU, "busted", "disguised", new SpeciesFormChangeManualTrigger(), true) + new SpeciesFormChange(Species.MIMIKYU, "disguised", "busted", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(Species.MIMIKYU, "busted", "disguised", new SpeciesFormChangeAbilityTrigger(), true) ], [Species.NECROZMA]: [ new SpeciesFormChange(Species.NECROZMA, "", "dawn-wings", new SpeciesFormChangeItemTrigger(FormChangeItem.N_LUNARIZER), false, getSpeciesDependentFormChangeCondition(Species.LUNALA)), @@ -895,10 +899,10 @@ export const pokemonFormChanges: PokemonFormChanges = { new SpeciesFormChange(Species.SANDACONDA, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) ], [Species.CRAMORANT]: [ - new SpeciesFormChange(Species.CRAMORANT, "", "gulping", new SpeciesFormChangeManualTrigger, true, new SpeciesFormChangeCondition(p => p.getHpRatio() >= .5)), - new SpeciesFormChange(Species.CRAMORANT, "", "gorging", new SpeciesFormChangeManualTrigger, true, new SpeciesFormChangeCondition(p => p.getHpRatio() < .5)), - new SpeciesFormChange(Species.CRAMORANT, "gulping", "", new SpeciesFormChangeManualTrigger, true), - new SpeciesFormChange(Species.CRAMORANT, "gorging", "", new SpeciesFormChangeManualTrigger, true), + new SpeciesFormChange(Species.CRAMORANT, "", "gulping", new SpeciesFormChangeAbilityTrigger, true, new SpeciesFormChangeCondition(p => p.getHpRatio() >= .5)), + new SpeciesFormChange(Species.CRAMORANT, "", "gorging", new SpeciesFormChangeAbilityTrigger, true, new SpeciesFormChangeCondition(p => p.getHpRatio() < .5)), + new SpeciesFormChange(Species.CRAMORANT, "gulping", "", new SpeciesFormChangeAbilityTrigger, true), + new SpeciesFormChange(Species.CRAMORANT, "gorging", "", new SpeciesFormChangeAbilityTrigger, true), new SpeciesFormChange(Species.CRAMORANT, "gulping", "", new SpeciesFormChangeActiveTrigger(false), true), new SpeciesFormChange(Species.CRAMORANT, "gorging", "", new SpeciesFormChangeActiveTrigger(false), true) ], @@ -929,12 +933,12 @@ export const pokemonFormChanges: PokemonFormChanges = { new SpeciesFormChange(Species.ALCREMIE, "rainbow-swirl", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) ], [Species.EISCUE]: [ - new SpeciesFormChange(Species.EISCUE, "", "no-ice", new SpeciesFormChangeManualTrigger(), true), - new SpeciesFormChange(Species.EISCUE, "no-ice", "", new SpeciesFormChangeManualTrigger(), true) + new SpeciesFormChange(Species.EISCUE, "", "no-ice", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(Species.EISCUE, "no-ice", "", new SpeciesFormChangeAbilityTrigger(), true) ], [Species.MORPEKO]: [ - new SpeciesFormChange(Species.MORPEKO, "full-belly", "hangry", new SpeciesFormChangeManualTrigger(), true), - new SpeciesFormChange(Species.MORPEKO, "hangry", "full-belly", new SpeciesFormChangeManualTrigger(), true) + new SpeciesFormChange(Species.MORPEKO, "full-belly", "hangry", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(Species.MORPEKO, "hangry", "full-belly", new SpeciesFormChangeAbilityTrigger(), true) ], [Species.COPPERAJAH]: [ new SpeciesFormChange(Species.COPPERAJAH, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) @@ -967,23 +971,23 @@ export const pokemonFormChanges: PokemonFormChanges = { new SpeciesFormChange(Species.OGERPON, "teal-mask", "wellspring-mask", new SpeciesFormChangeItemTrigger(FormChangeItem.WELLSPRING_MASK)), new SpeciesFormChange(Species.OGERPON, "teal-mask", "hearthflame-mask", new SpeciesFormChangeItemTrigger(FormChangeItem.HEARTHFLAME_MASK)), new SpeciesFormChange(Species.OGERPON, "teal-mask", "cornerstone-mask", new SpeciesFormChangeItemTrigger(FormChangeItem.CORNERSTONE_MASK)), - new SpeciesFormChange(Species.OGERPON, "teal-mask", "teal-mask-tera", new SpeciesFormChangeTeraTrigger(Type.GRASS)), - new SpeciesFormChange(Species.OGERPON, "teal-mask-tera", "teal-mask", new SpeciesFormChangeLapseTeraTrigger(), true, new SpeciesFormChangeCondition(p => p.getTeraType() !== Type.GRASS)), - new SpeciesFormChange(Species.OGERPON, "wellspring-mask", "wellspring-mask-tera", new SpeciesFormChangeTeraTrigger(Type.WATER)), - new SpeciesFormChange(Species.OGERPON, "wellspring-mask-tera", "wellspring-mask", new SpeciesFormChangeLapseTeraTrigger(), true, new SpeciesFormChangeCondition(p => p.getTeraType() !== Type.WATER)), - new SpeciesFormChange(Species.OGERPON, "hearthflame-mask", "hearthflame-mask-tera", new SpeciesFormChangeTeraTrigger(Type.FIRE)), - new SpeciesFormChange(Species.OGERPON, "hearthflame-mask-tera", "hearthflame-mask", new SpeciesFormChangeLapseTeraTrigger(), true, new SpeciesFormChangeCondition(p => p.getTeraType() !== Type.FIRE)), - new SpeciesFormChange(Species.OGERPON, "cornerstone-mask", "cornerstone-mask-tera", new SpeciesFormChangeTeraTrigger(Type.ROCK)), - new SpeciesFormChange(Species.OGERPON, "cornerstone-mask-tera", "cornerstone-mask", new SpeciesFormChangeLapseTeraTrigger(), true, new SpeciesFormChangeCondition(p => p.getTeraType() !== Type.ROCK)) + new SpeciesFormChange(Species.OGERPON, "teal-mask", "teal-mask-tera", new SpeciesFormChangeTeraTrigger(), true), + new SpeciesFormChange(Species.OGERPON, "teal-mask-tera", "teal-mask", new SpeciesFormChangeLapseTeraTrigger(), true), + new SpeciesFormChange(Species.OGERPON, "wellspring-mask", "wellspring-mask-tera", new SpeciesFormChangeTeraTrigger(), true), + new SpeciesFormChange(Species.OGERPON, "wellspring-mask-tera", "wellspring-mask", new SpeciesFormChangeLapseTeraTrigger(), true), + new SpeciesFormChange(Species.OGERPON, "hearthflame-mask", "hearthflame-mask-tera", new SpeciesFormChangeTeraTrigger(), true), + new SpeciesFormChange(Species.OGERPON, "hearthflame-mask-tera", "hearthflame-mask", new SpeciesFormChangeLapseTeraTrigger(), true), + new SpeciesFormChange(Species.OGERPON, "cornerstone-mask", "cornerstone-mask-tera", new SpeciesFormChangeTeraTrigger(), true), + new SpeciesFormChange(Species.OGERPON, "cornerstone-mask-tera", "cornerstone-mask", new SpeciesFormChangeLapseTeraTrigger(), true) ], [Species.TERAPAGOS]: [ - new SpeciesFormChange(Species.TERAPAGOS, "", "terastal", new SpeciesFormChangeManualTrigger(), true), - new SpeciesFormChange(Species.TERAPAGOS, "terastal", "stellar", new SpeciesFormChangeTeraTrigger(Type.STELLAR)), - new SpeciesFormChange(Species.TERAPAGOS, "stellar", "terastal", new SpeciesFormChangeLapseTeraTrigger(), true, new SpeciesFormChangeCondition(p => p.getTeraType() !== Type.STELLAR)) + new SpeciesFormChange(Species.TERAPAGOS, "", "terastal", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(Species.TERAPAGOS, "terastal", "stellar", new SpeciesFormChangeTeraTrigger(), true), + new SpeciesFormChange(Species.TERAPAGOS, "stellar", "terastal", new SpeciesFormChangeLapseTeraTrigger(), true) ], [Species.GALAR_DARMANITAN]: [ - new SpeciesFormChange(Species.GALAR_DARMANITAN, "", "zen", new SpeciesFormChangeManualTrigger(), true), - new SpeciesFormChange(Species.GALAR_DARMANITAN, "zen", "", new SpeciesFormChangeManualTrigger(), true) + new SpeciesFormChange(Species.GALAR_DARMANITAN, "", "zen", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(Species.GALAR_DARMANITAN, "zen", "", new SpeciesFormChangeAbilityTrigger(), true) ], }; @@ -1001,3 +1005,4 @@ export function initPokemonForms() { formChanges.push(...newFormChanges); }); } + diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 09788e353cf..c0ca9bf4b62 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -1,23 +1,28 @@ -import { Localizable } from "#app/interfaces/locales"; +import type { Localizable } from "#app/interfaces/locales"; import { Abilities } from "#enums/abilities"; import { PartyMemberStrength } from "#enums/party-member-strength"; import { Species } from "#enums/species"; import { QuantizerCelebi, argbFromRgba, rgbaFromArgb } from "@material/material-color-utilities"; import i18next from "i18next"; -import BattleScene, { AnySound } from "#app/battle-scene"; -import { GameMode } from "#app/game-mode"; -import { StarterMoveset } from "#app/system/game-data"; +import type { AnySound } from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; +import type { GameMode } from "#app/game-mode"; +import { DexAttr, type StarterMoveset } from "#app/system/game-data"; import * as Utils from "#app/utils"; import { uncatchableSpecies } from "#app/data/balance/biomes"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; import { GrowthRate } from "#app/data/exp"; -import { EvolutionLevel, SpeciesWildEvolutionDelay, pokemonEvolutions, pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; +import type { EvolutionLevel } from "#app/data/balance/pokemon-evolutions"; +import { SpeciesWildEvolutionDelay, pokemonEvolutions, pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; import { Type } from "#enums/type"; -import { LevelMoves, pokemonFormLevelMoves, pokemonFormLevelMoves as pokemonSpeciesFormLevelMoves, pokemonSpeciesLevelMoves } from "#app/data/balance/pokemon-level-moves"; -import { Stat } from "#enums/stat"; -import { Variant, VariantSet, variantData } from "#app/data/variant"; +import type { LevelMoves } from "#app/data/balance/pokemon-level-moves"; +import { pokemonFormLevelMoves, pokemonFormLevelMoves as pokemonSpeciesFormLevelMoves, pokemonSpeciesLevelMoves } from "#app/data/balance/pokemon-level-moves"; +import type { Stat } from "#enums/stat"; +import type { Variant, VariantSet } from "#app/data/variant"; +import { variantData } from "#app/data/variant"; import { speciesStarterCosts, POKERUS_STARTER_COUNT } from "#app/data/balance/starters"; import { SpeciesFormKey } from "#enums/species-form-key"; +import { starterPassiveAbilities } from "#app/data/balance/passives"; export enum Region { NORMAL, @@ -27,6 +32,37 @@ export enum Region { PALDEA } +// TODO: this is horrible and will need to be removed once a refactor/cleanup of forms is executed. +export const normalForm: Species[] = [ + Species.PIKACHU, + Species.RAICHU, + Species.EEVEE, + Species.JOLTEON, + Species.FLAREON, + Species.VAPOREON, + Species.ESPEON, + Species.UMBREON, + Species.LEAFEON, + Species.GLACEON, + Species.SYLVEON, + Species.PICHU, + Species.ROTOM, + Species.DIALGA, + Species.PALKIA, + Species.KYUREM, + Species.GENESECT, + Species.FROAKIE, + Species.FROGADIER, + Species.GRENINJA, + Species.ROCKRUFF, + Species.NECROZMA, + Species.MAGEARNA, + Species.MARSHADOW, + Species.CRAMORANT, + Species.ZARUDE, + Species.CALYREX +]; + /** * Gets the {@linkcode PokemonSpecies} object associated with the {@linkcode Species} enum given * @param species The species to fetch @@ -226,6 +262,31 @@ export abstract class PokemonSpeciesForm { return ret; } + /** + * Method to get the passive ability of a Pokemon species + * @param formIndex The form index to use, defaults to form for this species instance + * @returns The id of the ability + */ + getPassiveAbility(formIndex?: number): Abilities { + if (Utils.isNullOrUndefined(formIndex)) { + formIndex = this.formIndex; + } + let starterSpeciesId = this.speciesId; + while (!(starterSpeciesId in starterPassiveAbilities) || !(formIndex in starterPassiveAbilities[starterSpeciesId])) { + if (pokemonPrevolutions.hasOwnProperty(starterSpeciesId)) { + starterSpeciesId = pokemonPrevolutions[starterSpeciesId]; + } else { // If we've reached the base species and still haven't found a matching ability, use form 0 if possible + if (0 in starterPassiveAbilities[starterSpeciesId]) { + return starterPassiveAbilities[starterSpeciesId][0]; + } else { + console.log("No passive ability found for %s, using run away", this.speciesId); + return Abilities.RUN_AWAY; + } + } + } + return starterPassiveAbilities[starterSpeciesId][formIndex]; + } + getLevelMoves(): LevelMoves { if (pokemonSpeciesFormLevelMoves.hasOwnProperty(this.speciesId) && pokemonSpeciesFormLevelMoves[this.speciesId].hasOwnProperty(this.formIndex)) { return pokemonSpeciesFormLevelMoves[this.speciesId][this.formIndex].slice(0); @@ -294,8 +355,8 @@ export abstract class PokemonSpeciesForm { return ret; } - getSpriteAtlasPath(female: boolean, formIndex?: number, shiny?: boolean, variant?: number): string { - const spriteId = this.getSpriteId(female, formIndex, shiny, variant).replace(/\_{2}/g, "/"); + getSpriteAtlasPath(female: boolean, formIndex?: number, shiny?: boolean, variant?: number, back?: boolean): string { + const spriteId = this.getSpriteId(female, formIndex, shiny, variant, back).replace(/\_{2}/g, "/"); return `${/_[1-3]$/.test(spriteId) ? "variant/" : ""}${spriteId}`; } @@ -316,8 +377,8 @@ export abstract class PokemonSpeciesForm { return `${back ? "back__" : ""}${shiny && (!variantSet || (!variant && !variantSet[variant || 0])) ? "shiny__" : ""}${baseSpriteKey}${shiny && variantSet && variantSet[variant] === 2 ? `_${variant + 1}` : ""}`; } - getSpriteKey(female: boolean, formIndex?: number, shiny?: boolean, variant?: number): string { - return `pkmn__${this.getSpriteId(female, formIndex, shiny, variant)}`; + getSpriteKey(female: boolean, formIndex?: number, shiny?: boolean, variant?: number, back?: boolean): string { + return `pkmn__${this.getSpriteId(female, formIndex, shiny, variant, back)}`; } abstract getFormSpriteKey(formIndex?: number): string; @@ -490,34 +551,33 @@ export abstract class PokemonSpeciesForm { return true; } - loadAssets(scene: BattleScene, female: boolean, formIndex?: number, shiny?: boolean, variant?: Variant, startLoad?: boolean): Promise { + loadAssets(female: boolean, formIndex?: number, shiny?: boolean, variant?: Variant, startLoad?: boolean, back?: boolean): Promise { return new Promise(resolve => { - const spriteKey = this.getSpriteKey(female, formIndex, shiny, variant); - scene.loadPokemonAtlas(spriteKey, this.getSpriteAtlasPath(female, formIndex, shiny, variant)); - scene.load.audio(`${this.getCryKey(formIndex)}`, `audio/${this.getCryKey(formIndex)}.m4a`); - scene.load.once(Phaser.Loader.Events.COMPLETE, () => { + const spriteKey = this.getSpriteKey(female, formIndex, shiny, variant, back); + globalScene.loadPokemonAtlas(spriteKey, this.getSpriteAtlasPath(female, formIndex, shiny, variant, back)); + globalScene.load.audio(`${this.getCryKey(formIndex)}`, `audio/${this.getCryKey(formIndex)}.m4a`); + globalScene.load.once(Phaser.Loader.Events.COMPLETE, () => { const originalWarn = console.warn; // Ignore warnings for missing frames, because there will be a lot console.warn = () => {}; - const frameNames = scene.anims.generateFrameNames(spriteKey, { zeroPad: 4, suffix: ".png", start: 1, end: 400 }); + const frameNames = globalScene.anims.generateFrameNames(spriteKey, { zeroPad: 4, suffix: ".png", start: 1, end: 400 }); console.warn = originalWarn; - if (!(scene.anims.exists(spriteKey))) { - scene.anims.create({ - key: this.getSpriteKey(female, formIndex, shiny, variant), + if (!(globalScene.anims.exists(spriteKey))) { + globalScene.anims.create({ + key: this.getSpriteKey(female, formIndex, shiny, variant, back), frames: frameNames, frameRate: 10, repeat: -1 }); } else { - scene.anims.get(spriteKey).frameRate = 10; + globalScene.anims.get(spriteKey).frameRate = 10; } - const spritePath = this.getSpriteAtlasPath(female, formIndex, shiny, variant).replace("variant/", "").replace(/_[1-3]$/, ""); - scene.loadPokemonVariantAssets(spriteKey, spritePath, variant); - resolve(); + const spritePath = this.getSpriteAtlasPath(female, formIndex, shiny, variant, back).replace("variant/", "").replace(/_[1-3]$/, ""); + globalScene.loadPokemonVariantAssets(spriteKey, spritePath, variant).then(() => resolve()); }); if (startLoad) { - if (!scene.load.isLoading()) { - scene.load.start(); + if (!globalScene.load.isLoading()) { + globalScene.load.start(); } } else { resolve(); @@ -525,21 +585,21 @@ export abstract class PokemonSpeciesForm { }); } - cry(scene: BattleScene, soundConfig?: Phaser.Types.Sound.SoundConfig, ignorePlay?: boolean): AnySound { + cry(soundConfig?: Phaser.Types.Sound.SoundConfig, ignorePlay?: boolean): AnySound { const cryKey = this.getCryKey(this.formIndex); - let cry: AnySound | null = scene.sound.get(cryKey) as AnySound; + let cry: AnySound | null = globalScene.sound.get(cryKey) as AnySound; if (cry?.pendingRemove) { cry = null; } - cry = scene.playSound(cry ?? cryKey, soundConfig); + cry = globalScene.playSound(cry ?? cryKey, soundConfig); if (ignorePlay) { cry.stop(); } return cry; } - generateCandyColors(scene: BattleScene): number[][] { - const sourceTexture = scene.textures.get(this.getSpriteKey(false)); + generateCandyColors(): number[][] { + const sourceTexture = globalScene.textures.get(this.getSpriteKey(false)); const sourceFrame = sourceTexture.frames[sourceTexture.firstFrame]; const sourceImage = sourceTexture.getSourceImage() as HTMLImageElement; @@ -582,7 +642,7 @@ export abstract class PokemonSpeciesForm { const originalRandom = Math.random; Math.random = () => Phaser.Math.RND.realInRange(0, 1); - scene.executeWithSeedOffset(() => { + globalScene.executeWithSeedOffset(() => { paletteColors = QuantizerCelebi.quantize(pixelColors, 2); }, 0, "This result should not vary"); @@ -661,6 +721,56 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali return this.name; } + /** + * Find the name of species with proper attachments for regionals and separate starter forms (Floette, Ursaluna) + * @returns a string with the region name or other form name attached + */ + getExpandedSpeciesName(): string { + if (this.speciesId < 2000) { + return this.name; // Other special cases could be put here too + } else { // Everything beyond this point essentially follows the pattern of FORMNAME_SPECIES + return i18next.t(`pokemonForm:appendForm.${Species[this.speciesId].split("_")[0]}`, { pokemonName: this.name }); + } + } + + /** + * Find the form name for species with just one form (regional variants, Floette, Ursaluna) + * @param formIndex The form index to check (defaults to 0) + * @param append Whether to append the species name to the end (defaults to false) + * @returns the pokemon-form locale key for the single form name ("Alolan Form", "Eternal Flower" etc) + */ + getFormNameToDisplay(formIndex: number = 0, append: boolean = false): string { + const formKey = this.forms?.[formIndex!]?.formKey; + const formText = Utils.capitalizeString(formKey, "-", false, false) || ""; + const speciesName = Utils.capitalizeString(Species[this.speciesId], "_", true, false); + let ret: string = ""; + + const region = this.getRegion(); + if (this.speciesId === Species.ARCEUS) { + ret = i18next.t(`pokemonInfo:Type.${formText?.toUpperCase()}`); + } else if ([ SpeciesFormKey.MEGA, SpeciesFormKey.MEGA_X, SpeciesFormKey.MEGA_Y, SpeciesFormKey.PRIMAL, SpeciesFormKey.GIGANTAMAX, SpeciesFormKey.GIGANTAMAX_RAPID, SpeciesFormKey.GIGANTAMAX_SINGLE, SpeciesFormKey.ETERNAMAX ].includes(formKey as SpeciesFormKey)) { + return append ? i18next.t(`battlePokemonForm:${formKey}`, { pokemonName: this.name }) : i18next.t(`pokemonForm:battleForm.${formKey}`); + } else if (region === Region.NORMAL || (this.speciesId === Species.GALAR_DARMANITAN && formIndex > 0) || this.speciesId === Species.PALDEA_TAUROS) { // More special cases can be added here + const i18key = `pokemonForm:${speciesName}${formText}`; + if (i18next.exists(i18key)) { + ret = i18next.t(i18key); + } else { + const rootSpeciesName = Utils.capitalizeString(Species[this.getRootSpeciesId()], "_", true, false); + const i18RootKey = `pokemonForm:${rootSpeciesName}${formText}`; + ret = i18next.exists(i18RootKey) ? i18next.t(i18RootKey) : formText; + } + } else if (append) { // Everything beyond this has an expanded name + return this.getExpandedSpeciesName(); + } else if (this.speciesId === Species.ETERNAL_FLOETTE) { // Not a real form, so the key is made up + return i18next.t("pokemonForm:floetteEternalFlower"); + } else if (this.speciesId === Species.BLOODMOON_URSALUNA) { // Not a real form, so the key is made up + return i18next.t("pokemonForm:ursalunaBloodmoon"); + } else { // Only regional forms should be left at this point + return i18next.t(`pokemonForm:regionalForm.${Region[region]}`); + } + return append ? i18next.t("pokemonForm:appendForm.GENERIC", { pokemonName: this.name, formName: ret }) : ret; + } + localize(): void { this.name = i18next.t(`pokemon:${Species[this.speciesId].toLowerCase()}`); } @@ -689,7 +799,7 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali * The calculation with evolution delay is a weighted average of the easeIn and easeOut functions where preferredMinLevel is the denominator. * This also means a lower value of x will lead to a higher evolution chance. * @param strength {@linkcode PartyMemberStrength} The strength of the party member in question - * @returns {@linkcode integer} The level difference from expected evolution level tolerated for a mon to be unevolved. Lower value = higher evolution chance. + * @returns {@linkcode number} The level difference from expected evolution level tolerated for a mon to be unevolved. Lower value = higher evolution chance. */ private getStrengthLevelDiff(strength: PartyMemberStrength): number { switch (Math.min(strength, PartyMemberStrength.STRONGER)) { @@ -720,7 +830,11 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali } } - if (!allowEvolving || !pokemonEvolutions.hasOwnProperty(this.speciesId)) { + if ( // If evolutions shouldn't happen, add more cases here :) + !allowEvolving + || !pokemonEvolutions.hasOwnProperty(this.speciesId) + || globalScene.currentBattle?.waveIndex === 20 && globalScene.gameMode.isClassic && globalScene.currentBattle.trainer + ) { return this.speciesId; } @@ -918,25 +1032,59 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali ? this.forms[formIndex || 0].getFormSpriteKey() : ""; } + + /** + * Generates a {@linkcode bigint} corresponding to the maximum unlocks possible for this species, + * taking into account if the species has a male/female gender, and which variants are implemented. + * @returns {@linkcode bigint} Maximum unlocks, can be compared with {@linkcode DexEntry.caughtAttr}. + */ + getFullUnlocksData(): bigint { + let caughtAttr: bigint = 0n; + caughtAttr += DexAttr.NON_SHINY; + caughtAttr += DexAttr.SHINY; + if (this.malePercent !== null) { + if (this.malePercent > 0) { + caughtAttr += DexAttr.MALE; + } + if (this.malePercent < 100) { + caughtAttr += DexAttr.FEMALE; + } + } + caughtAttr += DexAttr.DEFAULT_VARIANT; + if (this.hasVariants()) { + caughtAttr += DexAttr.VARIANT_2; + caughtAttr += DexAttr.VARIANT_3; + } + + // Summing successive bigints for each obtainable form + caughtAttr += this?.forms?.length > 1 ? + this.forms.map((f, index) => f.isUnobtainable ? 0n : 128n * 2n ** BigInt(index)).reduce((acc, val) => acc + val, 0n) : + DexAttr.DEFAULT_FORM; + + return caughtAttr; + } } export class PokemonForm extends PokemonSpeciesForm { public formName: string; public formKey: string; public formSpriteKey: string | null; + public isUnobtainable: boolean; // This is a collection of form keys that have in-run form changes, but should still be separately selectable from the start screen private starterSelectableKeys: string[] = [ "10", "50", "10-pc", "50-pc", "red", "orange", "yellow", "green", "blue", "indigo", "violet" ]; constructor(formName: string, formKey: string, type1: Type, type2: Type | null, height: number, weight: number, ability1: Abilities, ability2: Abilities, abilityHidden: Abilities, baseTotal: number, baseHp: number, baseAtk: number, baseDef: number, baseSpatk: number, baseSpdef: number, baseSpd: number, - catchRate: number, baseFriendship: number, baseExp: number, genderDiffs: boolean = false, formSpriteKey: string | null = null, isStarterSelectable: boolean = false + catchRate: number, baseFriendship: number, baseExp: number, genderDiffs: boolean = false, formSpriteKey: string | null = null, isStarterSelectable: boolean = false, + isUnobtainable: boolean = false ) { super(type1, type2, height, weight, ability1, ability2, abilityHidden, baseTotal, baseHp, baseAtk, baseDef, baseSpatk, baseSpdef, baseSpd, catchRate, baseFriendship, baseExp, genderDiffs, (isStarterSelectable || !formKey)); this.formName = formName; this.formKey = formKey; this.formSpriteKey = formSpriteKey; + this.isUnobtainable = isUnobtainable; } getFormSpriteKey(_formIndex?: number) { @@ -944,29 +1092,15 @@ export class PokemonForm extends PokemonSpeciesForm { } } -export const noStarterFormKeys: string[] = [ - SpeciesFormKey.MEGA, - SpeciesFormKey.MEGA_X, - SpeciesFormKey.MEGA_Y, - SpeciesFormKey.PRIMAL, - SpeciesFormKey.ORIGIN, - SpeciesFormKey.THERIAN, - SpeciesFormKey.GIGANTAMAX, - SpeciesFormKey.GIGANTAMAX_RAPID, - SpeciesFormKey.GIGANTAMAX_SINGLE, - SpeciesFormKey.ETERNAMAX -].map(k => k.toString()); - /** * Method to get the daily list of starters with Pokerus. -* @param scene {@linkcode BattleScene} used as part of RNG * @returns A list of starters with Pokerus */ -export function getPokerusStarters(scene: BattleScene): PokemonSpecies[] { +export function getPokerusStarters(): PokemonSpecies[] { const pokerusStarters: PokemonSpecies[] = []; const date = new Date(); date.setUTCHours(0, 0, 0, 0); - scene.executeWithSeedOffset(() => { + globalScene.executeWithSeedOffset(() => { while (pokerusStarters.length < POKERUS_STARTER_COUNT) { const randomSpeciesId = parseInt(Utils.randSeedItem(Object.keys(speciesStarterCosts)), 10); const species = getPokemonSpecies(randomSpeciesId); @@ -1012,15 +1146,15 @@ export function initSpecies() { ), new PokemonSpecies(Species.WEEDLE, 1, false, false, false, "Hairy Bug Pokémon", Type.BUG, Type.POISON, 0.3, 3.2, Abilities.SHIELD_DUST, Abilities.NONE, Abilities.RUN_AWAY, 195, 40, 35, 30, 20, 20, 50, 255, 70, 39, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.KAKUNA, 1, false, false, false, "Cocoon Pokémon", Type.BUG, Type.POISON, 0.6, 10, Abilities.SHED_SKIN, Abilities.NONE, Abilities.SHED_SKIN, 205, 45, 25, 50, 25, 25, 35, 120, 70, 72, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.BEEDRILL, 1, false, false, false, "Poison Bee Pokémon", Type.BUG, Type.POISON, 1, 29.5, Abilities.SWARM, Abilities.NONE, Abilities.SNIPER, 395, 65, 90, 40, 45, 80, 75, 45, 70, 178, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Normal", "", Type.BUG, Type.POISON, 1, 29.5, Abilities.SWARM, Abilities.NONE, Abilities.SNIPER, 395, 65, 90, 40, 45, 80, 75, 45, 70, 178, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, Type.BUG, Type.POISON, 1.4, 40.5, Abilities.ADAPTABILITY, Abilities.NONE, Abilities.ADAPTABILITY, 495, 65, 150, 40, 15, 80, 145, 45, 70, 178), + new PokemonSpecies(Species.BEEDRILL, 1, false, false, false, "Poison Bee Pokémon", Type.BUG, Type.POISON, 1, 29.5, Abilities.SWARM, Abilities.NONE, Abilities.SNIPER, 395, 65, 90, 40, 45, 80, 75, 45, 70, 198, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Normal", "", Type.BUG, Type.POISON, 1, 29.5, Abilities.SWARM, Abilities.NONE, Abilities.SNIPER, 395, 65, 90, 40, 45, 80, 75, 45, 70, 198, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, Type.BUG, Type.POISON, 1.4, 40.5, Abilities.ADAPTABILITY, Abilities.NONE, Abilities.ADAPTABILITY, 495, 65, 150, 40, 15, 80, 145, 45, 70, 198), ), new PokemonSpecies(Species.PIDGEY, 1, false, false, false, "Tiny Bird Pokémon", Type.NORMAL, Type.FLYING, 0.3, 1.8, Abilities.KEEN_EYE, Abilities.TANGLED_FEET, Abilities.BIG_PECKS, 251, 40, 45, 40, 35, 35, 56, 255, 70, 50, GrowthRate.MEDIUM_SLOW, 50, false), new PokemonSpecies(Species.PIDGEOTTO, 1, false, false, false, "Bird Pokémon", Type.NORMAL, Type.FLYING, 1.1, 30, Abilities.KEEN_EYE, Abilities.TANGLED_FEET, Abilities.BIG_PECKS, 349, 63, 60, 55, 50, 50, 71, 120, 70, 122, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.PIDGEOT, 1, false, false, false, "Bird Pokémon", Type.NORMAL, Type.FLYING, 1.5, 39.5, Abilities.KEEN_EYE, Abilities.TANGLED_FEET, Abilities.BIG_PECKS, 479, 83, 80, 75, 70, 70, 101, 45, 70, 216, GrowthRate.MEDIUM_SLOW, 50, false, true, - new PokemonForm("Normal", "", Type.NORMAL, Type.FLYING, 1.5, 39.5, Abilities.KEEN_EYE, Abilities.TANGLED_FEET, Abilities.BIG_PECKS, 479, 83, 80, 75, 70, 70, 101, 45, 70, 216, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, Type.NORMAL, Type.FLYING, 2.2, 50.5, Abilities.NO_GUARD, Abilities.NO_GUARD, Abilities.NO_GUARD, 579, 83, 80, 80, 135, 80, 121, 45, 70, 216), + new PokemonSpecies(Species.PIDGEOT, 1, false, false, false, "Bird Pokémon", Type.NORMAL, Type.FLYING, 1.5, 39.5, Abilities.KEEN_EYE, Abilities.TANGLED_FEET, Abilities.BIG_PECKS, 479, 83, 80, 75, 70, 70, 101, 45, 70, 240, GrowthRate.MEDIUM_SLOW, 50, false, true, + new PokemonForm("Normal", "", Type.NORMAL, Type.FLYING, 1.5, 39.5, Abilities.KEEN_EYE, Abilities.TANGLED_FEET, Abilities.BIG_PECKS, 479, 83, 80, 75, 70, 70, 101, 45, 70, 240, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, Type.NORMAL, Type.FLYING, 2.2, 50.5, Abilities.NO_GUARD, Abilities.NO_GUARD, Abilities.NO_GUARD, 579, 83, 80, 80, 135, 80, 121, 45, 70, 240), ), new PokemonSpecies(Species.RATTATA, 1, false, false, false, "Mouse Pokémon", Type.NORMAL, null, 0.3, 3.5, Abilities.RUN_AWAY, Abilities.GUTS, Abilities.HUSTLE, 253, 30, 56, 35, 25, 35, 72, 255, 70, 51, GrowthRate.MEDIUM_FAST, 50, true), new PokemonSpecies(Species.RATICATE, 1, false, false, false, "Mouse Pokémon", Type.NORMAL, null, 0.7, 18.5, Abilities.RUN_AWAY, Abilities.GUTS, Abilities.HUSTLE, 413, 55, 81, 60, 50, 70, 97, 127, 70, 145, GrowthRate.MEDIUM_FAST, 50, true), @@ -1093,12 +1227,12 @@ export function initSpecies() { ), new PokemonSpecies(Species.BELLSPROUT, 1, false, false, false, "Flower Pokémon", Type.GRASS, Type.POISON, 0.7, 4, Abilities.CHLOROPHYLL, Abilities.NONE, Abilities.GLUTTONY, 300, 50, 75, 35, 70, 30, 40, 255, 70, 60, GrowthRate.MEDIUM_SLOW, 50, false), new PokemonSpecies(Species.WEEPINBELL, 1, false, false, false, "Flycatcher Pokémon", Type.GRASS, Type.POISON, 1, 6.4, Abilities.CHLOROPHYLL, Abilities.NONE, Abilities.GLUTTONY, 390, 65, 90, 50, 85, 45, 55, 120, 70, 137, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.VICTREEBEL, 1, false, false, false, "Flycatcher Pokémon", Type.GRASS, Type.POISON, 1.7, 15.5, Abilities.CHLOROPHYLL, Abilities.NONE, Abilities.GLUTTONY, 490, 80, 105, 65, 100, 70, 70, 45, 70, 221, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(Species.VICTREEBEL, 1, false, false, false, "Flycatcher Pokémon", Type.GRASS, Type.POISON, 1.7, 15.5, Abilities.CHLOROPHYLL, Abilities.NONE, Abilities.GLUTTONY, 490, 80, 105, 65, 100, 70, 70, 45, 70, 245, GrowthRate.MEDIUM_SLOW, 50, false), new PokemonSpecies(Species.TENTACOOL, 1, false, false, false, "Jellyfish Pokémon", Type.WATER, Type.POISON, 0.9, 45.5, Abilities.CLEAR_BODY, Abilities.LIQUID_OOZE, Abilities.RAIN_DISH, 335, 40, 40, 35, 50, 100, 70, 190, 50, 67, GrowthRate.SLOW, 50, false), new PokemonSpecies(Species.TENTACRUEL, 1, false, false, false, "Jellyfish Pokémon", Type.WATER, Type.POISON, 1.6, 55, Abilities.CLEAR_BODY, Abilities.LIQUID_OOZE, Abilities.RAIN_DISH, 515, 80, 70, 65, 80, 120, 100, 60, 50, 180, GrowthRate.SLOW, 50, false), new PokemonSpecies(Species.GEODUDE, 1, false, false, false, "Rock Pokémon", Type.ROCK, Type.GROUND, 0.4, 20, Abilities.ROCK_HEAD, Abilities.STURDY, Abilities.SAND_VEIL, 300, 40, 80, 100, 30, 30, 20, 255, 70, 60, GrowthRate.MEDIUM_SLOW, 50, false), new PokemonSpecies(Species.GRAVELER, 1, false, false, false, "Rock Pokémon", Type.ROCK, Type.GROUND, 1, 105, Abilities.ROCK_HEAD, Abilities.STURDY, Abilities.SAND_VEIL, 390, 55, 95, 115, 45, 45, 35, 120, 70, 137, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.GOLEM, 1, false, false, false, "Megaton Pokémon", Type.ROCK, Type.GROUND, 1.4, 300, Abilities.ROCK_HEAD, Abilities.STURDY, Abilities.SAND_VEIL, 495, 80, 120, 130, 55, 65, 45, 45, 70, 223, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(Species.GOLEM, 1, false, false, false, "Megaton Pokémon", Type.ROCK, Type.GROUND, 1.4, 300, Abilities.ROCK_HEAD, Abilities.STURDY, Abilities.SAND_VEIL, 495, 80, 120, 130, 55, 65, 45, 45, 70, 248, GrowthRate.MEDIUM_SLOW, 50, false), new PokemonSpecies(Species.PONYTA, 1, false, false, false, "Fire Horse Pokémon", Type.FIRE, null, 1, 30, Abilities.RUN_AWAY, Abilities.FLASH_FIRE, Abilities.FLAME_BODY, 410, 50, 85, 55, 65, 65, 90, 190, 50, 82, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.RAPIDASH, 1, false, false, false, "Fire Horse Pokémon", Type.FIRE, null, 1.7, 95, Abilities.RUN_AWAY, Abilities.FLASH_FIRE, Abilities.FLAME_BODY, 500, 65, 100, 70, 80, 80, 105, 60, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.SLOWPOKE, 1, false, false, false, "Dopey Pokémon", Type.WATER, Type.PSYCHIC, 1.2, 36, Abilities.OBLIVIOUS, Abilities.OWN_TEMPO, Abilities.REGENERATOR, 315, 90, 65, 65, 40, 40, 15, 190, 50, 63, GrowthRate.MEDIUM_FAST, 50, false), @@ -1212,13 +1346,13 @@ export function initSpecies() { new PokemonSpecies(Species.MEW, 1, false, false, true, "New Species Pokémon", Type.PSYCHIC, null, 0.4, 4, Abilities.SYNCHRONIZE, Abilities.NONE, Abilities.NONE, 600, 100, 100, 100, 100, 100, 100, 45, 100, 300, GrowthRate.MEDIUM_SLOW, null, false), new PokemonSpecies(Species.CHIKORITA, 2, false, false, false, "Leaf Pokémon", Type.GRASS, null, 0.9, 6.4, Abilities.OVERGROW, Abilities.NONE, Abilities.LEAF_GUARD, 318, 45, 49, 65, 49, 65, 45, 45, 70, 64, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.BAYLEEF, 2, false, false, false, "Leaf Pokémon", Type.GRASS, null, 1.2, 15.8, Abilities.OVERGROW, Abilities.NONE, Abilities.LEAF_GUARD, 405, 60, 62, 80, 63, 80, 60, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.MEGANIUM, 2, false, false, false, "Herb Pokémon", Type.GRASS, null, 1.8, 100.5, Abilities.OVERGROW, Abilities.NONE, Abilities.LEAF_GUARD, 525, 80, 82, 100, 83, 100, 80, 45, 70, 236, GrowthRate.MEDIUM_SLOW, 87.5, true), + new PokemonSpecies(Species.MEGANIUM, 2, false, false, false, "Herb Pokémon", Type.GRASS, null, 1.8, 100.5, Abilities.OVERGROW, Abilities.NONE, Abilities.LEAF_GUARD, 525, 80, 82, 100, 83, 100, 80, 45, 70, 263, GrowthRate.MEDIUM_SLOW, 87.5, true), new PokemonSpecies(Species.CYNDAQUIL, 2, false, false, false, "Fire Mouse Pokémon", Type.FIRE, null, 0.5, 7.9, Abilities.BLAZE, Abilities.NONE, Abilities.FLASH_FIRE, 309, 39, 52, 43, 60, 50, 65, 45, 70, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.QUILAVA, 2, false, false, false, "Volcano Pokémon", Type.FIRE, null, 0.9, 19, Abilities.BLAZE, Abilities.NONE, Abilities.FLASH_FIRE, 405, 58, 64, 58, 80, 65, 80, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.TYPHLOSION, 2, false, false, false, "Volcano Pokémon", Type.FIRE, null, 1.7, 79.5, Abilities.BLAZE, Abilities.NONE, Abilities.FLASH_FIRE, 534, 78, 84, 78, 109, 85, 100, 45, 70, 240, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(Species.TYPHLOSION, 2, false, false, false, "Volcano Pokémon", Type.FIRE, null, 1.7, 79.5, Abilities.BLAZE, Abilities.NONE, Abilities.FLASH_FIRE, 534, 78, 84, 78, 109, 85, 100, 45, 70, 267, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.TOTODILE, 2, false, false, false, "Big Jaw Pokémon", Type.WATER, null, 0.6, 9.5, Abilities.TORRENT, Abilities.NONE, Abilities.SHEER_FORCE, 314, 50, 65, 64, 44, 48, 43, 45, 70, 63, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.CROCONAW, 2, false, false, false, "Big Jaw Pokémon", Type.WATER, null, 1.1, 25, Abilities.TORRENT, Abilities.NONE, Abilities.SHEER_FORCE, 405, 65, 80, 80, 59, 63, 58, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.FERALIGATR, 2, false, false, false, "Big Jaw Pokémon", Type.WATER, null, 2.3, 88.8, Abilities.TORRENT, Abilities.NONE, Abilities.SHEER_FORCE, 530, 85, 105, 100, 79, 83, 78, 45, 70, 239, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(Species.FERALIGATR, 2, false, false, false, "Big Jaw Pokémon", Type.WATER, null, 2.3, 88.8, Abilities.TORRENT, Abilities.NONE, Abilities.SHEER_FORCE, 530, 85, 105, 100, 79, 83, 78, 45, 70, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.SENTRET, 2, false, false, false, "Scout Pokémon", Type.NORMAL, null, 0.8, 6, Abilities.RUN_AWAY, Abilities.KEEN_EYE, Abilities.FRISK, 215, 35, 46, 34, 35, 45, 20, 255, 70, 43, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.FURRET, 2, false, false, false, "Long Body Pokémon", Type.NORMAL, null, 1.8, 32.5, Abilities.RUN_AWAY, Abilities.KEEN_EYE, Abilities.FRISK, 415, 85, 76, 64, 45, 55, 90, 90, 70, 145, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.HOOTHOOT, 2, false, false, false, "Owl Pokémon", Type.NORMAL, Type.FLYING, 0.7, 21.2, Abilities.INSOMNIA, Abilities.KEEN_EYE, Abilities.TINTED_LENS, 262, 60, 30, 30, 36, 56, 50, 255, 50, 52, GrowthRate.MEDIUM_FAST, 50, false), @@ -1242,9 +1376,9 @@ export function initSpecies() { new PokemonSpecies(Species.XATU, 2, false, false, false, "Mystic Pokémon", Type.PSYCHIC, Type.FLYING, 1.5, 15, Abilities.SYNCHRONIZE, Abilities.EARLY_BIRD, Abilities.MAGIC_BOUNCE, 470, 65, 75, 70, 95, 70, 95, 75, 50, 165, GrowthRate.MEDIUM_FAST, 50, true), new PokemonSpecies(Species.MAREEP, 2, false, false, false, "Wool Pokémon", Type.ELECTRIC, null, 0.6, 7.8, Abilities.STATIC, Abilities.NONE, Abilities.PLUS, 280, 55, 40, 40, 65, 45, 35, 235, 70, 56, GrowthRate.MEDIUM_SLOW, 50, false), new PokemonSpecies(Species.FLAAFFY, 2, false, false, false, "Wool Pokémon", Type.ELECTRIC, null, 0.8, 13.3, Abilities.STATIC, Abilities.NONE, Abilities.PLUS, 365, 70, 55, 55, 80, 60, 45, 120, 70, 128, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.AMPHAROS, 2, false, false, false, "Light Pokémon", Type.ELECTRIC, null, 1.4, 61.5, Abilities.STATIC, Abilities.NONE, Abilities.PLUS, 510, 90, 75, 85, 115, 90, 55, 45, 70, 230, GrowthRate.MEDIUM_SLOW, 50, false, true, - new PokemonForm("Normal", "", Type.ELECTRIC, null, 1.4, 61.5, Abilities.STATIC, Abilities.NONE, Abilities.PLUS, 510, 90, 75, 85, 115, 90, 55, 45, 70, 230, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, Type.ELECTRIC, Type.DRAGON, 1.4, 61.5, Abilities.MOLD_BREAKER, Abilities.NONE, Abilities.MOLD_BREAKER, 610, 90, 95, 105, 165, 110, 45, 45, 70, 230), + new PokemonSpecies(Species.AMPHAROS, 2, false, false, false, "Light Pokémon", Type.ELECTRIC, null, 1.4, 61.5, Abilities.STATIC, Abilities.NONE, Abilities.PLUS, 510, 90, 75, 85, 115, 90, 55, 45, 70, 255, GrowthRate.MEDIUM_SLOW, 50, false, true, + new PokemonForm("Normal", "", Type.ELECTRIC, null, 1.4, 61.5, Abilities.STATIC, Abilities.NONE, Abilities.PLUS, 510, 90, 75, 85, 115, 90, 55, 45, 70, 255, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, Type.ELECTRIC, Type.DRAGON, 1.4, 61.5, Abilities.MOLD_BREAKER, Abilities.NONE, Abilities.MOLD_BREAKER, 610, 90, 95, 105, 165, 110, 45, 45, 70, 255), ), new PokemonSpecies(Species.BELLOSSOM, 2, false, false, false, "Flower Pokémon", Type.GRASS, null, 0.4, 5.8, Abilities.CHLOROPHYLL, Abilities.NONE, Abilities.HEALER, 490, 75, 80, 95, 90, 100, 50, 45, 50, 245, GrowthRate.MEDIUM_SLOW, 50, false), new PokemonSpecies(Species.MARILL, 2, false, false, false, "Aqua Mouse Pokémon", Type.WATER, Type.FAIRY, 0.4, 8.5, Abilities.THICK_FAT, Abilities.HUGE_POWER, Abilities.SAP_SIPPER, 250, 70, 20, 50, 20, 50, 40, 190, 50, 88, GrowthRate.FAST, 50, false), @@ -1253,7 +1387,7 @@ export function initSpecies() { new PokemonSpecies(Species.POLITOED, 2, false, false, false, "Frog Pokémon", Type.WATER, null, 1.1, 33.9, Abilities.WATER_ABSORB, Abilities.DAMP, Abilities.DRIZZLE, 500, 90, 75, 75, 90, 100, 70, 45, 50, 250, GrowthRate.MEDIUM_SLOW, 50, true), new PokemonSpecies(Species.HOPPIP, 2, false, false, false, "Cottonweed Pokémon", Type.GRASS, Type.FLYING, 0.4, 0.5, Abilities.CHLOROPHYLL, Abilities.LEAF_GUARD, Abilities.INFILTRATOR, 250, 35, 35, 40, 35, 55, 50, 255, 70, 50, GrowthRate.MEDIUM_SLOW, 50, false), new PokemonSpecies(Species.SKIPLOOM, 2, false, false, false, "Cottonweed Pokémon", Type.GRASS, Type.FLYING, 0.6, 1, Abilities.CHLOROPHYLL, Abilities.LEAF_GUARD, Abilities.INFILTRATOR, 340, 55, 45, 50, 45, 65, 80, 120, 70, 119, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.JUMPLUFF, 2, false, false, false, "Cottonweed Pokémon", Type.GRASS, Type.FLYING, 0.8, 3, Abilities.CHLOROPHYLL, Abilities.LEAF_GUARD, Abilities.INFILTRATOR, 460, 75, 55, 70, 55, 95, 110, 45, 70, 207, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(Species.JUMPLUFF, 2, false, false, false, "Cottonweed Pokémon", Type.GRASS, Type.FLYING, 0.8, 3, Abilities.CHLOROPHYLL, Abilities.LEAF_GUARD, Abilities.INFILTRATOR, 460, 75, 55, 70, 55, 95, 110, 45, 70, 230, GrowthRate.MEDIUM_SLOW, 50, false), new PokemonSpecies(Species.AIPOM, 2, false, false, false, "Long Tail Pokémon", Type.NORMAL, null, 0.8, 11.5, Abilities.RUN_AWAY, Abilities.PICKUP, Abilities.SKILL_LINK, 360, 55, 70, 55, 40, 55, 85, 45, 70, 72, GrowthRate.FAST, 50, true), new PokemonSpecies(Species.SUNKERN, 2, false, false, false, "Seed Pokémon", Type.GRASS, null, 0.3, 1.8, Abilities.CHLOROPHYLL, Abilities.SOLAR_POWER, Abilities.EARLY_BIRD, 180, 30, 30, 30, 30, 30, 30, 235, 70, 36, GrowthRate.MEDIUM_SLOW, 50, false), new PokemonSpecies(Species.SUNFLORA, 2, false, false, false, "Sun Pokémon", Type.GRASS, null, 0.8, 8.5, Abilities.CHLOROPHYLL, Abilities.SOLAR_POWER, Abilities.EARLY_BIRD, 425, 75, 75, 55, 105, 85, 30, 120, 70, 149, GrowthRate.MEDIUM_SLOW, 50, false), @@ -1347,7 +1481,7 @@ export function initSpecies() { new PokemonSpecies(Species.ELEKID, 2, false, false, false, "Electric Pokémon", Type.ELECTRIC, null, 0.6, 23.5, Abilities.STATIC, Abilities.NONE, Abilities.VITAL_SPIRIT, 360, 45, 63, 37, 65, 55, 95, 45, 50, 72, GrowthRate.MEDIUM_FAST, 75, false), new PokemonSpecies(Species.MAGBY, 2, false, false, false, "Live Coal Pokémon", Type.FIRE, null, 0.7, 21.4, Abilities.FLAME_BODY, Abilities.NONE, Abilities.VITAL_SPIRIT, 365, 45, 75, 37, 70, 55, 83, 45, 50, 73, GrowthRate.MEDIUM_FAST, 75, false), new PokemonSpecies(Species.MILTANK, 2, false, false, false, "Milk Cow Pokémon", Type.NORMAL, null, 1.2, 75.5, Abilities.THICK_FAT, Abilities.SCRAPPY, Abilities.SAP_SIPPER, 490, 95, 80, 105, 40, 70, 100, 45, 50, 172, GrowthRate.SLOW, 0, false), - new PokemonSpecies(Species.BLISSEY, 2, false, false, false, "Happiness Pokémon", Type.NORMAL, null, 1.5, 46.8, Abilities.NATURAL_CURE, Abilities.SERENE_GRACE, Abilities.HEALER, 540, 255, 10, 10, 75, 135, 55, 30, 140, 635, GrowthRate.FAST, 0, false), + new PokemonSpecies(Species.BLISSEY, 2, false, false, false, "Happiness Pokémon", Type.NORMAL, null, 1.5, 46.8, Abilities.NATURAL_CURE, Abilities.SERENE_GRACE, Abilities.HEALER, 540, 255, 10, 10, 75, 135, 55, 30, 140, 608, GrowthRate.FAST, 0, false), new PokemonSpecies(Species.RAIKOU, 2, true, false, false, "Thunder Pokémon", Type.ELECTRIC, null, 1.9, 178, Abilities.PRESSURE, Abilities.NONE, Abilities.INNER_FOCUS, 580, 90, 85, 75, 115, 100, 115, 3, 35, 290, GrowthRate.SLOW, null, false), new PokemonSpecies(Species.ENTEI, 2, true, false, false, "Volcano Pokémon", Type.FIRE, null, 2.1, 198, Abilities.PRESSURE, Abilities.NONE, Abilities.INNER_FOCUS, 580, 115, 115, 85, 90, 75, 100, 3, 35, 290, GrowthRate.SLOW, null, false), new PokemonSpecies(Species.SUICUNE, 2, true, false, false, "Aurora Pokémon", Type.WATER, null, 2, 187, Abilities.PRESSURE, Abilities.NONE, Abilities.INNER_FOCUS, 580, 100, 75, 115, 90, 115, 85, 3, 35, 290, GrowthRate.SLOW, null, false), @@ -1384,9 +1518,9 @@ export function initSpecies() { new PokemonSpecies(Species.LINOONE, 3, false, false, false, "Rushing Pokémon", Type.NORMAL, null, 0.5, 32.5, Abilities.PICKUP, Abilities.GLUTTONY, Abilities.QUICK_FEET, 420, 78, 70, 61, 50, 61, 100, 90, 50, 147, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.WURMPLE, 3, false, false, false, "Worm Pokémon", Type.BUG, null, 0.3, 3.6, Abilities.SHIELD_DUST, Abilities.NONE, Abilities.RUN_AWAY, 195, 45, 45, 35, 20, 30, 20, 255, 70, 56, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.SILCOON, 3, false, false, false, "Cocoon Pokémon", Type.BUG, null, 0.6, 10, Abilities.SHED_SKIN, Abilities.NONE, Abilities.SHED_SKIN, 205, 50, 35, 55, 25, 25, 15, 120, 70, 72, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.BEAUTIFLY, 3, false, false, false, "Butterfly Pokémon", Type.BUG, Type.FLYING, 1, 28.4, Abilities.SWARM, Abilities.NONE, Abilities.RIVALRY, 395, 60, 70, 50, 100, 50, 65, 45, 70, 178, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(Species.BEAUTIFLY, 3, false, false, false, "Butterfly Pokémon", Type.BUG, Type.FLYING, 1, 28.4, Abilities.SWARM, Abilities.NONE, Abilities.RIVALRY, 395, 60, 70, 50, 100, 50, 65, 45, 70, 198, GrowthRate.MEDIUM_FAST, 50, true), new PokemonSpecies(Species.CASCOON, 3, false, false, false, "Cocoon Pokémon", Type.BUG, null, 0.7, 11.5, Abilities.SHED_SKIN, Abilities.NONE, Abilities.SHED_SKIN, 205, 50, 35, 55, 25, 25, 15, 120, 70, 72, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.DUSTOX, 3, false, false, false, "Poison Moth Pokémon", Type.BUG, Type.POISON, 1.2, 31.6, Abilities.SHIELD_DUST, Abilities.NONE, Abilities.COMPOUND_EYES, 385, 60, 50, 70, 50, 90, 65, 45, 70, 173, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(Species.DUSTOX, 3, false, false, false, "Poison Moth Pokémon", Type.BUG, Type.POISON, 1.2, 31.6, Abilities.SHIELD_DUST, Abilities.NONE, Abilities.COMPOUND_EYES, 385, 60, 50, 70, 50, 90, 65, 45, 70, 193, GrowthRate.MEDIUM_FAST, 50, true), new PokemonSpecies(Species.LOTAD, 3, false, false, false, "Water Weed Pokémon", Type.WATER, Type.GRASS, 0.5, 2.6, Abilities.SWIFT_SWIM, Abilities.RAIN_DISH, Abilities.OWN_TEMPO, 220, 40, 30, 30, 40, 50, 30, 255, 50, 44, GrowthRate.MEDIUM_SLOW, 50, false), new PokemonSpecies(Species.LOMBRE, 3, false, false, false, "Jolly Pokémon", Type.WATER, Type.GRASS, 1.2, 32.5, Abilities.SWIFT_SWIM, Abilities.RAIN_DISH, Abilities.OWN_TEMPO, 340, 60, 50, 50, 60, 70, 50, 120, 50, 119, GrowthRate.MEDIUM_SLOW, 50, false), new PokemonSpecies(Species.LUDICOLO, 3, false, false, false, "Carefree Pokémon", Type.WATER, Type.GRASS, 1.5, 55, Abilities.SWIFT_SWIM, Abilities.RAIN_DISH, Abilities.OWN_TEMPO, 480, 80, 70, 70, 90, 100, 70, 45, 50, 240, GrowthRate.MEDIUM_SLOW, 50, true), @@ -1409,7 +1543,7 @@ export function initSpecies() { new PokemonSpecies(Species.BRELOOM, 3, false, false, false, "Mushroom Pokémon", Type.GRASS, Type.FIGHTING, 1.2, 39.2, Abilities.EFFECT_SPORE, Abilities.POISON_HEAL, Abilities.TECHNICIAN, 460, 60, 130, 80, 60, 60, 70, 90, 70, 161, GrowthRate.FLUCTUATING, 50, false), new PokemonSpecies(Species.SLAKOTH, 3, false, false, false, "Slacker Pokémon", Type.NORMAL, null, 0.8, 24, Abilities.TRUANT, Abilities.NONE, Abilities.STALL, 280, 60, 60, 60, 35, 35, 30, 255, 70, 56, GrowthRate.SLOW, 50, false), //Custom Hidden new PokemonSpecies(Species.VIGOROTH, 3, false, false, false, "Wild Monkey Pokémon", Type.NORMAL, null, 1.4, 46.5, Abilities.VITAL_SPIRIT, Abilities.NONE, Abilities.INSOMNIA, 440, 80, 80, 80, 55, 55, 90, 120, 70, 154, GrowthRate.SLOW, 50, false), //Custom Hidden - new PokemonSpecies(Species.SLAKING, 3, false, false, false, "Lazy Pokémon", Type.NORMAL, null, 2, 130.5, Abilities.TRUANT, Abilities.NONE, Abilities.STALL, 670, 150, 160, 100, 95, 65, 100, 45, 70, 252, GrowthRate.SLOW, 50, false), //Custom Hidden + new PokemonSpecies(Species.SLAKING, 3, false, false, false, "Lazy Pokémon", Type.NORMAL, null, 2, 130.5, Abilities.TRUANT, Abilities.NONE, Abilities.STALL, 670, 150, 160, 100, 95, 65, 100, 45, 70, 285, GrowthRate.SLOW, 50, false), //Custom Hidden new PokemonSpecies(Species.NINCADA, 3, false, false, false, "Trainee Pokémon", Type.BUG, Type.GROUND, 0.5, 5.5, Abilities.COMPOUND_EYES, Abilities.NONE, Abilities.RUN_AWAY, 266, 31, 45, 90, 30, 30, 40, 255, 50, 53, GrowthRate.ERRATIC, 50, false), new PokemonSpecies(Species.NINJASK, 3, false, false, false, "Ninja Pokémon", Type.BUG, Type.FLYING, 0.8, 12, Abilities.SPEED_BOOST, Abilities.NONE, Abilities.INFILTRATOR, 456, 61, 90, 45, 50, 50, 160, 120, 50, 160, GrowthRate.ERRATIC, 50, false), new PokemonSpecies(Species.SHEDINJA, 3, false, false, false, "Shed Pokémon", Type.BUG, Type.GHOST, 0.8, 1.2, Abilities.WONDER_GUARD, Abilities.NONE, Abilities.NONE, 236, 1, 90, 45, 30, 30, 40, 45, 50, 83, GrowthRate.ERRATIC, null, false), @@ -1565,24 +1699,24 @@ export function initSpecies() { new PokemonForm("Mega", SpeciesFormKey.MEGA, Type.DRAGON, Type.FLYING, 10.8, 392, Abilities.DELTA_STREAM, Abilities.NONE, Abilities.NONE, 780, 105, 180, 100, 180, 100, 115, 45, 0, 340), ), new PokemonSpecies(Species.JIRACHI, 3, false, false, true, "Wish Pokémon", Type.STEEL, Type.PSYCHIC, 0.3, 1.1, Abilities.SERENE_GRACE, Abilities.NONE, Abilities.NONE, 600, 100, 100, 100, 100, 100, 100, 3, 100, 300, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.DEOXYS, 3, false, false, true, "DNA Pokémon", Type.PSYCHIC, null, 1.7, 60.8, Abilities.PRESSURE, Abilities.NONE, Abilities.NONE, 600, 50, 150, 50, 150, 50, 150, 3, 0, 270, GrowthRate.SLOW, null, false, true, - new PokemonForm("Normal Forme", "normal", Type.PSYCHIC, null, 1.7, 60.8, Abilities.PRESSURE, Abilities.NONE, Abilities.NONE, 600, 50, 150, 50, 150, 50, 150, 3, 0, 270, false, "", true), - new PokemonForm("Attack Forme", "attack", Type.PSYCHIC, null, 1.7, 60.8, Abilities.PRESSURE, Abilities.NONE, Abilities.NONE, 600, 50, 180, 20, 180, 20, 150, 3, 0, 270), - new PokemonForm("Defense Forme", "defense", Type.PSYCHIC, null, 1.7, 60.8, Abilities.PRESSURE, Abilities.NONE, Abilities.NONE, 600, 50, 70, 160, 70, 160, 90, 3, 0, 270), - new PokemonForm("Speed Forme", "speed", Type.PSYCHIC, null, 1.7, 60.8, Abilities.PRESSURE, Abilities.NONE, Abilities.NONE, 600, 50, 95, 90, 95, 90, 180, 3, 0, 270), + new PokemonSpecies(Species.DEOXYS, 3, false, false, true, "DNA Pokémon", Type.PSYCHIC, null, 1.7, 60.8, Abilities.PRESSURE, Abilities.NONE, Abilities.NONE, 600, 50, 150, 50, 150, 50, 150, 3, 0, 300, GrowthRate.SLOW, null, false, true, + new PokemonForm("Normal Forme", "normal", Type.PSYCHIC, null, 1.7, 60.8, Abilities.PRESSURE, Abilities.NONE, Abilities.NONE, 600, 50, 150, 50, 150, 50, 150, 3, 0, 300, false, "", true), + new PokemonForm("Attack Forme", "attack", Type.PSYCHIC, null, 1.7, 60.8, Abilities.PRESSURE, Abilities.NONE, Abilities.NONE, 600, 50, 180, 20, 180, 20, 150, 3, 0, 300), + new PokemonForm("Defense Forme", "defense", Type.PSYCHIC, null, 1.7, 60.8, Abilities.PRESSURE, Abilities.NONE, Abilities.NONE, 600, 50, 70, 160, 70, 160, 90, 3, 0, 300), + new PokemonForm("Speed Forme", "speed", Type.PSYCHIC, null, 1.7, 60.8, Abilities.PRESSURE, Abilities.NONE, Abilities.NONE, 600, 50, 95, 90, 95, 90, 180, 3, 0, 300), ), new PokemonSpecies(Species.TURTWIG, 4, false, false, false, "Tiny Leaf Pokémon", Type.GRASS, null, 0.4, 10.2, Abilities.OVERGROW, Abilities.NONE, Abilities.SHELL_ARMOR, 318, 55, 68, 64, 45, 55, 31, 45, 70, 64, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.GROTLE, 4, false, false, false, "Grove Pokémon", Type.GRASS, null, 1.1, 97, Abilities.OVERGROW, Abilities.NONE, Abilities.SHELL_ARMOR, 405, 75, 89, 85, 55, 65, 36, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.TORTERRA, 4, false, false, false, "Continent Pokémon", Type.GRASS, Type.GROUND, 2.2, 310, Abilities.OVERGROW, Abilities.NONE, Abilities.SHELL_ARMOR, 525, 95, 109, 105, 75, 85, 56, 45, 70, 236, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(Species.TORTERRA, 4, false, false, false, "Continent Pokémon", Type.GRASS, Type.GROUND, 2.2, 310, Abilities.OVERGROW, Abilities.NONE, Abilities.SHELL_ARMOR, 525, 95, 109, 105, 75, 85, 56, 45, 70, 263, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.CHIMCHAR, 4, false, false, false, "Chimp Pokémon", Type.FIRE, null, 0.5, 6.2, Abilities.BLAZE, Abilities.NONE, Abilities.IRON_FIST, 309, 44, 58, 44, 58, 44, 61, 45, 70, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.MONFERNO, 4, false, false, false, "Playful Pokémon", Type.FIRE, Type.FIGHTING, 0.9, 22, Abilities.BLAZE, Abilities.NONE, Abilities.IRON_FIST, 405, 64, 78, 52, 78, 52, 81, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.INFERNAPE, 4, false, false, false, "Flame Pokémon", Type.FIRE, Type.FIGHTING, 1.2, 55, Abilities.BLAZE, Abilities.NONE, Abilities.IRON_FIST, 534, 76, 104, 71, 104, 71, 108, 45, 70, 240, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(Species.INFERNAPE, 4, false, false, false, "Flame Pokémon", Type.FIRE, Type.FIGHTING, 1.2, 55, Abilities.BLAZE, Abilities.NONE, Abilities.IRON_FIST, 534, 76, 104, 71, 104, 71, 108, 45, 70, 267, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.PIPLUP, 4, false, false, false, "Penguin Pokémon", Type.WATER, null, 0.4, 5.2, Abilities.TORRENT, Abilities.NONE, Abilities.COMPETITIVE, 314, 53, 51, 53, 61, 56, 40, 45, 70, 63, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.PRINPLUP, 4, false, false, false, "Penguin Pokémon", Type.WATER, null, 0.8, 23, Abilities.TORRENT, Abilities.NONE, Abilities.COMPETITIVE, 405, 64, 66, 68, 81, 76, 50, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.EMPOLEON, 4, false, false, false, "Emperor Pokémon", Type.WATER, Type.STEEL, 1.7, 84.5, Abilities.TORRENT, Abilities.NONE, Abilities.COMPETITIVE, 530, 84, 86, 88, 111, 101, 60, 45, 70, 239, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(Species.EMPOLEON, 4, false, false, false, "Emperor Pokémon", Type.WATER, Type.STEEL, 1.7, 84.5, Abilities.TORRENT, Abilities.NONE, Abilities.COMPETITIVE, 530, 84, 86, 88, 111, 101, 60, 45, 70, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.STARLY, 4, false, false, false, "Starling Pokémon", Type.NORMAL, Type.FLYING, 0.3, 2, Abilities.KEEN_EYE, Abilities.NONE, Abilities.RECKLESS, 245, 40, 55, 30, 30, 30, 60, 255, 70, 49, GrowthRate.MEDIUM_SLOW, 50, true), new PokemonSpecies(Species.STARAVIA, 4, false, false, false, "Starling Pokémon", Type.NORMAL, Type.FLYING, 0.6, 15.5, Abilities.INTIMIDATE, Abilities.NONE, Abilities.RECKLESS, 340, 55, 75, 50, 40, 40, 80, 120, 70, 119, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(Species.STARAPTOR, 4, false, false, false, "Predator Pokémon", Type.NORMAL, Type.FLYING, 1.2, 24.9, Abilities.INTIMIDATE, Abilities.NONE, Abilities.RECKLESS, 485, 85, 120, 70, 50, 60, 100, 45, 70, 218, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(Species.STARAPTOR, 4, false, false, false, "Predator Pokémon", Type.NORMAL, Type.FLYING, 1.2, 24.9, Abilities.INTIMIDATE, Abilities.NONE, Abilities.RECKLESS, 485, 85, 120, 70, 50, 60, 100, 45, 70, 243, GrowthRate.MEDIUM_SLOW, 50, true), new PokemonSpecies(Species.BIDOOF, 4, false, false, false, "Plump Mouse Pokémon", Type.NORMAL, null, 0.5, 20, Abilities.SIMPLE, Abilities.UNAWARE, Abilities.MOODY, 250, 59, 45, 40, 35, 40, 31, 255, 70, 50, GrowthRate.MEDIUM_FAST, 50, true), new PokemonSpecies(Species.BIBAREL, 4, false, false, false, "Beaver Pokémon", Type.NORMAL, Type.WATER, 1, 31.5, Abilities.SIMPLE, Abilities.UNAWARE, Abilities.MOODY, 410, 79, 85, 60, 55, 60, 71, 127, 70, 144, GrowthRate.MEDIUM_FAST, 50, true), new PokemonSpecies(Species.KRICKETOT, 4, false, false, false, "Cricket Pokémon", Type.BUG, null, 0.3, 2.2, Abilities.SHED_SKIN, Abilities.NONE, Abilities.RUN_AWAY, 194, 37, 25, 41, 25, 41, 25, 255, 70, 39, GrowthRate.MEDIUM_SLOW, 50, true), @@ -1697,11 +1831,11 @@ export function initSpecies() { new PokemonSpecies(Species.FROSLASS, 4, false, false, false, "Snow Land Pokémon", Type.ICE, Type.GHOST, 1.3, 26.6, Abilities.SNOW_CLOAK, Abilities.NONE, Abilities.CURSED_BODY, 480, 70, 80, 70, 80, 70, 110, 75, 50, 168, GrowthRate.MEDIUM_FAST, 0, false), new PokemonSpecies(Species.ROTOM, 4, false, false, false, "Plasma Pokémon", Type.ELECTRIC, Type.GHOST, 0.3, 0.3, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 440, 50, 50, 77, 95, 77, 91, 45, 50, 154, GrowthRate.MEDIUM_FAST, null, false, false, new PokemonForm("Normal", "", Type.ELECTRIC, Type.GHOST, 0.3, 0.3, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 440, 50, 50, 77, 95, 77, 91, 45, 50, 154, false, null, true), - new PokemonForm("Heat", "heat", Type.ELECTRIC, Type.FIRE, 0.3, 0.3, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 520, 50, 65, 107, 105, 107, 86, 45, 50, 154, false, null, true), - new PokemonForm("Wash", "wash", Type.ELECTRIC, Type.WATER, 0.3, 0.3, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 520, 50, 65, 107, 105, 107, 86, 45, 50, 154, false, null, true), - new PokemonForm("Frost", "frost", Type.ELECTRIC, Type.ICE, 0.3, 0.3, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 520, 50, 65, 107, 105, 107, 86, 45, 50, 154, false, null, true), - new PokemonForm("Fan", "fan", Type.ELECTRIC, Type.FLYING, 0.3, 0.3, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 520, 50, 65, 107, 105, 107, 86, 45, 50, 154, false, null, true), - new PokemonForm("Mow", "mow", Type.ELECTRIC, Type.GRASS, 0.3, 0.3, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 520, 50, 65, 107, 105, 107, 86, 45, 50, 154, false, null, true), + new PokemonForm("Heat", "heat", Type.ELECTRIC, Type.FIRE, 0.3, 0.3, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 520, 50, 65, 107, 105, 107, 86, 45, 50, 182, false, null, true), + new PokemonForm("Wash", "wash", Type.ELECTRIC, Type.WATER, 0.3, 0.3, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 520, 50, 65, 107, 105, 107, 86, 45, 50, 182, false, null, true), + new PokemonForm("Frost", "frost", Type.ELECTRIC, Type.ICE, 0.3, 0.3, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 520, 50, 65, 107, 105, 107, 86, 45, 50, 182, false, null, true), + new PokemonForm("Fan", "fan", Type.ELECTRIC, Type.FLYING, 0.3, 0.3, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 520, 50, 65, 107, 105, 107, 86, 45, 50, 182, false, null, true), + new PokemonForm("Mow", "mow", Type.ELECTRIC, Type.GRASS, 0.3, 0.3, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 520, 50, 65, 107, 105, 107, 86, 45, 50, 182, false, null, true), ), new PokemonSpecies(Species.UXIE, 4, true, false, false, "Knowledge Pokémon", Type.PSYCHIC, null, 0.3, 0.3, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 580, 75, 75, 130, 75, 130, 95, 3, 140, 290, GrowthRate.SLOW, null, false), new PokemonSpecies(Species.MESPRIT, 4, true, false, false, "Emotion Pokémon", Type.PSYCHIC, null, 0.3, 0.3, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 580, 80, 105, 105, 105, 105, 80, 3, 140, 290, GrowthRate.SLOW, null, false), @@ -1718,47 +1852,47 @@ export function initSpecies() { new PokemonSpecies(Species.REGIGIGAS, 4, true, false, false, "Colossal Pokémon", Type.NORMAL, null, 3.7, 420, Abilities.SLOW_START, Abilities.NONE, Abilities.NORMALIZE, 670, 110, 160, 110, 80, 110, 100, 3, 0, 335, GrowthRate.SLOW, null, false), new PokemonSpecies(Species.GIRATINA, 4, false, true, false, "Renegade Pokémon", Type.GHOST, Type.DRAGON, 4.5, 750, Abilities.PRESSURE, Abilities.NONE, Abilities.TELEPATHY, 680, 150, 100, 120, 100, 120, 90, 3, 0, 340, GrowthRate.SLOW, null, false, true, new PokemonForm("Altered Forme", "altered", Type.GHOST, Type.DRAGON, 4.5, 750, Abilities.PRESSURE, Abilities.NONE, Abilities.TELEPATHY, 680, 150, 100, 120, 100, 120, 90, 3, 0, 340, false, null, true), - new PokemonForm("Origin Forme", "origin", Type.GHOST, Type.DRAGON, 6.9, 650, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 680, 150, 120, 100, 120, 100, 90, 3, 0, 340), + new PokemonForm("Origin Forme", "origin", Type.GHOST, Type.DRAGON, 6.9, 650, Abilities.LEVITATE, Abilities.NONE, Abilities.LEVITATE, 680, 150, 120, 100, 120, 100, 90, 3, 0, 340), ), new PokemonSpecies(Species.CRESSELIA, 4, true, false, false, "Lunar Pokémon", Type.PSYCHIC, null, 1.5, 85.6, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 580, 120, 70, 110, 75, 120, 85, 3, 100, 300, GrowthRate.SLOW, 0, false), - new PokemonSpecies(Species.PHIONE, 4, false, false, true, "Sea Drifter Pokémon", Type.WATER, null, 0.4, 3.1, Abilities.HYDRATION, Abilities.NONE, Abilities.NONE, 480, 80, 80, 80, 80, 80, 80, 30, 70, 216, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.MANAPHY, 4, false, false, true, "Seafaring Pokémon", Type.WATER, null, 0.3, 1.4, Abilities.HYDRATION, Abilities.NONE, Abilities.NONE, 600, 100, 100, 100, 100, 100, 100, 3, 70, 270, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.DARKRAI, 4, false, false, true, "Pitch-Black Pokémon", Type.DARK, null, 1.5, 50.5, Abilities.BAD_DREAMS, Abilities.NONE, Abilities.NONE, 600, 70, 90, 90, 135, 90, 125, 3, 0, 270, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.SHAYMIN, 4, false, false, true, "Gratitude Pokémon", Type.GRASS, null, 0.2, 2.1, Abilities.NATURAL_CURE, Abilities.NONE, Abilities.NONE, 600, 100, 100, 100, 100, 100, 100, 45, 100, 270, GrowthRate.MEDIUM_SLOW, null, false, true, - new PokemonForm("Land Forme", "land", Type.GRASS, null, 0.2, 2.1, Abilities.NATURAL_CURE, Abilities.NONE, Abilities.NONE, 600, 100, 100, 100, 100, 100, 100, 45, 100, 270, false, null, true), - new PokemonForm("Sky Forme", "sky", Type.GRASS, Type.FLYING, 0.4, 5.2, Abilities.SERENE_GRACE, Abilities.NONE, Abilities.NONE, 600, 100, 103, 75, 120, 75, 127, 45, 100, 270), + new PokemonSpecies(Species.PHIONE, 4, false, false, true, "Sea Drifter Pokémon", Type.WATER, null, 0.4, 3.1, Abilities.HYDRATION, Abilities.NONE, Abilities.NONE, 480, 80, 80, 80, 80, 80, 80, 30, 70, 240, GrowthRate.SLOW, null, false), + new PokemonSpecies(Species.MANAPHY, 4, false, false, true, "Seafaring Pokémon", Type.WATER, null, 0.3, 1.4, Abilities.HYDRATION, Abilities.NONE, Abilities.NONE, 600, 100, 100, 100, 100, 100, 100, 3, 70, 300, GrowthRate.SLOW, null, false), + new PokemonSpecies(Species.DARKRAI, 4, false, false, true, "Pitch-Black Pokémon", Type.DARK, null, 1.5, 50.5, Abilities.BAD_DREAMS, Abilities.NONE, Abilities.NONE, 600, 70, 90, 90, 135, 90, 125, 3, 0, 300, GrowthRate.SLOW, null, false), + new PokemonSpecies(Species.SHAYMIN, 4, false, false, true, "Gratitude Pokémon", Type.GRASS, null, 0.2, 2.1, Abilities.NATURAL_CURE, Abilities.NONE, Abilities.NONE, 600, 100, 100, 100, 100, 100, 100, 45, 100, 300, GrowthRate.MEDIUM_SLOW, null, false, true, + new PokemonForm("Land Forme", "land", Type.GRASS, null, 0.2, 2.1, Abilities.NATURAL_CURE, Abilities.NONE, Abilities.NONE, 600, 100, 100, 100, 100, 100, 100, 45, 100, 300, false, null, true), + new PokemonForm("Sky Forme", "sky", Type.GRASS, Type.FLYING, 0.4, 5.2, Abilities.SERENE_GRACE, Abilities.NONE, Abilities.NONE, 600, 100, 103, 75, 120, 75, 127, 45, 100, 300), ), - new PokemonSpecies(Species.ARCEUS, 4, false, false, true, "Alpha Pokémon", Type.NORMAL, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 324, GrowthRate.SLOW, null, false, true, - new PokemonForm("Normal", "normal", Type.NORMAL, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 324, false, null, true), - new PokemonForm("Fighting", "fighting", Type.FIGHTING, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 324), - new PokemonForm("Flying", "flying", Type.FLYING, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 324), - new PokemonForm("Poison", "poison", Type.POISON, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 324), - new PokemonForm("Ground", "ground", Type.GROUND, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 324), - new PokemonForm("Rock", "rock", Type.ROCK, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 324), - new PokemonForm("Bug", "bug", Type.BUG, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 324), - new PokemonForm("Ghost", "ghost", Type.GHOST, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 324), - new PokemonForm("Steel", "steel", Type.STEEL, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 324), - new PokemonForm("Fire", "fire", Type.FIRE, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 324), - new PokemonForm("Water", "water", Type.WATER, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 324), - new PokemonForm("Grass", "grass", Type.GRASS, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 324), - new PokemonForm("Electric", "electric", Type.ELECTRIC, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 324), - new PokemonForm("Psychic", "psychic", Type.PSYCHIC, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 324), - new PokemonForm("Ice", "ice", Type.ICE, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 324), - new PokemonForm("Dragon", "dragon", Type.DRAGON, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 324), - new PokemonForm("Dark", "dark", Type.DARK, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 324), - new PokemonForm("Fairy", "fairy", Type.FAIRY, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 324), - new PokemonForm("???", "unknown", Type.UNKNOWN, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 324), + new PokemonSpecies(Species.ARCEUS, 4, false, false, true, "Alpha Pokémon", Type.NORMAL, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360, GrowthRate.SLOW, null, false, true, + new PokemonForm("Normal", "normal", Type.NORMAL, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360, false, null, true), + new PokemonForm("Fighting", "fighting", Type.FIGHTING, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Flying", "flying", Type.FLYING, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Poison", "poison", Type.POISON, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Ground", "ground", Type.GROUND, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Rock", "rock", Type.ROCK, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Bug", "bug", Type.BUG, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Ghost", "ghost", Type.GHOST, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Steel", "steel", Type.STEEL, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Fire", "fire", Type.FIRE, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Water", "water", Type.WATER, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Grass", "grass", Type.GRASS, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Electric", "electric", Type.ELECTRIC, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Psychic", "psychic", Type.PSYCHIC, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Ice", "ice", Type.ICE, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Dragon", "dragon", Type.DRAGON, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Dark", "dark", Type.DARK, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Fairy", "fairy", Type.FAIRY, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("???", "unknown", Type.UNKNOWN, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360, false, null, false, true), ), new PokemonSpecies(Species.VICTINI, 5, false, false, true, "Victory Pokémon", Type.PSYCHIC, Type.FIRE, 0.4, 4, Abilities.VICTORY_STAR, Abilities.NONE, Abilities.NONE, 600, 100, 100, 100, 100, 100, 100, 3, 100, 300, GrowthRate.SLOW, null, false), new PokemonSpecies(Species.SNIVY, 5, false, false, false, "Grass Snake Pokémon", Type.GRASS, null, 0.6, 8.1, Abilities.OVERGROW, Abilities.NONE, Abilities.CONTRARY, 308, 45, 45, 55, 45, 55, 63, 45, 70, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.SERVINE, 5, false, false, false, "Grass Snake Pokémon", Type.GRASS, null, 0.8, 16, Abilities.OVERGROW, Abilities.NONE, Abilities.CONTRARY, 413, 60, 60, 75, 60, 75, 83, 45, 70, 145, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.SERPERIOR, 5, false, false, false, "Regal Pokémon", Type.GRASS, null, 3.3, 63, Abilities.OVERGROW, Abilities.NONE, Abilities.CONTRARY, 528, 75, 75, 95, 75, 95, 113, 45, 70, 238, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(Species.SERPERIOR, 5, false, false, false, "Regal Pokémon", Type.GRASS, null, 3.3, 63, Abilities.OVERGROW, Abilities.NONE, Abilities.CONTRARY, 528, 75, 75, 95, 75, 95, 113, 45, 70, 264, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.TEPIG, 5, false, false, false, "Fire Pig Pokémon", Type.FIRE, null, 0.5, 9.9, Abilities.BLAZE, Abilities.NONE, Abilities.THICK_FAT, 308, 65, 63, 45, 45, 45, 45, 45, 70, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.PIGNITE, 5, false, false, false, "Fire Pig Pokémon", Type.FIRE, Type.FIGHTING, 1, 55.5, Abilities.BLAZE, Abilities.NONE, Abilities.THICK_FAT, 418, 90, 93, 55, 70, 55, 55, 45, 70, 146, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.EMBOAR, 5, false, false, false, "Mega Fire Pig Pokémon", Type.FIRE, Type.FIGHTING, 1.6, 150, Abilities.BLAZE, Abilities.NONE, Abilities.RECKLESS, 528, 110, 123, 65, 100, 65, 65, 45, 70, 238, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(Species.EMBOAR, 5, false, false, false, "Mega Fire Pig Pokémon", Type.FIRE, Type.FIGHTING, 1.6, 150, Abilities.BLAZE, Abilities.NONE, Abilities.RECKLESS, 528, 110, 123, 65, 100, 65, 65, 45, 70, 264, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.OSHAWOTT, 5, false, false, false, "Sea Otter Pokémon", Type.WATER, null, 0.5, 5.9, Abilities.TORRENT, Abilities.NONE, Abilities.SHELL_ARMOR, 308, 55, 55, 45, 63, 45, 45, 45, 70, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.DEWOTT, 5, false, false, false, "Discipline Pokémon", Type.WATER, null, 0.8, 24.5, Abilities.TORRENT, Abilities.NONE, Abilities.SHELL_ARMOR, 413, 75, 75, 60, 83, 60, 60, 45, 70, 145, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.SAMUROTT, 5, false, false, false, "Formidable Pokémon", Type.WATER, null, 1.5, 94.6, Abilities.TORRENT, Abilities.NONE, Abilities.SHELL_ARMOR, 528, 95, 100, 85, 108, 70, 70, 45, 70, 238, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(Species.SAMUROTT, 5, false, false, false, "Formidable Pokémon", Type.WATER, null, 1.5, 94.6, Abilities.TORRENT, Abilities.NONE, Abilities.SHELL_ARMOR, 528, 95, 100, 85, 108, 70, 70, 45, 70, 264, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.PATRAT, 5, false, false, false, "Scout Pokémon", Type.NORMAL, null, 0.5, 11.6, Abilities.RUN_AWAY, Abilities.KEEN_EYE, Abilities.ANALYTIC, 255, 45, 55, 39, 35, 39, 42, 255, 70, 51, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.WATCHOG, 5, false, false, false, "Lookout Pokémon", Type.NORMAL, null, 1.1, 27, Abilities.ILLUMINATE, Abilities.KEEN_EYE, Abilities.ANALYTIC, 420, 60, 85, 69, 60, 69, 77, 255, 70, 147, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.LILLIPUP, 5, false, false, false, "Puppy Pokémon", Type.NORMAL, null, 0.4, 4.1, Abilities.VITAL_SPIRIT, Abilities.PICKUP, Abilities.RUN_AWAY, 275, 45, 60, 45, 25, 45, 55, 255, 50, 55, GrowthRate.MEDIUM_SLOW, 50, false), @@ -1800,7 +1934,7 @@ export function initSpecies() { new PokemonSpecies(Species.SAWK, 5, false, false, false, "Karate Pokémon", Type.FIGHTING, null, 1.4, 51, Abilities.STURDY, Abilities.INNER_FOCUS, Abilities.MOLD_BREAKER, 465, 75, 125, 75, 30, 75, 85, 45, 50, 163, GrowthRate.MEDIUM_FAST, 100, false), new PokemonSpecies(Species.SEWADDLE, 5, false, false, false, "Sewing Pokémon", Type.BUG, Type.GRASS, 0.3, 2.5, Abilities.SWARM, Abilities.CHLOROPHYLL, Abilities.OVERCOAT, 310, 45, 53, 70, 40, 60, 42, 255, 70, 62, GrowthRate.MEDIUM_SLOW, 50, false), new PokemonSpecies(Species.SWADLOON, 5, false, false, false, "Leaf-Wrapped Pokémon", Type.BUG, Type.GRASS, 0.5, 7.3, Abilities.LEAF_GUARD, Abilities.CHLOROPHYLL, Abilities.OVERCOAT, 380, 55, 63, 90, 50, 80, 42, 120, 70, 133, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.LEAVANNY, 5, false, false, false, "Nurturing Pokémon", Type.BUG, Type.GRASS, 1.2, 20.5, Abilities.SWARM, Abilities.CHLOROPHYLL, Abilities.OVERCOAT, 500, 75, 103, 80, 70, 80, 92, 45, 70, 225, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(Species.LEAVANNY, 5, false, false, false, "Nurturing Pokémon", Type.BUG, Type.GRASS, 1.2, 20.5, Abilities.SWARM, Abilities.CHLOROPHYLL, Abilities.OVERCOAT, 500, 75, 103, 80, 70, 80, 92, 45, 70, 250, GrowthRate.MEDIUM_SLOW, 50, false), new PokemonSpecies(Species.VENIPEDE, 5, false, false, false, "Centipede Pokémon", Type.BUG, Type.POISON, 0.4, 5.3, Abilities.POISON_POINT, Abilities.SWARM, Abilities.SPEED_BOOST, 260, 30, 45, 59, 30, 39, 57, 255, 50, 52, GrowthRate.MEDIUM_SLOW, 50, false), new PokemonSpecies(Species.WHIRLIPEDE, 5, false, false, false, "Curlipede Pokémon", Type.BUG, Type.POISON, 1.2, 58.5, Abilities.POISON_POINT, Abilities.SWARM, Abilities.SPEED_BOOST, 360, 40, 55, 99, 40, 79, 47, 120, 50, 126, GrowthRate.MEDIUM_SLOW, 50, false), new PokemonSpecies(Species.SCOLIPEDE, 5, false, false, false, "Megapede Pokémon", Type.BUG, Type.POISON, 2.5, 200.5, Abilities.POISON_POINT, Abilities.SWARM, Abilities.SPEED_BOOST, 485, 60, 100, 89, 55, 69, 112, 45, 50, 243, GrowthRate.MEDIUM_SLOW, 50, false), @@ -1819,7 +1953,7 @@ export function initSpecies() { new PokemonSpecies(Species.DARUMAKA, 5, false, false, false, "Zen Charm Pokémon", Type.FIRE, null, 0.6, 37.5, Abilities.HUSTLE, Abilities.NONE, Abilities.INNER_FOCUS, 315, 70, 90, 45, 15, 45, 50, 120, 50, 63, GrowthRate.MEDIUM_SLOW, 50, false), new PokemonSpecies(Species.DARMANITAN, 5, false, false, false, "Blazing Pokémon", Type.FIRE, null, 1.3, 92.9, Abilities.SHEER_FORCE, Abilities.NONE, Abilities.ZEN_MODE, 480, 105, 140, 55, 30, 55, 95, 60, 50, 168, GrowthRate.MEDIUM_SLOW, 50, false, true, new PokemonForm("Standard Mode", "", Type.FIRE, null, 1.3, 92.9, Abilities.SHEER_FORCE, Abilities.NONE, Abilities.ZEN_MODE, 480, 105, 140, 55, 30, 55, 95, 60, 50, 168, false, null, true), - new PokemonForm("Zen Mode", "zen", Type.FIRE, Type.PSYCHIC, 1.3, 92.9, Abilities.SHEER_FORCE, Abilities.NONE, Abilities.ZEN_MODE, 540, 105, 30, 105, 140, 105, 55, 60, 50, 168), + new PokemonForm("Zen Mode", "zen", Type.FIRE, Type.PSYCHIC, 1.3, 92.9, Abilities.SHEER_FORCE, Abilities.NONE, Abilities.ZEN_MODE, 540, 105, 30, 105, 140, 105, 55, 60, 50, 189), ), new PokemonSpecies(Species.MARACTUS, 5, false, false, false, "Cactus Pokémon", Type.GRASS, null, 1, 28, Abilities.WATER_ABSORB, Abilities.CHLOROPHYLL, Abilities.STORM_DRAIN, 461, 75, 86, 67, 106, 67, 60, 255, 50, 161, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.DWEBBLE, 5, false, false, false, "Rock Inn Pokémon", Type.BUG, Type.ROCK, 0.3, 14.5, Abilities.STURDY, Abilities.SHELL_ARMOR, Abilities.WEAK_ARMOR, 325, 50, 65, 85, 35, 35, 55, 190, 50, 65, GrowthRate.MEDIUM_FAST, 50, false), @@ -1831,7 +1965,7 @@ export function initSpecies() { new PokemonSpecies(Species.COFAGRIGUS, 5, false, false, false, "Coffin Pokémon", Type.GHOST, null, 1.7, 76.5, Abilities.MUMMY, Abilities.NONE, Abilities.NONE, 483, 58, 50, 145, 95, 105, 30, 90, 50, 169, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.TIRTOUGA, 5, false, false, false, "Prototurtle Pokémon", Type.WATER, Type.ROCK, 0.7, 16.5, Abilities.SOLID_ROCK, Abilities.STURDY, Abilities.SWIFT_SWIM, 355, 54, 78, 103, 53, 45, 22, 45, 50, 71, GrowthRate.MEDIUM_FAST, 87.5, false), new PokemonSpecies(Species.CARRACOSTA, 5, false, false, false, "Prototurtle Pokémon", Type.WATER, Type.ROCK, 1.2, 81, Abilities.SOLID_ROCK, Abilities.STURDY, Abilities.SWIFT_SWIM, 495, 74, 108, 133, 83, 65, 32, 45, 50, 173, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(Species.ARCHEN, 5, false, false, false, "First Bird Pokémon", Type.ROCK, Type.FLYING, 0.5, 9.5, Abilities.DEFEATIST, Abilities.NONE, Abilities.EMERGENCY_EXIT, 401, 55, 112, 45, 74, 45, 70, 45, 50, 71, GrowthRate.MEDIUM_FAST, 87.5, false), //Custom Hidden + new PokemonSpecies(Species.ARCHEN, 5, false, false, false, "First Bird Pokémon", Type.ROCK, Type.FLYING, 0.5, 9.5, Abilities.DEFEATIST, Abilities.NONE, Abilities.WIMP_OUT, 401, 55, 112, 45, 74, 45, 70, 45, 50, 71, GrowthRate.MEDIUM_FAST, 87.5, false), //Custom Hidden new PokemonSpecies(Species.ARCHEOPS, 5, false, false, false, "First Bird Pokémon", Type.ROCK, Type.FLYING, 1.4, 32, Abilities.DEFEATIST, Abilities.NONE, Abilities.EMERGENCY_EXIT, 567, 75, 140, 65, 112, 65, 110, 45, 50, 177, GrowthRate.MEDIUM_FAST, 87.5, false), //Custom Hidden new PokemonSpecies(Species.TRUBBISH, 5, false, false, false, "Trash Bag Pokémon", Type.POISON, null, 0.6, 31, Abilities.STENCH, Abilities.STICKY_HOLD, Abilities.AFTERMATH, 329, 50, 50, 62, 40, 62, 65, 190, 50, 66, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.GARBODOR, 5, false, false, false, "Trash Heap Pokémon", Type.POISON, null, 1.9, 107.3, Abilities.STENCH, Abilities.WEAK_ARMOR, Abilities.AFTERMATH, 474, 80, 95, 82, 60, 82, 75, 60, 50, 166, GrowthRate.MEDIUM_FAST, 50, false, true, @@ -1882,7 +2016,7 @@ export function initSpecies() { new PokemonSpecies(Species.KLINKLANG, 5, false, false, false, "Gear Pokémon", Type.STEEL, null, 0.6, 81, Abilities.PLUS, Abilities.MINUS, Abilities.CLEAR_BODY, 520, 60, 100, 115, 70, 85, 90, 30, 50, 260, GrowthRate.MEDIUM_SLOW, null, false), new PokemonSpecies(Species.TYNAMO, 5, false, false, false, "EleFish Pokémon", Type.ELECTRIC, null, 0.2, 0.3, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 275, 35, 55, 40, 45, 40, 60, 190, 70, 55, GrowthRate.SLOW, 50, false), new PokemonSpecies(Species.EELEKTRIK, 5, false, false, false, "EleFish Pokémon", Type.ELECTRIC, null, 1.2, 22, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 405, 65, 85, 70, 75, 70, 40, 60, 70, 142, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.EELEKTROSS, 5, false, false, false, "EleFish Pokémon", Type.ELECTRIC, null, 2.1, 80.5, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 515, 85, 115, 80, 105, 80, 50, 30, 70, 232, GrowthRate.SLOW, 50, false), + new PokemonSpecies(Species.EELEKTROSS, 5, false, false, false, "EleFish Pokémon", Type.ELECTRIC, null, 2.1, 80.5, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 515, 85, 115, 80, 105, 80, 50, 30, 70, 258, GrowthRate.SLOW, 50, false), new PokemonSpecies(Species.ELGYEM, 5, false, false, false, "Cerebral Pokémon", Type.PSYCHIC, null, 0.5, 9, Abilities.TELEPATHY, Abilities.SYNCHRONIZE, Abilities.ANALYTIC, 335, 55, 55, 55, 85, 55, 30, 255, 50, 67, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.BEHEEYEM, 5, false, false, false, "Cerebral Pokémon", Type.PSYCHIC, null, 1, 34.5, Abilities.TELEPATHY, Abilities.SYNCHRONIZE, Abilities.ANALYTIC, 485, 75, 75, 75, 125, 95, 40, 90, 50, 170, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.LITWICK, 5, false, false, false, "Candle Pokémon", Type.GHOST, Type.FIRE, 0.3, 3.1, Abilities.FLASH_FIRE, Abilities.FLAME_BODY, Abilities.INFILTRATOR, 275, 50, 30, 55, 65, 55, 20, 190, 50, 55, GrowthRate.MEDIUM_SLOW, 50, false), @@ -1935,16 +2069,16 @@ export function initSpecies() { ), new PokemonSpecies(Species.KYUREM, 5, false, true, false, "Boundary Pokémon", Type.DRAGON, Type.ICE, 3, 325, Abilities.PRESSURE, Abilities.NONE, Abilities.NONE, 660, 125, 130, 90, 130, 90, 95, 3, 0, 330, GrowthRate.SLOW, null, false, true, new PokemonForm("Normal", "", Type.DRAGON, Type.ICE, 3, 325, Abilities.PRESSURE, Abilities.NONE, Abilities.NONE, 660, 125, 130, 90, 130, 90, 95, 3, 0, 330, false, null, true), - new PokemonForm("Black", "black", Type.DRAGON, Type.ICE, 3.3, 325, Abilities.TERAVOLT, Abilities.NONE, Abilities.NONE, 700, 125, 170, 100, 120, 90, 95, 3, 0, 330), - new PokemonForm("White", "white", Type.DRAGON, Type.ICE, 3.6, 325, Abilities.TURBOBLAZE, Abilities.NONE, Abilities.NONE, 700, 125, 120, 90, 170, 100, 95, 3, 0, 330), + new PokemonForm("Black", "black", Type.DRAGON, Type.ICE, 3.3, 325, Abilities.TERAVOLT, Abilities.NONE, Abilities.NONE, 700, 125, 170, 100, 120, 90, 95, 3, 0, 350), + new PokemonForm("White", "white", Type.DRAGON, Type.ICE, 3.6, 325, Abilities.TURBOBLAZE, Abilities.NONE, Abilities.NONE, 700, 125, 120, 90, 170, 100, 95, 3, 0, 350), ), new PokemonSpecies(Species.KELDEO, 5, false, false, true, "Colt Pokémon", Type.WATER, Type.FIGHTING, 1.4, 48.5, Abilities.JUSTIFIED, Abilities.NONE, Abilities.NONE, 580, 91, 72, 90, 129, 90, 108, 3, 35, 290, GrowthRate.SLOW, null, false, true, new PokemonForm("Ordinary Form", "ordinary", Type.WATER, Type.FIGHTING, 1.4, 48.5, Abilities.JUSTIFIED, Abilities.NONE, Abilities.NONE, 580, 91, 72, 90, 129, 90, 108, 3, 35, 290, false, null, true), new PokemonForm("Resolute", "resolute", Type.WATER, Type.FIGHTING, 1.4, 48.5, Abilities.JUSTIFIED, Abilities.NONE, Abilities.NONE, 580, 91, 72, 90, 129, 90, 108, 3, 35, 290), ), - new PokemonSpecies(Species.MELOETTA, 5, false, false, true, "Melody Pokémon", Type.NORMAL, Type.PSYCHIC, 0.6, 6.5, Abilities.SERENE_GRACE, Abilities.NONE, Abilities.NONE, 600, 100, 77, 77, 128, 128, 90, 3, 100, 270, GrowthRate.SLOW, null, false, true, - new PokemonForm("Aria Forme", "aria", Type.NORMAL, Type.PSYCHIC, 0.6, 6.5, Abilities.SERENE_GRACE, Abilities.NONE, Abilities.NONE, 600, 100, 77, 77, 128, 128, 90, 3, 100, 270, false, null, true), - new PokemonForm("Pirouette Forme", "pirouette", Type.NORMAL, Type.FIGHTING, 0.6, 6.5, Abilities.SERENE_GRACE, Abilities.NONE, Abilities.NONE, 600, 100, 128, 90, 77, 77, 128, 3, 100, 270, false, null, true), + new PokemonSpecies(Species.MELOETTA, 5, false, false, true, "Melody Pokémon", Type.NORMAL, Type.PSYCHIC, 0.6, 6.5, Abilities.SERENE_GRACE, Abilities.NONE, Abilities.NONE, 600, 100, 77, 77, 128, 128, 90, 3, 100, 300, GrowthRate.SLOW, null, false, true, + new PokemonForm("Aria Forme", "aria", Type.NORMAL, Type.PSYCHIC, 0.6, 6.5, Abilities.SERENE_GRACE, Abilities.NONE, Abilities.NONE, 600, 100, 77, 77, 128, 128, 90, 3, 100, 300, false, null, true), + new PokemonForm("Pirouette Forme", "pirouette", Type.NORMAL, Type.FIGHTING, 0.6, 6.5, Abilities.SERENE_GRACE, Abilities.NONE, Abilities.NONE, 600, 100, 128, 90, 77, 77, 128, 3, 100, 300, false, null, true), ), new PokemonSpecies(Species.GENESECT, 5, false, false, true, "Paleozoic Pokémon", Type.BUG, Type.STEEL, 1.5, 82.5, Abilities.DOWNLOAD, Abilities.NONE, Abilities.NONE, 600, 71, 120, 95, 120, 95, 99, 3, 0, 300, GrowthRate.SLOW, null, false, true, new PokemonForm("Normal", "", Type.BUG, Type.STEEL, 1.5, 82.5, Abilities.DOWNLOAD, Abilities.NONE, Abilities.NONE, 600, 71, 120, 95, 120, 95, 99, 3, 0, 300, false, null, true), @@ -1955,10 +2089,10 @@ export function initSpecies() { ), new PokemonSpecies(Species.CHESPIN, 6, false, false, false, "Spiny Nut Pokémon", Type.GRASS, null, 0.4, 9, Abilities.OVERGROW, Abilities.NONE, Abilities.BULLETPROOF, 313, 56, 61, 65, 48, 45, 38, 45, 70, 63, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.QUILLADIN, 6, false, false, false, "Spiny Armor Pokémon", Type.GRASS, null, 0.7, 29, Abilities.OVERGROW, Abilities.NONE, Abilities.BULLETPROOF, 405, 61, 78, 95, 56, 58, 57, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.CHESNAUGHT, 6, false, false, false, "Spiny Armor Pokémon", Type.GRASS, Type.FIGHTING, 1.6, 90, Abilities.OVERGROW, Abilities.NONE, Abilities.BULLETPROOF, 530, 88, 107, 122, 74, 75, 64, 45, 70, 239, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(Species.CHESNAUGHT, 6, false, false, false, "Spiny Armor Pokémon", Type.GRASS, Type.FIGHTING, 1.6, 90, Abilities.OVERGROW, Abilities.NONE, Abilities.BULLETPROOF, 530, 88, 107, 122, 74, 75, 64, 45, 70, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.FENNEKIN, 6, false, false, false, "Fox Pokémon", Type.FIRE, null, 0.4, 9.4, Abilities.BLAZE, Abilities.NONE, Abilities.MAGICIAN, 307, 40, 45, 40, 62, 60, 60, 45, 70, 61, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.BRAIXEN, 6, false, false, false, "Fox Pokémon", Type.FIRE, null, 1, 14.5, Abilities.BLAZE, Abilities.NONE, Abilities.MAGICIAN, 409, 59, 59, 58, 90, 70, 73, 45, 70, 143, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.DELPHOX, 6, false, false, false, "Fox Pokémon", Type.FIRE, Type.PSYCHIC, 1.5, 39, Abilities.BLAZE, Abilities.NONE, Abilities.MAGICIAN, 534, 75, 69, 72, 114, 100, 104, 45, 70, 240, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(Species.DELPHOX, 6, false, false, false, "Fox Pokémon", Type.FIRE, Type.PSYCHIC, 1.5, 39, Abilities.BLAZE, Abilities.NONE, Abilities.MAGICIAN, 534, 75, 69, 72, 114, 100, 104, 45, 70, 267, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.FROAKIE, 6, false, false, false, "Bubble Frog Pokémon", Type.WATER, null, 0.3, 7, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 314, 41, 56, 40, 62, 44, 71, 45, 70, 63, GrowthRate.MEDIUM_SLOW, 87.5, false, false, new PokemonForm("Normal", "", Type.WATER, null, 0.3, 7, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 314, 41, 56, 40, 62, 44, 71, 45, 70, 63, false, null, true), new PokemonForm("Battle Bond", "battle-bond", Type.WATER, null, 0.3, 7, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 314, 41, 56, 40, 62, 44, 71, 45, 70, 63, false, "", true), @@ -1967,10 +2101,10 @@ export function initSpecies() { new PokemonForm("Normal", "", Type.WATER, null, 0.6, 10.9, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 405, 54, 63, 52, 83, 56, 97, 45, 70, 142, false, null, true), new PokemonForm("Battle Bond", "battle-bond", Type.WATER, null, 0.6, 10.9, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 405, 54, 63, 52, 83, 56, 97, 45, 70, 142, false, "", true), ), - new PokemonSpecies(Species.GRENINJA, 6, false, false, false, "Ninja Pokémon", Type.WATER, Type.DARK, 1.5, 40, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 530, 72, 95, 67, 103, 71, 122, 45, 70, 239, GrowthRate.MEDIUM_SLOW, 87.5, false, false, - new PokemonForm("Normal", "", Type.WATER, Type.DARK, 1.5, 40, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 530, 72, 95, 67, 103, 71, 122, 45, 70, 239, false, null, true), - new PokemonForm("Battle Bond", "battle-bond", Type.WATER, Type.DARK, 1.5, 40, Abilities.BATTLE_BOND, Abilities.NONE, Abilities.BATTLE_BOND, 530, 72, 95, 67, 103, 71, 122, 45, 70, 239, false, "", true), - new PokemonForm("Ash", "ash", Type.WATER, Type.DARK, 1.5, 40, Abilities.BATTLE_BOND, Abilities.NONE, Abilities.BATTLE_BOND, 640, 72, 145, 67, 153, 71, 132, 45, 70, 239), + new PokemonSpecies(Species.GRENINJA, 6, false, false, false, "Ninja Pokémon", Type.WATER, Type.DARK, 1.5, 40, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 530, 72, 95, 67, 103, 71, 122, 45, 70, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, false, + new PokemonForm("Normal", "", Type.WATER, Type.DARK, 1.5, 40, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 530, 72, 95, 67, 103, 71, 122, 45, 70, 265, false, null, true), + new PokemonForm("Battle Bond", "battle-bond", Type.WATER, Type.DARK, 1.5, 40, Abilities.BATTLE_BOND, Abilities.NONE, Abilities.BATTLE_BOND, 530, 72, 95, 67, 103, 71, 122, 45, 70, 265, false, "", true), + new PokemonForm("Ash", "ash", Type.WATER, Type.DARK, 1.5, 40, Abilities.BATTLE_BOND, Abilities.NONE, Abilities.BATTLE_BOND, 640, 72, 145, 67, 153, 71, 132, 45, 70, 265), ), new PokemonSpecies(Species.BUNNELBY, 6, false, false, false, "Digging Pokémon", Type.NORMAL, null, 0.4, 5, Abilities.PICKUP, Abilities.CHEEK_POUCH, Abilities.HUGE_POWER, 237, 38, 36, 38, 32, 36, 57, 255, 50, 47, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.DIGGERSBY, 6, false, false, false, "Digging Pokémon", Type.NORMAL, Type.GROUND, 1, 42.4, Abilities.PICKUP, Abilities.CHEEK_POUCH, Abilities.HUGE_POWER, 423, 85, 56, 77, 50, 77, 78, 127, 50, 148, GrowthRate.MEDIUM_FAST, 50, false), @@ -2021,27 +2155,27 @@ export function initSpecies() { new PokemonForm("Fancy Pattern", "fancy", Type.BUG, null, 0.3, 8.4, Abilities.SHED_SKIN, Abilities.NONE, Abilities.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), new PokemonForm("Poké Ball Pattern", "poke-ball", Type.BUG, null, 0.3, 8.4, Abilities.SHED_SKIN, Abilities.NONE, Abilities.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), ), - new PokemonSpecies(Species.VIVILLON, 6, false, false, false, "Scale Pokémon", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 185, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Meadow Pattern", "meadow", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 185, false, null, true), - new PokemonForm("Icy Snow Pattern", "icy-snow", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 185, false, null, true), - new PokemonForm("Polar Pattern", "polar", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 185, false, null, true), - new PokemonForm("Tundra Pattern", "tundra", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 185, false, null, true), - new PokemonForm("Continental Pattern", "continental", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 185, false, null, true), - new PokemonForm("Garden Pattern", "garden", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 185, false, null, true), - new PokemonForm("Elegant Pattern", "elegant", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 185, false, null, true), - new PokemonForm("Modern Pattern", "modern", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 185, false, null, true), - new PokemonForm("Marine Pattern", "marine", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 185, false, null, true), - new PokemonForm("Archipelago Pattern", "archipelago", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 185, false, null, true), - new PokemonForm("High Plains Pattern", "high-plains", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 185, false, null, true), - new PokemonForm("Sandstorm Pattern", "sandstorm", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 185, false, null, true), - new PokemonForm("River Pattern", "river", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 185, false, null, true), - new PokemonForm("Monsoon Pattern", "monsoon", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 185, false, null, true), - new PokemonForm("Savanna Pattern", "savanna", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 185, false, null, true), - new PokemonForm("Sun Pattern", "sun", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 185, false, null, true), - new PokemonForm("Ocean Pattern", "ocean", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 185, false, null, true), - new PokemonForm("Jungle Pattern", "jungle", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 185, false, null, true), - new PokemonForm("Fancy Pattern", "fancy", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 185, false, null, true), - new PokemonForm("Poké Ball Pattern", "poke-ball", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 185, false, null, true), + new PokemonSpecies(Species.VIVILLON, 6, false, false, false, "Scale Pokémon", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Meadow Pattern", "meadow", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Icy Snow Pattern", "icy-snow", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Polar Pattern", "polar", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Tundra Pattern", "tundra", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Continental Pattern", "continental", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Garden Pattern", "garden", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Elegant Pattern", "elegant", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Modern Pattern", "modern", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Marine Pattern", "marine", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Archipelago Pattern", "archipelago", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("High Plains Pattern", "high-plains", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Sandstorm Pattern", "sandstorm", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("River Pattern", "river", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Monsoon Pattern", "monsoon", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Savanna Pattern", "savanna", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Sun Pattern", "sun", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Ocean Pattern", "ocean", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Jungle Pattern", "jungle", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Fancy Pattern", "fancy", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Poké Ball Pattern", "poke-ball", Type.BUG, Type.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), ), new PokemonSpecies(Species.LITLEO, 6, false, false, false, "Lion Cub Pokémon", Type.FIRE, Type.NORMAL, 0.6, 13.5, Abilities.RIVALRY, Abilities.UNNERVE, Abilities.MOXIE, 369, 62, 50, 58, 73, 54, 72, 220, 70, 74, GrowthRate.MEDIUM_SLOW, 12.5, false), new PokemonSpecies(Species.PYROAR, 6, false, false, false, "Royal Pokémon", Type.FIRE, Type.NORMAL, 1.5, 81.5, Abilities.RIVALRY, Abilities.UNNERVE, Abilities.MOXIE, 507, 86, 68, 72, 109, 66, 106, 65, 70, 177, GrowthRate.MEDIUM_SLOW, 12.5, true), @@ -2059,12 +2193,12 @@ export function initSpecies() { new PokemonForm("Blue Flower", "blue", Type.FAIRY, null, 0.2, 0.9, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 371, 54, 45, 47, 75, 98, 52, 120, 70, 130, false, null, true), new PokemonForm("White Flower", "white", Type.FAIRY, null, 0.2, 0.9, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 371, 54, 45, 47, 75, 98, 52, 120, 70, 130, false, null, true), ), - new PokemonSpecies(Species.FLORGES, 6, false, false, false, "Garden Pokémon", Type.FAIRY, null, 1.1, 10, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 248, GrowthRate.MEDIUM_FAST, 0, false, false, - new PokemonForm("Red Flower", "red", Type.FAIRY, null, 1.1, 10, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 248, false, null, true), - new PokemonForm("Yellow Flower", "yellow", Type.FAIRY, null, 1.1, 10, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 248, false, null, true), - new PokemonForm("Orange Flower", "orange", Type.FAIRY, null, 1.1, 10, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 248, false, null, true), - new PokemonForm("Blue Flower", "blue", Type.FAIRY, null, 1.1, 10, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 248, false, null, true), - new PokemonForm("White Flower", "white", Type.FAIRY, null, 1.1, 10, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 248, false, null, true), + new PokemonSpecies(Species.FLORGES, 6, false, false, false, "Garden Pokémon", Type.FAIRY, null, 1.1, 10, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 276, GrowthRate.MEDIUM_FAST, 0, false, false, + new PokemonForm("Red Flower", "red", Type.FAIRY, null, 1.1, 10, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 276, false, null, true), + new PokemonForm("Yellow Flower", "yellow", Type.FAIRY, null, 1.1, 10, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 276, false, null, true), + new PokemonForm("Orange Flower", "orange", Type.FAIRY, null, 1.1, 10, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 276, false, null, true), + new PokemonForm("Blue Flower", "blue", Type.FAIRY, null, 1.1, 10, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 276, false, null, true), + new PokemonForm("White Flower", "white", Type.FAIRY, null, 1.1, 10, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 276, false, null, true), ), new PokemonSpecies(Species.SKIDDO, 6, false, false, false, "Mount Pokémon", Type.GRASS, null, 0.9, 31, Abilities.SAP_SIPPER, Abilities.NONE, Abilities.GRASS_PELT, 350, 66, 65, 48, 62, 57, 52, 200, 70, 70, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.GOGOAT, 6, false, false, false, "Mount Pokémon", Type.GRASS, null, 1.7, 91, Abilities.SAP_SIPPER, Abilities.NONE, Abilities.GRASS_PELT, 531, 123, 100, 62, 97, 81, 68, 45, 70, 186, GrowthRate.MEDIUM_FAST, 50, false), @@ -2144,19 +2278,19 @@ export function initSpecies() { new PokemonSpecies(Species.YVELTAL, 6, false, true, false, "Destruction Pokémon", Type.DARK, Type.FLYING, 5.8, 203, Abilities.DARK_AURA, Abilities.NONE, Abilities.NONE, 680, 126, 131, 95, 131, 98, 99, 45, 0, 340, GrowthRate.SLOW, null, false), new PokemonSpecies(Species.ZYGARDE, 6, false, true, false, "Order Pokémon", Type.DRAGON, Type.GROUND, 5, 305, Abilities.AURA_BREAK, Abilities.NONE, Abilities.NONE, 600, 108, 100, 121, 81, 95, 95, 3, 0, 300, GrowthRate.SLOW, null, false, false, new PokemonForm("50% Forme", "50", Type.DRAGON, Type.GROUND, 5, 305, Abilities.AURA_BREAK, Abilities.NONE, Abilities.NONE, 600, 108, 100, 121, 81, 95, 95, 3, 0, 300, false, "", true), - new PokemonForm("10% Forme", "10", Type.DRAGON, Type.GROUND, 1.2, 33.5, Abilities.AURA_BREAK, Abilities.NONE, Abilities.NONE, 486, 54, 100, 71, 61, 85, 115, 3, 0, 300, false, null, true), + new PokemonForm("10% Forme", "10", Type.DRAGON, Type.GROUND, 1.2, 33.5, Abilities.AURA_BREAK, Abilities.NONE, Abilities.NONE, 486, 54, 100, 71, 61, 85, 115, 3, 0, 243, false, null, true), new PokemonForm("50% Forme Power Construct", "50-pc", Type.DRAGON, Type.GROUND, 5, 305, Abilities.POWER_CONSTRUCT, Abilities.NONE, Abilities.NONE, 600, 108, 100, 121, 81, 95, 95, 3, 0, 300, false, "", true), - new PokemonForm("10% Forme Power Construct", "10-pc", Type.DRAGON, Type.GROUND, 1.2, 33.5, Abilities.POWER_CONSTRUCT, Abilities.NONE, Abilities.NONE, 486, 54, 100, 71, 61, 85, 115, 3, 0, 300, false, "10", true), - new PokemonForm("Complete Forme (50% PC)", "complete", Type.DRAGON, Type.GROUND, 4.5, 610, Abilities.POWER_CONSTRUCT, Abilities.NONE, Abilities.NONE, 708, 216, 100, 121, 91, 95, 85, 3, 0, 300), - new PokemonForm("Complete Forme (10% PC)", "10-complete", Type.DRAGON, Type.GROUND, 4.5, 610, Abilities.POWER_CONSTRUCT, Abilities.NONE, Abilities.NONE, 708, 216, 100, 121, 91, 95, 85, 3, 0, 300, false, "complete"), + new PokemonForm("10% Forme Power Construct", "10-pc", Type.DRAGON, Type.GROUND, 1.2, 33.5, Abilities.POWER_CONSTRUCT, Abilities.NONE, Abilities.NONE, 486, 54, 100, 71, 61, 85, 115, 3, 0, 243, false, "10", true), + new PokemonForm("Complete Forme (50% PC)", "complete", Type.DRAGON, Type.GROUND, 4.5, 610, Abilities.POWER_CONSTRUCT, Abilities.NONE, Abilities.NONE, 708, 216, 100, 121, 91, 95, 85, 3, 0, 354), + new PokemonForm("Complete Forme (10% PC)", "10-complete", Type.DRAGON, Type.GROUND, 4.5, 610, Abilities.POWER_CONSTRUCT, Abilities.NONE, Abilities.NONE, 708, 216, 100, 121, 91, 95, 85, 3, 0, 354, false, "complete"), ), new PokemonSpecies(Species.DIANCIE, 6, false, false, true, "Jewel Pokémon", Type.ROCK, Type.FAIRY, 0.7, 8.8, Abilities.CLEAR_BODY, Abilities.NONE, Abilities.NONE, 600, 50, 100, 150, 100, 150, 50, 3, 50, 300, GrowthRate.SLOW, null, false, true, new PokemonForm("Normal", "", Type.ROCK, Type.FAIRY, 0.7, 8.8, Abilities.CLEAR_BODY, Abilities.NONE, Abilities.NONE, 600, 50, 100, 150, 100, 150, 50, 3, 50, 300, false, null, true), new PokemonForm("Mega", SpeciesFormKey.MEGA, Type.ROCK, Type.FAIRY, 1.1, 27.8, Abilities.MAGIC_BOUNCE, Abilities.NONE, Abilities.NONE, 700, 50, 160, 110, 160, 110, 110, 3, 50, 300), ), - new PokemonSpecies(Species.HOOPA, 6, false, false, true, "Mischief Pokémon", Type.PSYCHIC, Type.GHOST, 0.5, 9, Abilities.MAGICIAN, Abilities.NONE, Abilities.NONE, 600, 80, 110, 60, 150, 130, 70, 3, 100, 270, GrowthRate.SLOW, null, false, false, - new PokemonForm("Hoopa Confined", "", Type.PSYCHIC, Type.GHOST, 0.5, 9, Abilities.MAGICIAN, Abilities.NONE, Abilities.NONE, 600, 80, 110, 60, 150, 130, 70, 3, 100, 270, false, null, true), - new PokemonForm("Hoopa Unbound", "unbound", Type.PSYCHIC, Type.DARK, 6.5, 490, Abilities.MAGICIAN, Abilities.NONE, Abilities.NONE, 680, 80, 160, 60, 170, 130, 80, 3, 100, 270), + new PokemonSpecies(Species.HOOPA, 6, false, false, true, "Mischief Pokémon", Type.PSYCHIC, Type.GHOST, 0.5, 9, Abilities.MAGICIAN, Abilities.NONE, Abilities.NONE, 600, 80, 110, 60, 150, 130, 70, 3, 100, 300, GrowthRate.SLOW, null, false, false, + new PokemonForm("Hoopa Confined", "", Type.PSYCHIC, Type.GHOST, 0.5, 9, Abilities.MAGICIAN, Abilities.NONE, Abilities.NONE, 600, 80, 110, 60, 150, 130, 70, 3, 100, 300, false, null, true), + new PokemonForm("Hoopa Unbound", "unbound", Type.PSYCHIC, Type.DARK, 6.5, 490, Abilities.MAGICIAN, Abilities.NONE, Abilities.NONE, 680, 80, 160, 60, 170, 130, 80, 3, 100, 340), ), new PokemonSpecies(Species.VOLCANION, 6, false, false, true, "Steam Pokémon", Type.FIRE, Type.WATER, 1.7, 195, Abilities.WATER_ABSORB, Abilities.NONE, Abilities.NONE, 600, 80, 110, 120, 130, 90, 70, 3, 100, 300, GrowthRate.SLOW, null, false), new PokemonSpecies(Species.ROWLET, 7, false, false, false, "Grass Quill Pokémon", Type.GRASS, Type.FLYING, 0.3, 1.5, Abilities.OVERGROW, Abilities.NONE, Abilities.LONG_REACH, 320, 68, 55, 55, 50, 50, 42, 45, 50, 64, GrowthRate.MEDIUM_SLOW, 87.5, false), @@ -2170,7 +2304,7 @@ export function initSpecies() { new PokemonSpecies(Species.PRIMARINA, 7, false, false, false, "Soloist Pokémon", Type.WATER, Type.FAIRY, 1.8, 44, Abilities.TORRENT, Abilities.NONE, Abilities.LIQUID_VOICE, 530, 80, 74, 74, 126, 116, 60, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.PIKIPEK, 7, false, false, false, "Woodpecker Pokémon", Type.NORMAL, Type.FLYING, 0.3, 1.2, Abilities.KEEN_EYE, Abilities.SKILL_LINK, Abilities.PICKUP, 265, 35, 75, 30, 30, 30, 65, 255, 70, 53, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.TRUMBEAK, 7, false, false, false, "Bugle Beak Pokémon", Type.NORMAL, Type.FLYING, 0.6, 14.8, Abilities.KEEN_EYE, Abilities.SKILL_LINK, Abilities.PICKUP, 355, 55, 85, 50, 40, 50, 75, 120, 70, 124, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.TOUCANNON, 7, false, false, false, "Cannon Pokémon", Type.NORMAL, Type.FLYING, 1.1, 26, Abilities.KEEN_EYE, Abilities.SKILL_LINK, Abilities.SHEER_FORCE, 485, 80, 120, 75, 75, 75, 60, 45, 70, 218, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(Species.TOUCANNON, 7, false, false, false, "Cannon Pokémon", Type.NORMAL, Type.FLYING, 1.1, 26, Abilities.KEEN_EYE, Abilities.SKILL_LINK, Abilities.SHEER_FORCE, 485, 80, 120, 75, 75, 75, 60, 45, 70, 243, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.YUNGOOS, 7, false, false, false, "Loitering Pokémon", Type.NORMAL, null, 0.4, 6, Abilities.STAKEOUT, Abilities.STRONG_JAW, Abilities.ADAPTABILITY, 253, 48, 70, 30, 30, 30, 45, 255, 70, 51, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.GUMSHOOS, 7, false, false, false, "Stakeout Pokémon", Type.NORMAL, null, 0.7, 14.2, Abilities.STAKEOUT, Abilities.STRONG_JAW, Abilities.ADAPTABILITY, 418, 88, 110, 60, 55, 60, 45, 127, 70, 146, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.GRUBBIN, 7, false, false, false, "Larva Pokémon", Type.BUG, null, 0.4, 4.4, Abilities.SWARM, Abilities.NONE, Abilities.NONE, 300, 47, 62, 45, 55, 45, 46, 255, 50, 60, GrowthRate.MEDIUM_FAST, 50, false), @@ -2197,7 +2331,7 @@ export function initSpecies() { ), new PokemonSpecies(Species.WISHIWASHI, 7, false, false, false, "Small Fry Pokémon", Type.WATER, null, 0.2, 0.3, Abilities.SCHOOLING, Abilities.NONE, Abilities.NONE, 175, 45, 20, 20, 25, 25, 40, 60, 50, 61, GrowthRate.FAST, 50, false, false, new PokemonForm("Solo Form", "", Type.WATER, null, 0.2, 0.3, Abilities.SCHOOLING, Abilities.NONE, Abilities.NONE, 175, 45, 20, 20, 25, 25, 40, 60, 50, 61, false, null, true), - new PokemonForm("School", "school", Type.WATER, null, 8.2, 78.6, Abilities.SCHOOLING, Abilities.NONE, Abilities.NONE, 620, 45, 140, 130, 140, 135, 30, 60, 50, 61), + new PokemonForm("School", "school", Type.WATER, null, 8.2, 78.6, Abilities.SCHOOLING, Abilities.NONE, Abilities.NONE, 620, 45, 140, 130, 140, 135, 30, 60, 50, 217), ), new PokemonSpecies(Species.MAREANIE, 7, false, false, false, "Brutal Star Pokémon", Type.POISON, Type.WATER, 0.4, 8, Abilities.MERCILESS, Abilities.LIMBER, Abilities.REGENERATOR, 305, 50, 53, 62, 43, 52, 45, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.TOXAPEX, 7, false, false, false, "Brutal Star Pokémon", Type.POISON, Type.WATER, 0.7, 14.5, Abilities.MERCILESS, Abilities.LIMBER, Abilities.REGENERATOR, 495, 50, 63, 152, 53, 142, 35, 75, 50, 173, GrowthRate.MEDIUM_FAST, 50, false), @@ -2253,13 +2387,13 @@ export function initSpecies() { new PokemonForm("Blue Meteor Form", "blue-meteor", Type.ROCK, Type.FLYING, 0.3, 40, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, "", true), new PokemonForm("Indigo Meteor Form", "indigo-meteor", Type.ROCK, Type.FLYING, 0.3, 40, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, "", true), new PokemonForm("Violet Meteor Form", "violet-meteor", Type.ROCK, Type.FLYING, 0.3, 40, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, "", true), - new PokemonForm("Red Core Form", "red", Type.ROCK, Type.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 154, false, null, true), - new PokemonForm("Orange Core Form", "orange", Type.ROCK, Type.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 154, false, null, true), - new PokemonForm("Yellow Core Form", "yellow", Type.ROCK, Type.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 154, false, null, true), - new PokemonForm("Green Core Form", "green", Type.ROCK, Type.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 154, false, null, true), - new PokemonForm("Blue Core Form", "blue", Type.ROCK, Type.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 154, false, null, true), - new PokemonForm("Indigo Core Form", "indigo", Type.ROCK, Type.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 154, false, null, true), - new PokemonForm("Violet Core Form", "violet", Type.ROCK, Type.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 154, false, null, true), + new PokemonForm("Red Core Form", "red", Type.ROCK, Type.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), + new PokemonForm("Orange Core Form", "orange", Type.ROCK, Type.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), + new PokemonForm("Yellow Core Form", "yellow", Type.ROCK, Type.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), + new PokemonForm("Green Core Form", "green", Type.ROCK, Type.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), + new PokemonForm("Blue Core Form", "blue", Type.ROCK, Type.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), + new PokemonForm("Indigo Core Form", "indigo", Type.ROCK, Type.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), + new PokemonForm("Violet Core Form", "violet", Type.ROCK, Type.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), ), new PokemonSpecies(Species.KOMALA, 7, false, false, false, "Drowsing Pokémon", Type.NORMAL, null, 0.4, 19.9, Abilities.COMATOSE, Abilities.NONE, Abilities.NONE, 480, 65, 115, 65, 75, 95, 65, 45, 70, 168, GrowthRate.SLOW, 50, false), new PokemonSpecies(Species.TURTONATOR, 7, false, false, false, "Blast Turtle Pokémon", Type.FIRE, Type.DRAGON, 2, 212, Abilities.SHELL_ARMOR, Abilities.NONE, Abilities.NONE, 485, 60, 78, 135, 91, 85, 36, 70, 50, 170, GrowthRate.MEDIUM_FAST, 50, false), @@ -2291,9 +2425,9 @@ export function initSpecies() { new PokemonSpecies(Species.GUZZLORD, 7, true, false, false, "Junkivore Pokémon", Type.DARK, Type.DRAGON, 5.5, 888, Abilities.BEAST_BOOST, Abilities.NONE, Abilities.NONE, 570, 223, 101, 53, 97, 53, 43, 45, 0, 285, GrowthRate.SLOW, null, false), new PokemonSpecies(Species.NECROZMA, 7, false, true, false, "Prism Pokémon", Type.PSYCHIC, null, 2.4, 230, Abilities.PRISM_ARMOR, Abilities.NONE, Abilities.NONE, 600, 97, 107, 101, 127, 89, 79, 255, 0, 300, GrowthRate.SLOW, null, false, false, new PokemonForm("Normal", "", Type.PSYCHIC, null, 2.4, 230, Abilities.PRISM_ARMOR, Abilities.NONE, Abilities.NONE, 600, 97, 107, 101, 127, 89, 79, 255, 0, 300, false, null, true), - new PokemonForm("Dusk Mane", "dusk-mane", Type.PSYCHIC, Type.STEEL, 3.8, 460, Abilities.PRISM_ARMOR, Abilities.NONE, Abilities.NONE, 680, 97, 157, 127, 113, 109, 77, 255, 0, 300), - new PokemonForm("Dawn Wings", "dawn-wings", Type.PSYCHIC, Type.GHOST, 4.2, 350, Abilities.PRISM_ARMOR, Abilities.NONE, Abilities.NONE, 680, 97, 113, 109, 157, 127, 77, 255, 0, 300), - new PokemonForm("Ultra", "ultra", Type.PSYCHIC, Type.DRAGON, 7.5, 230, Abilities.NEUROFORCE, Abilities.NONE, Abilities.NONE, 754, 97, 167, 97, 167, 97, 129, 255, 0, 300), + new PokemonForm("Dusk Mane", "dusk-mane", Type.PSYCHIC, Type.STEEL, 3.8, 460, Abilities.PRISM_ARMOR, Abilities.NONE, Abilities.NONE, 680, 97, 157, 127, 113, 109, 77, 255, 0, 340), + new PokemonForm("Dawn Wings", "dawn-wings", Type.PSYCHIC, Type.GHOST, 4.2, 350, Abilities.PRISM_ARMOR, Abilities.NONE, Abilities.NONE, 680, 97, 113, 109, 157, 127, 77, 255, 0, 340), + new PokemonForm("Ultra", "ultra", Type.PSYCHIC, Type.DRAGON, 7.5, 230, Abilities.NEUROFORCE, Abilities.NONE, Abilities.NONE, 754, 97, 167, 97, 167, 97, 129, 255, 0, 377), ), new PokemonSpecies(Species.MAGEARNA, 7, false, false, true, "Artificial Pokémon", Type.STEEL, Type.FAIRY, 1, 80.5, Abilities.SOUL_HEART, Abilities.NONE, Abilities.NONE, 600, 80, 95, 115, 130, 115, 65, 3, 0, 300, GrowthRate.SLOW, null, false, false, new PokemonForm("Normal", "", Type.STEEL, Type.FAIRY, 1, 80.5, Abilities.SOUL_HEART, Abilities.NONE, Abilities.NONE, 600, 80, 95, 115, 130, 115, 65, 3, 0, 300, false, null, true), @@ -2301,7 +2435,7 @@ export function initSpecies() { ), new PokemonSpecies(Species.MARSHADOW, 7, false, false, true, "Gloomdweller Pokémon", Type.FIGHTING, Type.GHOST, 0.7, 22.2, Abilities.TECHNICIAN, Abilities.NONE, Abilities.NONE, 600, 90, 125, 80, 90, 90, 125, 3, 0, 300, GrowthRate.SLOW, null, false, true, new PokemonForm("Normal", "", Type.FIGHTING, Type.GHOST, 0.7, 22.2, Abilities.TECHNICIAN, Abilities.NONE, Abilities.NONE, 600, 90, 125, 80, 90, 90, 125, 3, 0, 300, false, null, true), - new PokemonForm("Zenith", "zenith", Type.FIGHTING, Type.GHOST, 0.7, 22.2, Abilities.TECHNICIAN, Abilities.NONE, Abilities.NONE, 600, 90, 125, 80, 90, 90, 125, 3, 0, 300) + new PokemonForm("Zenith", "zenith", Type.FIGHTING, Type.GHOST, 0.7, 22.2, Abilities.TECHNICIAN, Abilities.NONE, Abilities.NONE, 600, 90, 125, 80, 90, 90, 125, 3, 0, 300, false, null, false, true) ), new PokemonSpecies(Species.POIPOLE, 7, true, false, false, "Poison Pin Pokémon", Type.POISON, null, 0.6, 1.8, Abilities.BEAST_BOOST, Abilities.NONE, Abilities.NONE, 420, 67, 73, 67, 73, 67, 73, 45, 0, 210, GrowthRate.SLOW, null, false), new PokemonSpecies(Species.NAGANADEL, 7, true, false, false, "Poison Pin Pokémon", Type.POISON, Type.DRAGON, 3.6, 150, Abilities.BEAST_BOOST, Abilities.NONE, Abilities.NONE, 540, 73, 73, 73, 127, 73, 121, 45, 0, 270, GrowthRate.SLOW, null, false), @@ -2400,11 +2534,11 @@ export function initSpecies() { new PokemonSpecies(Species.GRAPPLOCT, 8, false, false, false, "Jujitsu Pokémon", Type.FIGHTING, null, 1.6, 39, Abilities.LIMBER, Abilities.NONE, Abilities.TECHNICIAN, 480, 80, 118, 90, 70, 80, 42, 45, 50, 168, GrowthRate.MEDIUM_SLOW, 50, false), new PokemonSpecies(Species.SINISTEA, 8, false, false, false, "Black Tea Pokémon", Type.GHOST, null, 0.1, 0.2, Abilities.WEAK_ARMOR, Abilities.NONE, Abilities.CURSED_BODY, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, GrowthRate.MEDIUM_FAST, null, false, false, new PokemonForm("Phony Form", "phony", Type.GHOST, null, 0.1, 0.2, Abilities.WEAK_ARMOR, Abilities.NONE, Abilities.CURSED_BODY, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, false, "", true), - new PokemonForm("Antique Form", "antique", Type.GHOST, null, 0.1, 0.2, Abilities.WEAK_ARMOR, Abilities.NONE, Abilities.CURSED_BODY, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, false, "", true), + new PokemonForm("Antique Form", "antique", Type.GHOST, null, 0.1, 0.2, Abilities.WEAK_ARMOR, Abilities.NONE, Abilities.CURSED_BODY, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, false, "", true, true), ), new PokemonSpecies(Species.POLTEAGEIST, 8, false, false, false, "Black Tea Pokémon", Type.GHOST, null, 0.2, 0.4, Abilities.WEAK_ARMOR, Abilities.NONE, Abilities.CURSED_BODY, 508, 60, 65, 65, 134, 114, 70, 60, 50, 178, GrowthRate.MEDIUM_FAST, null, false, false, new PokemonForm("Phony Form", "phony", Type.GHOST, null, 0.2, 0.4, Abilities.WEAK_ARMOR, Abilities.NONE, Abilities.CURSED_BODY, 508, 60, 65, 65, 134, 114, 70, 60, 50, 178, false, "", true), - new PokemonForm("Antique Form", "antique", Type.GHOST, null, 0.2, 0.4, Abilities.WEAK_ARMOR, Abilities.NONE, Abilities.CURSED_BODY, 508, 60, 65, 65, 134, 114, 70, 60, 50, 178, false, "", true), + new PokemonForm("Antique Form", "antique", Type.GHOST, null, 0.2, 0.4, Abilities.WEAK_ARMOR, Abilities.NONE, Abilities.CURSED_BODY, 508, 60, 65, 65, 134, 114, 70, 60, 50, 178, false, "", true, true), ), new PokemonSpecies(Species.HATENNA, 8, false, false, false, "Calm Pokémon", Type.PSYCHIC, null, 0.4, 3.4, Abilities.HEALER, Abilities.ANTICIPATION, Abilities.MAGIC_BOUNCE, 265, 42, 30, 45, 56, 53, 39, 235, 50, 53, GrowthRate.SLOW, 0, false), new PokemonSpecies(Species.HATTREM, 8, false, false, false, "Serene Pokémon", Type.PSYCHIC, null, 0.6, 4.8, Abilities.HEALER, Abilities.ANTICIPATION, Abilities.MAGIC_BOUNCE, 370, 57, 40, 65, 86, 73, 49, 120, 50, 130, GrowthRate.SLOW, 0, false), @@ -2472,11 +2606,11 @@ export function initSpecies() { new PokemonSpecies(Species.DRAGAPULT, 8, false, false, false, "Stealth Pokémon", Type.DRAGON, Type.GHOST, 3, 50, Abilities.CLEAR_BODY, Abilities.INFILTRATOR, Abilities.CURSED_BODY, 600, 88, 120, 75, 100, 75, 142, 45, 50, 300, GrowthRate.SLOW, 50, false), new PokemonSpecies(Species.ZACIAN, 8, false, true, false, "Warrior Pokémon", Type.FAIRY, null, 2.8, 110, Abilities.INTREPID_SWORD, Abilities.NONE, Abilities.NONE, 660, 92, 120, 115, 80, 115, 138, 10, 0, 335, GrowthRate.SLOW, null, false, false, new PokemonForm("Hero of Many Battles", "hero-of-many-battles", Type.FAIRY, null, 2.8, 110, Abilities.INTREPID_SWORD, Abilities.NONE, Abilities.NONE, 660, 92, 120, 115, 80, 115, 138, 10, 0, 335, false, "", true), - new PokemonForm("Crowned", "crowned", Type.FAIRY, Type.STEEL, 2.8, 355, Abilities.INTREPID_SWORD, Abilities.NONE, Abilities.NONE, 700, 92, 150, 115, 80, 115, 148, 10, 0, 335), + new PokemonForm("Crowned", "crowned", Type.FAIRY, Type.STEEL, 2.8, 355, Abilities.INTREPID_SWORD, Abilities.NONE, Abilities.NONE, 700, 92, 150, 115, 80, 115, 148, 10, 0, 360), ), new PokemonSpecies(Species.ZAMAZENTA, 8, false, true, false, "Warrior Pokémon", Type.FIGHTING, null, 2.9, 210, Abilities.DAUNTLESS_SHIELD, Abilities.NONE, Abilities.NONE, 660, 92, 120, 115, 80, 115, 138, 10, 0, 335, GrowthRate.SLOW, null, false, false, new PokemonForm("Hero of Many Battles", "hero-of-many-battles", Type.FIGHTING, null, 2.9, 210, Abilities.DAUNTLESS_SHIELD, Abilities.NONE, Abilities.NONE, 660, 92, 120, 115, 80, 115, 138, 10, 0, 335, false, "", true), - new PokemonForm("Crowned", "crowned", Type.FIGHTING, Type.STEEL, 2.9, 785, Abilities.DAUNTLESS_SHIELD, Abilities.NONE, Abilities.NONE, 700, 92, 120, 140, 80, 140, 128, 10, 0, 335), + new PokemonForm("Crowned", "crowned", Type.FIGHTING, Type.STEEL, 2.9, 785, Abilities.DAUNTLESS_SHIELD, Abilities.NONE, Abilities.NONE, 700, 92, 120, 140, 80, 140, 128, 10, 0, 360), ), new PokemonSpecies(Species.ETERNATUS, 8, false, true, false, "Gigantic Pokémon", Type.POISON, Type.DRAGON, 20, 950, Abilities.PRESSURE, Abilities.NONE, Abilities.NONE, 690, 140, 85, 95, 145, 95, 130, 255, 0, 345, GrowthRate.SLOW, null, false, true, new PokemonForm("Normal", "", Type.POISON, Type.DRAGON, 20, 950, Abilities.PRESSURE, Abilities.NONE, Abilities.NONE, 690, 140, 85, 95, 145, 95, 130, 255, 0, 345, false, null, true), @@ -2499,8 +2633,8 @@ export function initSpecies() { new PokemonSpecies(Species.SPECTRIER, 8, true, false, false, "Swift Horse Pokémon", Type.GHOST, null, 2, 44.5, Abilities.GRIM_NEIGH, Abilities.NONE, Abilities.NONE, 580, 100, 65, 60, 145, 80, 130, 3, 35, 290, GrowthRate.SLOW, null, false), new PokemonSpecies(Species.CALYREX, 8, false, true, false, "King Pokémon", Type.PSYCHIC, Type.GRASS, 1.1, 7.7, Abilities.UNNERVE, Abilities.NONE, Abilities.NONE, 500, 100, 80, 80, 80, 80, 80, 3, 100, 250, GrowthRate.SLOW, null, false, true, new PokemonForm("Normal", "", Type.PSYCHIC, Type.GRASS, 1.1, 7.7, Abilities.UNNERVE, Abilities.NONE, Abilities.NONE, 500, 100, 80, 80, 80, 80, 80, 3, 100, 250, false, null, true), - new PokemonForm("Ice", "ice", Type.PSYCHIC, Type.ICE, 2.4, 809.1, Abilities.AS_ONE_GLASTRIER, Abilities.NONE, Abilities.NONE, 680, 100, 165, 150, 85, 130, 50, 3, 100, 250), - new PokemonForm("Shadow", "shadow", Type.PSYCHIC, Type.GHOST, 2.4, 53.6, Abilities.AS_ONE_SPECTRIER, Abilities.NONE, Abilities.NONE, 680, 100, 85, 80, 165, 100, 150, 3, 100, 250), + new PokemonForm("Ice", "ice", Type.PSYCHIC, Type.ICE, 2.4, 809.1, Abilities.AS_ONE_GLASTRIER, Abilities.NONE, Abilities.NONE, 680, 100, 165, 150, 85, 130, 50, 3, 100, 340), + new PokemonForm("Shadow", "shadow", Type.PSYCHIC, Type.GHOST, 2.4, 53.6, Abilities.AS_ONE_SPECTRIER, Abilities.NONE, Abilities.NONE, 680, 100, 85, 80, 165, 100, 150, 3, 100, 340), ), new PokemonSpecies(Species.WYRDEER, 8, false, false, false, "Big Horn Pokémon", Type.NORMAL, Type.PSYCHIC, 1.8, 95.1, Abilities.INTIMIDATE, Abilities.FRISK, Abilities.SAP_SIPPER, 525, 103, 105, 72, 105, 75, 65, 135, 50, 263, GrowthRate.SLOW, 50, false), new PokemonSpecies(Species.KLEAVOR, 8, false, false, false, "Axe Pokémon", Type.BUG, Type.ROCK, 1.8, 89, Abilities.SWARM, Abilities.SHEER_FORCE, Abilities.SHARPNESS, 500, 70, 135, 95, 45, 70, 85, 115, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), @@ -2649,17 +2783,9 @@ export function initSpecies() { new PokemonSpecies(Species.IRON_VALIANT, 9, false, false, false, "Paradox Pokémon", Type.FAIRY, Type.FIGHTING, 1.4, 35, Abilities.QUARK_DRIVE, Abilities.NONE, Abilities.NONE, 590, 74, 130, 90, 120, 60, 116, 10, 0, 295, GrowthRate.SLOW, null, false), new PokemonSpecies(Species.KORAIDON, 9, false, true, false, "Paradox Pokémon", Type.FIGHTING, Type.DRAGON, 2.5, 303, Abilities.ORICHALCUM_PULSE, Abilities.NONE, Abilities.NONE, 670, 100, 135, 115, 85, 100, 135, 3, 0, 335, GrowthRate.SLOW, null, false, false, new PokemonForm("Apex Build", "apex-build", Type.FIGHTING, Type.DRAGON, 2.5, 303, Abilities.ORICHALCUM_PULSE, Abilities.NONE, Abilities.NONE, 670, 100, 135, 115, 85, 100, 135, 3, 0, 335, false, null, true), - new PokemonForm("Limited Build", "limited-build", Type.FIGHTING, Type.DRAGON, 3.5, 303, Abilities.ORICHALCUM_PULSE, Abilities.NONE, Abilities.NONE, 670, 100, 135, 115, 85, 100, 135, 3, 0, 335, false, null, true), - new PokemonForm("Sprinting Build", "sprinting-build", Type.FIGHTING, Type.DRAGON, 3.5, 303, Abilities.ORICHALCUM_PULSE, Abilities.NONE, Abilities.NONE, 670, 100, 135, 115, 85, 100, 135, 3, 0, 335, false, null, true), - new PokemonForm("Swimming Build", "swimming-build", Type.FIGHTING, Type.DRAGON, 3.5, 303, Abilities.ORICHALCUM_PULSE, Abilities.NONE, Abilities.NONE, 670, 100, 135, 115, 85, 100, 135, 3, 0, 335, false, null, true), - new PokemonForm("Gliding Build", "gliding-build", Type.FIGHTING, Type.DRAGON, 3.5, 303, Abilities.ORICHALCUM_PULSE, Abilities.NONE, Abilities.NONE, 670, 100, 135, 115, 85, 100, 135, 3, 0, 335, false, null, true), ), new PokemonSpecies(Species.MIRAIDON, 9, false, true, false, "Paradox Pokémon", Type.ELECTRIC, Type.DRAGON, 3.5, 240, Abilities.HADRON_ENGINE, Abilities.NONE, Abilities.NONE, 670, 100, 85, 100, 135, 115, 135, 3, 0, 335, GrowthRate.SLOW, null, false, false, new PokemonForm("Ultimate Mode", "ultimate-mode", Type.ELECTRIC, Type.DRAGON, 3.5, 240, Abilities.HADRON_ENGINE, Abilities.NONE, Abilities.NONE, 670, 100, 85, 100, 135, 115, 135, 3, 0, 335, false, null, true), - new PokemonForm("Low-Power Mode", "low-power-mode", Type.ELECTRIC, Type.DRAGON, 2.8, 240, Abilities.HADRON_ENGINE, Abilities.NONE, Abilities.NONE, 670, 100, 85, 100, 135, 115, 135, 3, 0, 335, false, null, true), - new PokemonForm("Drive Mode", "drive-mode", Type.ELECTRIC, Type.DRAGON, 2.8, 240, Abilities.HADRON_ENGINE, Abilities.NONE, Abilities.NONE, 670, 100, 85, 100, 135, 115, 135, 3, 0, 335, false, null, true), - new PokemonForm("Aquatic Mode", "aquatic-mode", Type.ELECTRIC, Type.DRAGON, 2.8, 240, Abilities.HADRON_ENGINE, Abilities.NONE, Abilities.NONE, 670, 100, 85, 100, 135, 115, 135, 3, 0, 335, false, null, true), - new PokemonForm("Glide Mode", "glide-mode", Type.ELECTRIC, Type.DRAGON, 2.8, 240, Abilities.HADRON_ENGINE, Abilities.NONE, Abilities.NONE, 670, 100, 85, 100, 135, 115, 135, 3, 0, 335, false, null, true), ), new PokemonSpecies(Species.WALKING_WAKE, 9, false, false, false, "Paradox Pokémon", Type.WATER, Type.DRAGON, 3.5, 280, Abilities.PROTOSYNTHESIS, Abilities.NONE, Abilities.NONE, 590, 99, 83, 91, 125, 83, 109, 10, 0, 295, GrowthRate.SLOW, null, false), //Custom Catchrate, matching Gouging Fire and Raging Bolt new PokemonSpecies(Species.IRON_LEAVES, 9, false, false, false, "Paradox Pokémon", Type.GRASS, Type.PSYCHIC, 1.5, 125, Abilities.QUARK_DRIVE, Abilities.NONE, Abilities.NONE, 590, 90, 130, 88, 70, 108, 104, 10, 0, 295, GrowthRate.SLOW, null, false), //Custom Catchrate, matching Iron Boulder and Iron Crown @@ -2693,8 +2819,8 @@ export function initSpecies() { new PokemonSpecies(Species.IRON_CROWN, 9, false, false, false, "Paradox Pokémon", Type.STEEL, Type.PSYCHIC, 1.6, 156, Abilities.QUARK_DRIVE, Abilities.NONE, Abilities.NONE, 590, 90, 72, 100, 122, 108, 98, 10, 0, 295, GrowthRate.SLOW, null, false), new PokemonSpecies(Species.TERAPAGOS, 9, false, true, false, "Tera Pokémon", Type.NORMAL, null, 0.2, 6.5, Abilities.TERA_SHIFT, Abilities.NONE, Abilities.NONE, 450, 90, 65, 85, 65, 85, 60, 5, 50, 90, GrowthRate.SLOW, 50, false, false, new PokemonForm("Normal Form", "", Type.NORMAL, null, 0.2, 6.5, Abilities.TERA_SHIFT, Abilities.NONE, Abilities.NONE, 450, 90, 65, 85, 65, 85, 60, 5, 50, 90, false, null, true), - new PokemonForm("Terastal Form", "terastal", Type.NORMAL, null, 0.3, 16, Abilities.TERA_SHELL, Abilities.NONE, Abilities.NONE, 600, 95, 95, 110, 105, 110, 85, 5, 50, 90), - new PokemonForm("Stellar Form", "stellar", Type.NORMAL, null, 1.7, 77, Abilities.TERAFORM_ZERO, Abilities.NONE, Abilities.NONE, 700, 160, 105, 110, 130, 110, 85, 5, 50, 90), + new PokemonForm("Terastal Form", "terastal", Type.NORMAL, null, 0.3, 16, Abilities.TERA_SHELL, Abilities.NONE, Abilities.NONE, 600, 95, 95, 110, 105, 110, 85, 5, 50, 120), + new PokemonForm("Stellar Form", "stellar", Type.NORMAL, null, 1.7, 77, Abilities.TERAFORM_ZERO, Abilities.NONE, Abilities.NONE, 700, 160, 105, 110, 130, 110, 85, 5, 50, 140), ), new PokemonSpecies(Species.PECHARUNT, 9, false, false, true, "Subjugation Pokémon", Type.POISON, Type.GHOST, 0.3, 0.3, Abilities.POISON_PUPPETEER, Abilities.NONE, Abilities.NONE, 600, 88, 88, 160, 88, 88, 88, 3, 0, 300, GrowthRate.SLOW, null, false), new PokemonSpecies(Species.ALOLA_RATTATA, 7, false, false, false, "Mouse Pokémon", Type.DARK, Type.NORMAL, 0.3, 3.8, Abilities.GLUTTONY, Abilities.HUSTLE, Abilities.THICK_FAT, 253, 30, 56, 35, 25, 35, 72, 255, 70, 51, GrowthRate.MEDIUM_FAST, 50, false), @@ -2715,7 +2841,7 @@ export function initSpecies() { new PokemonSpecies(Species.ALOLA_MUK, 7, false, false, false, "Sludge Pokémon", Type.POISON, Type.DARK, 1, 52, Abilities.POISON_TOUCH, Abilities.GLUTTONY, Abilities.POWER_OF_ALCHEMY, 500, 105, 105, 75, 65, 100, 50, 75, 70, 175, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.ALOLA_EXEGGUTOR, 7, false, false, false, "Coconut Pokémon", Type.GRASS, Type.DRAGON, 10.9, 415.6, Abilities.FRISK, Abilities.NONE, Abilities.HARVEST, 530, 95, 105, 85, 125, 75, 45, 45, 50, 186, GrowthRate.SLOW, 50, false), new PokemonSpecies(Species.ALOLA_MAROWAK, 7, false, false, false, "Bone Keeper Pokémon", Type.FIRE, Type.GHOST, 1, 34, Abilities.CURSED_BODY, Abilities.LIGHTNING_ROD, Abilities.ROCK_HEAD, 425, 60, 80, 110, 50, 80, 45, 75, 50, 149, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.ETERNAL_FLOETTE, 6, true, false, false, "Single Bloom Pokémon", Type.FAIRY, null, 0.2, 0.9, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 551, 74, 65, 67, 125, 128, 92, 120, 70, 130, GrowthRate.MEDIUM_FAST, 0, false), //Marked as Sub-Legend, for casing purposes + new PokemonSpecies(Species.ETERNAL_FLOETTE, 6, true, false, false, "Single Bloom Pokémon", Type.FAIRY, null, 0.2, 0.9, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 551, 74, 65, 67, 125, 128, 92, 120, 70, 243, GrowthRate.MEDIUM_FAST, 0, false), //Marked as Sub-Legend, for casing purposes new PokemonSpecies(Species.GALAR_MEOWTH, 8, false, false, false, "Scratch Cat Pokémon", Type.STEEL, null, 0.4, 7.5, Abilities.PICKUP, Abilities.TOUGH_CLAWS, Abilities.UNNERVE, 290, 50, 65, 55, 40, 40, 40, 255, 50, 58, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.GALAR_PONYTA, 8, false, false, false, "Fire Horse Pokémon", Type.PSYCHIC, null, 0.8, 24, Abilities.RUN_AWAY, Abilities.PASTEL_VEIL, Abilities.ANTICIPATION, 410, 50, 85, 55, 65, 65, 90, 190, 50, 82, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.GALAR_RAPIDASH, 8, false, false, false, "Fire Horse Pokémon", Type.PSYCHIC, Type.FAIRY, 1.7, 80, Abilities.RUN_AWAY, Abilities.PASTEL_VEIL, Abilities.ANTICIPATION, 500, 65, 100, 70, 80, 80, 105, 60, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), @@ -2760,7 +2886,7 @@ export function initSpecies() { new PokemonForm("Aqua Breed", "aqua", Type.FIGHTING, Type.WATER, 1.4, 110, Abilities.INTIMIDATE, Abilities.ANGER_POINT, Abilities.CUD_CHEW, 490, 75, 110, 105, 30, 70, 100, 45, 50, 172, false, null, true), ), new PokemonSpecies(Species.PALDEA_WOOPER, 9, false, false, false, "Water Fish Pokémon", Type.POISON, Type.GROUND, 0.4, 11, Abilities.POISON_POINT, Abilities.WATER_ABSORB, Abilities.UNAWARE, 210, 55, 45, 45, 25, 25, 15, 255, 50, 42, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.BLOODMOON_URSALUNA, 9, true, false, false, "Peat Pokémon", Type.GROUND, Type.NORMAL, 2.7, 333, Abilities.MINDS_EYE, Abilities.NONE, Abilities.NONE, 555, 113, 70, 120, 135, 65, 52, 75, 50, 275, GrowthRate.MEDIUM_FAST, 50, false), //Marked as Sub-Legend, for casing purposes + new PokemonSpecies(Species.BLOODMOON_URSALUNA, 9, true, false, false, "Peat Pokémon", Type.GROUND, Type.NORMAL, 2.7, 333, Abilities.MINDS_EYE, Abilities.NONE, Abilities.NONE, 555, 113, 70, 120, 135, 65, 52, 75, 50, 278, GrowthRate.MEDIUM_FAST, 50, false), //Marked as Sub-Legend, for casing purposes ); } diff --git a/src/data/status-effect.ts b/src/data/status-effect.ts index 6b4e1d546df..35a956cbb93 100644 --- a/src/data/status-effect.ts +++ b/src/data/status-effect.ts @@ -1,6 +1,7 @@ import { randIntRange } from "#app/utils"; import { StatusEffect } from "#enums/status-effect"; -import i18next, { ParseKeys } from "i18next"; +import type { ParseKeys } from "i18next"; +import i18next from "i18next"; export class Status { public effect: StatusEffect; @@ -161,7 +162,7 @@ export function getNonVolatileStatusEffects():Array { } /** - * Returns whether a statuss effect is non volatile. + * Returns whether a status effect is non volatile. * Non-volatile status condition is a status that remains after being switched out. * @param status The status to check */ diff --git a/src/data/terrain.ts b/src/data/terrain.ts index 6ba9acfd166..1ffe0adc8bf 100644 --- a/src/data/terrain.ts +++ b/src/data/terrain.ts @@ -1,8 +1,8 @@ -import Pokemon from "../field/pokemon"; -import Move from "./move"; +import type Pokemon from "../field/pokemon"; +import type Move from "./move"; import { Type } from "#enums/type"; import { ProtectAttr } from "./move"; -import { BattlerIndex } from "#app/battle"; +import type { BattlerIndex } from "#app/battle"; import i18next from "i18next"; export enum TerrainType { @@ -15,9 +15,9 @@ export enum TerrainType { export class Terrain { public terrainType: TerrainType; - public turnsLeft: integer; + public turnsLeft: number; - constructor(terrainType: TerrainType, turnsLeft?: integer) { + constructor(terrainType: TerrainType, turnsLeft?: number) { this.terrainType = terrainType; this.turnsLeft = turnsLeft || 0; } @@ -81,7 +81,7 @@ export function getTerrainName(terrainType: TerrainType): string { } -export function getTerrainColor(terrainType: TerrainType): [ integer, integer, integer ] { +export function getTerrainColor(terrainType: TerrainType): [ number, number, number ] { switch (terrainType) { case TerrainType.MISTY: return [ 232, 136, 200 ]; diff --git a/src/data/trainer-config.ts b/src/data/trainer-config.ts index d99ca601bdf..21b04c182e6 100644 --- a/src/data/trainer-config.ts +++ b/src/data/trainer-config.ts @@ -1,14 +1,19 @@ -import BattleScene, { startingWave } from "#app/battle-scene"; -import { ModifierTypeFunc, modifierTypes } from "#app/modifier/modifier-type"; -import { EnemyPokemon, PokemonMove } from "#app/field/pokemon"; +import { startingWave } from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; +import type { ModifierTypeFunc } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/modifier/modifier-type"; +import type { EnemyPokemon } from "#app/field/pokemon"; +import { PokemonMove } from "#app/field/pokemon"; import * as Utils from "#app/utils"; import { PokeballType } from "#enums/pokeball"; import { pokemonEvolutions, pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; -import PokemonSpecies, { getPokemonSpecies, PokemonSpeciesFilter } from "#app/data/pokemon-species"; +import type { PokemonSpeciesFilter } from "#app/data/pokemon-species"; +import type PokemonSpecies from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/data/pokemon-species"; import { tmSpecies } from "#app/data/balance/tms"; import { Type } from "#enums/type"; import { doubleBattleDialogue } from "#app/data/dialogue"; -import { PersistentModifier } from "#app/modifier/modifier"; +import type { PersistentModifier } from "#app/modifier/modifier"; import { TrainerVariant } from "#app/field/trainer"; import { getIsInitialized, initI18n } from "#app/plugins/i18n"; import i18next from "i18next"; @@ -20,8 +25,9 @@ import { Gender } from "#app/data/gender"; /** Minimum BST for Pokemon generated onto the Elite Four's teams */ const ELITE_FOUR_MINIMUM_BST = 460; -/** Minimum BST for Pokemon generated onto the E4 Champion's team */ -const CHAMPION_MINIMUM_BST = 508; + +/** The wave at which (non-Paldean) Gym Leaders start having Tera mons*/ +const GYM_LEADER_TERA_WAVE = 100; export enum TrainerPoolTier { COMMON, @@ -32,7 +38,7 @@ export enum TrainerPoolTier { } export interface TrainerTierPools { - [key: integer]: Species[] + [key: number]: Species[] } export enum TrainerSlot { @@ -42,27 +48,27 @@ export enum TrainerSlot { } export class TrainerPartyTemplate { - public size: integer; + public size: number; public strength: PartyMemberStrength; public sameSpecies: boolean; public balanced: boolean; - constructor(size: integer, strength: PartyMemberStrength, sameSpecies?: boolean, balanced?: boolean) { + constructor(size: number, strength: PartyMemberStrength, sameSpecies?: boolean, balanced?: boolean) { this.size = size; this.strength = strength; this.sameSpecies = !!sameSpecies; this.balanced = !!balanced; } - getStrength(index: integer): PartyMemberStrength { + getStrength(index: number): PartyMemberStrength { return this.strength; } - isSameSpecies(index: integer): boolean { + isSameSpecies(index: number): boolean { return this.sameSpecies; } - isBalanced(index: integer): boolean { + isBalanced(index: number): boolean { return this.balanced; } } @@ -71,14 +77,14 @@ export class TrainerPartyCompoundTemplate extends TrainerPartyTemplate { public templates: TrainerPartyTemplate[]; constructor(...templates: TrainerPartyTemplate[]) { - super(templates.reduce((total: integer, template: TrainerPartyTemplate) => { + super(templates.reduce((total: number, template: TrainerPartyTemplate) => { total += template.size; return total; }, 0), PartyMemberStrength.AVERAGE); this.templates = templates; } - getStrength(index: integer): PartyMemberStrength { + getStrength(index: number): PartyMemberStrength { let t = 0; for (const template of this.templates) { if (t + template.size > index) { @@ -90,7 +96,7 @@ export class TrainerPartyCompoundTemplate extends TrainerPartyTemplate { return super.getStrength(index); } - isSameSpecies(index: integer): boolean { + isSameSpecies(index: number): boolean { let t = 0; for (const template of this.templates) { if (t + template.size > index) { @@ -102,7 +108,7 @@ export class TrainerPartyCompoundTemplate extends TrainerPartyTemplate { return super.isSameSpecies(index); } - isBalanced(index: integer): boolean { + isBalanced(index: number): boolean { let t = 0; for (const template of this.templates) { if (t + template.size > index) { @@ -159,7 +165,7 @@ export const trainerPartyTemplates = { ELITE_FOUR: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(3, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER)), - CHAMPION: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), new TrainerPartyTemplate(5, PartyMemberStrength.STRONG, false, true)), + CHAMPION: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(4, PartyMemberStrength.STRONG), new TrainerPartyTemplate(2, PartyMemberStrength.STRONGER, false, true)), RIVAL: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE)), RIVAL_2: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.WEAK, false, true)), @@ -169,12 +175,52 @@ export const trainerPartyTemplates = { RIVAL_6: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE, false, true), new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER)) }; -type PartyTemplateFunc = (scene: BattleScene) => TrainerPartyTemplate; -type PartyMemberFunc = (scene: BattleScene, level: integer, strength: PartyMemberStrength) => EnemyPokemon; +type PartyTemplateFunc = () => TrainerPartyTemplate; +type PartyMemberFunc = (level: number, strength: PartyMemberStrength) => EnemyPokemon; type GenModifiersFunc = (party: EnemyPokemon[]) => PersistentModifier[]; +type GenAIFunc = (party: EnemyPokemon[]) => void; export interface PartyMemberFuncs { - [key: integer]: PartyMemberFunc + [key: number]: PartyMemberFunc +} + +export enum TeraAIMode { + NO_TERA, + INSTANT_TERA, + SMART_TERA +} + +/** + * Stores data and helper functions about a trainers AI options. + */ +export class TrainerAI { + public teraMode: TeraAIMode = TeraAIMode.NO_TERA; + public instantTeras: number[]; + + /** + * @param canTerastallize Whether this trainer is allowed to tera + */ + constructor(teraMode: TeraAIMode = TeraAIMode.NO_TERA) { + this.teraMode = teraMode; + this.instantTeras = []; + } + + /** + * Checks if a trainer can tera + * @returns Whether this trainer can currently tera + */ + public canTerastallize() { + return this.teraMode !== TeraAIMode.NO_TERA; + } + + /** + * Sets a pokemon on this AI to just instantly Tera on first move used + * @param index The index of the pokemon to instantly tera. + */ + public setInstantTera(index: number) { + this.teraMode = TeraAIMode.INSTANT_TERA; + this.instantTeras.push(index); + } } export class TrainerConfig { @@ -200,6 +246,7 @@ export class TrainerConfig { public doubleEncounterBgm: string; public victoryBgm: string; public genModifiersFunc: GenModifiersFunc; + public genAIFuncs: GenAIFunc[] = []; public modifierRewardFuncs: ModifierTypeFunc[] = []; public partyTemplates: TrainerPartyTemplate[]; public partyTemplateFunc: PartyTemplateFunc; @@ -207,8 +254,9 @@ export class TrainerConfig { public partyMemberFuncs: PartyMemberFuncs = {}; public speciesPools: TrainerTierPools; public speciesFilter: PokemonSpeciesFilter; - public specialtyTypes: Type[] = []; + public specialtyType: Type; public hasVoucher: boolean = false; + public trainerAI: TrainerAI; public encounterMessages: string[] = []; public victoryMessages: string[] = []; @@ -224,6 +272,7 @@ export class TrainerConfig { constructor(trainerType: TrainerType, allowLegendaries?: boolean) { this.trainerType = trainerType; + this.trainerAI = new TrainerAI(); this.name = Utils.toReadableString(TrainerType[this.getDerivedType()]); this.battleBgm = "battle_trainer"; this.mixedBattleBgm = "battle_trainer"; @@ -521,7 +570,7 @@ export class TrainerConfig { return this; } - setPartyMemberFunc(slotIndex: integer, partyMemberFunc: PartyMemberFunc): TrainerConfig { + setPartyMemberFunc(slotIndex: number, partyMemberFunc: PartyMemberFunc): TrainerConfig { this.partyMemberFuncs[slotIndex] = partyMemberFunc; return this; } @@ -537,8 +586,8 @@ export class TrainerConfig { return this; } - setSpecialtyTypes(...specialtyTypes: Type[]): TrainerConfig { - this.specialtyTypes = specialtyTypes; + setSpecialtyType(specialtyType: Type): TrainerConfig { + this.specialtyType = specialtyType; return this; } @@ -547,6 +596,51 @@ export class TrainerConfig { return this; } + /** + * Sets random pokemon from the trainer's team to instant tera. Also sets Tera type to specialty type and checks for Shedinja as appropriate. + * @param count A callback (yucky) to see how many teras should be used + * @param slot Optional, a specified slot that should be terastallized. Wraps to match party size (-1 will get the last slot and so on). + * @returns this + */ + setRandomTeraModifiers(count: () => number, slot?: number): TrainerConfig { + this.genAIFuncs.push((party: EnemyPokemon[]) => { + const shedinjaCanTera = !this.hasSpecialtyType() || this.specialtyType === Type.BUG; // Better to check one time than 6 + const partyMemberIndexes = new Array(party.length).fill(null).map((_, i) => i) + .filter(i => shedinjaCanTera || party[i].species.speciesId !== Species.SHEDINJA); // Shedinja can only Tera on Bug specialty type (or no specialty type) + const setPartySlot = !Utils.isNullOrUndefined(slot) ? Phaser.Math.Wrap(slot, 0, party.length) : -1; // If we have a tera slot defined, wrap it to party size. + for (let t = 0; t < Math.min(count(), party.length); t++) { + const randomIndex = partyMemberIndexes.indexOf(setPartySlot) > -1 ? setPartySlot : Utils.randSeedItem(partyMemberIndexes); + partyMemberIndexes.splice(partyMemberIndexes.indexOf(randomIndex), 1); + if (this.hasSpecialtyType()) { + party[randomIndex].teraType = this.specialtyType; + } + this.trainerAI.setInstantTera(randomIndex); + } + }); + return this; + } + + /** + * Sets a specific pokemon to instantly Tera + * @param index The index within the team to have instant Tera. + * @returns this + */ + setInstantTera(index: number): TrainerConfig { + this.trainerAI.setInstantTera(index); + return this; + } + + // function getRandomTeraModifiers(party: EnemyPokemon[], count: integer, types?: Type[]): PersistentModifier[] { + // const ret: PersistentModifier[] = []; + // const partyMemberIndexes = new Array(party.length).fill(null).map((_, i) => i); + // for (let t = 0; t < Math.min(count, party.length); t++) { + // const randomIndex = Utils.randSeedItem(partyMemberIndexes); + // partyMemberIndexes.splice(partyMemberIndexes.indexOf(randomIndex), 1); + // ret.push(modifierTypes.TERA_SHARD().generateType([], [ Utils.randSeedItem(types ? types : party[randomIndex].getTypes()) ])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(party[randomIndex]) as PersistentModifier); // TODO: is the bang correct? + // } + // return ret; + // } + setEventModifierRewardFuncs(...modifierTypeFuncs: (() => ModifierTypeFunc)[]): TrainerConfig { this.eventRewardFuncs = modifierTypeFuncs.map(func => () => { const modifierTypeFunc = func(); @@ -578,100 +672,107 @@ export class TrainerConfig { switch (team) { case "rocket": { return { - [TrainerPoolTier.COMMON]: [ Species.RATTATA, Species.KOFFING, Species.EKANS, Species.ZUBAT, Species.MAGIKARP, Species.HOUNDOUR, Species.ONIX, Species.CUBONE, Species.GROWLITHE, Species.MURKROW, Species.GASTLY, Species.EXEGGCUTE, Species.VOLTORB, Species.DROWZEE, Species.VILEPLUME ], - [TrainerPoolTier.UNCOMMON]: [ Species.PORYGON, Species.MANKEY, Species.MAGNEMITE, Species.ALOLA_SANDSHREW, Species.ALOLA_MEOWTH, Species.ALOLA_GRIMER, Species.ALOLA_GEODUDE, Species.PALDEA_TAUROS, Species.OMANYTE, Species.KABUTO, Species.MAGBY, Species.ELEKID ], - [TrainerPoolTier.RARE]: [ Species.DRATINI, Species.LARVITAR ] + [TrainerPoolTier.COMMON]: [ Species.RATICATE, Species.ARBOK, Species.VILEPLUME, Species.ARCANINE, Species.GENGAR, Species.HYPNO, Species.ELECTRODE, Species.EXEGGUTOR, Species.CUBONE, Species.KOFFING, Species.GYARADOS, Species.CROBAT, Species.STEELIX, Species.HOUNDOOM, Species.HONCHKROW ], + [TrainerPoolTier.UNCOMMON]: [ Species.OMASTAR, Species.KABUTOPS, Species.MAGNEZONE, Species.ELECTIVIRE, Species.MAGMORTAR, Species.PORYGON_Z, Species.ANNIHILAPE, Species.ALOLA_SANDSLASH, Species.ALOLA_PERSIAN, Species.ALOLA_GOLEM, Species.ALOLA_MUK, Species.PALDEA_TAUROS ], + [TrainerPoolTier.RARE]: [ Species.DRAGONITE, Species.TYRANITAR ] }; } case "magma": { return { - [TrainerPoolTier.COMMON]: [ Species.GROWLITHE, Species.SLUGMA, Species.SOLROCK, Species.HIPPOPOTAS, Species.BALTOY, Species.ROLYCOLY, Species.GLIGAR, Species.TORKOAL, Species.HOUNDOUR, Species.MAGBY ], - [TrainerPoolTier.UNCOMMON]: [ Species.TRAPINCH, Species.SILICOBRA, Species.RHYHORN, Species.ANORITH, Species.LILEEP, Species.HISUI_GROWLITHE, Species.TURTONATOR, Species.ARON, Species.TOEDSCOOL ], - [TrainerPoolTier.RARE]: [ Species.CAPSAKID, Species.CHARCADET ] + [TrainerPoolTier.COMMON]: [ Species.ARCANINE, Species.MAGCARGO, Species.HOUNDOOM, Species.TORKOAL, Species.SOLROCK, Species.CLAYDOL, Species.HIPPOWDON, Species.MAGMORTAR, Species.GLISCOR, Species.COALOSSAL ], + [TrainerPoolTier.UNCOMMON]: [ Species.AGGRON, Species.FLYGON, Species.CRADILY, Species.ARMALDO, Species.RHYPERIOR, Species.TURTONATOR, Species.SANDACONDA, Species.TOEDSCRUEL, Species.HISUI_ARCANINE ], + [TrainerPoolTier.RARE]: [ Species.CHARCADET, Species.SCOVILLAIN ] }; } case "aqua": { return { - [TrainerPoolTier.COMMON]: [ Species.CORPHISH, Species.SPHEAL, Species.CLAMPERL, Species.CHINCHOU, Species.WOOPER, Species.WINGULL, Species.TENTACOOL, Species.AZURILL, Species.LOTAD, Species.WAILMER, Species.REMORAID, Species.BARBOACH ], - [TrainerPoolTier.UNCOMMON]: [ Species.MANTYKE, Species.HISUI_QWILFISH, Species.ARROKUDA, Species.DHELMISE, Species.CLOBBOPUS, Species.FEEBAS, Species.PALDEA_WOOPER, Species.HORSEA, Species.SKRELP ], - [TrainerPoolTier.RARE]: [ Species.DONDOZO, Species.BASCULEGION ] + [TrainerPoolTier.COMMON]: [ Species.TENTACRUEL, Species.LANTURN, Species.AZUMARILL, Species.QUAGSIRE, Species.OCTILLERY, Species.LUDICOLO, Species.PELIPPER, Species.WAILORD, Species.WHISCASH, Species.CRAWDAUNT, Species.WALREIN, Species.CLAMPERL ], + [TrainerPoolTier.UNCOMMON]: [ Species.QUAGSIRE, Species.MANTINE, Species.KINGDRA, Species.MILOTIC, Species.DRAGALGE, Species.DHELMISE, Species.BARRASKEWDA, Species.GRAPPLOCT, Species.OVERQWIL ], + [TrainerPoolTier.RARE]: [ Species.BASCULEGION, Species.DONDOZO ] }; } case "galactic": { return { - [TrainerPoolTier.COMMON]: [ Species.BRONZOR, Species.SWINUB, Species.YANMA, Species.LICKITUNG, Species.TANGELA, Species.MAGBY, Species.ELEKID, Species.SKORUPI, Species.ZUBAT, Species.MURKROW, Species.MAGIKARP, Species.VOLTORB ], - [TrainerPoolTier.UNCOMMON]: [ Species.HISUI_GROWLITHE, Species.HISUI_QWILFISH, Species.SNEASEL, Species.DUSKULL, Species.ROTOM, Species.HISUI_VOLTORB, Species.GLIGAR, Species.ABRA ], - [TrainerPoolTier.RARE]: [ Species.URSALUNA, Species.HISUI_LILLIGANT, Species.SPIRITOMB, Species.HISUI_SNEASEL ] + [TrainerPoolTier.COMMON]: [ Species.ELECTRODE, Species.GYARADOS, Species.CROBAT, Species.HONCHKROW, Species.BRONZONG, Species.DRAPION, Species.LICKILICKY, Species.TANGROWTH, Species.ELECTIVIRE, Species.MAGMORTAR, Species.YANMEGA, Species.MAMOSWINE ], + [TrainerPoolTier.UNCOMMON]: [ Species.ALAKAZAM, Species.WEAVILE, Species.GLISCOR, Species.DUSKNOIR, Species.ROTOM, Species.OVERQWIL, Species.HISUI_ARCANINE, Species.HISUI_ELECTRODE ], + [TrainerPoolTier.RARE]: [ Species.SPIRITOMB, Species.URSALUNA, Species.SNEASLER, Species.HISUI_LILLIGANT ] }; } case "plasma": { return { - [TrainerPoolTier.COMMON]: [ Species.YAMASK, Species.ROGGENROLA, Species.JOLTIK, Species.TYMPOLE, Species.FRILLISH, Species.FERROSEED, Species.SANDILE, Species.TIMBURR, Species.DARUMAKA, Species.FOONGUS, Species.CUBCHOO, Species.VANILLITE ], - [TrainerPoolTier.UNCOMMON]: [ Species.PAWNIARD, Species.VULLABY, Species.ZORUA, Species.DRILBUR, Species.KLINK, Species.TYNAMO, Species.GALAR_DARUMAKA, Species.GOLETT, Species.MIENFOO, Species.DURANT, Species.SIGILYPH ], - [TrainerPoolTier.RARE]: [ Species.HISUI_ZORUA, Species.AXEW, Species.DEINO, Species.HISUI_BRAVIARY ] + [TrainerPoolTier.COMMON]: [ Species.GIGALITH, Species.CONKELDURR, Species.SEISMITOAD, Species.KROOKODILE, Species.DARMANITAN, Species.COFAGRIGUS, Species.VANILLUXE, Species.AMOONGUSS, Species.JELLICENT, Species.GALVANTULA, Species.FERROTHORN, Species.BEARTIC ], + [TrainerPoolTier.UNCOMMON]: [ Species.EXCADRILL, Species.SIGILYPH, Species.ZOROARK, Species.KLINKLANG, Species.EELEKTROSS, Species.MIENSHAO, Species.GOLURK, Species.BISHARP, Species.MANDIBUZZ, Species.DURANT, Species.GALAR_DARMANITAN ], + [TrainerPoolTier.RARE]: [ Species.HAXORUS, Species.HYDREIGON, Species.HISUI_ZOROARK, Species.HISUI_BRAVIARY ] + }; + } + case "plasma_2": { + return { + [TrainerPoolTier.COMMON]: [ Species.MUK, Species.ELECTRODE, Species.BRONZONG, Species.MAGNEZONE, Species.PORYGON_Z, Species.MUSHARNA, Species.REUNICLUS, Species.GALVANTULA, Species.FERROTHORN, Species.EELEKTROSS, Species.BEHEEYEM ], + [TrainerPoolTier.UNCOMMON]: [ Species.METAGROSS, Species.ROTOM, Species.CARRACOSTA, Species.ARCHEOPS, Species.GOLURK, Species.DURANT, Species.VIKAVOLT, Species.ORBEETLE, Species.REVAVROOM, Species.ALOLA_MUK, Species.HISUI_ELECTRODE ], + [TrainerPoolTier.RARE]: [ Species.ELECTIVIRE, Species.MAGMORTAR, Species.BISHARP, Species.ARCHALUDON ] }; } case "flare": { return { - [TrainerPoolTier.COMMON]: [ Species.FLETCHLING, Species.LITLEO, Species.INKAY, Species.FOONGUS, Species.HELIOPTILE, Species.ELECTRIKE, Species.SKORUPI, Species.PURRLOIN, Species.CLAWITZER, Species.PANCHAM, Species.ESPURR, Species.BUNNELBY ], - [TrainerPoolTier.UNCOMMON]: [ Species.LITWICK, Species.SNEASEL, Species.PUMPKABOO, Species.PHANTUMP, Species.HONEDGE, Species.BINACLE, Species.HOUNDOUR, Species.SKRELP, Species.SLIGGOO ], - [TrainerPoolTier.RARE]: [ Species.NOIBAT, Species.HISUI_AVALUGG, Species.HISUI_SLIGGOO ] + [TrainerPoolTier.COMMON]: [ Species.MANECTRIC, Species.DRAPION, Species.LIEPARD, Species.AMOONGUSS, Species.DIGGERSBY, Species.TALONFLAME, Species.PYROAR, Species.PANGORO, Species.MEOWSTIC, Species.MALAMAR, Species.CLAWITZER, Species.HELIOLISK ], + [TrainerPoolTier.UNCOMMON]: [ Species.HOUNDOOM, Species.WEAVILE, Species.CHANDELURE, Species.AEGISLASH, Species.BARBARACLE, Species.DRAGALGE, Species.GOODRA, Species.TREVENANT, Species.GOURGEIST ], + [TrainerPoolTier.RARE]: [ Species.NOIVERN, Species.HISUI_GOODRA, Species.HISUI_AVALUGG ] }; } case "aether": { return { - [TrainerPoolTier.COMMON]: [ Species.BRUXISH, Species.SLOWPOKE, Species.BALTOY, Species.EXEGGCUTE, Species.ABRA, Species.ALOLA_RAICHU, Species.ELGYEM, Species.NATU, Species.BLIPBUG, Species.GIRAFARIG, Species.ORANGURU ], - [TrainerPoolTier.UNCOMMON]: [ Species.GALAR_SLOWPOKE, Species.MEDITITE, Species.BELDUM, Species.HATENNA, Species.INKAY, Species.RALTS, Species.GALAR_MR_MIME ], - [TrainerPoolTier.RARE]: [ Species.ARMAROUGE, Species.HISUI_BRAVIARY, Species.PORYGON ] + [TrainerPoolTier.COMMON]: [ Species.ALAKAZAM, Species.SLOWBRO, Species.EXEGGUTOR, Species.XATU, Species.CLAYDOL, Species.BEHEEYEM, Species.ORANGURU, Species.BRUXISH, Species.ORBEETLE, Species.FARIGIRAF, Species.ALOLA_RAICHU ], + [TrainerPoolTier.UNCOMMON]: [ Species.KIRLIA, Species.MEDICHAM, Species.METAGROSS, Species.MALAMAR, Species.HATTERENE, Species.MR_RIME, Species.GALAR_SLOWKING ], + [TrainerPoolTier.RARE]: [ Species.PORYGON_Z, Species.ARMAROUGE, Species.HISUI_BRAVIARY ] }; } case "skull": { return { - [TrainerPoolTier.COMMON]: [ Species.MAREANIE, Species.ALOLA_GRIMER, Species.GASTLY, Species.ZUBAT, Species.FOMANTIS, Species.VENIPEDE, Species.BUDEW, Species.KOFFING, Species.STUNKY, Species.CROAGUNK, Species.NIDORAN_F ], - [TrainerPoolTier.UNCOMMON]: [ Species.GALAR_SLOWPOKE, Species.SKORUPI, Species.PALDEA_WOOPER, Species.VULLABY, Species.HISUI_QWILFISH, Species.GLIMMET ], - [TrainerPoolTier.RARE]: [ Species.SKRELP, Species.HISUI_SNEASEL ] + [TrainerPoolTier.COMMON]: [ Species.NIDOQUEEN, Species.GENGAR, Species.KOFFING, Species.CROBAT, Species.ROSERADE, Species.SKUNTANK, Species.TOXICROAK, Species.SCOLIPEDE, Species.TOXAPEX, Species.LURANTIS, Species.ALOLA_MUK ], + [TrainerPoolTier.UNCOMMON]: [ Species.DRAPION, Species.MANDIBUZZ, Species.OVERQWIL, Species.GLIMMORA, Species.CLODSIRE, Species.GALAR_SLOWBRO ], + [TrainerPoolTier.RARE]: [ Species.DRAGALGE, Species.SNEASLER ] }; } case "macro": { return { - [TrainerPoolTier.COMMON]: [ Species.HATENNA, Species.FEEBAS, Species.BOUNSWEET, Species.SALANDIT, Species.GALAR_PONYTA, Species.GOTHITA, Species.FROSLASS, Species.VULPIX, Species.FRILLISH, Species.ODDISH, Species.SINISTEA ], - [TrainerPoolTier.UNCOMMON]: [ Species.VULLABY, Species.MAREANIE, Species.ALOLA_VULPIX, Species.TOGEPI, Species.GALAR_CORSOLA, Species.APPLIN ], - [TrainerPoolTier.RARE]: [ Species.TINKATINK, Species.HISUI_LILLIGANT ] + [TrainerPoolTier.COMMON]: [ Species.NINETALES, Species.BELLOSSOM, Species.MILOTIC, Species.FROSLASS, Species.GOTHITELLE, Species.JELLICENT, Species.SALAZZLE, Species.TSAREENA, Species.POLTEAGEIST, Species.HATTERENE, Species.GALAR_RAPIDASH ], + [TrainerPoolTier.UNCOMMON]: [ Species.TOGEKISS, Species.MANDIBUZZ, Species.TOXAPEX, Species.APPLETUN, Species.CURSOLA, Species.ALOLA_NINETALES ], + [TrainerPoolTier.RARE]: [ Species.TINKATON, Species.HISUI_LILLIGANT ] }; } case "star_1": { return { - [TrainerPoolTier.COMMON]: [ Species.MURKROW, Species.SEEDOT, Species.CACNEA, Species.STUNKY, Species.SANDILE, Species.NYMBLE, Species.MASCHIFF, Species.GALAR_ZIGZAGOON ], - [TrainerPoolTier.UNCOMMON]: [ Species.UMBREON, Species.SNEASEL, Species.CORPHISH, Species.ZORUA, Species.INKAY, Species.BOMBIRDIER ], - [TrainerPoolTier.RARE]: [ Species.DEINO, Species.SPRIGATITO ] + [TrainerPoolTier.COMMON]: [ Species.SHIFTRY, Species.CACTURNE, Species.HONCHKROW, Species.SKUNTANK, Species.KROOKODILE, Species.OBSTAGOON, Species.LOKIX, Species.MABOSSTIFF ], + [TrainerPoolTier.UNCOMMON]: [ Species.UMBREON, Species.CRAWDAUNT, Species.WEAVILE, Species.ZOROARK, Species.MALAMAR, Species.BOMBIRDIER ], + [TrainerPoolTier.RARE]: [ Species.HYDREIGON, Species.MEOWSCARADA ] }; } case "star_2": { return { - [TrainerPoolTier.COMMON]: [ Species.GROWLITHE, Species.HOUNDOUR, Species.NUMEL, Species.LITWICK, Species.FLETCHLING, Species.LITLEO, Species.ROLYCOLY, Species.CAPSAKID ], - [TrainerPoolTier.UNCOMMON]: [ Species.PONYTA, Species.FLAREON, Species.MAGBY, Species.TORKOAL, Species.SALANDIT, Species.TURTONATOR ], - [TrainerPoolTier.RARE]: [ Species.LARVESTA, Species.FUECOCO ] + [TrainerPoolTier.COMMON]: [ Species.ARCANINE, Species.HOUNDOOM, Species.CAMERUPT, Species.CHANDELURE, Species.TALONFLAME, Species.PYROAR, Species.COALOSSAL, Species.SCOVILLAIN ], + [TrainerPoolTier.UNCOMMON]: [ Species.RAPIDASH, Species.FLAREON, Species.TORKOAL, Species.MAGMORTAR, Species.SALAZZLE, Species.TURTONATOR ], + [TrainerPoolTier.RARE]: [ Species.VOLCARONA, Species.SKELEDIRGE ] }; } case "star_3": { return { - [TrainerPoolTier.COMMON]: [ Species.ZUBAT, Species.GRIMER, Species.STUNKY, Species.FOONGUS, Species.MAREANIE, Species.TOXEL, Species.SHROODLE, Species.PALDEA_WOOPER ], - [TrainerPoolTier.UNCOMMON]: [ Species.GASTLY, Species.SEVIPER, Species.SKRELP, Species.ALOLA_GRIMER, Species.GALAR_SLOWPOKE, Species.HISUI_QWILFISH ], - [TrainerPoolTier.RARE]: [ Species.GLIMMET, Species.BULBASAUR ] + [TrainerPoolTier.COMMON]: [ Species.MUK, Species.CROBAT, Species.SKUNTANK, Species.AMOONGUSS, Species.TOXAPEX, Species.TOXTRICITY, Species.GRAFAIAI, Species.CLODSIRE ], + [TrainerPoolTier.UNCOMMON]: [ Species.GENGAR, Species.SEVIPER, Species.DRAGALGE, Species.OVERQWIL, Species.ALOLA_MUK, Species.GALAR_SLOWBRO ], + [TrainerPoolTier.RARE]: [ Species.GLIMMORA, Species.VENUSAUR ] }; } case "star_4": { return { - [TrainerPoolTier.COMMON]: [ Species.CLEFFA, Species.IGGLYBUFF, Species.AZURILL, Species.COTTONEE, Species.FLABEBE, Species.HATENNA, Species.IMPIDIMP, Species.TINKATINK ], - [TrainerPoolTier.UNCOMMON]: [ Species.TOGEPI, Species.GARDEVOIR, Species.SYLVEON, Species.KLEFKI, Species.MIMIKYU, Species.ALOLA_VULPIX ], - [TrainerPoolTier.RARE]: [ Species.GALAR_PONYTA, Species.POPPLIO ] + [TrainerPoolTier.COMMON]: [ Species.CLEFABLE, Species.WIGGLYTUFF, Species.AZUMARILL, Species.WHIMSICOTT, Species.FLORGES, Species.HATTERENE, Species.GRIMMSNARL, Species.TINKATON ], + [TrainerPoolTier.UNCOMMON]: [ Species.TOGEKISS, Species.GARDEVOIR, Species.SYLVEON, Species.KLEFKI, Species.MIMIKYU, Species.ALOLA_NINETALES ], + [TrainerPoolTier.RARE]: [ Species.GALAR_RAPIDASH, Species.PRIMARINA ] }; } case "star_5": { return { - [TrainerPoolTier.COMMON]: [ Species.SHROOMISH, Species.MAKUHITA, Species.MEDITITE, Species.CROAGUNK, Species.SCRAGGY, Species.MIENFOO, Species.PAWMI, Species.PALDEA_TAUROS ], - [TrainerPoolTier.UNCOMMON]: [ Species.RIOLU, Species.TIMBURR, Species.HAWLUCHA, Species.PASSIMIAN, Species.FALINKS, Species.FLAMIGO ], - [TrainerPoolTier.RARE]: [ Species.JANGMO_O, Species.QUAXLY ] + [TrainerPoolTier.COMMON]: [ Species.BRELOOM, Species.HARIYAMA, Species.MEDICHAM, Species.TOXICROAK, Species.SCRAFTY, Species.MIENSHAO, Species.PAWMOT, Species.PALDEA_TAUROS ], + [TrainerPoolTier.UNCOMMON]: [ Species.LUCARIO, Species.CONKELDURR, Species.HAWLUCHA, Species.PASSIMIAN, Species.FALINKS, Species.FLAMIGO ], + [TrainerPoolTier.RARE]: [ Species.KOMMO_O, Species.QUAQUAVAL ] }; } } @@ -685,12 +786,18 @@ export class TrainerConfig { * @param title The title of the evil team admin. * @param poolName The evil team the admin belongs to. * @param {Species | Species[]} signatureSpecies The signature species for the evil team leader. + * @param specialtyType The specialty Type of the admin, if they have one * @returns {TrainerConfig} The updated TrainerConfig instance. * **/ - initForEvilTeamAdmin(title: string, poolName: string, signatureSpecies: (Species | Species[])[],): TrainerConfig { + initForEvilTeamAdmin(title: string, poolName: string, signatureSpecies: (Species | Species[])[], specialtyType?: Type): TrainerConfig { if (!getIsInitialized()) { initI18n(); } + + if (!Utils.isNullOrUndefined(specialtyType)) { + this.setSpecialtyType(specialtyType); + } + this.setPartyTemplates(trainerPartyTemplates.RIVAL_5); // Set the species pools for the evil team admin. @@ -718,28 +825,16 @@ export class TrainerConfig { /** * Initializes the trainer configuration for a Stat Trainer, as part of the Trainer's Test Mystery Encounter. - * @param {Species | Species[]} signatureSpecies The signature species for the Elite Four member. - * @param {Type[]} specialtyTypes The specialty types for the Stat Trainer. - * @param isMale Whether the Elite Four Member is Male or Female (for localization of the title). + * @param isMale Whether the stat trainer is Male or Female (for localization of the title). * @returns {TrainerConfig} The updated TrainerConfig instance. **/ - initForStatTrainer(signatureSpecies: (Species | Species[])[], isMale: boolean, ...specialtyTypes: Type[]): TrainerConfig { + initForStatTrainer(isMale: boolean = false): TrainerConfig { if (!getIsInitialized()) { initI18n(); } this.setPartyTemplates(trainerPartyTemplates.ELITE_FOUR); - signatureSpecies.forEach((speciesPool, s) => { - if (!Array.isArray(speciesPool)) { - speciesPool = [ speciesPool ]; - } - this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); - }); - if (specialtyTypes.length) { - this.setSpeciesFilter(p => specialtyTypes.find(t => p.isOfType(t)) !== undefined); - this.setSpecialtyTypes(...specialtyTypes); - } const nameForCall = this.name.toLowerCase().replace(/\s/g, "_"); this.name = i18next.t(`trainerNames:${nameForCall}`); this.setMoneyMultiplier(2); @@ -756,11 +851,11 @@ export class TrainerConfig { /** * Initializes the trainer configuration for an evil team leader. Temporarily hardcoding evil leader teams though. * @param {Species | Species[]} signatureSpecies The signature species for the evil team leader. - * @param {Type[]} specialtyTypes The specialty types for the evil team Leader. + * @param {Type} specialtyType The specialty type for the evil team Leader. * @param boolean Whether or not this is the rematch fight * @returns {TrainerConfig} The updated TrainerConfig instance. * **/ - initForEvilTeamLeader(title: string, signatureSpecies: (Species | Species[])[], rematch: boolean = false, ...specialtyTypes: Type[]): TrainerConfig { + initForEvilTeamLeader(title: string, signatureSpecies: (Species | Species[])[], rematch: boolean = false, specialtyType?: Type): TrainerConfig { if (!getIsInitialized()) { initI18n(); } @@ -775,9 +870,9 @@ export class TrainerConfig { } this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); }); - if (specialtyTypes.length) { - this.setSpeciesFilter(p => specialtyTypes.find(t => p.isOfType(t)) !== undefined); - this.setSpecialtyTypes(...specialtyTypes); + if (!Utils.isNullOrUndefined(specialtyType)) { + this.setSpeciesFilter(p => p.isOfType(specialtyType)); + this.setSpecialtyType(specialtyType); } const nameForCall = this.name.toLowerCase().replace(/\s/g, "_"); this.name = i18next.t(`trainerNames:${nameForCall}`); @@ -794,12 +889,14 @@ export class TrainerConfig { /** * Initializes the trainer configuration for a Gym Leader. - * @param {Species | Species[]} signatureSpecies The signature species for the Gym Leader. - * @param {Type[]} specialtyTypes The specialty types for the Gym Leader. + * @param {Species | Species[]} signatureSpecies The signature species for the Gym Leader. Added to party in reverse order. * @param isMale Whether the Gym Leader is Male or Not (for localization of the title). + * @param {Type} specialtyType The specialty type for the Gym Leader. + * @param ignoreMinTeraWave Whether the Gym Leader always uses Tera (true), or only Teras after {@linkcode GYM_LEADER_TERA_WAVE} (false). Defaults to false. + * @param teraSlot Optional, sets the party member in this slot to Terastallize. Wraps based on party size. * @returns {TrainerConfig} The updated TrainerConfig instance. * **/ - initForGymLeader(signatureSpecies: (Species | Species[])[], isMale: boolean, ...specialtyTypes: Type[]): TrainerConfig { + initForGymLeader(signatureSpecies: (Species | Species[])[], isMale: boolean, specialtyType: Type, ignoreMinTeraWave: boolean = false, teraSlot?: number): TrainerConfig { // Check if the internationalization (i18n) system is initialized. if (!getIsInitialized()) { initI18n(); @@ -818,11 +915,9 @@ export class TrainerConfig { this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); }); - // If specialty types are provided, set species filter and specialty types. - if (specialtyTypes.length) { - this.setSpeciesFilter(p => specialtyTypes.find(t => p.isOfType(t)) !== undefined); - this.setSpecialtyTypes(...specialtyTypes); - } + // If specialty type is provided, set species filter and specialty type. + this.setSpeciesFilter(p => p.isOfType(specialtyType)); + this.setSpecialtyType(specialtyType); // Localize the trainer's name by converting it to lowercase and replacing spaces with underscores. const nameForCall = this.name.toLowerCase().replace(/\s/g, "_"); @@ -841,10 +936,7 @@ export class TrainerConfig { this.setHasVoucher(true); this.setBattleBgm("battle_unova_gym"); this.setVictoryBgm("victory_gym"); - this.setGenModifiersFunc(party => { - const waveIndex = party[0].scene.currentBattle.waveIndex; - return getRandomTeraModifiers(party, waveIndex >= 100 ? 1 : 0, specialtyTypes.length ? specialtyTypes : undefined); - }); + this.setRandomTeraModifiers(() => (ignoreMinTeraWave || globalScene.currentBattle.waveIndex >= GYM_LEADER_TERA_WAVE) ? 1 : 0, teraSlot); return this; } @@ -852,11 +944,12 @@ export class TrainerConfig { /** * Initializes the trainer configuration for an Elite Four member. * @param {Species | Species[]} signatureSpecies The signature species for the Elite Four member. - * @param {Type[]} specialtyTypes The specialty types for the Elite Four member. * @param isMale Whether the Elite Four Member is Male or Female (for localization of the title). + * @param specialtyType {Type} The specialty type for the Elite Four member. + * @param teraSlot Optional, sets the party member in this slot to Terastallize. * @returns {TrainerConfig} The updated TrainerConfig instance. **/ - initForEliteFour(signatureSpecies: (Species | Species[])[], isMale: boolean, ...specialtyTypes: Type[]): TrainerConfig { + initForEliteFour(signatureSpecies: (Species | Species[])[], isMale: boolean, specialtyType?: Type, teraSlot?: number): TrainerConfig { // Check if the internationalization (i18n) system is initialized. if (!getIsInitialized()) { initI18n(); @@ -875,10 +968,10 @@ export class TrainerConfig { this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); }); - // Set species filter and specialty types if provided, otherwise filter by base total. - if (specialtyTypes.length) { - this.setSpeciesFilter(p => specialtyTypes.some(t => p.isOfType(t)) && p.baseTotal >= ELITE_FOUR_MINIMUM_BST); - this.setSpecialtyTypes(...specialtyTypes); + // Set species filter and specialty type if provided, otherwise filter by base total. + if (!Utils.isNullOrUndefined(specialtyType)) { + this.setSpeciesFilter(p => p.isOfType(specialtyType) && p.baseTotal >= ELITE_FOUR_MINIMUM_BST); + this.setSpecialtyType(specialtyType); } else { this.setSpeciesFilter(p => p.baseTotal >= ELITE_FOUR_MINIMUM_BST); } @@ -900,7 +993,7 @@ export class TrainerConfig { this.setHasVoucher(true); this.setBattleBgm("battle_unova_elite"); this.setVictoryBgm("victory_gym"); - this.setGenModifiersFunc(party => getRandomTeraModifiers(party, 2, specialtyTypes.length ? specialtyTypes : undefined)); + this.setRandomTeraModifiers(() => 1, teraSlot); return this; } @@ -911,7 +1004,7 @@ export class TrainerConfig { * @param isMale Whether the Champion is Male or Female (for localization of the title). * @returns {TrainerConfig} The updated TrainerConfig instance. **/ - initForChampion(signatureSpecies: (Species | Species[])[], isMale: boolean): TrainerConfig { + initForChampion(isMale: boolean): TrainerConfig { // Check if the internationalization (i18n) system is initialized. if (!getIsInitialized()) { initI18n(); @@ -920,18 +1013,6 @@ export class TrainerConfig { // Set the party templates for the Champion. this.setPartyTemplates(trainerPartyTemplates.CHAMPION); - // Set up party members with their corresponding species. - signatureSpecies.forEach((speciesPool, s) => { - // Ensure speciesPool is an array. - if (!Array.isArray(speciesPool)) { - speciesPool = [ speciesPool ]; - } - // Set a function to get a random party member from the species pool. - this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); - }); - - this.setSpeciesFilter(p => p.baseTotal >= CHAMPION_MINIMUM_BST); - // Localize the trainer's name by converting it to lowercase and replacing spaces with underscores. const nameForCall = this.name.toLowerCase().replace(/\s/g, "_"); this.name = i18next.t(`trainerNames:${nameForCall}`); @@ -950,7 +1031,6 @@ export class TrainerConfig { this.setHasVoucher(true); this.setBattleBgm("battle_champion_alder"); this.setVictoryBgm("victory_champion"); - this.setGenModifiersFunc(party => getRandomTeraModifiers(party, 3)); return this; } @@ -1011,28 +1091,28 @@ export class TrainerConfig { return ret; } - loadAssets(scene: BattleScene, variant: TrainerVariant): Promise { + loadAssets(variant: TrainerVariant): Promise { return new Promise(resolve => { const isDouble = variant === TrainerVariant.DOUBLE; const trainerKey = this.getSpriteKey(variant === TrainerVariant.FEMALE, false); const partnerTrainerKey = this.getSpriteKey(true, true); - scene.loadAtlas(trainerKey, "trainer"); + globalScene.loadAtlas(trainerKey, "trainer"); if (isDouble) { - scene.loadAtlas(partnerTrainerKey, "trainer"); + globalScene.loadAtlas(partnerTrainerKey, "trainer"); } - scene.load.once(Phaser.Loader.Events.COMPLETE, () => { + globalScene.load.once(Phaser.Loader.Events.COMPLETE, () => { const originalWarn = console.warn; // Ignore warnings for missing frames, because there will be a lot console.warn = () => { }; - const frameNames = scene.anims.generateFrameNames(trainerKey, { + const frameNames = globalScene.anims.generateFrameNames(trainerKey, { zeroPad: 4, suffix: ".png", start: 1, end: 128 }); const partnerFrameNames = isDouble - ? scene.anims.generateFrameNames(partnerTrainerKey, { + ? globalScene.anims.generateFrameNames(partnerTrainerKey, { zeroPad: 4, suffix: ".png", start: 1, @@ -1040,16 +1120,16 @@ export class TrainerConfig { }) : ""; console.warn = originalWarn; - if (!(scene.anims.exists(trainerKey))) { - scene.anims.create({ + if (!(globalScene.anims.exists(trainerKey))) { + globalScene.anims.create({ key: trainerKey, frames: frameNames, frameRate: 24, repeat: -1 }); } - if (isDouble && !(scene.anims.exists(partnerTrainerKey))) { - scene.anims.create({ + if (isDouble && !(globalScene.anims.exists(partnerTrainerKey))) { + globalScene.anims.create({ key: partnerTrainerKey, frames: partnerFrameNames, frameRate: 24, @@ -1058,12 +1138,20 @@ export class TrainerConfig { } resolve(); }); - if (!scene.load.isLoading()) { - scene.load.start(); + if (!globalScene.load.isLoading()) { + globalScene.load.start(); } }); } + /** + * Helper function to check if a specialty type is set + * @returns true if specialtyType is defined and not Type.UNKNOWN + */ + hasSpecialtyType(): boolean { + return !Utils.isNullOrUndefined(this.specialtyType) && this.specialtyType !== Type.UNKNOWN; + } + /** * Creates a shallow copy of a trainer config so that it can be modified without affecting the {@link trainerConfigs} source map */ @@ -1105,9 +1193,7 @@ export class TrainerConfig { clone = this.speciesPools ? clone.setSpeciesPools(this.speciesPools) : clone; clone = this.speciesFilter ? clone.setSpeciesFilter(this.speciesFilter) : clone; - if (this.specialtyTypes) { - clone.specialtyTypes = this.specialtyTypes.slice(0); - } + clone.specialtyType = this.specialtyType; clone.encounterMessages = this.encounterMessages?.slice(0); clone.victoryMessages = this.victoryMessages?.slice(0); @@ -1128,16 +1214,15 @@ export class TrainerConfig { let t = 0; interface TrainerConfigs { - [key: integer]: TrainerConfig + [key: number]: TrainerConfig } /** * The function to get variable strength grunts - * @param scene the singleton scene being passed in * @returns the correct TrainerPartyTemplate */ -function getEvilGruntPartyTemplate(scene: BattleScene): TrainerPartyTemplate { - const waveIndex = scene.currentBattle?.waveIndex; +function getEvilGruntPartyTemplate(): TrainerPartyTemplate { + const waveIndex = globalScene.currentBattle?.waveIndex; if (waveIndex < 40) { return trainerPartyTemplates.TWO_AVG; } else if (waveIndex < 63) { @@ -1151,29 +1236,29 @@ function getEvilGruntPartyTemplate(scene: BattleScene): TrainerPartyTemplate { } } -function getWavePartyTemplate(scene: BattleScene, ...templates: TrainerPartyTemplate[]) { - return templates[Math.min(Math.max(Math.ceil((scene.gameMode.getWaveForDifficulty(scene.currentBattle?.waveIndex || startingWave, true) - 20) / 30), 0), templates.length - 1)]; +function getWavePartyTemplate(...templates: TrainerPartyTemplate[]) { + return templates[Math.min(Math.max(Math.ceil((globalScene.gameMode.getWaveForDifficulty(globalScene.currentBattle?.waveIndex || startingWave, true) - 20) / 30), 0), templates.length - 1)]; } -function getGymLeaderPartyTemplate(scene: BattleScene) { - return getWavePartyTemplate(scene, trainerPartyTemplates.GYM_LEADER_1, trainerPartyTemplates.GYM_LEADER_2, trainerPartyTemplates.GYM_LEADER_3, trainerPartyTemplates.GYM_LEADER_4, trainerPartyTemplates.GYM_LEADER_5); +function getGymLeaderPartyTemplate() { + return getWavePartyTemplate(trainerPartyTemplates.GYM_LEADER_1, trainerPartyTemplates.GYM_LEADER_2, trainerPartyTemplates.GYM_LEADER_3, trainerPartyTemplates.GYM_LEADER_4, trainerPartyTemplates.GYM_LEADER_5); } /** * Randomly selects one of the `Species` from `speciesPool`, determines its evolution, level, and strength. - * Then adds Pokemon to scene. + * Then adds Pokemon to globalScene. * @param speciesPool * @param trainerSlot * @param ignoreEvolution * @param postProcess */ export function getRandomPartyMemberFunc(speciesPool: Species[], trainerSlot: TrainerSlot = TrainerSlot.TRAINER, ignoreEvolution: boolean = false, postProcess?: (enemyPokemon: EnemyPokemon) => void) { - return (scene: BattleScene, level: number, strength: PartyMemberStrength) => { + return (level: number, strength: PartyMemberStrength) => { let species = Utils.randSeedItem(speciesPool); if (!ignoreEvolution) { - species = getPokemonSpecies(species).getTrainerSpeciesForLevel(level, true, strength, scene.currentBattle.waveIndex); + species = getPokemonSpecies(species).getTrainerSpeciesForLevel(level, true, strength, globalScene.currentBattle.waveIndex); } - return scene.addEnemyPokemon(getPokemonSpecies(species), level, trainerSlot, undefined, false, undefined, postProcess); + return globalScene.addEnemyPokemon(getPokemonSpecies(species), level, trainerSlot, undefined, false, undefined, postProcess); }; } @@ -1189,25 +1274,15 @@ function getSpeciesFilterRandomPartyMemberFunc( return (allowLegendaries || notLegendary) && !species.isTrainerForbidden() && originalSpeciesFilter(species); }; - return (scene: BattleScene, level: number, strength: PartyMemberStrength) => { - const waveIndex = scene.currentBattle.waveIndex; - const species = getPokemonSpecies(scene.randomSpecies(waveIndex, level, false, speciesFilter) + return (level: number, strength: PartyMemberStrength) => { + const waveIndex = globalScene.currentBattle.waveIndex; + const species = getPokemonSpecies(globalScene.randomSpecies(waveIndex, level, false, speciesFilter) .getTrainerSpeciesForLevel(level, true, strength, waveIndex)); - return scene.addEnemyPokemon(species, level, trainerSlot, undefined, false, undefined, postProcess); + return globalScene.addEnemyPokemon(species, level, trainerSlot, undefined, false, undefined, postProcess); }; } -function getRandomTeraModifiers(party: EnemyPokemon[], count: integer, types?: Type[]): PersistentModifier[] { - const ret: PersistentModifier[] = []; - const partyMemberIndexes = new Array(party.length).fill(null).map((_, i) => i); - for (let t = 0; t < Math.min(count, party.length); t++) { - const randomIndex = Utils.randSeedItem(partyMemberIndexes); - partyMemberIndexes.splice(partyMemberIndexes.indexOf(randomIndex), 1); - ret.push(modifierTypes.TERA_SHARD().generateType([], [ Utils.randSeedItem(types ? types : party[randomIndex].getTypes()) ])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(party[randomIndex]) as PersistentModifier); // TODO: is the bang correct? - } - return ret; -} type SignatureSpecies = { [key in string]: (Species | Species[])[]; @@ -1229,7 +1304,7 @@ export const signatureSpecies: SignatureSpecies = { GIOVANNI: [ Species.SANDILE, Species.MURKROW, Species.NIDORAN_M, Species.NIDORAN_F ], FALKNER: [ Species.PIDGEY, Species.HOOTHOOT, Species.DODUO ], BUGSY: [ Species.SCYTHER, Species.HERACROSS, Species.SHUCKLE, Species.PINSIR ], - WHITNEY: [ Species.GIRAFARIG, Species.MILTANK ], + WHITNEY: [ Species.JIGGLYPUFF, Species.MILTANK, Species.AIPOM, Species.GIRAFARIG ], MORTY: [ Species.GASTLY, Species.MISDREAVUS, Species.SABLEYE ], CHUCK: [ Species.POLIWRATH, Species.MANKEY ], JASMINE: [ Species.MAGNEMITE, Species.STEELIX ], @@ -1239,7 +1314,7 @@ export const signatureSpecies: SignatureSpecies = { BRAWLY: [ Species.MACHOP, Species.MAKUHITA ], WATTSON: [ Species.MAGNEMITE, Species.VOLTORB, Species.ELECTRIKE ], FLANNERY: [ Species.SLUGMA, Species.TORKOAL, Species.NUMEL ], - NORMAN: [ Species.SLAKOTH, Species.SPINDA, Species.CHANSEY, Species.KANGASKHAN ], + NORMAN: [ Species.SLAKOTH, Species.SPINDA, Species.ZIGZAGOON, Species.KECLEON ], WINONA: [ Species.SWABLU, Species.WINGULL, Species.TROPIUS, Species.SKARMORY ], TATE: [ Species.SOLROCK, Species.NATU, Species.CHIMECHO, Species.GALLADE ], LIZA: [ Species.LUNATONE, Species.SPOINK, Species.BALTOY, Species.GARDEVOIR ], @@ -1247,16 +1322,16 @@ export const signatureSpecies: SignatureSpecies = { ROARK: [ Species.CRANIDOS, Species.LARVITAR, Species.GEODUDE ], GARDENIA: [ Species.ROSELIA, Species.TANGELA, Species.TURTWIG ], MAYLENE: [ Species.LUCARIO, Species.MEDITITE, Species.CHIMCHAR ], - CRASHER_WAKE: [ Species.BUIZEL, Species.MAGIKARP, Species.PIPLUP ], + CRASHER_WAKE: [ Species.BUIZEL, Species.WOOPER, Species.PIPLUP, Species.MAGIKARP ], FANTINA: [ Species.MISDREAVUS, Species.DRIFLOON, Species.SPIRITOMB ], BYRON: [ Species.SHIELDON, Species.BRONZOR, Species.AGGRON ], CANDICE: [ Species.SNEASEL, Species.SNOVER, Species.SNORUNT ], VOLKNER: [ Species.SHINX, Species.CHINCHOU, Species.ROTOM ], - CILAN: [ Species.PANSAGE, Species.COTTONEE, Species.PETILIL ], - CHILI: [ Species.PANSEAR, Species.DARUMAKA, Species.HEATMOR ], - CRESS: [ Species.PANPOUR, Species.BASCULIN, Species.TYMPOLE ], - CHEREN: [ Species.LILLIPUP, Species.MINCCINO, Species.PATRAT ], - LENORA: [ Species.KANGASKHAN, Species.DEERLING, Species.AUDINO ], + CILAN: [ Species.PANSAGE, Species.FOONGUS, Species.PETILIL ], + CHILI: [ Species.PANSEAR, Species.DARUMAKA, Species.NUMEL ], + CRESS: [ Species.PANPOUR, Species.TYMPOLE, Species.SLOWPOKE ], + CHEREN: [ Species.LILLIPUP, Species.MINCCINO, Species.PIDOVE ], + LENORA: [ Species.PATRAT, Species.DEERLING, Species.AUDINO ], ROXIE: [ Species.VENIPEDE, Species.TRUBBISH, Species.SKORUPI ], BURGH: [ Species.SEWADDLE, Species.SHELMET, Species.KARRABLAST ], ELESA: [ Species.EMOLGA, Species.BLITZLE, Species.JOLTIK ], @@ -1285,28 +1360,28 @@ export const signatureSpecies: SignatureSpecies = { PIERS: [ Species.GALAR_ZIGZAGOON, Species.SCRAGGY, Species.INKAY ], MARNIE: [ Species.IMPIDIMP, Species.PURRLOIN, Species.MORPEKO ], RAIHAN: [ Species.DURALUDON, Species.TURTONATOR, Species.GOOMY ], - KATY: [ Species.NYMBLE, Species.TAROUNTULA, Species.HERACROSS ], - BRASSIUS: [ Species.SMOLIV, Species.SHROOMISH, Species.ODDISH ], - IONO: [ Species.TADBULB, Species.WATTREL, Species.VOLTORB ], - KOFU: [ Species.VELUZA, Species.WIGLETT, Species.WINGULL ], - LARRY: [ Species.STARLY, Species.DUNSPARCE, Species.KOMALA ], - RYME: [ Species.GREAVARD, Species.SHUPPET, Species.MIMIKYU ], - TULIP: [ Species.GIRAFARIG, Species.FLITTLE, Species.RALTS ], - GRUSHA: [ Species.CETODDLE, Species.ALOLA_VULPIX, Species.CUBCHOO ], - LORELEI: [ Species.JYNX, [ Species.SLOWBRO, Species.GALAR_SLOWBRO ], Species.LAPRAS, [ Species.ALOLA_SANDSLASH, Species.CLOYSTER ]], - BRUNO: [ Species.MACHAMP, Species.HITMONCHAN, Species.HITMONLEE, [ Species.ALOLA_GOLEM, Species.GOLEM ]], + KATY: [ Species.TEDDIURSA, Species.NYMBLE, Species.TAROUNTULA ], // Tera Bug Teddiursa + BRASSIUS: [ Species.SUDOWOODO, Species.BRAMBLIN, Species.SMOLIV ], // Tera Grass Sudowoodo + IONO: [ Species.MISDREAVUS, Species.TADBULB, Species.WATTREL ], // Tera Ghost Misdreavus + KOFU: [ Species.CRABRAWLER, Species.VELUZA, Species.WIGLETT, Species.WINGULL ], // Tera Water Crabrawler + LARRY: [ Species.STARLY, Species.DUNSPARCE, Species.LECHONK, Species.KOMALA ], // Tera Normal Starly + RYME: [ Species.TOXEL, Species.GREAVARD, Species.SHUPPET, Species.MIMIKYU ], // Tera Ghost Toxel + TULIP: [ Species.FLABEBE, Species.FLITTLE, Species.RALTS, Species.GIRAFARIG ], // Tera Psychic Flabebe + GRUSHA: [ Species.SWABLU, Species.CETODDLE, Species.CUBCHOO, Species.ALOLA_VULPIX ], // Tera Ice Swablu + LORELEI: [ Species.JYNX, [ Species.SLOWBRO, Species.GALAR_SLOWBRO ], Species.LAPRAS, [ Species.CLOYSTER, Species.ALOLA_SANDSLASH ]], + BRUNO: [ Species.MACHAMP, Species.HITMONCHAN, Species.HITMONLEE, [ Species.GOLEM, Species.ALOLA_GOLEM ]], AGATHA: [ Species.GENGAR, [ Species.ARBOK, Species.WEEZING ], Species.CROBAT, Species.ALOLA_MAROWAK ], LANCE: [ Species.DRAGONITE, Species.GYARADOS, Species.AERODACTYL, Species.ALOLA_EXEGGUTOR ], WILL: [ Species.XATU, Species.JYNX, [ Species.SLOWBRO, Species.SLOWKING ], Species.EXEGGUTOR ], - KOGA: [[ Species.WEEZING, Species.MUK ], [ Species.VENOMOTH, Species.ARIADOS ], Species.CROBAT, Species.TENTACRUEL ], + KOGA: [[ Species.MUK, Species.WEEZING ], [ Species.VENOMOTH, Species.ARIADOS ], Species.CROBAT, Species.TENTACRUEL ], KAREN: [ Species.UMBREON, Species.HONCHKROW, Species.HOUNDOOM, Species.WEAVILE ], SIDNEY: [[ Species.SHIFTRY, Species.CACTURNE ], [ Species.SHARPEDO, Species.CRAWDAUNT ], Species.ABSOL, Species.MIGHTYENA ], - PHOEBE: [ Species.SABLEYE, Species.DUSKNOIR, Species.BANETTE, [ Species.MISMAGIUS, Species.DRIFBLIM ]], + PHOEBE: [ Species.SABLEYE, Species.DUSKNOIR, Species.BANETTE, [ Species.DRIFBLIM, Species.MISMAGIUS ]], GLACIA: [ Species.GLALIE, Species.WALREIN, Species.FROSLASS, Species.ABOMASNOW ], DRAKE: [ Species.ALTARIA, Species.SALAMENCE, Species.FLYGON, Species.KINGDRA ], AARON: [[ Species.SCIZOR, Species.KLEAVOR ], Species.HERACROSS, [ Species.VESPIQUEN, Species.YANMEGA ], Species.DRAPION ], BERTHA: [ Species.WHISCASH, Species.HIPPOWDON, Species.GLISCOR, Species.RHYPERIOR ], - FLINT: [[ Species.FLAREON, Species.RAPIDASH ], Species.MAGMORTAR, [ Species.STEELIX, Species.LOPUNNY ], Species.INFERNAPE ], + FLINT: [[ Species.RAPIDASH, Species.FLAREON ], Species.MAGMORTAR, [ Species.STEELIX, Species.LOPUNNY ], Species.INFERNAPE ], // Tera Fire Steelix or Lopunny LUCIAN: [ Species.MR_MIME, Species.GALLADE, Species.BRONZONG, [ Species.ALAKAZAM, Species.ESPEON ]], SHAUNTAL: [ Species.COFAGRIGUS, Species.CHANDELURE, Species.GOLURK, Species.JELLICENT ], MARSHAL: [ Species.CONKELDURR, Species.MIENSHAO, Species.THROH, Species.SAWK ], @@ -1322,38 +1397,24 @@ export const signatureSpecies: SignatureSpecies = { ACEROLA: [[ Species.BANETTE, Species.DRIFBLIM ], Species.MIMIKYU, Species.DHELMISE, Species.PALOSSAND ], KAHILI: [[ Species.BRAVIARY, Species.MANDIBUZZ ], Species.HAWLUCHA, Species.ORICORIO, Species.TOUCANNON ], MARNIE_ELITE: [ Species.MORPEKO, Species.LIEPARD, [ Species.TOXICROAK, Species.SCRAFTY ], Species.GRIMMSNARL ], - NESSA_ELITE: [ Species.GOLISOPOD, [ Species.PELIPPER, Species.QUAGSIRE ], Species.TOXAPEX, Species.DREDNAW ], + NESSA_ELITE: [ Species.GOLISOPOD, [ Species.QUAGSIRE, Species.PELIPPER ], Species.TOXAPEX, Species.DREDNAW ], BEA_ELITE: [ Species.HAWLUCHA, [ Species.GRAPPLOCT, Species.SIRFETCHD ], Species.FALINKS, Species.MACHAMP ], ALLISTER_ELITE: [ Species.DUSKNOIR, [ Species.POLTEAGEIST, Species.RUNERIGUS ], Species.CURSOLA, Species.GENGAR ], RAIHAN_ELITE: [ Species.GOODRA, [ Species.TORKOAL, Species.TURTONATOR ], Species.FLYGON, Species.ARCHALUDON ], - RIKA: [ Species.WHISCASH, [ Species.DONPHAN, Species.DUGTRIO ], Species.CAMERUPT, Species.CLODSIRE ], - POPPY: [ Species.COPPERAJAH, Species.BRONZONG, Species.CORVIKNIGHT, Species.TINKATON ], - LARRY_ELITE: [ Species.STARAPTOR, Species.FLAMIGO, Species.ALTARIA, Species.TROPIUS ], - HASSEL: [ Species.NOIVERN, [ Species.FLAPPLE, Species.APPLETUN ], Species.DRAGALGE, Species.BAXCALIBUR ], - CRISPIN: [ Species.TALONFLAME, Species.CAMERUPT, Species.MAGMORTAR, Species.BLAZIKEN ], - AMARYS: [ Species.SKARMORY, Species.EMPOLEON, Species.SCIZOR, Species.METAGROSS ], - LACEY: [ Species.EXCADRILL, Species.PRIMARINA, [ Species.ALCREMIE, Species.GRANBULL ], Species.WHIMSICOTT ], - DRAYTON: [ Species.DRAGONITE, Species.ARCHALUDON, Species.HAXORUS, Species.SCEPTILE ], - BLUE: [[ Species.GYARADOS, Species.EXEGGUTOR, Species.ARCANINE ], Species.HO_OH, [ Species.RHYPERIOR, Species.MAGNEZONE ]], // Alakazam lead, Mega Pidgeot - RED: [ Species.LUGIA, Species.SNORLAX, [ Species.ESPEON, Species.UMBREON, Species.SYLVEON ]], // GMax Pikachu lead, Mega gen 1 starter - LANCE_CHAMPION: [ Species.DRAGONITE, Species.KINGDRA, Species.ALOLA_EXEGGUTOR ], // Aerodactyl lead, Mega Latias/Latios - STEVEN: [ Species.AGGRON, [ Species.ARMALDO, Species.CRADILY ], Species.DIALGA ], // Skarmory lead, Mega Metagross - WALLACE: [ Species.MILOTIC, Species.PALKIA, Species.LUDICOLO ], // Pelipper lead, Mega Swampert - CYNTHIA: [ Species.GIRATINA, Species.LUCARIO, Species.TOGEKISS ], // Spiritomb lead, Mega Garchomp - ALDER: [ Species.VOLCARONA, Species.ZEKROM, [ Species.ACCELGOR, Species.ESCAVALIER ], Species.KELDEO ], // Bouffalant/Braviary lead - IRIS: [ Species.HAXORUS, Species.RESHIRAM, Species.ARCHEOPS ], // Druddigon lead, Gmax Lapras - DIANTHA: [ Species.HAWLUCHA, Species.XERNEAS, Species.GOODRA ], // Gourgeist lead, Mega Gardevoir - HAU: [[ Species.SOLGALEO, Species.LUNALA ], Species.NOIVERN, [ Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA ], [ Species.TAPU_BULU, Species.TAPU_FINI, Species.TAPU_KOKO, Species.TAPU_LELE ]], // Alola Raichu lead - LEON: [ Species.DRAGAPULT, Species.ZACIAN, Species.AEGISLASH ], // Rillaboom/Cinderace/Inteleon lead, GMax Charizard - GEETA: [ Species.MIRAIDON, [ Species.ESPATHRA, Species.VELUZA ], [ Species.AVALUGG, Species.HISUI_AVALUGG ], Species.KINGAMBIT ], // Glimmora lead - NEMONA: [ Species.KORAIDON, Species.PAWMOT, [ Species.DUDUNSPARCE, Species.ORTHWORM ], [ Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL ]], // Lycanroc lead - KIERAN: [[ Species.GRIMMSNARL, Species.INCINEROAR, Species.PORYGON_Z ], Species.OGERPON, Species.TERAPAGOS, Species.HYDRAPPLE ], // Poliwrath/Politoed lead + RIKA: [ Species.CLODSIRE, [ Species.DUGTRIO, Species.DONPHAN ], Species.CAMERUPT, Species.WHISCASH ], // Tera Ground Clodsire + POPPY: [ Species.TINKATON, Species.BRONZONG, Species.CORVIKNIGHT, Species.COPPERAJAH ], // Tera Steel Tinkaton + LARRY_ELITE: [ Species.FLAMIGO, Species.STARAPTOR, [ Species.ALTARIA, Species.TROPIUS ], Species.ORICORIO ], // Tera Flying Flamigo; random Oricorio + HASSEL: [ Species.BAXCALIBUR, [ Species.FLAPPLE, Species.APPLETUN ], Species.DRAGALGE, Species.NOIVERN ], // Tera Dragon Baxcalibur + CRISPIN: [ Species.BLAZIKEN, Species.MAGMORTAR, [ Species.CAMERUPT, Species.TALONFLAME ], Species.ROTOM ], // Tera Fire Blaziken; Heat Rotom + AMARYS: [ Species.METAGROSS, Species.SCIZOR, Species.EMPOLEON, Species.SKARMORY ], // Tera Steel Metagross + LACEY: [ Species.EXCADRILL, Species.PRIMARINA, [ Species.WHIMSICOTT, Species.ALCREMIE ], Species.GRANBULL ], // Tera Fairy Excadrill + DRAYTON: [ Species.ARCHALUDON, Species.DRAGONITE, Species.HAXORUS, Species.SCEPTILE ], // Tera Dragon Archaludon }; export const trainerConfigs: TrainerConfigs = { [TrainerType.UNKNOWN]: new TrainerConfig(0).setHasGenders(), [TrainerType.ACE_TRAINER]: new TrainerConfig(++t).setHasGenders("Ace Trainer Female").setHasDouble("Ace Duo").setMoneyMultiplier(2.25).setEncounterBgm(TrainerType.ACE_TRAINER) - .setPartyTemplateFunc(scene => getWavePartyTemplate(scene, trainerPartyTemplates.THREE_WEAK_BALANCED, trainerPartyTemplates.FOUR_WEAK_BALANCED, trainerPartyTemplates.FIVE_WEAK_BALANCED, trainerPartyTemplates.SIX_WEAK_BALANCED)), + .setPartyTemplateFunc(() => getWavePartyTemplate(trainerPartyTemplates.THREE_WEAK_BALANCED, trainerPartyTemplates.FOUR_WEAK_BALANCED, trainerPartyTemplates.FIVE_WEAK_BALANCED, trainerPartyTemplates.SIX_WEAK_BALANCED)), [TrainerType.ARTIST]: new TrainerConfig(++t).setEncounterBgm(TrainerType.RICH).setPartyTemplates(trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.THREE_AVG) .setSpeciesPools([ Species.SMEARGLE ]), [TrainerType.BACKERS]: new TrainerConfig(++t).setHasGenders("Backers").setDoubleOnly().setEncounterBgm(TrainerType.CYCLIST), @@ -1368,7 +1429,7 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.BAKER]: new TrainerConfig(++t).setEncounterBgm(TrainerType.CLERK).setMoneyMultiplier(1.35).setSpeciesFilter(s => s.isOfType(Type.GRASS) || s.isOfType(Type.FIRE)), [TrainerType.BEAUTY]: new TrainerConfig(++t).setMoneyMultiplier(1.55).setEncounterBgm(TrainerType.PARASOL_LADY), [TrainerType.BIKER]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setEncounterBgm(TrainerType.ROUGHNECK).setSpeciesFilter(s => s.isOfType(Type.POISON)), - [TrainerType.BLACK_BELT]: new TrainerConfig(++t).setHasGenders("Battle Girl", TrainerType.PSYCHIC).setHasDouble("Crush Kin").setEncounterBgm(TrainerType.ROUGHNECK).setSpecialtyTypes(Type.FIGHTING) + [TrainerType.BLACK_BELT]: new TrainerConfig(++t).setHasGenders("Battle Girl", TrainerType.PSYCHIC).setHasDouble("Crush Kin").setEncounterBgm(TrainerType.ROUGHNECK).setSpecialtyType(Type.FIGHTING) .setPartyTemplates(trainerPartyTemplates.TWO_WEAK_ONE_AVG, trainerPartyTemplates.TWO_WEAK_ONE_AVG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_ONE_STRONG, trainerPartyTemplates.THREE_AVG, trainerPartyTemplates.TWO_AVG_ONE_STRONG) .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ Species.NIDORAN_F, Species.NIDORAN_M, Species.MACHOP, Species.MAKUHITA, Species.MEDITITE, Species.CROAGUNK, Species.TIMBURR ], @@ -1378,7 +1439,7 @@ export const trainerConfigs: TrainerConfigs = { [TrainerPoolTier.ULTRA_RARE]: [ Species.KUBFU ] }), [TrainerType.BREEDER]: new TrainerConfig(++t).setMoneyMultiplier(1.325).setEncounterBgm(TrainerType.POKEFAN).setHasGenders("Breeder Female").setHasDouble("Breeders") - .setPartyTemplateFunc(scene => getWavePartyTemplate(scene, trainerPartyTemplates.FOUR_WEAKER, trainerPartyTemplates.FIVE_WEAKER, trainerPartyTemplates.SIX_WEAKER)) + .setPartyTemplateFunc(() => getWavePartyTemplate(trainerPartyTemplates.FOUR_WEAKER, trainerPartyTemplates.FIVE_WEAKER, trainerPartyTemplates.SIX_WEAKER)) .setSpeciesFilter(s => s.baseTotal < 450), [TrainerType.CLERK]: new TrainerConfig(++t).setHasGenders("Clerk Female").setHasDouble("Colleagues").setEncounterBgm(TrainerType.CLERK) .setPartyTemplates(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.THREE_WEAK, trainerPartyTemplates.ONE_AVG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_ONE_AVG) @@ -1408,7 +1469,7 @@ export const trainerConfigs: TrainerConfigs = { .setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === Moves.HEAL_PULSE)), [TrainerType.FIREBREATHER]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setEncounterBgm(TrainerType.ROUGHNECK) .setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === Moves.SMOG) || s.isOfType(Type.FIRE)), - [TrainerType.FISHERMAN]: new TrainerConfig(++t).setMoneyMultiplier(1.25).setEncounterBgm(TrainerType.BACKPACKER).setSpecialtyTypes(Type.WATER) + [TrainerType.FISHERMAN]: new TrainerConfig(++t).setMoneyMultiplier(1.25).setEncounterBgm(TrainerType.BACKPACKER).setSpecialtyType(Type.WATER) .setPartyTemplates(trainerPartyTemplates.TWO_WEAK_SAME_ONE_AVG, trainerPartyTemplates.ONE_AVG, trainerPartyTemplates.THREE_WEAK_SAME, trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.SIX_WEAKER) .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ Species.TENTACOOL, Species.MAGIKARP, Species.GOLDEEN, Species.STARYU, Species.REMORAID, Species.SKRELP, Species.CLAUNCHER, Species.ARROKUDA ], @@ -1416,7 +1477,7 @@ export const trainerConfigs: TrainerConfigs = { [TrainerPoolTier.RARE]: [ Species.CHINCHOU, Species.CORSOLA, Species.WAILMER, Species.BARBOACH, Species.CLAMPERL, Species.LUVDISC, Species.MANTYKE, Species.ALOMOMOLA, Species.TATSUGIRI, Species.VELUZA ], [TrainerPoolTier.SUPER_RARE]: [ Species.LAPRAS, Species.FEEBAS, Species.RELICANTH, Species.DONDOZO ] }), - [TrainerType.GUITARIST]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.ROUGHNECK).setSpecialtyTypes(Type.ELECTRIC).setSpeciesFilter(s => s.isOfType(Type.ELECTRIC)), + [TrainerType.GUITARIST]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.ROUGHNECK).setSpecialtyType(Type.ELECTRIC).setSpeciesFilter(s => s.isOfType(Type.ELECTRIC)), [TrainerType.HARLEQUIN]: new TrainerConfig(++t).setEncounterBgm(TrainerType.PSYCHIC).setSpeciesFilter(s => tmSpecies[Moves.TRICK_ROOM].indexOf(s.speciesId) > -1), [TrainerType.HIKER]: new TrainerConfig(++t).setEncounterBgm(TrainerType.BACKPACKER) .setPartyTemplates(trainerPartyTemplates.TWO_AVG_SAME_ONE_AVG, trainerPartyTemplates.TWO_AVG_SAME_ONE_STRONG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.FOUR_WEAK, trainerPartyTemplates.ONE_STRONG) @@ -1495,9 +1556,9 @@ export const trainerConfigs: TrainerConfigs = { [TrainerPoolTier.RARE]: [ Species.TANGELA, Species.EEVEE, Species.YANMA ], [TrainerPoolTier.SUPER_RARE]: [ Species.TADBULB ] }), - [TrainerType.SWIMMER]: new TrainerConfig(++t).setMoneyMultiplier(1.3).setEncounterBgm(TrainerType.PARASOL_LADY).setHasGenders("Swimmer Female").setHasDouble("Swimmers").setSpecialtyTypes(Type.WATER).setSpeciesFilter(s => s.isOfType(Type.WATER)), + [TrainerType.SWIMMER]: new TrainerConfig(++t).setMoneyMultiplier(1.3).setEncounterBgm(TrainerType.PARASOL_LADY).setHasGenders("Swimmer Female").setHasDouble("Swimmers").setSpecialtyType(Type.WATER).setSpeciesFilter(s => s.isOfType(Type.WATER)), [TrainerType.TWINS]: new TrainerConfig(++t).setDoubleOnly().setMoneyMultiplier(0.65).setUseSameSeedForAllMembers() - .setPartyTemplateFunc(scene => getWavePartyTemplate(scene, trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_STRONG)) + .setPartyTemplateFunc(() => getWavePartyTemplate(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_STRONG)) .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.PLUSLE, Species.VOLBEAT, Species.PACHIRISU, Species.SILCOON, Species.METAPOD, Species.IGGLYBUFF, Species.PETILIL, Species.EEVEE ])) .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.MINUN, Species.ILLUMISE, Species.EMOLGA, Species.CASCOON, Species.KAKUNA, Species.CLEFFA, Species.COTTONEE, Species.EEVEE ], TrainerSlot.TRAINER_PARTNER)) .setEncounterBgm(TrainerType.TWINS), @@ -1513,115 +1574,115 @@ export const trainerConfigs: TrainerConfigs = { .setSpeciesPools( [ Species.CATERPIE, Species.WEEDLE, Species.RATTATA, Species.SENTRET, Species.POOCHYENA, Species.ZIGZAGOON, Species.WURMPLE, Species.BIDOOF, Species.PATRAT, Species.LILLIPUP ] ), - [TrainerType.ROCKET_GRUNT]: new TrainerConfig(++t).setHasGenders("Rocket Grunt Female").setHasDouble("Rocket Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + [TrainerType.ROCKET_GRUNT]: new TrainerConfig(++t).setHasGenders("Rocket Grunt Female").setHasDouble("Rocket Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [ Species.WEEDLE, Species.RATTATA, Species.EKANS, Species.SANDSHREW, Species.ZUBAT, Species.GEODUDE, Species.KOFFING, Species.GRIMER, Species.ODDISH, Species.SLOWPOKE ], - [TrainerPoolTier.UNCOMMON]: [ Species.GYARADOS, Species.LICKITUNG, Species.TAUROS, Species.MANKEY, Species.SCYTHER, Species.ELEKID, Species.MAGBY, Species.CUBONE, Species.GROWLITHE, Species.MURKROW, Species.GASTLY, Species.EXEGGCUTE, Species.VOLTORB, Species.MAGNEMITE ], - [TrainerPoolTier.RARE]: [ Species.PORYGON, Species.ALOLA_RATTATA, Species.ALOLA_SANDSHREW, Species.ALOLA_MEOWTH, Species.ALOLA_GRIMER, Species.ALOLA_GEODUDE, Species.PALDEA_TAUROS, Species.OMANYTE, Species.KABUTO ], + [TrainerPoolTier.COMMON]: [ Species.WEEDLE, Species.RATTATA, Species.EKANS, Species.SANDSHREW, Species.ZUBAT, Species.ODDISH, Species.GEODUDE, Species.SLOWPOKE, Species.GRIMER, Species.KOFFING ], + [TrainerPoolTier.UNCOMMON]: [ Species.MANKEY, Species.GROWLITHE, Species.MAGNEMITE, Species.GASTLY, Species.VOLTORB, Species.EXEGGCUTE, Species.CUBONE, Species.LICKITUNG, Species.SCYTHER, Species.TAUROS, Species.GYARADOS, Species.MURKROW, Species.ELEKID, Species.MAGBY ], + [TrainerPoolTier.RARE]: [ Species.PORYGON, Species.OMANYTE, Species.KABUTO, Species.ALOLA_RATTATA, Species.ALOLA_SANDSHREW, Species.ALOLA_MEOWTH, Species.ALOLA_GEODUDE, Species.ALOLA_GRIMER, Species.PALDEA_TAUROS ], [TrainerPoolTier.SUPER_RARE]: [ Species.DRATINI, Species.LARVITAR ] }), - [TrainerType.ARCHER]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin", "rocket", [ Species.HOUNDOOM ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.ARIANA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin_female", "rocket", [ Species.ARBOK ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.PROTON]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin", "rocket", [ Species.CROBAT ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.PETREL]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin", "rocket", [ Species.WEEZING ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.MAGMA_GRUNT]: new TrainerConfig(++t).setHasGenders("Magma Grunt Female").setHasDouble("Magma Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + [TrainerType.ARCHER]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin", "rocket", [ Species.HOUNDOOM ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), + [TrainerType.ARIANA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin_female", "rocket", [ Species.ARBOK ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), + [TrainerType.PROTON]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin", "rocket", [ Species.CROBAT ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), + [TrainerType.PETREL]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin", "rocket", [ Species.WEEZING ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), + [TrainerType.MAGMA_GRUNT]: new TrainerConfig(++t).setHasGenders("Magma Grunt Female").setHasDouble("Magma Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [ Species.SLUGMA, Species.POOCHYENA, Species.NUMEL, Species.ZIGZAGOON, Species.DIGLETT, Species.MAGBY, Species.TORKOAL, Species.GROWLITHE, Species.BALTOY ], - [TrainerPoolTier.UNCOMMON]: [ Species.SOLROCK, Species.HIPPOPOTAS, Species.SANDACONDA, Species.PHANPY, Species.ROLYCOLY, Species.GLIGAR, Species.RHYHORN, Species.HEATMOR ], - [TrainerPoolTier.RARE]: [ Species.TRAPINCH, Species.LILEEP, Species.ANORITH, Species.HISUI_GROWLITHE, Species.TURTONATOR, Species.ARON, Species.TOEDSCOOL ], - [TrainerPoolTier.SUPER_RARE]: [ Species.CAPSAKID, Species.CHARCADET ] + [TrainerPoolTier.COMMON]: [ Species.DIGLETT, Species.GROWLITHE, Species.SLUGMA, Species.MAGBY, Species.POOCHYENA, Species.ZIGZAGOON, Species.NUMEL, Species.TORKOAL, Species.BALTOY ], + [TrainerPoolTier.UNCOMMON]: [ Species.RHYHORN, Species.GLIGAR, Species.PHANPY, Species.SOLROCK, Species.HIPPOPOTAS, Species.HEATMOR, Species.ROLYCOLY, Species.SILICOBRA ], + [TrainerPoolTier.RARE]: [ Species.ARON, Species.TRAPINCH, Species.LILEEP, Species.ANORITH, Species.TURTONATOR, Species.TOEDSCOOL, Species.HISUI_GROWLITHE ], + [TrainerPoolTier.SUPER_RARE]: [ Species.CHARCADET, Species.CAPSAKID ] }), - [TrainerType.TABITHA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("magma_admin", "magma", [ Species.CAMERUPT ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.COURTNEY]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("magma_admin_female", "magma", [ Species.CAMERUPT ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.AQUA_GRUNT]: new TrainerConfig(++t).setHasGenders("Aqua Grunt Female").setHasDouble("Aqua Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + [TrainerType.TABITHA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("magma_admin", "magma", [ Species.CAMERUPT ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), + [TrainerType.COURTNEY]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("magma_admin_female", "magma", [ Species.CAMERUPT ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), + [TrainerType.AQUA_GRUNT]: new TrainerConfig(++t).setHasGenders("Aqua Grunt Female").setHasDouble("Aqua Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [ Species.CARVANHA, Species.WAILMER, Species.ZIGZAGOON, Species.LOTAD, Species.CORPHISH, Species.SPHEAL, Species.REMORAID, Species.QWILFISH, Species.BARBOACH ], - [TrainerPoolTier.UNCOMMON]: [ Species.CLAMPERL, Species.CHINCHOU, Species.WOOPER, Species.WINGULL, Species.TENTACOOL, Species.AZURILL, Species.CLOBBOPUS, Species.HORSEA ], - [TrainerPoolTier.RARE]: [ Species.MANTYKE, Species.DHELMISE, Species.HISUI_QWILFISH, Species.ARROKUDA, Species.PALDEA_WOOPER, Species.SKRELP ], - [TrainerPoolTier.SUPER_RARE]: [ Species.DONDOZO, Species.BASCULEGION ] + [TrainerPoolTier.COMMON]: [ Species.QWILFISH, Species.REMORAID, Species.ZIGZAGOON, Species.LOTAD, Species.CARVANHA, Species.WAILMER, Species.BARBOACH, Species.CORPHISH, Species.SPHEAL ], + [TrainerPoolTier.UNCOMMON]: [ Species.TENTACOOL, Species.HORSEA, Species.CHINCHOU, Species.WOOPER, Species.WINGULL, Species.AZURILL, Species.CLAMPERL, Species.CLOBBOPUS ], + [TrainerPoolTier.RARE]: [ Species.MANTYKE, Species.SKRELP, Species.DHELMISE, Species.ARROKUDA, Species.HISUI_QWILFISH, Species.PALDEA_WOOPER ], + [TrainerPoolTier.SUPER_RARE]: [ Species.BASCULEGION, Species.DONDOZO ] }), - [TrainerType.MATT]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("aqua_admin", "aqua", [ Species.SHARPEDO ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.SHELLY]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("aqua_admin_female", "aqua", [ Species.SHARPEDO ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.GALACTIC_GRUNT]: new TrainerConfig(++t).setHasGenders("Galactic Grunt Female").setHasDouble("Galactic Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + [TrainerType.MATT]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("aqua_admin", "aqua", [ Species.SHARPEDO ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), + [TrainerType.SHELLY]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("aqua_admin_female", "aqua", [ Species.SHARPEDO ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), + [TrainerType.GALACTIC_GRUNT]: new TrainerConfig(++t).setHasGenders("Galactic Grunt Female").setHasDouble("Galactic Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [ Species.GLAMEOW, Species.STUNKY, Species.CROAGUNK, Species.SHINX, Species.WURMPLE, Species.BRONZOR, Species.DRIFLOON, Species.BURMY, Species.CARNIVINE ], - [TrainerPoolTier.UNCOMMON]: [ Species.LICKITUNG, Species.RHYHORN, Species.TANGELA, Species.ZUBAT, Species.YANMA, Species.SKORUPI, Species.GLIGAR, Species.SWINUB ], - [TrainerPoolTier.RARE]: [ Species.HISUI_GROWLITHE, Species.HISUI_QWILFISH, Species.SNEASEL, Species.ELEKID, Species.MAGBY, Species.DUSKULL ], - [TrainerPoolTier.SUPER_RARE]: [ Species.ROTOM, Species.SPIRITOMB, Species.HISUI_SNEASEL ] + [TrainerPoolTier.COMMON]: [ Species.WURMPLE, Species.SHINX, Species.BURMY, Species.DRIFLOON, Species.GLAMEOW, Species.STUNKY, Species.BRONZOR, Species.CROAGUNK, Species.CARNIVINE ], + [TrainerPoolTier.UNCOMMON]: [ Species.ZUBAT, Species.LICKITUNG, Species.RHYHORN, Species.TANGELA, Species.YANMA, Species.GLIGAR, Species.SWINUB, Species.SKORUPI ], + [TrainerPoolTier.RARE]: [ Species.SNEASEL, Species.ELEKID, Species.MAGBY, Species.DUSKULL, Species.HISUI_GROWLITHE, Species.HISUI_QWILFISH ], + [TrainerPoolTier.SUPER_RARE]: [ Species.SPIRITOMB, Species.ROTOM, Species.HISUI_SNEASEL ] }), - [TrainerType.JUPITER]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander_female", "galactic", [ Species.SKUNTANK ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.MARS]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander_female", "galactic", [ Species.PURUGLY ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.SATURN]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander", "galactic", [ Species.TOXICROAK ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.PLASMA_GRUNT]: new TrainerConfig(++t).setHasGenders("Plasma Grunt Female").setHasDouble("Plasma Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + [TrainerType.JUPITER]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander_female", "galactic", [ Species.SKUNTANK ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), + [TrainerType.MARS]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander_female", "galactic", [ Species.PURUGLY ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), + [TrainerType.SATURN]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander", "galactic", [ Species.TOXICROAK ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), + [TrainerType.PLASMA_GRUNT]: new TrainerConfig(++t).setHasGenders("Plasma Grunt Female").setHasDouble("Plasma Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [ Species.PATRAT, Species.LILLIPUP, Species.PURRLOIN, Species.SCRAFTY, Species.WOOBAT, Species.VANILLITE, Species.SANDILE, Species.TRUBBISH, Species.TYMPOLE ], - [TrainerPoolTier.UNCOMMON]: [ Species.FRILLISH, Species.VENIPEDE, Species.GOLETT, Species.TIMBURR, Species.DARUMAKA, Species.FOONGUS, Species.JOLTIK, Species.CUBCHOO, Species.KLINK ], - [TrainerPoolTier.RARE]: [ Species.PAWNIARD, Species.RUFFLET, Species.VULLABY, Species.ZORUA, Species.DRILBUR, Species.MIENFOO, Species.DURANT, Species.BOUFFALANT ], - [TrainerPoolTier.SUPER_RARE]: [ Species.DRUDDIGON, Species.HISUI_ZORUA, Species.AXEW, Species.DEINO ] + [TrainerPoolTier.COMMON]: [ Species.PATRAT, Species.LILLIPUP, Species.PURRLOIN, Species.WOOBAT, Species.TYMPOLE, Species.SANDILE, Species.SCRAGGY, Species.TRUBBISH, Species.VANILLITE ], + [TrainerPoolTier.UNCOMMON]: [ Species.TIMBURR, Species.VENIPEDE, Species.DARUMAKA, Species.FOONGUS, Species.FRILLISH, Species.JOLTIK, Species.KLINK, Species.CUBCHOO, Species.GOLETT ], + [TrainerPoolTier.RARE]: [ Species.DRILBUR, Species.ZORUA, Species.MIENFOO, Species.PAWNIARD, Species.BOUFFALANT, Species.RUFFLET, Species.VULLABY, Species.DURANT ], + [TrainerPoolTier.SUPER_RARE]: [ Species.AXEW, Species.DRUDDIGON, Species.DEINO, Species.HISUI_ZORUA ] }), - [TrainerType.ZINZOLIN]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("plasma_sage", "plasma", [ Species.CRYOGONAL ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.ROOD]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("plasma_sage", "plasma", [ Species.SWOOBAT ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.FLARE_GRUNT]: new TrainerConfig(++t).setHasGenders("Flare Grunt Female").setHasDouble("Flare Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + [TrainerType.ZINZOLIN]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("plasma_sage", "plasma", [ Species.CRYOGONAL ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), + [TrainerType.COLRESS]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("plasma_boss", "plasma_2", [ Species.KLINKLANG ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_colress").setMixedBattleBgm("battle_colress").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), + [TrainerType.FLARE_GRUNT]: new TrainerConfig(++t).setHasGenders("Flare Grunt Female").setHasDouble("Flare Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [ Species.FLETCHLING, Species.LITLEO, Species.PONYTA, Species.INKAY, Species.HOUNDOUR, Species.SKORUPI, Species.SCRAFTY, Species.CROAGUNK, Species.SCATTERBUG, Species.ESPURR ], - [TrainerPoolTier.UNCOMMON]: [ Species.HELIOPTILE, Species.ELECTRIKE, Species.SKRELP, Species.PANCHAM, Species.PURRLOIN, Species.POOCHYENA, Species.BINACLE, Species.CLAUNCHER, Species.PUMPKABOO, Species.PHANTUMP, Species.FOONGUS ], - [TrainerPoolTier.RARE]: [ Species.LITWICK, Species.SNEASEL, Species.PAWNIARD, Species.SLIGGOO ], + [TrainerPoolTier.COMMON]: [ Species.PONYTA, Species.HOUNDOUR, Species.SKORUPI, Species.CROAGUNK, Species.SCRAGGY, Species.FLETCHLING, Species.SCATTERBUG, Species.LITLEO, Species.ESPURR, Species.INKAY ], + [TrainerPoolTier.UNCOMMON]: [ Species.POOCHYENA, Species.ELECTRIKE, Species.PURRLOIN, Species.FOONGUS, Species.PANCHAM, Species.BINACLE, Species.SKRELP, Species.CLAUNCHER, Species.HELIOPTILE, Species.PHANTUMP, Species.PUMPKABOO ], + [TrainerPoolTier.RARE]: [ Species.SNEASEL, Species.LITWICK, Species.PAWNIARD, Species.SLIGGOO ], [TrainerPoolTier.SUPER_RARE]: [ Species.NOIBAT, Species.HISUI_SLIGGOO, Species.HISUI_AVALUGG ] }), - [TrainerType.BRYONY]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("flare_admin_female", "flare", [ Species.LIEPARD ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.XEROSIC]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("flare_admin", "flare", [ Species.MALAMAR ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.AETHER_GRUNT]: new TrainerConfig(++t).setHasGenders("Aether Grunt Female").setHasDouble("Aether Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aether_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + [TrainerType.BRYONY]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("flare_admin_female", "flare", [ Species.LIEPARD ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), + [TrainerType.XEROSIC]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("flare_admin", "flare", [ Species.MALAMAR ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), + [TrainerType.AETHER_GRUNT]: new TrainerConfig(++t).setHasGenders("Aether Grunt Female").setHasDouble("Aether Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aether_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [ Species.PIKIPEK, Species.ROCKRUFF, Species.ALOLA_DIGLETT, Species.ALOLA_EXEGGUTOR, Species.YUNGOOS, Species.CORSOLA, Species.ALOLA_GEODUDE, Species.ALOLA_RAICHU, Species.BOUNSWEET, Species.LILLIPUP, Species.KOMALA, Species.MORELULL, Species.COMFEY, Species.TOGEDEMARU ], - [TrainerPoolTier.UNCOMMON]: [ Species.POLIWAG, Species.STUFFUL, Species.ORANGURU, Species.PASSIMIAN, Species.BRUXISH, Species.MINIOR, Species.WISHIWASHI, Species.ALOLA_SANDSHREW, Species.ALOLA_VULPIX, Species.CRABRAWLER, Species.CUTIEFLY, Species.ORICORIO, Species.MUDBRAY, Species.PYUKUMUKU, Species.ALOLA_MAROWAK ], - [TrainerPoolTier.RARE]: [ Species.GALAR_CORSOLA, Species.TURTONATOR, Species.MIMIKYU, Species.MAGNEMITE, Species.DRAMPA ], - [TrainerPoolTier.SUPER_RARE]: [ Species.JANGMO_O, Species.PORYGON ] + [TrainerPoolTier.COMMON]: [ Species.CORSOLA, Species.LILLIPUP, Species.PIKIPEK, Species.YUNGOOS, Species.ROCKRUFF, Species.MORELULL, Species.BOUNSWEET, Species.COMFEY, Species.KOMALA, Species.TOGEDEMARU, Species.ALOLA_RAICHU, Species.ALOLA_DIGLETT, Species.ALOLA_GEODUDE, Species.ALOLA_EXEGGUTOR ], + [TrainerPoolTier.UNCOMMON]: [ Species.POLIWAG, Species.CRABRAWLER, Species.ORICORIO, Species.CUTIEFLY, Species.WISHIWASHI, Species.MUDBRAY, Species.STUFFUL, Species.ORANGURU, Species.PASSIMIAN, Species.PYUKUMUKU, Species.MINIOR, Species.BRUXISH, Species.ALOLA_SANDSHREW, Species.ALOLA_VULPIX, Species.ALOLA_MAROWAK ], + [TrainerPoolTier.RARE]: [ Species.MAGNEMITE, Species.TURTONATOR, Species.MIMIKYU, Species.DRAMPA, Species.GALAR_CORSOLA ], + [TrainerPoolTier.SUPER_RARE]: [ Species.PORYGON, Species.JANGMO_O ] }), - [TrainerType.FABA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("aether_admin", "aether", [ Species.HYPNO ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aether_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.SKULL_GRUNT]: new TrainerConfig(++t).setHasGenders("Skull Grunt Female").setHasDouble("Skull Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_skull_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + [TrainerType.FABA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("aether_admin", "aether", [ Species.HYPNO ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aether_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), + [TrainerType.SKULL_GRUNT]: new TrainerConfig(++t).setHasGenders("Skull Grunt Female").setHasDouble("Skull Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_skull_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [ Species.SALANDIT, Species.ALOLA_RATTATA, Species.EKANS, Species.ALOLA_MEOWTH, Species.SCRAGGY, Species.KOFFING, Species.ALOLA_GRIMER, Species.MAREANIE, Species.SPINARAK, Species.TRUBBISH, Species.DROWZEE ], - [TrainerPoolTier.UNCOMMON]: [ Species.FOMANTIS, Species.SABLEYE, Species.SANDILE, Species.HOUNDOUR, Species.ALOLA_MAROWAK, Species.GASTLY, Species.PANCHAM, Species.ZUBAT, Species.VENIPEDE, Species.VULLABY ], - [TrainerPoolTier.RARE]: [ Species.SANDYGAST, Species.PAWNIARD, Species.MIMIKYU, Species.DHELMISE, Species.WISHIWASHI, Species.NYMBLE ], + [TrainerPoolTier.COMMON]: [ Species.EKANS, Species.DROWZEE, Species.KOFFING, Species.SPINARAK, Species.SCRAGGY, Species.TRUBBISH, Species.MAREANIE, Species.SALANDIT, Species.ALOLA_RATTATA, Species.ALOLA_MEOWTH, Species.ALOLA_GRIMER ], + [TrainerPoolTier.UNCOMMON]: [ Species.ZUBAT, Species.GASTLY, Species.HOUNDOUR, Species.SABLEYE, Species.VENIPEDE, Species.SANDILE, Species.VULLABY, Species.PANCHAM, Species.FOMANTIS, Species.ALOLA_MAROWAK ], + [TrainerPoolTier.RARE]: [ Species.PAWNIARD, Species.WISHIWASHI, Species.SANDYGAST, Species.MIMIKYU, Species.DHELMISE, Species.NYMBLE ], [TrainerPoolTier.SUPER_RARE]: [ Species.GRUBBIN, Species.DEWPIDER ] }), - [TrainerType.PLUMERIA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("skull_admin", "skull", [ Species.SALAZZLE ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_skull_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.MACRO_GRUNT]: new TrainerConfig(++t).setHasGenders("Macro Grunt Female").setHasDouble("Macro Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_macro_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + [TrainerType.PLUMERIA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("skull_admin", "skull", [ Species.SALAZZLE ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_skull_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), + [TrainerType.MACRO_GRUNT]: new TrainerConfig(++t).setHasGenders("Macro Grunt Female").setHasDouble("Macro Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_macro_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [ Species.CUFANT, Species.GALAR_MEOWTH, Species.KLINK, Species.ROOKIDEE, Species.CRAMORANT, Species.GALAR_ZIGZAGOON, Species.SKWOVET, Species.STEELIX, Species.MAWILE, Species.FERROSEED ], - [TrainerPoolTier.UNCOMMON]: [ Species.DRILBUR, Species.MAGNEMITE, Species.HATENNA, Species.ARROKUDA, Species.APPLIN, Species.GALAR_PONYTA, Species.GALAR_YAMASK, Species.SINISTEA, Species.RIOLU ], - [TrainerPoolTier.RARE]: [ Species.FALINKS, Species.BELDUM, Species.GALAR_FARFETCHD, Species.GALAR_MR_MIME, Species.HONEDGE, Species.SCIZOR, Species.GALAR_DARUMAKA ], + [TrainerPoolTier.COMMON]: [ Species.STEELIX, Species.MAWILE, Species.FERROSEED, Species.KLINK, Species.SKWOVET, Species.ROOKIDEE, Species.CRAMORANT, Species.CUFANT, Species.GALAR_MEOWTH, Species.GALAR_ZIGZAGOON ], + [TrainerPoolTier.UNCOMMON]: [ Species.MAGNEMITE, Species.RIOLU, Species.DRILBUR, Species.APPLIN, Species.ARROKUDA, Species.SINISTEA, Species.HATENNA, Species.GALAR_PONYTA, Species.GALAR_YAMASK ], + [TrainerPoolTier.RARE]: [ Species.SCIZOR, Species.BELDUM, Species.HONEDGE, Species.FALINKS, Species.GALAR_FARFETCHD, Species.GALAR_MR_MIME, Species.GALAR_DARUMAKA ], [TrainerPoolTier.SUPER_RARE]: [ Species.DURALUDON, Species.DREEPY ] }), - [TrainerType.OLEANA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("macro_admin", "macro", [ Species.GARBODOR ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_oleana").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.STAR_GRUNT]: new TrainerConfig(++t).setHasGenders("Star Grunt Female").setHasDouble("Star Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_star_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + [TrainerType.OLEANA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("macro_admin", "macro", [ Species.GARBODOR ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_oleana").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), + [TrainerType.STAR_GRUNT]: new TrainerConfig(++t).setHasGenders("Star Grunt Female").setHasDouble("Star Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_star_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ Species.DUNSPARCE, Species.HOUNDOUR, Species.AZURILL, Species.GULPIN, Species.FOONGUS, Species.FLETCHLING, Species.LITLEO, Species.FLABEBE, Species.CRABRAWLER, Species.NYMBLE, Species.PAWMI, Species.FIDOUGH, Species.SQUAWKABILLY, Species.MASCHIFF, Species.SHROODLE, Species.KLAWF, Species.WIGLETT, Species.PALDEA_WOOPER ], [TrainerPoolTier.UNCOMMON]: [ Species.KOFFING, Species.EEVEE, Species.GIRAFARIG, Species.RALTS, Species.TORKOAL, Species.SEVIPER, Species.SCRAGGY, Species.ZORUA, Species.MIMIKYU, Species.IMPIDIMP, Species.FALINKS, Species.CAPSAKID, Species.TINKATINK, Species.BOMBIRDIER, Species.CYCLIZAR, Species.FLAMIGO, Species.PALDEA_TAUROS ], [TrainerPoolTier.RARE]: [ Species.MANKEY, Species.PAWNIARD, Species.CHARCADET, Species.FLITTLE, Species.VAROOM, Species.ORTHWORM ], [TrainerPoolTier.SUPER_RARE]: [ Species.DONDOZO, Species.GIMMIGHOUL ] }), - [TrainerType.GIACOMO]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("star_admin", "star_1", [ Species.KINGAMBIT ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_star_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + [TrainerType.GIACOMO]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("star_admin", "star_1", [ Species.KINGAMBIT ], Type.DARK).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_star_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.REVAVROOM ], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Segin Starmobile p.moveset = [ new PokemonMove(Moves.WICKED_TORQUE), new PokemonMove(Moves.SPIN_OUT), new PokemonMove(Moves.SHIFT_GEAR), new PokemonMove(Moves.HIGH_HORSEPOWER) ]; })), - [TrainerType.MELA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("star_admin", "star_2", [ Species.ARMAROUGE ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_star_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + [TrainerType.MELA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("star_admin", "star_2", [ Species.ARMAROUGE ], Type.FIRE).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_star_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.REVAVROOM ], TrainerSlot.TRAINER, true, p => { p.formIndex = 2; // Schedar Starmobile p.moveset = [ new PokemonMove(Moves.BLAZING_TORQUE), new PokemonMove(Moves.SPIN_OUT), new PokemonMove(Moves.SHIFT_GEAR), new PokemonMove(Moves.HIGH_HORSEPOWER) ]; })), - [TrainerType.ATTICUS]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("star_admin", "star_3", [ Species.REVAVROOM ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_star_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + [TrainerType.ATTICUS]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("star_admin", "star_3", [ Species.REVAVROOM ], Type.POISON).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_star_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.REVAVROOM ], TrainerSlot.TRAINER, true, p => { p.formIndex = 3; // Navi Starmobile p.moveset = [ new PokemonMove(Moves.NOXIOUS_TORQUE), new PokemonMove(Moves.SPIN_OUT), new PokemonMove(Moves.SHIFT_GEAR), new PokemonMove(Moves.HIGH_HORSEPOWER) ]; })), - [TrainerType.ORTEGA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("star_admin", "star_4", [ Species.DACHSBUN ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_star_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + [TrainerType.ORTEGA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("star_admin", "star_4", [ Species.DACHSBUN ], Type.FAIRY).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_star_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.REVAVROOM ], TrainerSlot.TRAINER, true, p => { p.formIndex = 4; // Ruchbah Starmobile p.moveset = [ new PokemonMove(Moves.MAGICAL_TORQUE), new PokemonMove(Moves.SPIN_OUT), new PokemonMove(Moves.SHIFT_GEAR), new PokemonMove(Moves.HIGH_HORSEPOWER) ]; })), - [TrainerType.ERI]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("star_admin", "star_5", [ Species.ANNIHILAPE ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_star_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + [TrainerType.ERI]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("star_admin", "star_5", [ Species.ANNIHILAPE ], Type.FIGHTING).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_star_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.REVAVROOM ], TrainerSlot.TRAINER, true, p => { p.formIndex = 5; // Caph Starmobile p.moveset = [ new PokemonMove(Moves.COMBAT_TORQUE), new PokemonMove(Moves.SPIN_OUT), new PokemonMove(Moves.SHIFT_GEAR), new PokemonMove(Moves.HIGH_HORSEPOWER) ]; @@ -1693,14 +1754,14 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.PIERS]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["PIERS"], true, Type.DARK).setHasDouble("piers_marnie_double").setDoubleTrainerType(TrainerType.MARNIE).setDoubleTitle("gym_leader_double").setMixedBattleBgm("battle_galar_gym"), [TrainerType.MARNIE]: new TrainerConfig(++t).setName("Marnie").initForGymLeader(signatureSpecies["MARNIE"], false, Type.DARK).setHasDouble("marnie_piers_double").setDoubleTrainerType(TrainerType.PIERS).setDoubleTitle("gym_leader_double").setMixedBattleBgm("battle_galar_gym"), [TrainerType.RAIHAN]: new TrainerConfig(++t).setName("Raihan").initForGymLeader(signatureSpecies["RAIHAN"], true, Type.DRAGON).setMixedBattleBgm("battle_galar_gym"), - [TrainerType.KATY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["KATY"], false, Type.BUG).setMixedBattleBgm("battle_paldea_gym"), - [TrainerType.BRASSIUS]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BRASSIUS"], true, Type.GRASS).setMixedBattleBgm("battle_paldea_gym"), - [TrainerType.IONO]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["IONO"], false, Type.ELECTRIC).setMixedBattleBgm("battle_paldea_gym"), - [TrainerType.KOFU]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["KOFU"], true, Type.WATER).setMixedBattleBgm("battle_paldea_gym"), - [TrainerType.LARRY]: new TrainerConfig(++t).setName("Larry").initForGymLeader(signatureSpecies["LARRY"], true, Type.NORMAL).setMixedBattleBgm("battle_paldea_gym"), - [TrainerType.RYME]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["RYME"], false, Type.GHOST).setMixedBattleBgm("battle_paldea_gym"), - [TrainerType.TULIP]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["TULIP"], false, Type.PSYCHIC).setMixedBattleBgm("battle_paldea_gym"), - [TrainerType.GRUSHA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["GRUSHA"], true, Type.ICE).setMixedBattleBgm("battle_paldea_gym"), + [TrainerType.KATY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["KATY"], false, Type.BUG, true, -1).setMixedBattleBgm("battle_paldea_gym"), + [TrainerType.BRASSIUS]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BRASSIUS"], true, Type.GRASS, true, -1).setMixedBattleBgm("battle_paldea_gym"), + [TrainerType.IONO]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["IONO"], false, Type.ELECTRIC, true, -1).setMixedBattleBgm("battle_paldea_gym"), + [TrainerType.KOFU]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["KOFU"], true, Type.WATER, true, -1).setMixedBattleBgm("battle_paldea_gym"), + [TrainerType.LARRY]: new TrainerConfig(++t).setName("Larry").initForGymLeader(signatureSpecies["LARRY"], true, Type.NORMAL, true, -1).setMixedBattleBgm("battle_paldea_gym"), + [TrainerType.RYME]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["RYME"], false, Type.GHOST, true, -1).setMixedBattleBgm("battle_paldea_gym"), + [TrainerType.TULIP]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["TULIP"], false, Type.PSYCHIC, true, -1).setMixedBattleBgm("battle_paldea_gym"), + [TrainerType.GRUSHA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["GRUSHA"], true, Type.ICE, true, -1).setMixedBattleBgm("battle_paldea_gym"), [TrainerType.LORELEI]: new TrainerConfig((t = TrainerType.LORELEI)).initForEliteFour(signatureSpecies["LORELEI"], false, Type.ICE).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), [TrainerType.BRUNO]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["BRUNO"], true, Type.FIGHTING).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), @@ -1715,7 +1776,7 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.DRAKE]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["DRAKE"], true, Type.DRAGON).setMixedBattleBgm("battle_hoenn_elite"), [TrainerType.AARON]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["AARON"], true, Type.BUG).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), [TrainerType.BERTHA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["BERTHA"], false, Type.GROUND).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), - [TrainerType.FLINT]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["FLINT"], true, Type.FIRE).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), + [TrainerType.FLINT]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["FLINT"], true, Type.FIRE, 3).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), [TrainerType.LUCIAN]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["LUCIAN"], true, Type.PSYCHIC).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), [TrainerType.SHAUNTAL]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["SHAUNTAL"], false, Type.GHOST).setMixedBattleBgm("battle_unova_elite"), [TrainerType.MARSHAL]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["MARSHAL"], true, Type.FIGHTING).setMixedBattleBgm("battle_unova_elite"), @@ -1735,124 +1796,387 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.BEA_ELITE]: new TrainerConfig(++t).setName("Bea").initForEliteFour(signatureSpecies["BEA_ELITE"], false, Type.FIGHTING).setMixedBattleBgm("battle_galar_elite"), [TrainerType.ALLISTER_ELITE]: new TrainerConfig(++t).setName("Allister").initForEliteFour(signatureSpecies["ALLISTER_ELITE"], true, Type.GHOST).setMixedBattleBgm("battle_galar_elite"), [TrainerType.RAIHAN_ELITE]: new TrainerConfig(++t).setName("Raihan").initForEliteFour(signatureSpecies["RAIHAN_ELITE"], true, Type.DRAGON).setMixedBattleBgm("battle_galar_elite"), - [TrainerType.RIKA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["RIKA"], false, Type.GROUND).setMixedBattleBgm("battle_paldea_elite"), - [TrainerType.POPPY]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["POPPY"], false, Type.STEEL).setMixedBattleBgm("battle_paldea_elite"), - [TrainerType.LARRY_ELITE]: new TrainerConfig(++t).setName("Larry").initForEliteFour(signatureSpecies["LARRY_ELITE"], true, Type.NORMAL, Type.FLYING).setMixedBattleBgm("battle_paldea_elite"), - [TrainerType.HASSEL]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["HASSEL"], true, Type.DRAGON).setMixedBattleBgm("battle_paldea_elite"), - [TrainerType.CRISPIN]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["CRISPIN"], true, Type.FIRE).setMixedBattleBgm("battle_bb_elite"), - [TrainerType.AMARYS]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["AMARYS"], false, Type.STEEL).setMixedBattleBgm("battle_bb_elite"), - [TrainerType.LACEY]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["LACEY"], false, Type.FAIRY).setMixedBattleBgm("battle_bb_elite"), - [TrainerType.DRAYTON]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["DRAYTON"], true, Type.DRAGON).setMixedBattleBgm("battle_bb_elite"), + [TrainerType.RIKA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["RIKA"], false, Type.GROUND, 5).setMixedBattleBgm("battle_paldea_elite"), + [TrainerType.POPPY]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["POPPY"], false, Type.STEEL, 5).setMixedBattleBgm("battle_paldea_elite"), + [TrainerType.LARRY_ELITE]: new TrainerConfig(++t).setName("Larry").initForEliteFour(signatureSpecies["LARRY_ELITE"], true, Type.FLYING, 5).setMixedBattleBgm("battle_paldea_elite"), + [TrainerType.HASSEL]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["HASSEL"], true, Type.DRAGON, 5).setMixedBattleBgm("battle_paldea_elite"), + [TrainerType.CRISPIN]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["CRISPIN"], true, Type.FIRE, 5).setMixedBattleBgm("battle_bb_elite"), + [TrainerType.AMARYS]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["AMARYS"], false, Type.STEEL, 5).setMixedBattleBgm("battle_bb_elite"), + [TrainerType.LACEY]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["LACEY"], false, Type.FAIRY, 5).setMixedBattleBgm("battle_bb_elite"), + [TrainerType.DRAYTON]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["DRAYTON"], true, Type.DRAGON, 5).setMixedBattleBgm("battle_bb_elite"), - [TrainerType.BLUE]: new TrainerConfig((t = TrainerType.BLUE)).initForChampion(signatureSpecies["BLUE"], true).setBattleBgm("battle_kanto_champion").setMixedBattleBgm("battle_kanto_champion").setHasDouble("blue_red_double").setDoubleTrainerType(TrainerType.RED).setDoubleTitle("champion_double") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.ALAKAZAM ], TrainerSlot.TRAINER, true, p => { + [TrainerType.BLUE]: new TrainerConfig((t = TrainerType.BLUE)).initForChampion(true).setBattleBgm("battle_kanto_champion").setMixedBattleBgm("battle_kanto_champion").setHasDouble("blue_red_double").setDoubleTrainerType(TrainerType.RED).setDoubleTitle("champion_double") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.ALAKAZAM ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.MACHAMP ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.HO_OH ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.PIDGEOT ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.RHYPERIOR, Species.ELECTIVIRE, Species.MAGMORTAR ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.ARCANINE, Species.EXEGGUTOR, Species.GYARADOS ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.setBoss(true, 2); + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.PIDGEOT ], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Mega Pidgeot p.generateAndPopulateMoveset(); p.generateName(); - })), - [TrainerType.RED]: new TrainerConfig(++t).initForChampion(signatureSpecies["RED"], true).setBattleBgm("battle_johto_champion").setMixedBattleBgm("battle_johto_champion").setHasDouble("red_blue_double").setDoubleTrainerType(TrainerType.BLUE).setDoubleTitle("champion_double") + p.gender = Gender.MALE; + })) + .setInstantTera(3), // Tera Ground or Rock Rhyperior / Electric Electivire / Fire Magmortar + [TrainerType.RED]: new TrainerConfig(++t).initForChampion(true).setBattleBgm("battle_johto_champion").setMixedBattleBgm("battle_johto_champion").setHasDouble("red_blue_double").setDoubleTrainerType(TrainerType.BLUE).setDoubleTitle("champion_double") .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.PIKACHU ], TrainerSlot.TRAINER, true, p => { p.formIndex = 8; // G-Max Pikachu p.generateAndPopulateMoveset(); p.generateName(); + p.gender = Gender.MALE; })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.ESPEON, Species.UMBREON, Species.SYLVEON ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.LUGIA ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.SNORLAX ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.setBoss(true, 2); + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE ], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Mega Venusaur, Mega Charizard X, or Mega Blastoise p.generateAndPopulateMoveset(); p.generateName(); - })), - [TrainerType.LANCE_CHAMPION]: new TrainerConfig(++t).setName("Lance").initForChampion(signatureSpecies["LANCE_CHAMPION"], true).setBattleBgm("battle_johto_champion").setMixedBattleBgm("battle_johto_champion") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.AERODACTYL ], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); + p.gender = Gender.MALE; })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.LATIAS, Species.LATIOS ], TrainerSlot.TRAINER, true, p => { - p.formIndex = 1; // Mega Latias or Mega Latios + .setInstantTera(3), // Tera Grass Meganium / Fire Typhlosion / Water Feraligatr + [TrainerType.LANCE_CHAMPION]: new TrainerConfig(++t).setName("Lance").initForChampion(true).setBattleBgm("battle_johto_champion").setMixedBattleBgm("battle_johto_champion") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.GYARADOS, Species.KINGDRA ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.AERODACTYL ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SALAMENCE ], TrainerSlot.TRAINER, true, p => { + p.formIndex = 1; // Mega Salamence p.generateAndPopulateMoveset(); p.generateName(); - })), - [TrainerType.STEVEN]: new TrainerConfig(++t).initForChampion(signatureSpecies["STEVEN"], true).setBattleBgm("battle_hoenn_champion_g5").setMixedBattleBgm("battle_hoenn_champion_g6").setHasDouble("steven_wallace_double").setDoubleTrainerType(TrainerType.WALLACE).setDoubleTitle("champion_double") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.SKARMORY ], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.METAGROSS ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.CHARIZARD ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.TYRANITAR, Species.GARCHOMP, Species.KOMMO_O ], TrainerSlot.TRAINER, true, p => { + p.teraType = Type.DRAGON; + p.abilityIndex = p.species.speciesId === Species.KOMMO_O ? 1 : 2; // Soundproof Kommo-o, Unnerve Tyranitar, Rough Skin Garchomp + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.DRAGONITE ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.gender = Gender.MALE; + p.setBoss(true, 2); + })) + .setInstantTera(4), // Tera Dragon Tyranitar / Garchomp / Kommo-o + [TrainerType.STEVEN]: new TrainerConfig(++t).initForChampion(true).setBattleBgm("battle_hoenn_champion_g5").setMixedBattleBgm("battle_hoenn_champion_g6").setHasDouble("steven_wallace_double").setDoubleTrainerType(TrainerType.WALLACE).setDoubleTitle("champion_double") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.SKARMORY ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.CRADILY, Species.ARMALDO ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.AGGRON ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.setBoss(true, 2); + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.GOLURK, Species.RUNERIGUS ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.REGIROCK, Species.REGICE, Species.REGISTEEL ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.METAGROSS ], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Mega Metagross p.generateAndPopulateMoveset(); p.generateName(); - })), - [TrainerType.WALLACE]: new TrainerConfig(++t).initForChampion(signatureSpecies["WALLACE"], true).setBattleBgm("battle_hoenn_champion_g5").setMixedBattleBgm("battle_hoenn_champion_g6").setHasDouble("wallace_steven_double").setDoubleTrainerType(TrainerType.STEVEN).setDoubleTitle("champion_double") + })) + .setInstantTera(4), // Tera Rock Regirock / Ice Regice / Steel Registeel + [TrainerType.WALLACE]: new TrainerConfig(++t).initForChampion(true).setBattleBgm("battle_hoenn_champion_g5").setMixedBattleBgm("battle_hoenn_champion_g6").setHasDouble("wallace_steven_double").setDoubleTrainerType(TrainerType.STEVEN).setDoubleTitle("champion_double") .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.PELIPPER ], TrainerSlot.TRAINER, true, p => { p.abilityIndex = 1; // Drizzle p.generateAndPopulateMoveset(); })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.SWAMPERT ], TrainerSlot.TRAINER, true, p => { - p.formIndex = 1; // Mega Swampert + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.LUDICOLO ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.LATIAS, Species.LATIOS ], TrainerSlot.TRAINER, true, p => { + p.formIndex = 1; // Mega Latios or Mega Latias p.generateAndPopulateMoveset(); p.generateName(); - })), - [TrainerType.CYNTHIA]: new TrainerConfig(++t).initForChampion(signatureSpecies["CYNTHIA"], false).setBattleBgm("battle_sinnoh_champion").setMixedBattleBgm("battle_sinnoh_champion") + p.pokeball = PokeballType.MASTER_BALL; + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.SWAMPERT, Species.GASTRODON, Species.SEISMITOAD ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.REGIELEKI, Species.REGIDRAGO ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.MILOTIC ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.gender = Gender.FEMALE; + p.setBoss(true, 2); + })) + .setInstantTera(4), // Tera Electric Regieleki / Dragon Regidrago + [TrainerType.CYNTHIA]: new TrainerConfig(++t).initForChampion(false).setBattleBgm("battle_sinnoh_champion").setMixedBattleBgm("battle_sinnoh_champion") .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.SPIRITOMB ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.GARCHOMP ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.LUCARIO ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.GIRATINA ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.MILOTIC, Species.ROSERADE, Species.HISUI_ARCANINE ], TrainerSlot.TRAINER, true, p => { + p.teraType = p.species.type1; + })) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.TOGEKISS ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.setBoss(true, 2); + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.GARCHOMP ], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Mega Garchomp p.generateAndPopulateMoveset(); p.generateName(); - })), - [TrainerType.ALDER]: new TrainerConfig(++t).initForChampion(signatureSpecies["ALDER"], true).setHasDouble("alder_iris_double").setDoubleTrainerType(TrainerType.IRIS).setDoubleTitle("champion_double").setBattleBgm("battle_champion_alder").setMixedBattleBgm("battle_champion_alder") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.BOUFFALANT, Species.BRAVIARY ], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - })), - [TrainerType.IRIS]: new TrainerConfig(++t).initForChampion(signatureSpecies["IRIS"], false).setBattleBgm("battle_champion_iris").setMixedBattleBgm("battle_champion_iris").setHasDouble("iris_alder_double").setDoubleTrainerType(TrainerType.ALDER).setDoubleTitle("champion_double") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.DRUDDIGON ], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); + p.gender = Gender.FEMALE; })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.LAPRAS ], TrainerSlot.TRAINER, true, p => { + .setInstantTera(3), // Tera Water Milotic / Grass Roserade / Fire Hisuian Arcanine + [TrainerType.ALDER]: new TrainerConfig(++t).initForChampion(true).setHasDouble("alder_iris_double").setDoubleTrainerType(TrainerType.IRIS).setDoubleTitle("champion_double").setBattleBgm("battle_champion_alder").setMixedBattleBgm("battle_champion_alder") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.BOUFFALANT, Species.BRAVIARY ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.HISUI_LILLIGANT, Species.HISUI_ZOROARK, Species.BASCULEGION ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ROGUE_BALL; + })) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.ZEKROM ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.KELDEO ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.CHANDELURE, Species.KROOKODILE, Species.REUNICLUS, Species.CONKELDURR ], TrainerSlot.TRAINER, true, p => { + p.teraType = p.species.speciesId === Species.KROOKODILE ? Type.DARK : p.species.type1; + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.VOLCARONA ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.gender = Gender.MALE; + p.setBoss(true, 2); + })) + .setInstantTera(4), // Tera Ghost Chandelure / Dark Krookodile / Psychic Reuniclus / Fighting Conkeldurr + [TrainerType.IRIS]: new TrainerConfig(++t).initForChampion(false).setBattleBgm("battle_champion_iris").setMixedBattleBgm("battle_champion_iris").setHasDouble("iris_alder_double").setDoubleTrainerType(TrainerType.ALDER).setDoubleTitle("champion_double") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.DRUDDIGON ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.ARCHEOPS ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.RESHIRAM ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.SALAMENCE, Species.HYDREIGON, Species.ARCHALUDON ], TrainerSlot.TRAINER, true, p => { + p.teraType = Type.DRAGON; + })) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.LAPRAS ], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // G-Max Lapras p.generateAndPopulateMoveset(); p.generateName(); - })), - [TrainerType.DIANTHA]: new TrainerConfig(++t).initForChampion(signatureSpecies["DIANTHA"], false).setMixedBattleBgm("battle_kalos_champion") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.GOURGEIST ], TrainerSlot.TRAINER, true, p => { + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.HAXORUS ], TrainerSlot.TRAINER, true, p => { + p.abilityIndex = 1; // Mold Breaker + p.generateAndPopulateMoveset(); + p.gender = Gender.FEMALE; + p.setBoss(true, 2); + })) + .setInstantTera(3), // Tera Dragon Salamence / Hydreigon / Archaludon + [TrainerType.DIANTHA]: new TrainerConfig(++t).initForChampion(false).setMixedBattleBgm("battle_kalos_champion") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.HAWLUCHA ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.GARDEVOIR ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.TREVENANT, Species.GOURGEIST ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.XERNEAS ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.TYRANTRUM, Species.AURORUS ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.abilityIndex = 2; // Rock Head Tyrantrum, Snow Warning Aurorus + p.teraType = p.species.type2!; + })) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.GOODRA ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.setBoss(true, 2); + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.GARDEVOIR ], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Mega Gardevoir p.generateAndPopulateMoveset(); p.generateName(); - })), - [TrainerType.HAU]: new TrainerConfig(++t).initForChampion(signatureSpecies["HAU"], true).setMixedBattleBgm("battle_alola_champion") + p.gender = Gender.FEMALE; + })) + .setInstantTera(3), // Tera Dragon Tyrantrum / Ice Aurorus + [TrainerType.KUKUI]: new TrainerConfig(++t).initForChampion(true).setMixedBattleBgm("battle_champion_kukui") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.LYCANROC ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.formIndex = 2; // Dusk Lycanroc + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.MAGNEZONE, Species.ALOLA_NINETALES ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.TORNADUS, Species.THUNDURUS, Species.LANDORUS ], TrainerSlot.TRAINER, true, p => { + p.formIndex = 1; // Therian Formes + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.TAPU_KOKO, Species.TAPU_FINI ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.setBoss(true, 2); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.SNORLAX ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.formIndex = 1; // G-Max Snorlax + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.INCINEROAR, Species.HISUI_DECIDUEYE ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.gender = Gender.MALE; + p.teraType = p.species.type2!; + })) + .setInstantTera(5), // Tera Dark Incineroar / Fighting Hisuian Decidueye + [TrainerType.HAU]: new TrainerConfig(++t).initForChampion(true).setMixedBattleBgm("battle_alola_champion") .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.ALOLA_RAICHU ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); - })), - [TrainerType.LEON]: new TrainerConfig(++t).initForChampion(signatureSpecies["LEON"], true).setMixedBattleBgm("battle_galar_champion") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.RILLABOOM, Species.CINDERACE, Species.INTELEON ], TrainerSlot.TRAINER, true, p => { + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.NOIVERN ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SOLGALEO ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.TAPU_LELE, Species.TAPU_BULU ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.teraType = p.species.type1; + })) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.ZYGARDE ], TrainerSlot.TRAINER, true, p => { + p.formIndex = 1; // Zygarde 10% forme, Aura Break + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ROGUE_BALL; + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.DECIDUEYE, Species.PRIMARINA ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.setBoss(true, 2); + p.gender = p.species.speciesId === Species.PRIMARINA ? Gender.FEMALE : Gender.MALE; + })) + .setInstantTera(3), // Tera Psychic Tapu Lele / Grass Tapu Bulu + [TrainerType.LEON]: new TrainerConfig(++t).initForChampion(true).setMixedBattleBgm("battle_galar_champion") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.AEGISLASH ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.CHARIZARD ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.RHYPERIOR, Species.SEISMITOAD, Species.MR_RIME ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.ZACIAN ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.DRAGAPULT ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.RILLABOOM, Species.CINDERACE, Species.INTELEON ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.setBoss(true, 2); + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.CHARIZARD ], TrainerSlot.TRAINER, true, p => { p.formIndex = 3; // G-Max Charizard p.generateAndPopulateMoveset(); p.generateName(); - })), - [TrainerType.GEETA]: new TrainerConfig(++t).initForChampion(signatureSpecies["GEETA"], false).setMixedBattleBgm("battle_champion_geeta") + p.gender = Gender.MALE; + })) + .setInstantTera(3), // Tera Dragapult to Ghost or Dragon + [TrainerType.MUSTARD]: new TrainerConfig(++t).initForChampion(true).setMixedBattleBgm("battle_mustard") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.CORVIKNIGHT ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.KOMMO_O ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.GALAR_SLOWBRO, Species.GALAR_SLOWKING ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.teraType = Type.PSYCHIC; + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.GALAR_DARMANITAN ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.BLASTOISE, Species.VENUSAUR ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.setBoss(true, 2); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.URSHIFU ], TrainerSlot.TRAINER, true, p => { + p.formIndex = Utils.randSeedInt(2, 2); // Random G-Max Urshifu + p.generateAndPopulateMoveset(); + p.generateName(); + p.gender = Gender.MALE; + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setInstantTera(2), // Tera Psychic Galar-Slowbro / Galar-Slowking + [TrainerType.GEETA]: new TrainerConfig(++t).initForChampion(false).setMixedBattleBgm("battle_champion_geeta") .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.GLIMMORA ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); - })), - [TrainerType.NEMONA]: new TrainerConfig(++t).initForChampion(signatureSpecies["NEMONA"], false).setMixedBattleBgm("battle_champion_nemona") + p.gender = Gender.MALE; + p.setBoss(true, 2); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.ESPATHRA, Species.VELUZA ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.MIRAIDON ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.BAXCALIBUR ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA ])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.KINGAMBIT ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.abilityIndex = 1; // Supreme Overlord + p.teraType = Type.FLYING; + })) + .setInstantTera(5), // Tera Flying Kingambit + [TrainerType.NEMONA]: new TrainerConfig(++t).initForChampion(false).setMixedBattleBgm("battle_champion_nemona") .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.LYCANROC ], TrainerSlot.TRAINER, true, p => { p.formIndex = 0; // Midday form p.generateAndPopulateMoveset(); - })), - [TrainerType.KIERAN]: new TrainerConfig(++t).initForChampion(signatureSpecies["KIERAN"], true).setMixedBattleBgm("battle_champion_kieran") + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.PAWMOT ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.KORAIDON ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.GHOLDENGO ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.ARMAROUGE, Species.CERULEDGE ], TrainerSlot.TRAINER, true, p => { + p.teraType = p.species.type2!; + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.gender = Gender.MALE; + p.setBoss(true, 2); + })) + .setInstantTera(4), // Tera Psychic Armarouge / Ghost Ceruledge + [TrainerType.KIERAN]: new TrainerConfig(++t).initForChampion(true).setMixedBattleBgm("battle_champion_kieran") .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.POLIWRATH, Species.POLITOED ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); - })), + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.INCINEROAR, Species.GRIMMSNARL ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.abilityIndex = p.species.speciesId === Species.INCINEROAR ? 2 : 0; // Intimidate Incineroar, Prankster Grimmsnarl + })) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.TERAPAGOS ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.URSALUNA, Species.BLOODMOON_URSALUNA ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.OGERPON ], TrainerSlot.TRAINER, true, p => { + p.formIndex = Utils.randSeedInt(4); // Random Ogerpon Tera Mask + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + if (!p.moveset.some(move => !Utils.isNullOrUndefined(move) && move.moveId === Moves.IVY_CUDGEL)) { // Check if Ivy Cudgel is in the moveset, if not, replace the first move with Ivy Cudgel. + p.moveset[0] = new PokemonMove(Moves.IVY_CUDGEL); + } + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.HYDRAPPLE ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.gender = Gender.MALE; + p.setBoss(true, 2); + })) + .setInstantTera(4), // Tera Ogerpon [TrainerType.RIVAL]: new TrainerConfig((t = TrainerType.RIVAL)).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setStaticParty().setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival").setMixedBattleBgm("battle_rival").setPartyTemplates(trainerPartyTemplates.RIVAL) .setModifierRewardFuncs(() => modifierTypes.SUPER_EXP_CHARM, () => modifierTypes.EXP_SHARE) - .setEventModifierRewardFuncs(() => modifierTypes.SHINY_CHARM, () => modifierTypes.ABILITY_CHARM) + .setEventModifierRewardFuncs(() => modifierTypes.SHINY_CHARM, () => modifierTypes.ABILITY_CHARM, () => modifierTypes.CATCHING_CHARM) .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE, Species.CHIKORITA, Species.CYNDAQUIL, Species.TOTODILE, Species.TREECKO, Species.TORCHIC, Species.MUDKIP, Species.TURTWIG, Species.CHIMCHAR, Species.PIPLUP, Species.SNIVY, Species.TEPIG, Species.OSHAWOTT, Species.CHESPIN, Species.FENNEKIN, Species.FROAKIE, Species.ROWLET, Species.LITTEN, Species.POPPLIO, Species.GROOKEY, Species.SCORBUNNY, Species.SOBBLE, Species.SPRIGATITO, Species.FUECOCO, Species.QUAXLY ], TrainerSlot.TRAINER, true, (p => p.abilityIndex = 0))) .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.PIDGEY, Species.HOOTHOOT, Species.TAILLOW, Species.STARLY, Species.PIDOVE, Species.FLETCHLING, Species.PIKIPEK, Species.ROOKIDEE, Species.WATTREL ], TrainerSlot.TRAINER, true)), @@ -1870,20 +2194,22 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)) .setSpeciesFilter(species => species.baseTotal >= 540), [TrainerType.RIVAL_4]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setBoss().setStaticParty().setMoneyMultiplier(1.75).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival_2").setMixedBattleBgm("battle_rival_2").setPartyTemplates(trainerPartyTemplates.RIVAL_4) + .setModifierRewardFuncs(() => modifierTypes.TERA_ORB) .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON, Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL ], TrainerSlot.TRAINER, true, - (p => p.abilityIndex = 0))) + (p => { + p.abilityIndex = 0; + p.teraType = p.species.type1; + }))) .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT, Species.TALONFLAME, Species.TOUCANNON, Species.CORVIKNIGHT, Species.KILOWATTREL ], TrainerSlot.TRAINER, true)) .setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)) .setSpeciesFilter(species => species.baseTotal >= 540) - .setGenModifiersFunc(party => { - const starter = party[0]; - return [ modifierTypes.TERA_SHARD().generateType([], [ starter.species.type1 ])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(starter) as PersistentModifier ]; // TODO: is the bang correct? - }), + .setInstantTera(0), // Tera starter to primary type [TrainerType.RIVAL_5]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setBoss().setStaticParty().setMoneyMultiplier(2.25).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival_3").setMixedBattleBgm("battle_rival_3").setPartyTemplates(trainerPartyTemplates.RIVAL_5) .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON, Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.abilityIndex = 0; + p.teraType = p.species.type1; })) .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT, Species.TALONFLAME, Species.TOUCANNON, Species.CORVIKNIGHT, Species.KILOWATTREL ], TrainerSlot.TRAINER, true)) .setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)) @@ -1894,15 +2220,13 @@ export const trainerConfigs: TrainerConfigs = { p.shiny = true; p.variant = 1; })) - .setGenModifiersFunc(party => { - const starter = party[0]; - return [ modifierTypes.TERA_SHARD().generateType([], [ starter.species.type1 ])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(starter) as PersistentModifier ]; //TODO: is the bang correct? - }), + .setInstantTera(0), // Tera starter to primary type [TrainerType.RIVAL_6]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setBoss().setStaticParty().setMoneyMultiplier(3).setEncounterBgm("final").setBattleBgm("battle_rival_3").setMixedBattleBgm("battle_rival_3").setPartyTemplates(trainerPartyTemplates.RIVAL_6) .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON, Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 3); p.abilityIndex = 0; + p.teraType = p.species.type1; p.generateAndPopulateMoveset(); })) .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT, Species.TALONFLAME, Species.TOUCANNON, Species.CORVIKNIGHT, Species.KILOWATTREL ], TrainerSlot.TRAINER, true, @@ -1921,20 +2245,21 @@ export const trainerConfigs: TrainerConfigs = { p.formIndex = 1; // Mega Rayquaza p.generateName(); })) - .setGenModifiersFunc(party => { - const starter = party[0]; - return [ modifierTypes.TERA_SHARD().generateType([], [ starter.species.type1 ])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(starter) as PersistentModifier ]; // TODO: is the bang correct? - }), + .setInstantTera(0), // Tera starter to primary type [TrainerType.ROCKET_BOSS_GIOVANNI_1]: new TrainerConfig(t = TrainerType.ROCKET_BOSS_GIOVANNI_1).setName("Giovanni").initForEvilTeamLeader("Rocket Boss", []).setMixedBattleBgm("battle_rocket_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.PERSIAN, Species.ALOLA_PERSIAN ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.PERSIAN ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.gender = Gender.MALE; })) .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.DUGTRIO, Species.ALOLA_DUGTRIO ])) .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.HONCHKROW ])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.NIDOKING, Species.NIDOQUEEN ])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.RHYPERIOR ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.NIDOQUEEN, Species.NIDOKING ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.RHYPERIOR ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.abilityIndex = 1; // Solid Rock + })) .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.KANGASKHAN ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); @@ -1943,39 +2268,53 @@ export const trainerConfigs: TrainerConfigs = { p.generateName(); })), [TrainerType.ROCKET_BOSS_GIOVANNI_2]: new TrainerConfig(++t).setName("Giovanni").initForEvilTeamLeader("Rocket Boss", [], true).setMixedBattleBgm("battle_rocket_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.TYRANITAR, Species.IRON_THORNS ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.TYRANITAR ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.HIPPOWDON ])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.EXCADRILL, Species.GARCHOMP ])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.KANGASKHAN ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.GASTRODON, Species.SEISMITOAD ], TrainerSlot.TRAINER, true, p => { + if (p.species.speciesId === Species.GASTRODON) { + p.abilityIndex = 0; // Storm Drain + } else if (p.species.speciesId === Species.SEISMITOAD) { + p.abilityIndex = 2; // Water Absorb + } + })) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.GARCHOMP, Species.EXCADRILL ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + if (p.species.speciesId === Species.GARCHOMP) { + p.abilityIndex = 2; // Rough Skin + } else if (p.species.speciesId === Species.EXCADRILL) { + p.abilityIndex = 0; // Sand Rush + } + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.RHYPERIOR ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.abilityIndex = 1; // Solid Rock + })) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.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([ Species.GASTRODON, Species.SEISMITOAD ], TrainerSlot.TRAINER, true, p => { - //Storm Drain Gastrodon, Water Absorb Seismitoad - if (p.species.speciesId === Species.GASTRODON) { - p.abilityIndex = 0; - } else if (p.species.speciesId === Species.SEISMITOAD) { - p.abilityIndex = 2; - } - })) .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.MEWTWO ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; })), [TrainerType.MAXIE]: new TrainerConfig(++t).setName("Maxie").initForEvilTeamLeader("Magma Boss", []).setMixedBattleBgm("battle_aqua_magma_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.MIGHTYENA ])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.CROBAT, Species.GLISCOR ])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.SOLROCK ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.TALONFLAME ])) .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.WEEZING, Species.GALAR_WEEZING ])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.MAGMORTAR, Species.TORKOAL ])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.FLYGON ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.TORKOAL ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.abilityIndex = 1; // Drought + })) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.DONPHAN ])) .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.CAMERUPT ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); @@ -1985,20 +2324,27 @@ export const trainerConfigs: TrainerConfigs = { p.gender = Gender.MALE; })), [TrainerType.MAXIE_2]: new TrainerConfig(++t).setName("Maxie").initForEvilTeamLeader("Magma Boss", [], true).setMixedBattleBgm("battle_aqua_magma_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.SOLROCK, Species.TYPHLOSION ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.TYPHLOSION, Species.SOLROCK ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.TORKOAL, Species.NINETALES ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.NINETALES, Species.TORKOAL ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); - p.abilityIndex = 2; // Drought + if (p.species.speciesId === Species.NINETALES) { + p.abilityIndex = 2; // Drought + } else if (p.species.speciesId === Species.TORKOAL) { + p.abilityIndex = 1; // Drought + } })) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SHIFTRY, Species.SCOVILLAIN ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SCOVILLAIN ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.abilityIndex = 0; // Chlorophyll })) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.GREAT_TUSK ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.GREAT_TUSK ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ROGUE_BALL; + })) .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.CAMERUPT ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); @@ -2013,11 +2359,17 @@ export const trainerConfigs: TrainerConfigs = { p.pokeball = PokeballType.MASTER_BALL; })), [TrainerType.ARCHIE]: new TrainerConfig(++t).setName("Archie").initForEvilTeamLeader("Aqua Boss", []).setMixedBattleBgm("battle_aqua_magma_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.LINOONE ])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.CROBAT, Species.PELIPPER ])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.LUDICOLO ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.PELIPPER ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.abilityIndex = 1; // Drizzle + })) .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.MUK, Species.ALOLA_MUK ])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.TENTACRUEL ])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.RELICANTH, Species.WAILORD ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.WAILORD ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.QWILFISH ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.abilityIndex = 1; // Swift Swim + })) .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.SHARPEDO ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); @@ -2027,19 +2379,20 @@ export const trainerConfigs: TrainerConfigs = { p.gender = Gender.MALE; })), [TrainerType.ARCHIE_2]: new TrainerConfig(++t).setName("Archie").initForEvilTeamLeader("Aqua Boss", [], true).setMixedBattleBgm("battle_aqua_magma_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.EMPOLEON, Species.LUDICOLO ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.LUDICOLO, Species.EMPOLEON ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; })) .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.POLITOED, Species.PELIPPER ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); - p.abilityIndex = 2; // Drizzle - })) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.BEARTIC, Species.ARMALDO ], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.abilityIndex = 2; // Swift Swim + if (p.species.speciesId === Species.POLITOED) { + p.abilityIndex = 2; // Drizzle + } else if (p.species.speciesId === Species.PELIPPER) { + p.abilityIndex = 1; // Drizzle + } })) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.DHELMISE ])) .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.OVERQWIL ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.abilityIndex = 1; // Swift Swim @@ -2060,8 +2413,8 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.CYRUS]: new TrainerConfig(++t).setName("Cyrus").initForEvilTeamLeader("Galactic Boss", []).setMixedBattleBgm("battle_galactic_boss").setVictoryBgm("victory_team_plasma") .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.GYARADOS ])) .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.HONCHKROW, Species.HISUI_BRAVIARY ])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.CROBAT, Species.GLISCOR ])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.AZELF, Species.UXIE, Species.MESPRIT ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.MAGNEZONE ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.UXIE, Species.MESPRIT, Species.AZELF ])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.HOUNDOOM ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; @@ -2075,35 +2428,38 @@ export const trainerConfigs: TrainerConfigs = { p.gender = Gender.MALE; })), [TrainerType.CYRUS_2]: new TrainerConfig(++t).setName("Cyrus").initForEvilTeamLeader("Galactic Boss", [], true).setMixedBattleBgm("battle_galactic_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.AZELF, Species.UXIE, Species.MESPRIT ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.CROBAT ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.ELECTRODE, Species.HISUI_ELECTRODE ])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SALAMENCE, Species.ROARING_MOON ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.MAGNEZONE ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.UXIE, Species.MESPRIT, Species.AZELF ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ROGUE_BALL; + })) .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.HOUNDOOM ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; p.formIndex = 1; // Mega Houndoom p.generateName(); })) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.WEAVILE, Species.SNEASLER ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.WEAVILE ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; p.gender = Gender.MALE; })) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.DARKRAI ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.DIALGA, Species.PALKIA ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; })), [TrainerType.GHETSIS]: new TrainerConfig(++t).setName("Ghetsis").initForEvilTeamLeader("Plasma Boss", []).setMixedBattleBgm("battle_plasma_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.COFAGRIGUS, Species.RUNERIGUS ])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.BOUFFALANT ])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SEISMITOAD, Species.CARRACOSTA ])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.EELEKTROSS, Species.GALVANTULA ])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.VOLCARONA ])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.COFAGRIGUS ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.SEISMITOAD ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.GALVANTULA, Species.EELEKTROSS ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.DRAPION, Species.TOXICROAK ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.KINGAMBIT ])) .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.HYDREIGON ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); @@ -2111,19 +2467,20 @@ export const trainerConfigs: TrainerConfigs = { p.gender = Gender.MALE; })), [TrainerType.GHETSIS_2]: new TrainerConfig(++t).setName("Ghetsis").initForEvilTeamLeader("Plasma Boss", [], true).setMixedBattleBgm("battle_plasma_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.GENESECT ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.RUNERIGUS ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - p.formIndex = Utils.randSeedInt(4, 1); // Shock, Burn, Chill, or Douse Drive })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.BASCULEGION, Species.JELLICENT ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.JELLICENT, Species.BASCULEGION ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.gender = Gender.MALE; p.formIndex = 0; })) .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.KINGAMBIT ])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.VOLCARONA, Species.SLITHER_WING ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.VOLCARONA, Species.IRON_MOTH ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ROGUE_BALL; + })) .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.HYDREIGON, Species.IRON_JUGULIS ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); @@ -2146,8 +2503,18 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); p.gender = Gender.MALE; })) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.CLAWITZER, Species.DRAGALGE ])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.HELIOLISK, Species.MALAMAR ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.DRAGALGE, Species.CLAWITZER ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + if (p.species.speciesId === Species.DRAGALGE) { + p.abilityIndex = 2; // Adaptability + } else if (p.species.speciesId === Species.CLAWITZER) { + p.abilityIndex = 0; // Mega Launcher + } + })) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.GALLADE ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.abilityIndex = 1; // Sharpness + })) .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.GYARADOS ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); @@ -2157,29 +2524,37 @@ export const trainerConfigs: TrainerConfigs = { p.gender = Gender.MALE; })), [TrainerType.LYSANDRE_2]: new TrainerConfig(++t).setName("Lysandre").initForEvilTeamLeader("Flare Boss", [], true).setMixedBattleBgm("battle_flare_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.SCREAM_TAIL, Species.FLUTTER_MANE ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.PYROAR ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.PYROAR ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.gender = Gender.MALE; })) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.IRON_MOTH ])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.GOODRA, Species.HISUI_GOODRA ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.DRAGALGE, Species.CLAWITZER ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + if (p.species.speciesId === Species.DRAGALGE) { + p.abilityIndex = 2; // Adaptability + } else if (p.species.speciesId === Species.CLAWITZER) { + p.abilityIndex = 0; // Mega Launcher + } + })) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.AEGISLASH, Species.HISUI_GOODRA ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.IRON_VALIANT ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ROGUE_BALL; + })) .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.GYARADOS ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; - p.formIndex = 1; // Mega Gyardos + p.formIndex = 1; // Mega Gyarados p.generateName(); p.gender = Gender.MALE; })) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.YVELTAL ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.ZYGARDE ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; + p.formIndex = 0; // 50% Forme, Aura Break })), [TrainerType.LUSAMINE]: new TrainerConfig(++t).setName("Lusamine").initForEvilTeamLeader("Aether Boss", []).setMixedBattleBgm("battle_aether_boss").setVictoryBgm("victory_team_plasma") .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.CLEFABLE ], TrainerSlot.TRAINER, true, p => { @@ -2196,46 +2571,51 @@ export const trainerConfigs: TrainerConfigs = { p.pokeball = PokeballType.ROGUE_BALL; })), [TrainerType.LUSAMINE_2]: new TrainerConfig(++t).setName("Lusamine").initForEvilTeamLeader("Aether Boss", [], true).setMixedBattleBgm("battle_aether_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.NIHILEGO ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.CLEFABLE ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ROGUE_BALL; - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.MILOTIC, Species.PRIMARINA ])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.CLEFABLE ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.gender = Gender.FEMALE; })) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.STAKATAKA, Species.CELESTEELA, Species.GUZZLORD ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.MILOTIC, Species.PRIMARINA ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SILVALLY ], TrainerSlot.TRAINER, true, p => { + p.formIndex = Utils.randSeedInt(18); // Random Silvally Form + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ROGUE_BALL; + if (!p.moveset.some(move => !Utils.isNullOrUndefined(move) && move.moveId === Moves.MULTI_ATTACK)) { // Check if Multi Attack is in the moveset, if not, replace the first move with Multi Attack. + p.moveset[0] = new PokemonMove(Moves.MULTI_ATTACK); + } + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.PHEROMOSA ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ROGUE_BALL; })) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.PHEROMOSA ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.NIHILEGO ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ROGUE_BALL; })) .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.NECROZMA ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); + p.formIndex = 2; // Dawn Wings p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; })), [TrainerType.GUZMA]: new TrainerConfig(++t).setName("Guzma").initForEvilTeamLeader("Skull Boss", []).setMixedBattleBgm("battle_skull_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.LOKIX, Species.YANMEGA ], TrainerSlot.TRAINER, true, p => { - //Tinted Lens Lokix, Tinted Lens Yanmega - if (p.species.speciesId === Species.LOKIX) { - p.abilityIndex = 2; - } else if (p.species.speciesId === Species.YANMEGA) { - p.abilityIndex = 1; + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.YANMEGA, Species.LOKIX ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + if (p.species.speciesId === Species.YANMEGA) { + p.abilityIndex = 1; // Tinted Lens + } else if (p.species.speciesId === Species.LOKIX) { + p.abilityIndex = 2; // Tinted Lens } })) .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.HERACROSS ])) .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SCIZOR, Species.KLEAVOR ], TrainerSlot.TRAINER, true, p => { - //Technician Scizor, Sharpness Kleavor + p.generateAndPopulateMoveset(); if (p.species.speciesId === Species.SCIZOR) { - p.abilityIndex = 1; + p.abilityIndex = 1; // Technician } else if (p.species.speciesId === Species.KLEAVOR) { - p.abilityIndex = 2; + p.abilityIndex = 2; // Sharpness } })) .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.GALVANTULA, Species.VIKAVOLT ])) @@ -2249,49 +2629,63 @@ export const trainerConfigs: TrainerConfigs = { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.gender = Gender.MALE; - p.pokeball = PokeballType.ULTRA_BALL; })), [TrainerType.GUZMA_2]: new TrainerConfig(++t).setName("Guzma").initForEvilTeamLeader("Skull Boss", [], true).setMixedBattleBgm("battle_skull_boss").setVictoryBgm("victory_team_plasma") .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.GOLISOPOD ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); - p.abilityIndex = 2; //Anticipation + p.abilityIndex = 2; // Anticipation p.gender = Gender.MALE; - p.pokeball = PokeballType.ULTRA_BALL; })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.SCIZOR, Species.KLEAVOR ], TrainerSlot.TRAINER, true, p => { - //Technician Scizor, Sharpness Kleavor - if (p.species.speciesId === Species.SCIZOR) { - p.abilityIndex = 1; - } else if (p.species.speciesId === Species.KLEAVOR) { - p.abilityIndex = 2; - } - })) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.HISUI_SAMUROTT, Species.CRAWDAUNT ], TrainerSlot.TRAINER, true, p => { - p.abilityIndex = 2; //Sharpness Hisui Samurott, Adaptability Crawdaunt - })) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.BUZZWOLE ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.BUZZWOLE ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ROGUE_BALL; })) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.XURKITREE ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.CRAWDAUNT, Species.HISUI_SAMUROTT ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.abilityIndex = 2; // Sharpness Hisuian Samurott, Adaptability Crawdaunt + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.XURKITREE ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ROGUE_BALL; + })) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.GENESECT ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ROGUE_BALL; + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = Utils.randSeedInt(4, 1); // Shock, Burn, Chill, or Douse Drive + if (!p.moveset.some(move => !Utils.isNullOrUndefined(move) && move.moveId === Moves.TECHNO_BLAST)) { // Check if Techno Blast is in the moveset, if not, replace the first move with Techno Blast. + p.moveset[0] = new PokemonMove(Moves.TECHNO_BLAST); + } })) .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.PINSIR ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); - p.formIndex = 1; + p.formIndex = 1; // Mega Pinsir p.generateAndPopulateMoveset(); p.generateName(); p.pokeball = PokeballType.ULTRA_BALL; })), [TrainerType.ROSE]: new TrainerConfig(++t).setName("Rose").initForEvilTeamLeader("Macro Boss", []).setMixedBattleBgm("battle_macro_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.ARCHALUDON ])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.FERROTHORN, Species.ESCAVALIER ])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SIRFETCHD, Species.MR_RIME ])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.CORVIKNIGHT ])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.PERRSERKER, Species.KLINKLANG ])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.ARCHALUDON ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.ESCAVALIER, Species.FERROTHORN ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SIRFETCHD, Species.MR_RIME ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.CORVIKNIGHT ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.KLINKLANG, Species.PERRSERKER ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.COPPERAJAH ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); @@ -2304,13 +2698,21 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.ARCHALUDON ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.AEGISLASH, Species.GHOLDENGO ])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.DRACOVISH, Species.DRACOZOLT ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.AEGISLASH, Species.GHOLDENGO ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); - p.abilityIndex = 1; //Strong Jaw Dracovish, Hustle Dracozolt + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.DRACOZOLT, Species.DRACOVISH ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.abilityIndex = 1; // Strong Jaw Dracovish, Hustle Dracozolt + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.MELMETAL ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; })) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.MELMETAL ])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.GALAR_ARTICUNO, Species.GALAR_ZAPDOS, Species.GALAR_MOLTRES ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); @@ -2325,16 +2727,10 @@ export const trainerConfigs: TrainerConfigs = { 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([ Species.VAPOREON, Species.JOLTEON, Species.FLAREON ])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.ESPEON, Species.UMBREON ], TrainerSlot.TRAINER, true, p => { - p.abilityIndex = 2; // Magic Bounce Espeon, Inner Focus Umbreon - p.generateAndPopulateMoveset(); - })) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.LEAFEON, Species.GLACEON ])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.ROTOM ], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.formIndex = Utils.randSeedInt(5, 1); // Heat, Wash, Frost, Fan, or Mow - })) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.JOLTEON, Species.LEAFEON ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.VAPOREON, Species.UMBREON ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.ESPEON, Species.GLACEON ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.FLAREON ])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.SYLVEON ], TrainerSlot.TRAINER, true, p => { p.abilityIndex = 2; // Pixilate p.generateAndPopulateMoveset(); @@ -2347,10 +2743,7 @@ export const trainerConfigs: TrainerConfigs = { p.pokeball = PokeballType.ULTRA_BALL; p.generateName(); })) - .setGenModifiersFunc(party => { - const teraPokemon = party[4]; - return [ modifierTypes.TERA_SHARD().generateType([], [ teraPokemon.species.type1 ])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(teraPokemon) as PersistentModifier ]; //TODO: is the bang correct? - }), + .setInstantTera(4), // Tera Fairy Sylveon [TrainerType.PENNY_2]: new TrainerConfig(++t).setName("Cassiopeia").initForEvilTeamLeader("Star Boss", [], true).setMixedBattleBgm("battle_star_boss").setVictoryBgm("victory_team_plasma") .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.SYLVEON ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); @@ -2358,33 +2751,33 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); p.gender = Gender.FEMALE; })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.ENTEI, Species.RAIKOU, Species.SUICUNE ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.ROTOM ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.formIndex = Utils.randSeedInt(5, 1); // Heat, Wash, Frost, Fan, or Mow + })) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.RAIKOU, Species.ENTEI, Species.SUICUNE ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; })) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.WALKING_WAKE, Species.GOUGING_FIRE, Species.RAGING_BOLT ])) .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.REVAVROOM ], TrainerSlot.TRAINER, true, p => { - p.formIndex = Utils.randSeedInt(5, 1); //Random Starmobile form + p.formIndex = Utils.randSeedInt(5, 1); // Random Starmobile form p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ROGUE_BALL; })) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.EEVEE ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.ZAMAZENTA ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.EEVEE ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.formIndex = 2; p.generateName(); p.pokeball = PokeballType.ULTRA_BALL; })) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.ZAMAZENTA ], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.MASTER_BALL; - })) - .setGenModifiersFunc(party => { - const teraPokemon = party[0]; - return [ modifierTypes.TERA_SHARD().generateType([], [ teraPokemon.species.type1 ])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(teraPokemon) as PersistentModifier ]; //TODO: is the bang correct? - }), - [TrainerType.BUCK]: new TrainerConfig(++t).setName("Buck").initForStatTrainer([], true) + .setInstantTera(0), // Tera Fairy Sylveon + [TrainerType.BUCK]: new TrainerConfig(++t).setName("Buck").initForStatTrainer(true) .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.CLAYDOL ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 3); p.generateAndPopulateMoveset(); @@ -2416,7 +2809,7 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; })), - [TrainerType.CHERYL]: new TrainerConfig(++t).setName("Cheryl").initForStatTrainer([], false) + [TrainerType.CHERYL]: new TrainerConfig(++t).setName("Cheryl").initForStatTrainer() .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.BLISSEY ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 3); p.generateAndPopulateMoveset(); @@ -2444,7 +2837,7 @@ export const trainerConfigs: TrainerConfigs = { } p.pokeball = PokeballType.MASTER_BALL; })), - [TrainerType.MARLEY]: new TrainerConfig(++t).setName("Marley").initForStatTrainer([], false) + [TrainerType.MARLEY]: new TrainerConfig(++t).setName("Marley").initForStatTrainer() .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.ARCANINE ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 3); p.generateAndPopulateMoveset(); @@ -2468,7 +2861,7 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; })), - [TrainerType.MIRA]: new TrainerConfig(++t).setName("Mira").initForStatTrainer([], false) + [TrainerType.MIRA]: new TrainerConfig(++t).setName("Mira").initForStatTrainer() .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.ALAKAZAM ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); @@ -2490,7 +2883,7 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; })), - [TrainerType.RILEY]: new TrainerConfig(++t).setName("Riley").initForStatTrainer([], true) + [TrainerType.RILEY]: new TrainerConfig(++t).setName("Riley").initForStatTrainer(true) .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.LUCARIO ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); diff --git a/src/data/trainer-names.ts b/src/data/trainer-names.ts index d075b7121f2..8b0091d4398 100644 --- a/src/data/trainer-names.ts +++ b/src/data/trainer-names.ts @@ -16,7 +16,7 @@ class TrainerNameConfig { } interface TrainerNameConfigs { - [key: integer]: TrainerNameConfig + [key: number]: TrainerNameConfig } // used in a commented code diff --git a/src/data/type.ts b/src/data/type.ts index 6170eadc91e..498394bf90e 100644 --- a/src/data/type.ts +++ b/src/data/type.ts @@ -313,7 +313,7 @@ export function getTypeDamageMultiplierColor(multiplier: TypeDamageMultiplier, s } } -export function getTypeRgb(type: Type): [ integer, integer, integer ] { +export function getTypeRgb(type: Type): [ number, number, number ] { switch (type) { case Type.NORMAL: return [ 168, 168, 120 ]; diff --git a/src/data/variant.ts b/src/data/variant.ts index 13869635f1e..13c11b0bb40 100644 --- a/src/data/variant.ts +++ b/src/data/variant.ts @@ -8,7 +8,7 @@ export const variantData: any = {}; export const variantColorCache = {}; -export function getVariantTint(variant: Variant): integer { +export function getVariantTint(variant: Variant): number { switch (variant) { case 0: return 0xf8c020; @@ -19,7 +19,7 @@ export function getVariantTint(variant: Variant): integer { } } -export function getVariantIcon(variant: Variant): integer { +export function getVariantIcon(variant: Variant): number { switch (variant) { case 0: return VariantTier.STANDARD; diff --git a/src/data/weather.ts b/src/data/weather.ts index 0a76a015402..0c90f381130 100644 --- a/src/data/weather.ts +++ b/src/data/weather.ts @@ -1,20 +1,22 @@ import { Biome } from "#enums/biome"; import { WeatherType } from "#enums/weather-type"; import { getPokemonNameWithAffix } from "../messages"; -import Pokemon from "../field/pokemon"; +import type Pokemon from "../field/pokemon"; import { Type } from "#enums/type"; -import Move, { AttackMove } from "./move"; +import type Move from "./move"; +import { AttackMove } from "./move"; import * as Utils from "../utils"; -import BattleScene from "../battle-scene"; import { SuppressWeatherEffectAbAttr } from "./ability"; import { TerrainType, getTerrainName } from "./terrain"; import i18next from "i18next"; +import { globalScene } from "#app/global-scene"; +import type { Arena } from "#app/field/arena"; export class Weather { public weatherType: WeatherType; - public turnsLeft: integer; + public turnsLeft: number; - constructor(weatherType: WeatherType, turnsLeft?: integer) { + constructor(weatherType: WeatherType, turnsLeft?: number) { this.weatherType = weatherType; this.turnsLeft = !this.isImmutable() ? turnsLeft || 0 : 0; } @@ -100,8 +102,8 @@ export class Weather { return false; } - isEffectSuppressed(scene: BattleScene): boolean { - const field = scene.getField(true); + isEffectSuppressed(): boolean { + const field = globalScene.getField(true); for (const pokemon of field) { let suppressWeatherEffectAbAttr: SuppressWeatherEffectAbAttr | null = pokemon.getAbility().getAttrs(SuppressWeatherEffectAbAttr)[0]; @@ -242,12 +244,12 @@ export function getTerrainBlockMessage(pokemon: Pokemon, terrainType: TerrainTyp return i18next.t("terrain:defaultBlockMessage", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), terrainName: getTerrainName(terrainType) }); } -interface WeatherPoolEntry { +export interface WeatherPoolEntry { weatherType: WeatherType; - weight: integer; + weight: number; } -export function getRandomWeatherType(arena: any /* Importing from arena causes a circular dependency */): WeatherType { +export function getRandomWeatherType(arena: Arena): WeatherType { let weatherPool: WeatherPoolEntry[] = []; const hasSun = arena.getTimeOfDay() < 2; switch (arena.biomeType) { @@ -373,6 +375,10 @@ export function getRandomWeatherType(arena: any /* Importing from arena causes a break; } + if (arena.biomeType === Biome.TOWN && globalScene.eventManager.isEventActive()) { + globalScene.eventManager.getWeather()?.map(w => weatherPool.push(w)); + } + if (weatherPool.length > 1) { let totalWeight = 0; weatherPool.forEach(w => totalWeight += w.weight); diff --git a/src/enums/arena-tag-type.ts b/src/enums/arena-tag-type.ts index 1c62ccb14a6..4180aa00ef5 100644 --- a/src/enums/arena-tag-type.ts +++ b/src/enums/arena-tag-type.ts @@ -29,4 +29,5 @@ export enum ArenaTagType { WATER_FIRE_PLEDGE = "WATER_FIRE_PLEDGE", GRASS_WATER_PLEDGE = "GRASS_WATER_PLEDGE", FAIRY_LOCK = "FAIRY_LOCK", + NEUTRALIZING_GAS = "NEUTRALIZING_GAS" } diff --git a/src/enums/battler-tag-type.ts b/src/enums/battler-tag-type.ts index f28ac37ae27..719b08c5b81 100644 --- a/src/enums/battler-tag-type.ts +++ b/src/enums/battler-tag-type.ts @@ -94,4 +94,5 @@ export enum BattlerTagType { PSYCHO_SHIFT = "PSYCHO_SHIFT", ENDURE_TOKEN = "ENDURE_TOKEN", POWDER = "POWDER", + MAGIC_COAT = "MAGIC_COAT", } diff --git a/src/enums/buttons.ts b/src/enums/buttons.ts index fe26023f8e7..f828b280d45 100644 --- a/src/enums/buttons.ts +++ b/src/enums/buttons.ts @@ -13,7 +13,7 @@ export enum Button { CYCLE_GENDER, CYCLE_ABILITY, CYCLE_NATURE, - V, + CYCLE_TERA, SPEED_UP, - SLOW_DOWN + SLOW_DOWN, } diff --git a/src/enums/challenges.ts b/src/enums/challenges.ts index c4dc7460dfe..7b506a61a2f 100644 --- a/src/enums/challenges.ts +++ b/src/enums/challenges.ts @@ -5,4 +5,5 @@ export enum Challenges { LOWER_STARTER_POINTS, FRESH_START, INVERSE_BATTLE, + FLIP_STAT, } diff --git a/src/enums/trainer-type.ts b/src/enums/trainer-type.ts index 708faf69196..e22dc5d81c7 100644 --- a/src/enums/trainer-type.ts +++ b/src/enums/trainer-type.ts @@ -68,7 +68,7 @@ export enum TrainerType { SATURN, PLASMA_GRUNT, ZINZOLIN, - ROOD, + COLRESS, FLARE_GRUNT, BRYONY, XEROSIC, @@ -243,8 +243,10 @@ export enum TrainerType { ALDER, IRIS, DIANTHA, + KUKUI, HAU, LEON, + MUSTARD, GEETA, NEMONA, KIERAN, diff --git a/src/events/arena.ts b/src/events/arena.ts index b1126e5c03d..660a113f96b 100644 --- a/src/events/arena.ts +++ b/src/events/arena.ts @@ -1,7 +1,7 @@ -import { ArenaTagSide } from "#app/data/arena-tag"; -import { ArenaTagType } from "#enums/arena-tag-type"; -import { TerrainType } from "#app/data/terrain"; -import { WeatherType } from "#enums/weather-type"; +import type { ArenaTagSide } from "#app/data/arena-tag"; +import type { ArenaTagType } from "#enums/arena-tag-type"; +import type { TerrainType } from "#app/data/terrain"; +import type { WeatherType } from "#enums/weather-type"; /** Alias for all {@linkcode ArenaEvent} type strings */ export enum ArenaEventType { diff --git a/src/events/battle-scene.ts b/src/events/battle-scene.ts index b2e4461f8d0..548666c96de 100644 --- a/src/events/battle-scene.ts +++ b/src/events/battle-scene.ts @@ -1,5 +1,5 @@ -import Move from "../data/move"; -import { BerryModifier } from "../modifier/modifier"; +import type Move from "../data/move"; +import type { BerryModifier } from "../modifier/modifier"; /** Alias for all {@linkcode BattleScene} events */ export enum BattleSceneEventType { diff --git a/src/events/egg.ts b/src/events/egg.ts index b30c37a25e8..dc3d2b55ffe 100644 --- a/src/events/egg.ts +++ b/src/events/egg.ts @@ -12,7 +12,7 @@ export enum EggEventType { */ export class EggCountChangedEvent extends Event { /** The updated egg count. */ - public eggCount: integer; + public eggCount: number; constructor(eggCount: number) { super(EggEventType.EGG_COUNT_CHANGED); diff --git a/src/field/anims.ts b/src/field/anims.ts index 10198c29005..9ffaae59bbc 100644 --- a/src/field/anims.ts +++ b/src/field/anims.ts @@ -1,32 +1,32 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { PokeballType } from "#enums/pokeball"; -import { Variant } from "#app/data/variant"; +import type { Variant } from "#app/data/variant"; import { getFrameMs, randGauss } from "#app/utils"; -export function addPokeballOpenParticles(scene: BattleScene, x: number, y: number, pokeballType: PokeballType): void { +export function addPokeballOpenParticles(x: number, y: number, pokeballType: PokeballType): void { switch (pokeballType) { case PokeballType.POKEBALL: - doDefaultPbOpenParticles(scene, x, y, 48); + doDefaultPbOpenParticles(x, y, 48); break; case PokeballType.GREAT_BALL: - doDefaultPbOpenParticles(scene, x, y, 96); + doDefaultPbOpenParticles(x, y, 96); break; case PokeballType.ULTRA_BALL: - doUbOpenParticles(scene, x, y, 8); + doUbOpenParticles(x, y, 8); break; case PokeballType.ROGUE_BALL: - doUbOpenParticles(scene, x, y, 10); + doUbOpenParticles(x, y, 10); break; case PokeballType.MASTER_BALL: - doMbOpenParticles(scene, x, y); + doMbOpenParticles(x, y); break; } } -function doDefaultPbOpenParticles(scene: BattleScene, x: number, y: number, radius: number) { - const pbOpenParticlesFrameNames = scene.anims.generateFrameNames("pb_particles", { start: 0, end: 3, suffix: ".png" }); - if (!(scene.anims.exists("pb_open_particle"))) { - scene.anims.create({ +function doDefaultPbOpenParticles(x: number, y: number, radius: number) { + const pbOpenParticlesFrameNames = globalScene.anims.generateFrameNames("pb_particles", { start: 0, end: 3, suffix: ".png" }); + if (!(globalScene.anims.exists("pb_open_particle"))) { + globalScene.anims.create({ key: "pb_open_particle", frames: pbOpenParticlesFrameNames, frameRate: 16, @@ -34,12 +34,12 @@ function doDefaultPbOpenParticles(scene: BattleScene, x: number, y: number, radi }); } - const addParticle = (index: integer) => { - const particle = scene.add.sprite(x, y, "pb_open_particle"); - scene.field.add(particle); + const addParticle = (index: number) => { + const particle = globalScene.add.sprite(x, y, "pb_open_particle"); + globalScene.field.add(particle); const angle = index * 45; const [ xCoord, yCoord ] = [ radius * Math.cos(angle * Math.PI / 180), radius * Math.sin(angle * Math.PI / 180) ]; - scene.tweens.add({ + globalScene.tweens.add({ targets: particle, x: x + xCoord, y: y + yCoord, @@ -48,9 +48,9 @@ function doDefaultPbOpenParticles(scene: BattleScene, x: number, y: number, radi particle.play({ key: "pb_open_particle", startFrame: (index + 3) % 4, - frameRate: Math.floor(16 * scene.gameSpeed) + frameRate: Math.floor(16 * globalScene.gameSpeed) }); - scene.tweens.add({ + globalScene.tweens.add({ targets: particle, delay: 500, duration: 75, @@ -61,20 +61,20 @@ function doDefaultPbOpenParticles(scene: BattleScene, x: number, y: number, radi }; let particleCount = 0; - scene.time.addEvent({ + globalScene.time.addEvent({ delay: 20, repeat: 16, callback: () => addParticle(++particleCount) }); } -function doUbOpenParticles(scene: BattleScene, x: number, y: number, frameIndex: integer) { +function doUbOpenParticles(x: number, y: number, frameIndex: number) { const particles: Phaser.GameObjects.Image[] = []; for (let i = 0; i < 10; i++) { - particles.push(doFanOutParticle(scene, i * 25, x, y, 1, 1, 5, frameIndex)); + particles.push(doFanOutParticle(i * 25, x, y, 1, 1, 5, frameIndex)); } - scene.tweens.add({ + globalScene.tweens.add({ targets: particles, delay: 750, duration: 250, @@ -88,14 +88,14 @@ function doUbOpenParticles(scene: BattleScene, x: number, y: number, frameIndex: }); } -function doMbOpenParticles(scene: BattleScene, x: number, y: number) { +function doMbOpenParticles(x: number, y: number) { const particles: Phaser.GameObjects.Image[] = []; for (let j = 0; j < 2; j++) { for (let i = 0; i < 8; i++) { - particles.push(doFanOutParticle(scene, i * 32, x, y, j ? 1 : 2, j ? 2 : 1, 8, 4)); + particles.push(doFanOutParticle(i * 32, x, y, j ? 1 : 2, j ? 2 : 1, 8, 4)); } - scene.tweens.add({ + globalScene.tweens.add({ targets: particles, delay: 750, duration: 250, @@ -110,11 +110,11 @@ function doMbOpenParticles(scene: BattleScene, x: number, y: number) { } } -function doFanOutParticle(scene: BattleScene, trigIndex: integer, x: integer, y: integer, xSpeed: integer, ySpeed: integer, angle: integer, frameIndex: integer): Phaser.GameObjects.Image { +function doFanOutParticle(trigIndex: number, x: number, y: number, xSpeed: number, ySpeed: number, angle: number, frameIndex: number): Phaser.GameObjects.Image { let f = 0; - const particle = scene.add.image(x, y, "pb_particles", `${frameIndex}.png`); - scene.field.add(particle); + const particle = globalScene.add.image(x, y, "pb_particles", `${frameIndex}.png`); + globalScene.field.add(particle); const updateParticle = () => { if (!particle.scene) { @@ -126,7 +126,7 @@ function doFanOutParticle(scene: BattleScene, trigIndex: integer, x: integer, y: f++; }; - const particleTimer = scene.tweens.addCounter({ + const particleTimer = globalScene.tweens.addCounter({ repeat: -1, duration: getFrameMs(1), onRepeat: () => { @@ -137,20 +137,20 @@ function doFanOutParticle(scene: BattleScene, trigIndex: integer, x: integer, y: return particle; } -export function addPokeballCaptureStars(scene: BattleScene, pokeball: Phaser.GameObjects.Sprite): void { +export function addPokeballCaptureStars(pokeball: Phaser.GameObjects.Sprite): void { const addParticle = () => { - const particle = scene.add.sprite(pokeball.x, pokeball.y, "pb_particles", "4.png"); + const particle = globalScene.add.sprite(pokeball.x, pokeball.y, "pb_particles", "4.png"); particle.setOrigin(pokeball.originX, pokeball.originY); particle.setAlpha(0.5); - scene.field.add(particle); + globalScene.field.add(particle); - scene.tweens.add({ + globalScene.tweens.add({ targets: particle, y: pokeball.y - 10, ease: "Sine.easeOut", duration: 250, onComplete: () => { - scene.tweens.add({ + globalScene.tweens.add({ targets: particle, y: pokeball.y, alpha: 0, @@ -161,13 +161,13 @@ export function addPokeballCaptureStars(scene: BattleScene, pokeball: Phaser.Gam }); const dist = randGauss(25); - scene.tweens.add({ + globalScene.tweens.add({ targets: particle, x: pokeball.x + dist, duration: 500 }); - scene.tweens.add({ + globalScene.tweens.add({ targets: particle, alpha: 0, delay: 425, @@ -179,11 +179,11 @@ export function addPokeballCaptureStars(scene: BattleScene, pokeball: Phaser.Gam new Array(3).fill(null).map(() => addParticle()); } -export function sin(index: integer, amplitude: integer): number { +export function sin(index: number, amplitude: number): number { return amplitude * Math.sin(index * (Math.PI / 128)); } -export function cos(index: integer, amplitude: integer): number { +export function cos(index: number, amplitude: number): number { return amplitude * Math.cos(index * (Math.PI / 128)); } @@ -193,15 +193,15 @@ export function cos(index: integer, amplitude: integer): number { * @param sparkleSprite the Sprite to play the animation on * @param variant which shiny {@linkcode variant} to play the animation for */ -export function doShinySparkleAnim(scene: BattleScene, sparkleSprite: Phaser.GameObjects.Sprite, variant: Variant) { +export function doShinySparkleAnim(sparkleSprite: Phaser.GameObjects.Sprite, variant: Variant) { const keySuffix = variant ? `_${variant + 1}` : ""; const spriteKey = `shiny${keySuffix}`; const animationKey = `sparkle${keySuffix}`; // Make sure the animation exists, and create it if not - if (!scene.anims.exists(animationKey)) { - const frameNames = scene.anims.generateFrameNames(spriteKey, { suffix: ".png", end: 34 }); - scene.anims.create({ + if (!globalScene.anims.exists(animationKey)) { + const frameNames = globalScene.anims.generateFrameNames(spriteKey, { suffix: ".png", end: 34 }); + globalScene.anims.create({ key: `sparkle${keySuffix}`, frames: frameNames, frameRate: 32, @@ -212,5 +212,5 @@ export function doShinySparkleAnim(scene: BattleScene, sparkleSprite: Phaser.Gam // Play the animation sparkleSprite.play(animationKey); - scene.playSound("se/sparkle"); + globalScene.playSound("se/sparkle"); } diff --git a/src/field/arena.ts b/src/field/arena.ts index 3cbef659d7a..752eef81596 100644 --- a/src/field/arena.ts +++ b/src/field/arena.ts @@ -1,14 +1,17 @@ -import BattleScene from "#app/battle-scene"; -import { biomePokemonPools, BiomePoolTier, BiomeTierTrainerPools, biomeTrainerPools, PokemonPools } from "#app/data/balance/biomes"; -import { Constructor } from "#app/utils"; +import { globalScene } from "#app/global-scene"; +import type { BiomeTierTrainerPools, PokemonPools } from "#app/data/balance/biomes"; +import { biomePokemonPools, BiomePoolTier, biomeTrainerPools } from "#app/data/balance/biomes"; +import type { Constructor } from "#app/utils"; import * as Utils from "#app/utils"; -import PokemonSpecies, { getPokemonSpecies } from "#app/data/pokemon-species"; +import type PokemonSpecies from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/data/pokemon-species"; import { getTerrainClearMessage, getTerrainStartMessage, getWeatherClearMessage, getWeatherStartMessage, Weather } from "#app/data/weather"; import { CommonAnim } from "#app/data/battle-anims"; -import { Type } from "#enums/type"; -import Move from "#app/data/move"; -import { ArenaTag, ArenaTagSide, ArenaTrapTag, getArenaTag } from "#app/data/arena-tag"; -import { BattlerIndex } from "#app/battle"; +import type { Type } from "#enums/type"; +import type Move from "#app/data/move"; +import type { ArenaTag } from "#app/data/arena-tag"; +import { ArenaTagSide, ArenaTrapTag, getArenaTag } from "#app/data/arena-tag"; +import type { BattlerIndex } from "#app/battle"; import { Terrain, TerrainType } from "#app/data/terrain"; import { applyAbAttrs, @@ -18,12 +21,12 @@ import { PostWeatherChangeAbAttr, TerrainEventTypeChangeAbAttr } from "#app/data/ability"; -import Pokemon from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; import Overrides from "#app/overrides"; import { TagAddedEvent, TagRemovedEvent, TerrainChangedEvent, WeatherChangedEvent } from "#app/events/arena"; -import { ArenaTagType } from "#enums/arena-tag-type"; +import type { ArenaTagType } from "#enums/arena-tag-type"; import { Biome } from "#enums/biome"; -import { Moves } from "#enums/moves"; +import type { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { TimeOfDay } from "#enums/time-of-day"; import { TrainerType } from "#enums/trainer-type"; @@ -34,7 +37,6 @@ import { ShowAbilityPhase } from "#app/phases/show-ability-phase"; import { WeatherType } from "#enums/weather-type"; export class Arena { - public scene: BattleScene; public biomeType: Biome; public weather: Weather | null; public terrain: Terrain | null; @@ -42,6 +44,12 @@ export class Arena { public bgm: string; public ignoreAbilities: boolean; public ignoringEffectSource: BattlerIndex | null; + public playerTerasUsed: number; + /** + * 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). + */ + public playerFaints: number; private lastTimeOfDay: TimeOfDay; @@ -50,24 +58,25 @@ export class Arena { public readonly eventTarget: EventTarget = new EventTarget(); - constructor(scene: BattleScene, biome: Biome, bgm: string) { - this.scene = scene; + constructor(biome: Biome, bgm: string, playerFaints: number = 0) { this.biomeType = biome; this.tags = []; this.bgm = bgm; this.trainerPool = biomeTrainerPools[biome]; this.updatePoolsForTimeOfDay(); + this.playerTerasUsed = 0; + this.playerFaints = playerFaints; } init() { const biomeKey = getBiomeKey(this.biomeType); - this.scene.arenaPlayer.setBiome(this.biomeType); - this.scene.arenaPlayerTransition.setBiome(this.biomeType); - this.scene.arenaEnemy.setBiome(this.biomeType); - this.scene.arenaNextEnemy.setBiome(this.biomeType); - this.scene.arenaBg.setTexture(`${biomeKey}_bg`); - this.scene.arenaBgTransition.setTexture(`${biomeKey}_bg`); + globalScene.arenaPlayer.setBiome(this.biomeType); + globalScene.arenaPlayerTransition.setBiome(this.biomeType); + globalScene.arenaEnemy.setBiome(this.biomeType); + globalScene.arenaNextEnemy.setBiome(this.biomeType); + globalScene.arenaBg.setTexture(`${biomeKey}_bg`); + globalScene.arenaBgTransition.setTexture(`${biomeKey}_bg`); // Redo this on initialize because during save/load the current wave isn't always // set correctly during construction @@ -85,13 +94,13 @@ export class Arena { } } - randomSpecies(waveIndex: integer, level: integer, attempt?: integer, luckValue?: integer, isBoss?: boolean): PokemonSpecies { - const overrideSpecies = this.scene.gameMode.getOverrideSpecies(waveIndex); + randomSpecies(waveIndex: number, level: number, attempt?: number, luckValue?: number, isBoss?: boolean): PokemonSpecies { + const overrideSpecies = globalScene.gameMode.getOverrideSpecies(waveIndex); if (overrideSpecies) { return overrideSpecies; } - const isBossSpecies = !!this.scene.getEncounterBossSegments(waveIndex, level) && !!this.pokemonPool[BiomePoolTier.BOSS].length - && (this.biomeType !== Biome.END || this.scene.gameMode.isClassic || this.scene.gameMode.isWaveFinal(waveIndex)); + const isBossSpecies = !!globalScene.getEncounterBossSegments(waveIndex, level) && !!this.pokemonPool[BiomePoolTier.BOSS].length + && (this.biomeType !== Biome.END || globalScene.gameMode.isClassic || globalScene.gameMode.isWaveFinal(waveIndex)); const randVal = isBossSpecies ? 64 : 512; // luck influences encounter rarity let luckModifier = 0; @@ -111,7 +120,7 @@ export class Arena { let ret: PokemonSpecies; let regen = false; if (!tierPool.length) { - ret = this.scene.randomSpecies(waveIndex, level); + ret = globalScene.randomSpecies(waveIndex, level); } else { const entry = tierPool[Utils.randSeedInt(tierPool.length)]; let species: Species; @@ -158,7 +167,7 @@ export class Arena { return this.randomSpecies(waveIndex, level, (attempt || 0) + 1); } - const newSpeciesId = ret.getWildSpeciesForLevel(level, true, isBoss ?? isBossSpecies, this.scene.gameMode); + const newSpeciesId = ret.getWildSpeciesForLevel(level, true, isBoss ?? isBossSpecies, globalScene.gameMode); if (newSpeciesId !== ret.speciesId) { console.log("Replaced", Species[ret.speciesId], "with", Species[newSpeciesId]); ret = getPokemonSpecies(newSpeciesId); @@ -166,9 +175,9 @@ export class Arena { return ret; } - randomTrainerType(waveIndex: integer, isBoss: boolean = false): TrainerType { + randomTrainerType(waveIndex: number, isBoss: boolean = false): TrainerType { const isTrainerBoss = !!this.trainerPool[BiomePoolTier.BOSS].length - && (this.scene.gameMode.isTrainerBoss(waveIndex, this.biomeType, this.scene.offsetGym) || isBoss); + && (globalScene.gameMode.isTrainerBoss(waveIndex, this.biomeType, globalScene.offsetGym) || isBoss); console.log(isBoss, this.trainerPool); const tierValue = Utils.randSeedInt(!isTrainerBoss ? 512 : 64); let tier = !isTrainerBoss @@ -183,7 +192,7 @@ export class Arena { return !tierPool.length ? TrainerType.BREEDER : tierPool[Utils.randSeedInt(tierPool.length)]; } - getSpeciesFormIndex(species: PokemonSpecies): integer { + getSpeciesFormIndex(species: PokemonSpecies): number { switch (species.speciesId) { case Species.BURMY: case Species.WORMADAM: @@ -243,8 +252,8 @@ export class Arena { */ trySetWeatherOverride(weather: WeatherType): boolean { this.weather = new Weather(weather, 0); - this.scene.unshiftPhase(new CommonAnimPhase(this.scene, undefined, undefined, CommonAnim.SUNNY + (weather - 1))); - this.scene.queueMessage(getWeatherStartMessage(weather)!); // TODO: is this bang correct? + globalScene.unshiftPhase(new CommonAnimPhase(undefined, undefined, CommonAnim.SUNNY + (weather - 1))); + globalScene.queueMessage(getWeatherStartMessage(weather)!); // TODO: is this bang correct? return true; } @@ -269,13 +278,13 @@ export class Arena { this.eventTarget.dispatchEvent(new WeatherChangedEvent(oldWeatherType, this.weather?.weatherType!, this.weather?.turnsLeft!)); // TODO: is this bang correct? if (this.weather) { - this.scene.unshiftPhase(new CommonAnimPhase(this.scene, undefined, undefined, CommonAnim.SUNNY + (weather - 1), true)); - this.scene.queueMessage(getWeatherStartMessage(weather)!); // TODO: is this bang correct? + globalScene.unshiftPhase(new CommonAnimPhase(undefined, undefined, CommonAnim.SUNNY + (weather - 1), true)); + globalScene.queueMessage(getWeatherStartMessage(weather)!); // TODO: is this bang correct? } else { - this.scene.queueMessage(getWeatherClearMessage(oldWeatherType)!); // TODO: is this bang correct? + globalScene.queueMessage(getWeatherClearMessage(oldWeatherType)!); // TODO: is this bang correct? } - this.scene.getField(true).filter(p => p.isOnField()).map(pokemon => { + globalScene.getField(true).filter(p => p.isOnField()).map(pokemon => { pokemon.findAndRemoveTags(t => "weatherTypes" in t && !(t.weatherTypes as WeatherType[]).find(t => t === weather)); applyPostWeatherChangeAbAttrs(PostWeatherChangeAbAttr, pokemon, weather); }); @@ -287,13 +296,13 @@ export class Arena { * Function to trigger all weather based form changes */ triggerWeatherBasedFormChanges(): void { - this.scene.getField(true).forEach( p => { + globalScene.getField(true).forEach( p => { const isCastformWithForecast = (p.hasAbility(Abilities.FORECAST) && p.species.speciesId === Species.CASTFORM); const isCherrimWithFlowerGift = (p.hasAbility(Abilities.FLOWER_GIFT) && p.species.speciesId === Species.CHERRIM); if (isCastformWithForecast || isCherrimWithFlowerGift) { - new ShowAbilityPhase(this.scene, p.getBattlerIndex()); - this.scene.triggerPokemonFormChange(p, SpeciesFormChangeWeatherTrigger); + new ShowAbilityPhase(p.getBattlerIndex()); + globalScene.triggerPokemonFormChange(p, SpeciesFormChangeWeatherTrigger); } }); } @@ -302,13 +311,13 @@ export class Arena { * Function to trigger all weather based form changes back into their normal forms */ triggerWeatherBasedFormChangesToNormal(): void { - this.scene.getField(true).forEach( p => { + globalScene.getField(true).forEach( p => { const isCastformWithForecast = (p.hasAbility(Abilities.FORECAST, false, true) && p.species.speciesId === Species.CASTFORM); const isCherrimWithFlowerGift = (p.hasAbility(Abilities.FLOWER_GIFT, false, true) && p.species.speciesId === Species.CHERRIM); if (isCastformWithForecast || isCherrimWithFlowerGift) { - new ShowAbilityPhase(this.scene, p.getBattlerIndex()); - return this.scene.triggerPokemonFormChange(p, SpeciesFormChangeRevertWeatherFormTrigger); + new ShowAbilityPhase(p.getBattlerIndex()); + return globalScene.triggerPokemonFormChange(p, SpeciesFormChangeRevertWeatherFormTrigger); } }); } @@ -325,14 +334,14 @@ export class Arena { if (this.terrain) { if (!ignoreAnim) { - this.scene.unshiftPhase(new CommonAnimPhase(this.scene, undefined, undefined, CommonAnim.MISTY_TERRAIN + (terrain - 1))); + globalScene.unshiftPhase(new CommonAnimPhase(undefined, undefined, CommonAnim.MISTY_TERRAIN + (terrain - 1))); } - this.scene.queueMessage(getTerrainStartMessage(terrain)!); // TODO: is this bang correct? + globalScene.queueMessage(getTerrainStartMessage(terrain)!); // TODO: is this bang correct? } else { - this.scene.queueMessage(getTerrainClearMessage(oldTerrainType)!); // TODO: is this bang correct? + globalScene.queueMessage(getTerrainClearMessage(oldTerrainType)!); // TODO: is this bang correct? } - this.scene.getField(true).filter(p => p.isOnField()).map(pokemon => { + globalScene.getField(true).filter(p => p.isOnField()).map(pokemon => { pokemon.findAndRemoveTags(t => "terrainTypes" in t && !(t.terrainTypes as TerrainType[]).find(t => t === terrain)); applyPostTerrainChangeAbAttrs(PostTerrainChangeAbAttr, pokemon, terrain); applyAbAttrs(TerrainEventTypeChangeAbAttr, pokemon, null, false); @@ -342,7 +351,7 @@ export class Arena { } public isMoveWeatherCancelled(user: Pokemon, move: Move): boolean { - return !!this.weather && !this.weather.isEffectSuppressed(this.scene) && this.weather.isMoveWeatherCancelled(user, move); + return !!this.weather && !this.weather.isEffectSuppressed() && this.weather.isMoveWeatherCancelled(user, move); } public isMoveTerrainCancelled(user: Pokemon, targets: BattlerIndex[], move: Move): boolean { @@ -355,7 +364,7 @@ export class Arena { getAttackTypeMultiplier(attackType: Type, grounded: boolean): number { let weatherMultiplier = 1; - if (this.weather && !this.weather.isEffectSuppressed(this.scene)) { + if (this.weather && !this.weather.isEffectSuppressed()) { weatherMultiplier = this.weather.getAttackTypeMultiplier(attackType); } @@ -371,7 +380,7 @@ export class Arena { * Gets the denominator for the chance for a trainer spawn * @returns n where 1/n is the chance of a trainer battle */ - getTrainerChance(): integer { + getTrainerChance(): number { switch (this.biomeType) { case Biome.METROPOLIS: return 2; @@ -421,7 +430,7 @@ export class Arena { return TimeOfDay.NIGHT; } - const waveCycle = ((this.scene.currentBattle?.waveIndex || 0) + this.scene.waveCycleOffset) % 40; + const waveCycle = ((globalScene.currentBattle?.waveIndex || 0) + globalScene.waveCycleOffset) % 40; if (waveCycle < 15) { return TimeOfDay.DAY; @@ -456,10 +465,10 @@ export class Arena { } } - overrideTint(): [integer, integer, integer] { + overrideTint(): [number, number, number] { switch (Overrides.ARENA_TINT_OVERRIDE) { case TimeOfDay.DUSK: - return [ 98, 48, 73 ].map(c => Math.round((c + 128) / 2)) as [integer, integer, integer]; + return [ 98, 48, 73 ].map(c => Math.round((c + 128) / 2)) as [number, number, number]; break; case (TimeOfDay.NIGHT): return [ 64, 64, 64 ]; @@ -472,7 +481,7 @@ export class Arena { } } - getDayTint(): [integer, integer, integer] { + getDayTint(): [number, number, number] { if (Overrides.ARENA_TINT_OVERRIDE !== null) { return this.overrideTint(); } @@ -484,7 +493,7 @@ export class Arena { } } - getDuskTint(): [integer, integer, integer] { + getDuskTint(): [number, number, number] { if (Overrides.ARENA_TINT_OVERRIDE) { return this.overrideTint(); } @@ -494,11 +503,11 @@ export class Arena { switch (this.biomeType) { default: - return [ 98, 48, 73 ].map(c => Math.round((c + 128) / 2)) as [integer, integer, integer]; + return [ 98, 48, 73 ].map(c => Math.round((c + 128) / 2)) as [number, number, number]; } } - getNightTint(): [integer, integer, integer] { + getNightTint(): [number, number, number] { if (Overrides.ARENA_TINT_OVERRIDE) { return this.overrideTint(); } @@ -579,8 +588,8 @@ export class Arena { // creates a new tag object const newTag = getArenaTag(tagType, turnCount || 0, sourceMove, sourceId, targetIndex, side); if (newTag) { - this.tags.push(newTag); newTag.onAdd(this, quiet); + this.tags.push(newTag); const { layers = 0, maxLayers = 0 } = newTag instanceof ArenaTrapTag ? newTag : {}; @@ -687,13 +696,15 @@ export class Arena { this.trySetWeather(WeatherType.NONE, false); } this.trySetTerrain(TerrainType.NONE, false, true); + this.resetPlayerFaintCount(); this.removeAllTags(); } preloadBgm(): void { - this.scene.loadBgm(this.bgm); + globalScene.loadBgm(this.bgm); } + /** The loop point of any given biome track, read as seconds and milliseconds. */ getBgmLoopPoint(): number { switch (this.biomeType) { case Biome.TOWN: @@ -764,11 +775,17 @@ export class Arena { return 0.000; case Biome.SNOWY_FOREST: return 3.047; + case Biome.END: + return 17.153; default: console.warn(`missing bgm loop-point for biome "${Biome[this.biomeType]}" (=${this.biomeType})`); return 0; } } + + resetPlayerFaintCount(): void { + this.playerFaints = 0; + } } export function getBiomeKey(biome: Biome): string { @@ -811,28 +828,28 @@ export function getBiomeHasProps(biomeType: Biome): boolean { export class ArenaBase extends Phaser.GameObjects.Container { public player: boolean; public biome: Biome; - public propValue: integer; + public propValue: number; public base: Phaser.GameObjects.Sprite; public props: Phaser.GameObjects.Sprite[]; - constructor(scene: BattleScene, player: boolean) { - super(scene, 0, 0); + constructor(player: boolean) { + super(globalScene, 0, 0); this.player = player; - this.base = scene.addFieldSprite(0, 0, "plains_a", undefined, 1); + this.base = globalScene.addFieldSprite(0, 0, "plains_a", undefined, 1); this.base.setOrigin(0, 0); this.props = !player ? new Array(3).fill(null).map(() => { - const ret = scene.addFieldSprite(0, 0, "plains_b", undefined, 1); + const ret = globalScene.addFieldSprite(0, 0, "plains_b", undefined, 1); ret.setOrigin(0, 0); ret.setVisible(false); return ret; }) : []; } - setBiome(biome: Biome, propValue?: integer): void { + setBiome(biome: Biome, propValue?: number): void { const hasProps = getBiomeHasProps(biome); const biomeKey = getBiomeKey(biome); const baseKey = `${biomeKey}_${this.player ? "a" : "b"}`; @@ -841,9 +858,9 @@ export class ArenaBase extends Phaser.GameObjects.Container { this.base.setTexture(baseKey); if (this.base.texture.frameTotal > 1) { - const baseFrameNames = this.scene.anims.generateFrameNames(baseKey, { zeroPad: 4, suffix: ".png", start: 1, end: this.base.texture.frameTotal - 1 }); - if (!(this.scene.anims.exists(baseKey))) { - this.scene.anims.create({ + const baseFrameNames = globalScene.anims.generateFrameNames(baseKey, { zeroPad: 4, suffix: ".png", start: 1, end: this.base.texture.frameTotal - 1 }); + if (!(globalScene.anims.exists(baseKey))) { + globalScene.anims.create({ key: baseKey, frames: baseFrameNames, frameRate: 12, @@ -859,7 +876,7 @@ export class ArenaBase extends Phaser.GameObjects.Container { } if (!this.player) { - (this.scene as BattleScene).executeWithSeedOffset(() => { + globalScene.executeWithSeedOffset(() => { this.propValue = propValue === undefined ? hasProps ? Utils.randSeedInt(8) : 0 : propValue; @@ -868,9 +885,9 @@ export class ArenaBase extends Phaser.GameObjects.Container { prop.setTexture(propKey); if (hasProps && prop.texture.frameTotal > 1) { - const propFrameNames = this.scene.anims.generateFrameNames(propKey, { zeroPad: 4, suffix: ".png", start: 1, end: prop.texture.frameTotal - 1 }); - if (!(this.scene.anims.exists(propKey))) { - this.scene.anims.create({ + const propFrameNames = globalScene.anims.generateFrameNames(propKey, { zeroPad: 4, suffix: ".png", start: 1, end: prop.texture.frameTotal - 1 }); + if (!(globalScene.anims.exists(propKey))) { + globalScene.anims.create({ key: propKey, frames: propFrameNames, frameRate: 12, @@ -885,7 +902,7 @@ export class ArenaBase extends Phaser.GameObjects.Container { prop.setVisible(hasProps && !!(this.propValue & (1 << p))); this.add(prop); }); - }, (this.scene as BattleScene).currentBattle?.waveIndex || 0, (this.scene as BattleScene).waveSeed); + }, globalScene.currentBattle?.waveIndex || 0, globalScene.waveSeed); } } } diff --git a/src/field/damage-number-handler.ts b/src/field/damage-number-handler.ts index 4ddcd2d3ee7..1551edc9697 100644 --- a/src/field/damage-number-handler.ts +++ b/src/field/damage-number-handler.ts @@ -1,7 +1,10 @@ import { TextStyle, addTextObject } from "../ui/text"; -import Pokemon, { DamageResult, HitResult } from "./pokemon"; +import type { DamageResult } from "./pokemon"; +import type Pokemon from "./pokemon"; +import { HitResult } from "./pokemon"; import * as Utils from "../utils"; -import { BattlerIndex } from "../battle"; +import type { BattlerIndex } from "../battle"; +import { globalScene } from "#app/global-scene"; type TextAndShadowArr = [ string | null, string | null ]; @@ -12,16 +15,14 @@ export default class DamageNumberHandler { this.damageNumbers = new Map(); } - add(target: Pokemon, amount: integer, result: DamageResult | HitResult.HEAL = HitResult.EFFECTIVE, critical: boolean = false): void { - const scene = target.scene; - - if (!scene?.damageNumbersMode) { + add(target: Pokemon, amount: number, result: DamageResult | HitResult.HEAL = HitResult.EFFECTIVE, critical: boolean = false): void { + if (!globalScene?.damageNumbersMode) { return; } const battlerIndex = target.getBattlerIndex(); const baseScale = target.getSpriteScale() / 6; - const damageNumber = addTextObject(scene, target.x, -(scene.game.canvas.height / 6) + target.y - target.getSprite().height / 2, Utils.formatStat(amount, true), TextStyle.SUMMARY); + const damageNumber = addTextObject(target.x, -(globalScene.game.canvas.height / 6) + target.y - target.getSprite().height / 2, Utils.formatStat(amount, true), TextStyle.SUMMARY); damageNumber.setName("text-damage-number"); damageNumber.setOrigin(0.5, 1); damageNumber.setScale(baseScale); @@ -58,7 +59,7 @@ export default class DamageNumberHandler { } } - scene.fieldUI.add(damageNumber); + globalScene.fieldUI.add(damageNumber); if (!this.damageNumbers.has(battlerIndex)) { this.damageNumbers.set(battlerIndex, []); @@ -71,14 +72,14 @@ export default class DamageNumberHandler { this.damageNumbers.get(battlerIndex)!.push(damageNumber); - if (scene.damageNumbersMode === 1) { - scene.tweens.add({ + if (globalScene.damageNumbersMode === 1) { + globalScene.tweens.add({ targets: damageNumber, duration: Utils.fixedInt(750), alpha: 1, y: "-=32" }); - scene.tweens.add({ + globalScene.tweens.add({ delay: 375, targets: damageNumber, duration: Utils.fixedInt(625), @@ -94,7 +95,7 @@ export default class DamageNumberHandler { damageNumber.setAlpha(0); - scene.tweens.chain({ + globalScene.tweens.chain({ targets: damageNumber, tweens: [ { diff --git a/src/field/mystery-encounter-intro.ts b/src/field/mystery-encounter-intro.ts index b1b85de9b29..1ea8f16e8f7 100644 --- a/src/field/mystery-encounter-intro.ts +++ b/src/field/mystery-encounter-intro.ts @@ -1,12 +1,12 @@ -import { GameObjects } from "phaser"; -import BattleScene from "#app/battle-scene"; -import MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; -import { Species } from "#enums/species"; +import type { GameObjects } from "phaser"; +import { globalScene } from "#app/global-scene"; +import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import type { Species } from "#enums/species"; import { isNullOrUndefined } from "#app/utils"; import { getSpriteKeysFromSpecies } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; -import PlayAnimationConfig = Phaser.Types.Animations.PlayAnimationConfig; -import { Variant } from "#app/data/variant"; +import type { Variant } from "#app/data/variant"; import { doShinySparkleAnim } from "#app/field/anims"; +import PlayAnimationConfig = Phaser.Types.Animations.PlayAnimationConfig; type KnownFileRoot = | "arenas" @@ -82,8 +82,8 @@ export default class MysteryEncounterIntroVisuals extends Phaser.GameObjects.Con public enterFromRight: boolean; private shinySparkleSprites: { sprite: Phaser.GameObjects.Sprite, variant: Variant }[]; - constructor(scene: BattleScene, encounter: MysteryEncounter) { - super(scene, -72, 76); + constructor(encounter: MysteryEncounter) { + super(globalScene, -72, 76); this.encounter = encounter; this.enterFromRight = encounter.enterIntroVisualsFromRight ?? false; // Shallow copy configs to allow visual config updates at runtime without dirtying master copy of Encounter @@ -106,16 +106,16 @@ export default class MysteryEncounterIntroVisuals extends Phaser.GameObjects.Con } const getSprite = (spriteKey: string, hasShadow?: boolean, yShadow?: number) => { - const ret = this.scene.addFieldSprite(0, 0, spriteKey); + const ret = globalScene.addFieldSprite(0, 0, spriteKey); ret.setOrigin(0.5, 1); - ret.setPipeline(this.scene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], hasShadow: !!hasShadow, yShadowOffset: yShadow ?? 0 }); + ret.setPipeline(globalScene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], hasShadow: !!hasShadow, yShadowOffset: yShadow ?? 0 }); return ret; }; const getItemSprite = (spriteKey: string, hasShadow?: boolean, yShadow?: number) => { - const icon = this.scene.add.sprite(-19, 2, "items", spriteKey); + const icon = globalScene.add.sprite(-19, 2, "items", spriteKey); icon.setOrigin(0.5, 1); - icon.setPipeline(this.scene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], hasShadow: !!hasShadow, yShadowOffset: yShadow ?? 0 }); + icon.setPipeline(globalScene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], hasShadow: !!hasShadow, yShadowOffset: yShadow ?? 0 }); return icon; }; @@ -128,7 +128,7 @@ export default class MysteryEncounterIntroVisuals extends Phaser.GameObjects.Con const spacingValue = Math.round((maxX - minX) / Math.max(this.spriteConfigs.filter(s => !s.x && !s.y).length, 1)); this.shinySparkleSprites = []; - const shinySparkleSprites = scene.add.container(0, 0); + const shinySparkleSprites = globalScene.add.container(0, 0); this.spriteConfigs?.forEach((config) => { const { spriteKey, isItem, hasShadow, scale, x, y, yShadow, alpha, isPokemon, isShiny, variant } = config; @@ -151,7 +151,7 @@ export default class MysteryEncounterIntroVisuals extends Phaser.GameObjects.Con tintSprite.setPipelineData("shiny", true); tintSprite.setPipelineData("variant", variant); // Create Sprite for shiny Sparkle - pokemonShinySparkle = scene.add.sprite(sprite.x, sprite.y, "shiny"); + pokemonShinySparkle = globalScene.add.sprite(sprite.x, sprite.y, "shiny"); pokemonShinySparkle.setOrigin(0.5, 1); pokemonShinySparkle.setVisible(false); this.shinySparkleSprites.push({ sprite: pokemonShinySparkle, variant: variant ?? 0 }); @@ -215,20 +215,21 @@ export default class MysteryEncounterIntroVisuals extends Phaser.GameObjects.Con resolve(); } + const shinyPromises: Promise[] = []; this.spriteConfigs.forEach((config) => { if (config.isPokemon) { - this.scene.loadPokemonAtlas(config.spriteKey, config.fileRoot); + globalScene.loadPokemonAtlas(config.spriteKey, config.fileRoot); if (config.isShiny) { - this.scene.loadPokemonVariantAssets(config.spriteKey, config.fileRoot, config.variant); + shinyPromises.push(globalScene.loadPokemonVariantAssets(config.spriteKey, config.fileRoot, config.variant)); } } else if (config.isItem) { - this.scene.loadAtlas("items", ""); + globalScene.loadAtlas("items", ""); } else { - this.scene.loadAtlas(config.spriteKey, config.fileRoot); + globalScene.loadAtlas(config.spriteKey, config.fileRoot); } }); - this.scene.load.once(Phaser.Loader.Events.COMPLETE, () => { + globalScene.load.once(Phaser.Loader.Events.COMPLETE, () => { this.spriteConfigs.every((config) => { if (config.isItem) { return true; @@ -239,11 +240,11 @@ export default class MysteryEncounterIntroVisuals extends Phaser.GameObjects.Con // Ignore warnings for missing frames, because there will be a lot console.warn = () => { }; - const frameNames = this.scene.anims.generateFrameNames(config.spriteKey, { zeroPad: 4, suffix: ".png", start: 1, end: 128 }); + const frameNames = globalScene.anims.generateFrameNames(config.spriteKey, { zeroPad: 4, suffix: ".png", start: 1, end: 128 }); console.warn = originalWarn; - if (!(this.scene.anims.exists(config.spriteKey))) { - this.scene.anims.create({ + if (!(globalScene.anims.exists(config.spriteKey))) { + globalScene.anims.create({ key: config.spriteKey, frames: frameNames, frameRate: 10, @@ -254,11 +255,11 @@ export default class MysteryEncounterIntroVisuals extends Phaser.GameObjects.Con return true; }); - resolve(); + Promise.all(shinyPromises).then(() => resolve()); }); - if (!this.scene.load.isLoading()) { - this.scene.load.start(); + if (!globalScene.load.isLoading()) { + globalScene.load.start(); } }); } @@ -337,8 +338,8 @@ export default class MysteryEncounterIntroVisuals extends Phaser.GameObjects.Con */ playShinySparkles() { for (const sparkleConfig of this.shinySparkleSprites) { - this.scene.time.delayedCall(500, () => { - doShinySparkleAnim(this.scene, sparkleConfig.sprite, sparkleConfig.variant); + globalScene.time.delayedCall(500, () => { + doShinySparkleAnim(sparkleConfig.sprite, sparkleConfig.variant); }); } } @@ -421,7 +422,7 @@ export default class MysteryEncounterIntroVisuals extends Phaser.GameObjects.Con * @param duration * @param ease */ - private tint(sprite, color: number, alpha?: number, duration?: integer, ease?: string): void { + private tint(sprite, color: number, alpha?: number, duration?: number, ease?: string): void { // const tintSprites = this.getTintSprites(); sprite.setTintFill(color); sprite.setVisible(true); @@ -429,7 +430,7 @@ export default class MysteryEncounterIntroVisuals extends Phaser.GameObjects.Con if (duration) { sprite.setAlpha(0); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: sprite, alpha: alpha || 1, duration: duration, @@ -447,7 +448,7 @@ export default class MysteryEncounterIntroVisuals extends Phaser.GameObjects.Con * @param duration * @param ease */ - tintAll(color: number, alpha?: number, duration?: integer, ease?: string): void { + tintAll(color: number, alpha?: number, duration?: number, ease?: string): void { const tintSprites = this.getTintSprites(); tintSprites.map(tintSprite => { this.tint(tintSprite, color, alpha, duration, ease); @@ -460,9 +461,9 @@ export default class MysteryEncounterIntroVisuals extends Phaser.GameObjects.Con * @param duration * @param ease */ - private untint(sprite, duration: integer, ease?: string): void { + private untint(sprite, duration: number, ease?: string): void { if (duration) { - this.scene.tweens.add({ + globalScene.tweens.add({ targets: sprite, alpha: 0, duration: duration, @@ -484,7 +485,7 @@ export default class MysteryEncounterIntroVisuals extends Phaser.GameObjects.Con * @param duration * @param ease */ - untintAll(duration: integer, ease?: string): void { + untintAll(duration: number, ease?: string): void { const tintSprites = this.getTintSprites(); tintSprites.map(tintSprite => { this.untint(tintSprite, duration, ease); @@ -502,10 +503,3 @@ export default class MysteryEncounterIntroVisuals extends Phaser.GameObjects.Con return super.setVisible(value); } } - -/** - * Interface is required so as not to override {@link Phaser.GameObjects.Container.scene} - */ -export default interface MysteryEncounterIntroVisuals { - scene: BattleScene -} diff --git a/src/field/pokemon-sprite-sparkle-handler.ts b/src/field/pokemon-sprite-sparkle-handler.ts index 2c4c295eaa4..d1803cc036e 100644 --- a/src/field/pokemon-sprite-sparkle-handler.ts +++ b/src/field/pokemon-sprite-sparkle-handler.ts @@ -1,14 +1,14 @@ -import BattleScene from "../battle-scene"; +import { globalScene } from "#app/global-scene"; import Pokemon from "./pokemon"; import * as Utils from "../utils"; export default class PokemonSpriteSparkleHandler { private sprites: Set; - setup(scene: BattleScene): void { + setup(): void { this.sprites = new Set(); - scene.tweens.addCounter({ + globalScene.tweens.addCounter({ duration: Utils.fixedInt(200), from: 0, to: 1, @@ -27,6 +27,9 @@ export default class PokemonSpriteSparkleHandler { if (!s.visible || (s.parentContainer instanceof Pokemon && !s.parentContainer.parentContainer)) { continue; } + if (!(s.parentContainer instanceof Pokemon) || !(s.parentContainer as Pokemon).isTerastallized) { + continue; + } const pokemon = s.parentContainer instanceof Pokemon ? s.parentContainer as Pokemon : null; const parent = (pokemon || s).parentContainer; const texture = s.texture; @@ -37,7 +40,7 @@ export default class PokemonSpriteSparkleHandler { const pixel = texture.manager.getPixel(pixelX, pixelY, texture.key, "__BASE"); if (pixel?.alpha) { const [ xOffset, yOffset ] = [ -s.originX * s.width, -s.originY * s.height ]; - const sparkle = (s.scene as BattleScene).addFieldSprite(((pokemon?.x || 0) + s.x + pixelX * ratioX + xOffset), ((pokemon?.y || 0) + s.y + pixelY * ratioY + yOffset), "tera_sparkle"); + const sparkle = globalScene.addFieldSprite(((pokemon?.x || 0) + s.x + pixelX * ratioX + xOffset), ((pokemon?.y || 0) + s.y + pixelY * ratioY + yOffset), "tera_sparkle"); sparkle.pipelineData["ignoreTimeTint"] = s.pipelineData["ignoreTimeTint"]; sparkle.setName("sprite-tera-sparkle"); sparkle.play("tera_sparkle"); diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index fcfc2ff7536..53d4b6c54d2 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1,42 +1,88 @@ import Phaser from "phaser"; -import BattleScene, { AnySound } from "#app/battle-scene"; -import { Variant, VariantSet, variantColorCache } from "#app/data/variant"; +import type { AnySound } from "#app/battle-scene"; +import type BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; +import type { Variant, VariantSet } from "#app/data/variant"; +import { variantColorCache } from "#app/data/variant"; import { variantData } from "#app/data/variant"; import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from "#app/ui/battle-info"; -import Move, { HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, allMoves, MoveCategory, TypelessAttr, CritOnlyAttr, getMoveTargets, OneHitKOAttr, VariableMoveTypeAttr, VariableDefAttr, AttackMove, ModifiedDamageAttr, VariableMoveTypeMultiplierAttr, IgnoreOpponentStatStagesAttr, SacrificialAttr, VariableMoveCategoryAttr, CounterDamageAttr, StatStageChangeAttr, RechargeAttr, IgnoreWeatherTypeDebuffAttr, BypassBurnDamageReductionAttr, SacrificialAttrOnHit, OneHitKOAccuracyAttr, RespectAttackTypeImmunityAttr, MoveTarget, CombinedPledgeStabBoostAttr, VariableMoveTypeChartAttr } from "#app/data/move"; -import { default as PokemonSpecies, PokemonSpeciesForm, getFusedSpeciesName, getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species"; -import { CLASSIC_CANDY_FRIENDSHIP_MULTIPLIER, getStarterValueFriendshipCap, speciesStarterCosts } from "#app/data/balance/starters"; -import { starterPassiveAbilities } from "#app/data/balance/passives"; -import { Constructor, isNullOrUndefined, randSeedInt, type nil } from "#app/utils"; +import type Move from "#app/data/move"; +import { + HighCritAttr, + StatChangeBeforeDmgCalcAttr, + HitsTagAttr, + applyMoveAttrs, + FixedDamageAttr, + VariableAtkAttr, + allMoves, + MoveCategory, + TypelessAttr, + CritOnlyAttr, + getMoveTargets, + OneHitKOAttr, + VariableMoveTypeAttr, + VariableDefAttr, + AttackMove, + ModifiedDamageAttr, + VariableMoveTypeMultiplierAttr, + IgnoreOpponentStatStagesAttr, + SacrificialAttr, + VariableMoveCategoryAttr, + CounterDamageAttr, + StatStageChangeAttr, + RechargeAttr, + IgnoreWeatherTypeDebuffAttr, + BypassBurnDamageReductionAttr, + SacrificialAttrOnHit, + OneHitKOAccuracyAttr, + RespectAttackTypeImmunityAttr, + MoveTarget, + CombinedPledgeStabBoostAttr, + VariableMoveTypeChartAttr, + HpSplitAttr +} from "#app/data/move"; +import type { PokemonSpeciesForm } from "#app/data/pokemon-species"; +import { default as PokemonSpecies, getFusedSpeciesName, getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species"; +import { getStarterValueFriendshipCap, speciesStarterCosts } from "#app/data/balance/starters"; +import type { Constructor } from "#app/utils"; +import { isNullOrUndefined, randSeedInt, type nil } from "#app/utils"; import * as Utils from "#app/utils"; -import { TypeDamageMultiplier, getTypeDamageMultiplier, getTypeRgb } from "#app/data/type"; +import type { TypeDamageMultiplier } from "#app/data/type"; +import { getTypeDamageMultiplier, getTypeRgb } from "#app/data/type"; import { Type } from "#enums/type"; import { getLevelTotalExp } from "#app/data/exp"; import { Stat, type PermanentStat, type BattleStat, type EffectiveStat, PERMANENT_STATS, BATTLE_STATS, EFFECTIVE_STATS } from "#enums/stat"; -import { DamageMoneyRewardModifier, EnemyDamageBoosterModifier, EnemyDamageReducerModifier, EnemyEndureChanceModifier, EnemyFusionChanceModifier, HiddenAbilityRateBoosterModifier, BaseStatModifier, PokemonFriendshipBoosterModifier, PokemonHeldItemModifier, PokemonNatureWeightModifier, ShinyRateBoosterModifier, SurviveDamageModifier, TempStatStageBoosterModifier, TempCritBoosterModifier, StatBoosterModifier, CritBoosterModifier, TerastallizeModifier, PokemonBaseStatFlatModifier, PokemonBaseStatTotalModifier, PokemonIncrementingStatModifier, EvoTrackerModifier, PokemonMultiHitModifier } from "#app/modifier/modifier"; +import { DamageMoneyRewardModifier, EnemyDamageBoosterModifier, EnemyDamageReducerModifier, EnemyEndureChanceModifier, EnemyFusionChanceModifier, HiddenAbilityRateBoosterModifier, BaseStatModifier, PokemonFriendshipBoosterModifier, PokemonHeldItemModifier, PokemonNatureWeightModifier, ShinyRateBoosterModifier, SurviveDamageModifier, TempStatStageBoosterModifier, TempCritBoosterModifier, StatBoosterModifier, CritBoosterModifier, PokemonBaseStatFlatModifier, PokemonBaseStatTotalModifier, PokemonIncrementingStatModifier, EvoTrackerModifier, PokemonMultiHitModifier } from "#app/modifier/modifier"; import { PokeballType } from "#enums/pokeball"; import { Gender } from "#app/data/gender"; import { initMoveAnim, loadMoveAnimAssets } from "#app/data/battle-anims"; import { Status, getRandomStatus } from "#app/data/status-effect"; -import { pokemonEvolutions, pokemonPrevolutions, SpeciesFormEvolution, SpeciesEvolutionCondition, FusionSpeciesFormEvolution } from "#app/data/balance/pokemon-evolutions"; +import type { SpeciesFormEvolution, SpeciesEvolutionCondition } from "#app/data/balance/pokemon-evolutions"; +import { pokemonEvolutions, pokemonPrevolutions, FusionSpeciesFormEvolution } from "#app/data/balance/pokemon-evolutions"; import { reverseCompatibleTms, tmSpecies, tmPoolTiers } from "#app/data/balance/tms"; import { BattlerTag, BattlerTagLapseType, EncoreTag, GroundedTag, HighestStatBoostTag, SubstituteTag, TypeImmuneTag, getBattlerTag, SemiInvulnerableTag, TypeBoostTag, MoveRestrictionBattlerTag, ExposedTag, DragonCheerTag, CritBoostTag, TrappedTag, TarShotTag, AutotomizedTag, PowerTrickTag } from "../data/battler-tags"; import { WeatherType } from "#enums/weather-type"; import { ArenaTagSide, NoCritTag, WeakenMoveScreenTag } from "#app/data/arena-tag"; -import { Ability, AbAttr, StatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, IgnoreOpponentStatStagesAbAttr, MoveImmunityAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyStatMultiplierAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr, IgnoreTypeImmunityAbAttr, DamageBoostAbAttr, IgnoreTypeStatusEffectImmunityAbAttr, ConditionalCritAbAttr, applyFieldStatMultiplierAbAttrs, FieldMultiplyStatAbAttr, AddSecondStrikeAbAttr, UserFieldStatusEffectImmunityAbAttr, UserFieldBattlerTagImmunityAbAttr, BattlerTagImmunityAbAttr, MoveTypeChangeAbAttr, FullHpResistTypeAbAttr, applyCheckTrappedAbAttrs, CheckTrappedAbAttr, PostSetStatusAbAttr, applyPostSetStatusAbAttrs, InfiltratorAbAttr, AlliedFieldDamageReductionAbAttr, PostDamageAbAttr, applyPostDamageAbAttrs, CommanderAbAttr, applyPostItemLostAbAttrs, PostItemLostAbAttr } from "#app/data/ability"; -import PokemonData from "#app/system/pokemon-data"; +import type { SuppressAbilitiesTag } from "#app/data/arena-tag"; +import type { Ability, AbAttr } from "#app/data/ability"; +import { StatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, IgnoreOpponentStatStagesAbAttr, MoveImmunityAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyStatMultiplierAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr, IgnoreTypeImmunityAbAttr, DamageBoostAbAttr, IgnoreTypeStatusEffectImmunityAbAttr, ConditionalCritAbAttr, applyFieldStatMultiplierAbAttrs, FieldMultiplyStatAbAttr, AddSecondStrikeAbAttr, UserFieldStatusEffectImmunityAbAttr, UserFieldBattlerTagImmunityAbAttr, BattlerTagImmunityAbAttr, MoveTypeChangeAbAttr, FullHpResistTypeAbAttr, applyCheckTrappedAbAttrs, CheckTrappedAbAttr, PostSetStatusAbAttr, applyPostSetStatusAbAttrs, InfiltratorAbAttr, AlliedFieldDamageReductionAbAttr, PostDamageAbAttr, applyPostDamageAbAttrs, CommanderAbAttr, applyPostItemLostAbAttrs, PostItemLostAbAttr, applyOnGainAbAttrs, PreLeaveFieldAbAttr, applyPreLeaveFieldAbAttrs, applyOnLoseAbAttrs, PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr } from "#app/data/ability"; +import type PokemonData from "#app/system/pokemon-data"; import { BattlerIndex } from "#app/battle"; import { Mode } from "#app/ui/ui"; -import PartyUiHandler, { PartyOption, PartyUiMode } from "#app/ui/party-ui-handler"; +import type { PartyOption } from "#app/ui/party-ui-handler"; +import PartyUiHandler, { PartyUiMode } from "#app/ui/party-ui-handler"; import SoundFade from "phaser3-rex-plugins/plugins/soundfade"; -import { EVOLVE_MOVE, LevelMoves, RELEARN_MOVE } from "#app/data/balance/pokemon-level-moves"; +import type { LevelMoves } from "#app/data/balance/pokemon-level-moves"; +import { EVOLVE_MOVE, RELEARN_MOVE } from "#app/data/balance/pokemon-level-moves"; import { DamageAchv, achvs } from "#app/system/achv"; -import { DexAttr, StarterDataEntry, StarterMoveset } from "#app/system/game-data"; +import type { StarterDataEntry, StarterMoveset } from "#app/system/game-data"; +import { DexAttr } from "#app/system/game-data"; import { QuantizerCelebi, argbFromRgba, rgbaFromArgb } from "@material/material-color-utilities"; import { getNatureStatMultiplier } from "#app/data/nature"; -import { SpeciesFormChange, SpeciesFormChangeActiveTrigger, SpeciesFormChangeMoveLearnedTrigger, SpeciesFormChangePostMoveTrigger, SpeciesFormChangeStatusEffectTrigger } from "#app/data/pokemon-forms"; +import type { SpeciesFormChange } from "#app/data/pokemon-forms"; +import { SpeciesFormChangeActiveTrigger, SpeciesFormChangeLapseTeraTrigger, SpeciesFormChangeMoveLearnedTrigger, SpeciesFormChangePostMoveTrigger, SpeciesFormChangeStatusEffectTrigger } from "#app/data/pokemon-forms"; import { TerrainType } from "#app/data/terrain"; -import { TrainerSlot } from "#app/data/trainer-config"; +import type { TrainerSlot } from "#app/data/trainer-config"; import Overrides from "#app/overrides"; import i18next from "i18next"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; @@ -46,7 +92,7 @@ import { Abilities } from "#enums/abilities"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattleSpec } from "#enums/battle-spec"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { BerryType } from "#enums/berry-type"; +import type { BerryType } from "#enums/berry-type"; import { Biome } from "#enums/biome"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; @@ -59,7 +105,6 @@ import { MoveEndPhase } from "#app/phases/move-end-phase"; import { ObtainStatusEffectPhase } from "#app/phases/obtain-status-effect-phase"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { SwitchSummonPhase } from "#app/phases/switch-summon-phase"; -import { ToggleDoublePositionPhase } from "#app/phases/toggle-double-position-phase"; import { Challenges } from "#enums/challenges"; import { PokemonAnimType } from "#enums/pokemon-anim-type"; import { PLAYER_PARTY_MAX_SIZE } from "#app/constants"; @@ -87,46 +132,50 @@ export enum FieldPosition { } export default abstract class Pokemon extends Phaser.GameObjects.Container { - public id: integer; + public id: number; public name: string; public nickname: string; public species: PokemonSpecies; - public formIndex: integer; - public abilityIndex: integer; + public formIndex: number; + public abilityIndex: number; public passive: boolean; public shiny: boolean; public variant: Variant; public pokeball: PokeballType; protected battleInfo: BattleInfo; - public level: integer; - public exp: integer; - public levelExp: integer; + public level: number; + public exp: number; + public levelExp: number; public gender: Gender; - public hp: integer; - public stats: integer[]; - public ivs: integer[]; + public hp: number; + public stats: number[]; + public ivs: number[]; public nature: Nature; public moveset: (PokemonMove | null)[]; public status: Status | null; - public friendship: integer; - public metLevel: integer; + public friendship: number; + public metLevel: number; public metBiome: Biome | -1; public metSpecies: Species; public metWave: number; - public luck: integer; + public luck: number; public pauseEvolutions: boolean; public pokerus: boolean; public switchOutStatus: boolean; - public evoCounter: integer; + public evoCounter: number; + public teraType: Type; + public isTerastallized: boolean; + public stellarTypesBoosted: Type[]; public fusionSpecies: PokemonSpecies | null; - public fusionFormIndex: integer; - public fusionAbilityIndex: integer; + public fusionFormIndex: number; + public fusionAbilityIndex: number; public fusionShiny: boolean; public fusionVariant: Variant; public fusionGender: Gender; - public fusionLuck: integer; + public fusionLuck: number; public fusionCustomPokemonData: CustomPokemonData | null; + public fusionTeraType: Type; private summonDataPrimer: PokemonSummonData | null; @@ -148,16 +197,16 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { private shinySparkle: Phaser.GameObjects.Sprite; - constructor(scene: BattleScene, x: number, y: number, species: PokemonSpecies, level: integer, abilityIndex?: integer, formIndex?: integer, gender?: Gender, shiny?: boolean, variant?: Variant, ivs?: integer[], nature?: Nature, dataSource?: Pokemon | PokemonData) { - super(scene, x, y); + constructor(x: number, y: number, species: PokemonSpecies, level: number, abilityIndex?: number, formIndex?: number, gender?: Gender, shiny?: boolean, variant?: Variant, ivs?: number[], nature?: Nature, dataSource?: Pokemon | PokemonData) { + super(globalScene, x, y); if (!species.isObtainable() && this.isPlayer()) { throw `Cannot create a player Pokemon for species '${species.getName(formIndex)}'`; } - const hiddenAbilityChance = new Utils.IntegerHolder(BASE_HIDDEN_ABILITY_CHANCE); + const hiddenAbilityChance = new Utils.NumberHolder(BASE_HIDDEN_ABILITY_CHANCE); if (!this.hasTrainer()) { - this.scene.applyModifiers(HiddenAbilityRateBoosterModifier, true, hiddenAbilityChance); + globalScene.applyModifiers(HiddenAbilityRateBoosterModifier, true, hiddenAbilityChance); } this.species = species; @@ -224,8 +273,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.fusionGender = dataSource.fusionGender; this.fusionLuck = dataSource.fusionLuck; this.fusionCustomPokemonData = dataSource.fusionCustomPokemonData; + this.fusionTeraType = dataSource.fusionTeraType; this.usedTMs = dataSource.usedTMs ?? []; this.customPokemonData = new CustomPokemonData(dataSource.customPokemonData); + this.teraType = dataSource.teraType; + this.isTerastallized = dataSource.isTerastallized; + this.stellarTypesBoosted = dataSource.stellarTypesBoosted ?? []; } else { this.id = Utils.randSeedInt(4294967296); this.ivs = ivs || Utils.getIvsFromId(this.id); @@ -235,7 +288,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } if (this.formIndex === undefined) { - this.formIndex = this.scene.getSpeciesFormIndex(species, this.gender, this.nature, this.isPlayer()); + this.formIndex = globalScene.getSpeciesFormIndex(species, this.gender, this.nature, this.isPlayer()); } if (this.shiny === undefined) { @@ -256,15 +309,15 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.friendship = species.baseFriendship; this.metLevel = level; - this.metBiome = scene.currentBattle ? scene.arena.biomeType : -1; + this.metBiome = globalScene.currentBattle ? globalScene.arena.biomeType : -1; this.metSpecies = species.speciesId; - this.metWave = scene.currentBattle ? scene.currentBattle.waveIndex : -1; + this.metWave = globalScene.currentBattle ? globalScene.currentBattle.waveIndex : -1; this.pokerus = false; if (level > 1) { - const fused = new Utils.BooleanHolder(scene.gameMode.isSplicedOnly); + const fused = new Utils.BooleanHolder(globalScene.gameMode.isSplicedOnly); if (!fused.value && !this.isPlayer() && !this.hasTrainer()) { - this.scene.applyModifier(EnemyFusionChanceModifier, false, fused); + globalScene.applyModifier(EnemyFusionChanceModifier, false, fused); } if (fused.value) { @@ -274,6 +327,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } this.luck = (this.shiny ? this.variant + 1 : 0) + (this.fusionShiny ? this.fusionVariant + 1 : 0); this.fusionLuck = this.luck; + + this.teraType = Utils.randSeedItem(this.getTypes(false, false, true)); + this.isTerastallized = false; + this.stellarTypesBoosted = []; } this.generateName(); @@ -305,12 +362,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.initBattleInfo(); - this.scene.fieldUI.addAt(this.battleInfo, 0); + globalScene.fieldUI.addAt(this.battleInfo, 0); const getSprite = (hasShadow?: boolean) => { - const ret = this.scene.addPokemonSprite(this, 0, 0, `pkmn__${this.isPlayer() ? "back__" : ""}sub`, undefined, true); + const ret = globalScene.addPokemonSprite(this, 0, 0, `pkmn__${this.isPlayer() ? "back__" : ""}sub`, undefined, true); ret.setOrigin(0.5, 1); - ret.setPipeline(this.scene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], hasShadow: !!hasShadow, teraColor: getTypeRgb(this.getTeraType()) }); + ret.setPipeline(globalScene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], hasShadow: !!hasShadow, teraColor: getTypeRgb(this.getTeraType()), isTerastallized: this.isTerastallized }); return ret; }; @@ -332,13 +389,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { abstract initBattleInfo(): void; isOnField(): boolean { - if (!this.scene) { + if (!globalScene) { return false; } if (this.switchOutStatus) { return false; } - return this.scene.field.getIndex(this) > -1; + return globalScene.field.getIndex(this) > -1; } /** @@ -366,7 +423,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { */ public isAllowedInChallenge(): boolean { const challengeAllowed = new Utils.BooleanHolder(true); - applyChallenges(this.scene.gameMode, ChallengeType.POKEMON_IN_BATTLE, this, challengeAllowed); + applyChallenges(globalScene.gameMode, ChallengeType.POKEMON_IN_BATTLE, this, challengeAllowed); return challengeAllowed.value; } @@ -376,7 +433,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @returns `true` if the pokemon is "active". Returns `false` if there is no active {@linkcode BattleScene} */ public isActive(onField: boolean = false): boolean { - if (!this.scene) { + if (!globalScene) { return false; } return this.isAllowedInBattle() && (!onField || this.isOnField()); @@ -387,7 +444,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ret |= this.gender !== Gender.FEMALE ? DexAttr.MALE : DexAttr.FEMALE; ret |= !this.shiny ? DexAttr.NON_SHINY : DexAttr.SHINY; ret |= this.variant >= 2 ? DexAttr.VARIANT_3 : this.variant === 1 ? DexAttr.VARIANT_2 : DexAttr.DEFAULT_VARIANT; - ret |= this.scene.gameData.getFormAttr(this.formIndex); + ret |= globalScene.gameData.getFormAttr(this.formIndex); return ret; } @@ -411,33 +468,33 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { abstract hasTrainer(): boolean; - abstract getFieldIndex(): integer; + abstract getFieldIndex(): number; abstract getBattlerIndex(): BattlerIndex; loadAssets(ignoreOverride: boolean = true): Promise { return new Promise(resolve => { const moveIds = this.getMoveset().map(m => m!.getMove().id); // TODO: is this bang correct? - Promise.allSettled(moveIds.map(m => initMoveAnim(this.scene, m))) + Promise.allSettled(moveIds.map(m => initMoveAnim(m))) .then(() => { - loadMoveAnimAssets(this.scene, moveIds); - this.getSpeciesForm().loadAssets(this.scene, this.getGender() === Gender.FEMALE, this.formIndex, this.shiny, this.variant); + loadMoveAnimAssets(moveIds); + this.getSpeciesForm().loadAssets(this.getGender() === Gender.FEMALE, this.formIndex, this.shiny, this.variant); if (this.isPlayer() || this.getFusionSpeciesForm()) { - this.scene.loadPokemonAtlas(this.getBattleSpriteKey(true, ignoreOverride), this.getBattleSpriteAtlasPath(true, ignoreOverride)); + globalScene.loadPokemonAtlas(this.getBattleSpriteKey(true, ignoreOverride), this.getBattleSpriteAtlasPath(true, ignoreOverride)); } if (this.getFusionSpeciesForm()) { - this.getFusionSpeciesForm().loadAssets(this.scene, this.getFusionGender() === Gender.FEMALE, this.fusionFormIndex, this.fusionShiny, this.fusionVariant); - this.scene.loadPokemonAtlas(this.getFusionBattleSpriteKey(true, ignoreOverride), this.getFusionBattleSpriteAtlasPath(true, ignoreOverride)); + this.getFusionSpeciesForm().loadAssets(this.getFusionGender() === Gender.FEMALE, this.fusionFormIndex, this.fusionShiny, this.fusionVariant); + globalScene.loadPokemonAtlas(this.getFusionBattleSpriteKey(true, ignoreOverride), this.getFusionBattleSpriteAtlasPath(true, ignoreOverride)); } - this.scene.load.once(Phaser.Loader.Events.COMPLETE, () => { + globalScene.load.once(Phaser.Loader.Events.COMPLETE, () => { if (this.isPlayer()) { const originalWarn = console.warn; // Ignore warnings for missing frames, because there will be a lot console.warn = () => {}; - const battleFrameNames = this.scene.anims.generateFrameNames(this.getBattleSpriteKey(), { zeroPad: 4, suffix: ".png", start: 1, end: 400 }); + const battleFrameNames = globalScene.anims.generateFrameNames(this.getBattleSpriteKey(), { zeroPad: 4, suffix: ".png", start: 1, end: 400 }); console.warn = originalWarn; - if (!(this.scene.anims.exists(this.getBattleSpriteKey()))) { - this.scene.anims.create({ + if (!(globalScene.anims.exists(this.getBattleSpriteKey()))) { + globalScene.anims.create({ key: this.getBattleSpriteKey(), frames: battleFrameNames, frameRate: 10, @@ -458,7 +515,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return new Promise(async resolve => { const battleSpritePath = this.getBattleSpriteAtlasPath(isBackSprite, ignoreOverride).replace("variant/", "").replace(/_[1-3]$/, ""); let config = variantData; - const useExpSprite = this.scene.experimentalSprites && this.scene.hasExpSprite(this.getBattleSpriteKey(isBackSprite, ignoreOverride)); + const useExpSprite = globalScene.experimentalSprites && globalScene.hasExpSprite(this.getBattleSpriteKey(isBackSprite, ignoreOverride)); battleSpritePath.split("/").map(p => config ? config = config[p] : null); const variantSet: VariantSet = config as VariantSet; if (variantSet && variantSet[this.variant] === 1) { @@ -479,8 +536,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { updateFusionPaletteAndResolve(); } }); - if (!this.scene.load.isLoading()) { - this.scene.load.start(); + if (!globalScene.load.isLoading()) { + globalScene.load.start(); } }); }); @@ -512,7 +569,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { */ async populateVariantColorCache(cacheKey: string, useExpSprite: boolean, battleSpritePath: string) { const spritePath = `./images/pokemon/variant/${useExpSprite ? "exp/" : ""}${battleSpritePath}.json`; - return this.scene.cachedFetch(spritePath).then(res => { + return globalScene.cachedFetch(spritePath).then(res => { // Prevent the JSON from processing if it failed to load if (!res.ok) { return this.fallbackVariantColor(cacheKey, res.url, useExpSprite, battleSpritePath, res.status, res.statusText); @@ -667,10 +724,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } getHeldItems(): PokemonHeldItemModifier[] { - if (!this.scene) { + if (!globalScene) { return []; } - return this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier && m.pokemonId === this.id, this.isPlayer()) as PokemonHeldItemModifier[]; + return globalScene.findModifiers(m => m instanceof PokemonHeldItemModifier && m.pokemonId === this.id, this.isPlayer()) as PokemonHeldItemModifier[]; } updateScale(): void { @@ -678,12 +735,15 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } updateSpritePipelineData(): void { - [ this.getSprite(), this.getTintSprite() ].filter(s => !!s).map(s => s.pipelineData["teraColor"] = getTypeRgb(this.getTeraType())); + [ this.getSprite(), this.getTintSprite() ].filter(s => !!s).map(s => { + s.pipelineData["teraColor"] = getTypeRgb(this.getTeraType()); + s.pipelineData["isTerastallized"] = this.isTerastallized; + }); this.updateInfo(true); } initShinySparkle(): void { - const shinySparkle = this.scene.addFieldSprite(0, 0, "shiny"); + const shinySparkle = globalScene.addFieldSprite(0, 0, "shiny"); shinySparkle.setVisible(false); shinySparkle.setOrigin(0.5, 1); this.add(shinySparkle); @@ -751,7 +811,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } // During the Pokemon's MoveEffect phase, the offset is removed to put the Pokemon "in focus" - const currentPhase = this.scene.getCurrentPhase(); + const currentPhase = globalScene.getCurrentPhase(); if (currentPhase instanceof MoveEffectPhase && currentPhase.getPokemon() === this) { return false; } @@ -769,7 +829,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } - setFieldPosition(fieldPosition: FieldPosition, duration?: integer): Promise { + setFieldPosition(fieldPosition: FieldPosition, duration?: number): Promise { return new Promise(resolve => { if (fieldPosition === this.fieldPosition) { resolve(); @@ -796,7 +856,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (subTag?.sprite) { targets.push(subTag.sprite); } - this.scene.tweens.add({ + globalScene.tweens.add({ targets: targets, x: (_target, _key, value: number) => value + relX, y: (_target, _key, value: number) => value + relY, @@ -900,10 +960,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @returns the final critical-hit stage value */ getCritStage(source: Pokemon, move: Move): number { - const critStage = new Utils.IntegerHolder(0); + const critStage = new Utils.NumberHolder(0); applyMoveAttrs(HighCritAttr, source, this, move, critStage); - this.scene.applyModifiers(CritBoosterModifier, source.isPlayer(), source, critStage); - this.scene.applyModifiers(TempCritBoosterModifier, source.isPlayer(), critStage); + globalScene.applyModifiers(CritBoosterModifier, source.isPlayer(), source, critStage); + globalScene.applyModifiers(TempCritBoosterModifier, source.isPlayer(), critStage); const bonusCrit = new Utils.BooleanHolder(false); //@ts-ignore if (applyAbAttrs(BonusCritAbAttr, source, null, false, bonusCrit)) { // TODO: resolve ts-ignore. This is a promise. Checking a promise is bogus. @@ -935,15 +995,18 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param ignoreOppAbility during an attack, determines whether the opposing Pokemon's abilities should be ignored during the stat calculation. * @param isCritical determines whether a critical hit has occurred or not (`false` by default) * @param simulated if `true`, nullifies any effects that produce any changes to game state from triggering + * @param ignoreHeldItems determines whether this Pokemon's held items should be ignored during the stat calculation, default `false` * @returns the final in-battle value of a stat */ - getEffectiveStat(stat: EffectiveStat, opponent?: Pokemon, move?: Move, ignoreAbility: boolean = false, ignoreOppAbility: boolean = false, isCritical: boolean = false, simulated: boolean = true): integer { + getEffectiveStat(stat: EffectiveStat, opponent?: Pokemon, move?: Move, ignoreAbility: boolean = false, ignoreOppAbility: boolean = false, isCritical: boolean = false, simulated: boolean = true, ignoreHeldItems: boolean = false): number { const statValue = new Utils.NumberHolder(this.getStat(stat, false)); - this.scene.applyModifiers(StatBoosterModifier, this.isPlayer(), this, stat, statValue); + if (!ignoreHeldItems) { + globalScene.applyModifiers(StatBoosterModifier, this.isPlayer(), this, stat, statValue); + } // The Ruin abilities here are never ignored, but they reveal themselves on summon anyway const fieldApplied = new Utils.BooleanHolder(false); - for (const pokemon of this.scene.getField(true)) { + for (const pokemon of globalScene.getField(true)) { applyFieldStatMultiplierAbAttrs(FieldMultiplyStatAbAttr, pokemon, stat, statValue, this, fieldApplied, simulated); if (fieldApplied.value) { break; @@ -953,7 +1016,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { applyStatMultiplierAbAttrs(StatMultiplierAbAttr, this, stat, statValue, simulated); } - let ret = statValue.value * this.getStatStageMultiplier(stat, opponent, move, ignoreOppAbility, isCritical, simulated); + let ret = statValue.value * this.getStatStageMultiplier(stat, opponent, move, ignoreOppAbility, isCritical, simulated, ignoreHeldItems); switch (stat) { case Stat.ATK: @@ -962,23 +1025,23 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } break; case Stat.DEF: - if (this.isOfType(Type.ICE) && this.scene.arena.weather?.weatherType === WeatherType.SNOW) { + if (this.isOfType(Type.ICE) && globalScene.arena.weather?.weatherType === WeatherType.SNOW) { ret *= 1.5; } break; case Stat.SPATK: break; case Stat.SPDEF: - if (this.isOfType(Type.ROCK) && this.scene.arena.weather?.weatherType === WeatherType.SANDSTORM) { + if (this.isOfType(Type.ROCK) && globalScene.arena.weather?.weatherType === WeatherType.SANDSTORM) { ret *= 1.5; } break; case Stat.SPD: const side = this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; - if (this.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, side)) { + if (globalScene.arena.getTagOnSide(ArenaTagType.TAILWIND, side)) { ret *= 2; } - if (this.scene.arena.getTagOnSide(ArenaTagType.GRASS_WATER_PLEDGE, side)) { + if (globalScene.arena.getTagOnSide(ArenaTagType.GRASS_WATER_PLEDGE, side)) { ret >>= 2; } @@ -1011,10 +1074,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const baseStats = this.calculateBaseStats(); // Using base stats, calculate and store stats one by one for (const s of PERMANENT_STATS) { - const statHolder = new Utils.IntegerHolder(Math.floor(((2 * baseStats[s] + this.ivs[s]) * this.level) * 0.01)); + const statHolder = new Utils.NumberHolder(Math.floor(((2 * baseStats[s] + this.ivs[s]) * this.level) * 0.01)); if (s === Stat.HP) { statHolder.value = statHolder.value + this.level + 10; - this.scene.applyModifier(PokemonIncrementingStatModifier, this.isPlayer(), this, s, statHolder); + globalScene.applyModifier(PokemonIncrementingStatModifier, this.isPlayer(), this, s, statHolder); if (this.hasAbility(Abilities.WONDER_GUARD, false, true)) { statHolder.value = 1; } @@ -1029,11 +1092,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } else { statHolder.value += 5; const natureStatMultiplier = new Utils.NumberHolder(getNatureStatMultiplier(this.getNature(), s)); - this.scene.applyModifier(PokemonNatureWeightModifier, this.isPlayer(), this, natureStatMultiplier); + globalScene.applyModifier(PokemonNatureWeightModifier, this.isPlayer(), this, natureStatMultiplier); if (natureStatMultiplier.value !== 1) { statHolder.value = Math.max(Math[natureStatMultiplier.value > 1 ? "ceil" : "floor"](statHolder.value * natureStatMultiplier.value), 1); } - this.scene.applyModifier(PokemonIncrementingStatModifier, this.isPlayer(), this, s, statHolder); + globalScene.applyModifier(PokemonIncrementingStatModifier, this.isPlayer(), this, s, statHolder); } statHolder.value = Phaser.Math.Clamp(statHolder.value, 1, Number.MAX_SAFE_INTEGER); @@ -1044,22 +1107,25 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { calculateBaseStats(): number[] { const baseStats = this.getSpeciesForm(true).baseStats.slice(0); + applyChallenges(globalScene.gameMode, ChallengeType.FLIP_STAT, this, baseStats); // Shuckle Juice - this.scene.applyModifiers(PokemonBaseStatTotalModifier, this.isPlayer(), this, baseStats); + globalScene.applyModifiers(PokemonBaseStatTotalModifier, this.isPlayer(), this, baseStats); // Old Gateau - this.scene.applyModifiers(PokemonBaseStatFlatModifier, this.isPlayer(), this, baseStats); + globalScene.applyModifiers(PokemonBaseStatFlatModifier, this.isPlayer(), this, baseStats); if (this.isFusion()) { const fusionBaseStats = this.getFusionSpeciesForm(true).baseStats; + applyChallenges(globalScene.gameMode, ChallengeType.FLIP_STAT, this, fusionBaseStats); + for (const s of PERMANENT_STATS) { baseStats[s] = Math.ceil((baseStats[s] + fusionBaseStats[s]) / 2); } - } else if (this.scene.gameMode.isSplicedOnly) { + } else if (globalScene.gameMode.isSplicedOnly) { for (const s of PERMANENT_STATS) { baseStats[s] = Math.ceil(baseStats[s] / 2); } } // Vitamins - this.scene.applyModifiers(BaseStatModifier, this.isPlayer(), this, baseStats); + globalScene.applyModifiers(BaseStatModifier, this.isPlayer(), this, baseStats); return baseStats; } @@ -1090,11 +1156,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return this.hp >= this.getMaxHp(); } - getMaxHp(): integer { + getMaxHp(): number { return this.getStat(Stat.HP); } - getInverseHp(): integer { + /** Returns the amount of hp currently missing from this {@linkcode Pokemon} (max - current) */ + getInverseHp(): number { return this.getMaxHp() - this.hp; } @@ -1139,7 +1206,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return !this.isFusion() ? this.variant : Math.max(this.variant, this.fusionVariant) as Variant; } - getLuck(): integer { + getLuck(): number { return this.luck + (this.isFusion() ? this.fusionLuck : 0); } @@ -1156,6 +1223,20 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return this.fusionSpecies?.speciesId === species; } + /** + * Checks if the {@linkcode Pokemon} has is the specified {@linkcode Species} or is fused with it. + * @param species the pokemon {@linkcode Species} to check + * @param formKey If provided, requires the species to be in that form + * @returns `true` if the pokemon is the species or is fused with it, `false` otherwise + */ + hasSpecies(species: Species, formKey?: string): boolean { + if (Utils.isNullOrUndefined(formKey)) { + return this.species.speciesId === species || this.fusionSpecies?.speciesId === species; + } + + return (this.species.speciesId === species && this.getFormKey() === formKey) || (this.fusionSpecies?.speciesId === species && this.getFusionFormKey() === formKey); + } + abstract isBoss(): boolean; getMoveset(ignoreOverride?: boolean): (PokemonMove | null)[] { @@ -1193,7 +1274,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const species = this.metSpecies in speciesEggMoves ? this.metSpecies : this.getSpeciesForm(true).getRootSpeciesId(true); if (species in speciesEggMoves) { for (let i = 0; i < 4; i++) { - if (this.scene.gameData.starterData[species].eggMoves & (1 << i)) { + if (globalScene.gameData.starterData[species].eggMoves & (1 << i)) { moves.push(speciesEggMoves[species][i]); } } @@ -1212,7 +1293,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { */ public getLearnableLevelMoves(): Moves[] { let levelMoves = this.getLevelMoves(1, true, false, true).map(lm => lm[1]); - if (this.metBiome === -1 && !this.scene.gameMode.isFreshStartChallenge() && !this.scene.gameMode.isDaily) { + if (this.metBiome === -1 && !globalScene.gameMode.isFreshStartChallenge() && !globalScene.gameMode.isDaily) { levelMoves = this.getUnlockedEggMoves().concat(levelMoves); } if (Array.isArray(this.usedTMs) && this.usedTMs.length > 0) { @@ -1232,9 +1313,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { public getTypes(includeTeraType = false, forDefend: boolean = false, ignoreOverride: boolean = false): Type[] { const types: Type[] = []; - if (includeTeraType) { + if (includeTeraType && this.isTerastallized) { const teraType = this.getTeraType(); - if (teraType !== Type.UNKNOWN) { + if (this.isTerastallized && !(forDefend && teraType === Type.STELLAR)) { // Stellar tera uses its original types defensively types.push(teraType); if (forDefend) { return types; @@ -1245,52 +1326,45 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (!types.length || !includeTeraType) { if (!ignoreOverride && this.summonData?.types && this.summonData.types.length > 0) { this.summonData.types.forEach(t => types.push(t)); - } else if (this.customPokemonData.types && this.customPokemonData.types.length > 0) { - // "Permanent" override for a Pokemon's normal types, currently only used by Mystery Encounters - types.push(this.customPokemonData.types[0]); - - // Fusing a Pokemon onto something with "permanently changed" types will still apply the fusion's types as normal - const fusionSpeciesForm = this.getFusionSpeciesForm(ignoreOverride); - if (fusionSpeciesForm) { - // Check if the fusion Pokemon also had "permanently changed" types - const fusionMETypes = this.fusionCustomPokemonData?.types; - if (fusionMETypes && fusionMETypes.length >= 2 && fusionMETypes[1] !== types[0]) { - types.push(fusionMETypes[1]); - } else if (fusionMETypes && fusionMETypes.length === 1 && fusionMETypes[0] !== types[0]) { - types.push(fusionMETypes[0]); - } else if (fusionSpeciesForm.type2 !== null && fusionSpeciesForm.type2 !== types[0]) { - types.push(fusionSpeciesForm.type2); - } else if (fusionSpeciesForm.type1 !== types[0]) { - types.push(fusionSpeciesForm.type1); - } - } - - if (types.length === 1 && this.customPokemonData.types.length >= 2) { - types.push(this.customPokemonData.types[1]); - } } else { const speciesForm = this.getSpeciesForm(ignoreOverride); - - types.push(speciesForm.type1); - const fusionSpeciesForm = this.getFusionSpeciesForm(ignoreOverride); + const customTypes = this.customPokemonData.types?.length > 0; + + // First type, checking for "permanently changed" types from ME + const firstType = (customTypes && this.customPokemonData.types[0] !== Type.UNKNOWN) ? this.customPokemonData.types[0] : speciesForm.type1; + types.push(firstType); + + // Second type + let secondType: Type = Type.UNKNOWN; + if (fusionSpeciesForm) { - // Check if the fusion Pokemon also had "permanently changed" types - // Otherwise, use standard fusion type logic - const fusionMETypes = this.fusionCustomPokemonData?.types; - if (fusionMETypes && fusionMETypes.length >= 2 && fusionMETypes[1] !== types[0]) { - types.push(fusionMETypes[1]); - } else if (fusionMETypes && fusionMETypes.length === 1 && fusionMETypes[0] !== types[0]) { - types.push(fusionMETypes[0]); - } else if (fusionSpeciesForm.type2 !== null && fusionSpeciesForm.type2 !== speciesForm.type1) { - types.push(fusionSpeciesForm.type2); - } else if (fusionSpeciesForm.type1 !== speciesForm.type1) { - types.push(fusionSpeciesForm.type1); + // Check if the fusion Pokemon also has permanent changes from ME when determining the fusion types + const fusionType1 = (this.fusionCustomPokemonData?.types && this.fusionCustomPokemonData.types.length > 0 && this.fusionCustomPokemonData.types[0] !== Type.UNKNOWN) + ? this.fusionCustomPokemonData.types[0] : fusionSpeciesForm.type1; + const fusionType2 = (this.fusionCustomPokemonData?.types && this.fusionCustomPokemonData.types.length > 1 && this.fusionCustomPokemonData.types[1] !== Type.UNKNOWN) + ? this.fusionCustomPokemonData.types[1] : fusionSpeciesForm.type2; + + // Assign second type if the fusion can provide one + if (fusionType2 !== null && fusionType2 !== types[0]) { + secondType = fusionType2; + } else if (fusionType1 !== types[0]) { + secondType = fusionType1; } + + + if (secondType === Type.UNKNOWN && Utils.isNullOrUndefined(fusionType2)) { // If second pokemon was monotype and shared its primary type + secondType = (customTypes && this.customPokemonData.types.length > 1 && this.customPokemonData.types[1] !== Type.UNKNOWN) + ? this.customPokemonData.types[1] : (speciesForm.type2 ?? Type.UNKNOWN); + } + } else { + // If not a fusion, just get the second type from the species, checking for permanent changes from ME + secondType = (customTypes && this.customPokemonData.types.length > 1 && this.customPokemonData.types[1] !== Type.UNKNOWN) + ? this.customPokemonData.types[1] : (speciesForm.type2 ?? Type.UNKNOWN); } - if (types.length === 1 && speciesForm.type2 !== null) { - types.push(speciesForm.type2); + if (secondType !== Type.UNKNOWN) { + types.push(secondType); } } } @@ -1386,11 +1460,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return allAbilities[this.customPokemonData.passive]; } - let starterSpeciesId = this.species.speciesId; - while (pokemonPrevolutions.hasOwnProperty(starterSpeciesId)) { - starterSpeciesId = pokemonPrevolutions[starterSpeciesId]; - } - return allAbilities[starterPassiveAbilities[starterSpeciesId]]; + return allAbilities[this.species.getPassiveAbility(this.formIndex)]; } /** @@ -1416,6 +1486,30 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return abilityAttrs; } + /** + * Sets the {@linkcode Pokemon}'s ability and activates it if it normally activates on summon + * + * Also clears primal weather if it is from the ability being changed + * @param ability New Ability + */ + public setTempAbility(ability: Ability, passive: boolean = false): void { + applyOnLoseAbAttrs(this, passive); + if (passive) { + this.summonData.passiveAbility = ability.id; + } else { + this.summonData.ability = ability.id; + } + applyOnGainAbAttrs(this, passive); + } + + /** + * Suppresses an ability and calls its onlose attributes + */ + public suppressAbility() { + [ true, false ].forEach((passive) => applyOnLoseAbAttrs(this, passive)); + this.summonData.abilitySuppressed = true; + } + /** * Checks if a pokemon has a passive either from: * - bought with starter candy @@ -1425,13 +1519,21 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { */ public hasPassive(): boolean { // returns override if valid for current case - if ((Overrides.PASSIVE_ABILITY_OVERRIDE !== Abilities.NONE && this.isPlayer()) - || (Overrides.OPP_PASSIVE_ABILITY_OVERRIDE !== Abilities.NONE && !this.isPlayer())) { + if ( + (Overrides.HAS_PASSIVE_ABILITY_OVERRIDE === false && this.isPlayer()) + || (Overrides.OPP_HAS_PASSIVE_ABILITY_OVERRIDE === false && !this.isPlayer()) + ) { + return false; + } + if ( + ((Overrides.PASSIVE_ABILITY_OVERRIDE !== Abilities.NONE || Overrides.HAS_PASSIVE_ABILITY_OVERRIDE) && this.isPlayer()) + || ((Overrides.OPP_PASSIVE_ABILITY_OVERRIDE !== Abilities.NONE || Overrides.OPP_HAS_PASSIVE_ABILITY_OVERRIDE) && !this.isPlayer()) + ) { return true; } // Classic Final boss and Endless Minor/Major bosses do not have passive - const { currentBattle, gameMode } = this.scene; + const { currentBattle, gameMode } = globalScene; const waveIndex = currentBattle?.waveIndex; if (this instanceof EnemyPokemon && (currentBattle?.battleSpec === BattleSpec.FINAL_BOSS || @@ -1458,24 +1560,22 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (this.isFusion() && ability.hasAttr(NoFusionAbilityAbAttr)) { return false; } - const arena = this.scene?.arena; + const arena = globalScene?.arena; if (arena.ignoreAbilities && arena.ignoringEffectSource !== this.getBattlerIndex() && ability.isIgnorable) { return false; } if (this.summonData?.abilitySuppressed && !ability.hasAttr(UnsuppressableAbilityAbAttr)) { return false; } - if (this.isOnField() && !ability.hasAttr(SuppressFieldAbilitiesAbAttr)) { - const suppressed = new Utils.BooleanHolder(false); - this.scene.getField(true).filter(p => p !== this).map(p => { - if (p.getAbility().hasAttr(SuppressFieldAbilitiesAbAttr) && p.canApplyAbility()) { - p.getAbility().getAttrs(SuppressFieldAbilitiesAbAttr).map(a => a.apply(this, false, false, suppressed, [ ability ])); - } - if (p.getPassiveAbility().hasAttr(SuppressFieldAbilitiesAbAttr) && p.canApplyAbility(true)) { - p.getPassiveAbility().getAttrs(SuppressFieldAbilitiesAbAttr).map(a => a.apply(this, true, false, suppressed, [ ability ])); - } - }); - if (suppressed.value) { + const suppressAbilitiesTag = arena.getTag(ArenaTagType.NEUTRALIZING_GAS) as SuppressAbilitiesTag; + if (this.isOnField() && suppressAbilitiesTag && !suppressAbilitiesTag.isBeingRemoved()) { + const thisAbilitySuppressing = ability.hasAttr(PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr); + const hasSuppressingAbility = this.hasAbilityWithAttr(PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr, false); + // Neutralizing gas is up - suppress abilities unless they are unsuppressable or this pokemon is responsible for the gas + // (Balance decided that the other ability of a neutralizing gas pokemon should not be neutralized) + // If the ability itself is neutralizing gas, don't suppress it (handled through arena tag) + const unsuppressable = ability.hasAttr(UnsuppressableAbilityAbAttr) || thisAbilitySuppressing || (hasSuppressingAbility && !suppressAbilitiesTag.shouldApplyToSelf()); + if (!unsuppressable) { return false; } } @@ -1541,24 +1641,31 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } /** - * @returns The tera-formed type of the pokemon, or {@linkcode Type.UNKNOWN} if not present + * @returns the pokemon's current tera {@linkcode Type} */ - public getTeraType(): Type { - // this.scene can be undefined for a fainted mon in doubles - if (this.scene !== undefined) { - const teraModifier = this.scene.findModifier(m => m instanceof TerastallizeModifier - && m.pokemonId === this.id && !!m.getBattlesLeft(), this.isPlayer()) as TerastallizeModifier; - // return teraType - if (teraModifier) { - return teraModifier.teraType; + getTeraType(): Type { + if (this.hasSpecies(Species.TERAPAGOS)) { + return Type.STELLAR; + } else if (this.hasSpecies(Species.OGERPON)) { + const ogerponForm = this.species.speciesId === Species.OGERPON ? this.formIndex : this.fusionFormIndex; + switch (ogerponForm) { + case 0: + case 4: + return Type.GRASS; + case 1: + case 5: + return Type.WATER; + case 2: + case 6: + return Type.FIRE; + case 3: + case 7: + return Type.ROCK; } + } else if (this.hasSpecies(Species.SHEDINJA)) { + return Type.BUG; } - // if scene is undefined, or if teraModifier is considered false, then return unknown type - return Type.UNKNOWN; - } - - public isTerastallized(): boolean { - return this.getTeraType() !== Type.UNKNOWN; + return this.teraType; } public isGrounded(): boolean { @@ -1575,7 +1682,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { */ public isTrapped(trappedAbMessages: string[] = [], simulated: boolean = true): boolean { const commandedTag = this.getTag(BattlerTagType.COMMANDED); - if (commandedTag?.getSourcePokemon(this.scene)?.isActive(true)) { + if (commandedTag?.getSourcePokemon()?.isActive(true)) { return true; } @@ -1588,7 +1695,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * Contains opposing Pokemon (Enemy/Player Pokemon) depending on perspective * Afterwards, it filters out Pokemon that have been switched out of the field so trapped abilities/moves do not trigger */ - const opposingFieldUnfiltered = this.isPlayer() ? this.scene.getEnemyField() : this.scene.getPlayerField(); + const opposingFieldUnfiltered = this.isPlayer() ? globalScene.getEnemyField() : globalScene.getPlayerField(); const opposingField = opposingFieldUnfiltered.filter(enemyPkm => enemyPkm.switchOutStatus === false); opposingField.forEach((opponent) => @@ -1596,7 +1703,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ); const side = this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; - return (trappedByAbility.value || !!this.getTag(TrappedTag) || !!this.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, side)); + return (trappedByAbility.value || !!this.getTag(TrappedTag) || !!globalScene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, side)); } /** @@ -1612,7 +1719,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { applyMoveAttrs(VariableMoveTypeAttr, this, null, move, moveTypeHolder); applyPreAttackAbAttrs(MoveTypeChangeAbAttr, this, null, move, simulated, moveTypeHolder); - this.scene.arena.applyTags(ArenaTagType.ION_DELUGE, simulated, moveTypeHolder); + globalScene.arena.applyTags(ArenaTagType.ION_DELUGE, simulated, moveTypeHolder); if (this.getTag(BattlerTagType.ELECTRIFIED)) { moveTypeHolder.value = Type.ELECTRIC; } @@ -1664,7 +1771,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } if (!cancelledHolder.value) { - const defendingSidePlayField = this.isPlayer() ? this.scene.getPlayerField() : this.scene.getEnemyField(); + const defendingSidePlayField = this.isPlayer() ? globalScene.getPlayerField() : globalScene.getEnemyField(); defendingSidePlayField.forEach((p) => applyPreDefendAbAttrs(FieldPriorityMoveImmunityAbAttr, p, source, move, cancelledHolder)); } } @@ -1700,10 +1807,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { */ getAttackTypeEffectiveness(moveType: Type, source?: Pokemon, ignoreStrongWinds: boolean = false, simulated: boolean = true, move?: Move): TypeDamageMultiplier { if (moveType === Type.STELLAR) { - return this.isTerastallized() ? 2 : 1; + return this.isTerastallized ? 2 : 1; } const types = this.getTypes(true, true); - const arena = this.scene.arena; + const arena = globalScene.arena; // Handle flying v ground type immunity without removing flying type so effective types are still effective // Related to https://github.com/pagefaultgames/pokerogue/issues/524 @@ -1716,7 +1823,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { let multiplier = types.map(defType => { const multiplier = new Utils.NumberHolder(getTypeDamageMultiplier(moveType, defType)); - applyChallenges(this.scene.gameMode, ChallengeType.TYPE_EFFECTIVENESS, multiplier); + applyChallenges(globalScene.gameMode, ChallengeType.TYPE_EFFECTIVENESS, multiplier); if (move) { applyMoveAttrs(VariableMoveTypeChartAttr, null, this, move, multiplier, defType); } @@ -1742,12 +1849,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { }).reduce((acc, cur) => acc * cur, 1) as TypeDamageMultiplier; const typeMultiplierAgainstFlying = new Utils.NumberHolder(getTypeDamageMultiplier(moveType, Type.FLYING)); - applyChallenges(this.scene.gameMode, ChallengeType.TYPE_EFFECTIVENESS, typeMultiplierAgainstFlying); + applyChallenges(globalScene.gameMode, ChallengeType.TYPE_EFFECTIVENESS, typeMultiplierAgainstFlying); // Handle strong winds lowering effectiveness of types super effective against pure flying - if (!ignoreStrongWinds && arena.weather?.weatherType === WeatherType.STRONG_WINDS && !arena.weather.isEffectSuppressed(this.scene) && this.isOfType(Type.FLYING) && typeMultiplierAgainstFlying.value === 2) { + if (!ignoreStrongWinds && arena.weather?.weatherType === WeatherType.STRONG_WINDS && !arena.weather.isEffectSuppressed() && this.isOfType(Type.FLYING) && typeMultiplierAgainstFlying.value === 2) { multiplier /= 2; if (!simulated) { - this.scene.queueMessage(i18next.t("weather:strongWindsEffectMessage")); + globalScene.queueMessage(i18next.t("weather:strongWindsEffectMessage")); } } return multiplier as TypeDamageMultiplier; @@ -1820,13 +1927,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** * Gets all level up moves in a given range for a particular pokemon. - * @param {integer} startingLevel Don't include moves below this level + * @param {number} startingLevel Don't include moves below this level * @param {boolean} includeEvolutionMoves Whether to include evolution moves * @param {boolean} simulateEvolutionChain Whether to include moves from prior evolutions * @param {boolean} includeRelearnerMoves Whether to include moves that would require a relearner. Note the move relearner inherently allows evolution moves * @returns {LevelMoves} A list of moves and the levels they can be learned at */ - getLevelMoves(startingLevel?: integer, includeEvolutionMoves: boolean = false, simulateEvolutionChain: boolean = false, includeRelearnerMoves: boolean = false, learnSituation: LearnMoveSituation = LearnMoveSituation.MISC): LevelMoves { + getLevelMoves(startingLevel?: number, includeEvolutionMoves: boolean = false, simulateEvolutionChain: boolean = false, includeRelearnerMoves: boolean = false, learnSituation: LearnMoveSituation = LearnMoveSituation.MISC): LevelMoves { const ret: LevelMoves = []; let levelMoves: LevelMoves = []; if (!startingLevel) { @@ -1866,7 +1973,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } } - levelMoves.sort((lma: [integer, integer], lmb: [integer, integer]) => lma[0] > lmb[0] ? 1 : lma[0] < lmb[0] ? -1 : 0); + levelMoves.sort((lma: [number, number], lmb: [number, number]) => lma[0] > lmb[0] ? 1 : lma[0] < lmb[0] ? -1 : 0); /** @@ -1923,7 +2030,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return speciesEggMoves[this.getSpeciesForm().getRootSpeciesId()]; } - setMove(moveIndex: integer, moveId: Moves): void { + setMove(moveIndex: number, moveId: Moves): void { const move = moveId ? new PokemonMove(moveId) : null; this.moveset[moveIndex] = move; if (this.summonData?.moveset) { @@ -1942,25 +2049,25 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param thresholdOverride number that is divided by 2^16 (65536) to get the shiny chance, overrides {@linkcode shinyThreshold} if set (bypassing shiny rate modifiers such as Shiny Charm) * @returns true if the Pokemon has been set as a shiny, false otherwise */ - trySetShiny(thresholdOverride?: integer): boolean { + trySetShiny(thresholdOverride?: number): boolean { // Shiny Pokemon should not spawn in the end biome in endless - if (this.scene.gameMode.isEndless && this.scene.arena.biomeType === Biome.END) { + if (globalScene.gameMode.isEndless && globalScene.arena.biomeType === Biome.END) { return false; } const rand1 = (this.id & 0xFFFF0000) >>> 16; const rand2 = (this.id & 0x0000FFFF); - const E = this.scene.gameData.trainerId ^ this.scene.gameData.secretId; + const E = globalScene.gameData.trainerId ^ globalScene.gameData.secretId; const F = rand1 ^ rand2; - const shinyThreshold = new Utils.IntegerHolder(BASE_SHINY_CHANCE); + const shinyThreshold = new Utils.NumberHolder(BASE_SHINY_CHANCE); if (thresholdOverride === undefined) { - if (this.scene.eventManager.isEventActive()) { - shinyThreshold.value *= this.scene.eventManager.getShinyMultiplier(); + if (globalScene.eventManager.isEventActive()) { + shinyThreshold.value *= globalScene.eventManager.getShinyMultiplier(); } if (!this.hasTrainer()) { - this.scene.applyModifiers(ShinyRateBoosterModifier, true, shinyThreshold); + globalScene.applyModifiers(ShinyRateBoosterModifier, true, shinyThreshold); } } else { shinyThreshold.value = thresholdOverride; @@ -1991,11 +2098,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (thresholdOverride !== undefined && applyModifiersToOverride) { shinyThreshold.value = thresholdOverride; } - if (this.scene.eventManager.isEventActive()) { - shinyThreshold.value *= this.scene.eventManager.getShinyMultiplier(); + if (globalScene.eventManager.isEventActive()) { + shinyThreshold.value *= globalScene.eventManager.getShinyMultiplier(); } if (!this.hasTrainer()) { - this.scene.applyModifiers(ShinyRateBoosterModifier, true, shinyThreshold); + globalScene.applyModifiers(ShinyRateBoosterModifier, true, shinyThreshold); } } else { shinyThreshold.value = thresholdOverride; @@ -2033,9 +2140,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return 0; } const rand = new Utils.NumberHolder(0); - this.scene.executeWithSeedOffset(() => { + globalScene.executeWithSeedOffset(() => { rand.value = Utils.randSeedInt(10); - }, this.id, this.scene.waveSeed); + }, this.id, globalScene.waveSeed); if (rand.value >= SHINY_VARIANT_CHANCE) { return 0; // 6/10 } else if (rand.value >= SHINY_EPIC_CHANCE) { @@ -2045,10 +2152,42 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } + /** + * Function that tries to set a Pokemon to have its hidden ability based on seed, if it exists. + * For manual use only, usually to roll a Pokemon's hidden ability chance a second time. + * + * The base hidden ability odds are {@linkcode BASE_HIDDEN_ABILITY_CHANCE} / `65536` + * @param thresholdOverride number that is divided by `2^16` (`65536`) to get the HA chance, overrides {@linkcode haThreshold} if set (bypassing HA rate modifiers such as Ability Charm) + * @param applyModifiersToOverride If {@linkcode thresholdOverride} is set and this is true, will apply Ability Charm to {@linkcode thresholdOverride} + * @returns `true` if the Pokemon has been set to have its hidden ability, `false` otherwise + */ + public tryRerollHiddenAbilitySeed(thresholdOverride?: number, applyModifiersToOverride?: boolean): boolean { + if (!this.species.abilityHidden) { + return false; + } + const haThreshold = new Utils.NumberHolder(BASE_HIDDEN_ABILITY_CHANCE); + if (thresholdOverride === undefined || applyModifiersToOverride) { + if (thresholdOverride !== undefined && applyModifiersToOverride) { + haThreshold.value = thresholdOverride; + } + if (!this.hasTrainer()) { + globalScene.applyModifiers(HiddenAbilityRateBoosterModifier, true, haThreshold); + } + } else { + haThreshold.value = thresholdOverride; + } + + if (randSeedInt(65536) < haThreshold.value) { + this.abilityIndex = 2; + } + + return this.abilityIndex === 2; + } + public generateFusionSpecies(forStarter?: boolean): void { const hiddenAbilityChance = new Utils.NumberHolder(BASE_HIDDEN_ABILITY_CHANCE); if (!this.hasTrainer()) { - this.scene.applyModifiers(HiddenAbilityRateBoosterModifier, true, hiddenAbilityChance); + globalScene.applyModifiers(HiddenAbilityRateBoosterModifier, true, hiddenAbilityChance); } const hasHiddenAbility = !Utils.randSeedInt(hiddenAbilityChance.value); @@ -2075,7 +2214,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { fusionOverride = getPokemonSpecies(Overrides.OPP_FUSION_SPECIES_OVERRIDE); } - this.fusionSpecies = fusionOverride ?? this.scene.randomSpecies(this.scene.currentBattle?.waveIndex || 0, this.level, false, filter, true); + this.fusionSpecies = fusionOverride ?? globalScene.randomSpecies(globalScene.currentBattle?.waveIndex || 0, this.level, false, filter, true); this.fusionAbilityIndex = (this.fusionSpecies.abilityHidden && hasHiddenAbility ? 2 : this.fusionSpecies.ability2 !== this.fusionSpecies.ability1 ? randAbilityIndex : 0); this.fusionShiny = this.shiny; this.fusionVariant = this.variant; @@ -2091,7 +2230,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } - this.fusionFormIndex = this.scene.getSpeciesFormIndex(this.fusionSpecies, this.fusionGender, this.getNature(), true); + this.fusionFormIndex = globalScene.getSpeciesFormIndex(this.fusionSpecies, this.fusionGender, this.getNature(), true); this.fusionLuck = this.luck; this.generateName(); @@ -2196,9 +2335,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } - // Bosses never get self ko moves + // Bosses never get self ko moves or Pain Split if (this.isBoss()) { movePool = movePool.filter(m => !allMoves[m[0]].hasAttr(SacrificialAttr)); + movePool = movePool.filter(m => !allMoves[m[0]].hasAttr(HpSplitAttr)); } movePool = movePool.filter(m => !allMoves[m[0]].hasAttr(SacrificialAttrOnHit)); if (this.hasTrainer()) { @@ -2216,15 +2356,17 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // Weight towards higher power moves, by reducing the power of moves below the highest power. // Caps max power at 90 to avoid something like hyper beam ruining the stats. // This is a pretty soft weighting factor, although it is scaled with the weight multiplier. - const maxPower = Math.min(movePool.reduce((v, m) => Math.max(allMoves[m[0]].power, v), 40), 90); - movePool = movePool.map(m => [ m[0], m[1] * (allMoves[m[0]].category === MoveCategory.STATUS ? 1 : Math.max(Math.min(allMoves[m[0]].power / maxPower, 1), 0.5)) ]); + const maxPower = Math.min(movePool.reduce((v, m) => Math.max(allMoves[m[0]].calculateEffectivePower(), v), 40), 90); + movePool = movePool.map(m => [ m[0], m[1] * (allMoves[m[0]].category === MoveCategory.STATUS ? 1 : Math.max(Math.min(allMoves[m[0]].calculateEffectivePower() / maxPower, 1), 0.5)) ]); - // Weight damaging moves against the lower stat + // Weight damaging moves against the lower stat. This uses a non-linear relationship. + // If the higher stat is 1 - 1.09x higher, no change. At higher stat ~1.38x lower stat, off-stat moves have half weight. + // One third weight at ~1.58x higher, one quarter weight at ~1.73x higher, one fifth at ~1.87x, and one tenth at ~2.35x higher. const atk = this.getStat(Stat.ATK); const spAtk = this.getStat(Stat.SPATK); const worseCategory: MoveCategory = atk > spAtk ? MoveCategory.SPECIAL : MoveCategory.PHYSICAL; const statRatio = worseCategory === MoveCategory.PHYSICAL ? atk / spAtk : spAtk / atk; - movePool = movePool.map(m => [ m[0], m[1] * (allMoves[m[0]].category === worseCategory ? statRatio : 1) ]); + movePool = movePool.map(m => [ m[0], m[1] * (allMoves[m[0]].category === worseCategory ? Math.min(Math.pow(statRatio, 3) * 1.3, 1) : 1) ]); /** The higher this is the more the game weights towards higher level moves. At `0` all moves are equal weight. */ let weightMultiplier = 0.9; @@ -2265,14 +2407,14 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { while (baseWeights.length > this.moveset.length && this.moveset.length < 4) { if (this.hasTrainer()) { // Sqrt the weight of any damaging moves with overlapping types. This is about a 0.05 - 0.1 multiplier. - // Other damaging moves 2x weight if 0-1 damaging moves, 0.5x if 2, 0.125x if 3. These weights double if STAB. + // Other damaging moves 2x weight if 0-1 damaging moves, 0.5x if 2, 0.125x if 3. These weights get 20x if STAB. // Status moves remain unchanged on weight, this encourages 1-2 movePool = baseWeights.filter(m => !this.moveset.some(mo => m[0] === mo?.moveId)).map((m) => { let ret: number; if (this.moveset.some(mo => mo?.getMove().category !== MoveCategory.STATUS && mo?.getMove().type === allMoves[m[0]].type)) { ret = Math.ceil(Math.sqrt(m[1])); } else if (allMoves[m[0]].category !== MoveCategory.STATUS) { - ret = Math.ceil(m[1] / Math.max(Math.pow(4, this.moveset.filter(mo => (mo?.getMove().power ?? 0) > 1).length) / 8, 0.5) * (this.isOfType(allMoves[m[0]].type) ? 2 : 1)); + ret = Math.ceil(m[1] / Math.max(Math.pow(4, this.moveset.filter(mo => (mo?.getMove().power ?? 0) > 1).length) / 8, 0.5) * (this.isOfType(allMoves[m[0]].type) ? 20 : 1)); } else { ret = m[1]; } @@ -2292,12 +2434,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } // Trigger FormChange, except for enemy Pokemon during Mystery Encounters, to avoid crashes - if (this.isPlayer() || !this.scene.currentBattle?.isBattleMysteryEncounter() || !this.scene.currentBattle?.mysteryEncounter) { - this.scene.triggerPokemonFormChange(this, SpeciesFormChangeMoveLearnedTrigger); + if (this.isPlayer() || !globalScene.currentBattle?.isBattleMysteryEncounter() || !globalScene.currentBattle?.mysteryEncounter) { + globalScene.triggerPokemonFormChange(this, SpeciesFormChangeMoveLearnedTrigger); } } - public trySelectMove(moveIndex: integer, ignorePp?: boolean): boolean { + public trySelectMove(moveIndex: number, ignorePp?: boolean): boolean { const move = this.getMoveset().length > moveIndex ? this.getMoveset()[moveIndex] : null; @@ -2306,19 +2448,19 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { showInfo(): void { if (!this.battleInfo.visible) { - const otherBattleInfo = this.scene.fieldUI.getAll().slice(0, 4).filter(ui => ui instanceof BattleInfo && ((ui as BattleInfo) instanceof PlayerBattleInfo) === this.isPlayer()).find(() => true); + const otherBattleInfo = globalScene.fieldUI.getAll().slice(0, 4).filter(ui => ui instanceof BattleInfo && ((ui as BattleInfo) instanceof PlayerBattleInfo) === this.isPlayer()).find(() => true); if (!otherBattleInfo || !this.getFieldIndex()) { - this.scene.fieldUI.sendToBack(this.battleInfo); - this.scene.sendTextToBack(); // Push the top right text objects behind everything else + globalScene.fieldUI.sendToBack(this.battleInfo); + globalScene.sendTextToBack(); // Push the top right text objects behind everything else } else { - this.scene.fieldUI.moveAbove(this.battleInfo, otherBattleInfo); + globalScene.fieldUI.moveAbove(this.battleInfo, otherBattleInfo); } this.battleInfo.setX(this.battleInfo.x + (this.isPlayer() ? 150 : !this.isBoss() ? -150 : -198)); this.battleInfo.setVisible(true); if (this.isPlayer()) { this.battleInfo.expMaskRect.x += 150; } - this.scene.tweens.add({ + globalScene.tweens.add({ targets: [ this.battleInfo, this.battleInfo.expMaskRect ], x: this.isPlayer() ? "-=150" : `+=${!this.isBoss() ? 150 : 246}`, duration: 1000, @@ -2330,7 +2472,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { hideInfo(): Promise { return new Promise(resolve => { if (this.battleInfo && this.battleInfo.visible) { - this.scene.tweens.add({ + globalScene.tweens.add({ targets: [ this.battleInfo, this.battleInfo.expMaskRect ], x: this.isPlayer() ? "+=150" : `-=${!this.isBoss() ? 150 : 246}`, duration: 500, @@ -2378,8 +2520,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.battleInfo.toggleFlyout(visible); } - addExp(exp: integer) { - const maxExpLevel = this.scene.getMaxExpLevel(); + /** + * Adds experience to this PlayerPokemon, subject to wave based level caps. + * @param exp The amount of experience to add + * @param ignoreLevelCap Whether to ignore level caps when adding experience (defaults to false) + */ + addExp(exp: number, ignoreLevelCap: boolean = false) { + const maxExpLevel = globalScene.getMaxExpLevel(ignoreLevelCap); const initialExp = this.exp; this.exp += exp; while (this.level < maxExpLevel && this.exp >= getLevelTotalExp(this.level + 1, this.species.growthRate)) { @@ -2401,7 +2548,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return this.isPlayer() !== target.isPlayer(); } - getOpponent(targetIndex: integer): Pokemon | null { + getOpponent(targetIndex: number): Pokemon | null { const ret = this.getOpponents()[targetIndex]; if (ret.summonData) { return ret; @@ -2410,7 +2557,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } getOpponents(): Pokemon[] { - return ((this.isPlayer() ? this.scene.getEnemyField() : this.scene.getPlayerField()) as Pokemon[]).filter(p => p.isActive()); + return ((this.isPlayer() ? globalScene.getEnemyField() : globalScene.getPlayerField()) as Pokemon[]).filter(p => p.isActive()); } getOpponentDescriptor(): string { @@ -2422,7 +2569,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } getAlly(): Pokemon { - return (this.isPlayer() ? this.scene.getPlayerField() : this.scene.getEnemyField())[this.getFieldIndex() ? 0 : 1]; + return (this.isPlayer() ? globalScene.getPlayerField() : globalScene.getEnemyField())[this.getFieldIndex() ? 0 : 1]; } /** @@ -2431,7 +2578,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @returns An array of Pokémon on the allied field. */ getAlliedField(): Pokemon[] { - return this instanceof PlayerPokemon ? this.scene.getPlayerField() : this.scene.getEnemyField(); + return this instanceof PlayerPokemon ? globalScene.getPlayerField() : globalScene.getEnemyField(); } /** @@ -2445,10 +2592,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param ignoreOppAbility determines whether the effects of the opponent's abilities (i.e. Unaware) should be ignored (`false` by default) * @param isCritical determines whether a critical hit has occurred or not (`false` by default) * @param simulated determines whether effects are applied without altering game state (`true` by default) + * @param ignoreHeldItems determines whether this Pokemon's held items should be ignored during the stat calculation, default `false` * @return the stat stage multiplier to be used for effective stat calculation */ - getStatStageMultiplier(stat: EffectiveStat, opponent?: Pokemon, move?: Move, ignoreOppAbility: boolean = false, isCritical: boolean = false, simulated: boolean = true): number { - const statStage = new Utils.IntegerHolder(this.getStatStage(stat)); + getStatStageMultiplier(stat: EffectiveStat, opponent?: Pokemon, move?: Move, ignoreOppAbility: boolean = false, isCritical: boolean = false, simulated: boolean = true, ignoreHeldItems: boolean = false): number { + const statStage = new Utils.NumberHolder(this.getStatStage(stat)); const ignoreStatStage = new Utils.BooleanHolder(false); if (opponent) { @@ -2474,7 +2622,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (!ignoreStatStage.value) { const statStageMultiplier = new Utils.NumberHolder(Math.max(2, 2 + statStage.value) / Math.max(2, 2 - statStage.value)); - this.scene.applyModifiers(TempStatStageBoosterModifier, this.isPlayer(), stat, statStageMultiplier); + if (!ignoreHeldItems) { + globalScene.applyModifiers(TempStatStageBoosterModifier, this.isPlayer(), stat, statStageMultiplier); + } return Math.min(statStageMultiplier.value, 4); } return 1; @@ -2496,8 +2646,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return 1; } - const userAccStage = new Utils.IntegerHolder(this.getStatStage(Stat.ACC)); - const targetEvaStage = new Utils.IntegerHolder(target.getStatStage(Stat.EVA)); + const userAccStage = new Utils.NumberHolder(this.getStatStage(Stat.ACC)); + const targetEvaStage = new Utils.NumberHolder(target.getStatStage(Stat.EVA)); const ignoreAccStatStage = new Utils.BooleanHolder(false); const ignoreEvaStatStage = new Utils.BooleanHolder(false); @@ -2506,7 +2656,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { applyAbAttrs(IgnoreOpponentStatStagesAbAttr, this, null, false, Stat.EVA, ignoreEvaStatStage); applyMoveAttrs(IgnoreOpponentStatStagesAttr, this, target, sourceMove, ignoreEvaStatStage); - this.scene.applyModifiers(TempStatStageBoosterModifier, this.isPlayer(), Stat.ACC, userAccStage); + globalScene.applyModifiers(TempStatStageBoosterModifier, this.isPlayer(), Stat.ACC, userAccStage); userAccStage.value = ignoreAccStatStage.value ? 0 : Math.min(userAccStage.value, 6); targetEvaStage.value = ignoreEvaStatStage.value ? 0 : targetEvaStage.value; @@ -2618,7 +2768,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const isPhysical = moveCategory === MoveCategory.PHYSICAL; /** Combined damage multiplier from field effects such as weather, terrain, etc. */ - const arenaAttackTypeMultiplier = new Utils.NumberHolder(this.scene.arena.getAttackTypeMultiplier(moveType, source.isGrounded())); + const arenaAttackTypeMultiplier = new Utils.NumberHolder(globalScene.arena.getAttackTypeMultiplier(moveType, source.isGrounded())); applyMoveAttrs(IgnoreWeatherTypeDebuffAttr, source, this, move, arenaAttackTypeMultiplier); const isTypeImmune = (typeMultiplier * arenaAttackTypeMultiplier.value) === 0; @@ -2636,7 +2786,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { applyMoveAttrs(FixedDamageAttr, source, this, move, fixedDamage); if (fixedDamage.value) { const multiLensMultiplier = new Utils.NumberHolder(1); - source.scene.applyModifiers(PokemonMultiHitModifier, source.isPlayer(), source, move.id, null, multiLensMultiplier); + globalScene.applyModifiers(PokemonMultiHitModifier, source.isPlayer(), source, move.id, null, multiLensMultiplier); fixedDamage.value = Utils.toDmgValue(fixedDamage.value * multiLensMultiplier.value); return { @@ -2670,13 +2820,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** Multiplier for moves enhanced by Multi-Lens and/or Parental Bond */ const multiStrikeEnhancementMultiplier = new Utils.NumberHolder(1); - source.scene.applyModifiers(PokemonMultiHitModifier, source.isPlayer(), source, move.id, null, multiStrikeEnhancementMultiplier); + globalScene.applyModifiers(PokemonMultiHitModifier, source.isPlayer(), source, move.id, null, multiStrikeEnhancementMultiplier); if (!ignoreSourceAbility) { applyPreAttackAbAttrs(AddSecondStrikeAbAttr, source, this, move, simulated, null, multiStrikeEnhancementMultiplier); } /** Doubles damage if this Pokemon's last move was Glaive Rush */ - const glaiveRushMultiplier = new Utils.IntegerHolder(1); + const glaiveRushMultiplier = new Utils.NumberHolder(1); if (this.getTag(BattlerTagType.RECEIVE_DOUBLE_DAMAGE)) { glaiveRushMultiplier.value = 2; } @@ -2696,11 +2846,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const matchesSourceType = sourceTypes.includes(moveType); /** A damage multiplier for when the attack is of the attacker's type and/or Tera type. */ const stabMultiplier = new Utils.NumberHolder(1); - if (matchesSourceType) { - stabMultiplier.value += 0.5; - } - applyMoveAttrs(CombinedPledgeStabBoostAttr, source, this, move, stabMultiplier); - if (sourceTeraType !== Type.UNKNOWN && sourceTeraType === moveType) { + if (matchesSourceType && moveType !== Type.STELLAR) { stabMultiplier.value += 0.5; } @@ -2708,6 +2854,20 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { applyAbAttrs(StabBoostAbAttr, source, null, simulated, stabMultiplier); } + applyMoveAttrs(CombinedPledgeStabBoostAttr, source, this, move, stabMultiplier); + + if (source.isTerastallized && sourceTeraType === moveType && moveType !== Type.STELLAR) { + stabMultiplier.value += 0.5; + } + + if (source.isTerastallized && source.getTeraType() === Type.STELLAR && (!source.stellarTypesBoosted.includes(moveType) || source.hasSpecies(Species.TERAPAGOS))) { + if (matchesSourceType) { + stabMultiplier.value += 0.5; + } else { + stabMultiplier.value += 0.2; + } + } + stabMultiplier.value = Math.min(stabMultiplier.value, 2.25); /** Halves damage if the attacker is using a physical attack while burned */ @@ -2726,7 +2886,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** Reduces damage if this Pokemon has a relevant screen (e.g. Light Screen for special attacks) */ const screenMultiplier = new Utils.NumberHolder(1); - this.scene.arena.applyTagsForSide(WeakenMoveScreenTag, defendingSide, simulated, source, moveCategory, screenMultiplier); + globalScene.arena.applyTagsForSide(WeakenMoveScreenTag, defendingSide, simulated, source, moveCategory, screenMultiplier); /** * For each {@linkcode HitsTagAttr} the move has, doubles the damage of the move if: @@ -2742,7 +2902,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { }); /** Halves damage if this Pokemon is grounded in Misty Terrain against a Dragon-type attack */ - const mistyTerrainMultiplier = (this.scene.arena.terrain?.terrainType === TerrainType.MISTY && this.isGrounded() && moveType === Type.DRAGON) + const mistyTerrainMultiplier = (globalScene.arena.terrain?.terrainType === TerrainType.MISTY && this.isGrounded() && moveType === Type.DRAGON) ? 0.5 : 1; @@ -2769,10 +2929,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** Apply the enemy's Damage and Resistance tokens */ if (!source.isPlayer()) { - this.scene.applyModifiers(EnemyDamageBoosterModifier, false, damage); + globalScene.applyModifiers(EnemyDamageBoosterModifier, false, damage); } if (!this.isPlayer()) { - this.scene.applyModifiers(EnemyDamageReducerModifier, false, damage); + globalScene.applyModifiers(EnemyDamageReducerModifier, false, damage); } @@ -2781,7 +2941,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { applyPreDefendAbAttrs(ReceivedMoveDamageMultiplierAbAttr, this, source, move, cancelled, simulated, damage); /** Additionally apply friend guard damage reduction if ally has it. */ - if (this.scene.currentBattle.double && this.getAlly()?.isActive(true)) { + if (globalScene.currentBattle.double && this.getAlly()?.isActive(true)) { applyPreDefendAbAttrs(AlliedFieldDamageReductionAbAttr, this.getAlly(), source, move, cancelled, simulated, damage); } } @@ -2829,7 +2989,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const typeMultiplier = this.getMoveEffectiveness(source, move, false, false, cancelled); if (!cancelled.value && typeMultiplier === 0) { - this.scene.queueMessage(i18next.t("battle:hitResultNoEffect", { pokemonName: getPokemonNameWithAffix(this) })); + globalScene.queueMessage(i18next.t("battle:hitResultNoEffect", { pokemonName: getPokemonNameWithAffix(this) })); } return (typeMultiplier === 0) ? HitResult.NO_EFFECT : HitResult.STATUS; } else { @@ -2843,16 +3003,22 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { isCritical = true; } else { const critChance = [ 24, 8, 2, 1 ][Math.max(0, Math.min(this.getCritStage(source, move), 3))]; - isCritical = critChance === 1 || !this.scene.randBattleSeedInt(critChance); + isCritical = critChance === 1 || !globalScene.randBattleSeedInt(critChance); } - const noCritTag = this.scene.arena.getTagOnSide(NoCritTag, defendingSide); + const noCritTag = globalScene.arena.getTagOnSide(NoCritTag, defendingSide); const blockCrit = new Utils.BooleanHolder(false); applyAbAttrs(BlockCritAbAttr, this, null, false, blockCrit); if (noCritTag || blockCrit.value || Overrides.NEVER_CRIT_OVERRIDE) { isCritical = false; } + /** + * Applies stat changes from {@linkcode move} and gives it to {@linkcode source} + * before damage calculation + */ + applyMoveAttrs(StatChangeBeforeDmgCalcAttr, source, this, move); + const { cancelled, result, damage: dmg } = this.getAttackDamage(source, move, false, false, isCritical, false); const typeBoost = source.findTag(t => t instanceof TypeBoostTag && t.boostedType === source.getMoveType(move)) as TypeBoostTag; @@ -2865,9 +3031,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (!cancelled) { if (result === HitResult.IMMUNE) { - this.scene.queueMessage(i18next.t("battle:hitResultImmune", { pokemonName: getPokemonNameWithAffix(this) })); + globalScene.queueMessage(i18next.t("battle:hitResultImmune", { pokemonName: getPokemonNameWithAffix(this) })); } else { - this.scene.queueMessage(i18next.t("battle:hitResultNoEffect", { pokemonName: getPokemonNameWithAffix(this) })); + globalScene.queueMessage(i18next.t("battle:hitResultNoEffect", { pokemonName: getPokemonNameWithAffix(this) })); } } return result; @@ -2888,7 +3054,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { substitute.hp -= dmg; } if (!this.isPlayer() && dmg >= this.hp) { - this.scene.applyModifiers(EnemyEndureChanceModifier, false, this); + globalScene.applyModifiers(EnemyEndureChanceModifier, false, this); } /** @@ -2899,9 +3065,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (damage > 0) { if (source.isPlayer()) { - this.scene.validateAchvs(DamageAchv, new Utils.NumberHolder(damage)); - if (damage > this.scene.gameData.gameStats.highestDamage) { - this.scene.gameData.gameStats.highestDamage = damage; + globalScene.validateAchvs(DamageAchv, new Utils.NumberHolder(damage)); + if (damage > globalScene.gameData.gameStats.highestDamage) { + globalScene.gameData.gameStats.highestDamage = damage; } } source.turnData.totalDamageDealt += damage; @@ -2912,34 +3078,34 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const attackResult = { move: move.id, result: result as DamageResult, damage: damage, critical: isCritical, sourceId: source.id, sourceBattlerIndex: source.getBattlerIndex() }; this.turnData.attacksReceived.unshift(attackResult); if (source.isPlayer() && !this.isPlayer()) { - this.scene.applyModifiers(DamageMoneyRewardModifier, true, source, new Utils.NumberHolder(damage)); + globalScene.applyModifiers(DamageMoneyRewardModifier, true, source, new Utils.NumberHolder(damage)); } } } if (isCritical) { - this.scene.queueMessage(i18next.t("battle:hitResultCriticalHit")); + globalScene.queueMessage(i18next.t("battle:hitResultCriticalHit")); } // want to include is.Fainted() in case multi hit move ends early, still want to render message if (source.turnData.hitsLeft === 1 || this.isFainted()) { switch (result) { case HitResult.SUPER_EFFECTIVE: - this.scene.queueMessage(i18next.t("battle:hitResultSuperEffective")); + globalScene.queueMessage(i18next.t("battle:hitResultSuperEffective")); break; case HitResult.NOT_VERY_EFFECTIVE: - this.scene.queueMessage(i18next.t("battle:hitResultNotVeryEffective")); + globalScene.queueMessage(i18next.t("battle:hitResultNotVeryEffective")); break; case HitResult.ONE_HIT_KO: - this.scene.queueMessage(i18next.t("battle:hitResultOneHitKO")); + globalScene.queueMessage(i18next.t("battle:hitResultOneHitKO")); break; } } if (this.isFainted()) { // set splice index here, so future scene queues happen before FaintedPhase - this.scene.setPhaseQueueSplice(); - this.scene.unshiftPhase(new FaintPhase(this.scene, this.getBattlerIndex(), isOneHitKo, destinyTag, grudgeTag, source)); + globalScene.setPhaseQueueSplice(); + globalScene.unshiftPhase(new FaintPhase(this.getBattlerIndex(), isOneHitKo, destinyTag, grudgeTag, source)); this.destroySubstitute(); this.lapseTag(BattlerTagType.COMMANDED); @@ -2958,7 +3124,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param ignoreFaintPhase flag on wheter to add FaintPhase if pokemon after applying damage faints * @returns integer representing damage */ - damage(damage: integer, ignoreSegments: boolean = false, preventEndure: boolean = false, ignoreFaintPhase: boolean = false): integer { + damage(damage: number, ignoreSegments: boolean = false, preventEndure: boolean = false, ignoreFaintPhase: boolean = false): number { if (this.isFainted()) { return 0; } @@ -2973,7 +3139,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { surviveDamage.value = this.lapseTag(BattlerTagType.ENDURE_TOKEN); } if (!surviveDamage.value) { - this.scene.applyModifiers(SurviveDamageModifier, this.isPlayer(), this, surviveDamage); + globalScene.applyModifiers(SurviveDamageModifier, this.isPlayer(), this, surviveDamage); } if (surviveDamage.value) { damage = this.hp - 1; @@ -2990,8 +3156,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * * Once the MoveEffectPhase is over (and calls it's .end() function, shiftPhase() will reset the PhaseQueueSplice via clearPhaseQueueSplice() ) */ - this.scene.setPhaseQueueSplice(); - this.scene.unshiftPhase(new FaintPhase(this.scene, this.getBattlerIndex(), preventEndure)); + globalScene.setPhaseQueueSplice(); + globalScene.unshiftPhase(new FaintPhase(this.getBattlerIndex(), preventEndure)); this.destroySubstitute(); this.lapseTag(BattlerTagType.COMMANDED); this.resetSummonData(); @@ -3010,8 +3176,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @returns integer of damage done */ damageAndUpdate(damage: number, result?: DamageResult, critical: boolean = false, ignoreSegments: boolean = false, preventEndure: boolean = false, ignoreFaintPhase: boolean = false, source?: Pokemon): number { - const damagePhase = new DamageAnimPhase(this.scene, this.getBattlerIndex(), damage, result as DamageResult, critical); - this.scene.unshiftPhase(damagePhase); + const damagePhase = new DamageAnimPhase(this.getBattlerIndex(), damage, result as DamageResult, critical); + globalScene.unshiftPhase(damagePhase); if (this.switchOutStatus && source) { damage = 0; } @@ -3028,7 +3194,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return damage; } - heal(amount: integer): integer { + heal(amount: number): number { const healAmount = Math.min(amount, this.getMaxHp() - this.hp); this.hp += healAmount; return healAmount; @@ -3043,6 +3209,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return maxForms.includes(this.getFormKey()) || (!!this.getFusionFormKey() && maxForms.includes(this.getFusionFormKey()!)); } + isMega(): boolean { + const megaForms = [ SpeciesFormKey.MEGA, SpeciesFormKey.MEGA_X, SpeciesFormKey.MEGA_Y, SpeciesFormKey.PRIMAL ] as string[]; + return megaForms.includes(this.getFormKey()) || (!!this.getFusionFormKey() && megaForms.includes(this.getFusionFormKey()!)); + } + canAddTag(tagType: BattlerTagType): boolean { if (this.getTag(tagType)) { return false; @@ -3059,7 +3230,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return !cancelled.value; } - addTag(tagType: BattlerTagType, turnCount: integer = 0, sourceMove?: Moves, sourceId?: integer): boolean { + addTag(tagType: BattlerTagType, turnCount: number = 0, sourceMove?: Moves, sourceId?: number): boolean { const existingTag = this.getTag(tagType); if (existingTag) { existingTag.onOverlap(this); @@ -3165,11 +3336,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return true; } - removeTagsBySourceId(sourceId: integer): void { + removeTagsBySourceId(sourceId: number): void { this.findAndRemoveTags(t => t.isSourceLinked() && t.sourceId === sourceId); } - transferTagsBySourceId(sourceId: integer, newSourceId: integer): void { + transferTagsBySourceId(sourceId: number, newSourceId: number): void { if (!this.summonData) { return; } @@ -3186,13 +3357,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { for (const s of BATTLE_STATS) { const sourceStage = source.getStatStage(s); if ((this instanceof PlayerPokemon) && (sourceStage === 6)) { - this.scene.validateAchv(achvs.TRANSFER_MAX_STAT_STAGE); + globalScene.validateAchv(achvs.TRANSFER_MAX_STAT_STAGE); } this.setStatStage(s, sourceStage); } for (const tag of source.summonData.tags) { - if (!tag.isBatonPassable) { + if (!tag.isBatonPassable || (tag.tagType === BattlerTagType.TELEKINESIS && this.species.speciesId === Species.GENGAR && this.getFormKey() === "mega")) { continue; } @@ -3265,7 +3436,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (!this.isOnField()) { return; } - turnMove.turn = this.scene.currentBattle?.turn; + turnMove.turn = globalScene.currentBattle?.turn; this.getMoveHistory().push(turnMove); } @@ -3286,7 +3457,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } - getMoveQueue(): QueuedMove[] { + getMoveQueue(): TurnMove[] { return this.summonData.moveQueue; } @@ -3295,7 +3466,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param {Pokemon} target If specified, this only cancels subsequent strikes against the given target */ stopMultiHit(target?: Pokemon): void { - const effectPhase = this.scene.getCurrentPhase(); + const effectPhase = globalScene.getCurrentPhase(); if (effectPhase instanceof MoveEffectPhase && effectPhase.getUserPokemon() === this) { effectPhase.stopMultiHit(target); } @@ -3309,28 +3480,28 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (this.abilityIndex >= abilityCount) {// Shouldn't happen this.abilityIndex = abilityCount - 1; } - this.scene.gameData.setPokemonSeen(this, false); + globalScene.gameData.setPokemonSeen(this, false); this.setScale(this.getSpriteScale()); this.loadAssets().then(() => { this.calculateStats(); - this.scene.updateModifiers(this.isPlayer(), true); - Promise.all([ this.updateInfo(), this.scene.updateFieldScale() ]).then(() => resolve()); + globalScene.updateModifiers(this.isPlayer(), true); + Promise.all([ this.updateInfo(), globalScene.updateFieldScale() ]).then(() => resolve()); }); }); } cry(soundConfig?: Phaser.Types.Sound.SoundConfig, sceneOverride?: BattleScene): AnySound { - const scene = sceneOverride || this.scene; - const cry = this.getSpeciesForm().cry(scene, soundConfig); + const scene = sceneOverride ?? globalScene; // TODO: is `sceneOverride` needed? + const cry = this.getSpeciesForm().cry(soundConfig); let duration = cry.totalDuration * 1000; if (this.fusionSpecies && this.getSpeciesForm() !== this.getFusionSpeciesForm()) { - let fusionCry = this.getFusionSpeciesForm().cry(scene, soundConfig, true); + let fusionCry = this.getFusionSpeciesForm().cry(soundConfig, true); duration = Math.min(duration, fusionCry.totalDuration * 1000); fusionCry.destroy(); scene.time.delayedCall(Utils.fixedInt(Math.ceil(duration * 0.4)), () => { try { SoundFade.fadeOut(scene, cry, Utils.fixedInt(Math.ceil(duration * 0.2))); - fusionCry = this.getFusionSpeciesForm().cry(scene, Object.assign({ seek: Math.max(fusionCry.totalDuration * 0.4, 0) }, soundConfig)); + fusionCry = this.getFusionSpeciesForm().cry(Object.assign({ seek: Math.max(fusionCry.totalDuration * 0.4, 0) }, soundConfig)); SoundFade.fadeIn(scene, fusionCry, Utils.fixedInt(Math.ceil(duration * 0.2)), scene.masterVolume * scene.fieldVolume, 0); } catch (err) { console.error(err); @@ -3348,13 +3519,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const key = this.species.getCryKey(this.formIndex); let rate = 0.85; - const cry = this.scene.playSound(key, { rate: rate }) as AnySound; - if (!cry || this.scene.fieldVolume === 0) { + const cry = globalScene.playSound(key, { rate: rate }) as AnySound; + if (!cry || globalScene.fieldVolume === 0) { return callback(); } const sprite = this.getSprite(); const tintSprite = this.getTintSprite(); - const delay = Math.max(this.scene.sound.get(key).totalDuration * 50, 25); + const delay = Math.max(globalScene.sound.get(key).totalDuration * 50, 25); let frameProgress = 0; let frameThreshold: number; @@ -3362,7 +3533,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { sprite.anims.pause(); tintSprite?.anims.pause(); - let faintCryTimer : Phaser.Time.TimerEvent | null = this.scene.time.addEvent({ + let faintCryTimer : Phaser.Time.TimerEvent | null = globalScene.time.addEvent({ delay: Utils.fixedInt(delay), repeat: -1, callback: () => { @@ -3389,8 +3560,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { }); // Failsafe - this.scene.time.delayedCall(Utils.fixedInt(3000), () => { - if (!faintCryTimer || !this.scene) { + globalScene.time.delayedCall(Utils.fixedInt(3000), () => { + if (!faintCryTimer || !globalScene) { return; } if (cry?.isPlaying) { @@ -3407,14 +3578,14 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const key = this.species.getCryKey(this.formIndex); let i = 0; let rate = 0.85; - const cry = this.scene.playSound(key, { rate: rate }) as AnySound; + const cry = globalScene.playSound(key, { rate: rate }) as AnySound; const sprite = this.getSprite(); const tintSprite = this.getTintSprite(); let duration = cry.totalDuration * 1000; const fusionCryKey = this.fusionSpecies!.getCryKey(this.fusionFormIndex); - let fusionCry = this.scene.playSound(fusionCryKey, { rate: rate }) as AnySound; - if (!cry || !fusionCry || this.scene.fieldVolume === 0) { + let fusionCry = globalScene.playSound(fusionCryKey, { rate: rate }) as AnySound; + if (!cry || !fusionCry || globalScene.fieldVolume === 0) { return callback(); } fusionCry.stop(); @@ -3443,7 +3614,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { sprite.anims.pause(); tintSprite?.anims.pause(); - let faintCryTimer: Phaser.Time.TimerEvent | null = this.scene.time.addEvent({ + let faintCryTimer: Phaser.Time.TimerEvent | null = globalScene.time.addEvent({ delay: Utils.fixedInt(delay), repeat: -1, callback: () => { @@ -3458,9 +3629,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { frameProgress -= frameThreshold; } if (i === transitionIndex && fusionCryKey) { - SoundFade.fadeOut(this.scene, cry, Utils.fixedInt(Math.ceil((duration / rate) * 0.2))); - fusionCry = this.scene.playSound(fusionCryKey, Object.assign({ seek: Math.max(fusionCry.totalDuration * 0.4, 0), rate: rate })); - SoundFade.fadeIn(this.scene, fusionCry, Utils.fixedInt(Math.ceil((duration / rate) * 0.2)), this.scene.masterVolume * this.scene.fieldVolume, 0); + SoundFade.fadeOut(globalScene, cry, Utils.fixedInt(Math.ceil((duration / rate) * 0.2))); + fusionCry = globalScene.playSound(fusionCryKey, Object.assign({ seek: Math.max(fusionCry.totalDuration * 0.4, 0), rate: rate })); + SoundFade.fadeIn(globalScene, fusionCry, Utils.fixedInt(Math.ceil((duration / rate) * 0.2)), globalScene.masterVolume * globalScene.fieldVolume, 0); } rate *= 0.99; if (cry && !cry.pendingRemove) { @@ -3480,8 +3651,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { }); // Failsafe - this.scene.time.delayedCall(Utils.fixedInt(3000), () => { - if (!faintCryTimer || !this.scene) { + globalScene.time.delayedCall(Utils.fixedInt(3000), () => { + if (!faintCryTimer || !globalScene) { return; } if (cry?.isPlaying) { @@ -3515,7 +3686,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (overrideStatus ? this.status?.effect === effect : this.status) { return false; } - if (this.isGrounded() && (!ignoreField && this.scene.arena.terrain?.terrainType === TerrainType.MISTY)) { + if (this.isGrounded() && (!ignoreField && globalScene.arena.terrain?.terrainType === TerrainType.MISTY)) { return false; } } @@ -3560,12 +3731,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } break; case StatusEffect.SLEEP: - if (this.isGrounded() && this.scene.arena.terrain?.terrainType === TerrainType.ELECTRIC) { + if (this.isGrounded() && globalScene.arena.terrain?.terrainType === TerrainType.ELECTRIC) { return false; } break; case StatusEffect.FREEZE: - if (this.isOfType(Type.ICE) || (!ignoreField && (this.scene?.arena?.weather?.weatherType && [ WeatherType.SUNNY, WeatherType.HARSH_SUN ].includes(this.scene.arena.weather.weatherType)))) { + if (this.isOfType(Type.ICE) || (!ignoreField && (globalScene?.arena?.weather?.weatherType && [ WeatherType.SUNNY, WeatherType.HARSH_SUN ].includes(globalScene.arena.weather.weatherType)))) { return false; } break; @@ -3593,6 +3764,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (!this.canSetStatus(effect, asPhase, false, sourcePokemon)) { return false; } + if (this.isFainted() && effect !== StatusEffect.FAINT) { + return false; + } /** * If this Pokemon falls asleep or freezes in the middle of a multi-hit attack, @@ -3603,7 +3777,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } if (asPhase) { - this.scene.unshiftPhase(new ObtainStatusEffectPhase(this.scene, this.getBattlerIndex(), effect, turnsRemaining, sourceText, sourcePokemon)); + globalScene.unshiftPhase(new ObtainStatusEffectPhase(this.getBattlerIndex(), effect, turnsRemaining, sourceText, sourcePokemon)); return true; } @@ -3635,7 +3809,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.status = new Status(effect, 0, sleepTurnsRemaining?.value); if (effect !== StatusEffect.FAINT) { - this.scene.triggerPokemonFormChange(this, SpeciesFormChangeStatusEffectTrigger, true); + globalScene.triggerPokemonFormChange(this, SpeciesFormChangeStatusEffectTrigger, true); applyPostSetStatusAbAttrs(PostSetStatusAbAttr, this, effect, sourcePokemon); } @@ -3677,7 +3851,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { */ isSafeguarded(attacker: Pokemon): boolean { const defendingSide = this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; - if (this.scene.arena.getTagOnSide(ArenaTagType.SAFEGUARD, defendingSide)) { + if (globalScene.arena.getTagOnSide(ArenaTagType.SAFEGUARD, defendingSide)) { const bypassed = new Utils.BooleanHolder(false); if (attacker) { applyAbAttrs(InfiltratorAbAttr, attacker, null, false, bypassed); @@ -3710,13 +3884,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } // If this Pokemon has a Substitute when loading in, play an animation to add its sprite if (this.getTag(SubstituteTag)) { - this.scene.triggerPokemonBattleAnim(this, PokemonAnimType.SUBSTITUTE_ADD); + globalScene.triggerPokemonBattleAnim(this, PokemonAnimType.SUBSTITUTE_ADD); this.getTag(SubstituteTag)!.sourceInFocus = false; } // If this Pokemon has Commander and Dondozo as an active ally, hide this Pokemon's sprite. if (this.hasAbilityWithAttr(CommanderAbAttr) - && this.scene.currentBattle.double + && globalScene.currentBattle.double && this.getAlly()?.species.speciesId === Species.DONDOZO) { this.setVisible(false); } @@ -3734,8 +3908,18 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (this.getTag(BattlerTagType.SEEDED)) { this.lapseTag(BattlerTagType.SEEDED); } - if (this.scene) { - this.scene.triggerPokemonFormChange(this, SpeciesFormChangePostMoveTrigger, true); + if (globalScene) { + globalScene.triggerPokemonFormChange(this, SpeciesFormChangePostMoveTrigger, true); + } + } + + resetTera(): void { + const wasTerastallized = this.isTerastallized; + this.isTerastallized = false; + this.stellarTypesBoosted = []; + if (wasTerastallized) { + this.updateSpritePipelineData(); + globalScene.triggerPokemonFormChange(this, SpeciesFormChangeLapseTeraTrigger); } } @@ -3743,13 +3927,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.turnData = new PokemonTurnData(); } - getExpValue(): integer { + getExpValue(): number { // Logic to factor in victor level has been removed for balancing purposes, so the player doesn't have to focus on EXP maxxing return ((this.getSpeciesForm().getBaseExp() * this.level) / 5 + 1); } - setFrameRate(frameRate: integer) { - this.scene.anims.get(this.getBattleSpriteKey()).frameRate = frameRate; + setFrameRate(frameRate: number) { + globalScene.anims.get(this.getBattleSpriteKey()).frameRate = frameRate; try { this.getSprite().play(this.getBattleSpriteKey()); } catch (err: unknown) { @@ -3762,7 +3946,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } - tint(color: number, alpha?: number, duration?: integer, ease?: string) { + tint(color: number, alpha?: number, duration?: number, ease?: string) { const tintSprite = this.getTintSprite(); tintSprite?.setTintFill(color); tintSprite?.setVisible(true); @@ -3770,7 +3954,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (duration) { tintSprite?.setAlpha(0); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: tintSprite, alpha: alpha || 1, duration: duration, @@ -3781,11 +3965,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } - untint(duration: integer, ease?: string) { + untint(duration: number, ease?: string) { const tintSprite = this.getTintSprite(); if (duration) { - this.scene.tweens.add({ + globalScene.tweens.add({ targets: tintSprite, alpha: 0, duration: duration, @@ -3824,7 +4008,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { sparkle(): void { if (this.shinySparkle) { - doShinySparkleAnim(this.scene, this.shinySparkle, this.variant); + doShinySparkleAnim(this.shinySparkle, this.variant); } } @@ -3845,10 +4029,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const fusionSpriteKey = fusionSpeciesForm.getSpriteKey(this.getFusionGender(ignoreOveride) === Gender.FEMALE, fusionSpeciesForm.formIndex, this.fusionShiny, this.fusionVariant); const fusionBackSpriteKey = fusionSpeciesForm.getSpriteKey(this.getFusionGender(ignoreOveride) === Gender.FEMALE, fusionSpeciesForm.formIndex, this.fusionShiny, this.fusionVariant).replace("pkmn__", "pkmn__back__"); - const sourceTexture = this.scene.textures.get(spriteKey); - const sourceBackTexture = this.scene.textures.get(backSpriteKey); - const fusionTexture = this.scene.textures.get(fusionSpriteKey); - const fusionBackTexture = this.scene.textures.get(fusionBackSpriteKey); + const sourceTexture = globalScene.textures.get(spriteKey); + const sourceBackTexture = globalScene.textures.get(backSpriteKey); + const fusionTexture = globalScene.textures.get(fusionSpriteKey); + const fusionBackTexture = globalScene.textures.get(fusionBackSpriteKey); const [ sourceFrame, sourceBackFrame, fusionFrame, fusionBackFrame ] = [ sourceTexture, sourceBackTexture, fusionTexture, fusionBackTexture ].map(texture => texture.frames[texture.firstFrame]); const [ sourceImage, sourceBackImage, fusionImage, fusionBackImage ] = [ sourceTexture, sourceBackTexture, fusionTexture, fusionBackTexture ].map(i => i.getSourceImage() as HTMLImageElement); @@ -3858,10 +4042,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const fusionCanvas = document.createElement("canvas"); const fusionBackCanvas = document.createElement("canvas"); - const spriteColors: integer[][] = []; + const spriteColors: number[][] = []; const pixelData: Uint8ClampedArray[] = []; - [ canvas, backCanvas, fusionCanvas, fusionBackCanvas ].forEach((canv: HTMLCanvasElement, c: integer) => { + [ canvas, backCanvas, fusionCanvas, fusionBackCanvas ].forEach((canv: HTMLCanvasElement, c: number) => { const context = canv.getContext("2d"); const frame = [ sourceFrame, sourceBackFrame, fusionFrame, fusionBackFrame ][c]; canv.width = frame.width; @@ -3876,7 +4060,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { for (let f = 0; f < 2; f++) { const variantColors = variantColorCache[!f ? spriteKey : backSpriteKey]; - const variantColorSet = new Map(); + const variantColorSet = new Map(); if (this.shiny && variantColors && variantColors[this.variant]) { Object.keys(variantColors[this.variant]).forEach(k => { variantColorSet.set(Utils.rgbaToInt(Array.from(Object.values(Utils.rgbHexToRgba(k)))), Array.from(Object.values(Utils.rgbHexToRgba(variantColors[this.variant][k])))); @@ -3908,7 +4092,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const pixelColors: number[] = []; for (let f = 0; f < 2; f++) { for (let i = 0; i < pixelData[f].length; i += 4) { - const total = pixelData[f].slice(i, i + 3).reduce((total: integer, value: integer) => total + value, 0); + const total = pixelData[f].slice(i, i + 3).reduce((total: number, value: number) => total + value, 0); if (!total) { continue; } @@ -3919,14 +4103,14 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const fusionPixelColors : number[] = []; for (let f = 0; f < 2; f++) { const variantColors = variantColorCache[!f ? fusionSpriteKey : fusionBackSpriteKey]; - const variantColorSet = new Map(); + const variantColorSet = new Map(); if (this.fusionShiny && variantColors && variantColors[this.fusionVariant]) { Object.keys(variantColors[this.fusionVariant]).forEach(k => { variantColorSet.set(Utils.rgbaToInt(Array.from(Object.values(Utils.rgbHexToRgba(k)))), Array.from(Object.values(Utils.rgbHexToRgba(variantColors[this.fusionVariant][k])))); }); } for (let i = 0; i < pixelData[2 + f].length; i += 4) { - const total = pixelData[2 + f].slice(i, i + 3).reduce((total: integer, value: integer) => total + value, 0); + const total = pixelData[2 + f].slice(i, i + 3).reduce((total: number, value: number) => total + value, 0); if (!total) { continue; } @@ -3944,35 +4128,40 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } + if (fusionPixelColors.length === 0) { // ERROR HANDLING IS NOT OPTIONAL BUDDY + console.log("Failed to create fusion palette"); + return; + } + let paletteColors: Map; let fusionPaletteColors: Map; const originalRandom = Math.random; Math.random = () => Phaser.Math.RND.realInRange(0, 1); - this.scene.executeWithSeedOffset(() => { + globalScene.executeWithSeedOffset(() => { paletteColors = QuantizerCelebi.quantize(pixelColors, 4); fusionPaletteColors = QuantizerCelebi.quantize(fusionPixelColors, 4); }, 0, "This result should not vary"); Math.random = originalRandom; - paletteColors = paletteColors!; // tell TS compiler that paletteColors is defined! - fusionPaletteColors = fusionPaletteColors!; // TS compiler that fusionPaletteColors is defined! + paletteColors = paletteColors!; // erroneously tell TS compiler that paletteColors is defined! + fusionPaletteColors = fusionPaletteColors!; // mischievously misinform TS compiler that fusionPaletteColors is defined! const [ palette, fusionPalette ] = [ paletteColors, fusionPaletteColors ] .map(paletteColors => { - let keys = Array.from(paletteColors.keys()).sort((a: integer, b: integer) => paletteColors.get(a)! < paletteColors.get(b)! ? 1 : -1); - let rgbaColors: Map; + let keys = Array.from(paletteColors.keys()).sort((a: number, b: number) => paletteColors.get(a)! < paletteColors.get(b)! ? 1 : -1); + let rgbaColors: Map; let hsvColors: Map; - const mappedColors = new Map(); + const mappedColors = new Map(); do { mappedColors.clear(); - rgbaColors = keys.reduce((map: Map, k: number) => { + rgbaColors = keys.reduce((map: Map, k: number) => { map.set(k, Object.values(rgbaFromArgb(k))); return map; - }, new Map()); + }, new Map()); hsvColors = Array.from(rgbaColors.keys()).reduce((map: Map, k: number) => { const rgb = rgbaColors.get(k)!.slice(0, 3); map.set(k, Utils.rgbToHsv(rgb[0], rgb[1], rgb[2])); @@ -3995,7 +4184,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } - mappedColors.forEach((values: integer[], key: integer) => { + mappedColors.forEach((values: number[], key: number) => { const keyColor = rgbaColors.get(key)!; const valueColors = values.map(v => rgbaColors.get(v)!); const color = keyColor.slice(0); @@ -4010,7 +4199,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { for (let c = 0; c < 3; c++) { color[c] *= (paletteColors.get(key)! / count); - values.forEach((value: integer, i: integer) => { + values.forEach((value: number, i: number) => { if (paletteColors.has(value)) { const valueCount = paletteColors.get(value)!; color[c] += valueColors[i][c] * (valueCount / count); @@ -4030,7 +4219,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { paletteColors.set(argbFromRgba({ r: color[0], g: color[1], b: color[2], a: color[3] }), count); }); - keys = Array.from(paletteColors.keys()).sort((a: integer, b: integer) => paletteColors.get(a)! < paletteColors.get(b)! ? 1 : -1); + keys = Array.from(paletteColors.keys()).sort((a: number, b: number) => paletteColors.get(a)! < paletteColors.get(b)! ? 1 : -1); } while (mappedColors.size); return keys.map(c => Object.values(rgbaFromArgb(c))); @@ -4039,7 +4228,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const paletteDeltas: number[][] = []; - spriteColors.forEach((sc: integer[], i: integer) => { + spriteColors.forEach((sc: number[], i: number) => { paletteDeltas.push([]); for (let p = 0; p < palette.length; p++) { paletteDeltas[i].push(Utils.deltaRgb(sc, palette[p])); @@ -4071,10 +4260,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } /** - * Generates a random number using the current battle's seed, or the global seed if `this.scene.currentBattle` is falsy + * Generates a random number using the current battle's seed, or the global seed if `globalScene.currentBattle` is falsy * * This calls either {@linkcode BattleScene.randBattleSeedInt}({@linkcode range}, {@linkcode min}) in `src/battle-scene.ts` - * which calls {@linkcode Battle.randSeedInt}(`scene`, {@linkcode range}, {@linkcode min}) in `src/battle.ts` + * which calls {@linkcode Battle.randSeedInt}({@linkcode range}, {@linkcode min}) in `src/battle.ts` * which calls {@linkcode Utils.randSeedInt randSeedInt}({@linkcode range}, {@linkcode min}) in `src/utils.ts`, * or it directly calls {@linkcode Utils.randSeedInt randSeedInt}({@linkcode range}, {@linkcode min}) in `src/utils.ts` if there is no current battle * @@ -4082,19 +4271,19 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param min The minimum integer to pick, default `0` * @returns A random integer between {@linkcode min} and ({@linkcode min} + {@linkcode range} - 1) */ - randSeedInt(range: integer, min: integer = 0): integer { - return this.scene.currentBattle - ? this.scene.randBattleSeedInt(range, min) + randSeedInt(range: number, min: number = 0): number { + return globalScene.currentBattle + ? globalScene.randBattleSeedInt(range, min) : Utils.randSeedInt(range, min); } /** - * Generates a random number using the current battle's seed, or the global seed if `this.scene.currentBattle` is falsy + * Generates a random number using the current battle's seed, or the global seed if `globalScene.currentBattle` is falsy * @param min The minimum integer to generate * @param max The maximum integer to generate * @returns a random integer between {@linkcode min} and {@linkcode max} inclusive */ - randSeedIntRange(min: integer, max: integer): integer { + randSeedIntRange(min: number, max: number): number { return this.randSeedInt((max - min) + 1, min); } @@ -4105,9 +4294,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param hideInfo Indicates if this should also play the animation to hide the Pokemon's * info container. */ - leaveField(clearEffects: boolean = true, hideInfo: boolean = true) { + leaveField(clearEffects: boolean = true, hideInfo: boolean = true, destroy: boolean = false) { this.resetSprite(); this.resetTurnData(); + globalScene.getField(true).filter(p => p !== this).forEach(p => p.removeTagsBySourceId(this.id)); + if (clearEffects) { this.destroySubstitute(); this.resetSummonData(); // this also calls `resetBattleSummonData` @@ -4115,9 +4306,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (hideInfo) { this.hideInfo(); } - this.scene.field.remove(this); + // Trigger abilities that activate upon leaving the field + applyPreLeaveFieldAbAttrs(PreLeaveFieldAbAttr, this); this.setSwitchOutStatus(true); - this.scene.triggerPokemonFormChange(this, SpeciesFormChangeActiveTrigger, true); + globalScene.triggerPokemonFormChange(this, SpeciesFormChangeActiveTrigger, true); + globalScene.field.remove(this, destroy); } destroy(): void { @@ -4171,7 +4364,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (heldItem.pokemonId === -1 || heldItem.pokemonId === this.id) { heldItem.stackCount--; if (heldItem.stackCount <= 0) { - this.scene.removeModifier(heldItem, !this.isPlayer()); + globalScene.removeModifier(heldItem, !this.isPlayer()); } if (forBattle) { applyPostItemLostAbAttrs(PostItemLostAbAttr, this, false); @@ -4183,15 +4376,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } -export default interface Pokemon { - scene: BattleScene -} - export class PlayerPokemon extends Pokemon { public compatibleTms: Moves[]; - constructor(scene: BattleScene, species: PokemonSpecies, level: integer, abilityIndex?: integer, formIndex?: integer, gender?: Gender, shiny?: boolean, variant?: Variant, ivs?: integer[], nature?: Nature, dataSource?: Pokemon | PokemonData) { - super(scene, 106, 148, species, level, abilityIndex, formIndex, gender, shiny, variant, ivs, nature, dataSource); + constructor(species: PokemonSpecies, level: number, abilityIndex?: number, formIndex?: number, gender?: Gender, shiny?: boolean, variant?: Variant, ivs?: number[], nature?: Nature, dataSource?: Pokemon | PokemonData) { + super(106, 148, species, level, abilityIndex, formIndex, gender, shiny, variant, ivs, nature, dataSource); if (Overrides.STATUS_OVERRIDE) { this.status = new Status(Overrides.STATUS_OVERRIDE, 0, 4); @@ -4209,7 +4398,7 @@ export class PlayerPokemon extends Pokemon { } if (!dataSource) { - if (this.scene.gameMode.isDaily) { + if (globalScene.gameMode.isDaily) { this.generateAndPopulateMoveset(); } else { this.moveset = []; @@ -4219,7 +4408,7 @@ export class PlayerPokemon extends Pokemon { } initBattleInfo(): void { - this.battleInfo = new PlayerBattleInfo(this.scene); + this.battleInfo = new PlayerBattleInfo(); this.battleInfo.initInfo(this); } @@ -4235,8 +4424,8 @@ export class PlayerPokemon extends Pokemon { return false; } - getFieldIndex(): integer { - return this.scene.getPlayerField().indexOf(this); + getFieldIndex(): number { + return globalScene.getPlayerField().indexOf(this); } getBattlerIndex(): BattlerIndex { @@ -4272,7 +4461,7 @@ export class PlayerPokemon extends Pokemon { } tryPopulateMoveset(moveset: StarterMoveset): boolean { - if (!this.getSpeciesForm().validateStarterMoveset(moveset, this.scene.gameData.starterData[this.species.getRootSpeciesId()].eggMoves)) { + if (!this.getSpeciesForm().validateStarterMoveset(moveset, globalScene.gameData.starterData[this.species.getRootSpeciesId()].eggMoves)) { return false; } @@ -4292,11 +4481,11 @@ export class PlayerPokemon extends Pokemon { return new Promise(resolve => { this.leaveField(switchType === SwitchType.SWITCH); - this.scene.ui.setMode(Mode.PARTY, PartyUiMode.FAINT_SWITCH, this.getFieldIndex(), (slotIndex: integer, option: PartyOption) => { - if (slotIndex >= this.scene.currentBattle.getBattlerCount() && slotIndex < 6) { - this.scene.prependToPhase(new SwitchSummonPhase(this.scene, switchType, this.getFieldIndex(), slotIndex, false), MoveEndPhase); + globalScene.ui.setMode(Mode.PARTY, PartyUiMode.FAINT_SWITCH, this.getFieldIndex(), (slotIndex: number, option: PartyOption) => { + if (slotIndex >= globalScene.currentBattle.getBattlerCount() && slotIndex < 6) { + globalScene.prependToPhase(new SwitchSummonPhase(switchType, this.getFieldIndex(), slotIndex, false), MoveEndPhase); } - this.scene.ui.setMode(Mode.MESSAGE).then(resolve); + globalScene.ui.setMode(Mode.MESSAGE).then(resolve); }, PartyUiHandler.FilterNonFainted); }); } @@ -4306,28 +4495,29 @@ export class PlayerPokemon extends Pokemon { const starterSpeciesId = this.species.getRootSpeciesId(); const fusionStarterSpeciesId = this.isFusion() && this.fusionSpecies ? this.fusionSpecies.getRootSpeciesId() : 0; const starterData = [ - this.scene.gameData.starterData[starterSpeciesId], - fusionStarterSpeciesId ? this.scene.gameData.starterData[fusionStarterSpeciesId] : null + globalScene.gameData.starterData[starterSpeciesId], + fusionStarterSpeciesId ? globalScene.gameData.starterData[fusionStarterSpeciesId] : null ].filter(d => !!d); const amount = new Utils.NumberHolder(friendship); - this.scene.applyModifier(PokemonFriendshipBoosterModifier, true, this, amount); - let candyFriendshipMultiplier = CLASSIC_CANDY_FRIENDSHIP_MULTIPLIER; - if (this.scene.eventManager.isEventActive()) { - candyFriendshipMultiplier *= this.scene.eventManager.getFriendshipMultiplier(); - } - const starterAmount = new Utils.NumberHolder(Math.floor(amount.value * (this.scene.gameMode.isClassic ? candyFriendshipMultiplier : 1) / (fusionStarterSpeciesId ? 2 : 1))); + globalScene.applyModifier(PokemonFriendshipBoosterModifier, true, this, amount); + const candyFriendshipMultiplier = globalScene.gameMode.isClassic ? globalScene.eventManager.getClassicFriendshipMultiplier() : 1; + const fusionReduction = fusionStarterSpeciesId + ? globalScene.eventManager.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 Utils.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) { - this.scene.validateAchv(achvs.MAX_FRIENDSHIP); + 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 Species; sd.friendship = (sd.friendship || 0) + starterAmount.value; if (sd.friendship >= getStarterValueFriendshipCap(speciesStarterCosts[speciesId])) { - this.scene.gameData.addStarterCandy(getPokemonSpecies(speciesId), 1); + globalScene.gameData.addStarterCandy(getPokemonSpecies(speciesId), 1); sd.friendship = 0; } }); @@ -4336,43 +4526,6 @@ export class PlayerPokemon extends Pokemon { this.friendship = Math.max(this.friendship + friendship, 0); } } - /** - * Handles Revival Blessing when used by player. - * @returns Promise to revive a pokemon. - * @see {@linkcode RevivalBlessingAttr} - */ - revivalBlessing(): Promise { - return new Promise(resolve => { - this.scene.ui.setMode(Mode.PARTY, PartyUiMode.REVIVAL_BLESSING, this.getFieldIndex(), (slotIndex:integer, option: PartyOption) => { - if (slotIndex >= 0 && slotIndex < 6) { - const pokemon = this.scene.getPlayerParty()[slotIndex]; - if (!pokemon || !pokemon.isFainted()) { - resolve(); - } - - pokemon.resetTurnData(); - pokemon.resetStatus(); - pokemon.heal(Math.min(Utils.toDmgValue(0.5 * pokemon.getMaxHp()), pokemon.getMaxHp())); - this.scene.queueMessage(i18next.t("moveTriggers:revivalBlessing", { pokemonName: pokemon.name }), 0, true); - - if (this.scene.currentBattle.double && this.scene.getPlayerParty().length > 1) { - const allyPokemon = this.getAlly(); - if (slotIndex <= 1) { - // Revived ally pokemon - this.scene.unshiftPhase(new SwitchSummonPhase(this.scene, SwitchType.SWITCH, pokemon.getFieldIndex(), slotIndex, false, true)); - this.scene.unshiftPhase(new ToggleDoublePositionPhase(this.scene, true)); - } else if (allyPokemon.isFainted()) { - // Revived party pokemon, and ally pokemon is fainted - this.scene.unshiftPhase(new SwitchSummonPhase(this.scene, SwitchType.SWITCH, allyPokemon.getFieldIndex(), slotIndex, false, true)); - this.scene.unshiftPhase(new ToggleDoublePositionPhase(this.scene, true)); - } - } - - } - this.scene.ui.setMode(Mode.MESSAGE).then(() => resolve()); - }, PartyUiHandler.FilterFainted); - }); - } getPossibleEvolution(evolution: SpeciesFormEvolution | null): Promise { if (!evolution) { @@ -4387,12 +4540,12 @@ export class PlayerPokemon extends Pokemon { const originalFusionFormIndex = this.fusionFormIndex; this.fusionSpecies = evolutionSpecies; this.fusionFormIndex = evolution.evoFormKey !== null ? Math.max(evolutionSpecies.forms.findIndex(f => f.formKey === evolution.evoFormKey), 0) : this.fusionFormIndex; - ret = this.scene.addPlayerPokemon(this.species, this.level, this.abilityIndex, this.formIndex, this.gender, this.shiny, this.variant, this.ivs, this.nature, this); + ret = globalScene.addPlayerPokemon(this.species, this.level, this.abilityIndex, this.formIndex, this.gender, this.shiny, this.variant, this.ivs, this.nature, this); this.fusionSpecies = originalFusionSpecies; this.fusionFormIndex = originalFusionFormIndex; } else { const formIndex = evolution.evoFormKey !== null && !isFusion ? Math.max(evolutionSpecies.forms.findIndex(f => f.formKey === evolution.evoFormKey), 0) : this.formIndex; - ret = this.scene.addPlayerPokemon(!isFusion ? evolutionSpecies : this.species, this.level, this.abilityIndex, formIndex, this.gender, this.shiny, this.variant, this.ivs, this.nature, this); + ret = globalScene.addPlayerPokemon(!isFusion ? evolutionSpecies : this.species, this.level, this.abilityIndex, formIndex, this.gender, this.shiny, this.variant, this.ivs, this.nature, this); } ret.loadAssets().then(() => resolve(ret)); }); @@ -4458,13 +4611,13 @@ export class PlayerPokemon extends Pokemon { if (preEvolution.speciesId === Species.GIMMIGHOUL) { const evotracker = this.getHeldItems().filter(m => m instanceof EvoTrackerModifier)[0] ?? null; if (evotracker) { - this.scene.removeModifier(evotracker); + globalScene.removeModifier(evotracker); } } - if (!this.scene.gameMode.isDaily || this.metBiome > -1) { - this.scene.gameData.updateSpeciesDexIvs(this.species.speciesId, this.ivs); - this.scene.gameData.setPokemonSeen(this, false); - this.scene.gameData.setPokemonCaught(this, false).then(() => updateAndResolve()); + if (!globalScene.gameMode.isDaily || this.metBiome > -1) { + globalScene.gameData.updateSpeciesDexIvs(this.species.speciesId, this.ivs); + globalScene.gameData.setPokemonSeen(this, false); + globalScene.gameData.setPokemonCaught(this, false).then(() => updateAndResolve()); } else { updateAndResolve(); } @@ -4479,11 +4632,12 @@ export class PlayerPokemon extends Pokemon { const newEvolution = pokemonEvolutions[evoSpecies.speciesId][1]; if (newEvolution.condition?.predicate(this)) { - const newPokemon = this.scene.addPlayerPokemon(this.species, this.level, this.abilityIndex, this.formIndex, undefined, this.shiny, this.variant, this.ivs, this.nature); + const newPokemon = globalScene.addPlayerPokemon(this.species, this.level, this.abilityIndex, this.formIndex, undefined, this.shiny, this.variant, this.ivs, this.nature); newPokemon.passive = this.passive; newPokemon.moveset = this.moveset.slice(); newPokemon.moveset = this.copyMoveset(); newPokemon.luck = this.luck; + newPokemon.gender = Gender.GENDERLESS; newPokemon.metLevel = this.metLevel; newPokemon.metBiome = this.metBiome; newPokemon.metSpecies = this.metSpecies; @@ -4495,18 +4649,20 @@ export class PlayerPokemon extends Pokemon { newPokemon.fusionVariant = this.fusionVariant; newPokemon.fusionGender = this.fusionGender; newPokemon.fusionLuck = this.fusionLuck; + newPokemon.fusionTeraType = this.fusionTeraType; newPokemon.usedTMs = this.usedTMs; + newPokemon.evoCounter = this.evoCounter; - this.scene.getPlayerParty().push(newPokemon); + globalScene.getPlayerParty().push(newPokemon); newPokemon.evolve((!isFusion ? newEvolution : new FusionSpeciesFormEvolution(this.id, newEvolution)), evoSpecies); - const modifiers = this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier + const modifiers = globalScene.findModifiers(m => m instanceof PokemonHeldItemModifier && m.pokemonId === this.id, true) as PokemonHeldItemModifier[]; modifiers.forEach(m => { const clonedModifier = m.clone() as PokemonHeldItemModifier; clonedModifier.pokemonId = newPokemon.id; - this.scene.addModifier(clonedModifier, true); + globalScene.addModifier(clonedModifier, true); }); - this.scene.updateModifiers(true); + globalScene.updateModifiers(true); } } } @@ -4514,14 +4670,13 @@ export class PlayerPokemon extends Pokemon { getPossibleForm(formChange: SpeciesFormChange): Promise { return new Promise(resolve => { const formIndex = Math.max(this.species.forms.findIndex(f => f.formKey === formChange.formKey), 0); - const ret = this.scene.addPlayerPokemon(this.species, this.level, this.abilityIndex, formIndex, this.gender, this.shiny, this.variant, this.ivs, this.nature, this); + const ret = globalScene.addPlayerPokemon(this.species, this.level, this.abilityIndex, formIndex, this.gender, this.shiny, this.variant, this.ivs, this.nature, this); ret.loadAssets().then(() => resolve(ret)); }); } changeForm(formChange: SpeciesFormChange): Promise { return new Promise(resolve => { - const previousFormIndex = this.formIndex; this.formIndex = Math.max(this.species.forms.findIndex(f => f.formKey === formChange.formKey), 0); this.generateName(); const abilityCount = this.getSpeciesForm().getAbilityCount(); @@ -4529,37 +4684,18 @@ export class PlayerPokemon extends Pokemon { this.abilityIndex = abilityCount - 1; } - // In cases where a form change updates the type of a Pokemon from its previous form (Arceus, Silvally, Castform, etc.), - // persist that type change in customPokemonData if necessary - const baseForm = this.species.forms[previousFormIndex]; - const baseFormTypes = [ baseForm.type1, baseForm.type2 ]; - if (this.customPokemonData.types.length > 0) { - if (this.getSpeciesForm().type1 !== baseFormTypes[0]) { - this.customPokemonData.types[0] = this.getSpeciesForm().type1; - } - - const type2 = this.getSpeciesForm().type2; - if (!isNullOrUndefined(type2) && type2 !== baseFormTypes[1]) { - if (this.customPokemonData.types.length > 1) { - this.customPokemonData.types[1] = type2; - } else { - this.customPokemonData.types.push(type2); - } - } - } - this.compatibleTms.splice(0, this.compatibleTms.length); this.generateCompatibleTms(); const updateAndResolve = () => { this.loadAssets().then(() => { this.calculateStats(); - this.scene.updateModifiers(true, true); + globalScene.updateModifiers(true, true); this.updateInfo(true).then(() => resolve()); }); }; - if (!this.scene.gameMode.isDaily || this.metBiome > -1) { - this.scene.gameData.setPokemonSeen(this, false); - this.scene.gameData.setPokemonCaught(this, false).then(() => updateAndResolve()); + if (!globalScene.gameMode.isDaily || this.metBiome > -1) { + globalScene.gameData.setPokemonSeen(this, false); + globalScene.gameData.setPokemonCaught(this, false).then(() => updateAndResolve()); } else { updateAndResolve(); } @@ -4572,70 +4708,63 @@ export class PlayerPokemon extends Pokemon { } /** - * Returns a Promise to fuse two PlayerPokemon together - * @param pokemon The PlayerPokemon to fuse to this one - */ - fuse(pokemon: PlayerPokemon): Promise { - return new Promise(resolve => { - this.fusionSpecies = pokemon.species; - this.fusionFormIndex = pokemon.formIndex; - this.fusionAbilityIndex = pokemon.abilityIndex; - this.fusionShiny = pokemon.shiny; - this.fusionVariant = pokemon.variant; - this.fusionGender = pokemon.gender; - this.fusionLuck = pokemon.luck; - this.fusionCustomPokemonData = pokemon.customPokemonData; - if ((pokemon.pauseEvolutions) || (this.pauseEvolutions)) { - this.pauseEvolutions = true; - } + * Returns a Promise to fuse two PlayerPokemon together + * @param pokemon The PlayerPokemon to fuse to this one + */ + fuse(pokemon: PlayerPokemon): void { + this.fusionSpecies = pokemon.species; + this.fusionFormIndex = pokemon.formIndex; + this.fusionAbilityIndex = pokemon.abilityIndex; + this.fusionShiny = pokemon.shiny; + this.fusionVariant = pokemon.variant; + this.fusionGender = pokemon.gender; + this.fusionLuck = pokemon.luck; + this.fusionCustomPokemonData = pokemon.customPokemonData; + this.evoCounter = Math.max(pokemon.evoCounter, this.evoCounter); + if (pokemon.pauseEvolutions || this.pauseEvolutions) { + this.pauseEvolutions = true; + } - this.scene.validateAchv(achvs.SPLICE); - this.scene.gameData.gameStats.pokemonFused++; + globalScene.validateAchv(achvs.SPLICE); + globalScene.gameData.gameStats.pokemonFused++; - // Store the average HP% that each Pokemon has - const maxHp = this.getMaxHp(); - const newHpPercent = ((pokemon.hp / pokemon.getMaxHp()) + (this.hp / maxHp)) / 2; + // Store the average HP% that each Pokemon has + const maxHp = this.getMaxHp(); + const newHpPercent = (pokemon.hp / pokemon.getMaxHp() + this.hp / maxHp) / 2; - this.generateName(); - this.calculateStats(); + this.generateName(); + this.calculateStats(); - // Set this Pokemon's HP to the average % of both fusion components - this.hp = Math.round(maxHp * newHpPercent); - if (!this.isFainted()) { - // If this Pokemon hasn't fainted, make sure the HP wasn't set over the new maximum - this.hp = Math.min(this.hp, maxHp); - this.status = getRandomStatus(this.status, pokemon.status); // Get a random valid status between the two - } else if (!pokemon.isFainted()) { - // If this Pokemon fainted but the other hasn't, make sure the HP wasn't set to zero - this.hp = Math.max(this.hp, 1); - this.status = pokemon.status; // Inherit the other Pokemon's status - } + // Set this Pokemon's HP to the average % of both fusion components + this.hp = Math.round(maxHp * newHpPercent); + if (!this.isFainted()) { + // If this Pokemon hasn't fainted, make sure the HP wasn't set over the new maximum + this.hp = Math.min(this.hp, maxHp); + this.status = getRandomStatus(this.status, pokemon.status); // Get a random valid status between the two + } else if (!pokemon.isFainted()) { + // If this Pokemon fainted but the other hasn't, make sure the HP wasn't set to zero + this.hp = Math.max(this.hp, 1); + this.status = pokemon.status; // Inherit the other Pokemon's status + } - this.generateCompatibleTms(); - this.updateInfo(true); - const fusedPartyMemberIndex = this.scene.getPlayerParty().indexOf(pokemon); - let partyMemberIndex = this.scene.getPlayerParty().indexOf(this); - if (partyMemberIndex > fusedPartyMemberIndex) { - partyMemberIndex--; - } - const fusedPartyMemberHeldModifiers = this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier - && m.pokemonId === pokemon.id, true) as PokemonHeldItemModifier[]; - const transferModifiers: Promise[] = []; - for (const modifier of fusedPartyMemberHeldModifiers) { - transferModifiers.push(this.scene.tryTransferHeldItemModifier(modifier, this, false, modifier.getStackCount(), true, true, false)); - } - Promise.allSettled(transferModifiers).then(() => { - this.scene.updateModifiers(true, true).then(() => { - this.scene.removePartyMemberModifiers(fusedPartyMemberIndex); - this.scene.getPlayerParty().splice(fusedPartyMemberIndex, 1)[0]; - const newPartyMemberIndex = this.scene.getPlayerParty().indexOf(this); - pokemon.getMoveset(true).map((m: PokemonMove) => this.scene.unshiftPhase(new LearnMovePhase(this.scene, newPartyMemberIndex, m.getMove().id))); - pokemon.destroy(); - this.updateFusionPalette(); - resolve(); - }); - }); - }); + this.generateCompatibleTms(); + this.updateInfo(true); + const fusedPartyMemberIndex = globalScene.getPlayerParty().indexOf(pokemon); + let partyMemberIndex = globalScene.getPlayerParty().indexOf(this); + if (partyMemberIndex > fusedPartyMemberIndex) { + partyMemberIndex--; + } + const fusedPartyMemberHeldModifiers = globalScene.findModifiers((m) => m instanceof PokemonHeldItemModifier && m.pokemonId === pokemon.id, true) as PokemonHeldItemModifier[]; + for (const modifier of fusedPartyMemberHeldModifiers) { + globalScene.tryTransferHeldItemModifier(modifier, this, false, modifier.getStackCount(), true, true, false); + } + globalScene.updateModifiers(true, true); + globalScene.removePartyMemberModifiers(fusedPartyMemberIndex); + globalScene.getPlayerParty().splice(fusedPartyMemberIndex, 1)[0]; + const newPartyMemberIndex = globalScene.getPlayerParty().indexOf(this); + pokemon.getMoveset(true).map((m: PokemonMove) => globalScene.unshiftPhase(new LearnMovePhase(newPartyMemberIndex, m.getMove().id))); + pokemon.destroy(); + this.updateFusionPalette(); } unfuse(): Promise { @@ -4664,17 +4793,19 @@ export class PlayerPokemon extends Pokemon { export class EnemyPokemon extends Pokemon { public trainerSlot: TrainerSlot; public aiType: AiType; - public bossSegments: integer; - public bossSegmentIndex: integer; + public bossSegments: number; + public bossSegmentIndex: number; + public initialTeamIndex: number; /** To indicate if the instance was populated with a dataSource -> e.g. loaded & populated from session data */ public readonly isPopulatedFromDataSource: boolean; - constructor(scene: BattleScene, species: PokemonSpecies, level: integer, trainerSlot: TrainerSlot, boss: boolean, shinyLock: boolean = false, dataSource?: PokemonData) { - super(scene, 236, 84, species, level, dataSource?.abilityIndex, dataSource?.formIndex, dataSource?.gender, + constructor(species: PokemonSpecies, level: number, trainerSlot: TrainerSlot, boss: boolean, shinyLock: boolean = false, dataSource?: PokemonData) { + super(236, 84, species, level, dataSource?.abilityIndex, dataSource?.formIndex, dataSource?.gender, (!shinyLock && dataSource) ? dataSource.shiny : false, (!shinyLock && dataSource) ? dataSource.variant : undefined, undefined, dataSource ? dataSource.nature : undefined, dataSource); this.trainerSlot = trainerSlot; + this.initialTeamIndex = globalScene.currentBattle?.enemyParty.length ?? 0; this.isPopulatedFromDataSource = !!dataSource; // if a dataSource is provided, then it was populated from dataSource if (boss) { this.setBoss(boss, dataSource?.bossSegments); @@ -4684,7 +4815,7 @@ export class EnemyPokemon extends Pokemon { this.status = new Status(Overrides.OPP_STATUS_OVERRIDE, 0, 4); } - if (Overrides.OPP_GENDER_OVERRIDE) { + if (Overrides.OPP_GENDER_OVERRIDE !== null) { this.gender = Overrides.OPP_GENDER_OVERRIDE; } @@ -4737,7 +4868,7 @@ export class EnemyPokemon extends Pokemon { initBattleInfo(): void { if (!this.battleInfo) { - this.battleInfo = new EnemyBattleInfo(this.scene); + this.battleInfo = new EnemyBattleInfo(); this.battleInfo.updateBossSegments(this); this.battleInfo.initInfo(this); } else { @@ -4752,9 +4883,9 @@ export class EnemyPokemon extends Pokemon { * @param boss if the pokemon is a boss * @param bossSegments amount of boss segments (health-bar segments) */ - setBoss(boss: boolean = true, bossSegments: integer = 0): void { + setBoss(boss: boolean = true, bossSegments: number = 0): void { if (boss) { - this.bossSegments = bossSegments || this.scene.getEncounterBossSegments(this.scene.currentBattle.waveIndex, this.level, this.species, true); + this.bossSegments = bossSegments || globalScene.getEncounterBossSegments(globalScene.currentBattle.waveIndex, this.level, this.species, true); this.bossSegmentIndex = this.bossSegments - 1; } else { this.bossSegments = 0; @@ -4762,7 +4893,7 @@ export class EnemyPokemon extends Pokemon { } } - generateAndPopulateMoveset(formIndex?: integer): void { + generateAndPopulateMoveset(formIndex?: number): void { switch (true) { case (this.species.speciesId === Species.SMEARGLE): this.moveset = [ @@ -4786,7 +4917,7 @@ export class EnemyPokemon extends Pokemon { new PokemonMove(Moves.FLAMETHROWER), new PokemonMove(Moves.COSMIC_POWER) ]; - if (this.scene.gameMode.hasChallenge(Challenges.INVERSE_BATTLE)) { + if (globalScene.gameMode.hasChallenge(Challenges.INVERSE_BATTLE)) { this.moveset[2] = new PokemonMove(Moves.THUNDERBOLT); } break; @@ -4801,17 +4932,19 @@ export class EnemyPokemon extends Pokemon { * the Pokemon the move will target. * @returns this Pokemon's next move in the format {move, moveTargets} */ - getNextMove(): QueuedMove { + getNextMove(): TurnMove { // If this Pokemon has a move already queued, return it. - const queuedMove = this.getMoveQueue().length - ? this.getMoveset().find(m => m?.moveId === this.getMoveQueue()[0].move) - : null; - if (queuedMove) { - if (queuedMove.isUsable(this, this.getMoveQueue()[0].ignorePP)) { - return { move: queuedMove.moveId, targets: this.getMoveQueue()[0].targets, ignorePP: this.getMoveQueue()[0].ignorePP }; - } else { - this.getMoveQueue().shift(); - return this.getNextMove(); + const moveQueue = this.getMoveQueue(); + if (moveQueue.length !== 0) { + const queuedMove = moveQueue[0]; + if (queuedMove) { + const moveIndex = this.getMoveset().findIndex(m => m?.moveId === queuedMove.move); + if ((moveIndex > -1 && this.getMoveset()[moveIndex]!.isUsable(this, queuedMove.ignorePP)) || queuedMove.virtual) { + return queuedMove; + } else { + this.getMoveQueue().shift(); + return this.getNextMove(); + } } } @@ -4833,7 +4966,7 @@ export class EnemyPokemon extends Pokemon { } switch (this.aiType) { case AiType.RANDOM: // No enemy should spawn with this AI type in-game - const moveId = movePool[this.scene.randBattleSeedInt(movePool.length)]!.moveId; // TODO: is the bang correct? + const moveId = movePool[globalScene.randBattleSeedInt(movePool.length)]!.moveId; // TODO: is the bang correct? return { move: moveId, targets: this.getNextTargets(moveId) }; case AiType.SMART_RANDOM: case AiType.SMART: @@ -4852,7 +4985,7 @@ export class EnemyPokemon extends Pokemon { return false; } - const fieldPokemon = this.scene.getField(); + const fieldPokemon = globalScene.getField(); const moveTargets = getMoveTargets(this, move.id).targets .map(ind => fieldPokemon[ind]) .filter(p => this.isPlayer() !== p.isPlayer()); @@ -4882,7 +5015,7 @@ export class EnemyPokemon extends Pokemon { const move = pokemonMove.getMove(); let moveScore = moveScores[m]; - const targetScores: integer[] = []; + const targetScores: number[] = []; for (const mt of moveTargets[move.id]) { // Prevent a target score from being calculated when the target is whoever attacks the user @@ -4890,7 +5023,7 @@ export class EnemyPokemon extends Pokemon { break; } - const target = this.scene.getField()[mt]; + const target = globalScene.getField()[mt]; /** * The "target score" of a move is given by the move's user benefit score + the move's target benefit score. * If the target is an ally, the target benefit score is multiplied by -1. @@ -4949,13 +5082,13 @@ export class EnemyPokemon extends Pokemon { let r = 0; if (this.aiType === AiType.SMART_RANDOM) { // Has a 5/8 chance to select the best move, and a 3/8 chance to advance to the next best move (and repeat this roll) - while (r < sortedMovePool.length - 1 && this.scene.randBattleSeedInt(8) >= 5) { + while (r < sortedMovePool.length - 1 && globalScene.randBattleSeedInt(8) >= 5) { r++; } } else if (this.aiType === AiType.SMART) { // The chance to advance to the next best move increases when the compared moves' scores are closer to each other. while (r < sortedMovePool.length - 1 && (moveScores[movePool.indexOf(sortedMovePool[r + 1])] / moveScores[movePool.indexOf(sortedMovePool[r])]) >= 0 - && this.scene.randBattleSeedInt(100) < Math.round((moveScores[movePool.indexOf(sortedMovePool[r + 1])] / moveScores[movePool.indexOf(sortedMovePool[r])]) * 50)) { + && globalScene.randBattleSeedInt(100) < Math.round((moveScores[movePool.indexOf(sortedMovePool[r + 1])] / moveScores[movePool.indexOf(sortedMovePool[r])]) * 50)) { r++; } } @@ -4974,7 +5107,7 @@ export class EnemyPokemon extends Pokemon { */ getNextTargets(moveId: Moves): BattlerIndex[] { const moveTargets = getMoveTargets(this, moveId); - const targets = this.scene.getField(true).filter(p => moveTargets.targets.indexOf(p.getBattlerIndex()) > -1); + const targets = globalScene.getField(true).filter(p => moveTargets.targets.indexOf(p.getBattlerIndex()) > -1); // If the move is multi-target, return all targets' indexes if (moveTargets.multiple) { return targets.map(p => p.getBattlerIndex()); @@ -5022,9 +5155,9 @@ export class EnemyPokemon extends Pokemon { targetWeights = targetWeights.slice(0, benefitCutoffIndex); } - const thresholds: integer[] = []; - let totalWeight: integer = 0; - targetWeights.reduce((total: integer, w: integer) => { + const thresholds: number[] = []; + let totalWeight: number = 0; + targetWeights.reduce((total: number, w: number) => { total += w; thresholds.push(total); totalWeight = total; @@ -5036,8 +5169,8 @@ export class EnemyPokemon extends Pokemon { * then select the first target whose cumulative weight (with all previous targets' weights) * is greater than that random number. */ - const randValue = this.scene.randBattleSeedInt(totalWeight); - let targetIndex: integer = 0; + const randValue = globalScene.randBattleSeedInt(totalWeight); + let targetIndex: number = 0; thresholds.every((t, i) => { if (randValue >= t) { @@ -5063,7 +5196,7 @@ export class EnemyPokemon extends Pokemon { return !!this.bossSegments; } - getBossSegmentIndex(): integer { + getBossSegmentIndex(): number { const segments = (this as EnemyPokemon).bossSegments; const segmentSize = this.getMaxHp() / segments; for (let s = segments - 1; s > 0; s--) { @@ -5076,7 +5209,7 @@ export class EnemyPokemon extends Pokemon { return 0; } - damage(damage: integer, ignoreSegments: boolean = false, preventEndure: boolean = false, ignoreFaintPhase: boolean = false): integer { + damage(damage: number, ignoreSegments: boolean = false, preventEndure: boolean = false, ignoreFaintPhase: boolean = false): number { if (this.isFainted()) { return 0; } @@ -5107,7 +5240,7 @@ export class EnemyPokemon extends Pokemon { } } - switch (this.scene.currentBattle.battleSpec) { + switch (globalScene.currentBattle.battleSpec) { case BattleSpec.FINAL_BOSS: if (!this.formIndex && this.bossSegmentIndex < 1) { damage = Math.min(damage, this.hp - 1); @@ -5130,8 +5263,8 @@ export class EnemyPokemon extends Pokemon { return ret; } - canBypassBossSegments(segmentCount: integer = 1): boolean { - if (this.scene.currentBattle.battleSpec === BattleSpec.FINAL_BOSS) { + canBypassBossSegments(segmentCount: number = 1): boolean { + if (globalScene.currentBattle.battleSpec === BattleSpec.FINAL_BOSS) { if (!this.formIndex && (this.bossSegmentIndex - segmentCount) < 1) { return false; } @@ -5147,7 +5280,7 @@ export class EnemyPokemon extends Pokemon { * For Pokemon with 5 health segments or more, breaking the last two shields give +2 each * @param segmentIndex index of the segment to get down to (0 = no shield left, 1 = 1 shield left, etc.) */ - handleBossSegmentCleared(segmentIndex: integer): void { + handleBossSegmentCleared(segmentIndex: number): void { while (this.bossSegmentIndex > 0 && segmentIndex - 1 < this.bossSegmentIndex) { // Filter out already maxed out stat stages and weigh the rest based on existing stats const leftoverStats = EFFECTIVE_STATS.filter((s: EffectiveStat) => this.getStatStage(s) < 6); @@ -5182,13 +5315,13 @@ export class EnemyPokemon extends Pokemon { stages++; } - this.scene.unshiftPhase(new StatStageChangePhase(this.scene, this.getBattlerIndex(), true, [ boostedStat! ], stages, true, true)); + globalScene.unshiftPhase(new StatStageChangePhase(this.getBattlerIndex(), true, [ boostedStat! ], stages, true, true)); this.bossSegmentIndex--; } } - getFieldIndex(): integer { - return this.scene.getEnemyField().indexOf(this); + getFieldIndex(): number { + return globalScene.getEnemyField().indexOf(this); } getBattlerIndex(): BattlerIndex { @@ -5203,16 +5336,16 @@ export class EnemyPokemon extends Pokemon { * @returns the pokemon that was added or null if the pokemon could not be added */ addToParty(pokeballType: PokeballType, slotIndex: number = -1) { - const party = this.scene.getPlayerParty(); + const party = globalScene.getPlayerParty(); let ret: PlayerPokemon | null = null; if (party.length < PLAYER_PARTY_MAX_SIZE) { this.pokeball = pokeballType; this.metLevel = this.level; - this.metBiome = this.scene.arena.biomeType; - this.metWave = this.scene.currentBattle.waveIndex; + this.metBiome = globalScene.arena.biomeType; + this.metWave = globalScene.currentBattle.waveIndex; this.metSpecies = this.species.speciesId; - const newPokemon = this.scene.addPlayerPokemon(this.species, this.level, this.abilityIndex, this.formIndex, this.gender, this.shiny, this.variant, this.ivs, this.nature, this); + const newPokemon = globalScene.addPlayerPokemon(this.species, this.level, this.abilityIndex, this.formIndex, this.gender, this.shiny, this.variant, this.ivs, this.nature, this); if (Utils.isBetween(slotIndex, 0, PLAYER_PARTY_MAX_SIZE - 1)) { party.splice(slotIndex, 0, newPokemon); @@ -5224,7 +5357,7 @@ export class EnemyPokemon extends Pokemon { newPokemon.setVisible(false); ret = newPokemon; - this.scene.triggerPokemonFormChange(newPokemon, SpeciesFormChangeActiveTrigger, true); + globalScene.triggerPokemonFormChange(newPokemon, SpeciesFormChangeActiveTrigger, true); } return ret; @@ -5233,15 +5366,10 @@ export class EnemyPokemon extends Pokemon { export interface TurnMove { move: Moves; - targets?: BattlerIndex[]; - result: MoveResult; + targets: BattlerIndex[]; + result?: MoveResult; virtual?: boolean; turn?: number; -} - -export interface QueuedMove { - move: Moves; - targets: BattlerIndex[]; ignorePP?: boolean; } @@ -5257,7 +5385,7 @@ export interface AttackMoveResult { export class PokemonSummonData { /** [Atk, Def, SpAtk, SpDef, Spd, Acc, Eva] */ public statStages: number[] = [ 0, 0, 0, 0, 0, 0, 0 ]; - public moveQueue: QueuedMove[] = []; + public moveQueue: TurnMove[] = []; public tags: BattlerTag[] = []; public abilitySuppressed: boolean = false; public abilitiesApplied: Abilities[] = []; @@ -5275,7 +5403,10 @@ export class PokemonSummonData { } export class PokemonBattleData { + /** counts the hits the pokemon received */ public hitCount: number = 0; + /** used for {@linkcode Moves.RAGE_FIST} in order to save hit Counts received before Rage Fist is applied */ + public prevHitCount: number = 0; public endured: boolean = false; public berriesEaten: BerryType[] = []; public abilitiesApplied: Abilities[] = []; @@ -5426,7 +5557,7 @@ export class PokemonMove { this.ppUsed = Math.min(this.ppUsed + count, this.getMovePp()); } - getMovePp(): integer { + getMovePp(): number { return this.maxPpOverride || (this.getMove().pp + this.ppUp * Utils.toDmgValue(this.getMove().pp / 5)); } diff --git a/src/field/trainer.ts b/src/field/trainer.ts index b77a156f401..ab247716e15 100644 --- a/src/field/trainer.ts +++ b/src/field/trainer.ts @@ -1,19 +1,22 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; -import PokemonSpecies, { getPokemonSpecies } from "#app/data/pokemon-species"; -import { +import type PokemonSpecies from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/data/pokemon-species"; +import type { TrainerConfig, + TrainerPartyTemplate } from "#app/data/trainer-config"; +import { TrainerPartyCompoundTemplate, - TrainerPartyTemplate, TrainerPoolTier, TrainerSlot, trainerConfigs, trainerPartyTemplates, - signatureSpecies + signatureSpecies, + TeraAIMode } from "#app/data/trainer-config"; -import { EnemyPokemon } from "#app/field/pokemon"; +import type { EnemyPokemon } from "#app/field/pokemon"; import * as Utils from "#app/utils"; -import { PersistentModifier } from "#app/modifier/modifier"; +import type { PersistentModifier } from "#app/modifier/modifier"; import { trainerNamePools } from "#app/data/trainer-names"; import { ArenaTagSide, ArenaTrapTag } from "#app/data/arena-tag"; import { getIsInitialized, initI18n } from "#app/plugins/i18n"; @@ -31,12 +34,13 @@ export enum TrainerVariant { export default class Trainer extends Phaser.GameObjects.Container { public config: TrainerConfig; public variant: TrainerVariant; - public partyTemplateIndex: integer; + public partyTemplateIndex: number; public name: string; public partnerName: string; + public originalIndexes: { [key: number]: number } = {}; - constructor(scene: BattleScene, trainerType: TrainerType, variant: TrainerVariant, partyTemplateIndex?: integer, name?: string, partnerName?: string, trainerConfigOverride?: TrainerConfig) { - super(scene, -72, 80); + constructor(trainerType: TrainerType, variant: TrainerVariant, partyTemplateIndex?: number, name?: string, partnerName?: string, trainerConfigOverride?: TrainerConfig) { + super(globalScene, -72, 80); this.config = trainerConfigs.hasOwnProperty(trainerType) ? trainerConfigs[trainerType] : trainerConfigs[TrainerType.ACE_TRAINER]; @@ -80,9 +84,9 @@ export default class Trainer extends Phaser.GameObjects.Container { console.log(Object.keys(trainerPartyTemplates)[Object.values(trainerPartyTemplates).indexOf(this.getPartyTemplate())]); const getSprite = (hasShadow?: boolean, forceFemale?: boolean) => { - const ret = this.scene.addFieldSprite(0, 0, this.config.getSpriteKey(variant === TrainerVariant.FEMALE || forceFemale, this.isDouble())); + const ret = globalScene.addFieldSprite(0, 0, this.config.getSpriteKey(variant === TrainerVariant.FEMALE || forceFemale, this.isDouble())); ret.setOrigin(0.5, 1); - ret.setPipeline(this.scene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], hasShadow: !!hasShadow }); + ret.setPipeline(globalScene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], hasShadow: !!hasShadow }); return ret; }; @@ -207,16 +211,16 @@ export default class Trainer extends Phaser.GameObjects.Container { getPartyTemplate(): TrainerPartyTemplate { if (this.config.partyTemplateFunc) { - return this.config.partyTemplateFunc(this.scene); + return this.config.partyTemplateFunc(); } return this.config.partyTemplates[this.partyTemplateIndex]; } - getPartyLevels(waveIndex: integer): integer[] { + getPartyLevels(waveIndex: number): number[] { const ret: number[] = []; const partyTemplate = this.getPartyTemplate(); - const difficultyWaveIndex = this.scene.gameMode.getWaveForDifficulty(waveIndex); + const difficultyWaveIndex = globalScene.gameMode.getWaveForDifficulty(waveIndex); const baseLevel = 1 + difficultyWaveIndex / 2 + Math.pow(difficultyWaveIndex / 25, 2); if (this.isDouble() && partyTemplate.size < 2) { @@ -260,13 +264,13 @@ export default class Trainer extends Phaser.GameObjects.Container { return ret; } - genPartyMember(index: integer): EnemyPokemon { - const battle = this.scene.currentBattle; + genPartyMember(index: number): EnemyPokemon { + const battle = globalScene.currentBattle; const level = battle.enemyLevels?.[index]!; // TODO: is this bang correct? let ret: EnemyPokemon; - this.scene.executeWithSeedOffset(() => { + globalScene.executeWithSeedOffset(() => { const template = this.getPartyTemplate(); const strength: PartyMemberStrength = template.getStrength(index); @@ -275,11 +279,11 @@ export default class Trainer extends Phaser.GameObjects.Container { if (!(this.config.trainerTypeDouble && this.isDouble() && !this.config.doubleOnly)) { if (this.config.partyMemberFuncs.hasOwnProperty(index)) { - ret = this.config.partyMemberFuncs[index](this.scene, level, strength); + ret = this.config.partyMemberFuncs[index](level, strength); return; } if (this.config.partyMemberFuncs.hasOwnProperty(index - template.size)) { - ret = this.config.partyMemberFuncs[index - template.size](this.scene, level, template.getStrength(index)); + ret = this.config.partyMemberFuncs[index - template.size](level, template.getStrength(index)); return; } } @@ -364,23 +368,23 @@ export default class Trainer extends Phaser.GameObjects.Container { let species = useNewSpeciesPool ? getPokemonSpecies(newSpeciesPool[Math.floor(Utils.randSeedInt(newSpeciesPool.length))]) : template.isSameSpecies(index) && index > offset - ? getPokemonSpecies(battle.enemyParty[offset].species.getTrainerSpeciesForLevel(level, false, template.getStrength(offset), this.scene.currentBattle.waveIndex)) + ? getPokemonSpecies(battle.enemyParty[offset].species.getTrainerSpeciesForLevel(level, false, template.getStrength(offset), globalScene.currentBattle.waveIndex)) : this.genNewPartyMemberSpecies(level, strength); // If the species is from newSpeciesPool, we need to adjust it based on the level and strength if (newSpeciesPool) { - species = getPokemonSpecies(species.getSpeciesForLevel(level, true, true, strength, this.scene.currentBattle.waveIndex)); + species = getPokemonSpecies(species.getSpeciesForLevel(level, true, true, strength, globalScene.currentBattle.waveIndex)); } - ret = this.scene.addEnemyPokemon(species, level, !this.isDouble() || !(index % 2) ? TrainerSlot.TRAINER : TrainerSlot.TRAINER_PARTNER); - }, this.config.hasStaticParty ? this.config.getDerivedType() + ((index + 1) << 8) : this.scene.currentBattle.waveIndex + (this.config.getDerivedType() << 10) + (((!this.config.useSameSeedForAllMembers ? index : 0) + 1) << 8)); + ret = globalScene.addEnemyPokemon(species, level, !this.isDouble() || !(index % 2) ? TrainerSlot.TRAINER : TrainerSlot.TRAINER_PARTNER); + }, this.config.hasStaticParty ? this.config.getDerivedType() + ((index + 1) << 8) : globalScene.currentBattle.waveIndex + (this.config.getDerivedType() << 10) + (((!this.config.useSameSeedForAllMembers ? index : 0) + 1) << 8)); return ret!; // TODO: is this bang correct? } - genNewPartyMemberSpecies(level: integer, strength: PartyMemberStrength, attempt?: integer): PokemonSpecies { - const battle = this.scene.currentBattle; + genNewPartyMemberSpecies(level: number, strength: PartyMemberStrength, attempt?: number): PokemonSpecies { + const battle = globalScene.currentBattle; const template = this.getPartyTemplate(); let baseSpecies: PokemonSpecies; @@ -395,10 +399,10 @@ export default class Trainer extends Phaser.GameObjects.Container { const tierPool = this.config.speciesPools[tier]; baseSpecies = getPokemonSpecies(Utils.randSeedItem(tierPool)); } else { - baseSpecies = this.scene.randomSpecies(battle.waveIndex, level, false, this.config.speciesFilter); + baseSpecies = globalScene.randomSpecies(battle.waveIndex, level, false, this.config.speciesFilter); } - let ret = getPokemonSpecies(baseSpecies.getTrainerSpeciesForLevel(level, true, strength, this.scene.currentBattle.waveIndex)); + let ret = getPokemonSpecies(baseSpecies.getTrainerSpeciesForLevel(level, true, strength, globalScene.currentBattle.waveIndex)); let retry = false; console.log(ret.getName()); @@ -412,21 +416,23 @@ export default class Trainer extends Phaser.GameObjects.Container { } } - if (!retry && this.config.specialtyTypes.length && !this.config.specialtyTypes.find(t => ret.isOfType(t))) { + // Prompts reroll of party member species if doesn't fit specialty type. + // Can be removed by adding a type parameter to getTrainerSpeciesForLevel and filtering the list of evolutions for that type. + if (!retry && this.config.hasSpecialtyType() && !ret.isOfType(this.config.specialtyType)) { retry = true; console.log("Attempting reroll of species evolution to fit specialty type..."); let evoAttempt = 0; while (retry && evoAttempt++ < 10) { - ret = getPokemonSpecies(baseSpecies.getTrainerSpeciesForLevel(level, true, strength, this.scene.currentBattle.waveIndex)); + ret = getPokemonSpecies(baseSpecies.getTrainerSpeciesForLevel(level, true, strength, globalScene.currentBattle.waveIndex)); console.log(ret.name); - if (this.config.specialtyTypes.find(t => ret.isOfType(t))) { + if (ret.isOfType(this.config.specialtyType)) { retry = false; } } } // Prompts reroll of party member species if species already present in the enemy party - if (this.checkDuplicateSpecies(ret, baseSpecies)) { + if (this.checkDuplicateSpecies(baseSpecies.speciesId)) { console.log("Duplicate species detected, prompting reroll..."); retry = true; } @@ -441,28 +447,34 @@ export default class Trainer extends Phaser.GameObjects.Container { /** * Checks if the enemy trainer already has the Pokemon species in their party - * @param {PokemonSpecies} species {@linkcode PokemonSpecies} - * @param {PokemonSpecies} baseSpecies {@linkcode PokemonSpecies} - baseSpecies of the Pokemon if species is forced to evolve + * @param baseSpecies - The base {@linkcode Species} of the current Pokemon * @returns `true` if the species is already present in the party */ - checkDuplicateSpecies(species: PokemonSpecies, baseSpecies: PokemonSpecies): boolean { - const staticPartyPokemon = (signatureSpecies[TrainerType[this.config.trainerType]] ?? []).flat(1); - - const currentPartySpecies = this.scene.getEnemyParty().map(p => { - return p.species.speciesId; + checkDuplicateSpecies(baseSpecies: Species): boolean { + const staticSpecies = (signatureSpecies[TrainerType[this.config.trainerType]] ?? []).flat(1).map(s => { + let root = s; + while (pokemonPrevolutions.hasOwnProperty(root)) { + root = pokemonPrevolutions[root]; + } + return root; }); - return currentPartySpecies.includes(species.speciesId) || staticPartyPokemon.includes(baseSpecies.speciesId); + + const currentSpecies = globalScene.getEnemyParty().map(p => { + return p.species.getRootSpeciesId(); + }); + + return currentSpecies.includes(baseSpecies) || staticSpecies.includes(baseSpecies); } - getPartyMemberMatchupScores(trainerSlot: TrainerSlot = TrainerSlot.NONE, forSwitch: boolean = false): [integer, integer][] { + getPartyMemberMatchupScores(trainerSlot: TrainerSlot = TrainerSlot.NONE, forSwitch: boolean = false): [number, number][] { if (trainerSlot && !this.isDouble()) { trainerSlot = TrainerSlot.NONE; } - const party = this.scene.getEnemyParty(); - const nonFaintedLegalPartyMembers = party.slice(this.scene.currentBattle.getBattlerCount()).filter(p => p.isAllowedInBattle()).filter(p => !trainerSlot || p.trainerSlot === trainerSlot); + const party = globalScene.getEnemyParty(); + const nonFaintedLegalPartyMembers = party.slice(globalScene.currentBattle.getBattlerCount()).filter(p => p.isAllowedInBattle()).filter(p => !trainerSlot || p.trainerSlot === trainerSlot); const partyMemberScores = nonFaintedLegalPartyMembers.map(p => { - const playerField = this.scene.getPlayerField().filter(p => p.isAllowedInBattle()); + const playerField = globalScene.getPlayerField().filter(p => p.isAllowedInBattle()); let score = 0; if (playerField.length > 0) { @@ -474,17 +486,17 @@ export default class Trainer extends Phaser.GameObjects.Container { } score /= playerField.length; if (forSwitch && !p.isOnField()) { - this.scene.arena.findTagsOnSide(t => t instanceof ArenaTrapTag, ArenaTagSide.ENEMY).map(t => score *= (t as ArenaTrapTag).getMatchupScoreMultiplier(p)); + globalScene.arena.findTagsOnSide(t => t instanceof ArenaTrapTag, ArenaTagSide.ENEMY).map(t => score *= (t as ArenaTrapTag).getMatchupScoreMultiplier(p)); } } return [ party.indexOf(p), score ]; - }) as [integer, integer][]; + }) as [number, number][]; return partyMemberScores; } - getSortedPartyMemberMatchupScores(partyMemberScores: [integer, integer][] = this.getPartyMemberMatchupScores()) { + getSortedPartyMemberMatchupScores(partyMemberScores: [number, number][] = this.getPartyMemberMatchupScores()) { const sortedPartyMemberScores = partyMemberScores.slice(0); sortedPartyMemberScores.sort((a, b) => { const scoreA = a[1]; @@ -495,7 +507,7 @@ export default class Trainer extends Phaser.GameObjects.Container { return sortedPartyMemberScores; } - getNextSummonIndex(trainerSlot: TrainerSlot = TrainerSlot.NONE, partyMemberScores: [integer, integer][] = this.getPartyMemberMatchupScores(trainerSlot)): integer { + getNextSummonIndex(trainerSlot: TrainerSlot = TrainerSlot.NONE, partyMemberScores: [number, number][] = this.getPartyMemberMatchupScores(trainerSlot)): number { if (trainerSlot && !this.isDouble()) { trainerSlot = TrainerSlot.NONE; } @@ -505,15 +517,15 @@ export default class Trainer extends Phaser.GameObjects.Container { const maxScorePartyMemberIndexes = partyMemberScores.filter(pms => pms[1] === sortedPartyMemberScores[0][1]).map(pms => pms[0]); if (maxScorePartyMemberIndexes.length > 1) { - let rand: integer; - this.scene.executeWithSeedOffset(() => rand = Utils.randSeedInt(maxScorePartyMemberIndexes.length), this.scene.currentBattle.turn << 2); + let rand: number; + globalScene.executeWithSeedOffset(() => rand = Utils.randSeedInt(maxScorePartyMemberIndexes.length), globalScene.currentBattle.turn << 2); return maxScorePartyMemberIndexes[rand!]; } return maxScorePartyMemberIndexes[0]; } - getPartyMemberModifierChanceMultiplier(index: integer): number { + getPartyMemberModifierChanceMultiplier(index: number): number { switch (this.getPartyTemplate().getStrength(index)) { case PartyMemberStrength.WEAKER: return 0.75; @@ -538,8 +550,15 @@ export default class Trainer extends Phaser.GameObjects.Container { return []; } + genAI(party: EnemyPokemon[]) { + if (this.config.genAIFuncs) { + this.config.genAIFuncs.forEach(f => f(party)); + } + console.log("Generated AI funcs"); + } + loadAssets(): Promise { - return this.config.loadAssets(this.scene, this.variant); + return this.config.loadAssets(this.variant); } initSprite(): void { @@ -618,7 +637,7 @@ export default class Trainer extends Phaser.GameObjects.Container { return ret; } - tint(color: number, alpha?: number, duration?: integer, ease?: string): void { + tint(color: number, alpha?: number, duration?: number, ease?: string): void { const tintSprites = this.getTintSprites(); tintSprites.map(tintSprite => { tintSprite.setTintFill(color); @@ -627,7 +646,7 @@ export default class Trainer extends Phaser.GameObjects.Container { if (duration) { tintSprite.setAlpha(0); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: tintSprite, alpha: alpha || 1, duration: duration, @@ -639,11 +658,11 @@ export default class Trainer extends Phaser.GameObjects.Container { }); } - untint(duration: integer, ease?: string): void { + untint(duration: number, ease?: string): void { const tintSprites = this.getTintSprites(); tintSprites.map(tintSprite => { if (duration) { - this.scene.tweens.add({ + globalScene.tweens.add({ targets: tintSprite, alpha: 0, duration: duration, @@ -659,8 +678,18 @@ export default class Trainer extends Phaser.GameObjects.Container { } }); } -} -export default interface Trainer { - scene: BattleScene + /** + * Determines whether a Trainer should Terastallize their Pokemon + * @param pokemon {@linkcode EnemyPokemon} Trainer Pokemon in question + * @returns boolean Whether the EnemyPokemon should Terastalize this turn + */ + shouldTera(pokemon: EnemyPokemon): boolean { + if (this.config.trainerAI.teraMode === TeraAIMode.INSTANT_TERA) { + if (!pokemon.isTerastallized && this.config.trainerAI.instantTeras.includes(pokemon.initialTeamIndex)) { + return true; + } + } + return false; + } } diff --git a/src/game-mode.ts b/src/game-mode.ts index 3f12c5b056e..1da125ea55a 100644 --- a/src/game-mode.ts +++ b/src/game-mode.ts @@ -1,14 +1,18 @@ import i18next from "i18next"; -import { classicFixedBattles, FixedBattleConfig, FixedBattleConfigs } from "./battle"; -import BattleScene from "./battle-scene"; -import { allChallenges, applyChallenges, Challenge, ChallengeType, copyChallenge } from "./data/challenge"; -import PokemonSpecies, { allSpecies } from "./data/pokemon-species"; -import { Arena } from "./field/arena"; +import type { FixedBattleConfigs } from "./battle"; +import { classicFixedBattles, FixedBattleConfig } from "./battle"; +import type { Challenge } from "./data/challenge"; +import { allChallenges, applyChallenges, ChallengeType, copyChallenge } from "./data/challenge"; +import type PokemonSpecies from "./data/pokemon-species"; +import { allSpecies } from "./data/pokemon-species"; +import type { Arena } from "./field/arena"; import Overrides from "#app/overrides"; import * as Utils from "./utils"; import { Biome } from "#enums/biome"; import { Species } from "#enums/species"; import { Challenges } from "./enums/challenges"; +import { globalScene } from "#app/global-scene"; +import { getDailyStartingBiome } from "./data/daily-run"; export enum GameModes { CLASSIC, @@ -87,7 +91,7 @@ export class GameMode implements GameModeConfig { * - 20 for Daily Runs * - 5 for all other modes */ - getStartingLevel(): integer { + getStartingLevel(): number { if (Overrides.STARTING_LEVEL_OVERRIDE) { return Overrides.STARTING_LEVEL_OVERRIDE; } @@ -104,27 +108,26 @@ export class GameMode implements GameModeConfig { * - override from overrides.ts * - 1000 */ - getStartingMoney(): integer { + getStartingMoney(): number { return Overrides.STARTING_MONEY_OVERRIDE || 1000; } /** - * @param scene current BattleScene * @returns either: * - random biome for Daily mode * - override from overrides.ts * - Town */ - getStartingBiome(scene: BattleScene): Biome { + getStartingBiome(): Biome { switch (this.modeId) { case GameModes.DAILY: - return scene.generateRandomBiome(this.getWaveForDifficulty(1)); + return getDailyStartingBiome(); default: return Overrides.STARTING_BIOME_OVERRIDE || Biome.TOWN; } } - getWaveForDifficulty(waveIndex: integer, ignoreCurveChanges: boolean = false): integer { + getWaveForDifficulty(waveIndex: number, ignoreCurveChanges: boolean = false): number { switch (this.modeId) { case GameModes.DAILY: return waveIndex + 30 + (!ignoreCurveChanges ? Math.floor(waveIndex / 5) : 0); @@ -136,24 +139,23 @@ export class GameMode implements GameModeConfig { /** * Determines whether or not to generate a trainer * @param waveIndex the current floor the player is on (trainer sprites fail to generate on X1 floors) - * @param arena the arena that contains the scene and functions - * @returns true if a trainer should be generated, false otherwise + * @param arena the current {@linkcode Arena} + * @returns `true` if a trainer should be generated, `false` otherwise */ - isWaveTrainer(waveIndex: integer, arena: Arena): boolean { + isWaveTrainer(waveIndex: number, arena: Arena): boolean { /** * Daily spawns trainers on floors 5, 15, 20, 25, 30, 35, 40, and 45 */ if (this.isDaily) { return waveIndex % 10 === 5 || (!(waveIndex % 10) && waveIndex > 10 && !this.isWaveFinal(waveIndex)); } - if ((waveIndex % 30) === (arena.scene.offsetGym ? 0 : 20) && !this.isWaveFinal(waveIndex)) { + if ((waveIndex % 30) === (globalScene.offsetGym ? 0 : 20) && !this.isWaveFinal(waveIndex)) { return true; } else if (waveIndex % 10 !== 1 && waveIndex % 10) { /** * Do not check X1 floors since there's a bug that stops trainer sprites from appearing * after a X0 full party heal */ - const trainerChance = arena.getTrainerChance(); let allowTrainerBattle = true; if (trainerChance) { @@ -163,11 +165,11 @@ export class GameMode implements GameModeConfig { if (w === waveIndex) { continue; } - if ((w % 30) === (arena.scene.offsetGym ? 0 : 20) || this.isFixedBattle(w)) { + if ((w % 30) === (globalScene.offsetGym ? 0 : 20) || this.isFixedBattle(w)) { allowTrainerBattle = false; break; } else if (w < waveIndex) { - arena.scene.executeWithSeedOffset(() => { + globalScene.executeWithSeedOffset(() => { const waveTrainerChance = arena.getTrainerChance(); if (!Utils.randSeedInt(waveTrainerChance)) { allowTrainerBattle = false; @@ -184,7 +186,7 @@ export class GameMode implements GameModeConfig { return false; } - isTrainerBoss(waveIndex: integer, biomeType: Biome, offsetGym: boolean): boolean { + isTrainerBoss(waveIndex: number, biomeType: Biome, offsetGym: boolean): boolean { switch (this.modeId) { case GameModes.DAILY: return waveIndex > 10 && waveIndex < 50 && !(waveIndex % 10); @@ -193,7 +195,7 @@ export class GameMode implements GameModeConfig { } } - getOverrideSpecies(waveIndex: integer): PokemonSpecies | null { + getOverrideSpecies(waveIndex: number): PokemonSpecies | null { if (this.isDaily && this.isWaveFinal(waveIndex)) { const allFinalBossSpecies = allSpecies.filter(s => (s.subLegendary || s.legendary || s.mythical) && s.baseTotal >= 600 && s.speciesId !== Species.ETERNATUS && s.speciesId !== Species.ARCEUS); @@ -209,7 +211,7 @@ export class GameMode implements GameModeConfig { * @param modeId game mode * @returns if the current wave is final for classic or daily OR a minor boss in endless */ - isWaveFinal(waveIndex: integer, modeId: GameModes = this.modeId): boolean { + isWaveFinal(waveIndex: number, modeId: GameModes = this.modeId): boolean { switch (modeId) { case GameModes.CLASSIC: case GameModes.CHALLENGE: @@ -226,7 +228,7 @@ export class GameMode implements GameModeConfig { * Every 10 waves is a boss battle * @returns true if waveIndex is a multiple of 10 */ - isBoss(waveIndex: integer): boolean { + isBoss(waveIndex: number): boolean { return waveIndex % 10 === 0; } @@ -242,7 +244,7 @@ export class GameMode implements GameModeConfig { * At this time it is paradox pokemon * @returns true if waveIndex is a multiple of 50 in Endless */ - isEndlessBoss(waveIndex: integer): boolean { + isEndlessBoss(waveIndex: number): boolean { return waveIndex % 50 === 0 && (this.modeId === GameModes.ENDLESS || this.modeId === GameModes.SPLICED_ENDLESS); } @@ -252,7 +254,7 @@ export class GameMode implements GameModeConfig { * At this time it is Eternatus * @returns true if waveIndex is a multiple of 250 in Endless */ - isEndlessMinorBoss(waveIndex: integer): boolean { + isEndlessMinorBoss(waveIndex: number): boolean { return waveIndex % 250 === 0 && (this.modeId === GameModes.ENDLESS || this.modeId === GameModes.SPLICED_ENDLESS); } @@ -262,27 +264,27 @@ export class GameMode implements GameModeConfig { * At this time it is Eternamax Eternatus * @returns true if waveIndex is a multiple of 1000 in Endless */ - isEndlessMajorBoss(waveIndex: integer): boolean { + isEndlessMajorBoss(waveIndex: number): boolean { return waveIndex % 1000 === 0 && (this.modeId === GameModes.ENDLESS || this.modeId === GameModes.SPLICED_ENDLESS); } /** * Checks whether there is a fixed battle on this gamemode on a given wave. - * @param {integer} waveIndex The wave to check. + * @param {number} waveIndex The wave to check. * @returns {boolean} If this game mode has a fixed battle on this wave */ - isFixedBattle(waveIndex: integer): boolean { + isFixedBattle(waveIndex: number): boolean { const dummyConfig = new FixedBattleConfig(); return this.battleConfig.hasOwnProperty(waveIndex) || applyChallenges(this, ChallengeType.FIXED_BATTLES, waveIndex, dummyConfig); } /** * Returns the config for the fixed battle for a particular wave. - * @param {integer} waveIndex The wave to check. + * @param {number} waveIndex The wave to check. * @returns {boolean} The fixed battle for this wave. */ - getFixedBattle(waveIndex: integer): FixedBattleConfig { + getFixedBattle(waveIndex: number): FixedBattleConfig { const challengeConfig = new FixedBattleConfig(); if (applyChallenges(this, ChallengeType.FIXED_BATTLES, waveIndex, challengeConfig)) { return challengeConfig; @@ -292,7 +294,7 @@ export class GameMode implements GameModeConfig { } - getClearScoreBonus(): integer { + getClearScoreBonus(): number { switch (this.modeId) { case GameModes.CLASSIC: case GameModes.CHALLENGE: @@ -304,7 +306,7 @@ export class GameMode implements GameModeConfig { } } - getEnemyModifierChance(isBoss: boolean): integer { + getEnemyModifierChance(isBoss: boolean): number { switch (this.modeId) { case GameModes.CLASSIC: case GameModes.CHALLENGE: diff --git a/src/global-scene.ts b/src/global-scene.ts new file mode 100644 index 00000000000..76071bd7fac --- /dev/null +++ b/src/global-scene.ts @@ -0,0 +1,7 @@ +import type BattleScene from "#app/battle-scene"; + +export let globalScene: BattleScene; + +export function initGlobalScene(scene: BattleScene): void { + globalScene = scene; +} diff --git a/src/inputs-controller.ts b/src/inputs-controller.ts index 537d2870259..392761cf8e4 100644 --- a/src/inputs-controller.ts +++ b/src/inputs-controller.ts @@ -7,17 +7,17 @@ import pad_xbox360 from "./configs/inputs/pad_xbox360"; import pad_dualshock from "./configs/inputs/pad_dualshock"; import pad_procon from "./configs/inputs/pad_procon"; import { Mode } from "./ui/ui"; -import SettingsGamepadUiHandler from "./ui/settings/settings-gamepad-ui-handler"; -import SettingsKeyboardUiHandler from "./ui/settings/settings-keyboard-ui-handler"; +import type SettingsGamepadUiHandler from "./ui/settings/settings-gamepad-ui-handler"; +import type SettingsKeyboardUiHandler from "./ui/settings/settings-keyboard-ui-handler"; import cfg_keyboard_qwerty from "./configs/inputs/cfg_keyboard_qwerty"; import { assign, getButtonWithKeycode, getIconForLatestInput, swap, } from "#app/configs/inputs/configHandler"; -import BattleScene from "./battle-scene"; -import { SettingGamepad } from "#app/system/settings/settings-gamepad"; -import { SettingKeyboard } from "#app/system/settings/settings-keyboard"; +import { globalScene } from "#app/global-scene"; +import type { SettingGamepad } from "#app/system/settings/settings-gamepad"; +import type { SettingKeyboard } from "#app/system/settings/settings-keyboard"; import TouchControl from "#app/touch-controls"; import { Button } from "#enums/buttons"; import { Device } from "#enums/devices"; @@ -75,7 +75,6 @@ const repeatInputDelayMillis = 250; */ export class InputsController { private gamepads: Array = new Array(); - private scene: BattleScene; public events: Phaser.Events.EventEmitter; private buttonLock: Button[] = new Array(); @@ -96,17 +95,13 @@ export class InputsController { /** * Initializes a new instance of the game control system, setting up initial state and configurations. * - * @param scene - The Phaser scene associated with this instance. - * * @remarks * This constructor initializes the game control system with necessary setups for handling inputs. * It prepares an interactions array indexed by button identifiers and configures default states for each button. * Specific buttons like MENU and STATS are set not to repeat their actions. * It concludes by calling the `init` method to complete the setup. */ - - constructor(scene: BattleScene) { - this.scene = scene; + constructor() { this.selectedDevice = { [Device.GAMEPAD]: null, [Device.KEYBOARD]: "default" @@ -134,14 +129,14 @@ export class InputsController { * Additionally, it manages the game's behavior when it loses focus to prevent unwanted game actions during this state. */ init(): void { - this.events = this.scene.game.events; + this.events = globalScene.game.events; - this.scene.game.events.on(Phaser.Core.Events.BLUR, () => { + globalScene.game.events.on(Phaser.Core.Events.BLUR, () => { this.loseFocus(); }); - if (typeof this.scene.input.gamepad !== "undefined") { - this.scene.input.gamepad?.on("connected", function (thisGamepad) { + if (typeof globalScene.input.gamepad !== "undefined") { + globalScene.input.gamepad?.on("connected", function (thisGamepad) { if (!thisGamepad) { return; } @@ -150,25 +145,25 @@ export class InputsController { this.onReconnect(thisGamepad); }, this); - this.scene.input.gamepad?.on("disconnected", function (thisGamepad) { + globalScene.input.gamepad?.on("disconnected", function (thisGamepad) { this.onDisconnect(thisGamepad); // when a gamepad is disconnected }, this); // Check to see if the gamepad has already been setup by the browser - this.scene.input.gamepad?.refreshPads(); - if (this.scene.input.gamepad?.total) { + globalScene.input.gamepad?.refreshPads(); + if (globalScene.input.gamepad?.total) { this.refreshGamepads(); for (const thisGamepad of this.gamepads) { - this.scene.input.gamepad.emit("connected", thisGamepad); + globalScene.input.gamepad.emit("connected", thisGamepad); } } - this.scene.input.gamepad?.on("down", this.gamepadButtonDown, this); - this.scene.input.gamepad?.on("up", this.gamepadButtonUp, this); - this.scene.input.keyboard?.on("keydown", this.keyboardKeyDown, this); - this.scene.input.keyboard?.on("keyup", this.keyboardKeyUp, this); + globalScene.input.gamepad?.on("down", this.gamepadButtonDown, this); + globalScene.input.gamepad?.on("up", this.gamepadButtonUp, this); + globalScene.input.keyboard?.on("keydown", this.keyboardKeyDown, this); + globalScene.input.keyboard?.on("keyup", this.keyboardKeyUp, this); } - this.touchControls = new TouchControl(this.scene); + this.touchControls = new TouchControl(); this.moveTouchControlsHandler = new MoveTouchControlsHandler(this.touchControls); } @@ -238,7 +233,7 @@ export class InputsController { if (gamepadName) { this.selectedDevice[Device.GAMEPAD] = gamepadName.toLowerCase(); } - const handler = this.scene.ui?.handlers[Mode.SETTINGS_GAMEPAD] as SettingsGamepadUiHandler; + const handler = globalScene.ui?.handlers[Mode.SETTINGS_GAMEPAD] as SettingsGamepadUiHandler; handler && handler.updateChosenGamepadDisplay(); } @@ -251,7 +246,7 @@ export class InputsController { if (layoutKeyboard) { this.selectedDevice[Device.KEYBOARD] = layoutKeyboard.toLowerCase(); } - const handler = this.scene.ui?.handlers[Mode.SETTINGS_KEYBOARD] as SettingsKeyboardUiHandler; + const handler = globalScene.ui?.handlers[Mode.SETTINGS_KEYBOARD] as SettingsKeyboardUiHandler; handler && handler.updateChosenKeyboardDisplay(); } @@ -296,10 +291,10 @@ export class InputsController { const config = deepCopy(this.getConfig(gamepadID)) as InterfaceConfig; config.custom = this.configs[gamepadID]?.custom || { ...config.default }; this.configs[gamepadID] = config; - this.scene.gameData?.saveMappingConfigs(gamepadID, this.configs[gamepadID]); + globalScene.gameData?.saveMappingConfigs(gamepadID, this.configs[gamepadID]); } this.lastSource = "gamepad"; - const handler = this.scene.ui?.handlers[Mode.SETTINGS_GAMEPAD] as SettingsGamepadUiHandler; + const handler = globalScene.ui?.handlers[Mode.SETTINGS_GAMEPAD] as SettingsGamepadUiHandler; handler && handler.updateChosenGamepadDisplay(); } @@ -311,7 +306,7 @@ export class InputsController { const config = deepCopy(this.getConfigKeyboard(layout)) as InterfaceConfig; config.custom = this.configs[layout]?.custom || { ...config.default }; this.configs[layout] = config; - this.scene.gameData?.saveMappingConfigs(this.selectedDevice[Device.KEYBOARD], this.configs[layout]); + globalScene.gameData?.saveMappingConfigs(this.selectedDevice[Device.KEYBOARD], this.configs[layout]); } this.initChosenLayoutKeyboard(this.selectedDevice[Device.KEYBOARD]); } @@ -326,7 +321,7 @@ export class InputsController { */ refreshGamepads(): void { // Sometimes, gamepads are undefined. For some reason. - this.gamepads = this.scene.input.gamepad?.gamepads.filter(function (el) { + this.gamepads = globalScene.input.gamepad?.gamepads.filter(function (el) { return el !== null; }) ?? []; @@ -409,7 +404,7 @@ export class InputsController { return; } this.lastSource = "gamepad"; - if (!this.selectedDevice[Device.GAMEPAD] || (this.scene.ui.getMode() !== Mode.GAMEPAD_BINDING && this.selectedDevice[Device.GAMEPAD] !== pad.id.toLowerCase())) { + if (!this.selectedDevice[Device.GAMEPAD] || (globalScene.ui.getMode() !== Mode.GAMEPAD_BINDING && this.selectedDevice[Device.GAMEPAD] !== pad.id.toLowerCase())) { this.setChosenGamepad(pad.id); } if (!this.gamepadSupport || pad.id.toLowerCase() !== this.selectedDevice[Device.GAMEPAD].toLowerCase()) { @@ -569,6 +564,15 @@ export class InputsController { if (!this.configs[selectedDevice]) { this.configs[selectedDevice] = {}; } + // A proper way of handling migrating keybinds would be much better + const mappingOverrides = { + "BUTTON_CYCLE_VARIANT": "BUTTON_CYCLE_TERA", + }; + for (const key in mappingConfigs.custom) { + if (mappingConfigs.custom[key] in mappingOverrides) { + mappingConfigs.custom[key] = mappingOverrides[mappingConfigs.custom[key]]; + } + } this.configs[selectedDevice].custom = mappingConfigs.custom; } diff --git a/src/interfaces/held-modifier-config.ts b/src/interfaces/held-modifier-config.ts index 2285babdbfd..5617cf2446a 100644 --- a/src/interfaces/held-modifier-config.ts +++ b/src/interfaces/held-modifier-config.ts @@ -1,5 +1,5 @@ -import { PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; -import { PokemonHeldItemModifier } from "#app/modifier/modifier"; +import type { PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; +import type { PokemonHeldItemModifier } from "#app/modifier/modifier"; export default interface HeldModifierConfig { modifier: PokemonHeldItemModifierType | PokemonHeldItemModifier; diff --git a/src/loading-scene.ts b/src/loading-scene.ts index c49b8d5aaa9..183b38c49e5 100644 --- a/src/loading-scene.ts +++ b/src/loading-scene.ts @@ -5,7 +5,7 @@ import { SceneBase } from "#app/scene-base"; import { WindowVariant, getWindowVariantSuffix } from "#app/ui/ui-theme"; import { isMobile } from "#app/touch-controls"; import * as Utils from "#app/utils"; -import { initPokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; +import { initPokemonPrevolutions, initPokemonStarters } from "#app/data/balance/pokemon-evolutions"; import { initBiomes } from "#app/data/balance/biomes"; import { initEggMoves } from "#app/data/balance/egg-moves"; import { initPokemonForms } from "#app/data/pokemon-forms"; @@ -101,8 +101,12 @@ export class LoadingScene extends SceneBase { this.loadImage("icon_lock", "ui", "icon_lock.png"); this.loadImage("icon_stop", "ui", "icon_stop.png"); this.loadImage("icon_tera", "ui"); + this.loadImage("cursor_tera", "ui"); this.loadImage("type_tera", "ui"); this.loadAtlas("type_bgs", "ui"); + this.loadAtlas("button_tera", "ui"); + this.loadImage("mystery_egg", "ui"); + this.loadImage("normal_memory", "ui"); this.loadImage("dawn_icon_fg", "ui"); this.loadImage("dawn_icon_mg", "ui"); @@ -154,6 +158,7 @@ export class LoadingScene extends SceneBase { this.loadImage("scroll_bar_handle", "ui"); this.loadImage("starter_container_bg", "ui"); this.loadImage("starter_select_bg", "ui"); + this.loadImage("pokedex_summary_bg", "ui"); this.loadImage("select_cursor", "ui"); this.loadImage("select_cursor_highlight", "ui"); this.loadImage("select_cursor_highlight_thick", "ui"); @@ -246,9 +251,9 @@ export class LoadingScene extends SceneBase { } const availableLangs = [ "en", "de", "it", "fr", "ja", "ko", "es-ES", "pt-BR", "zh-CN" ]; if (lang && availableLangs.includes(lang)) { - this.loadImage("halloween2024-event-" + lang, "events"); + this.loadImage("pkmnday2025event-" + lang, "events"); } else { - this.loadImage("halloween2024-event-en", "events"); + this.loadImage("pkmnday2025event-en", "events"); } this.loadAtlas("statuses", ""); @@ -319,6 +324,7 @@ export class LoadingScene extends SceneBase { this.loadSe("pb_move"); this.loadSe("pb_catch"); this.loadSe("pb_lock"); + this.loadSe("crit_throw"); this.loadSe("pb_tray_enter"); this.loadSe("pb_tray_ball"); @@ -353,6 +359,7 @@ export class LoadingScene extends SceneBase { initVouchers(); initStatsKeys(); initPokemonPrevolutions(); + initPokemonStarters(); initBiomes(); initEggMoves(); initPokemonForms(); diff --git a/src/messages.ts b/src/messages.ts index 91f550918e5..26fd3353cc6 100644 --- a/src/messages.ts +++ b/src/messages.ts @@ -1,5 +1,6 @@ +import { globalScene } from "#app/global-scene"; import { BattleSpec } from "#enums/battle-spec"; -import Pokemon from "./field/pokemon"; +import type Pokemon from "./field/pokemon"; import i18next from "i18next"; /** @@ -12,7 +13,7 @@ export function getPokemonNameWithAffix(pokemon: Pokemon | undefined): string { return "Missigno"; } - switch (pokemon.scene.currentBattle.battleSpec) { + switch (globalScene.currentBattle.battleSpec) { case BattleSpec.DEFAULT: return !pokemon.isPlayer() ? pokemon.hasTrainer() diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index 57b3ced1813..ae8b9a45c0d 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -1,23 +1,25 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { EvolutionItem, pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import { tmPoolTiers, tmSpecies } from "#app/data/balance/tms"; import { getBerryEffectDescription, getBerryName } from "#app/data/berry"; -import { allMoves, AttackMove, selfStatLowerMoves } from "#app/data/move"; +import { allMoves, AttackMove } from "#app/data/move"; import { getNatureName, getNatureStatMultiplier } from "#app/data/nature"; import { getPokeballCatchMultiplier, getPokeballName, MAX_PER_TYPE_POKEBALLS } from "#app/data/pokeball"; import { FormChangeItem, pokemonFormChanges, SpeciesFormChangeCondition, SpeciesFormChangeItemTrigger } from "#app/data/pokemon-forms"; import { getStatusEffectDescriptor } from "#app/data/status-effect"; import { Type } from "#enums/type"; -import Pokemon, { EnemyPokemon, PlayerPokemon, PokemonMove } from "#app/field/pokemon"; +import type { EnemyPokemon, PlayerPokemon, PokemonMove } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; -import { AddPokeballModifier, AddVoucherModifier, AttackTypeBoosterModifier, BaseStatModifier, BerryModifier, BoostBugSpawnModifier, BypassSpeedChanceModifier, ContactHeldItemTransferChanceModifier, CritBoosterModifier, DamageMoneyRewardModifier, DoubleBattleChanceBoosterModifier, EnemyAttackStatusEffectChanceModifier, EnemyDamageBoosterModifier, EnemyDamageReducerModifier, EnemyEndureChanceModifier, EnemyFusionChanceModifier, EnemyStatusEffectHealChanceModifier, EnemyTurnHealModifier, EvolutionItemModifier, EvolutionStatBoosterModifier, EvoTrackerModifier, ExpBalanceModifier, ExpBoosterModifier, ExpShareModifier, ExtraModifierModifier, FlinchChanceModifier, FusePokemonModifier, GigantamaxAccessModifier, HealingBoosterModifier, HealShopCostModifier, HiddenAbilityRateBoosterModifier, HitHealModifier, IvScannerModifier, LevelIncrementBoosterModifier, LockModifierTiersModifier, MapModifier, MegaEvolutionAccessModifier, MoneyInterestModifier, MoneyMultiplierModifier, MoneyRewardModifier, MultipleParticipantExpBonusModifier, PokemonAllMovePpRestoreModifier, PokemonBaseStatFlatModifier, PokemonBaseStatTotalModifier, PokemonExpBoosterModifier, PokemonFormChangeItemModifier, PokemonFriendshipBoosterModifier, PokemonHeldItemModifier, PokemonHpRestoreModifier, PokemonIncrementingStatModifier, PokemonInstantReviveModifier, PokemonLevelIncrementModifier, PokemonMoveAccuracyBoosterModifier, PokemonMultiHitModifier, PokemonNatureChangeModifier, PokemonNatureWeightModifier, PokemonPpRestoreModifier, PokemonPpUpModifier, PokemonStatusHealModifier, PreserveBerryModifier, RememberMoveModifier, ResetNegativeStatStageModifier, ShinyRateBoosterModifier, SpeciesCritBoosterModifier, SpeciesStatBoosterModifier, SurviveDamageModifier, SwitchEffectTransferModifier, TempCritBoosterModifier, TempStatStageBoosterModifier, TerastallizeAccessModifier, TerastallizeModifier, TmModifier, TurnHealModifier, TurnHeldItemTransferModifier, TurnStatusEffectModifier, type EnemyPersistentModifier, type Modifier, type PersistentModifier, TempExtraModifierModifier, CriticalCatchChanceBoosterModifier } from "#app/modifier/modifier"; +import { AddPokeballModifier, AddVoucherModifier, AttackTypeBoosterModifier, BaseStatModifier, BerryModifier, BoostBugSpawnModifier, BypassSpeedChanceModifier, ContactHeldItemTransferChanceModifier, CritBoosterModifier, DamageMoneyRewardModifier, DoubleBattleChanceBoosterModifier, EnemyAttackStatusEffectChanceModifier, EnemyDamageBoosterModifier, EnemyDamageReducerModifier, EnemyEndureChanceModifier, EnemyFusionChanceModifier, EnemyStatusEffectHealChanceModifier, EnemyTurnHealModifier, EvolutionItemModifier, EvolutionStatBoosterModifier, EvoTrackerModifier, ExpBalanceModifier, ExpBoosterModifier, ExpShareModifier, ExtraModifierModifier, FlinchChanceModifier, FusePokemonModifier, GigantamaxAccessModifier, HealingBoosterModifier, HealShopCostModifier, HiddenAbilityRateBoosterModifier, HitHealModifier, IvScannerModifier, LevelIncrementBoosterModifier, LockModifierTiersModifier, MapModifier, MegaEvolutionAccessModifier, MoneyInterestModifier, MoneyMultiplierModifier, MoneyRewardModifier, MultipleParticipantExpBonusModifier, PokemonAllMovePpRestoreModifier, PokemonBaseStatFlatModifier, PokemonBaseStatTotalModifier, PokemonExpBoosterModifier, PokemonFormChangeItemModifier, PokemonFriendshipBoosterModifier, PokemonHeldItemModifier, PokemonHpRestoreModifier, PokemonIncrementingStatModifier, PokemonInstantReviveModifier, PokemonLevelIncrementModifier, PokemonMoveAccuracyBoosterModifier, PokemonMultiHitModifier, PokemonNatureChangeModifier, PokemonNatureWeightModifier, PokemonPpRestoreModifier, PokemonPpUpModifier, PokemonStatusHealModifier, PreserveBerryModifier, RememberMoveModifier, ResetNegativeStatStageModifier, ShinyRateBoosterModifier, SpeciesCritBoosterModifier, SpeciesStatBoosterModifier, SurviveDamageModifier, SwitchEffectTransferModifier, TempCritBoosterModifier, TempStatStageBoosterModifier, TerastallizeAccessModifier, TerrastalizeModifier, TmModifier, TurnHealModifier, TurnHeldItemTransferModifier, TurnStatusEffectModifier, type EnemyPersistentModifier, type Modifier, type PersistentModifier, TempExtraModifierModifier, CriticalCatchChanceBoosterModifier } from "#app/modifier/modifier"; import { ModifierTier } from "#app/modifier/modifier-tier"; import Overrides from "#app/overrides"; import { Unlockables } from "#app/system/unlockables"; import { getVoucherTypeIcon, getVoucherTypeName, VoucherType } from "#app/system/voucher"; -import PartyUiHandler, { PokemonMoveSelectFilter, PokemonSelectFilter } from "#app/ui/party-ui-handler"; +import type { PokemonMoveSelectFilter, PokemonSelectFilter } from "#app/ui/party-ui-handler"; +import PartyUiHandler from "#app/ui/party-ui-handler"; import { getModifierTierTextTint } from "#app/ui/text"; -import { formatMoney, getEnumKeys, getEnumValues, isNullOrUndefined, NumberHolder, padInt, randSeedInt, randSeedItem } from "#app/utils"; +import { formatMoney, getEnumKeys, getEnumValues, isNullOrUndefined, NumberHolder, padInt, randSeedInt } from "#app/utils"; import { Abilities } from "#enums/abilities"; import { BattlerTagType } from "#enums/battler-tag-type"; import { BerryType } from "#enums/berry-type"; @@ -26,7 +28,8 @@ import { Nature } from "#enums/nature"; import { PokeballType } from "#enums/pokeball"; import { Species } from "#enums/species"; import { SpeciesFormKey } from "#enums/species-form-key"; -import { getStatKey, PermanentStat, Stat, TEMP_BATTLE_STATS, TempBattleStat } from "#enums/stat"; +import type { PermanentStat, TempBattleStat } from "#enums/stat"; +import { getStatKey, Stat, TEMP_BATTLE_STATS } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; import i18next from "i18next"; @@ -64,7 +67,7 @@ export class ModifierType { return i18next.t(`${this.localeKey}.name` as any); } - getDescription(scene: BattleScene): string { + getDescription(): string { return i18next.t(`${this.localeKey}.description` as any); } @@ -191,9 +194,9 @@ export interface GeneratedPersistentModifierType { class AddPokeballModifierType extends ModifierType { private pokeballType: PokeballType; - private count: integer; + private count: number; - constructor(iconImage: string, pokeballType: PokeballType, count: integer) { + constructor(iconImage: string, pokeballType: PokeballType, count: number) { super("", iconImage, (_type, _args) => new AddPokeballModifier(this, pokeballType, count), "pb", "se/pb_bounce_1"); this.pokeballType = pokeballType; this.count = count; @@ -206,21 +209,21 @@ class AddPokeballModifierType extends ModifierType { }); } - getDescription(scene: BattleScene): string { + getDescription(): string { return i18next.t("modifierType:ModifierType.AddPokeballModifierType.description", { "modifierCount": this.count, "pokeballName": getPokeballName(this.pokeballType), "catchRate": getPokeballCatchMultiplier(this.pokeballType) > -1 ? `${getPokeballCatchMultiplier(this.pokeballType)}x` : "100%", - "pokeballAmount": `${scene.pokeballCounts[this.pokeballType]}`, + "pokeballAmount": `${globalScene.pokeballCounts[this.pokeballType]}`, }); } } class AddVoucherModifierType extends ModifierType { private voucherType: VoucherType; - private count: integer; + private count: number; - constructor(voucherType: VoucherType, count: integer) { + constructor(voucherType: VoucherType, count: number) { super("", getVoucherTypeIcon(voucherType), (_type, _args) => new AddVoucherModifier(this, voucherType, count), "voucher"); this.count = count; this.voucherType = voucherType; @@ -233,7 +236,7 @@ class AddVoucherModifierType extends ModifierType { }); } - getDescription(scene: BattleScene): string { + getDescription(): string { return i18next.t("modifierType:ModifierType.AddVoucherModifierType.description", { "modifierCount": this.count, "voucherTypeName": getVoucherTypeName(this.voucherType), @@ -255,8 +258,8 @@ export class PokemonHeldItemModifierType extends PokemonModifierType { constructor(localeKey: string, iconImage: string, newModifierFunc: NewModifierFunc, group?: string, soundName?: string) { super(localeKey, iconImage, newModifierFunc, (pokemon: PlayerPokemon) => { const dummyModifier = this.newModifier(pokemon); - const matchingModifier = pokemon.scene.findModifier(m => m instanceof PokemonHeldItemModifier && m.pokemonId === pokemon.id && m.matchType(dummyModifier)) as PokemonHeldItemModifier; - const maxStackCount = dummyModifier.getMaxStackCount(pokemon.scene); + const matchingModifier = globalScene.findModifier(m => m instanceof PokemonHeldItemModifier && m.pokemonId === pokemon.id && m.matchType(dummyModifier)) as PokemonHeldItemModifier; + const maxStackCount = dummyModifier.getMaxStackCount(); if (!maxStackCount) { return i18next.t("modifierType:ModifierType.PokemonHeldItemModifierType.extra.inoperable", { "pokemonName": getPokemonNameWithAffix(pokemon) }); } @@ -272,12 +275,42 @@ export class PokemonHeldItemModifierType extends PokemonModifierType { } } + +export class TerastallizeModifierType extends PokemonModifierType { + private teraType: Type; + + constructor(teraType: Type) { + super("", `${Type[teraType].toLowerCase()}_tera_shard`, (type, args) => new TerrastalizeModifier(type as TerastallizeModifierType, (args[0] as Pokemon).id, teraType), + (pokemon: PlayerPokemon) => { + if ([ pokemon.species.speciesId, pokemon.fusionSpecies?.speciesId ].filter(s => s === Species.TERAPAGOS || s === Species.OGERPON || s === Species.SHEDINJA).length > 0) { + return PartyUiHandler.NoEffectMessage; + } + return null; + }, + "tera_shard"); + + this.teraType = teraType; + } + + get name(): string { + return i18next.t("modifierType:ModifierType.TerastallizeModifierType.name", { teraType: i18next.t(`pokemonInfo:Type.${Type[this.teraType]}`) }); + } + + getDescription(): string { + return i18next.t("modifierType:ModifierType.TerastallizeModifierType.description", { teraType: i18next.t(`pokemonInfo:Type.${Type[this.teraType]}`) }); + } + + getPregenArgs(): any[] { + return [ this.teraType ]; + } +} + export class PokemonHpRestoreModifierType extends PokemonModifierType { - protected restorePoints: integer; - protected restorePercent: integer; + protected restorePoints: number; + protected restorePercent: number; protected healStatus: boolean; - constructor(localeKey: string, iconImage: string, restorePoints: integer, restorePercent: integer, healStatus: boolean = false, newModifierFunc?: NewModifierFunc, selectFilter?: PokemonSelectFilter, group?: string) { + constructor(localeKey: string, iconImage: string, restorePoints: number, restorePercent: number, healStatus: boolean = false, newModifierFunc?: NewModifierFunc, selectFilter?: PokemonSelectFilter, group?: string) { super(localeKey, iconImage, newModifierFunc || ((_type, args) => new PokemonHpRestoreModifier(this, (args[0] as PlayerPokemon).id, this.restorePoints, this.restorePercent, this.healStatus, false)), selectFilter || ((pokemon: PlayerPokemon) => { if (!pokemon.hp || (pokemon.isFullHp() && (!this.healStatus || (!pokemon.status && !pokemon.getTag(BattlerTagType.CONFUSED))))) { @@ -291,7 +324,7 @@ export class PokemonHpRestoreModifierType extends PokemonModifierType { this.healStatus = healStatus; } - getDescription(scene: BattleScene): string { + getDescription(): string { return this.restorePoints ? i18next.t("modifierType:ModifierType.PokemonHpRestoreModifierType.description", { restorePoints: this.restorePoints, @@ -304,7 +337,7 @@ export class PokemonHpRestoreModifierType extends PokemonModifierType { } export class PokemonReviveModifierType extends PokemonHpRestoreModifierType { - constructor(localeKey: string, iconImage: string, restorePercent: integer) { + constructor(localeKey: string, iconImage: string, restorePercent: number) { super(localeKey, iconImage, 0, restorePercent, false, (_type, args) => new PokemonHpRestoreModifier(this, (args[0] as PlayerPokemon).id, 0, this.restorePercent, false, true), ((pokemon: PlayerPokemon) => { if (!pokemon.isFainted()) { @@ -321,7 +354,7 @@ export class PokemonReviveModifierType extends PokemonHpRestoreModifierType { }; } - getDescription(scene: BattleScene): string { + getDescription(): string { return i18next.t("modifierType:ModifierType.PokemonReviveModifierType.description", { restorePercent: this.restorePercent }); } } @@ -337,7 +370,7 @@ export class PokemonStatusHealModifierType extends PokemonModifierType { })); } - getDescription(scene: BattleScene): string { + getDescription(): string { return i18next.t("modifierType:ModifierType.PokemonStatusHealModifierType.description"); } } @@ -353,10 +386,10 @@ export abstract class PokemonMoveModifierType extends PokemonModifierType { } export class PokemonPpRestoreModifierType extends PokemonMoveModifierType { - protected restorePoints: integer; + protected restorePoints: number; - constructor(localeKey: string, iconImage: string, restorePoints: integer) { - super(localeKey, iconImage, (_type, args) => new PokemonPpRestoreModifier(this, (args[0] as PlayerPokemon).id, (args[1] as integer), this.restorePoints), + constructor(localeKey: string, iconImage: string, restorePoints: number) { + super(localeKey, iconImage, (_type, args) => new PokemonPpRestoreModifier(this, (args[0] as PlayerPokemon).id, (args[1] as number), this.restorePoints), (_pokemon: PlayerPokemon) => { return null; }, (pokemonMove: PokemonMove) => { @@ -369,7 +402,7 @@ export class PokemonPpRestoreModifierType extends PokemonMoveModifierType { this.restorePoints = restorePoints; } - getDescription(scene: BattleScene): string { + getDescription(): string { return this.restorePoints > -1 ? i18next.t("modifierType:ModifierType.PokemonPpRestoreModifierType.description", { restorePoints: this.restorePoints }) : i18next.t("modifierType:ModifierType.PokemonPpRestoreModifierType.extra.fully") @@ -378,9 +411,9 @@ export class PokemonPpRestoreModifierType extends PokemonMoveModifierType { } export class PokemonAllMovePpRestoreModifierType extends PokemonModifierType { - protected restorePoints: integer; + protected restorePoints: number; - constructor(localeKey: string, iconImage: string, restorePoints: integer) { + constructor(localeKey: string, iconImage: string, restorePoints: number) { super(localeKey, iconImage, (_type, args) => new PokemonAllMovePpRestoreModifier(this, (args[0] as PlayerPokemon).id, this.restorePoints), (pokemon: PlayerPokemon) => { if (!pokemon.getMoveset().filter(m => m?.ppUsed).length) { @@ -392,7 +425,7 @@ export class PokemonAllMovePpRestoreModifierType extends PokemonModifierType { this.restorePoints = restorePoints; } - getDescription(scene: BattleScene): string { + getDescription(): string { return this.restorePoints > -1 ? i18next.t("modifierType:ModifierType.PokemonAllMovePpRestoreModifierType.description", { restorePoints: this.restorePoints }) : i18next.t("modifierType:ModifierType.PokemonAllMovePpRestoreModifierType.extra.fully") @@ -401,10 +434,10 @@ export class PokemonAllMovePpRestoreModifierType extends PokemonModifierType { } export class PokemonPpUpModifierType extends PokemonMoveModifierType { - protected upPoints: integer; + protected upPoints: number; - constructor(localeKey: string, iconImage: string, upPoints: integer) { - super(localeKey, iconImage, (_type, args) => new PokemonPpUpModifier(this, (args[0] as PlayerPokemon).id, (args[1] as integer), this.upPoints), + constructor(localeKey: string, iconImage: string, upPoints: number) { + super(localeKey, iconImage, (_type, args) => new PokemonPpUpModifier(this, (args[0] as PlayerPokemon).id, (args[1] as number), this.upPoints), (_pokemon: PlayerPokemon) => { return null; }, (pokemonMove: PokemonMove) => { @@ -417,7 +450,7 @@ export class PokemonPpUpModifierType extends PokemonMoveModifierType { this.upPoints = upPoints; } - getDescription(scene: BattleScene): string { + getDescription(): string { return i18next.t("modifierType:ModifierType.PokemonPpUpModifierType.description", { upPoints: this.upPoints }); } } @@ -441,14 +474,14 @@ export class PokemonNatureChangeModifierType extends PokemonModifierType { return i18next.t("modifierType:ModifierType.PokemonNatureChangeModifierType.name", { natureName: getNatureName(this.nature) }); } - getDescription(scene: BattleScene): string { + getDescription(): string { return i18next.t("modifierType:ModifierType.PokemonNatureChangeModifierType.description", { natureName: getNatureName(this.nature, true, true, true) }); } } export class RememberMoveModifierType extends PokemonModifierType { constructor(localeKey: string, iconImage: string, group?: string) { - super(localeKey, iconImage, (type, args) => new RememberMoveModifier(type, (args[0] as PlayerPokemon).id, (args[1] as integer)), + super(localeKey, iconImage, (type, args) => new RememberMoveModifier(type, (args[0] as PlayerPokemon).id, (args[1] as number)), (pokemon: PlayerPokemon) => { if (!pokemon.getLearnableLevelMoves().length) { return PartyUiHandler.NoEffectMessage; @@ -467,7 +500,7 @@ export class DoubleBattleChanceBoosterModifierType extends ModifierType { this.maxBattles = maxBattles; } - getDescription(_scene: BattleScene): string { + getDescription(): string { return i18next.t("modifierType:ModifierType.DoubleBattleChanceBoosterModifierType.description", { battleCount: this.maxBattles }); @@ -492,7 +525,7 @@ export class TempStatStageBoosterModifierType extends ModifierType implements Ge return i18next.t(`modifierType:TempStatStageBoosterItem.${this.nameKey}`); } - getDescription(_scene: BattleScene): string { + getDescription(): string { return i18next.t("modifierType:ModifierType.TempStatStageBoosterModifierType.description", { stat: i18next.t(getStatKey(this.stat)), amount: i18next.t(`modifierType:ModifierType.TempStatStageBoosterModifierType.extra.${this.quantityKey}`) @@ -517,7 +550,7 @@ export class BerryModifierType extends PokemonHeldItemModifierType implements Ge return getBerryName(this.berryType); } - getDescription(scene: BattleScene): string { + getDescription(): string { return getBerryEffectDescription(this.berryType); } @@ -549,9 +582,9 @@ enum AttackTypeBoosterItem { export class AttackTypeBoosterModifierType extends PokemonHeldItemModifierType implements GeneratedPersistentModifierType { public moveType: Type; - public boostPercent: integer; + public boostPercent: number; - constructor(moveType: Type, boostPercent: integer) { + constructor(moveType: Type, boostPercent: number) { super("", `${AttackTypeBoosterItem[moveType]?.toLowerCase()}`, (_type, args) => new AttackTypeBoosterModifier(this, (args[0] as Pokemon).id, moveType, boostPercent)); @@ -563,7 +596,7 @@ export class AttackTypeBoosterModifierType extends PokemonHeldItemModifierType i return i18next.t(`modifierType:AttackTypeBoosterItem.${AttackTypeBoosterItem[this.moveType]?.toLowerCase()}`); } - getDescription(scene: BattleScene): string { + getDescription(): string { // TODO: Need getTypeName? return i18next.t("modifierType:ModifierType.AttackTypeBoosterModifierType.description", { moveType: i18next.t(`pokemonInfo:Type.${Type[this.moveType]}`) }); } @@ -600,9 +633,9 @@ export class PokemonLevelIncrementModifierType extends PokemonModifierType { super(localeKey, iconImage, (_type, args) => new PokemonLevelIncrementModifier(this, (args[0] as PlayerPokemon).id), (_pokemon: PlayerPokemon) => null); } - getDescription(scene: BattleScene): string { + getDescription(): string { let levels = 1; - const hasCandyJar = scene.modifiers.find(modifier => modifier instanceof LevelIncrementBoosterModifier); + const hasCandyJar = globalScene.modifiers.find(modifier => modifier instanceof LevelIncrementBoosterModifier); if (hasCandyJar) { levels += hasCandyJar.stackCount; } @@ -615,9 +648,9 @@ export class AllPokemonLevelIncrementModifierType extends ModifierType { super(localeKey, iconImage, (_type, _args) => new PokemonLevelIncrementModifier(this, -1)); } - getDescription(scene: BattleScene): string { + getDescription(): string { let levels = 1; - const hasCandyJar = scene.modifiers.find(modifier => modifier instanceof LevelIncrementBoosterModifier); + const hasCandyJar = globalScene.modifiers.find(modifier => modifier instanceof LevelIncrementBoosterModifier); if (hasCandyJar) { levels += hasCandyJar.stackCount; } @@ -641,7 +674,7 @@ export class BaseStatBoosterModifierType extends PokemonHeldItemModifierType imp return i18next.t(`modifierType:BaseStatBoosterItem.${this.key}`); } - getDescription(_scene: BattleScene): string { + getDescription(): string { return i18next.t("modifierType:ModifierType.BaseStatBoosterModifierType.description", { stat: i18next.t(getStatKey(this.stat)) }); } @@ -654,14 +687,14 @@ export class BaseStatBoosterModifierType extends PokemonHeldItemModifierType imp * Shuckle Juice item */ export class PokemonBaseStatTotalModifierType extends PokemonHeldItemModifierType implements GeneratedPersistentModifierType { - private readonly statModifier: integer; + private readonly statModifier: number; - constructor(statModifier: integer) { + constructor(statModifier: number) { super("modifierType:ModifierType.MYSTERY_ENCOUNTER_SHUCKLE_JUICE", "berry_juice", (_type, args) => new PokemonBaseStatTotalModifier(this, (args[0] as Pokemon).id, this.statModifier)); this.statModifier = statModifier; } - override getDescription(scene: BattleScene): string { + override getDescription(): string { return i18next.t("modifierType:ModifierType.PokemonBaseStatTotalModifierType.description", { increaseDecrease: i18next.t(this.statModifier >= 0 ? "modifierType:ModifierType.PokemonBaseStatTotalModifierType.extra.increase" : "modifierType:ModifierType.PokemonBaseStatTotalModifierType.extra.decrease"), blessCurse: i18next.t(this.statModifier >= 0 ? "modifierType:ModifierType.PokemonBaseStatTotalModifierType.extra.blessed" : "modifierType:ModifierType.PokemonBaseStatTotalModifierType.extra.cursed"), @@ -678,16 +711,16 @@ export class PokemonBaseStatTotalModifierType extends PokemonHeldItemModifierTyp * Old Gateau item */ export class PokemonBaseStatFlatModifierType extends PokemonHeldItemModifierType implements GeneratedPersistentModifierType { - private readonly statModifier: integer; + private readonly statModifier: number; private readonly stats: Stat[]; - constructor(statModifier: integer, stats: Stat[]) { + constructor(statModifier: number, stats: Stat[]) { super("modifierType:ModifierType.MYSTERY_ENCOUNTER_OLD_GATEAU", "old_gateau", (_type, args) => new PokemonBaseStatFlatModifier(this, (args[0] as Pokemon).id, this.statModifier, this.stats)); this.statModifier = statModifier; this.stats = stats; } - override getDescription(scene: BattleScene): string { + override getDescription(): string { return i18next.t("modifierType:ModifierType.PokemonBaseStatFlatModifierType.description", { stats: this.stats.map(stat => i18next.t(getStatKey(stat))).join("/"), statValue: this.statModifier, @@ -708,7 +741,7 @@ class AllPokemonFullHpRestoreModifierType extends ModifierType { this.descriptionKey = descriptionKey!; // TODO: is this bang correct? } - getDescription(scene: BattleScene): string { + getDescription(): string { return i18next.t(`${this.descriptionKey || "modifierType:ModifierType.AllPokemonFullHpRestoreModifierType"}.description` as any); } } @@ -730,10 +763,10 @@ export class MoneyRewardModifierType extends ModifierType { this.moneyMultiplierDescriptorKey = moneyMultiplierDescriptorKey; } - getDescription(scene: BattleScene): string { - const moneyAmount = new NumberHolder(scene.getWaveMoneyAmount(this.moneyMultiplier)); - scene.applyModifiers(MoneyMultiplierModifier, true, moneyAmount); - const formattedMoney = formatMoney(scene.moneyFormat, moneyAmount.value); + getDescription(): string { + const moneyAmount = new NumberHolder(globalScene.getWaveMoneyAmount(this.moneyMultiplier)); + globalScene.applyModifiers(MoneyMultiplierModifier, true, moneyAmount); + const formattedMoney = formatMoney(globalScene.moneyFormat, moneyAmount.value); return i18next.t("modifierType:ModifierType.MoneyRewardModifierType.description", { moneyMultiplier: i18next.t(this.moneyMultiplierDescriptorKey as any), @@ -743,29 +776,29 @@ export class MoneyRewardModifierType extends ModifierType { } export class ExpBoosterModifierType extends ModifierType { - private boostPercent: integer; + private boostPercent: number; - constructor(localeKey: string, iconImage: string, boostPercent: integer) { + constructor(localeKey: string, iconImage: string, boostPercent: number) { super(localeKey, iconImage, () => new ExpBoosterModifier(this, boostPercent)); this.boostPercent = boostPercent; } - getDescription(scene: BattleScene): string { + getDescription(): string { return i18next.t("modifierType:ModifierType.ExpBoosterModifierType.description", { boostPercent: this.boostPercent }); } } export class PokemonExpBoosterModifierType extends PokemonHeldItemModifierType { - private boostPercent: integer; + private boostPercent: number; - constructor(localeKey: string, iconImage: string, boostPercent: integer) { + constructor(localeKey: string, iconImage: string, boostPercent: number) { super(localeKey, iconImage, (_type, args) => new PokemonExpBoosterModifier(this, (args[0] as Pokemon).id, boostPercent)); this.boostPercent = boostPercent; } - getDescription(scene: BattleScene): string { + getDescription(): string { return i18next.t("modifierType:ModifierType.PokemonExpBoosterModifierType.description", { boostPercent: this.boostPercent }); } } @@ -775,21 +808,21 @@ export class PokemonFriendshipBoosterModifierType extends PokemonHeldItemModifie super(localeKey, iconImage, (_type, args) => new PokemonFriendshipBoosterModifier(this, (args[0] as Pokemon).id)); } - getDescription(scene: BattleScene): string { + getDescription(): string { return i18next.t("modifierType:ModifierType.PokemonFriendshipBoosterModifierType.description"); } } export class PokemonMoveAccuracyBoosterModifierType extends PokemonHeldItemModifierType { - private amount: integer; + private amount: number; - constructor(localeKey: string, iconImage: string, amount: integer, group?: string, soundName?: string) { + constructor(localeKey: string, iconImage: string, amount: number, group?: string, soundName?: string) { super(localeKey, iconImage, (_type, args) => new PokemonMoveAccuracyBoosterModifier(this, (args[0] as Pokemon).id, amount), group, soundName); this.amount = amount; } - getDescription(scene: BattleScene): string { + getDescription(): string { return i18next.t("modifierType:ModifierType.PokemonMoveAccuracyBoosterModifierType.description", { accuracyAmount: this.amount }); } } @@ -799,7 +832,7 @@ export class PokemonMultiHitModifierType extends PokemonHeldItemModifierType { super(localeKey, iconImage, (type, args) => new PokemonMultiHitModifier(type as PokemonMultiHitModifierType, (args[0] as Pokemon).id)); } - getDescription(scene: BattleScene): string { + getDescription(): string { return i18next.t("modifierType:ModifierType.PokemonMultiHitModifierType.description"); } } @@ -826,8 +859,8 @@ export class TmModifierType extends PokemonModifierType { }); } - getDescription(scene: BattleScene): string { - return i18next.t(scene.enableMoveInfo ? "modifierType:ModifierType.TmModifierTypeWithInfo.description" : "modifierType:ModifierType.TmModifierType.description", { moveName: allMoves[this.moveId].name }); + getDescription(): string { + return i18next.t(globalScene.enableMoveInfo ? "modifierType:ModifierType.TmModifierTypeWithInfo.description" : "modifierType:ModifierType.TmModifierType.description", { moveName: allMoves[this.moveId].name }); } } @@ -855,7 +888,7 @@ export class EvolutionItemModifierType extends PokemonModifierType implements Ge return i18next.t(`modifierType:EvolutionItem.${EvolutionItem[this.evolutionItem]}`); } - getDescription(scene: BattleScene): string { + getDescription(): string { return i18next.t("modifierType:ModifierType.EvolutionItemModifierType.description"); } @@ -894,7 +927,7 @@ export class FormChangeItemModifierType extends PokemonModifierType implements G return i18next.t(`modifierType:FormChangeItem.${FormChangeItem[this.formChangeItem]}`); } - getDescription(scene: BattleScene): string { + getDescription(): string { return i18next.t("modifierType:ModifierType.FormChangeItemModifierType.description"); } @@ -914,7 +947,7 @@ export class FusePokemonModifierType extends PokemonModifierType { }); } - getDescription(scene: BattleScene): string { + getDescription(): string { return i18next.t("modifierType:ModifierType.FusePokemonModifierType.description"); } } @@ -931,7 +964,7 @@ class AttackTypeBoosterModifierTypeGenerator extends ModifierTypeGenerator { return null; } - const attackMoveTypeWeights = new Map(); + const attackMoveTypeWeights = new Map(); let totalWeight = 0; for (const t of attackMoveTypes) { if (attackMoveTypeWeights.has(t)) { @@ -1040,7 +1073,8 @@ class SpeciesStatBoosterModifierTypeGenerator extends ModifierTypeGenerator { for (const p of party) { const speciesId = p.getSpeciesForm(true).speciesId; const fusionSpeciesId = p.isFusion() ? p.getFusionSpeciesForm(true).speciesId : null; - const hasFling = p.getMoveset(true).some(m => m?.moveId === Moves.FLING); + // TODO: Use commented boolean when Fling is implemented + const hasFling = false; /* p.getMoveset(true).some(m => m?.moveId === Moves.FLING) */ for (const i in values) { const checkedSpecies = values[i].species; @@ -1093,7 +1127,10 @@ class TmModifierTypeGenerator extends ModifierTypeGenerator { if (pregenArgs && (pregenArgs.length === 1) && (pregenArgs[0] in Moves)) { return new TmModifierType(pregenArgs[0] as Moves); } - const partyMemberCompatibleTms = party.map(p => (p as PlayerPokemon).compatibleTms.filter(tm => !p.moveset.find(m => m?.moveId === tm))); + const partyMemberCompatibleTms = party.map(p => { + const previousLevelMoves = p.getLearnableLevelMoves(); + return (p as PlayerPokemon).compatibleTms.filter(tm => !p.moveset.find(m => m?.moveId === tm) && !previousLevelMoves.find(lm=>lm === tm)); + }); const tierUniqueCompatibleTms = partyMemberCompatibleTms.flat().filter(tm => tmPoolTiers[tm] === tier).filter(tm => !allMoves[tm].name.endsWith(" (N)")).filter((tm, i, array) => array.indexOf(tm) === i); if (!tierUniqueCompatibleTms.length) { return null; @@ -1140,20 +1177,20 @@ class FormChangeItemModifierTypeGenerator extends ModifierTypeGenerator { const formChangeItemPool = [ ...new Set(party.filter(p => pokemonFormChanges.hasOwnProperty(p.species.speciesId)).map(p => { const formChanges = pokemonFormChanges[p.species.speciesId]; - let formChangeItemTriggers = formChanges.filter(fc => ((fc.formKey.indexOf(SpeciesFormKey.MEGA) === -1 && fc.formKey.indexOf(SpeciesFormKey.PRIMAL) === -1) || party[0].scene.getModifiers(MegaEvolutionAccessModifier).length) - && ((fc.formKey.indexOf(SpeciesFormKey.GIGANTAMAX) === -1 && fc.formKey.indexOf(SpeciesFormKey.ETERNAMAX) === -1) || party[0].scene.getModifiers(GigantamaxAccessModifier).length) + let formChangeItemTriggers = formChanges.filter(fc => ((fc.formKey.indexOf(SpeciesFormKey.MEGA) === -1 && fc.formKey.indexOf(SpeciesFormKey.PRIMAL) === -1) || globalScene.getModifiers(MegaEvolutionAccessModifier).length) + && ((fc.formKey.indexOf(SpeciesFormKey.GIGANTAMAX) === -1 && fc.formKey.indexOf(SpeciesFormKey.ETERNAMAX) === -1) || globalScene.getModifiers(GigantamaxAccessModifier).length) && (!fc.conditions.length || fc.conditions.filter(cond => cond instanceof SpeciesFormChangeCondition && cond.predicate(p)).length) && (fc.preFormKey === p.getFormKey())) .map(fc => fc.findTrigger(SpeciesFormChangeItemTrigger) as SpeciesFormChangeItemTrigger) - .filter(t => t && t.active && !p.scene.findModifier(m => m instanceof PokemonFormChangeItemModifier && m.pokemonId === p.id && m.formChangeItem === t.item)); + .filter(t => t && t.active && !globalScene.findModifier(m => m instanceof PokemonFormChangeItemModifier && m.pokemonId === p.id && m.formChangeItem === t.item)); if (p.species.speciesId === Species.NECROZMA) { // technically we could use a simplified version and check for formChanges.length > 3, but in case any code changes later, this might break... - let foundULTRA_Z = false, foundN_LUNA = false, foundN_SOLAR = false; - formChangeItemTriggers.forEach((fc, i) => { + formChangeItemTriggers.forEach((fc, _i) => { + console.log("Checking ", fc.item); switch (fc.item) { case FormChangeItem.ULTRANECROZIUM_Z: foundULTRA_Z = true; @@ -1169,6 +1206,8 @@ class FormChangeItemModifierTypeGenerator extends ModifierTypeGenerator { if (foundULTRA_Z && foundN_LUNA && foundN_SOLAR) { // all three items are present -> user hasn't acquired any of the N_*ARIZERs -> block ULTRANECROZIUM_Z acquisition. formChangeItemTriggers = formChangeItemTriggers.filter(fc => fc.item !== FormChangeItem.ULTRANECROZIUM_Z); + } else { + console.log("DID NOT FIND "); } } return formChangeItemTriggers; @@ -1185,38 +1224,16 @@ class FormChangeItemModifierTypeGenerator extends ModifierTypeGenerator { } } -export class TerastallizeModifierType extends PokemonHeldItemModifierType implements GeneratedPersistentModifierType { - private teraType: Type; - - constructor(teraType: Type) { - super("", `${Type[teraType].toLowerCase()}_tera_shard`, (type, args) => new TerastallizeModifier(type as TerastallizeModifierType, (args[0] as Pokemon).id, teraType), "tera_shard"); - - this.teraType = teraType; - } - - get name(): string { - return i18next.t("modifierType:ModifierType.TerastallizeModifierType.name", { teraType: i18next.t(`pokemonInfo:Type.${Type[this.teraType]}`) }); - } - - getDescription(scene: BattleScene): string { - return i18next.t("modifierType:ModifierType.TerastallizeModifierType.description", { teraType: i18next.t(`pokemonInfo:Type.${Type[this.teraType]}`) }); - } - - getPregenArgs(): any[] { - return [ this.teraType ]; - } -} - export class ContactHeldItemTransferChanceModifierType extends PokemonHeldItemModifierType { - private chancePercent: integer; + private chancePercent: number; - constructor(localeKey: string, iconImage: string, chancePercent: integer, group?: string, soundName?: string) { + constructor(localeKey: string, iconImage: string, chancePercent: number, group?: string, soundName?: string) { super(localeKey, iconImage, (type, args) => new ContactHeldItemTransferChanceModifier(type, (args[0] as Pokemon).id, chancePercent), group, soundName); this.chancePercent = chancePercent; } - getDescription(scene: BattleScene): string { + getDescription(): string { return i18next.t("modifierType:ModifierType.ContactHeldItemTransferChanceModifierType.description", { chancePercent: this.chancePercent }); } } @@ -1226,23 +1243,23 @@ export class TurnHeldItemTransferModifierType extends PokemonHeldItemModifierTyp super(localeKey, iconImage, (type, args) => new TurnHeldItemTransferModifier(type, (args[0] as Pokemon).id), group, soundName); } - getDescription(scene: BattleScene): string { + getDescription(): string { return i18next.t("modifierType:ModifierType.TurnHeldItemTransferModifierType.description"); } } export class EnemyAttackStatusEffectChanceModifierType extends ModifierType { - private chancePercent: integer; + private chancePercent: number; private effect: StatusEffect; - constructor(localeKey: string, iconImage: string, chancePercent: integer, effect: StatusEffect, stackCount?: integer) { - super(localeKey, iconImage, (type, args) => new EnemyAttackStatusEffectChanceModifier(type, effect, chancePercent, stackCount), "enemy_status_chance"); + constructor(localeKey: string, iconImage: string, chancePercent: number, effect: StatusEffect, stackCount?: number) { + super(localeKey, iconImage, (type, _args) => new EnemyAttackStatusEffectChanceModifier(type, effect, chancePercent, stackCount), "enemy_status_chance"); this.chancePercent = chancePercent; this.effect = effect; } - getDescription(scene: BattleScene): string { + getDescription(): string { return i18next.t("modifierType:ModifierType.EnemyAttackStatusEffectChanceModifierType.description", { chancePercent: this.chancePercent, statusEffect: getStatusEffectDescriptor(this.effect), @@ -1259,13 +1276,13 @@ export class EnemyEndureChanceModifierType extends ModifierType { this.chancePercent = chancePercent; } - getDescription(scene: BattleScene): string { + getDescription(): string { return i18next.t("modifierType:ModifierType.EnemyEndureChanceModifierType.description", { chancePercent: this.chancePercent }); } } export type ModifierTypeFunc = () => ModifierType; -type WeightedModifierTypeWeightFunc = (party: Pokemon[], rerollCount?: integer) => integer; +type WeightedModifierTypeWeightFunc = (party: Pokemon[], rerollCount?: number) => number; /** * High order function that returns a WeightedModifierTypeWeightFunc that will only be applied on @@ -1274,10 +1291,10 @@ type WeightedModifierTypeWeightFunc = (party: Pokemon[], rerollCount?: integer) * @param defaultWeight - ModifierType default weight * @returns A WeightedModifierTypeWeightFunc */ -function skipInClassicAfterWave(wave: integer, defaultWeight: integer): WeightedModifierTypeWeightFunc { - return (party: Pokemon[]) => { - const gameMode = party[0].scene.gameMode; - const currentWave = party[0].scene.currentBattle.waveIndex; +function skipInClassicAfterWave(wave: number, defaultWeight: number): WeightedModifierTypeWeightFunc { + return () => { + const gameMode = globalScene.gameMode; + const currentWave = globalScene.currentBattle.waveIndex; return gameMode.isClassic && currentWave >= wave ? 0 : defaultWeight; }; } @@ -1288,7 +1305,7 @@ function skipInClassicAfterWave(wave: integer, defaultWeight: integer): Weighted * @param defaultWeight ModifierType default weight * @returns A WeightedModifierTypeWeightFunc */ -function skipInLastClassicWaveOrDefault(defaultWeight: integer) : WeightedModifierTypeWeightFunc { +function skipInLastClassicWaveOrDefault(defaultWeight: number) : WeightedModifierTypeWeightFunc { return skipInClassicAfterWave(199, defaultWeight); } @@ -1300,17 +1317,17 @@ function skipInLastClassicWaveOrDefault(defaultWeight: integer) : WeightedModifi * @returns A WeightedModifierTypeWeightFunc */ function lureWeightFunc(maxBattles: number, weight: number): WeightedModifierTypeWeightFunc { - return (party: Pokemon[]) => { - const lures = party[0].scene.getModifiers(DoubleBattleChanceBoosterModifier); - return !(party[0].scene.gameMode.isClassic && party[0].scene.currentBattle.waveIndex === 199) && (lures.length === 0 || lures.filter(m => m.getMaxBattles() === maxBattles && m.getBattleCount() >= maxBattles * 0.6).length === 0) ? weight : 0; + return () => { + const lures = globalScene.getModifiers(DoubleBattleChanceBoosterModifier); + return !(globalScene.gameMode.isClassic && globalScene.currentBattle.waveIndex === 199) && (lures.length === 0 || lures.filter(m => m.getMaxBattles() === maxBattles && m.getBattleCount() >= maxBattles * 0.6).length === 0) ? weight : 0; }; } class WeightedModifierType { public modifierType: ModifierType; - public weight: integer | WeightedModifierTypeWeightFunc; - public maxWeight: integer | WeightedModifierTypeWeightFunc; + public weight: number | WeightedModifierTypeWeightFunc; + public maxWeight: number | WeightedModifierTypeWeightFunc; - constructor(modifierTypeFunc: ModifierTypeFunc, weight: integer | WeightedModifierTypeWeightFunc, maxWeight?: integer | WeightedModifierTypeWeightFunc) { + constructor(modifierTypeFunc: ModifierTypeFunc, weight: number | WeightedModifierTypeWeightFunc, maxWeight?: number | WeightedModifierTypeWeightFunc) { this.modifierType = modifierTypeFunc(); this.modifierType.id = Object.keys(modifierTypes).find(k => modifierTypes[k] === modifierTypeFunc)!; // TODO: is this bang correct? this.weight = weight; @@ -1436,7 +1453,7 @@ export const modifierTypes = { TEMP_STAT_STAGE_BOOSTER: () => new TempStatStageBoosterModifierTypeGenerator(), DIRE_HIT: () => new class extends ModifierType { - getDescription(_scene: BattleScene): string { + getDescription(): string { return i18next.t("modifierType:ModifierType.TempStatStageBoosterModifierType.description", { stat: i18next.t("modifierType:ModifierType.DIRE_HIT.extra.raises"), amount: i18next.t("modifierType:ModifierType.TempStatStageBoosterModifierType.extra.stage") @@ -1448,7 +1465,7 @@ export const modifierTypes = { ATTACK_TYPE_BOOSTER: () => new AttackTypeBoosterModifierTypeGenerator(), - MINT: () => new ModifierTypeGenerator((party: Pokemon[], pregenArgs?: any[]) => { + MINT: () => new ModifierTypeGenerator((_party: Pokemon[], pregenArgs?: any[]) => { if (pregenArgs && (pregenArgs.length === 1) && (pregenArgs[0] in Nature)) { return new PokemonNatureChangeModifierType(pregenArgs[0] as Nature); } @@ -1459,20 +1476,27 @@ export const modifierTypes = { if (pregenArgs && (pregenArgs.length === 1) && (pregenArgs[0] in Type)) { return new TerastallizeModifierType(pregenArgs[0] as Type); } - if (!party[0].scene.getModifiers(TerastallizeAccessModifier).length) { + if (!globalScene.getModifiers(TerastallizeAccessModifier).length) { return null; } - let type: Type; - if (!randSeedInt(3)) { - const partyMemberTypes = party.map(p => p.getTypes(false, false, true)).flat(); - type = randSeedItem(partyMemberTypes); - } else { - type = randSeedInt(64) ? randSeedInt(18) as Type : Type.STELLAR; + const teraTypes: Type[] = []; + party.forEach(p => { + if (!(p.hasSpecies(Species.TERAPAGOS) || p.hasSpecies(Species.OGERPON) || p.hasSpecies(Species.SHEDINJA))) { + teraTypes.push(p.teraType); + } + }); + let excludedType = Type.UNKNOWN; + if (teraTypes.length > 0 && teraTypes.filter(t => t === teraTypes[0]).length === teraTypes.length) { + excludedType = teraTypes[0]; } - return new TerastallizeModifierType(type); + let shardType = randSeedInt(64) ? randSeedInt(18) as Type : Type.STELLAR; + while (shardType === excludedType) { + shardType = randSeedInt(64) ? randSeedInt(18) as Type : Type.STELLAR; + } + return new TerastallizeModifierType(shardType); }), - BERRY: () => new ModifierTypeGenerator((party: Pokemon[], pregenArgs?: any[]) => { + BERRY: () => new ModifierTypeGenerator((_party: Pokemon[], pregenArgs?: any[]) => { if (pregenArgs && (pregenArgs.length === 1) && (pregenArgs[0] in BerryType)) { return new BerryModifierType(pregenArgs[0] as BerryType); } @@ -1580,19 +1604,19 @@ export const modifierTypes = { ENEMY_ENDURE_CHANCE: () => new EnemyEndureChanceModifierType("modifierType:ModifierType.ENEMY_ENDURE_CHANCE", "wl_reset_urge", 2), ENEMY_FUSED_CHANCE: () => new ModifierType("modifierType:ModifierType.ENEMY_FUSED_CHANCE", "wl_custom_spliced", (type, _args) => new EnemyFusionChanceModifier(type, 1)), - MYSTERY_ENCOUNTER_SHUCKLE_JUICE: () => new ModifierTypeGenerator((party: Pokemon[], pregenArgs?: any[]) => { + MYSTERY_ENCOUNTER_SHUCKLE_JUICE: () => new ModifierTypeGenerator((_party: Pokemon[], pregenArgs?: any[]) => { if (pregenArgs) { return new PokemonBaseStatTotalModifierType(pregenArgs[0] as number); } return new PokemonBaseStatTotalModifierType(randSeedInt(20, 1)); }), - MYSTERY_ENCOUNTER_OLD_GATEAU: () => new ModifierTypeGenerator((party: Pokemon[], pregenArgs?: any[]) => { + MYSTERY_ENCOUNTER_OLD_GATEAU: () => new ModifierTypeGenerator((_party: Pokemon[], pregenArgs?: any[]) => { if (pregenArgs) { return new PokemonBaseStatFlatModifierType(pregenArgs[0] as number, pregenArgs[1] as Stat[]); } return new PokemonBaseStatFlatModifierType(randSeedInt(20, 1), [ Stat.HP, Stat.ATK, Stat.DEF ]); }), - MYSTERY_ENCOUNTER_BLACK_SLUDGE: () => new ModifierTypeGenerator((party: Pokemon[], pregenArgs?: any[]) => { + MYSTERY_ENCOUNTER_BLACK_SLUDGE: () => new ModifierTypeGenerator((_party: Pokemon[], pregenArgs?: any[]) => { if (pregenArgs) { return new ModifierType("modifierType:ModifierType.MYSTERY_ENCOUNTER_BLACK_SLUDGE", "black_sludge", (type, _args) => new HealShopCostModifier(type, pregenArgs[0] as number)); } @@ -1608,17 +1632,16 @@ interface ModifierPool { /** * Used to check if the player has max of a given ball type in Classic - * @param party The player's party, just used to access the scene * @param ballType The {@linkcode PokeballType} being checked * @returns boolean: true if the player has the maximum of a given ball type */ -function hasMaximumBalls(party: Pokemon[], ballType: PokeballType): boolean { - return (party[0].scene.gameMode.isClassic && party[0].scene.pokeballCounts[ballType] >= MAX_PER_TYPE_POKEBALLS); +function hasMaximumBalls(ballType: PokeballType): boolean { + return (globalScene.gameMode.isClassic && globalScene.pokeballCounts[ballType] >= MAX_PER_TYPE_POKEBALLS); } const modifierPool: ModifierPool = { [ModifierTier.COMMON]: [ - new WeightedModifierType(modifierTypes.POKEBALL, (party: Pokemon[]) => (hasMaximumBalls(party, PokeballType.POKEBALL)) ? 0 : 6, 6), + new WeightedModifierType(modifierTypes.POKEBALL, () => (hasMaximumBalls(PokeballType.POKEBALL)) ? 0 : 6, 6), new WeightedModifierType(modifierTypes.RARE_CANDY, 2), new WeightedModifierType(modifierTypes.POTION, (party: Pokemon[]) => { const thresholdPartyMemberCount = Math.min(party.filter(p => (p.getInverseHp() >= 10 && p.getHpRatio() <= 0.875) && !p.isFainted()).length, 3); @@ -1646,7 +1669,7 @@ const modifierPool: ModifierPool = { m.setTier(ModifierTier.COMMON); return m; }), [ModifierTier.GREAT]: [ - new WeightedModifierType(modifierTypes.GREAT_BALL, (party: Pokemon[]) => (hasMaximumBalls(party, PokeballType.GREAT_BALL)) ? 0 : 6, 6), + new WeightedModifierType(modifierTypes.GREAT_BALL, () => (hasMaximumBalls(PokeballType.GREAT_BALL)) ? 0 : 6, 6), new WeightedModifierType(modifierTypes.PP_UP, 2), new WeightedModifierType(modifierTypes.FULL_HEAL, (party: Pokemon[]) => { const statusEffectPartyMemberCount = Math.min(party.filter(p => p.hp && !!p.status && !p.getHeldItems().some(i => { @@ -1699,37 +1722,46 @@ const modifierPool: ModifierPool = { new WeightedModifierType(modifierTypes.DIRE_HIT, 4), new WeightedModifierType(modifierTypes.SUPER_LURE, lureWeightFunc(15, 4)), new WeightedModifierType(modifierTypes.NUGGET, skipInLastClassicWaveOrDefault(5)), - new WeightedModifierType(modifierTypes.EVOLUTION_ITEM, (party: Pokemon[]) => { - return Math.min(Math.ceil(party[0].scene.currentBattle.waveIndex / 15), 8); + new WeightedModifierType(modifierTypes.EVOLUTION_ITEM, () => { + return Math.min(Math.ceil(globalScene.currentBattle.waveIndex / 15), 8); }, 8), - new WeightedModifierType(modifierTypes.MAP, (party: Pokemon[]) => party[0].scene.gameMode.isClassic && party[0].scene.currentBattle.waveIndex < 180 ? 2 : 0, 2), + new WeightedModifierType(modifierTypes.MAP, () => globalScene.gameMode.isClassic && globalScene.currentBattle.waveIndex < 180 ? 2 : 0, 2), new WeightedModifierType(modifierTypes.SOOTHE_BELL, 2), new WeightedModifierType(modifierTypes.TM_GREAT, 3), new WeightedModifierType(modifierTypes.MEMORY_MUSHROOM, (party: Pokemon[]) => { if (!party.find(p => p.getLearnableLevelMoves().length)) { return 0; } - const highestPartyLevel = party.map(p => p.level).reduce((highestLevel: integer, level: integer) => Math.max(highestLevel, level), 1); + const highestPartyLevel = party.map(p => p.level).reduce((highestLevel: number, level: number) => Math.max(highestLevel, level), 1); return Math.min(Math.ceil(highestPartyLevel / 20), 4); }, 4), new WeightedModifierType(modifierTypes.BASE_STAT_BOOSTER, 3), - new WeightedModifierType(modifierTypes.TERA_SHARD, 1), - new WeightedModifierType(modifierTypes.DNA_SPLICERS, (party: Pokemon[]) => party[0].scene.gameMode.isSplicedOnly && party.filter(p => !p.fusionSpecies).length > 1 ? 4 : 0), - new WeightedModifierType(modifierTypes.VOUCHER, (party: Pokemon[], rerollCount: integer) => !party[0].scene.gameMode.isDaily ? Math.max(1 - rerollCount, 0) : 0, 1), + new WeightedModifierType(modifierTypes.TERA_SHARD, (party: Pokemon[]) => party.filter(p => !(p.hasSpecies(Species.TERAPAGOS) || p.hasSpecies(Species.OGERPON) || p.hasSpecies(Species.SHEDINJA))).length > 0 ? 1 : 0), + new WeightedModifierType(modifierTypes.DNA_SPLICERS, (party: Pokemon[]) => { + if (party.filter(p => !p.fusionSpecies).length > 1) { + if (globalScene.gameMode.isSplicedOnly) { + return 4; + } else if (globalScene.gameMode.isClassic && globalScene.eventManager.areFusionsBoosted()) { + return 2; + } + } + return 0; + }, 4), + new WeightedModifierType(modifierTypes.VOUCHER, (_party: Pokemon[], rerollCount: number) => !globalScene.gameMode.isDaily ? Math.max(1 - rerollCount, 0) : 0, 1), ].map(m => { m.setTier(ModifierTier.GREAT); return m; }), [ModifierTier.ULTRA]: [ - new WeightedModifierType(modifierTypes.ULTRA_BALL, (party: Pokemon[]) => (hasMaximumBalls(party, PokeballType.ULTRA_BALL)) ? 0 : 15, 15), + new WeightedModifierType(modifierTypes.ULTRA_BALL, () => (hasMaximumBalls(PokeballType.ULTRA_BALL)) ? 0 : 15, 15), new WeightedModifierType(modifierTypes.MAX_LURE, lureWeightFunc(30, 4)), new WeightedModifierType(modifierTypes.BIG_NUGGET, skipInLastClassicWaveOrDefault(12)), new WeightedModifierType(modifierTypes.PP_MAX, 3), new WeightedModifierType(modifierTypes.MINT, 4), - new WeightedModifierType(modifierTypes.RARE_EVOLUTION_ITEM, (party: Pokemon[]) => Math.min(Math.ceil(party[0].scene.currentBattle.waveIndex / 15) * 4, 32), 32), - new WeightedModifierType(modifierTypes.FORM_CHANGE_ITEM, (party: Pokemon[]) => Math.min(Math.ceil(party[0].scene.currentBattle.waveIndex / 50), 4) * 6, 24), + new WeightedModifierType(modifierTypes.RARE_EVOLUTION_ITEM, () => Math.min(Math.ceil(globalScene.currentBattle.waveIndex / 15) * 4, 32), 32), + new WeightedModifierType(modifierTypes.FORM_CHANGE_ITEM, () => Math.min(Math.ceil(globalScene.currentBattle.waveIndex / 50), 4) * 6, 24), new WeightedModifierType(modifierTypes.AMULET_COIN, skipInLastClassicWaveOrDefault(3)), new WeightedModifierType(modifierTypes.EVIOLITE, (party: Pokemon[]) => { - const { gameMode, gameData } = party[0].scene; + const { gameMode, gameData } = globalScene; if (gameMode.isDaily || (!gameMode.isFreshStartChallenge() && gameData.isUnlocked(Unlockables.EVIOLITE))) { return party.some(p => { // Check if Pokemon's species (or fusion species, if applicable) can evolve or if they're G-Max'd @@ -1752,67 +1784,72 @@ const modifierPool: ModifierPool = { }, 12), new WeightedModifierType(modifierTypes.TOXIC_ORB, (party: Pokemon[]) => { return party.some(p => { - const moveset = p.getMoveset(true).filter(m => !isNullOrUndefined(m)).map(m => m.moveId); - - const canSetStatus = p.canSetStatus(StatusEffect.TOXIC, true, true, null, true); const isHoldingOrb = p.getHeldItems().some(i => i.type.id === "FLAME_ORB" || i.type.id === "TOXIC_ORB"); - // Moves that take advantage of obtaining the actual status effect - const hasStatusMoves = [ Moves.FACADE, Moves.PSYCHO_SHIFT ] - .some(m => moveset.includes(m)); - // Moves that take advantage of being able to give the target a status orb - // TODO: Take moves from comment they are implemented - const hasItemMoves = [ /* Moves.TRICK, Moves.FLING, Moves.SWITCHEROO */ ] - .some(m => moveset.includes(m)); - // Abilities that take advantage of obtaining the actual status effect - const hasRelevantAbilities = [ Abilities.QUICK_FEET, Abilities.GUTS, Abilities.MARVEL_SCALE, Abilities.TOXIC_BOOST, Abilities.POISON_HEAL, Abilities.MAGIC_GUARD ] - .some(a => p.hasAbility(a, false, true)); - if (!isHoldingOrb) { + const moveset = p.getMoveset(true).filter(m => !isNullOrUndefined(m)).map(m => m.moveId); + const canSetStatus = p.canSetStatus(StatusEffect.TOXIC, true, true, null, true); + + // Moves that take advantage of obtaining the actual status effect + const hasStatusMoves = [ Moves.FACADE, Moves.PSYCHO_SHIFT ] + .some(m => moveset.includes(m)); + // Moves that take advantage of being able to give the target a status orb + // TODO: Take moves (Trick, Fling, Switcheroo) from comment when they are implemented + const hasItemMoves = [ /* Moves.TRICK, Moves.FLING, Moves.SWITCHEROO */ ] + .some(m => moveset.includes(m)); + if (canSetStatus) { - return hasRelevantAbilities || hasStatusMoves; + // Abilities that take advantage of obtaining the actual status effect, separated based on specificity to the orb + const hasGeneralAbility = [ Abilities.QUICK_FEET, Abilities.GUTS, Abilities.MARVEL_SCALE, Abilities.MAGIC_GUARD ] + .some(a => p.hasAbility(a, false, true)); + const hasSpecificAbility = [ Abilities.TOXIC_BOOST, Abilities.POISON_HEAL ] + .some(a => p.hasAbility(a, false, true)); + const hasOppositeAbility = [ Abilities.FLARE_BOOST ] + .some(a => p.hasAbility(a, false, true)); + + return hasSpecificAbility || (hasGeneralAbility && !hasOppositeAbility) || hasStatusMoves; } else { return hasItemMoves; } } + return false; }) ? 10 : 0; }, 10), new WeightedModifierType(modifierTypes.FLAME_ORB, (party: Pokemon[]) => { return party.some(p => { - const moveset = p.getMoveset(true).filter(m => !isNullOrUndefined(m)).map(m => m.moveId); - const canSetStatus = p.canSetStatus(StatusEffect.BURN, true, true, null, true); const isHoldingOrb = p.getHeldItems().some(i => i.type.id === "FLAME_ORB" || i.type.id === "TOXIC_ORB"); - // Moves that take advantage of obtaining the actual status effect - const hasStatusMoves = [ Moves.FACADE, Moves.PSYCHO_SHIFT ] - .some(m => moveset.includes(m)); - // Moves that take advantage of being able to give the target a status orb - // TODO: Take moves from comment they are implemented - const hasItemMoves = [ /* Moves.TRICK, Moves.FLING, Moves.SWITCHEROO */ ] - .some(m => moveset.includes(m)); - // Abilities that take advantage of obtaining the actual status effect - const hasRelevantAbilities = [ Abilities.QUICK_FEET, Abilities.GUTS, Abilities.MARVEL_SCALE, Abilities.FLARE_BOOST, Abilities.MAGIC_GUARD ] - .some(a => p.hasAbility(a, false, true)); - if (!isHoldingOrb) { + const moveset = p.getMoveset(true).filter(m => !isNullOrUndefined(m)).map(m => m.moveId); + const canSetStatus = p.canSetStatus(StatusEffect.BURN, true, true, null, true); + + // Moves that take advantage of obtaining the actual status effect + const hasStatusMoves = [ Moves.FACADE, Moves.PSYCHO_SHIFT ] + .some(m => moveset.includes(m)); + // Moves that take advantage of being able to give the target a status orb + // TODO: Take moves (Trick, Fling, Switcheroo) from comment when they are implemented + const hasItemMoves = [ /* Moves.TRICK, Moves.FLING, Moves.SWITCHEROO */ ] + .some(m => moveset.includes(m)); + if (canSetStatus) { - return hasRelevantAbilities || hasStatusMoves; + // Abilities that take advantage of obtaining the actual status effect, separated based on specificity to the orb + const hasGeneralAbility = [ Abilities.QUICK_FEET, Abilities.GUTS, Abilities.MARVEL_SCALE, Abilities.MAGIC_GUARD ] + .some(a => p.hasAbility(a, false, true)); + const hasSpecificAbility = [ Abilities.FLARE_BOOST ] + .some(a => p.hasAbility(a, false, true)); + const hasOppositeAbility = [ Abilities.TOXIC_BOOST, Abilities.POISON_HEAL ] + .some(a => p.hasAbility(a, false, true)); + + return hasSpecificAbility || (hasGeneralAbility && !hasOppositeAbility) || hasStatusMoves; } else { return hasItemMoves; } } + return false; }) ? 10 : 0; }, 10), - new WeightedModifierType(modifierTypes.WHITE_HERB, (party: Pokemon[]) => { - const checkedAbilities = [ Abilities.WEAK_ARMOR, Abilities.CONTRARY, Abilities.MOODY, Abilities.ANGER_SHELL, Abilities.COMPETITIVE, Abilities.DEFIANT ]; - const weightMultiplier = party.filter( - p => !p.getHeldItems().some(i => i instanceof ResetNegativeStatStageModifier && i.stackCount >= i.getMaxHeldItemCount(p)) && - (checkedAbilities.some(a => p.hasAbility(a, false, true)) || p.getMoveset(true).some(m => m && selfStatLowerMoves.includes(m.moveId)))).length; - // If a party member has one of the above moves or abilities and doesn't have max herbs, the herb will appear more frequently - return 0 * (weightMultiplier ? 2 : 1) + (weightMultiplier ? weightMultiplier * 0 : 0); - }, 10), new WeightedModifierType(modifierTypes.REVIVER_SEED, 4), new WeightedModifierType(modifierTypes.CANDY_JAR, skipInLastClassicWaveOrDefault(5)), new WeightedModifierType(modifierTypes.ATTACK_TYPE_BOOSTER, 9), @@ -1822,15 +1859,14 @@ const modifierPool: ModifierPool = { new WeightedModifierType(modifierTypes.IV_SCANNER, skipInLastClassicWaveOrDefault(4)), new WeightedModifierType(modifierTypes.EXP_CHARM, skipInLastClassicWaveOrDefault(8)), new WeightedModifierType(modifierTypes.EXP_SHARE, skipInLastClassicWaveOrDefault(10)), - new WeightedModifierType(modifierTypes.EXP_BALANCE, skipInLastClassicWaveOrDefault(3)), - new WeightedModifierType(modifierTypes.TERA_ORB, (party: Pokemon[]) => Math.min(Math.max(Math.floor(party[0].scene.currentBattle.waveIndex / 50) * 2, 1), 4), 4), + new WeightedModifierType(modifierTypes.TERA_ORB, () => !globalScene.gameMode.isClassic ? Math.min(Math.max(Math.floor(globalScene.currentBattle.waveIndex / 50) * 2, 1), 4) : 0, 4), new WeightedModifierType(modifierTypes.QUICK_CLAW, 3), - new WeightedModifierType(modifierTypes.WIDE_LENS, 4), + new WeightedModifierType(modifierTypes.WIDE_LENS, 7), ].map(m => { m.setTier(ModifierTier.ULTRA); return m; }), [ModifierTier.ROGUE]: [ - new WeightedModifierType(modifierTypes.ROGUE_BALL, (party: Pokemon[]) => (hasMaximumBalls(party, PokeballType.ROGUE_BALL)) ? 0 : 16, 16), + new WeightedModifierType(modifierTypes.ROGUE_BALL, () => (hasMaximumBalls(PokeballType.ROGUE_BALL)) ? 0 : 16, 16), new WeightedModifierType(modifierTypes.RELIC_GOLD, skipInLastClassicWaveOrDefault(2)), new WeightedModifierType(modifierTypes.LEFTOVERS, 3), new WeightedModifierType(modifierTypes.SHELL_BELL, 3), @@ -1839,29 +1875,28 @@ const modifierPool: ModifierPool = { new WeightedModifierType(modifierTypes.SCOPE_LENS, 4), new WeightedModifierType(modifierTypes.BATON, 2), new WeightedModifierType(modifierTypes.SOUL_DEW, 7), - //new WeightedModifierType(modifierTypes.OVAL_CHARM, 6), - new WeightedModifierType(modifierTypes.CATCHING_CHARM, (party: Pokemon[]) => !party[0].scene.gameMode.isFreshStartChallenge() && party[0].scene.gameData.getSpeciesCount(d => !!d.caughtAttr) > 100 ? 4 : 0, 4), + new WeightedModifierType(modifierTypes.CATCHING_CHARM, () => !globalScene.gameMode.isClassic ? 4 : 0, 4), new WeightedModifierType(modifierTypes.ABILITY_CHARM, skipInClassicAfterWave(189, 6)), new WeightedModifierType(modifierTypes.FOCUS_BAND, 5), new WeightedModifierType(modifierTypes.KINGS_ROCK, 3), - new WeightedModifierType(modifierTypes.LOCK_CAPSULE, (party: Pokemon[]) => party[0].scene.gameMode.isClassic ? 0 : 3), + new WeightedModifierType(modifierTypes.LOCK_CAPSULE, () => globalScene.gameMode.isClassic ? 0 : 3), new WeightedModifierType(modifierTypes.SUPER_EXP_CHARM, skipInLastClassicWaveOrDefault(8)), - new WeightedModifierType(modifierTypes.RARE_FORM_CHANGE_ITEM, (party: Pokemon[]) => Math.min(Math.ceil(party[0].scene.currentBattle.waveIndex / 50), 4) * 6, 24), - new WeightedModifierType(modifierTypes.MEGA_BRACELET, (party: Pokemon[]) => Math.min(Math.ceil(party[0].scene.currentBattle.waveIndex / 50), 4) * 9, 36), - new WeightedModifierType(modifierTypes.DYNAMAX_BAND, (party: Pokemon[]) => Math.min(Math.ceil(party[0].scene.currentBattle.waveIndex / 50), 4) * 9, 36), - new WeightedModifierType(modifierTypes.VOUCHER_PLUS, (party: Pokemon[], rerollCount: integer) => !party[0].scene.gameMode.isDaily ? Math.max(3 - rerollCount * 1, 0) : 0, 3), + new WeightedModifierType(modifierTypes.RARE_FORM_CHANGE_ITEM, () => Math.min(Math.ceil(globalScene.currentBattle.waveIndex / 50), 4) * 6, 24), + new WeightedModifierType(modifierTypes.MEGA_BRACELET, () => Math.min(Math.ceil(globalScene.currentBattle.waveIndex / 50), 4) * 9, 36), + new WeightedModifierType(modifierTypes.DYNAMAX_BAND, () => Math.min(Math.ceil(globalScene.currentBattle.waveIndex / 50), 4) * 9, 36), + new WeightedModifierType(modifierTypes.VOUCHER_PLUS, (_party: Pokemon[], rerollCount: number) => !globalScene.gameMode.isDaily ? Math.max(3 - rerollCount * 1, 0) : 0, 3), ].map(m => { m.setTier(ModifierTier.ROGUE); return m; }), [ModifierTier.MASTER]: [ - new WeightedModifierType(modifierTypes.MASTER_BALL, (party: Pokemon[]) => (hasMaximumBalls(party, PokeballType.MASTER_BALL)) ? 0 : 24, 24), + new WeightedModifierType(modifierTypes.MASTER_BALL, () => (hasMaximumBalls(PokeballType.MASTER_BALL)) ? 0 : 24, 24), new WeightedModifierType(modifierTypes.SHINY_CHARM, 14), new WeightedModifierType(modifierTypes.HEALING_CHARM, 18), new WeightedModifierType(modifierTypes.MULTI_LENS, 18), - new WeightedModifierType(modifierTypes.VOUCHER_PREMIUM, (party: Pokemon[], rerollCount: integer) => - !party[0].scene.gameMode.isDaily && !party[0].scene.gameMode.isEndless && !party[0].scene.gameMode.isSplicedOnly ? Math.max(5 - rerollCount * 2, 0) : 0, 5), - new WeightedModifierType(modifierTypes.DNA_SPLICERS, (party: Pokemon[]) => !party[0].scene.gameMode.isSplicedOnly && party.filter(p => !p.fusionSpecies).length > 1 ? 24 : 0, 24), - new WeightedModifierType(modifierTypes.MINI_BLACK_HOLE, (party: Pokemon[]) => (party[0].scene.gameMode.isDaily || (!party[0].scene.gameMode.isFreshStartChallenge() && party[0].scene.gameData.isUnlocked(Unlockables.MINI_BLACK_HOLE))) ? 1 : 0, 1), + new WeightedModifierType(modifierTypes.VOUCHER_PREMIUM, (_party: Pokemon[], rerollCount: number) => + !globalScene.gameMode.isDaily && !globalScene.gameMode.isEndless && !globalScene.gameMode.isSplicedOnly ? Math.max(5 - rerollCount * 2, 0) : 0, 5), + new WeightedModifierType(modifierTypes.DNA_SPLICERS, (party: Pokemon[]) => !(globalScene.gameMode.isClassic && globalScene.eventManager.areFusionsBoosted()) && !globalScene.gameMode.isSplicedOnly && party.filter(p => !p.fusionSpecies).length > 1 ? 24 : 0, 24), + new WeightedModifierType(modifierTypes.MINI_BLACK_HOLE, () => (globalScene.gameMode.isDaily || (!globalScene.gameMode.isFreshStartChallenge() && globalScene.gameData.isUnlocked(Unlockables.MINI_BLACK_HOLE))) ? 1 : 0, 1), ].map(m => { m.setTier(ModifierTier.MASTER); return m; }) @@ -2058,9 +2093,9 @@ const tierWeights = [ 768 / 1024, 195 / 1024, 48 / 1024, 12 / 1024, 1 / 1024 ]; */ export const itemPoolChecks: Map = new Map(); -export function regenerateModifierPoolThresholds(party: Pokemon[], poolType: ModifierPoolType, rerollCount: integer = 0) { +export function regenerateModifierPoolThresholds(party: Pokemon[], poolType: ModifierPoolType, rerollCount: number = 0) { const pool = getModifierPoolForType(poolType); - itemPoolChecks.forEach((v, k) => { + itemPoolChecks.forEach((_v, k) => { itemPoolChecks.set(k, false); }); @@ -2072,19 +2107,19 @@ export function regenerateModifierPoolThresholds(party: Pokemon[], poolType: Mod const tierModifierIds: string[] = []; let tierMaxWeight = 0; let i = 0; - pool[t].reduce((total: integer, modifierType: WeightedModifierType) => { + pool[t].reduce((total: number, modifierType: WeightedModifierType) => { const weightedModifierType = modifierType as WeightedModifierType; - const existingModifiers = party[0].scene.findModifiers(m => m.type.id === weightedModifierType.modifierType.id, poolType === ModifierPoolType.PLAYER); + const existingModifiers = globalScene.findModifiers(m => m.type.id === weightedModifierType.modifierType.id, poolType === ModifierPoolType.PLAYER); const itemModifierType = weightedModifierType.modifierType instanceof ModifierTypeGenerator ? weightedModifierType.modifierType.generateType(party) : weightedModifierType.modifierType; const weight = !existingModifiers.length || itemModifierType instanceof PokemonHeldItemModifierType || itemModifierType instanceof FormChangeItemModifierType - || existingModifiers.find(m => m.stackCount < m.getMaxStackCount(party[0].scene, true)) + || existingModifiers.find(m => m.stackCount < m.getMaxStackCount(true)) ? weightedModifierType.weight instanceof Function ? (weightedModifierType.weight as Function)(party, rerollCount) - : weightedModifierType.weight as integer + : weightedModifierType.weight as number : 0; if (weightedModifierType.maxWeight) { const modifierId = weightedModifierType.modifierType.id; @@ -2168,7 +2203,7 @@ export function getModifierTypeFuncById(id: string): ModifierTypeFunc { * - `rerollMultiplier?: number` If specified, can adjust the amount of money required for a shop reroll. If set to a negative value, the shop will not allow rerolls at all. * - `allowLuckUpgrades?: boolean` Default `true`, if `false` will prevent set item tiers from upgrading via luck */ -export function getPlayerModifierTypeOptions(count: integer, party: PlayerPokemon[], modifierTiers?: ModifierTier[], customModifierSettings?: CustomModifierSettings): ModifierTypeOption[] { +export function getPlayerModifierTypeOptions(count: number, party: PlayerPokemon[], modifierTiers?: ModifierTier[], customModifierSettings?: CustomModifierSettings): ModifierTypeOption[] { const options: ModifierTypeOption[] = []; const retryCount = Math.min(count * 5, 50); if (!customModifierSettings) { @@ -2183,7 +2218,7 @@ export function getPlayerModifierTypeOptions(count: integer, party: PlayerPokemo // Guaranteed mod functions second if (customModifierSettings.guaranteedModifierTypeFuncs && customModifierSettings.guaranteedModifierTypeFuncs.length > 0) { - customModifierSettings.guaranteedModifierTypeFuncs!.forEach((mod, i) => { + customModifierSettings.guaranteedModifierTypeFuncs!.forEach((mod, _i) => { const modifierId = Object.keys(modifierTypes).find(k => modifierTypes[k] === mod) as string; let guaranteedMod: ModifierType = modifierTypes[modifierId]?.(); @@ -2229,7 +2264,7 @@ export function getPlayerModifierTypeOptions(count: integer, party: PlayerPokemo * @param tier If specified will generate item of tier * @param allowLuckUpgrades `true` to allow items to upgrade tiers (the little animation that plays and is affected by luck) */ -function getModifierTypeOptionWithRetry(existingOptions: ModifierTypeOption[], retryCount: integer, party: PlayerPokemon[], tier?: ModifierTier, allowLuckUpgrades?: boolean): ModifierTypeOption { +function getModifierTypeOptionWithRetry(existingOptions: ModifierTypeOption[], retryCount: number, party: PlayerPokemon[], tier?: ModifierTier, allowLuckUpgrades?: boolean): ModifierTypeOption { allowLuckUpgrades = allowLuckUpgrades ?? true; let candidate = getNewModifierTypeOption(party, ModifierPoolType.PLAYER, tier, undefined, 0, allowLuckUpgrades); let r = 0; @@ -2264,7 +2299,7 @@ export function overridePlayerModifierTypeOptions(options: ModifierTypeOption[], } } -export function getPlayerShopModifierTypeOptionsForWave(waveIndex: integer, baseCost: integer): ModifierTypeOption[] { +export function getPlayerShopModifierTypeOptionsForWave(waveIndex: number, baseCost: number): ModifierTypeOption[] { if (!(waveIndex % 10)) { return []; } @@ -2302,7 +2337,7 @@ export function getPlayerShopModifierTypeOptionsForWave(waveIndex: integer, base return options.slice(0, Math.ceil(Math.max(waveIndex + 10, 0) / 30)).flat(); } -export function getEnemyBuffModifierForWave(tier: ModifierTier, enemyModifiers: PersistentModifier[], scene: BattleScene): EnemyPersistentModifier { +export function getEnemyBuffModifierForWave(tier: ModifierTier, enemyModifiers: PersistentModifier[]): EnemyPersistentModifier { let tierStackCount: number; switch (tier) { case ModifierTier.ULTRA: @@ -2320,7 +2355,7 @@ export function getEnemyBuffModifierForWave(tier: ModifierTier, enemyModifiers: let candidate = getNewModifierTypeOption([], ModifierPoolType.ENEMY_BUFF, tier); let r = 0; let matchingModifier: PersistentModifier | undefined; - while (++r < retryCount && (matchingModifier = enemyModifiers.find(m => m.type.id === candidate?.type?.id)) && matchingModifier.getMaxStackCount(scene) < matchingModifier.stackCount + (r < 10 ? tierStackCount : 1)) { + while (++r < retryCount && (matchingModifier = enemyModifiers.find(m => m.type.id === candidate?.type?.id)) && matchingModifier.getMaxStackCount() < matchingModifier.stackCount + (r < 10 ? tierStackCount : 1)) { candidate = getNewModifierTypeOption([], ModifierPoolType.ENEMY_BUFF, tier); } @@ -2330,7 +2365,7 @@ export function getEnemyBuffModifierForWave(tier: ModifierTier, enemyModifiers: return modifier; } -export function getEnemyModifierTypesForWave(waveIndex: integer, count: integer, party: EnemyPokemon[], poolType: ModifierPoolType.WILD | ModifierPoolType.TRAINER, upgradeChance: integer = 0): PokemonHeldItemModifierType[] { +export function getEnemyModifierTypesForWave(waveIndex: number, count: number, party: EnemyPokemon[], poolType: ModifierPoolType.WILD | ModifierPoolType.TRAINER, upgradeChance: number = 0): PokemonHeldItemModifierType[] { const ret = new Array(count).fill(0).map(() => getNewModifierTypeOption(party, poolType, undefined, upgradeChance && !randSeedInt(upgradeChance) ? 1 : 0)?.type as PokemonHeldItemModifierType); if (!(waveIndex % 1000)) { ret.push(getModifierType(modifierTypes.MINI_BLACK_HOLE) as PokemonHeldItemModifierType); @@ -2374,7 +2409,7 @@ export function getDailyRunStarterModifiers(party: PlayerPokemon[]): PokemonHeld * @param retryCount Max allowed tries before the next tier down is checked for a valid ModifierType * @param allowLuckUpgrades Default true. If false, will not allow ModifierType to randomly upgrade to next tier */ -function getNewModifierTypeOption(party: Pokemon[], poolType: ModifierPoolType, tier?: ModifierTier, upgradeCount?: integer, retryCount: integer = 0, allowLuckUpgrades: boolean = true): ModifierTypeOption | null { +function getNewModifierTypeOption(party: Pokemon[], poolType: ModifierPoolType, tier?: ModifierTier, upgradeCount?: number, retryCount: number = 0, allowLuckUpgrades: boolean = true): ModifierTypeOption | null { const player = !poolType; const pool = getModifierPoolForType(poolType); let thresholds: object; @@ -2453,7 +2488,7 @@ function getNewModifierTypeOption(party: Pokemon[], poolType: ModifierPoolType, const tierThresholds = Object.keys(thresholds[tier]); const totalWeight = parseInt(tierThresholds[tierThresholds.length - 1]); const value = randSeedInt(totalWeight); - let index: integer | undefined; + let index: number | undefined; for (const t of tierThresholds) { const threshold = parseInt(t); if (value < threshold) { @@ -2495,10 +2530,10 @@ export function getDefaultModifierTypeForTier(tier: ModifierTier): ModifierType export class ModifierTypeOption { public type: ModifierType; - public upgradeCount: integer; - public cost: integer; + public upgradeCount: number; + public cost: number; - constructor(type: ModifierType, upgradeCount: integer, cost: number = 0) { + constructor(type: ModifierType, upgradeCount: number, cost: number = 0) { this.type = type; this.upgradeCount = upgradeCount; this.cost = Math.min(Math.round(cost), Number.MAX_SAFE_INTEGER); @@ -2510,24 +2545,25 @@ export class ModifierTypeOption { * @param party The player's party. * @returns A number between 0 and 14 based on the party's total luck value, or a random number between 0 and 14 if the player is in Daily Run mode. */ -export function getPartyLuckValue(party: Pokemon[]): integer { - if (party[0].scene.gameMode.isDaily) { +export function getPartyLuckValue(party: Pokemon[]): number { + if (globalScene.gameMode.isDaily) { const DailyLuck = new NumberHolder(0); - party[0].scene.executeWithSeedOffset(() => { + globalScene.executeWithSeedOffset(() => { DailyLuck.value = randSeedInt(15); // Random number between 0 and 14 - }, 0, party[0].scene.seed); + }, 0, globalScene.seed); return DailyLuck.value; } - const luck = Phaser.Math.Clamp(party.map(p => p.isAllowedInBattle() ? p.getLuck() : 0) - .reduce((total: integer, value: integer) => total += value, 0), 0, 14); - return luck ?? 0; + const eventSpecies = globalScene.eventManager.getEventLuckBoostedSpecies(); + const luck = Phaser.Math.Clamp(party.map(p => p.isAllowedInBattle() ? p.getLuck() + (eventSpecies.includes(p.species.speciesId) ? 1 : 0) : 0) + .reduce((total: number, value: number) => total += value, 0), 0, 14); + return Math.min(globalScene.eventManager.getEventLuckBoost() + (luck ?? 0), 14); } -export function getLuckString(luckValue: integer): string { +export function getLuckString(luckValue: number): string { return [ "D", "C", "C+", "B-", "B", "B+", "A-", "A", "A+", "A++", "S", "S+", "SS", "SS+", "SSS" ][luckValue]; } -export function getLuckTextTint(luckValue: integer): integer { +export function getLuckTextTint(luckValue: number): number { let modifierTier: ModifierTier; if (luckValue > 11) { modifierTier = ModifierTier.LUXURY; diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 05d9e8b9897..f6a69fcca2d 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -1,37 +1,37 @@ -import type BattleScene from "#app/battle-scene"; import { FusionSpeciesFormEvolution, pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import { getBerryEffectFunc, getBerryPredicate } from "#app/data/berry"; import { getLevelTotalExp } from "#app/data/exp"; import { allMoves } from "#app/data/move"; import { MAX_PER_TYPE_POKEBALLS } from "#app/data/pokeball"; -import { type FormChangeItem, SpeciesFormChangeItemTrigger, SpeciesFormChangeLapseTeraTrigger, SpeciesFormChangeTeraTrigger } from "#app/data/pokemon-forms"; +import { type FormChangeItem, SpeciesFormChangeItemTrigger } from "#app/data/pokemon-forms"; import { getStatusEffectHealText } from "#app/data/status-effect"; -import Pokemon, { type PlayerPokemon } from "#app/field/pokemon"; +import type { PlayerPokemon } from "#app/field/pokemon"; +import Pokemon from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import Overrides from "#app/overrides"; import { EvolutionPhase } from "#app/phases/evolution-phase"; import { LearnMovePhase, LearnMoveType } from "#app/phases/learn-move-phase"; import { LevelUpPhase } from "#app/phases/level-up-phase"; import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase"; -import { achvs } from "#app/system/achv"; import type { VoucherType } from "#app/system/voucher"; import { Command } from "#app/ui/command-ui-handler"; import { addTextObject, TextStyle } from "#app/ui/text"; import { BooleanHolder, hslToHex, isNullOrUndefined, NumberHolder, toDmgValue } from "#app/utils"; import { BattlerTagType } from "#enums/battler-tag-type"; import { BerryType } from "#enums/berry-type"; -import { Moves } from "#enums/moves"; +import type { Moves } from "#enums/moves"; import type { Nature } from "#enums/nature"; import type { PokeballType } from "#enums/pokeball"; import { Species } from "#enums/species"; import { type PermanentStat, type TempBattleStat, BATTLE_STATS, Stat, TEMP_BATTLE_STATS } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; -import { Type } from "#enums/type"; +import type { Type } from "#enums/type"; import i18next from "i18next"; import { type DoubleBattleChanceBoosterModifierType, type EvolutionItemModifierType, type FormChangeItemModifierType, type ModifierOverride, type ModifierType, type PokemonBaseStatTotalModifierType, type PokemonExpBoosterModifierType, type PokemonFriendshipBoosterModifierType, type PokemonMoveAccuracyBoosterModifierType, type PokemonMultiHitModifierType, type TerastallizeModifierType, type TmModifierType, getModifierType, ModifierPoolType, ModifierTypeGenerator, modifierTypes, PokemonHeldItemModifierType } from "./modifier-type"; import { Color, ShadowColor } from "#enums/color"; import { FRIENDSHIP_GAIN_FROM_RARE_CANDY } from "#app/data/balance/starters"; import { applyAbAttrs, CommanderAbAttr } from "#app/data/ability"; +import { globalScene } from "#app/global-scene"; export type ModifierPredicate = (modifier: Modifier) => boolean; @@ -65,8 +65,8 @@ export class ModifierBar extends Phaser.GameObjects.Container { private player: boolean; private modifierCache: PersistentModifier[]; - constructor(scene: BattleScene, enemy?: boolean) { - super(scene, 1 + (enemy ? 302 : 0), 2); + constructor(enemy?: boolean) { + super(globalScene, 1 + (enemy ? 302 : 0), 2); this.player = !enemy; this.setScale(0.5); @@ -80,7 +80,7 @@ export class ModifierBar extends Phaser.GameObjects.Container { updateModifiers(modifiers: PersistentModifier[], hideHeldItems: boolean = false) { this.removeAll(true); - const visibleIconModifiers = modifiers.filter(m => m.isIconVisible(this.scene as BattleScene)); + const visibleIconModifiers = modifiers.filter(m => m.isIconVisible()); const nonPokemonSpecificModifiers = visibleIconModifiers.filter(m => !(m as PokemonHeldItemModifier).pokemonId).sort(modifierSortFunc); const pokemonSpecificModifiers = visibleIconModifiers.filter(m => (m as PokemonHeldItemModifier).pokemonId).sort(modifierSortFunc); @@ -89,7 +89,7 @@ export class ModifierBar extends Phaser.GameObjects.Container { const thisArg = this; sortedVisibleIconModifiers.forEach((modifier: PersistentModifier, i: number) => { - const icon = modifier.getIcon(this.scene as BattleScene); + const icon = modifier.getIcon(); if (i >= iconOverflowIndex) { icon.setVisible(false); } @@ -97,13 +97,13 @@ export class ModifierBar extends Phaser.GameObjects.Container { this.setModifierIconPosition(icon, sortedVisibleIconModifiers.length); icon.setInteractive(new Phaser.Geom.Rectangle(0, 0, 32, 24), Phaser.Geom.Rectangle.Contains); icon.on("pointerover", () => { - (this.scene as BattleScene).ui.showTooltip(modifier.type.name, modifier.type.getDescription(this.scene as BattleScene)); + globalScene.ui.showTooltip(modifier.type.name, modifier.type.getDescription()); if (this.modifierCache && this.modifierCache.length > iconOverflowIndex) { thisArg.updateModifierOverflowVisibility(true); } }); icon.on("pointerout", () => { - (this.scene as BattleScene).ui.hideTooltip(); + globalScene.ui.hideTooltip(); if (this.modifierCache && this.modifierCache.length > iconOverflowIndex) { thisArg.updateModifierOverflowVisibility(false); } @@ -158,23 +158,23 @@ export abstract class Modifier { * Handles applying of {@linkcode Modifier} * @param args collection of all passed parameters */ - abstract apply(...args: unknown[]): boolean | Promise; + abstract apply(...args: unknown[]): boolean; } export abstract class PersistentModifier extends Modifier { public stackCount: number; public virtualStackCount: number; - constructor(type: ModifierType, stackCount?: number) { + constructor(type: ModifierType, stackCount: number = 1) { super(type); - this.stackCount = stackCount === undefined ? 1 : stackCount; + this.stackCount = stackCount; this.virtualStackCount = 0; } - add(modifiers: PersistentModifier[], virtual: boolean, scene: BattleScene): boolean { + add(modifiers: PersistentModifier[], virtual: boolean): boolean { for (const modifier of modifiers) { if (this.match(modifier)) { - return modifier.incrementStack(scene, this.stackCount, virtual); + return modifier.incrementStack(this.stackCount, virtual); } } @@ -192,8 +192,8 @@ export abstract class PersistentModifier extends Modifier { return []; } - incrementStack(scene: BattleScene, amount: number, virtual: boolean): boolean { - if (this.getStackCount() + amount <= this.getMaxStackCount(scene)) { + incrementStack(amount: number, virtual: boolean): boolean { + if (this.getStackCount() + amount <= this.getMaxStackCount()) { if (!virtual) { this.stackCount += amount; } else { @@ -209,26 +209,26 @@ export abstract class PersistentModifier extends Modifier { return this.stackCount + this.virtualStackCount; } - abstract getMaxStackCount(scene: BattleScene, forThreshold?: boolean): number; + abstract getMaxStackCount(forThreshold?: boolean): number; - isIconVisible(scene: BattleScene): boolean { + isIconVisible(): boolean { return true; } - getIcon(scene: BattleScene, forSummary?: boolean): Phaser.GameObjects.Container { - const container = scene.add.container(0, 0); + getIcon(forSummary?: boolean): Phaser.GameObjects.Container { + const container = globalScene.add.container(0, 0); - const item = scene.add.sprite(0, 12, "items"); + const item = globalScene.add.sprite(0, 12, "items"); item.setFrame(this.type.iconImage); item.setOrigin(0, 0.5); container.add(item); - const stackText = this.getIconStackText(scene); + const stackText = this.getIconStackText(); if (stackText) { container.add(stackText); } - const virtualStackText = this.getIconStackText(scene, true); + const virtualStackText = this.getIconStackText(true); if (virtualStackText) { container.add(virtualStackText); } @@ -236,14 +236,14 @@ export abstract class PersistentModifier extends Modifier { return container; } - getIconStackText(scene: BattleScene, virtual?: boolean): Phaser.GameObjects.BitmapText | null { - if (this.getMaxStackCount(scene) === 1 || (virtual && !this.virtualStackCount)) { + getIconStackText(virtual?: boolean): Phaser.GameObjects.BitmapText | null { + if (this.getMaxStackCount() === 1 || (virtual && !this.virtualStackCount)) { return null; } - const text = scene.add.bitmapText(10, 15, "item-count", this.stackCount.toString(), 11); + const text = globalScene.add.bitmapText(10, 15, "item-count", this.stackCount.toString(), 11); text.letterSpacing = -0.5; - if (this.getStackCount() >= this.getMaxStackCount(scene)) { + if (this.getStackCount() >= this.getMaxStackCount()) { text.setTint(0xf89890); } text.setOrigin(0, 0); @@ -278,8 +278,8 @@ export class AddPokeballModifier extends ConsumableModifier { * @param battleScene {@linkcode BattleScene} * @returns always `true` */ - override apply(battleScene: BattleScene): boolean { - const pokeballCounts = battleScene.pokeballCounts; + override apply(): boolean { + const pokeballCounts = globalScene.pokeballCounts; pokeballCounts[this.pokeballType] = Math.min(pokeballCounts[this.pokeballType] + this.count, MAX_PER_TYPE_POKEBALLS); return true; @@ -302,8 +302,8 @@ export class AddVoucherModifier extends ConsumableModifier { * @param battleScene {@linkcode BattleScene} * @returns always `true` */ - override apply(battleScene: BattleScene): boolean { - const voucherCounts = battleScene.gameData.voucherCounts; + override apply(): boolean { + const voucherCounts = globalScene.gameData.voucherCounts; voucherCounts[this.voucherType] += this.count; return true; @@ -343,13 +343,13 @@ export abstract class LapsingPersistentModifier extends PersistentModifier { * @param _scene N/A * @returns `true` if the modifier was successfully added or applied, false otherwise */ - add(modifiers: PersistentModifier[], _virtual: boolean, scene: BattleScene): boolean { + add(modifiers: PersistentModifier[], _virtual: boolean): boolean { for (const modifier of modifiers) { if (this.match(modifier)) { const modifierInstance = modifier as LapsingPersistentModifier; if (modifierInstance.getBattleCount() < modifierInstance.getMaxBattles()) { modifierInstance.resetBattleCount(); - scene.playSound("se/restore"); + globalScene.playSound("se/restore"); return true; } // should never get here @@ -371,8 +371,8 @@ export abstract class LapsingPersistentModifier extends PersistentModifier { return this.battleCount > 0; } - getIcon(scene: BattleScene): Phaser.GameObjects.Container { - const container = super.getIcon(scene); + getIcon(): Phaser.GameObjects.Container { + const container = super.getIcon(); // Linear interpolation on hue const hue = Math.floor(120 * (this.battleCount / this.maxBattles) + 5); @@ -381,7 +381,7 @@ export abstract class LapsingPersistentModifier extends PersistentModifier { const typeHex = hslToHex(hue, 0.5, 0.9); const strokeHex = hslToHex(hue, 0.7, 0.3); - const battleCountText = addTextObject(scene, 27, 0, this.battleCount.toString(), TextStyle.PARTY, { + const battleCountText = addTextObject(27, 0, this.battleCount.toString(), TextStyle.PARTY, { fontSize: "66px", color: typeHex, }); @@ -393,7 +393,7 @@ export abstract class LapsingPersistentModifier extends PersistentModifier { return container; } - getIconStackText(_scene: BattleScene, _virtual?: boolean): Phaser.GameObjects.BitmapText | null { + getIconStackText(_virtual?: boolean): Phaser.GameObjects.BitmapText | null { return null; } @@ -421,7 +421,7 @@ export abstract class LapsingPersistentModifier extends PersistentModifier { return [ this.maxBattles, this.battleCount ]; } - getMaxStackCount(_scene: BattleScene, _forThreshold?: boolean): number { + getMaxStackCount(_forThreshold?: boolean): number { // Must be an abitrary number greater than 1 return 2; } @@ -574,7 +574,7 @@ export class MapModifier extends PersistentModifier { return true; } - getMaxStackCount(scene: BattleScene): number { + getMaxStackCount(): number { return 1; } } @@ -592,7 +592,7 @@ export class MegaEvolutionAccessModifier extends PersistentModifier { return true; } - getMaxStackCount(scene: BattleScene): number { + getMaxStackCount(): number { return 1; } } @@ -615,7 +615,7 @@ export class GigantamaxAccessModifier extends PersistentModifier { return true; } - getMaxStackCount(scene: BattleScene): number { + getMaxStackCount(): number { return 1; } } @@ -638,7 +638,7 @@ export class TerastallizeAccessModifier extends PersistentModifier { return true; } - getMaxStackCount(scene: BattleScene): number { + getMaxStackCount(): number { return 1; } } @@ -680,33 +680,33 @@ export abstract class PokemonHeldItemModifier extends PersistentModifier { return !!pokemon && (this.pokemonId === -1 || pokemon.id === this.pokemonId); } - isIconVisible(scene: BattleScene): boolean { - return !!(this.getPokemon(scene)?.isOnField()); + isIconVisible(): boolean { + return !!(this.getPokemon()?.isOnField()); } - getIcon(scene: BattleScene, forSummary?: boolean): Phaser.GameObjects.Container { - const container = !forSummary ? scene.add.container(0, 0) : super.getIcon(scene); + getIcon(forSummary?: boolean): Phaser.GameObjects.Container { + const container = !forSummary ? globalScene.add.container(0, 0) : super.getIcon(); if (!forSummary) { - const pokemon = this.getPokemon(scene); + const pokemon = this.getPokemon(); if (pokemon) { - const pokemonIcon = scene.addPokemonIcon(pokemon, -2, 10, 0, 0.5); + const pokemonIcon = globalScene.addPokemonIcon(pokemon, -2, 10, 0, 0.5); container.add(pokemonIcon); container.setName(pokemon.id.toString()); } - const item = scene.add.sprite(16, this.virtualStackCount ? 8 : 16, "items"); + const item = globalScene.add.sprite(16, this.virtualStackCount ? 8 : 16, "items"); item.setScale(0.5); item.setOrigin(0, 0.5); item.setTexture("items", this.type.iconImage); container.add(item); - const stackText = this.getIconStackText(scene); + const stackText = this.getIconStackText(); if (stackText) { container.add(stackText); } - const virtualStackText = this.getIconStackText(scene, true); + const virtualStackText = this.getIconStackText(true); if (virtualStackText) { container.add(virtualStackText); } @@ -717,21 +717,21 @@ export abstract class PokemonHeldItemModifier extends PersistentModifier { return container; } - getPokemon(scene: BattleScene): Pokemon | undefined { - return this.pokemonId ? scene.getPokemonById(this.pokemonId) ?? undefined : undefined; + getPokemon(): Pokemon | undefined { + return this.pokemonId ? globalScene.getPokemonById(this.pokemonId) ?? undefined : undefined; } getScoreMultiplier(): number { return 1; } - getMaxStackCount(scene: BattleScene, forThreshold?: boolean): number { - const pokemon = this.getPokemon(scene); + getMaxStackCount(forThreshold?: boolean): number { + const pokemon = this.getPokemon(); if (!pokemon) { return 0; } if (pokemon.isPlayer() && forThreshold) { - return scene.getPlayerParty().map(p => this.getMaxHeldItemCount(p)).reduce((stackCount: number, maxStackCount: number) => Math.max(stackCount, maxStackCount), 0); + return globalScene.getPlayerParty().map(p => this.getMaxHeldItemCount(p)).reduce((stackCount: number, maxStackCount: number) => Math.max(stackCount, maxStackCount), 0); } return this.getMaxHeldItemCount(pokemon); } @@ -760,15 +760,14 @@ export abstract class LapsingPokemonHeldItemModifier extends PokemonHeldItemModi /** * Retrieve the {@linkcode Modifier | Modifiers} icon as a {@linkcode Phaser.GameObjects.Container | Container} - * @param scene The {@linkcode BattleScene} * @param forSummary `true` if the icon is for the summary screen * @returns the icon as a {@linkcode Phaser.GameObjects.Container | Container} */ - public getIcon(scene: BattleScene, forSummary?: boolean): Phaser.GameObjects.Container { - const container = super.getIcon(scene, forSummary); + public getIcon(forSummary?: boolean): Phaser.GameObjects.Container { + const container = super.getIcon(forSummary); - if (this.getPokemon(scene)?.isPlayer()) { - const battleCountText = addTextObject(scene, 27, 0, this.battlesLeft.toString(), TextStyle.PARTY, { fontSize: "66px", color: Color.PINK }); + if (this.getPokemon()?.isPlayer()) { + const battleCountText = addTextObject(27, 0, this.battlesLeft.toString(), TextStyle.PARTY, { fontSize: "66px", color: Color.PINK }); battleCountText.setShadow(0, 0); battleCountText.setStroke(ShadowColor.RED, 16); battleCountText.setOrigin(1, 0); @@ -782,73 +781,7 @@ export abstract class LapsingPokemonHeldItemModifier extends PokemonHeldItemModi return this.battlesLeft; } - getMaxStackCount(scene: BattleScene, forThreshold?: boolean): number { - return 1; - } -} - -export class TerastallizeModifier extends LapsingPokemonHeldItemModifier { - public override type: TerastallizeModifierType; - public teraType: Type; - public isTransferable: boolean = false; - - constructor(type: TerastallizeModifierType, pokemonId: number, teraType: Type, battlesLeft?: number, stackCount?: number) { - super(type, pokemonId, battlesLeft || 10, stackCount); - - this.teraType = teraType; - } - - matchType(modifier: Modifier): boolean { - if (modifier instanceof TerastallizeModifier && modifier.teraType === this.teraType) { - return true; - } - return false; - } - - clone(): TerastallizeModifier { - return new TerastallizeModifier(this.type, this.pokemonId, this.teraType, this.battlesLeft, this.stackCount); - } - - getArgs(): any[] { - return [ this.pokemonId, this.teraType, this.battlesLeft ]; - } - - /** - * Applies the {@linkcode TerastallizeModifier} to the specified {@linkcode Pokemon}. - * @param pokemon the {@linkcode Pokemon} to be terastallized - * @returns always `true` - */ - override apply(pokemon: Pokemon): boolean { - if (pokemon.isPlayer()) { - pokemon.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeTeraTrigger); - pokemon.scene.validateAchv(achvs.TERASTALLIZE); - if (this.teraType === Type.STELLAR) { - pokemon.scene.validateAchv(achvs.STELLAR_TERASTALLIZE); - } - } - pokemon.updateSpritePipelineData(); - return true; - } - - /** - * Triggers {@linkcode LapsingPokemonHeldItemModifier.lapse} and if it returns `0` a form change is triggered. - * @param pokemon THe {@linkcode Pokemon} to be terastallized - * @returns the result of {@linkcode LapsingPokemonHeldItemModifier.lapse} - */ - public override lapse(pokemon: Pokemon): boolean { - const ret = super.lapse(pokemon); - if (!ret) { - pokemon.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeLapseTeraTrigger); - pokemon.updateSpritePipelineData(); - } - return ret; - } - - getScoreMultiplier(): number { - return 1.25; - } - - getMaxHeldItemCount(pokemon: Pokemon): number { + getMaxStackCount(forThreshold?: boolean): number { return 1; } } @@ -944,19 +877,19 @@ export class EvoTrackerModifier extends PokemonHeldItemModifier { return true; } - getIconStackText(scene: BattleScene, virtual?: boolean): Phaser.GameObjects.BitmapText | null { - if (this.getMaxStackCount(scene) === 1 || (virtual && !this.virtualStackCount)) { + getIconStackText(virtual?: boolean): Phaser.GameObjects.BitmapText | null { + if (this.getMaxStackCount() === 1 || (virtual && !this.virtualStackCount)) { return null; } - const pokemon = scene.getPokemonById(this.pokemonId); + const pokemon = globalScene.getPokemonById(this.pokemonId); this.stackCount = pokemon ? pokemon.evoCounter + pokemon.getHeldItems().filter(m => m instanceof DamageMoneyRewardModifier).length - + pokemon.scene.findModifiers(m => m instanceof MoneyMultiplierModifier || m instanceof ExtraModifierModifier || m instanceof TempExtraModifierModifier).length + + globalScene.findModifiers(m => m instanceof MoneyMultiplierModifier || m instanceof ExtraModifierModifier || m instanceof TempExtraModifierModifier).length : this.stackCount; - const text = scene.add.bitmapText(10, 15, "item-count", this.stackCount.toString(), 11); + const text = globalScene.add.bitmapText(10, 15, "item-count", this.stackCount.toString(), 11); text.letterSpacing = -0.5; if (this.getStackCount() >= this.required) { text.setTint(0xf89890); @@ -968,7 +901,7 @@ export class EvoTrackerModifier extends PokemonHeldItemModifier { getMaxHeldItemCount(pokemon: Pokemon): number { this.stackCount = pokemon.evoCounter + pokemon.getHeldItems().filter(m => m instanceof DamageMoneyRewardModifier).length - + pokemon.scene.findModifiers(m => m instanceof MoneyMultiplierModifier || m instanceof ExtraModifierModifier || m instanceof TempExtraModifierModifier).length; + + globalScene.findModifiers(m => m instanceof MoneyMultiplierModifier || m instanceof ExtraModifierModifier || m instanceof TempExtraModifierModifier).length; return 999; } } @@ -1536,7 +1469,7 @@ export class SurviveDamageModifier extends PokemonHeldItemModifier { if (!surviveDamage.value && pokemon.randSeedInt(10) < this.getStackCount()) { surviveDamage.value = true; - pokemon.scene.queueMessage(i18next.t("modifier:surviveDamageApply", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), typeName: this.type.name })); + globalScene.queueMessage(i18next.t("modifier:surviveDamageApply", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), typeName: this.type.name })); return true; } @@ -1580,11 +1513,11 @@ export class BypassSpeedChanceModifier extends PokemonHeldItemModifier { override apply(pokemon: Pokemon, doBypassSpeed: BooleanHolder): boolean { if (!doBypassSpeed.value && pokemon.randSeedInt(10) < this.getStackCount()) { doBypassSpeed.value = true; - const isCommandFight = pokemon.scene.currentBattle.turnCommands[pokemon.getBattlerIndex()]?.command === Command.FIGHT; + const isCommandFight = globalScene.currentBattle.turnCommands[pokemon.getBattlerIndex()]?.command === Command.FIGHT; const hasQuickClaw = this.type instanceof PokemonHeldItemModifierType && this.type.id === "QUICK_CLAW"; if (isCommandFight && hasQuickClaw) { - pokemon.scene.queueMessage(i18next.t("modifier:bypassSpeedChanceApply", { pokemonName: getPokemonNameWithAffix(pokemon), itemName: i18next.t("modifierType:ModifierType.QUICK_CLAW.name") })); + globalScene.queueMessage(i18next.t("modifier:bypassSpeedChanceApply", { pokemonName: getPokemonNameWithAffix(pokemon), itemName: i18next.t("modifierType:ModifierType.QUICK_CLAW.name") })); } return true; } @@ -1668,8 +1601,7 @@ export class TurnHealModifier extends PokemonHeldItemModifier { */ override apply(pokemon: Pokemon): boolean { if (!pokemon.isFullHp()) { - const scene = pokemon.scene; - scene.unshiftPhase(new PokemonHealPhase(scene, pokemon.getBattlerIndex(), + globalScene.unshiftPhase(new PokemonHealPhase(pokemon.getBattlerIndex(), toDmgValue(pokemon.getMaxHp() / 16) * this.stackCount, i18next.t("modifier:turnHealApply", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), typeName: this.type.name }), true)); return true; } @@ -1761,8 +1693,7 @@ export class HitHealModifier extends PokemonHeldItemModifier { */ override apply(pokemon: Pokemon): boolean { if (pokemon.turnData.totalDamageDealt && !pokemon.isFullHp()) { - const scene = pokemon.scene; - scene.unshiftPhase(new PokemonHealPhase(scene, pokemon.getBattlerIndex(), + globalScene.unshiftPhase(new PokemonHealPhase(pokemon.getBattlerIndex(), toDmgValue(pokemon.turnData.totalDamageDealt / 8) * this.stackCount, i18next.t("modifier:hitHealApply", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), typeName: this.type.name }), true)); } @@ -1807,7 +1738,7 @@ export class LevelIncrementBoosterModifier extends PersistentModifier { return true; } - getMaxStackCount(scene: BattleScene, forThreshold?: boolean): number { + getMaxStackCount(forThreshold?: boolean): number { return 99; } } @@ -1851,7 +1782,7 @@ export class BerryModifier extends PokemonHeldItemModifier { */ override apply(pokemon: Pokemon): boolean { const preserve = new BooleanHolder(false); - pokemon.scene.applyModifiers(PreserveBerryModifier, pokemon.isPlayer(), pokemon, preserve); + globalScene.applyModifiers(PreserveBerryModifier, pokemon.isPlayer(), pokemon, preserve); getBerryEffectFunc(this.berryType)(pokemon); if (!preserve.value) { @@ -1906,7 +1837,7 @@ export class PreserveBerryModifier extends PersistentModifier { return true; } - getMaxStackCount(scene: BattleScene): number { + getMaxStackCount(): number { return 3; } } @@ -1931,14 +1862,14 @@ export class PokemonInstantReviveModifier extends PokemonHeldItemModifier { */ override apply(pokemon: Pokemon): boolean { // Restore the Pokemon to half HP - pokemon.scene.unshiftPhase(new PokemonHealPhase(pokemon.scene, pokemon.getBattlerIndex(), + globalScene.unshiftPhase(new PokemonHealPhase(pokemon.getBattlerIndex(), toDmgValue(pokemon.getMaxHp() / 2), i18next.t("modifier:pokemonInstantReviveApply", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), typeName: this.type.name }), false, false, true)); // Remove the Pokemon's FAINT status pokemon.resetStatus(true, false, true); // Reapply Commander on the Pokemon's side of the field, if applicable - const field = pokemon.isPlayer() ? pokemon.scene.getPlayerField() : pokemon.scene.getEnemyField(); + const field = pokemon.isPlayer() ? globalScene.getPlayerField() : globalScene.getEnemyField(); field.forEach((p) => applyAbAttrs(CommanderAbAttr, p, null, false)); return true; } @@ -1984,7 +1915,7 @@ export class ResetNegativeStatStageModifier extends PokemonHeldItemModifier { } if (statRestored) { - pokemon.scene.queueMessage(i18next.t("modifier:resetNegativeStatStageApply", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), typeName: this.type.name })); + globalScene.queueMessage(i18next.t("modifier:resetNegativeStatStageApply", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), typeName: this.type.name })); } return statRestored; } @@ -2018,10 +1949,40 @@ export abstract class ConsumablePokemonModifier extends ConsumableModifier { * @param playerPokemon The {@linkcode PlayerPokemon} that consumes the item * @param args Additional arguments passed to {@linkcode ConsumablePokemonModifier.apply} */ - abstract override apply(playerPokemon: PlayerPokemon, ...args: unknown[]): boolean | Promise; + abstract override apply(playerPokemon: PlayerPokemon, ...args: unknown[]): boolean; - getPokemon(scene: BattleScene) { - return scene.getPlayerParty().find(p => p.id === this.pokemonId); + getPokemon() { + return globalScene.getPlayerParty().find(p => p.id === this.pokemonId); + } +} + +export class TerrastalizeModifier extends ConsumablePokemonModifier { + public override type: TerastallizeModifierType; + public teraType: Type; + + constructor(type: TerastallizeModifierType, pokemonId: number, teraType: Type) { + super(type, pokemonId); + + this.teraType = teraType; + } + + /** + * Checks if {@linkcode TerrastalizeModifier} should be applied + * @param playerPokemon The {@linkcode PlayerPokemon} that consumes the item + * @returns `true` if the {@linkcode TerrastalizeModifier} should be applied + */ + override shouldApply(playerPokemon?: PlayerPokemon): boolean { + return super.shouldApply(playerPokemon) && [ playerPokemon?.species.speciesId, playerPokemon?.fusionSpecies?.speciesId ].filter(s => s === Species.TERAPAGOS || s === Species.OGERPON || s === Species.SHEDINJA).length === 0; + } + + /** + * Applies {@linkcode TerrastalizeModifier} + * @param pokemon The {@linkcode PlayerPokemon} that consumes the item + * @returns `true` if hp was restored + */ + override apply(pokemon: Pokemon): boolean { + pokemon.teraType = this.teraType; + return true; } } @@ -2189,7 +2150,7 @@ export class PokemonNatureChangeModifier extends ConsumablePokemonModifier { */ override apply(playerPokemon: PlayerPokemon): boolean { playerPokemon.setCustomNature(this.nature); - playerPokemon.scene.gameData.unlockSpeciesNature(playerPokemon.species, this.nature); + globalScene.gameData.unlockSpeciesNature(playerPokemon.species, this.nature); return true; } @@ -2207,17 +2168,17 @@ export class PokemonLevelIncrementModifier extends ConsumablePokemonModifier { * @returns always `true` */ override apply(playerPokemon: PlayerPokemon, levelCount: NumberHolder = new NumberHolder(1)): boolean { - playerPokemon.scene.applyModifiers(LevelIncrementBoosterModifier, true, levelCount); + globalScene.applyModifiers(LevelIncrementBoosterModifier, true, levelCount); playerPokemon.level += levelCount.value; - if (playerPokemon.level <= playerPokemon.scene.getMaxExpLevel(true)) { + if (playerPokemon.level <= globalScene.getMaxExpLevel(true)) { playerPokemon.exp = getLevelTotalExp(playerPokemon.level, playerPokemon.species.growthRate); playerPokemon.levelExp = 0; } playerPokemon.addFriendship(FRIENDSHIP_GAIN_FROM_RARE_CANDY); - playerPokemon.scene.unshiftPhase(new LevelUpPhase(playerPokemon.scene, playerPokemon.scene.getPlayerParty().indexOf(playerPokemon), playerPokemon.level - levelCount.value, playerPokemon.level)); + globalScene.unshiftPhase(new LevelUpPhase(globalScene.getPlayerParty().indexOf(playerPokemon), playerPokemon.level - levelCount.value, playerPokemon.level)); return true; } @@ -2237,7 +2198,7 @@ export class TmModifier extends ConsumablePokemonModifier { */ override apply(playerPokemon: PlayerPokemon): boolean { - playerPokemon.scene.unshiftPhase(new LearnMovePhase(playerPokemon.scene, playerPokemon.scene.getPlayerParty().indexOf(playerPokemon), this.type.moveId, LearnMoveType.TM)); + globalScene.unshiftPhase(new LearnMovePhase(globalScene.getPlayerParty().indexOf(playerPokemon), this.type.moveId, LearnMoveType.TM)); return true; } @@ -2259,7 +2220,7 @@ export class RememberMoveModifier extends ConsumablePokemonModifier { */ override apply(playerPokemon: PlayerPokemon, cost?: number): boolean { - playerPokemon.scene.unshiftPhase(new LearnMovePhase(playerPokemon.scene, playerPokemon.scene.getPlayerParty().indexOf(playerPokemon), playerPokemon.getLearnableLevelMoves()[this.levelMoveIndex], LearnMoveType.MEMORY, cost)); + globalScene.unshiftPhase(new LearnMovePhase(globalScene.getPlayerParty().indexOf(playerPokemon), playerPokemon.getLearnableLevelMoves()[this.levelMoveIndex], LearnMoveType.MEMORY, cost)); return true; } @@ -2294,7 +2255,7 @@ export class EvolutionItemModifier extends ConsumablePokemonModifier { } if (matchingEvolution) { - playerPokemon.scene.unshiftPhase(new EvolutionPhase(playerPokemon.scene, playerPokemon, matchingEvolution, playerPokemon.level - 1)); + globalScene.unshiftPhase(new EvolutionPhase(playerPokemon, matchingEvolution, playerPokemon.level - 1)); return true; } @@ -2327,8 +2288,8 @@ export class FusePokemonModifier extends ConsumablePokemonModifier { * @param playerPokemon2 {@linkcode PlayerPokemon} that should be fused with {@linkcode playerPokemon} * @returns always Promise */ - override async apply(playerPokemon: PlayerPokemon, playerPokemon2: PlayerPokemon): Promise { - await playerPokemon.fuse(playerPokemon2); + override apply(playerPokemon: PlayerPokemon, playerPokemon2: PlayerPokemon): boolean { + playerPokemon.fuse(playerPokemon2); return true; } } @@ -2354,7 +2315,7 @@ export class MultipleParticipantExpBonusModifier extends PersistentModifier { return new MultipleParticipantExpBonusModifier(this.type, this.stackCount); } - getMaxStackCount(scene: BattleScene): number { + getMaxStackCount(): number { return 5; } } @@ -2391,7 +2352,7 @@ export class HealingBoosterModifier extends PersistentModifier { return true; } - getMaxStackCount(scene: BattleScene): number { + getMaxStackCount(): number { return 5; } } @@ -2432,7 +2393,7 @@ export class ExpBoosterModifier extends PersistentModifier { return true; } - getMaxStackCount(scene: BattleScene, forThreshold?: boolean): number { + getMaxStackCount(forThreshold?: boolean): number { return this.boostMultiplier < 1 ? this.boostMultiplier < 0.6 ? 99 : 30 : 10; } } @@ -2511,7 +2472,7 @@ export class ExpShareModifier extends PersistentModifier { return true; } - getMaxStackCount(scene: BattleScene): number { + getMaxStackCount(): number { return 5; } } @@ -2537,7 +2498,7 @@ export class ExpBalanceModifier extends PersistentModifier { return true; } - getMaxStackCount(scene: BattleScene): number { + getMaxStackCount(): number { return 4; } } @@ -2774,7 +2735,7 @@ export class PokemonFormChangeItemModifier extends PokemonHeldItemModifier { this.active = false; } - const ret = pokemon.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeItemTrigger); + const ret = globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeItemTrigger); if (switchActive) { this.active = true; @@ -2799,21 +2760,20 @@ export class MoneyRewardModifier extends ConsumableModifier { /** * Applies {@linkcode MoneyRewardModifier} - * @param battleScene The current {@linkcode BattleScene} * @returns always `true` */ - override apply(battleScene: BattleScene): boolean { - const moneyAmount = new NumberHolder(battleScene.getWaveMoneyAmount(this.moneyMultiplier)); + override apply(): boolean { + const moneyAmount = new NumberHolder(globalScene.getWaveMoneyAmount(this.moneyMultiplier)); - battleScene.applyModifiers(MoneyMultiplierModifier, true, moneyAmount); + globalScene.applyModifiers(MoneyMultiplierModifier, true, moneyAmount); - battleScene.addMoney(moneyAmount.value); + globalScene.addMoney(moneyAmount.value); - battleScene.getPlayerParty().map(p => { + globalScene.getPlayerParty().map(p => { if (p.species?.speciesId === Species.GIMMIGHOUL || p.fusionSpecies?.speciesId === Species.GIMMIGHOUL) { p.evoCounter ? p.evoCounter += Math.min(Math.floor(this.moneyMultiplier), 3) : p.evoCounter = Math.min(Math.floor(this.moneyMultiplier), 3); const modifier = getModifierType(modifierTypes.EVOLUTION_TRACKER_GIMMIGHOUL).newModifier(p) as EvoTrackerModifier; - battleScene.addModifier(modifier); + globalScene.addModifier(modifier); } }); @@ -2845,7 +2805,7 @@ export class MoneyMultiplierModifier extends PersistentModifier { return true; } - getMaxStackCount(scene: BattleScene): number { + getMaxStackCount(): number { return 5; } } @@ -2870,10 +2830,9 @@ export class DamageMoneyRewardModifier extends PokemonHeldItemModifier { * @returns always `true` */ override apply(pokemon: Pokemon, multiplier: NumberHolder): boolean { - const battleScene = pokemon.scene; const moneyAmount = new NumberHolder(Math.floor(multiplier.value * (0.5 * this.getStackCount()))); - battleScene.applyModifiers(MoneyMultiplierModifier, true, moneyAmount); - battleScene.addMoney(moneyAmount.value); + globalScene.applyModifiers(MoneyMultiplierModifier, true, moneyAmount); + globalScene.addMoney(moneyAmount.value); return true; } @@ -2894,17 +2853,16 @@ export class MoneyInterestModifier extends PersistentModifier { /** * Applies {@linkcode MoneyInterestModifier} - * @param battleScene The current {@linkcode BattleScene} * @returns always `true` */ - override apply(battleScene: BattleScene): boolean { - const interestAmount = Math.floor(battleScene.money * 0.1 * this.getStackCount()); - battleScene.addMoney(interestAmount); + override apply(): boolean { + const interestAmount = Math.floor(globalScene.money * 0.1 * this.getStackCount()); + globalScene.addMoney(interestAmount); const userLocale = navigator.language || "en-US"; const formattedMoneyAmount = interestAmount.toLocaleString(userLocale); const message = i18next.t("modifier:moneyInterestApply", { moneyAmount: formattedMoneyAmount, typeName: this.type.name }); - battleScene.queueMessage(message, undefined, true); + globalScene.queueMessage(message, undefined, true); return true; } @@ -2913,7 +2871,7 @@ export class MoneyInterestModifier extends PersistentModifier { return new MoneyInterestModifier(this.type, this.stackCount); } - getMaxStackCount(scene: BattleScene): number { + getMaxStackCount(): number { return 5; } } @@ -2942,7 +2900,7 @@ export class HiddenAbilityRateBoosterModifier extends PersistentModifier { return true; } - getMaxStackCount(scene: BattleScene): number { + getMaxStackCount(): number { return 4; } } @@ -2971,7 +2929,7 @@ export class ShinyRateBoosterModifier extends PersistentModifier { return true; } - getMaxStackCount(scene: BattleScene): number { + getMaxStackCount(): number { return 4; } } @@ -3003,7 +2961,7 @@ export class CriticalCatchChanceBoosterModifier extends PersistentModifier { return true; } - getMaxStackCount(scene: BattleScene): number { + getMaxStackCount(): number { return 3; } } @@ -3029,7 +2987,7 @@ export class LockModifierTiersModifier extends PersistentModifier { return new LockModifierTiersModifier(this.type, this.stackCount); } - getMaxStackCount(scene: BattleScene): number { + getMaxStackCount(): number { return 1; } } @@ -3069,7 +3027,7 @@ export class HealShopCostModifier extends PersistentModifier { return super.getArgs().concat(this.shopMultiplier); } - getMaxStackCount(scene: BattleScene): number { + getMaxStackCount(): number { return 1; } } @@ -3095,7 +3053,7 @@ export class BoostBugSpawnModifier extends PersistentModifier { return true; } - getMaxStackCount(scene: BattleScene): number { + getMaxStackCount(): number { return 1; } } @@ -3173,13 +3131,11 @@ export abstract class HeldItemTransferModifier extends PokemonHeldItemModifier { const poolType = pokemon.isPlayer() ? ModifierPoolType.PLAYER : pokemon.hasTrainer() ? ModifierPoolType.TRAINER : ModifierPoolType.WILD; const transferredModifierTypes: ModifierType[] = []; - const itemModifiers = pokemon.scene.findModifiers(m => m instanceof PokemonHeldItemModifier + const itemModifiers = globalScene.findModifiers(m => m instanceof PokemonHeldItemModifier && m.pokemonId === targetPokemon.id && m.isTransferable, targetPokemon.isPlayer()) as PokemonHeldItemModifier[]; let highestItemTier = itemModifiers.map(m => m.type.getOrInferTier(poolType)).reduce((highestTier, tier) => Math.max(tier!, highestTier), 0); // TODO: is this bang correct? let tierItemModifiers = itemModifiers.filter(m => m.type.getOrInferTier(poolType) === highestItemTier); - const heldItemTransferPromises: Promise[] = []; - for (let i = 0; i < transferredItemCount; i++) { if (!tierItemModifiers.length) { while (highestItemTier-- && !tierItemModifiers.length) { @@ -3191,19 +3147,15 @@ export abstract class HeldItemTransferModifier extends PokemonHeldItemModifier { } const randItemIndex = pokemon.randSeedInt(itemModifiers.length); const randItem = itemModifiers[randItemIndex]; - heldItemTransferPromises.push(pokemon.scene.tryTransferHeldItemModifier(randItem, pokemon, false).then(success => { - if (success) { - transferredModifierTypes.push(randItem.type); - itemModifiers.splice(randItemIndex, 1); - } - })); + if (globalScene.tryTransferHeldItemModifier(randItem, pokemon, false)) { + transferredModifierTypes.push(randItem.type); + itemModifiers.splice(randItemIndex, 1); + } } - Promise.all(heldItemTransferPromises).then(() => { - for (const mt of transferredModifierTypes) { - pokemon.scene.queueMessage(this.getTransferMessage(pokemon, targetPokemon, mt)); - } - }); + for (const mt of transferredModifierTypes) { + globalScene.queueMessage(this.getTransferMessage(pokemon, targetPokemon, mt)); + } return !!transferredModifierTypes.length; } @@ -3301,7 +3253,7 @@ export class ContactHeldItemTransferChanceModifier extends HeldItemTransferModif export class IvScannerModifier extends PersistentModifier { constructor(type: ModifierType, stackCount?: number) { - super(type, stackCount); + super(type); } match(modifier: Modifier): boolean { @@ -3309,7 +3261,7 @@ export class IvScannerModifier extends PersistentModifier { } clone(): IvScannerModifier { - return new IvScannerModifier(this.type, this.stackCount); + return new IvScannerModifier(this.type); } /** @@ -3317,11 +3269,11 @@ export class IvScannerModifier extends PersistentModifier { * @returns always `true` */ override apply(): boolean { - return true; + return true; //Dude are you kidding me } - getMaxStackCount(scene: BattleScene): number { - return 3; + getMaxStackCount(): number { + return 1; } } @@ -3349,7 +3301,7 @@ export class ExtraModifierModifier extends PersistentModifier { return true; } - getMaxStackCount(scene: BattleScene): number { + getMaxStackCount(): number { return 3; } } @@ -3370,17 +3322,16 @@ export class TempExtraModifierModifier extends LapsingPersistentModifier { * If no existing Silver Pokeballs are found, will add a new one. * @param modifiers {@linkcode PersistentModifier} array of the player's modifiers * @param _virtual N/A - * @param scene * @returns true if the modifier was successfully added or applied, false otherwise */ - add(modifiers: PersistentModifier[], _virtual: boolean, scene: BattleScene): boolean { + add(modifiers: PersistentModifier[], _virtual: boolean): boolean { for (const modifier of modifiers) { if (this.match(modifier)) { const modifierInstance = modifier as TempExtraModifierModifier; const newBattleCount = this.getMaxBattles() + modifierInstance.getBattleCount(); modifierInstance.setNewBattleCount(newBattleCount); - scene.playSound("se/restore"); + globalScene.playSound("se/restore"); return true; } } @@ -3413,7 +3364,7 @@ export abstract class EnemyPersistentModifier extends PersistentModifier { super(type, stackCount); } - getMaxStackCount(scene: BattleScene): number { + getMaxStackCount(): number { return 5; } } @@ -3433,12 +3384,12 @@ abstract class EnemyDamageMultiplierModifier extends EnemyPersistentModifier { * @returns always `true` */ override apply(multiplier: NumberHolder): boolean { - multiplier.value = Math.floor(multiplier.value * Math.pow(this.damageMultiplier, this.getStackCount())); + multiplier.value = toDmgValue(multiplier.value * Math.pow(this.damageMultiplier, this.getStackCount())); return true; } - getMaxStackCount(scene: BattleScene): number { + getMaxStackCount(): number { return 99; } } @@ -3461,7 +3412,7 @@ export class EnemyDamageBoosterModifier extends EnemyDamageMultiplierModifier { return [ (this.damageMultiplier - 1) * 100 ]; } - getMaxStackCount(scene: BattleScene): number { + getMaxStackCount(): number { return 999; } } @@ -3484,8 +3435,8 @@ export class EnemyDamageReducerModifier extends EnemyDamageMultiplierModifier { return [ (1 - this.damageMultiplier) * 100 ]; } - getMaxStackCount(scene: BattleScene): number { - return scene.currentBattle.waveIndex < 2000 ? super.getMaxStackCount(scene) : 999; + getMaxStackCount(): number { + return globalScene.currentBattle.waveIndex < 2000 ? super.getMaxStackCount() : 999; } } @@ -3518,8 +3469,7 @@ export class EnemyTurnHealModifier extends EnemyPersistentModifier { */ override apply(enemyPokemon: Pokemon): boolean { if (!enemyPokemon.isFullHp()) { - const scene = enemyPokemon.scene; - scene.unshiftPhase(new PokemonHealPhase(scene, enemyPokemon.getBattlerIndex(), + globalScene.unshiftPhase(new PokemonHealPhase(enemyPokemon.getBattlerIndex(), Math.max(Math.floor(enemyPokemon.getMaxHp() / (100 / this.healPercent)) * this.stackCount, 1), i18next.t("modifier:enemyTurnHealApply", { pokemonNameWithAffix: getPokemonNameWithAffix(enemyPokemon) }), true, false, false, false, true)); return true; } @@ -3527,7 +3477,7 @@ export class EnemyTurnHealModifier extends EnemyPersistentModifier { return false; } - getMaxStackCount(scene: BattleScene): number { + getMaxStackCount(): number { return 10; } } @@ -3569,7 +3519,7 @@ export class EnemyAttackStatusEffectChanceModifier extends EnemyPersistentModifi return false; } - getMaxStackCount(scene: BattleScene): number { + getMaxStackCount(): number { return 10; } } @@ -3603,7 +3553,7 @@ export class EnemyStatusEffectHealChanceModifier extends EnemyPersistentModifier */ override apply(enemyPokemon: Pokemon): boolean { if (enemyPokemon.status && Phaser.Math.RND.realInRange(0, 1) < (this.chance * this.getStackCount())) { - enemyPokemon.scene.queueMessage(getStatusEffectHealText(enemyPokemon.status.effect, getPokemonNameWithAffix(enemyPokemon))); + globalScene.queueMessage(getStatusEffectHealText(enemyPokemon.status.effect, getPokemonNameWithAffix(enemyPokemon))); enemyPokemon.resetStatus(); enemyPokemon.updateInfo(); return true; @@ -3612,7 +3562,7 @@ export class EnemyStatusEffectHealChanceModifier extends EnemyPersistentModifier return false; } - getMaxStackCount(scene: BattleScene): number { + getMaxStackCount(): number { return 10; } } @@ -3656,7 +3606,7 @@ export class EnemyEndureChanceModifier extends EnemyPersistentModifier { return true; } - getMaxStackCount(scene: BattleScene): number { + getMaxStackCount(): number { return 10; } } @@ -3697,7 +3647,7 @@ export class EnemyFusionChanceModifier extends EnemyPersistentModifier { return true; } - getMaxStackCount(scene: BattleScene): number { + getMaxStackCount(): number { return 10; } } @@ -3706,18 +3656,17 @@ export class EnemyFusionChanceModifier extends EnemyPersistentModifier { * Uses either `MODIFIER_OVERRIDE` in overrides.ts to set {@linkcode PersistentModifier}s for either: * - The player * - The enemy - * @param scene current {@linkcode BattleScene} * @param isPlayer {@linkcode boolean} for whether the player (`true`) or enemy (`false`) is being overridden */ -export function overrideModifiers(scene: BattleScene, isPlayer: boolean = true): void { +export function overrideModifiers(isPlayer: boolean = true): void { const modifiersOverride: ModifierOverride[] = isPlayer ? Overrides.STARTING_MODIFIER_OVERRIDE : Overrides.OPP_MODIFIER_OVERRIDE; - if (!modifiersOverride || modifiersOverride.length === 0 || !scene) { + if (!modifiersOverride || modifiersOverride.length === 0 || !globalScene) { return; } // If it's the opponent, clear all of their current modifiers to avoid stacking if (!isPlayer) { - scene.clearEnemyModifiers(); + globalScene.clearEnemyModifiers(); } modifiersOverride.forEach(item => { @@ -3734,9 +3683,9 @@ export function overrideModifiers(scene: BattleScene, isPlayer: boolean = true): modifier.stackCount = item.count || 1; if (isPlayer) { - scene.addModifier(modifier, true, false, false, true); + globalScene.addModifier(modifier, true, false, false, true); } else { - scene.addEnemyModifier(modifier, true, true); + globalScene.addEnemyModifier(modifier, true, true); } } }); @@ -3746,18 +3695,17 @@ export function overrideModifiers(scene: BattleScene, isPlayer: boolean = true): * Uses either `HELD_ITEMS_OVERRIDE` in overrides.ts to set {@linkcode PokemonHeldItemModifier}s for either: * - The first member of the player's team when starting a new game * - An enemy {@linkcode Pokemon} being spawned in - * @param scene current {@linkcode BattleScene} * @param pokemon {@linkcode Pokemon} whose held items are being overridden * @param isPlayer {@linkcode boolean} for whether the {@linkcode pokemon} is the player's (`true`) or an enemy (`false`) */ -export function overrideHeldItems(scene: BattleScene, pokemon: Pokemon, isPlayer: boolean = true): void { +export function overrideHeldItems(pokemon: Pokemon, isPlayer: boolean = true): void { const heldItemsOverride: ModifierOverride[] = isPlayer ? Overrides.STARTING_HELD_ITEMS_OVERRIDE : Overrides.OPP_HELD_ITEMS_OVERRIDE; - if (!heldItemsOverride || heldItemsOverride.length === 0 || !scene) { + if (!heldItemsOverride || heldItemsOverride.length === 0 || !globalScene) { return; } if (!isPlayer) { - scene.clearEnemyHeldItemModifiers(pokemon); + globalScene.clearEnemyHeldItemModifiers(pokemon); } heldItemsOverride.forEach(item => { @@ -3775,9 +3723,9 @@ export function overrideHeldItems(scene: BattleScene, pokemon: Pokemon, isPlayer heldItemModifier.pokemonId = pokemon.id; heldItemModifier.stackCount = qty; if (isPlayer) { - scene.addModifier(heldItemModifier, true, false, false, true); + globalScene.addModifier(heldItemModifier, true, false, false, true); } else { - scene.addEnemyModifier(heldItemModifier, true, true); + globalScene.addEnemyModifier(heldItemModifier, true, true); } } }); diff --git a/src/overrides.ts b/src/overrides.ts index 85be47d95cc..d15370259fc 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/consistent-type-imports */ import { type PokeballCounts } from "#app/battle-scene"; import { Gender } from "#app/data/gender"; import { Variant } from "#app/data/variant"; @@ -21,7 +22,7 @@ import { WeatherType } from "#enums/weather-type"; * * Any override added here will be used instead of the value in {@linkcode DefaultOverrides} * - * If an override name starts with "STARTING", it will apply when a new run begins + * If an override name starts with "STARTING", it will only apply when a new run begins. * * @example * ``` @@ -38,7 +39,7 @@ const overrides = {} satisfies Partial>; * --- * Defaults for Overrides that are used when testing different in game situations * - * If an override name starts with "STARTING", it will apply when a new run begins + * If an override name starts with "STARTING", it will only apply when a new run begins. */ class DefaultOverrides { // ----------------- @@ -46,6 +47,7 @@ class DefaultOverrides { // ----------------- /** a specific seed (default: a random string of 24 characters) */ readonly SEED_OVERRIDE: string = ""; + readonly DAILY_RUN_SEED_OVERRIDE: string | null = null; readonly WEATHER_OVERRIDE: WeatherType = WeatherType.NONE; /** * If `null`, ignore this override. @@ -62,8 +64,11 @@ class DefaultOverrides { readonly STARTING_WAVE_OVERRIDE: number = 0; readonly STARTING_BIOME_OVERRIDE: Biome = Biome.TOWN; readonly ARENA_TINT_OVERRIDE: TimeOfDay | null = null; - /** Multiplies XP gained by this value including 0. Set to null to ignore the override */ + /** Multiplies XP gained by this value including 0. Set to null to ignore the override. */ readonly XP_MULTIPLIER_OVERRIDE: number | null = null; + /** Sets the level cap to this number during experience gain calculations. Set to `0` to disable override & use normal wave-based level caps, + or any negative number to set it to 9 quadrillion (effectively disabling it). */ + readonly LEVEL_CAP_OVERRIDE: number = 0; readonly NEVER_CRIT_OVERRIDE: boolean = false; /** default 1000 */ readonly STARTING_MONEY_OVERRIDE: number = 0; @@ -122,9 +127,10 @@ class DefaultOverrides { /** * This will override the species of the fusion */ - readonly STARTER_FUSION_SPECIES_OVERRIDE: Species | integer = 0; + readonly STARTER_FUSION_SPECIES_OVERRIDE: Species | number = 0; readonly ABILITY_OVERRIDE: Abilities = Abilities.NONE; readonly PASSIVE_ABILITY_OVERRIDE: Abilities = Abilities.NONE; + readonly HAS_PASSIVE_ABILITY_OVERRIDE: boolean | null = null; readonly STATUS_OVERRIDE: StatusEffect = StatusEffect.NONE; readonly GENDER_OVERRIDE: Gender | null = null; readonly MOVESET_OVERRIDE: Moves | Array = []; @@ -142,10 +148,11 @@ class DefaultOverrides { /** * This will override the species of the fusion only when the opponent is already a fusion */ - readonly OPP_FUSION_SPECIES_OVERRIDE: Species | integer = 0; + readonly OPP_FUSION_SPECIES_OVERRIDE: Species | number = 0; readonly OPP_LEVEL_OVERRIDE: number = 0; readonly OPP_ABILITY_OVERRIDE: Abilities = Abilities.NONE; readonly OPP_PASSIVE_ABILITY_OVERRIDE: Abilities = Abilities.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: Moves | Array = []; diff --git a/src/phase.ts b/src/phase.ts index 5cf91f2c478..8da00d78b61 100644 --- a/src/phase.ts +++ b/src/phase.ts @@ -1,19 +1,13 @@ -import BattleScene from "./battle-scene"; +import { globalScene } from "#app/global-scene"; export class Phase { - protected scene: BattleScene; - - constructor(scene: BattleScene) { - this.scene = scene; - } - start() { - if (this.scene.abilityBar.shown) { - this.scene.abilityBar.resetAutoHideTimer(); + if (globalScene.abilityBar.shown) { + globalScene.abilityBar.resetAutoHideTimer(); } } end() { - this.scene.shiftPhase(); + globalScene.shiftPhase(); } } diff --git a/src/phases/add-enemy-buff-modifier-phase.ts b/src/phases/add-enemy-buff-modifier-phase.ts index 451e6e2662c..f504fd0aaa2 100644 --- a/src/phases/add-enemy-buff-modifier-phase.ts +++ b/src/phases/add-enemy-buff-modifier-phase.ts @@ -1,26 +1,27 @@ -import BattleScene from "#app/battle-scene"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { regenerateModifierPoolThresholds, ModifierPoolType, getEnemyBuffModifierForWave } from "#app/modifier/modifier-type"; import { EnemyPersistentModifier } from "#app/modifier/modifier"; import { Phase } from "#app/phase"; +import { globalScene } from "#app/global-scene"; export class AddEnemyBuffModifierPhase extends Phase { - constructor(scene: BattleScene) { - super(scene); + constructor() { + super(); } start() { super.start(); - const waveIndex = this.scene.currentBattle.waveIndex; + const waveIndex = globalScene.currentBattle.waveIndex; const tier = !(waveIndex % 1000) ? ModifierTier.ULTRA : !(waveIndex % 250) ? ModifierTier.GREAT : ModifierTier.COMMON; - regenerateModifierPoolThresholds(this.scene.getEnemyParty(), ModifierPoolType.ENEMY_BUFF); + regenerateModifierPoolThresholds(globalScene.getEnemyParty(), ModifierPoolType.ENEMY_BUFF); const count = Math.ceil(waveIndex / 250); for (let i = 0; i < count; i++) { - this.scene.addEnemyModifier(getEnemyBuffModifierForWave(tier, this.scene.findModifiers(m => m instanceof EnemyPersistentModifier, false), this.scene), true, true); + globalScene.addEnemyModifier(getEnemyBuffModifierForWave(tier, globalScene.findModifiers(m => m instanceof EnemyPersistentModifier, false)), true, true); } - this.scene.updateModifiers(false, true).then(() => this.end()); + globalScene.updateModifiers(false, true); + this.end(); } } diff --git a/src/phases/attempt-capture-phase.ts b/src/phases/attempt-capture-phase.ts index de10d1eca45..77a8043aee9 100644 --- a/src/phases/attempt-capture-phase.ts +++ b/src/phases/attempt-capture-phase.ts @@ -1,30 +1,31 @@ import { BattlerIndex } from "#app/battle"; -import BattleScene from "#app/battle-scene"; import { PLAYER_PARTY_MAX_SIZE } from "#app/constants"; import { SubstituteTag } from "#app/data/battler-tags"; import { doPokeballBounceAnim, getPokeballAtlasKey, getPokeballCatchMultiplier, getPokeballTintColor, getCriticalCaptureChance } from "#app/data/pokeball"; import { getStatusEffectCatchRateMultiplier } from "#app/data/status-effect"; import { addPokeballCaptureStars, addPokeballOpenParticles } from "#app/field/anims"; -import { EnemyPokemon } from "#app/field/pokemon"; +import type { EnemyPokemon } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { PokemonHeldItemModifier } from "#app/modifier/modifier"; import { PokemonPhase } from "#app/phases/pokemon-phase"; import { VictoryPhase } from "#app/phases/victory-phase"; import { achvs } from "#app/system/achv"; -import { PartyOption, PartyUiMode } from "#app/ui/party-ui-handler"; +import type { PartyOption } from "#app/ui/party-ui-handler"; +import { PartyUiMode } from "#app/ui/party-ui-handler"; import { SummaryUiMode } from "#app/ui/summary-ui-handler"; import { Mode } from "#app/ui/ui"; -import { PokeballType } from "#enums/pokeball"; +import type { PokeballType } from "#enums/pokeball"; import { StatusEffect } from "#enums/status-effect"; import i18next from "i18next"; +import { globalScene } from "#app/global-scene"; export class AttemptCapturePhase extends PokemonPhase { private pokeballType: PokeballType; private pokeball: Phaser.GameObjects.Sprite; private originalY: number; - constructor(scene: BattleScene, targetIndex: integer, pokeballType: PokeballType) { - super(scene, BattlerIndex.ENEMY + targetIndex); + constructor(targetIndex: number, pokeballType: PokeballType) { + super(BattlerIndex.ENEMY + targetIndex); this.pokeballType = pokeballType; } @@ -43,7 +44,7 @@ export class AttemptCapturePhase extends PokemonPhase { substitute.sprite.setVisible(false); } - this.scene.pokeballCounts[this.pokeballType]--; + globalScene.pokeballCounts[this.pokeballType]--; this.originalY = pokemon.y; @@ -54,21 +55,21 @@ export class AttemptCapturePhase extends PokemonPhase { const statusMultiplier = pokemon.status ? getStatusEffectCatchRateMultiplier(pokemon.status.effect) : 1; const modifiedCatchRate = Math.round((((_3m - _2h) * catchRate * pokeballMultiplier) / _3m) * statusMultiplier); const shakeProbability = Math.round(65536 / Math.pow((255 / modifiedCatchRate), 0.1875)); // Formula taken from gen 6 - const criticalCaptureChance = getCriticalCaptureChance(this.scene, modifiedCatchRate); + const criticalCaptureChance = getCriticalCaptureChance(modifiedCatchRate); const isCritical = pokemon.randSeedInt(256) < criticalCaptureChance; const fpOffset = pokemon.getFieldPositionOffset(); const pokeballAtlasKey = getPokeballAtlasKey(this.pokeballType); - this.pokeball = this.scene.addFieldSprite(16, 80, "pb", pokeballAtlasKey); + this.pokeball = globalScene.addFieldSprite(16, 80, "pb", pokeballAtlasKey); this.pokeball.setOrigin(0.5, 0.625); - this.scene.field.add(this.pokeball); + globalScene.field.add(this.pokeball); - this.scene.playSound("se/pb_throw", isCritical ? { rate: 0.2 } : undefined); // Crit catch throws are higher pitched - this.scene.time.delayedCall(300, () => { - this.scene.field.moveBelow(this.pokeball as Phaser.GameObjects.GameObject, pokemon); + globalScene.playSound(isCritical ? "se/crit_throw" : "se/pb_throw"); + globalScene.time.delayedCall(300, () => { + globalScene.field.moveBelow(this.pokeball as Phaser.GameObjects.GameObject, pokemon); }); - this.scene.tweens.add({ + globalScene.tweens.add({ // Throw animation targets: this.pokeball, x: { value: 236 + fpOffset[0], ease: "Linear" }, @@ -77,13 +78,13 @@ export class AttemptCapturePhase extends PokemonPhase { onComplete: () => { // Ball opens this.pokeball.setTexture("pb", `${pokeballAtlasKey}_opening`); - this.scene.time.delayedCall(17, () => this.pokeball.setTexture("pb", `${pokeballAtlasKey}_open`)); - this.scene.playSound("se/pb_rel"); + globalScene.time.delayedCall(17, () => this.pokeball.setTexture("pb", `${pokeballAtlasKey}_open`)); + globalScene.playSound("se/pb_rel"); pokemon.tint(getPokeballTintColor(this.pokeballType)); - addPokeballOpenParticles(this.scene, this.pokeball.x, this.pokeball.y, this.pokeballType); + addPokeballOpenParticles(this.pokeball.x, this.pokeball.y, this.pokeballType); - this.scene.tweens.add({ + globalScene.tweens.add({ // Mon enters ball targets: pokemon, duration: 500, @@ -94,14 +95,14 @@ export class AttemptCapturePhase extends PokemonPhase { // Ball closes this.pokeball.setTexture("pb", `${pokeballAtlasKey}_opening`); pokemon.setVisible(false); - this.scene.playSound("se/pb_catch"); - this.scene.time.delayedCall(17, () => this.pokeball.setTexture("pb", `${pokeballAtlasKey}`)); + globalScene.playSound("se/pb_catch"); + globalScene.time.delayedCall(17, () => this.pokeball.setTexture("pb", `${pokeballAtlasKey}`)); const doShake = () => { // After the overall catch rate check, the game does 3 shake checks before confirming the catch. let shakeCount = 0; const pbX = this.pokeball.x; - const shakeCounter = this.scene.tweens.addCounter({ + const shakeCounter = globalScene.tweens.addCounter({ from: 0, to: 1, repeat: isCritical ? 2 : 4, // Critical captures only perform 1 shake check @@ -124,7 +125,7 @@ export class AttemptCapturePhase extends PokemonPhase { } else if (shakeCount++ < (isCritical ? 1 : 3)) { // Shake check (skip check for critical or guaranteed captures, but still play the sound) if (pokeballMultiplier === -1 || isCritical || modifiedCatchRate >= 255 || pokemon.randSeedInt(65536) < shakeProbability) { - this.scene.playSound("se/pb_move"); + globalScene.playSound("se/pb_move"); } else { shakeCounter.stop(); this.failCatch(shakeCount); @@ -134,21 +135,21 @@ export class AttemptCapturePhase extends PokemonPhase { shakeCounter.stop(); this.failCatch(shakeCount); } else { - this.scene.playSound("se/pb_lock"); - addPokeballCaptureStars(this.scene, this.pokeball); + globalScene.playSound("se/pb_lock"); + addPokeballCaptureStars(this.pokeball); - const pbTint = this.scene.add.sprite(this.pokeball.x, this.pokeball.y, "pb", "pb"); + const pbTint = globalScene.add.sprite(this.pokeball.x, this.pokeball.y, "pb", "pb"); pbTint.setOrigin(this.pokeball.originX, this.pokeball.originY); pbTint.setTintFill(0); pbTint.setAlpha(0); - this.scene.field.add(pbTint); - this.scene.tweens.add({ + globalScene.field.add(pbTint); + globalScene.tweens.add({ targets: pbTint, alpha: 0.375, duration: 200, easing: "Sine.easeOut", onComplete: () => { - this.scene.tweens.add({ + globalScene.tweens.add({ targets: pbTint, alpha: 0, duration: 200, @@ -166,17 +167,17 @@ export class AttemptCapturePhase extends PokemonPhase { }; // Ball bounces (handled in pokemon.ts) - this.scene.time.delayedCall(250, () => doPokeballBounceAnim(this.scene, this.pokeball, 16, 72, 350, doShake, isCritical)); + globalScene.time.delayedCall(250, () => doPokeballBounceAnim(this.pokeball, 16, 72, 350, doShake, isCritical)); } }); } }); } - failCatch(shakeCount: integer) { + failCatch(shakeCount: number) { const pokemon = this.getPokemon(); - this.scene.playSound("se/pb_rel"); + globalScene.playSound("se/pb_rel"); pokemon.setY(this.originalY); if (pokemon.status?.effect !== StatusEffect.SLEEP) { pokemon.cry(pokemon.getHpRatio() > 0.25 ? undefined : { rate: 0.85 }); @@ -192,16 +193,16 @@ export class AttemptCapturePhase extends PokemonPhase { const pokeballAtlasKey = getPokeballAtlasKey(this.pokeballType); this.pokeball.setTexture("pb", `${pokeballAtlasKey}_opening`); - this.scene.time.delayedCall(17, () => this.pokeball.setTexture("pb", `${pokeballAtlasKey}_open`)); + globalScene.time.delayedCall(17, () => this.pokeball.setTexture("pb", `${pokeballAtlasKey}_open`)); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: pokemon, duration: 250, ease: "Sine.easeOut", scale: 1 }); - this.scene.currentBattle.lastUsedPokeball = this.pokeballType; + globalScene.currentBattle.lastUsedPokeball = this.pokeballType; this.removePb(); this.end(); } @@ -212,48 +213,47 @@ export class AttemptCapturePhase extends PokemonPhase { const speciesForm = !pokemon.fusionSpecies ? pokemon.getSpeciesForm() : pokemon.getFusionSpeciesForm(); if (speciesForm.abilityHidden && (pokemon.fusionSpecies ? pokemon.fusionAbilityIndex : pokemon.abilityIndex) === speciesForm.getAbilityCount() - 1) { - this.scene.validateAchv(achvs.HIDDEN_ABILITY); + globalScene.validateAchv(achvs.HIDDEN_ABILITY); } if (pokemon.species.subLegendary) { - this.scene.validateAchv(achvs.CATCH_SUB_LEGENDARY); + globalScene.validateAchv(achvs.CATCH_SUB_LEGENDARY); } if (pokemon.species.legendary) { - this.scene.validateAchv(achvs.CATCH_LEGENDARY); + globalScene.validateAchv(achvs.CATCH_LEGENDARY); } if (pokemon.species.mythical) { - this.scene.validateAchv(achvs.CATCH_MYTHICAL); + globalScene.validateAchv(achvs.CATCH_MYTHICAL); } - this.scene.pokemonInfoContainer.show(pokemon, true); + globalScene.pokemonInfoContainer.show(pokemon, true); - this.scene.gameData.updateSpeciesDexIvs(pokemon.species.getRootSpeciesId(true), pokemon.ivs); + globalScene.gameData.updateSpeciesDexIvs(pokemon.species.getRootSpeciesId(true), pokemon.ivs); - this.scene.ui.showText(i18next.t("battle:pokemonCaught", { pokemonName: getPokemonNameWithAffix(pokemon) }), null, () => { + globalScene.ui.showText(i18next.t("battle:pokemonCaught", { pokemonName: getPokemonNameWithAffix(pokemon) }), null, () => { const end = () => { - this.scene.unshiftPhase(new VictoryPhase(this.scene, this.battlerIndex)); - this.scene.pokemonInfoContainer.hide(); + globalScene.unshiftPhase(new VictoryPhase(this.battlerIndex)); + globalScene.pokemonInfoContainer.hide(); this.removePb(); this.end(); }; const removePokemon = () => { - this.scene.addFaintedEnemyScore(pokemon); - this.scene.getPlayerField().filter(p => p.isActive(true)).forEach(playerPokemon => playerPokemon.removeTagsBySourceId(pokemon.id)); + globalScene.addFaintedEnemyScore(pokemon); pokemon.hp = 0; pokemon.trySetStatus(StatusEffect.FAINT); - this.scene.clearEnemyHeldItemModifiers(); - this.scene.field.remove(pokemon, true); + globalScene.clearEnemyHeldItemModifiers(); + pokemon.leaveField(true, true, true); }; const addToParty = (slotIndex?: number) => { const newPokemon = pokemon.addToParty(this.pokeballType, slotIndex); - const modifiers = this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier, false); - if (this.scene.getPlayerParty().filter(p => p.isShiny()).length === PLAYER_PARTY_MAX_SIZE) { - this.scene.validateAchv(achvs.SHINY_PARTY); + const modifiers = globalScene.findModifiers(m => m instanceof PokemonHeldItemModifier, false); + if (globalScene.getPlayerParty().filter(p => p.isShiny()).length === PLAYER_PARTY_MAX_SIZE) { + globalScene.validateAchv(achvs.SHINY_PARTY); } - Promise.all(modifiers.map(m => this.scene.addModifier(m, true))).then(() => { - this.scene.updateModifiers(true); + Promise.all(modifiers.map(m => globalScene.addModifier(m, true))).then(() => { + globalScene.updateModifiers(true); removePokemon(); if (newPokemon) { newPokemon.loadAssets().then(end); @@ -262,21 +262,21 @@ export class AttemptCapturePhase extends PokemonPhase { } }); }; - Promise.all([ pokemon.hideInfo(), this.scene.gameData.setPokemonCaught(pokemon) ]).then(() => { - if (this.scene.getPlayerParty().length === PLAYER_PARTY_MAX_SIZE) { + Promise.all([ pokemon.hideInfo(), globalScene.gameData.setPokemonCaught(pokemon) ]).then(() => { + if (globalScene.getPlayerParty().length === PLAYER_PARTY_MAX_SIZE) { const promptRelease = () => { - this.scene.ui.showText(i18next.t("battle:partyFull", { pokemonName: pokemon.getNameToRender() }), null, () => { - this.scene.pokemonInfoContainer.makeRoomForConfirmUi(1, true); - this.scene.ui.setMode(Mode.CONFIRM, () => { - const newPokemon = this.scene.addPlayerPokemon(pokemon.species, pokemon.level, pokemon.abilityIndex, pokemon.formIndex, pokemon.gender, pokemon.shiny, pokemon.variant, pokemon.ivs, pokemon.nature, pokemon); - this.scene.ui.setMode(Mode.SUMMARY, newPokemon, 0, SummaryUiMode.DEFAULT, () => { - this.scene.ui.setMode(Mode.MESSAGE).then(() => { + globalScene.ui.showText(i18next.t("battle:partyFull", { pokemonName: pokemon.getNameToRender() }), null, () => { + globalScene.pokemonInfoContainer.makeRoomForConfirmUi(1, true); + globalScene.ui.setMode(Mode.CONFIRM, () => { + const newPokemon = globalScene.addPlayerPokemon(pokemon.species, pokemon.level, pokemon.abilityIndex, pokemon.formIndex, pokemon.gender, pokemon.shiny, pokemon.variant, pokemon.ivs, pokemon.nature, pokemon); + globalScene.ui.setMode(Mode.SUMMARY, newPokemon, 0, SummaryUiMode.DEFAULT, () => { + globalScene.ui.setMode(Mode.MESSAGE).then(() => { promptRelease(); }); }, false); }, () => { - this.scene.ui.setMode(Mode.PARTY, PartyUiMode.RELEASE, this.fieldIndex, (slotIndex: integer, _option: PartyOption) => { - this.scene.ui.setMode(Mode.MESSAGE).then(() => { + globalScene.ui.setMode(Mode.PARTY, PartyUiMode.RELEASE, this.fieldIndex, (slotIndex: number, _option: PartyOption) => { + globalScene.ui.setMode(Mode.MESSAGE).then(() => { if (slotIndex < 6) { addToParty(slotIndex); } else { @@ -285,7 +285,7 @@ export class AttemptCapturePhase extends PokemonPhase { }); }); }, () => { - this.scene.ui.setMode(Mode.MESSAGE).then(() => { + globalScene.ui.setMode(Mode.MESSAGE).then(() => { removePokemon(); end(); }); @@ -301,7 +301,7 @@ export class AttemptCapturePhase extends PokemonPhase { } removePb() { - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.pokeball, duration: 250, delay: 250, diff --git a/src/phases/attempt-run-phase.ts b/src/phases/attempt-run-phase.ts index 109fc5b582d..72a108c1991 100644 --- a/src/phases/attempt-run-phase.ts +++ b/src/phases/attempt-run-phase.ts @@ -1,28 +1,29 @@ -import BattleScene from "#app/battle-scene"; import { applyAbAttrs, RunSuccessAbAttr } from "#app/data/ability"; import { Stat } from "#app/enums/stat"; import { StatusEffect } from "#app/enums/status-effect"; -import Pokemon, { PlayerPokemon, EnemyPokemon } from "#app/field/pokemon"; +import type { PlayerPokemon, EnemyPokemon } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; import i18next from "i18next"; import * as Utils from "#app/utils"; import { BattleEndPhase } from "./battle-end-phase"; import { NewBattlePhase } from "./new-battle-phase"; import { PokemonPhase } from "./pokemon-phase"; +import { globalScene } from "#app/global-scene"; export class AttemptRunPhase extends PokemonPhase { /** For testing purposes: this is to force the pokemon to fail and escape */ public forceFailEscape = false; - constructor(scene: BattleScene, fieldIndex: number) { - super(scene, fieldIndex); + constructor(fieldIndex: number) { + super(fieldIndex); } start() { super.start(); - const playerField = this.scene.getPlayerField(); - const enemyField = this.scene.getEnemyField(); + const playerField = globalScene.getPlayerField(); + const enemyField = globalScene.getEnemyField(); const playerPokemon = this.getPokemon(); @@ -33,18 +34,18 @@ export class AttemptRunPhase extends PokemonPhase { applyAbAttrs(RunSuccessAbAttr, playerPokemon, null, false, escapeChance); if (playerPokemon.randSeedInt(100) < escapeChance.value && !this.forceFailEscape) { - this.scene.playSound("se/flee"); - this.scene.queueMessage(i18next.t("battle:runAwaySuccess"), null, true, 500); + globalScene.playSound("se/flee"); + globalScene.queueMessage(i18next.t("battle:runAwaySuccess"), null, true, 500); - this.scene.tweens.add({ - targets: [ this.scene.arenaEnemy, enemyField ].flat(), + globalScene.tweens.add({ + targets: [ globalScene.arenaEnemy, enemyField ].flat(), alpha: 0, duration: 250, ease: "Sine.easeIn", onComplete: () => enemyField.forEach(enemyPokemon => enemyPokemon.destroy()) }); - this.scene.clearEnemyHeldItemModifiers(); + globalScene.clearEnemyHeldItemModifiers(); enemyField.forEach(enemyPokemon => { enemyPokemon.hideInfo().then(() => enemyPokemon.destroy()); @@ -52,11 +53,11 @@ export class AttemptRunPhase extends PokemonPhase { enemyPokemon.trySetStatus(StatusEffect.FAINT); }); - this.scene.pushPhase(new BattleEndPhase(this.scene, false)); - this.scene.pushPhase(new NewBattlePhase(this.scene)); + globalScene.pushPhase(new BattleEndPhase(false)); + globalScene.pushPhase(new NewBattlePhase()); } else { playerPokemon.turnData.failedRunAway = true; - this.scene.queueMessage(i18next.t("battle:runAwayCannotEscape"), null, true, 500); + globalScene.queueMessage(i18next.t("battle:runAwayCannotEscape"), null, true, 500); } this.end(); @@ -103,6 +104,6 @@ export class AttemptRunPhase extends PokemonPhase { const escapeSlope = (maxChance - minChance) / speedCap; // This will calculate the escape chance given all of the above and clamp it to the range of [`minChance`, `maxChance`] - escapeChance.value = Phaser.Math.Clamp(Math.round((escapeSlope * speedRatio) + minChance + (escapeBonus * this.scene.currentBattle.escapeAttempts++)), minChance, maxChance); + escapeChance.value = Phaser.Math.Clamp(Math.round((escapeSlope * speedRatio) + minChance + (escapeBonus * globalScene.currentBattle.escapeAttempts++)), minChance, maxChance); } } diff --git a/src/phases/battle-end-phase.ts b/src/phases/battle-end-phase.ts index 8926a2211e0..c0922b91809 100644 --- a/src/phases/battle-end-phase.ts +++ b/src/phases/battle-end-phase.ts @@ -1,4 +1,4 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { applyPostBattleAbAttrs, PostBattleAbAttr } from "#app/data/ability"; import { LapsingPersistentModifier, LapsingPokemonHeldItemModifier } from "#app/modifier/modifier"; import { BattlePhase } from "./battle-phase"; @@ -8,8 +8,8 @@ export class BattleEndPhase extends BattlePhase { /** If true, will increment battles won */ isVictory: boolean; - constructor(scene: BattleScene, isVictory: boolean) { - super(scene); + constructor(isVictory: boolean) { + super(); this.isVictory = isVictory; } @@ -17,52 +17,53 @@ export class BattleEndPhase extends BattlePhase { start() { super.start(); - this.scene.gameData.gameStats.battles++; - if (this.scene.gameMode.isEndless && this.scene.currentBattle.waveIndex + 1 > this.scene.gameData.gameStats.highestEndlessWave) { - this.scene.gameData.gameStats.highestEndlessWave = this.scene.currentBattle.waveIndex + 1; + globalScene.gameData.gameStats.battles++; + if (globalScene.gameMode.isEndless && globalScene.currentBattle.waveIndex + 1 > globalScene.gameData.gameStats.highestEndlessWave) { + globalScene.gameData.gameStats.highestEndlessWave = globalScene.currentBattle.waveIndex + 1; } if (this.isVictory) { - this.scene.currentBattle.addBattleScore(this.scene); + globalScene.currentBattle.addBattleScore(); - if (this.scene.currentBattle.trainer) { - this.scene.gameData.gameStats.trainersDefeated++; + if (globalScene.currentBattle.trainer) { + globalScene.gameData.gameStats.trainersDefeated++; } } // Endless graceful end - if (this.scene.gameMode.isEndless && this.scene.currentBattle.waveIndex >= 5850) { - this.scene.clearPhaseQueue(); - this.scene.unshiftPhase(new GameOverPhase(this.scene, true)); + if (globalScene.gameMode.isEndless && globalScene.currentBattle.waveIndex >= 5850) { + globalScene.clearPhaseQueue(); + globalScene.unshiftPhase(new GameOverPhase(true)); } - for (const pokemon of this.scene.getField()) { + for (const pokemon of globalScene.getField()) { if (pokemon && pokemon.battleSummonData) { pokemon.battleSummonData.waveTurnCount = 1; } } - for (const pokemon of this.scene.getPokemonAllowedInBattle()) { + for (const pokemon of globalScene.getPokemonAllowedInBattle()) { applyPostBattleAbAttrs(PostBattleAbAttr, pokemon, false, this.isVictory); } - if (this.scene.currentBattle.moneyScattered) { - this.scene.currentBattle.pickUpScatteredMoney(this.scene); + if (globalScene.currentBattle.moneyScattered) { + globalScene.currentBattle.pickUpScatteredMoney(); } - this.scene.clearEnemyHeldItemModifiers(); + globalScene.clearEnemyHeldItemModifiers(); - const lapsingModifiers = this.scene.findModifiers(m => m instanceof LapsingPersistentModifier || m instanceof LapsingPokemonHeldItemModifier) as (LapsingPersistentModifier | LapsingPokemonHeldItemModifier)[]; + const lapsingModifiers = globalScene.findModifiers(m => m instanceof LapsingPersistentModifier || m instanceof LapsingPokemonHeldItemModifier) as (LapsingPersistentModifier | LapsingPokemonHeldItemModifier)[]; for (const m of lapsingModifiers) { const args: any[] = []; if (m instanceof LapsingPokemonHeldItemModifier) { - args.push(this.scene.getPokemonById(m.pokemonId)); + args.push(globalScene.getPokemonById(m.pokemonId)); } if (!m.lapse(...args)) { - this.scene.removeModifier(m); + globalScene.removeModifier(m); } } - this.scene.updateModifiers().then(() => this.end()); + globalScene.updateModifiers(); + this.end(); } } diff --git a/src/phases/battle-phase.ts b/src/phases/battle-phase.ts index 11807fdc714..4fc826b7957 100644 --- a/src/phases/battle-phase.ts +++ b/src/phases/battle-phase.ts @@ -1,15 +1,15 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { TrainerSlot } from "#app/data/trainer-config"; import { Phase } from "#app/phase"; export class BattlePhase extends Phase { - constructor(scene: BattleScene) { - super(scene); + constructor() { + super(); } showEnemyTrainer(trainerSlot: TrainerSlot = TrainerSlot.NONE): void { - const sprites = this.scene.currentBattle.trainer?.getSprites()!; // TODO: is this bang correct? - const tintSprites = this.scene.currentBattle.trainer?.getTintSprites()!; // TODO: is this bang correct? + const sprites = globalScene.currentBattle.trainer?.getSprites()!; // TODO: is this bang correct? + const tintSprites = globalScene.currentBattle.trainer?.getTintSprites()!; // TODO: is this bang correct? for (let i = 0; i < sprites.length; i++) { const visible = !trainerSlot || !i === (trainerSlot === TrainerSlot.TRAINER) || sprites.length < 2; [ sprites[i], tintSprites[i] ].map(sprite => { @@ -24,8 +24,8 @@ export class BattlePhase extends Phase { sprites[i].clearTint(); tintSprites[i].clearTint(); } - this.scene.tweens.add({ - targets: this.scene.currentBattle.trainer, + globalScene.tweens.add({ + targets: globalScene.currentBattle.trainer, x: "-=16", y: "+=16", alpha: 1, @@ -35,8 +35,8 @@ export class BattlePhase extends Phase { } hideEnemyTrainer(): void { - this.scene.tweens.add({ - targets: this.scene.currentBattle.trainer, + globalScene.tweens.add({ + targets: globalScene.currentBattle.trainer, x: "+=16", y: "-=16", alpha: 0, diff --git a/src/phases/berry-phase.ts b/src/phases/berry-phase.ts index 5c33ae4b343..dd56e8b37d7 100644 --- a/src/phases/berry-phase.ts +++ b/src/phases/berry-phase.ts @@ -7,6 +7,7 @@ import i18next from "i18next"; import * as Utils from "#app/utils"; import { FieldPhase } from "./field-phase"; import { CommonAnimPhase } from "./common-anim-phase"; +import { globalScene } from "#app/global-scene"; /** The phase after attacks where the pokemon eat berries */ export class BerryPhase extends FieldPhase { @@ -14,7 +15,7 @@ export class BerryPhase extends FieldPhase { super.start(); this.executeForAll((pokemon) => { - const hasUsableBerry = !!this.scene.findModifier((m) => { + const hasUsableBerry = !!globalScene.findModifier((m) => { return m instanceof BerryModifier && m.shouldApply(pokemon); }, pokemon.isPlayer()); @@ -23,21 +24,21 @@ export class BerryPhase extends FieldPhase { pokemon.getOpponents().map((opp) => applyAbAttrs(PreventBerryUseAbAttr, opp, cancelled)); if (cancelled.value) { - pokemon.scene.queueMessage(i18next.t("abilityTriggers:preventBerryUse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + globalScene.queueMessage(i18next.t("abilityTriggers:preventBerryUse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } else { - this.scene.unshiftPhase( - new CommonAnimPhase(this.scene, pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.USE_ITEM) + globalScene.unshiftPhase( + new CommonAnimPhase(pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.USE_ITEM) ); - for (const berryModifier of this.scene.applyModifiers(BerryModifier, pokemon.isPlayer(), pokemon)) { + for (const berryModifier of globalScene.applyModifiers(BerryModifier, pokemon.isPlayer(), pokemon)) { if (berryModifier.consumed) { berryModifier.consumed = false; pokemon.loseHeldItem(berryModifier); } - this.scene.eventTarget.dispatchEvent(new BerryUsedEvent(berryModifier)); // Announce a berry was used + globalScene.eventTarget.dispatchEvent(new BerryUsedEvent(berryModifier)); // Announce a berry was used } - this.scene.updateModifiers(pokemon.isPlayer()); + globalScene.updateModifiers(pokemon.isPlayer()); applyAbAttrs(HealFromBerryUseAbAttr, pokemon, new Utils.BooleanHolder(false)); } diff --git a/src/phases/check-status-effect-phase.ts b/src/phases/check-status-effect-phase.ts index 44918b54966..683c1ea1cd2 100644 --- a/src/phases/check-status-effect-phase.ts +++ b/src/phases/check-status-effect-phase.ts @@ -1,21 +1,20 @@ import { PostTurnStatusEffectPhase } from "#app/phases/post-turn-status-effect-phase"; import { Phase } from "#app/phase"; -import { BattlerIndex } from "#app/battle"; -import BattleScene from "#app/battle-scene"; +import type { BattlerIndex } from "#app/battle"; +import { globalScene } from "#app/global-scene"; export class CheckStatusEffectPhase extends Phase { private order : BattlerIndex[]; - constructor(scene : BattleScene, order : BattlerIndex[]) { - super(scene); - this.scene = scene; + constructor(order : BattlerIndex[]) { + super(); this.order = order; } start() { - const field = this.scene.getField(); + const field = globalScene.getField(); for (const o of this.order) { if (field[o].status && field[o].status.isPostTurn()) { - this.scene.unshiftPhase(new PostTurnStatusEffectPhase(this.scene, o)); + globalScene.unshiftPhase(new PostTurnStatusEffectPhase(o)); } } this.end(); diff --git a/src/phases/check-switch-phase.ts b/src/phases/check-switch-phase.ts index 18b999ed210..ea16e91b990 100644 --- a/src/phases/check-switch-phase.ts +++ b/src/phases/check-switch-phase.ts @@ -1,4 +1,4 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { BattleStyle } from "#app/enums/battle-style"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { getPokemonNameWithAffix } from "#app/messages"; @@ -10,11 +10,11 @@ import { SwitchPhase } from "./switch-phase"; import { SwitchType } from "#enums/switch-type"; export class CheckSwitchPhase extends BattlePhase { - protected fieldIndex: integer; + protected fieldIndex: number; protected useName: boolean; - constructor(scene: BattleScene, fieldIndex: integer, useName: boolean) { - super(scene); + constructor(fieldIndex: number, useName: boolean) { + super(); this.fieldIndex = fieldIndex; this.useName = useName; @@ -23,40 +23,40 @@ export class CheckSwitchPhase extends BattlePhase { start() { super.start(); - const pokemon = this.scene.getPlayerField()[this.fieldIndex]; + const pokemon = globalScene.getPlayerField()[this.fieldIndex]; // End this phase early... // ...if the user is playing in Set Mode - if (this.scene.battleStyle === BattleStyle.SET) { + if (globalScene.battleStyle === BattleStyle.SET) { return super.end(); } // ...if the checked Pokemon is somehow not on the field - if (this.scene.field.getAll().indexOf(pokemon) === -1) { - this.scene.unshiftPhase(new SummonMissingPhase(this.scene, this.fieldIndex)); + if (globalScene.field.getAll().indexOf(pokemon) === -1) { + globalScene.unshiftPhase(new SummonMissingPhase(this.fieldIndex)); return super.end(); } // ...if there are no other allowed Pokemon in the player's party to switch with - if (!this.scene.getPlayerParty().slice(1).filter(p => p.isActive()).length) { + if (!globalScene.getPlayerParty().slice(1).filter(p => p.isActive()).length) { return super.end(); } // ...or if any player Pokemon has an effect that prevents the checked Pokemon from switching if (pokemon.getTag(BattlerTagType.FRENZY) || pokemon.isTrapped() - || this.scene.getPlayerField().some(p => p.getTag(BattlerTagType.COMMANDED))) { + || globalScene.getPlayerField().some(p => p.getTag(BattlerTagType.COMMANDED))) { return super.end(); } - this.scene.ui.showText(i18next.t("battle:switchQuestion", { pokemonName: this.useName ? getPokemonNameWithAffix(pokemon) : i18next.t("battle:pokemon") }), null, () => { - this.scene.ui.setMode(Mode.CONFIRM, () => { - this.scene.ui.setMode(Mode.MESSAGE); - this.scene.unshiftPhase(new SwitchPhase(this.scene, SwitchType.INITIAL_SWITCH, this.fieldIndex, false, true)); + globalScene.ui.showText(i18next.t("battle:switchQuestion", { pokemonName: this.useName ? getPokemonNameWithAffix(pokemon) : i18next.t("battle:pokemon") }), null, () => { + globalScene.ui.setMode(Mode.CONFIRM, () => { + globalScene.ui.setMode(Mode.MESSAGE); + globalScene.unshiftPhase(new SwitchPhase(SwitchType.INITIAL_SWITCH, this.fieldIndex, false, true)); this.end(); }, () => { - this.scene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(Mode.MESSAGE); this.end(); }); }); diff --git a/src/phases/command-phase.ts b/src/phases/command-phase.ts index eab76282908..411022a84b4 100644 --- a/src/phases/command-phase.ts +++ b/src/phases/command-phase.ts @@ -1,14 +1,18 @@ -import BattleScene from "#app/battle-scene"; -import { TurnCommand, BattleType } from "#app/battle"; -import { TrappedTag, EncoreTag } from "#app/data/battler-tags"; -import { MoveTargetSet, getMoveTargets } from "#app/data/move"; +import { globalScene } from "#app/global-scene"; +import type { TurnCommand } from "#app/battle"; +import { BattleType } from "#app/battle"; +import type { EncoreTag } from "#app/data/battler-tags"; +import { TrappedTag } from "#app/data/battler-tags"; +import type { MoveTargetSet } from "#app/data/move"; +import { getMoveTargets } from "#app/data/move"; import { speciesStarterCosts } from "#app/data/balance/starters"; import { Abilities } from "#app/enums/abilities"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { Biome } from "#app/enums/biome"; import { Moves } from "#app/enums/moves"; import { PokeballType } from "#enums/pokeball"; -import { FieldPosition, PlayerPokemon } from "#app/field/pokemon"; +import type { PlayerPokemon, TurnMove } from "#app/field/pokemon"; +import { FieldPosition } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { Command } from "#app/ui/command-ui-handler"; import { Mode } from "#app/ui/ui"; @@ -21,10 +25,10 @@ import { ArenaTagSide } from "#app/data/arena-tag"; import { ArenaTagType } from "#app/enums/arena-tag-type"; export class CommandPhase extends FieldPhase { - protected fieldIndex: integer; + protected fieldIndex: number; - constructor(scene: BattleScene, fieldIndex: integer) { - super(scene); + constructor(fieldIndex: number) { + super(); this.fieldIndex = fieldIndex; } @@ -32,11 +36,17 @@ export class CommandPhase extends FieldPhase { start() { super.start(); - this.scene.updateGameInfo(); + globalScene.updateGameInfo(); + + const commandUiHandler = globalScene.ui.handlers[Mode.COMMAND]; + + // If one of these conditions is true, we always reset the cursor to Command.FIGHT + const cursorResetEvent = globalScene.currentBattle.battleType === BattleType.MYSTERY_ENCOUNTER || + globalScene.currentBattle.battleType === BattleType.TRAINER || + globalScene.arena.biomeType === Biome.END; - const commandUiHandler = this.scene.ui.handlers[Mode.COMMAND]; if (commandUiHandler) { - if (this.scene.currentBattle.turn === 1 || commandUiHandler.getCursor() === Command.POKEMON) { + if ((globalScene.currentBattle.turn === 1 && (!globalScene.commandCursorMemory || cursorResetEvent)) || commandUiHandler.getCursor() === Command.POKEMON) { commandUiHandler.setCursor(Command.FIGHT); } else { commandUiHandler.setCursor(commandUiHandler.getCursor()); @@ -46,19 +56,19 @@ export class CommandPhase extends FieldPhase { if (this.fieldIndex) { // If we somehow are attempting to check the right pokemon but there's only one pokemon out // Switch back to the center pokemon. This can happen rarely in double battles with mid turn switching - if (this.scene.getPlayerField().filter(p => p.isActive()).length === 1) { + if (globalScene.getPlayerField().filter(p => p.isActive()).length === 1) { this.fieldIndex = FieldPosition.CENTER; } else { - const allyCommand = this.scene.currentBattle.turnCommands[this.fieldIndex - 1]; + const allyCommand = globalScene.currentBattle.turnCommands[this.fieldIndex - 1]; if (allyCommand?.command === Command.BALL || allyCommand?.command === Command.RUN) { - this.scene.currentBattle.turnCommands[this.fieldIndex] = { command: allyCommand?.command, skip: true }; + globalScene.currentBattle.turnCommands[this.fieldIndex] = { command: allyCommand?.command, skip: true }; } } } // If the Pokemon has applied Commander's effects to its ally, skip this command - if (this.scene.currentBattle?.double && this.getPokemon().getAlly()?.getTag(BattlerTagType.COMMANDED)?.getSourcePokemon(this.scene) === this.getPokemon()) { - this.scene.currentBattle.turnCommands[this.fieldIndex] = { command: Command.FIGHT, move: { move: Moves.NONE, targets: []}, skip: true }; + if (globalScene.currentBattle?.double && this.getPokemon().getAlly()?.getTag(BattlerTagType.COMMANDED)?.getSourcePokemon() === this.getPokemon()) { + globalScene.currentBattle.turnCommands[this.fieldIndex] = { command: Command.FIGHT, move: { move: Moves.NONE, targets: []}, skip: true }; } // Checks if the Pokemon is under the effects of Encore. If so, Encore can end early if the encored move has no more PP. @@ -67,74 +77,89 @@ export class CommandPhase extends FieldPhase { this.getPokemon().lapseTag(BattlerTagType.ENCORE); } - if (this.scene.currentBattle.turnCommands[this.fieldIndex]?.skip) { + if (globalScene.currentBattle.turnCommands[this.fieldIndex]?.skip) { return this.end(); } - const playerPokemon = this.scene.getPlayerField()[this.fieldIndex]; + const playerPokemon = globalScene.getPlayerField()[this.fieldIndex]; const moveQueue = playerPokemon.getMoveQueue(); while (moveQueue.length && moveQueue[0] - && moveQueue[0].move && (!playerPokemon.getMoveset().find(m => m?.moveId === moveQueue[0].move) + && moveQueue[0].move && !moveQueue[0].virtual && (!playerPokemon.getMoveset().find(m => m?.moveId === moveQueue[0].move) || !playerPokemon.getMoveset()[playerPokemon.getMoveset().findIndex(m => m?.moveId === moveQueue[0].move)]!.isUsable(playerPokemon, moveQueue[0].ignorePP))) { // TODO: is the bang correct? moveQueue.shift(); } - if (moveQueue.length) { + if (moveQueue.length > 0) { const queuedMove = moveQueue[0]; if (!queuedMove.move) { - this.handleCommand(Command.FIGHT, -1, false); + this.handleCommand(Command.FIGHT, -1); } else { const moveIndex = playerPokemon.getMoveset().findIndex(m => m?.moveId === queuedMove.move); - if (moveIndex > -1 && playerPokemon.getMoveset()[moveIndex]!.isUsable(playerPokemon, queuedMove.ignorePP)) { // TODO: is the bang correct? - this.handleCommand(Command.FIGHT, moveIndex, queuedMove.ignorePP, { targets: queuedMove.targets, multiple: queuedMove.targets.length > 1 }); + if ((moveIndex > -1 && playerPokemon.getMoveset()[moveIndex]!.isUsable(playerPokemon, queuedMove.ignorePP)) || queuedMove.virtual) { // TODO: is the bang correct? + this.handleCommand(Command.FIGHT, moveIndex, queuedMove.ignorePP, queuedMove); } else { - this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); } } } else { - if (this.scene.currentBattle.isBattleMysteryEncounter() && this.scene.currentBattle.mysteryEncounter?.skipToFightInput) { - this.scene.ui.clearText(); - this.scene.ui.setMode(Mode.FIGHT, this.fieldIndex); + if (globalScene.currentBattle.isBattleMysteryEncounter() && globalScene.currentBattle.mysteryEncounter?.skipToFightInput) { + globalScene.ui.clearText(); + globalScene.ui.setMode(Mode.FIGHT, this.fieldIndex); } else { - this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); } } } - handleCommand(command: Command, cursor: integer, ...args: any[]): boolean { - const playerPokemon = this.scene.getPlayerField()[this.fieldIndex]; + handleCommand(command: Command, cursor: number, ...args: any[]): boolean { + const playerPokemon = globalScene.getPlayerField()[this.fieldIndex]; let success: boolean = false; switch (command) { + case Command.TERA: case Command.FIGHT: let useStruggle = false; + const turnMove: TurnMove | undefined = (args.length === 2 ? (args[1] as TurnMove) : undefined); if (cursor === -1 || playerPokemon.trySelectMove(cursor, args[0] as boolean) || (useStruggle = cursor > -1 && !playerPokemon.getMoveset().filter(m => m?.isUsable(playerPokemon)).length)) { - const moveId = !useStruggle ? cursor > -1 ? playerPokemon.getMoveset()[cursor]!.moveId : Moves.NONE : Moves.STRUGGLE; // TODO: is the bang correct? + + let moveId: Moves; + if (useStruggle) { + moveId = Moves.STRUGGLE; + } else if (turnMove !== undefined) { + moveId = turnMove.move; + } else if (cursor > -1) { + moveId = playerPokemon.getMoveset()[cursor]!.moveId; + } else { + moveId = Moves.NONE; + } + const turnCommand: TurnCommand = { command: Command.FIGHT, cursor: cursor, move: { move: moveId, targets: [], ignorePP: args[0] }, args: args }; - const moveTargets: MoveTargetSet = args.length < 3 ? getMoveTargets(playerPokemon, moveId) : args[2]; + const preTurnCommand: TurnCommand = { command: command, targets: [ this.fieldIndex ], skip: command === Command.FIGHT }; + const moveTargets: MoveTargetSet = turnMove === undefined ? getMoveTargets(playerPokemon, moveId) : { targets: turnMove.targets, multiple: turnMove.targets.length > 1 }; if (!moveId) { turnCommand.targets = [ this.fieldIndex ]; } console.log(moveTargets, getPokemonNameWithAffix(playerPokemon)); if (moveTargets.targets.length > 1 && moveTargets.multiple) { - this.scene.unshiftPhase(new SelectTargetPhase(this.scene, this.fieldIndex)); + globalScene.unshiftPhase(new SelectTargetPhase(this.fieldIndex)); } if (moveTargets.targets.length <= 1 || moveTargets.multiple) { turnCommand.move!.targets = moveTargets.targets; //TODO: is the bang correct here? } else if (playerPokemon.getTag(BattlerTagType.CHARGING) && playerPokemon.getMoveQueue().length >= 1) { turnCommand.move!.targets = playerPokemon.getMoveQueue()[0].targets; //TODO: is the bang correct here? } else { - this.scene.unshiftPhase(new SelectTargetPhase(this.scene, this.fieldIndex)); + globalScene.unshiftPhase(new SelectTargetPhase(this.fieldIndex)); } - this.scene.currentBattle.turnCommands[this.fieldIndex] = turnCommand; + globalScene.currentBattle.preTurnCommands[this.fieldIndex] = preTurnCommand; + globalScene.currentBattle.turnCommands[this.fieldIndex] = turnCommand; success = true; } else if (cursor < playerPokemon.getMoveset().length) { const move = playerPokemon.getMoveset()[cursor]!; //TODO: is this bang correct? - this.scene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(Mode.MESSAGE); // Decides between a Disabled, Not Implemented, or No PP translation message const errorMessage = @@ -143,58 +168,58 @@ export class CommandPhase extends FieldPhase { : move.getName().endsWith(" (N)") ? "battle:moveNotImplemented" : "battle:moveNoPP"; const moveName = move.getName().replace(" (N)", ""); // Trims off the indicator - this.scene.ui.showText(i18next.t(errorMessage, { moveName: moveName }), null, () => { - this.scene.ui.clearText(); - this.scene.ui.setMode(Mode.FIGHT, this.fieldIndex); + globalScene.ui.showText(i18next.t(errorMessage, { moveName: moveName }), null, () => { + globalScene.ui.clearText(); + globalScene.ui.setMode(Mode.FIGHT, this.fieldIndex); }, null, true); } break; case Command.BALL: - const notInDex = (this.scene.getEnemyField().filter(p => p.isActive(true)).some(p => !p.scene.gameData.dexData[p.species.speciesId].caughtAttr) && this.scene.gameData.getStarterCount(d => !!d.caughtAttr) < Object.keys(speciesStarterCosts).length - 1); - if (this.scene.arena.biomeType === Biome.END && (!this.scene.gameMode.isClassic || this.scene.gameMode.isFreshStartChallenge() || notInDex )) { - this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); - this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(i18next.t("battle:noPokeballForce"), null, () => { - this.scene.ui.showText("", 0); - this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); + const notInDex = (globalScene.getEnemyField().filter(p => p.isActive(true)).some(p => !globalScene.gameData.dexData[p.species.speciesId].caughtAttr) && globalScene.gameData.getStarterCount(d => !!d.caughtAttr) < Object.keys(speciesStarterCosts).length - 1); + if (globalScene.arena.biomeType === Biome.END && (!globalScene.gameMode.isClassic || globalScene.gameMode.isFreshStartChallenge() || notInDex )) { + globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.showText(i18next.t("battle:noPokeballForce"), null, () => { + globalScene.ui.showText("", 0); + globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); }, null, true); - } else if (this.scene.currentBattle.battleType === BattleType.TRAINER) { - this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); - this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(i18next.t("battle:noPokeballTrainer"), null, () => { - this.scene.ui.showText("", 0); - this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); + } else if (globalScene.currentBattle.battleType === BattleType.TRAINER) { + globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.showText(i18next.t("battle:noPokeballTrainer"), null, () => { + globalScene.ui.showText("", 0); + globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); }, null, true); - } else if (this.scene.currentBattle.isBattleMysteryEncounter() && !this.scene.currentBattle.mysteryEncounter!.catchAllowed) { - this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); - this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(i18next.t("battle:noPokeballMysteryEncounter"), null, () => { - this.scene.ui.showText("", 0); - this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); + } else if (globalScene.currentBattle.isBattleMysteryEncounter() && !globalScene.currentBattle.mysteryEncounter!.catchAllowed) { + globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.showText(i18next.t("battle:noPokeballMysteryEncounter"), null, () => { + globalScene.ui.showText("", 0); + globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); }, null, true); } else { - const targets = this.scene.getEnemyField().filter(p => p.isActive(true)).map(p => p.getBattlerIndex()); + const targets = globalScene.getEnemyField().filter(p => p.isActive(true)).map(p => p.getBattlerIndex()); if (targets.length > 1) { - this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); - this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(i18next.t("battle:noPokeballMulti"), null, () => { - this.scene.ui.showText("", 0); - this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.showText(i18next.t("battle:noPokeballMulti"), null, () => { + globalScene.ui.showText("", 0); + globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); }, null, true); } else if (cursor < 5) { - const targetPokemon = this.scene.getEnemyField().find(p => p.isActive(true)); + const targetPokemon = globalScene.getEnemyField().find(p => p.isActive(true)); if (targetPokemon?.isBoss() && targetPokemon?.bossSegmentIndex >= 1 && !targetPokemon?.hasAbility(Abilities.WONDER_GUARD, false, true) && cursor < PokeballType.MASTER_BALL) { - this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); - this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(i18next.t("battle:noPokeballStrong"), null, () => { - this.scene.ui.showText("", 0); - this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.showText(i18next.t("battle:noPokeballStrong"), null, () => { + globalScene.ui.showText("", 0); + globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); }, null, true); } else { - this.scene.currentBattle.turnCommands[this.fieldIndex] = { command: Command.BALL, cursor: cursor }; - this.scene.currentBattle.turnCommands[this.fieldIndex]!.targets = targets; + globalScene.currentBattle.turnCommands[this.fieldIndex] = { command: Command.BALL, cursor: cursor }; + globalScene.currentBattle.turnCommands[this.fieldIndex]!.targets = targets; if (this.fieldIndex) { - this.scene.currentBattle.turnCommands[this.fieldIndex - 1]!.skip = true; + globalScene.currentBattle.turnCommands[this.fieldIndex - 1]!.skip = true; } success = true; } @@ -204,21 +229,21 @@ export class CommandPhase extends FieldPhase { case Command.POKEMON: case Command.RUN: const isSwitch = command === Command.POKEMON; - const { currentBattle, arena } = this.scene; + const { currentBattle, arena } = globalScene; const mysteryEncounterFleeAllowed = currentBattle.mysteryEncounter?.fleeAllowed; if (!isSwitch && (arena.biomeType === Biome.END || (!isNullOrUndefined(mysteryEncounterFleeAllowed) && !mysteryEncounterFleeAllowed))) { - this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); - this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(i18next.t("battle:noEscapeForce"), null, () => { - this.scene.ui.showText("", 0); - this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.showText(i18next.t("battle:noEscapeForce"), null, () => { + globalScene.ui.showText("", 0); + globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); }, null, true); } else if (!isSwitch && (currentBattle.battleType === BattleType.TRAINER || currentBattle.mysteryEncounter?.encounterMode === MysteryEncounterMode.TRAINER_BATTLE)) { - this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); - this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(i18next.t("battle:noEscapeTrainer"), null, () => { - this.scene.ui.showText("", 0); - this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.showText(i18next.t("battle:noEscapeTrainer"), null, () => { + globalScene.ui.showText("", 0); + globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); }, null, true); } else { const batonPass = isSwitch && args[0] as boolean; @@ -233,38 +258,38 @@ export class CommandPhase extends FieldPhase { } } else if (trappedAbMessages.length > 0) { if (!isSwitch) { - this.scene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(Mode.MESSAGE); } - this.scene.ui.showText(trappedAbMessages[0], null, () => { - this.scene.ui.showText("", 0); + globalScene.ui.showText(trappedAbMessages[0], null, () => { + globalScene.ui.showText("", 0); if (!isSwitch) { - this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); } }, null, true); } else { const trapTag = playerPokemon.getTag(TrappedTag); - const fairyLockTag = playerPokemon.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaTagSide.PLAYER); + const fairyLockTag = globalScene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaTagSide.PLAYER); if (!trapTag && !fairyLockTag) { i18next.t(`battle:noEscape${isSwitch ? "Switch" : "Flee"}`); break; } if (!isSwitch) { - this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); - this.scene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(Mode.MESSAGE); } const showNoEscapeText = (tag: any) => { - this.scene.ui.showText( + globalScene.ui.showText( i18next.t("battle:noEscapePokemon", { - pokemonName: tag.sourceId && this.scene.getPokemonById(tag.sourceId) ? getPokemonNameWithAffix(this.scene.getPokemonById(tag.sourceId)!) : "", + pokemonName: tag.sourceId && globalScene.getPokemonById(tag.sourceId) ? getPokemonNameWithAffix(globalScene.getPokemonById(tag.sourceId)!) : "", moveName: tag.getMoveName(), escapeVerb: isSwitch ? i18next.t("battle:escapeVerbSwitch") : i18next.t("battle:escapeVerbFlee") }), null, () => { - this.scene.ui.showText("", 0); + globalScene.ui.showText("", 0); if (!isSwitch) { - this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); } }, null, @@ -291,21 +316,21 @@ export class CommandPhase extends FieldPhase { cancel() { if (this.fieldIndex) { - this.scene.unshiftPhase(new CommandPhase(this.scene, 0)); - this.scene.unshiftPhase(new CommandPhase(this.scene, 1)); + globalScene.unshiftPhase(new CommandPhase(0)); + globalScene.unshiftPhase(new CommandPhase(1)); this.end(); } } - getFieldIndex(): integer { + getFieldIndex(): number { return this.fieldIndex; } getPokemon(): PlayerPokemon { - return this.scene.getPlayerField()[this.fieldIndex]; + return globalScene.getPlayerField()[this.fieldIndex]; } end() { - this.scene.ui.setMode(Mode.MESSAGE).then(() => super.end()); + globalScene.ui.setMode(Mode.MESSAGE).then(() => super.end()); } } diff --git a/src/phases/common-anim-phase.ts b/src/phases/common-anim-phase.ts index c4071488eef..9ca74ed5a77 100644 --- a/src/phases/common-anim-phase.ts +++ b/src/phases/common-anim-phase.ts @@ -1,15 +1,16 @@ -import BattleScene from "#app/battle-scene"; -import { BattlerIndex } from "#app/battle"; -import { CommonAnim, CommonBattleAnim } from "#app/data/battle-anims"; +import type { BattlerIndex } from "#app/battle"; +import { globalScene } from "#app/global-scene"; +import type { CommonAnim } from "#app/data/battle-anims"; +import { CommonBattleAnim } from "#app/data/battle-anims"; import { PokemonPhase } from "./pokemon-phase"; export class CommonAnimPhase extends PokemonPhase { private anim: CommonAnim | null; - private targetIndex: integer | undefined; + private targetIndex: number | undefined; private playOnEmptyField: boolean; - constructor(scene: BattleScene, battlerIndex?: BattlerIndex, targetIndex?: BattlerIndex | undefined, anim?: CommonAnim, playOnEmptyField: boolean = false) { - super(scene, battlerIndex); + constructor(battlerIndex?: BattlerIndex, targetIndex?: BattlerIndex, anim?: CommonAnim, playOnEmptyField: boolean = false) { + super(battlerIndex); this.anim = anim!; // TODO: is this bang correct? this.targetIndex = targetIndex; @@ -21,8 +22,8 @@ export class CommonAnimPhase extends PokemonPhase { } start() { - const target = this.targetIndex !== undefined ? (this.player ? this.scene.getEnemyField() : this.scene.getPlayerField())[this.targetIndex] : this.getPokemon(); - new CommonBattleAnim(this.anim, this.getPokemon(), target).play(this.scene, false, () => { + const target = this.targetIndex !== undefined ? (this.player ? globalScene.getEnemyField() : globalScene.getPlayerField())[this.targetIndex] : this.getPokemon(); + new CommonBattleAnim(this.anim, this.getPokemon(), target).play(false, () => { this.end(); }); } diff --git a/src/phases/damage-anim-phase.ts b/src/phases/damage-anim-phase.ts index 42f0e1ba845..a21d9d4622a 100644 --- a/src/phases/damage-anim-phase.ts +++ b/src/phases/damage-anim-phase.ts @@ -1,4 +1,4 @@ -import type BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { type BattlerIndex } from "#app/battle"; import { BattleSpec } from "#enums/battle-spec"; import { type DamageResult, HitResult } from "#app/field/pokemon"; @@ -6,12 +6,12 @@ import { fixedInt } from "#app/utils"; import { PokemonPhase } from "#app/phases/pokemon-phase"; export class DamageAnimPhase extends PokemonPhase { - private amount: integer; + private amount: number; private damageResult: DamageResult; private critical: boolean; - constructor(scene: BattleScene, battlerIndex: BattlerIndex, amount: integer, damageResult?: DamageResult, critical: boolean = false) { - super(scene, battlerIndex); + constructor(battlerIndex: BattlerIndex, amount: number, damageResult?: DamageResult, critical: boolean = false) { + super(battlerIndex); this.amount = amount; this.damageResult = damageResult || HitResult.EFFECTIVE; @@ -22,11 +22,11 @@ export class DamageAnimPhase extends PokemonPhase { super.start(); if (this.damageResult === HitResult.ONE_HIT_KO) { - if (this.scene.moveAnimations) { - this.scene.toggleInvert(true); + if (globalScene.moveAnimations) { + globalScene.toggleInvert(true); } - this.scene.time.delayedCall(fixedInt(1000), () => { - this.scene.toggleInvert(false); + globalScene.time.delayedCall(fixedInt(1000), () => { + globalScene.toggleInvert(false); this.applyDamage(); }); return; @@ -35,30 +35,30 @@ export class DamageAnimPhase extends PokemonPhase { this.applyDamage(); } - updateAmount(amount: integer): void { + updateAmount(amount: number): void { this.amount = amount; } applyDamage() { switch (this.damageResult) { case HitResult.EFFECTIVE: - this.scene.playSound("se/hit"); + globalScene.playSound("se/hit"); break; case HitResult.SUPER_EFFECTIVE: case HitResult.ONE_HIT_KO: - this.scene.playSound("se/hit_strong"); + globalScene.playSound("se/hit_strong"); break; case HitResult.NOT_VERY_EFFECTIVE: - this.scene.playSound("se/hit_weak"); + globalScene.playSound("se/hit_weak"); break; } if (this.amount) { - this.scene.damageNumberHandler.add(this.getPokemon(), this.amount, this.damageResult, this.critical); + globalScene.damageNumberHandler.add(this.getPokemon(), this.amount, this.damageResult, this.critical); } if (this.damageResult !== HitResult.OTHER && this.amount > 0) { - const flashTimer = this.scene.time.addEvent({ + const flashTimer = globalScene.time.addEvent({ delay: 100, repeat: 5, startAt: 200, @@ -75,8 +75,8 @@ export class DamageAnimPhase extends PokemonPhase { } override end() { - if (this.scene.currentBattle.battleSpec === BattleSpec.FINAL_BOSS) { - this.scene.initFinalBossPhaseTwo(this.getPokemon()); + if (globalScene.currentBattle.battleSpec === BattleSpec.FINAL_BOSS) { + globalScene.initFinalBossPhaseTwo(this.getPokemon()); } else { super.end(); } diff --git a/src/phases/egg-hatch-phase.ts b/src/phases/egg-hatch-phase.ts index 803fd478fd4..b2844591e33 100644 --- a/src/phases/egg-hatch-phase.ts +++ b/src/phases/egg-hatch-phase.ts @@ -1,19 +1,19 @@ -import BattleScene, { AnySound } from "#app/battle-scene"; -import { Egg } from "#app/data/egg"; +import type { AnySound } from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; +import type { Egg } from "#app/data/egg"; import { EggCountChangedEvent } from "#app/events/egg"; -import { PlayerPokemon } from "#app/field/pokemon"; -import { getPokemonNameWithAffix } from "#app/messages"; +import type { PlayerPokemon } from "#app/field/pokemon"; import { Phase } from "#app/phase"; import { achvs } from "#app/system/achv"; import EggCounterContainer from "#app/ui/egg-counter-container"; -import EggHatchSceneHandler from "#app/ui/egg-hatch-scene-handler"; +import type EggHatchSceneHandler from "#app/ui/egg-hatch-scene-handler"; import PokemonInfoContainer from "#app/ui/pokemon-info-container"; import { Mode } from "#app/ui/ui"; import i18next from "i18next"; import SoundFade from "phaser3-rex-plugins/plugins/soundfade"; import * as Utils from "#app/utils"; -import { EggLapsePhase } from "./egg-lapse-phase"; -import { EggHatchData } from "#app/data/egg-hatch-data"; +import type { EggLapsePhase } from "./egg-lapse-phase"; +import type { EggHatchData } from "#app/data/egg-hatch-data"; import { doShinySparkleAnim } from "#app/field/anims"; @@ -27,7 +27,7 @@ export class EggHatchPhase extends Phase { private eggHatchData: EggHatchData; /** The number of eggs that are hatching */ - private eggsToHatchCount: integer; + private eggsToHatchCount: number; /** The container that lists how many eggs are hatching */ private eggCounterContainer: EggCounterContainer; @@ -58,7 +58,7 @@ export class EggHatchPhase extends Phase { /** The newly hatched {@link PlayerPokemon} */ private pokemon: PlayerPokemon; /** The index of which egg move is unlocked. 0-2 is common, 3 is rare */ - private eggMoveIndex: integer; + private eggMoveIndex: number; /** Internal booleans representing if the egg is hatched, able to be skipped, or skipped */ private hatched: boolean; private canSkip: boolean; @@ -67,8 +67,8 @@ export class EggHatchPhase extends Phase { private evolutionBgm: AnySound; private eggLapsePhase: EggLapsePhase; - constructor(scene: BattleScene, hatchScene: EggLapsePhase, egg: Egg, eggsToHatchCount: integer) { - super(scene); + constructor(hatchScene: EggLapsePhase, egg: Egg, eggsToHatchCount: number) { + super(); this.eggLapsePhase = hatchScene; this.egg = egg; this.eggsToHatchCount = eggsToHatchCount; @@ -77,37 +77,37 @@ export class EggHatchPhase extends Phase { start() { super.start(); - this.scene.ui.setModeForceTransition(Mode.EGG_HATCH_SCENE).then(() => { + globalScene.ui.setModeForceTransition(Mode.EGG_HATCH_SCENE).then(() => { if (!this.egg) { return this.end(); } - const eggIndex = this.scene.gameData.eggs.findIndex(e => e.id === this.egg.id); + const eggIndex = globalScene.gameData.eggs.findIndex(e => e.id === this.egg.id); if (eggIndex === -1) { return this.end(); } - this.scene.gameData.eggs.splice(eggIndex, 1); + globalScene.gameData.eggs.splice(eggIndex, 1); - this.scene.fadeOutBgm(undefined, false); + globalScene.fadeOutBgm(undefined, false); - this.eggHatchHandler = this.scene.ui.getHandler() as EggHatchSceneHandler; + this.eggHatchHandler = globalScene.ui.getHandler() as EggHatchSceneHandler; this.eggHatchContainer = this.eggHatchHandler.eggHatchContainer; - this.eggHatchBg = this.scene.add.image(0, 0, "default_bg"); + this.eggHatchBg = globalScene.add.image(0, 0, "default_bg"); this.eggHatchBg.setOrigin(0, 0); this.eggHatchContainer.add(this.eggHatchBg); - this.eggContainer = this.scene.add.container(this.eggHatchBg.displayWidth / 2, this.eggHatchBg.displayHeight / 2); + this.eggContainer = globalScene.add.container(this.eggHatchBg.displayWidth / 2, this.eggHatchBg.displayHeight / 2); - this.eggSprite = this.scene.add.sprite(0, 0, "egg", `egg_${this.egg.getKey()}`); - this.eggCrackSprite = this.scene.add.sprite(0, 0, "egg_crack", "0"); + this.eggSprite = globalScene.add.sprite(0, 0, "egg", `egg_${this.egg.getKey()}`); + this.eggCrackSprite = globalScene.add.sprite(0, 0, "egg_crack", "0"); this.eggCrackSprite.setVisible(false); - this.eggLightraysOverlay = this.scene.add.sprite((-this.eggHatchBg.displayWidth / 2) + 4, -this.eggHatchBg.displayHeight / 2, "egg_lightrays", "3"); + this.eggLightraysOverlay = globalScene.add.sprite((-this.eggHatchBg.displayWidth / 2) + 4, -this.eggHatchBg.displayHeight / 2, "egg_lightrays", "3"); this.eggLightraysOverlay.setOrigin(0, 0); this.eggLightraysOverlay.setVisible(false); @@ -116,28 +116,28 @@ export class EggHatchPhase extends Phase { this.eggContainer.add(this.eggLightraysOverlay); this.eggHatchContainer.add(this.eggContainer); - this.eggCounterContainer = new EggCounterContainer(this.scene, this.eggsToHatchCount); + this.eggCounterContainer = new EggCounterContainer(this.eggsToHatchCount); this.eggHatchContainer.add(this.eggCounterContainer); const getPokemonSprite = () => { - const ret = this.scene.add.sprite(this.eggHatchBg.displayWidth / 2, this.eggHatchBg.displayHeight / 2, "pkmn__sub"); - ret.setPipeline(this.scene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], ignoreTimeTint: true }); + const ret = globalScene.add.sprite(this.eggHatchBg.displayWidth / 2, this.eggHatchBg.displayHeight / 2, "pkmn__sub"); + ret.setPipeline(globalScene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], ignoreTimeTint: true }); return ret; }; this.eggHatchContainer.add((this.pokemonSprite = getPokemonSprite())); - this.pokemonShinySparkle = this.scene.add.sprite(this.pokemonSprite.x, this.pokemonSprite.y, "shiny"); + this.pokemonShinySparkle = globalScene.add.sprite(this.pokemonSprite.x, this.pokemonSprite.y, "shiny"); this.pokemonShinySparkle.setVisible(false); this.eggHatchContainer.add(this.pokemonShinySparkle); - this.eggHatchOverlay = this.scene.add.rectangle(0, -this.scene.game.canvas.height / 6, this.scene.game.canvas.width / 6, this.scene.game.canvas.height / 6, 0xFFFFFF); + this.eggHatchOverlay = globalScene.add.rectangle(0, -globalScene.game.canvas.height / 6, globalScene.game.canvas.width / 6, globalScene.game.canvas.height / 6, 0xFFFFFF); this.eggHatchOverlay.setOrigin(0, 0); this.eggHatchOverlay.setAlpha(0); - this.scene.fieldUI.add(this.eggHatchOverlay); + globalScene.fieldUI.add(this.eggHatchOverlay); - this.infoContainer = new PokemonInfoContainer(this.scene); + this.infoContainer = new PokemonInfoContainer(); this.infoContainer.setup(); this.eggHatchContainer.add(this.infoContainer); @@ -155,13 +155,13 @@ export class EggHatchPhase extends Phase { pokemon.loadAssets().then(() => { this.canSkip = true; - this.scene.time.delayedCall(1000, () => { + globalScene.time.delayedCall(1000, () => { if (!this.hatched) { - this.evolutionBgm = this.scene.playSoundWithoutBgm("evolution"); + this.evolutionBgm = globalScene.playSoundWithoutBgm("evolution"); } }); - this.scene.time.delayedCall(2000, () => { + globalScene.time.delayedCall(2000, () => { if (this.hatched) { return; } @@ -171,25 +171,25 @@ export class EggHatchPhase extends Phase { if (this.hatched) { return; } - this.scene.time.delayedCall(1000, () => { + globalScene.time.delayedCall(1000, () => { if (this.hatched) { return; } this.doSpray(2, this.eggSprite.displayHeight / -4); this.eggCrackSprite.setFrame("1"); - this.scene.time.delayedCall(125, () => this.eggCrackSprite.setFrame("2")); + globalScene.time.delayedCall(125, () => this.eggCrackSprite.setFrame("2")); this.doEggShake(4).then(() => { if (this.hatched) { return; } - this.scene.time.delayedCall(1000, () => { + globalScene.time.delayedCall(1000, () => { if (this.hatched) { return; } - this.scene.playSound("se/egg_crack"); + globalScene.playSound("se/egg_crack"); this.doSpray(4); this.eggCrackSprite.setFrame("3"); - this.scene.time.delayedCall(125, () => this.eggCrackSprite.setFrame("4")); + globalScene.time.delayedCall(125, () => this.eggCrackSprite.setFrame("4")); this.doEggShake(8, 2).then(() => { if (!this.hatched) { this.doHatch(); @@ -205,10 +205,10 @@ export class EggHatchPhase extends Phase { } end() { - if (this.scene.findPhase((p) => p instanceof EggHatchPhase)) { + if (globalScene.findPhase((p) => p instanceof EggHatchPhase)) { this.eggHatchHandler.clear(); } else { - this.scene.time.delayedCall(250, () => this.scene.setModifiersVisible(true)); + globalScene.time.delayedCall(250, () => globalScene.setModifiersVisible(true)); } super.end(); } @@ -220,7 +220,7 @@ export class EggHatchPhase extends Phase { * @param count the current number of times this function has been called. * @returns nothing since it's a Promise */ - doEggShake(intensity: number, repeatCount?: integer, count?: integer): Promise { + doEggShake(intensity: number, repeatCount?: number, count?: number): Promise { return new Promise(resolve => { if (repeatCount === undefined) { repeatCount = 0; @@ -228,14 +228,14 @@ export class EggHatchPhase extends Phase { if (count === undefined) { count = 0; } - this.scene.playSound("se/pb_move"); - this.scene.tweens.add({ + globalScene.playSound("se/pb_move"); + globalScene.tweens.add({ targets: this.eggContainer, x: `-=${intensity / (count ? 1 : 2)}`, ease: "Sine.easeInOut", duration: 125, onComplete: () => { - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.eggContainer, x: `+=${intensity}`, ease: "Sine.easeInOut", @@ -245,7 +245,7 @@ export class EggHatchPhase extends Phase { if (count! < repeatCount!) { // we know they are defined return this.doEggShake(intensity, repeatCount, count).then(() => resolve()); } - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.eggContainer, x: `-=${intensity / 2}`, ease: "Sine.easeInOut", @@ -286,14 +286,14 @@ export class EggHatchPhase extends Phase { this.canSkip = false; this.hatched = true; if (this.evolutionBgm) { - SoundFade.fadeOut(this.scene, this.evolutionBgm, Utils.fixedInt(100)); + SoundFade.fadeOut(globalScene, this.evolutionBgm, Utils.fixedInt(100)); } for (let e = 0; e < 5; e++) { - this.scene.time.delayedCall(Utils.fixedInt(375 * e), () => this.scene.playSound("se/egg_hatch", { volume: 1 - (e * 0.2) })); + globalScene.time.delayedCall(Utils.fixedInt(375 * e), () => globalScene.playSound("se/egg_hatch", { volume: 1 - (e * 0.2) })); } this.eggLightraysOverlay.setVisible(true); this.eggLightraysOverlay.play("egg_lightrays"); - this.scene.tweens.add({ + globalScene.tweens.add({ duration: Utils.fixedInt(125), targets: this.eggHatchOverlay, alpha: 1, @@ -303,7 +303,7 @@ export class EggHatchPhase extends Phase { this.canSkip = true; } }); - this.scene.time.delayedCall(Utils.fixedInt(1500), () => { + globalScene.time.delayedCall(Utils.fixedInt(1500), () => { this.canSkip = false; if (!this.skipped) { this.doReveal(); @@ -318,16 +318,16 @@ export class EggHatchPhase extends Phase { // set the previous dex data so info container can show new unlocks in egg summary const isShiny = this.pokemon.isShiny(); if (this.pokemon.species.subLegendary) { - this.scene.validateAchv(achvs.HATCH_SUB_LEGENDARY); + globalScene.validateAchv(achvs.HATCH_SUB_LEGENDARY); } if (this.pokemon.species.legendary) { - this.scene.validateAchv(achvs.HATCH_LEGENDARY); + globalScene.validateAchv(achvs.HATCH_LEGENDARY); } if (this.pokemon.species.mythical) { - this.scene.validateAchv(achvs.HATCH_MYTHICAL); + globalScene.validateAchv(achvs.HATCH_MYTHICAL); } if (isShiny) { - this.scene.validateAchv(achvs.HATCH_SHINY); + globalScene.validateAchv(achvs.HATCH_SHINY); } this.eggContainer.setVisible(false); const spriteKey = this.pokemon.getSpriteKey(true); @@ -341,33 +341,33 @@ export class EggHatchPhase extends Phase { this.pokemonSprite.setPipelineData("shiny", this.pokemon.shiny); this.pokemonSprite.setPipelineData("variant", this.pokemon.variant); this.pokemonSprite.setVisible(true); - this.scene.time.delayedCall(Utils.fixedInt(250), () => { + globalScene.time.delayedCall(Utils.fixedInt(250), () => { this.eggsToHatchCount--; this.eggHatchHandler.eventTarget.dispatchEvent(new EggCountChangedEvent(this.eggsToHatchCount)); this.pokemon.cry(); if (isShiny) { - this.scene.time.delayedCall(Utils.fixedInt(500), () => { - doShinySparkleAnim(this.scene, this.pokemonShinySparkle, this.pokemon.variant); + globalScene.time.delayedCall(Utils.fixedInt(500), () => { + doShinySparkleAnim(this.pokemonShinySparkle, this.pokemon.variant); }); } - this.scene.time.delayedCall(Utils.fixedInt(!this.skipped ? !isShiny ? 1250 : 1750 : !isShiny ? 250 : 750), () => { + globalScene.time.delayedCall(Utils.fixedInt(!this.skipped ? !isShiny ? 1250 : 1750 : !isShiny ? 250 : 750), () => { this.infoContainer.show(this.pokemon, false, this.skipped ? 2 : 1); - this.scene.playSoundWithoutBgm("evolution_fanfare"); + globalScene.playSoundWithoutBgm("evolution_fanfare"); - this.scene.ui.showText(i18next.t("egg:hatchFromTheEgg", { pokemonName: getPokemonNameWithAffix(this.pokemon) }), null, () => { - this.scene.gameData.updateSpeciesDexIvs(this.pokemon.species.speciesId, this.pokemon.ivs); - this.scene.gameData.setPokemonCaught(this.pokemon, true, true).then(() => { - this.scene.gameData.setEggMoveUnlocked(this.pokemon.species, this.eggMoveIndex).then((value) => { + globalScene.ui.showText(i18next.t("egg:hatchFromTheEgg", { pokemonName: this.pokemon.species.getExpandedSpeciesName() }), null, () => { + globalScene.gameData.updateSpeciesDexIvs(this.pokemon.species.speciesId, this.pokemon.ivs); + globalScene.gameData.setPokemonCaught(this.pokemon, true, true).then(() => { + globalScene.gameData.setEggMoveUnlocked(this.pokemon.species, this.eggMoveIndex).then((value) => { this.eggHatchData.setEggMoveUnlocked(value); - this.scene.ui.showText("", 0); + globalScene.ui.showText("", 0); this.end(); }); }); }, null, true, 3000); }); }); - this.scene.tweens.add({ + globalScene.tweens.add({ duration: Utils.fixedInt(this.skipped ? 500 : 3000), targets: this.eggHatchOverlay, alpha: 0, @@ -381,7 +381,7 @@ export class EggHatchPhase extends Phase { * @param amplitude Scaling * @returns a number */ - sin(index: integer, amplitude: integer): number { + sin(index: number, amplitude: number): number { return amplitude * Math.sin(index * (Math.PI / 128)); } @@ -390,8 +390,8 @@ export class EggHatchPhase extends Phase { * @param intensity number of times this is repeated (this is a badly named variable) * @param offsetY how much to offset the Y coordinates */ - doSpray(intensity: integer, offsetY?: number) { - this.scene.tweens.addCounter({ + doSpray(intensity: number, offsetY?: number) { + globalScene.tweens.addCounter({ repeat: intensity, duration: Utils.getFrameMs(1), onRepeat: () => { @@ -405,11 +405,11 @@ export class EggHatchPhase extends Phase { * @param trigIndex Used to modify the particle's vertical speed, is a random number from 0-7 * @param offsetY how much to offset the Y coordinate */ - doSprayParticle(trigIndex: integer, offsetY: number) { + doSprayParticle(trigIndex: number, offsetY: number) { const initialX = this.eggHatchBg.displayWidth / 2; const initialY = this.eggHatchBg.displayHeight / 2 + offsetY; const shardKey = !this.egg.isManaphyEgg() ? this.egg.tier.toString() : "1"; - const particle = this.scene.add.image(initialX, initialY, "egg_shard", `${shardKey}_${Math.floor(trigIndex / 2)}`); + const particle = globalScene.add.image(initialX, initialY, "egg_shard", `${shardKey}_${Math.floor(trigIndex / 2)}`); this.eggHatchContainer.add(particle); let f = 0; @@ -417,7 +417,7 @@ export class EggHatchPhase extends Phase { const speed = 3 - Utils.randInt(8); const amp = 24 + Utils.randInt(32); - const particleTimer = this.scene.tweens.addCounter({ + const particleTimer = globalScene.tweens.addCounter({ repeat: -1, duration: Utils.getFrameMs(1), onRepeat: () => { diff --git a/src/phases/egg-lapse-phase.ts b/src/phases/egg-lapse-phase.ts index 8de26ee3ef0..62da0edf5b7 100644 --- a/src/phases/egg-lapse-phase.ts +++ b/src/phases/egg-lapse-phase.ts @@ -1,12 +1,13 @@ -import BattleScene from "#app/battle-scene"; -import { Egg, EGG_SEED } from "#app/data/egg"; +import { globalScene } from "#app/global-scene"; +import type { Egg } from "#app/data/egg"; +import { EGG_SEED } from "#app/data/egg"; import { Phase } from "#app/phase"; import i18next from "i18next"; import Overrides from "#app/overrides"; import { EggHatchPhase } from "./egg-hatch-phase"; import { Mode } from "#app/ui/ui"; import { achvs } from "#app/system/achv"; -import { PlayerPokemon } from "#app/field/pokemon"; +import type { PlayerPokemon } from "#app/field/pokemon"; import { EggSummaryPhase } from "./egg-summary-phase"; import { EggHatchData } from "#app/data/egg-hatch-data"; @@ -18,24 +19,24 @@ export class EggLapsePhase extends Phase { private eggHatchData: EggHatchData[] = []; private readonly minEggsToSkip: number = 2; - constructor(scene: BattleScene) { - super(scene); + constructor() { + super(); } start() { super.start(); - const eggsToHatch: Egg[] = this.scene.gameData.eggs.filter((egg: Egg) => { + const eggsToHatch: Egg[] = globalScene.gameData.eggs.filter((egg: Egg) => { return Overrides.EGG_IMMEDIATE_HATCH_OVERRIDE ? true : --egg.hatchWaves < 1; }); const eggsToHatchCount: number = eggsToHatch.length; this.eggHatchData = []; if (eggsToHatchCount > 0) { - if (eggsToHatchCount >= this.minEggsToSkip && this.scene.eggSkipPreference === 1) { - this.scene.ui.showText(i18next.t("battle:eggHatching"), 0, () => { + if (eggsToHatchCount >= this.minEggsToSkip && globalScene.eggSkipPreference === 1) { + globalScene.ui.showText(i18next.t("battle:eggHatching"), 0, () => { // show prompt for skip, blocking inputs for 1 second - this.scene.ui.showText(i18next.t("battle:eggSkipPrompt", { eggsToHatch: eggsToHatchCount }), 0); - this.scene.ui.setModeWithoutClear(Mode.CONFIRM, () => { + globalScene.ui.showText(i18next.t("battle:eggSkipPrompt", { eggsToHatch: eggsToHatchCount }), 0); + globalScene.ui.setModeWithoutClear(Mode.CONFIRM, () => { this.hatchEggsSkipped(eggsToHatch); this.showSummary(); }, () => { @@ -45,13 +46,13 @@ export class EggLapsePhase extends Phase { null, null, null, 1000, true ); }, 100, true); - } else if (eggsToHatchCount >= this.minEggsToSkip && this.scene.eggSkipPreference === 2) { - this.scene.queueMessage(i18next.t("battle:eggHatching")); + } else if (eggsToHatchCount >= this.minEggsToSkip && globalScene.eggSkipPreference === 2) { + globalScene.queueMessage(i18next.t("battle:eggHatching")); this.hatchEggsSkipped(eggsToHatch); this.showSummary(); } else { // regular hatches, no summary - this.scene.queueMessage(i18next.t("battle:eggHatching")); + globalScene.queueMessage(i18next.t("battle:eggHatching")); this.hatchEggsRegular(eggsToHatch); this.end(); } @@ -67,7 +68,7 @@ export class EggLapsePhase extends Phase { hatchEggsRegular(eggsToHatch: Egg[]) { let eggsToHatchCount: number = eggsToHatch.length; for (const egg of eggsToHatch) { - this.scene.unshiftPhase(new EggHatchPhase(this.scene, this, egg, eggsToHatchCount)); + globalScene.unshiftPhase(new EggHatchPhase(this, egg, eggsToHatchCount)); eggsToHatchCount--; } } @@ -83,7 +84,7 @@ export class EggLapsePhase extends Phase { } showSummary() { - this.scene.unshiftPhase(new EggSummaryPhase(this.scene, this.eggHatchData)); + globalScene.unshiftPhase(new EggSummaryPhase(this.eggHatchData)); this.end(); } @@ -93,11 +94,11 @@ export class EggLapsePhase extends Phase { * @param egg egg to hatch */ hatchEggSilently(egg: Egg) { - const eggIndex = this.scene.gameData.eggs.findIndex(e => e.id === egg.id); + const eggIndex = globalScene.gameData.eggs.findIndex(e => e.id === egg.id); if (eggIndex === -1) { return this.end(); } - this.scene.gameData.eggs.splice(eggIndex, 1); + globalScene.gameData.eggs.splice(eggIndex, 1); const data = this.generatePokemon(egg); const pokemon = data.pokemon; @@ -106,16 +107,16 @@ export class EggLapsePhase extends Phase { } if (pokemon.species.subLegendary) { - this.scene.validateAchv(achvs.HATCH_SUB_LEGENDARY); + globalScene.validateAchv(achvs.HATCH_SUB_LEGENDARY); } if (pokemon.species.legendary) { - this.scene.validateAchv(achvs.HATCH_LEGENDARY); + globalScene.validateAchv(achvs.HATCH_LEGENDARY); } if (pokemon.species.mythical) { - this.scene.validateAchv(achvs.HATCH_MYTHICAL); + globalScene.validateAchv(achvs.HATCH_MYTHICAL); } if (pokemon.isShiny()) { - this.scene.validateAchv(achvs.HATCH_SHINY); + globalScene.validateAchv(achvs.HATCH_SHINY); } } @@ -128,9 +129,9 @@ export class EggLapsePhase extends Phase { generatePokemon(egg: Egg): EggHatchData { let ret: PlayerPokemon; let newHatchData: EggHatchData; - this.scene.executeWithSeedOffset(() => { - ret = egg.generatePlayerPokemon(this.scene); - newHatchData = new EggHatchData(this.scene, ret, egg.eggMoveIndex); + globalScene.executeWithSeedOffset(() => { + ret = egg.generatePlayerPokemon(); + newHatchData = new EggHatchData(ret, egg.eggMoveIndex); newHatchData.setDex(); this.eggHatchData.push(newHatchData); diff --git a/src/phases/egg-summary-phase.ts b/src/phases/egg-summary-phase.ts index b673eb4887b..56741c5820f 100644 --- a/src/phases/egg-summary-phase.ts +++ b/src/phases/egg-summary-phase.ts @@ -1,7 +1,7 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { Phase } from "#app/phase"; import { Mode } from "#app/ui/ui"; -import { EggHatchData } from "#app/data/egg-hatch-data"; +import type { EggHatchData } from "#app/data/egg-hatch-data"; /** * Class that represents the egg summary phase @@ -11,8 +11,8 @@ import { EggHatchData } from "#app/data/egg-hatch-data"; export class EggSummaryPhase extends Phase { private eggHatchData: EggHatchData[]; - constructor(scene: BattleScene, eggHatchData: EggHatchData[]) { - super(scene); + constructor(eggHatchData: EggHatchData[]) { + super(); this.eggHatchData = eggHatchData; } @@ -22,8 +22,8 @@ export class EggSummaryPhase extends Phase { // updates next pokemon once the current update has been completed const updateNextPokemon = (i: number) => { if (i >= this.eggHatchData.length) { - this.scene.ui.setModeForceTransition(Mode.EGG_HATCH_SUMMARY, this.eggHatchData).then(() => { - this.scene.fadeOutBgm(undefined, false); + globalScene.ui.setModeForceTransition(Mode.EGG_HATCH_SUMMARY, this.eggHatchData).then(() => { + globalScene.fadeOutBgm(undefined, false); }); } else { @@ -40,8 +40,8 @@ export class EggSummaryPhase extends Phase { } end() { - this.scene.time.delayedCall(250, () => this.scene.setModifiersVisible(true)); - this.scene.ui.setModeForceTransition(Mode.MESSAGE).then(() => { + globalScene.time.delayedCall(250, () => globalScene.setModifiersVisible(true)); + globalScene.ui.setModeForceTransition(Mode.MESSAGE).then(() => { super.end(); }); } diff --git a/src/phases/encounter-phase.ts b/src/phases/encounter-phase.ts index a4c9aa44b36..ea8e43faeeb 100644 --- a/src/phases/encounter-phase.ts +++ b/src/phases/encounter-phase.ts @@ -1,5 +1,5 @@ import { BattlerIndex, BattleType } from "#app/battle"; -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { PLAYER_PARTY_MAX_SIZE } from "#app/constants"; import { applyAbAttrs, SyncEncounterNatureAbAttr } from "#app/data/ability"; import { initEncounterAnims, loadEncounterAnimAssets } from "#app/data/battle-anims"; @@ -10,7 +10,8 @@ import { getGoldenBugNetSpecies } from "#app/data/mystery-encounters/utils/encou import { TrainerSlot } from "#app/data/trainer-config"; import { getRandomWeatherType } from "#app/data/weather"; import { EncounterPhaseEvent } from "#app/events/battle-scene"; -import Pokemon, { FieldPosition } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; +import { FieldPosition } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { BoostBugSpawnModifier, IvScannerModifier, TurnHeldItemTransferModifier } from "#app/modifier/modifier"; import { ModifierPoolType, regenerateModifierPoolThresholds } from "#app/modifier/modifier-type"; @@ -37,12 +38,13 @@ import { Species } from "#enums/species"; import { overrideHeldItems, overrideModifiers } from "#app/modifier/modifier"; import i18next from "i18next"; import { WEIGHT_INCREMENT_ON_SPAWN_MISS } from "#app/data/mystery-encounters/mystery-encounters"; +import { getNatureName } from "#app/data/nature"; export class EncounterPhase extends BattlePhase { private loaded: boolean; - constructor(scene: BattleScene, loaded?: boolean) { - super(scene); + constructor(loaded?: boolean) { + super(); this.loaded = !!loaded; } @@ -50,26 +52,26 @@ export class EncounterPhase extends BattlePhase { start() { super.start(); - this.scene.updateGameInfo(); + globalScene.updateGameInfo(); - this.scene.initSession(); + globalScene.initSession(); - this.scene.eventTarget.dispatchEvent(new EncounterPhaseEvent()); + globalScene.eventTarget.dispatchEvent(new EncounterPhaseEvent()); // Failsafe if players somehow skip floor 200 in classic mode - if (this.scene.gameMode.isClassic && this.scene.currentBattle.waveIndex > 200) { - this.scene.unshiftPhase(new GameOverPhase(this.scene)); + if (globalScene.gameMode.isClassic && globalScene.currentBattle.waveIndex > 200) { + globalScene.unshiftPhase(new GameOverPhase()); } const loadEnemyAssets: Promise[] = []; - const battle = this.scene.currentBattle; + const battle = globalScene.currentBattle; // Generate and Init Mystery Encounter if (battle.isBattleMysteryEncounter() && !battle.mysteryEncounter) { - this.scene.executeWithSeedOffset(() => { + globalScene.executeWithSeedOffset(() => { const currentSessionEncounterType = battle.mysteryEncounterType; - battle.mysteryEncounter = this.scene.getMysteryEncounter(currentSessionEncounterType); + battle.mysteryEncounter = globalScene.getMysteryEncounter(currentSessionEncounterType); }, battle.waveIndex * 16); } const mysteryEncounter = battle.mysteryEncounter; @@ -77,21 +79,21 @@ export class EncounterPhase extends BattlePhase { // If ME has an onInit() function, call it // Usually used for calculating rand data before initializing anything visual // Also prepopulates any dialogue tokens from encounter/option requirements - this.scene.executeWithSeedOffset(() => { + globalScene.executeWithSeedOffset(() => { if (mysteryEncounter.onInit) { - mysteryEncounter.onInit(this.scene); + mysteryEncounter.onInit(); } - mysteryEncounter.populateDialogueTokensFromRequirements(this.scene); + mysteryEncounter.populateDialogueTokensFromRequirements(); }, battle.waveIndex); // Add any special encounter animations to load if (mysteryEncounter.encounterAnimations && mysteryEncounter.encounterAnimations.length > 0) { - loadEnemyAssets.push(initEncounterAnims(this.scene, mysteryEncounter.encounterAnimations).then(() => loadEncounterAnimAssets(this.scene, true))); + loadEnemyAssets.push(initEncounterAnims(mysteryEncounter.encounterAnimations).then(() => loadEncounterAnimAssets(true))); } // Add intro visuals for mystery encounter - mysteryEncounter.initIntroVisuals(this.scene); - this.scene.field.add(mysteryEncounter.introVisuals!); + mysteryEncounter.initIntroVisuals(); + globalScene.field.add(mysteryEncounter.introVisuals!); } let totalBst = 0; @@ -103,37 +105,43 @@ export class EncounterPhase extends BattlePhase { } if (!this.loaded) { if (battle.battleType === BattleType.TRAINER) { + //resets hitRecCount during Trainer ecnounter + for (const pokemon of globalScene.getPlayerParty()) { + if (pokemon) { + pokemon.customPokemonData.resetHitReceivedCount(); + } + } battle.enemyParty[e] = battle.trainer?.genPartyMember(e)!; // TODO:: is the bang correct here? } else { - let enemySpecies = this.scene.randomSpecies(battle.waveIndex, level, true); + let enemySpecies = globalScene.randomSpecies(battle.waveIndex, level, true); // If player has golden bug net, rolls 10% chance to replace non-boss wave wild species from the golden bug net bug pool - if (this.scene.findModifier(m => m instanceof BoostBugSpawnModifier) - && !this.scene.gameMode.isBoss(battle.waveIndex) - && this.scene.arena.biomeType !== Biome.END + if (globalScene.findModifier(m => m instanceof BoostBugSpawnModifier) + && !globalScene.gameMode.isBoss(battle.waveIndex) + && globalScene.arena.biomeType !== Biome.END && randSeedInt(10) === 0) { enemySpecies = getGoldenBugNetSpecies(level); } - battle.enemyParty[e] = this.scene.addEnemyPokemon(enemySpecies, level, TrainerSlot.NONE, !!this.scene.getEncounterBossSegments(battle.waveIndex, level, enemySpecies)); - if (this.scene.currentBattle.battleSpec === BattleSpec.FINAL_BOSS) { + battle.enemyParty[e] = globalScene.addEnemyPokemon(enemySpecies, level, TrainerSlot.NONE, !!globalScene.getEncounterBossSegments(battle.waveIndex, level, enemySpecies)); + if (globalScene.currentBattle.battleSpec === BattleSpec.FINAL_BOSS) { battle.enemyParty[e].ivs = new Array(6).fill(31); } - this.scene.getPlayerParty().slice(0, !battle.double ? 1 : 2).reverse().forEach(playerPokemon => { + globalScene.getPlayerParty().slice(0, !battle.double ? 1 : 2).reverse().forEach(playerPokemon => { applyAbAttrs(SyncEncounterNatureAbAttr, playerPokemon, null, false, battle.enemyParty[e]); }); } } - const enemyPokemon = this.scene.getEnemyParty()[e]; + const enemyPokemon = globalScene.getEnemyParty()[e]; if (e < (battle.double ? 2 : 1)) { enemyPokemon.setX(-66 + enemyPokemon.getFieldPositionOffset()[0]); enemyPokemon.resetSummonData(); } if (!this.loaded) { - this.scene.gameData.setPokemonSeen(enemyPokemon, true, battle.battleType === BattleType.TRAINER || battle?.mysteryEncounter?.encounterMode === MysteryEncounterMode.TRAINER_BATTLE); + globalScene.gameData.setPokemonSeen(enemyPokemon, true, battle.battleType === BattleType.TRAINER || battle?.mysteryEncounter?.encounterMode === MysteryEncounterMode.TRAINER_BATTLE); } if (enemyPokemon.species.speciesId === Species.ETERNATUS) { - if (this.scene.gameMode.isClassic && (battle.battleSpec === BattleSpec.FINAL_BOSS || this.scene.gameMode.isWaveFinal(battle.waveIndex))) { + if (globalScene.gameMode.isClassic && (battle.battleSpec === BattleSpec.FINAL_BOSS || globalScene.gameMode.isWaveFinal(battle.waveIndex))) { if (battle.battleSpec !== BattleSpec.FINAL_BOSS) { enemyPokemon.formIndex = 1; enemyPokemon.updateScale(); @@ -149,12 +157,36 @@ export class EncounterPhase extends BattlePhase { loadEnemyAssets.push(enemyPokemon.loadAssets()); - console.log(`Pokemon: ${getPokemonNameWithAffix(enemyPokemon)}`, `Species ID: ${enemyPokemon.species.speciesId}`, `Stats: ${enemyPokemon.stats}`, `Ability: ${enemyPokemon.getAbility().name}`, `Passive Ability: ${enemyPokemon.getPassiveAbility().name}`); + const stats: string[] = [ + `HP: ${enemyPokemon.stats[0]} (${enemyPokemon.ivs[0]})`, + ` Atk: ${enemyPokemon.stats[1]} (${enemyPokemon.ivs[1]})`, + ` Def: ${enemyPokemon.stats[2]} (${enemyPokemon.ivs[2]})`, + ` Spatk: ${enemyPokemon.stats[3]} (${enemyPokemon.ivs[3]})`, + ` Spdef: ${enemyPokemon.stats[4]} (${enemyPokemon.ivs[4]})`, + ` Spd: ${enemyPokemon.stats[5]} (${enemyPokemon.ivs[5]})`, + ]; + const moveset: string[] = []; + enemyPokemon.getMoveset().forEach((move) => { + moveset.push(move!.getName()); // TODO: remove `!` after moveset-null removal PR + }); + + console.log( + `Pokemon: ${getPokemonNameWithAffix(enemyPokemon)}`, + `| Species ID: ${enemyPokemon.species.speciesId}`, + `| Nature: ${getNatureName(enemyPokemon.nature, true, true, true)}`, + ); + console.log(`Stats (IVs): ${stats}`); + console.log( + `Ability: ${enemyPokemon.getAbility().name}`, + `| Passive Ability${enemyPokemon.hasPassive() ? "" : " (inactive)"}: ${enemyPokemon.getPassiveAbility().name}`, + `${enemyPokemon.isBoss() ? `| Boss Bars: ${enemyPokemon.bossSegments}` : ""}` + ); + console.log("Moveset:", moveset); return true; }); - if (this.scene.getPlayerParty().filter(p => p.isShiny()).length === PLAYER_PARTY_MAX_SIZE) { - this.scene.validateAchv(achvs.SHINY_PARTY); + if (globalScene.getPlayerParty().filter(p => p.isShiny()).length === PLAYER_PARTY_MAX_SIZE) { + globalScene.validateAchv(achvs.SHINY_PARTY); } if (battle.battleType === BattleType.TRAINER) { @@ -168,11 +200,11 @@ export class EncounterPhase extends BattlePhase { } // Load Mystery Encounter Exclamation bubble and sfx loadEnemyAssets.push(new Promise(resolve => { - this.scene.loadSe("GEN8- Exclaim", "battle_anims", "GEN8- Exclaim.wav"); - this.scene.loadImage("encounter_exclaim", "mystery-encounters"); - this.scene.load.once(Phaser.Loader.Events.COMPLETE, () => resolve()); - if (!this.scene.load.isLoading()) { - this.scene.load.start(); + globalScene.loadSe("GEN8- Exclaim", "battle_anims", "GEN8- Exclaim.wav"); + globalScene.loadImage("encounter_exclaim", "mystery-encounters"); + globalScene.load.once(Phaser.Loader.Events.COMPLETE, () => resolve()); + if (!globalScene.load.isLoading()) { + globalScene.load.start(); } })); } else { @@ -196,16 +228,16 @@ export class EncounterPhase extends BattlePhase { } if (e < (battle.double ? 2 : 1)) { if (battle.battleType === BattleType.WILD) { - this.scene.field.add(enemyPokemon); + globalScene.field.add(enemyPokemon); battle.seenEnemyPartyMemberIds.add(enemyPokemon.id); - const playerPokemon = this.scene.getPlayerPokemon(); + const playerPokemon = globalScene.getPlayerPokemon(); if (playerPokemon?.isOnField()) { - this.scene.field.moveBelow(enemyPokemon as Pokemon, playerPokemon); + globalScene.field.moveBelow(enemyPokemon as Pokemon, playerPokemon); } enemyPokemon.tint(0, 0.5); } else if (battle.battleType === BattleType.TRAINER) { enemyPokemon.setVisible(false); - this.scene.currentBattle.trainer?.tint(0, 0.5); + globalScene.currentBattle.trainer?.tint(0, 0.5); } if (battle.double) { enemyPokemon.setFieldPosition(e ? FieldPosition.RIGHT : FieldPosition.LEFT); @@ -215,63 +247,60 @@ export class EncounterPhase extends BattlePhase { }); if (!this.loaded && battle.battleType !== BattleType.MYSTERY_ENCOUNTER) { - regenerateModifierPoolThresholds(this.scene.getEnemyField(), battle.battleType === BattleType.TRAINER ? ModifierPoolType.TRAINER : ModifierPoolType.WILD); - this.scene.generateEnemyModifiers(); - overrideModifiers(this.scene, false); - this.scene.getEnemyField().forEach(enemy => { - overrideHeldItems(this.scene, enemy, false); + regenerateModifierPoolThresholds(globalScene.getEnemyField(), battle.battleType === BattleType.TRAINER ? ModifierPoolType.TRAINER : ModifierPoolType.WILD); + globalScene.generateEnemyModifiers(); + overrideModifiers(false); + globalScene.getEnemyField().forEach(enemy => { + overrideHeldItems(enemy, false); }); - } - this.scene.ui.setMode(Mode.MESSAGE).then(() => { + if (battle.battleType === BattleType.TRAINER) { + globalScene.currentBattle.trainer!.genAI(globalScene.getEnemyParty()); + } + + globalScene.ui.setMode(Mode.MESSAGE).then(() => { if (!this.loaded) { this.trySetWeatherIfNewBiome(); // Set weather before session gets saved // Game syncs to server on waves X1 and X6 (As of 1.2.0) - this.scene.gameData.saveAll(this.scene, true, battle.waveIndex % 5 === 1 || (this.scene.lastSavePlayTime ?? 0) >= 300).then(success => { - this.scene.disableMenu = false; + globalScene.gameData.saveAll(true, battle.waveIndex % 5 === 1 || (globalScene.lastSavePlayTime ?? 0) >= 300).then(success => { + globalScene.disableMenu = false; if (!success) { - return this.scene.reset(true); + return globalScene.reset(true); } this.doEncounter(); - this.scene.resetSeed(); + globalScene.resetSeed(); }); } else { this.doEncounter(); - this.scene.resetSeed(); + globalScene.resetSeed(); } }); }); } doEncounter() { - this.scene.playBgm(undefined, true); - this.scene.updateModifiers(false); - this.scene.setFieldScale(1); + globalScene.playBgm(undefined, true); + globalScene.updateModifiers(false); + globalScene.setFieldScale(1); - /*if (startingWave > 10) { - for (let m = 0; m < Math.min(Math.floor(startingWave / 10), 99); m++) - this.scene.addModifier(getPlayerModifierTypeOptionsForWave((m + 1) * 10, 1, this.scene.getPlayerParty())[0].type.newModifier(), true); - this.scene.updateModifiers(true); - }*/ - - const { battleType, waveIndex } = this.scene.currentBattle; - if (this.scene.isMysteryEncounterValidForWave(battleType, waveIndex) && !this.scene.currentBattle.isBattleMysteryEncounter()) { + const { battleType, waveIndex } = globalScene.currentBattle; + if (globalScene.isMysteryEncounterValidForWave(battleType, waveIndex) && !globalScene.currentBattle.isBattleMysteryEncounter()) { // Increment ME spawn chance if an ME could have spawned but did not // Only do this AFTER session has been saved to avoid duplicating increments - this.scene.mysteryEncounterSaveData.encounterSpawnChance += WEIGHT_INCREMENT_ON_SPAWN_MISS; + globalScene.mysteryEncounterSaveData.encounterSpawnChance += WEIGHT_INCREMENT_ON_SPAWN_MISS; } - for (const pokemon of this.scene.getPlayerParty()) { + for (const pokemon of globalScene.getPlayerParty()) { if (pokemon) { pokemon.resetBattleData(); } } - const enemyField = this.scene.getEnemyField(); - this.scene.tweens.add({ - targets: [ this.scene.arenaEnemy, this.scene.currentBattle.trainer, enemyField, this.scene.arenaPlayer, this.scene.trainer ].flat(), - x: (_target, _key, value, fieldIndex: integer) => fieldIndex < 2 + (enemyField.length) ? value + 300 : value - 300, + const enemyField = globalScene.getEnemyField(); + globalScene.tweens.add({ + targets: [ globalScene.arenaEnemy, globalScene.currentBattle.trainer, enemyField, globalScene.arenaPlayer, globalScene.trainer ].flat(), + x: (_target, _key, value, fieldIndex: number) => fieldIndex < 2 + (enemyField.length) ? value + 300 : value - 300, duration: 2000, onComplete: () => { if (!this.tryOverrideForBattleSpec()) { @@ -280,13 +309,13 @@ export class EncounterPhase extends BattlePhase { } }); - const encounterIntroVisuals = this.scene.currentBattle?.mysteryEncounter?.introVisuals; + const encounterIntroVisuals = globalScene.currentBattle?.mysteryEncounter?.introVisuals; if (encounterIntroVisuals) { const enterFromRight = encounterIntroVisuals.enterFromRight; if (enterFromRight) { encounterIntroVisuals.x += 500; } - this.scene.tweens.add({ + globalScene.tweens.add({ targets: encounterIntroVisuals, x: enterFromRight ? "-=200" : "+=300", duration: 2000 @@ -295,18 +324,18 @@ export class EncounterPhase extends BattlePhase { } getEncounterMessage(): string { - const enemyField = this.scene.getEnemyField(); + const enemyField = globalScene.getEnemyField(); - if (this.scene.currentBattle.battleSpec === BattleSpec.FINAL_BOSS) { + if (globalScene.currentBattle.battleSpec === BattleSpec.FINAL_BOSS) { return i18next.t("battle:bossAppeared", { bossName: getPokemonNameWithAffix(enemyField[0]) }); } - if (this.scene.currentBattle.battleType === BattleType.TRAINER) { - if (this.scene.currentBattle.double) { - return i18next.t("battle:trainerAppearedDouble", { trainerName: this.scene.currentBattle.trainer?.getName(TrainerSlot.NONE, true) }); + if (globalScene.currentBattle.battleType === BattleType.TRAINER) { + if (globalScene.currentBattle.double) { + return i18next.t("battle:trainerAppearedDouble", { trainerName: globalScene.currentBattle.trainer?.getName(TrainerSlot.NONE, true) }); } else { - return i18next.t("battle:trainerAppeared", { trainerName: this.scene.currentBattle.trainer?.getName(TrainerSlot.NONE, true) }); + return i18next.t("battle:trainerAppeared", { trainerName: globalScene.currentBattle.trainer?.getName(TrainerSlot.NONE, true) }); } } @@ -316,75 +345,75 @@ export class EncounterPhase extends BattlePhase { } doEncounterCommon(showEncounterMessage: boolean = true) { - const enemyField = this.scene.getEnemyField(); + const enemyField = globalScene.getEnemyField(); - if (this.scene.currentBattle.battleType === BattleType.WILD) { + if (globalScene.currentBattle.battleType === BattleType.WILD) { enemyField.forEach(enemyPokemon => { enemyPokemon.untint(100, "Sine.easeOut"); enemyPokemon.cry(); enemyPokemon.showInfo(); if (enemyPokemon.isShiny()) { - this.scene.validateAchv(achvs.SEE_SHINY); + globalScene.validateAchv(achvs.SEE_SHINY); } }); - this.scene.updateFieldScale(); + globalScene.updateFieldScale(); if (showEncounterMessage) { - this.scene.ui.showText(this.getEncounterMessage(), null, () => this.end(), 1500); + globalScene.ui.showText(this.getEncounterMessage(), null, () => this.end(), 1500); } else { this.end(); } - } else if (this.scene.currentBattle.battleType === BattleType.TRAINER) { - const trainer = this.scene.currentBattle.trainer; + } else if (globalScene.currentBattle.battleType === BattleType.TRAINER) { + const trainer = globalScene.currentBattle.trainer; trainer?.untint(100, "Sine.easeOut"); trainer?.playAnim(); const doSummon = () => { - this.scene.currentBattle.started = true; - this.scene.playBgm(undefined); - this.scene.pbTray.showPbTray(this.scene.getPlayerParty()); - this.scene.pbTrayEnemy.showPbTray(this.scene.getEnemyParty()); + globalScene.currentBattle.started = true; + globalScene.playBgm(undefined); + globalScene.pbTray.showPbTray(globalScene.getPlayerParty()); + globalScene.pbTrayEnemy.showPbTray(globalScene.getEnemyParty()); const doTrainerSummon = () => { this.hideEnemyTrainer(); - const availablePartyMembers = this.scene.getEnemyParty().filter(p => !p.isFainted()).length; - this.scene.unshiftPhase(new SummonPhase(this.scene, 0, false)); - if (this.scene.currentBattle.double && availablePartyMembers > 1) { - this.scene.unshiftPhase(new SummonPhase(this.scene, 1, false)); + const availablePartyMembers = globalScene.getEnemyParty().filter(p => !p.isFainted()).length; + globalScene.unshiftPhase(new SummonPhase(0, false)); + if (globalScene.currentBattle.double && availablePartyMembers > 1) { + globalScene.unshiftPhase(new SummonPhase(1, false)); } this.end(); }; if (showEncounterMessage) { - this.scene.ui.showText(this.getEncounterMessage(), null, doTrainerSummon, 1500, true); + globalScene.ui.showText(this.getEncounterMessage(), null, doTrainerSummon, 1500, true); } else { doTrainerSummon(); } }; - const encounterMessages = this.scene.currentBattle.trainer?.getEncounterMessages(); + const encounterMessages = globalScene.currentBattle.trainer?.getEncounterMessages(); if (!encounterMessages?.length) { doSummon(); } else { let message: string; - this.scene.executeWithSeedOffset(() => message = randSeedItem(encounterMessages), this.scene.currentBattle.waveIndex); + globalScene.executeWithSeedOffset(() => message = randSeedItem(encounterMessages), globalScene.currentBattle.waveIndex); message = message!; // tell TS compiler it's defined now const showDialogueAndSummon = () => { - this.scene.ui.showDialogue(message, trainer?.getName(TrainerSlot.NONE, true), null, () => { - this.scene.charSprite.hide().then(() => this.scene.hideFieldOverlay(250).then(() => doSummon())); + globalScene.ui.showDialogue(message, trainer?.getName(TrainerSlot.NONE, true), null, () => { + globalScene.charSprite.hide().then(() => globalScene.hideFieldOverlay(250).then(() => doSummon())); }); }; - if (this.scene.currentBattle.trainer?.config.hasCharSprite && !this.scene.ui.shouldSkipDialogue(message)) { - this.scene.showFieldOverlay(500).then(() => this.scene.charSprite.showCharacter(trainer?.getKey()!, getCharVariantFromDialogue(encounterMessages[0])).then(() => showDialogueAndSummon())); // TODO: is this bang correct? + if (globalScene.currentBattle.trainer?.config.hasCharSprite && !globalScene.ui.shouldSkipDialogue(message)) { + globalScene.showFieldOverlay(500).then(() => globalScene.charSprite.showCharacter(trainer?.getKey()!, getCharVariantFromDialogue(encounterMessages[0])).then(() => showDialogueAndSummon())); // TODO: is this bang correct? } else { showDialogueAndSummon(); } } - } else if (this.scene.currentBattle.isBattleMysteryEncounter() && this.scene.currentBattle.mysteryEncounter) { - const encounter = this.scene.currentBattle.mysteryEncounter; + } else if (globalScene.currentBattle.isBattleMysteryEncounter() && globalScene.currentBattle.mysteryEncounter) { + const encounter = globalScene.currentBattle.mysteryEncounter; const introVisuals = encounter.introVisuals; introVisuals?.playAnim(); if (encounter.onVisualsStart) { - encounter.onVisualsStart(this.scene); + encounter.onVisualsStart(); } else if (encounter.spriteConfigs && introVisuals) { // If the encounter doesn't have any special visual intro, show sparkle for shiny Pokemon introVisuals.playShinySparkles(); @@ -392,10 +421,10 @@ export class EncounterPhase extends BattlePhase { const doEncounter = () => { const doShowEncounterOptions = () => { - this.scene.ui.clearText(); - this.scene.ui.getMessageHandler().hideNameText(); + globalScene.ui.clearText(); + globalScene.ui.getMessageHandler().hideNameText(); - this.scene.unshiftPhase(new MysteryEncounterPhase(this.scene)); + globalScene.unshiftPhase(new MysteryEncounterPhase()); this.end(); }; @@ -409,13 +438,13 @@ export class EncounterPhase extends BattlePhase { const showNextDialogue = () => { const nextAction = i === introDialogue.length - 1 ? doShowEncounterOptions : showNextDialogue; const dialogue = introDialogue[i]; - const title = getEncounterText(this.scene, dialogue?.speaker); - const text = getEncounterText(this.scene, dialogue.text)!; + const title = getEncounterText(dialogue?.speaker); + const text = getEncounterText(dialogue.text)!; i++; if (title) { - this.scene.ui.showDialogue(text, title, null, nextAction, 0, i === 1 ? FIRST_DIALOGUE_PROMPT_DELAY : 0); + globalScene.ui.showDialogue(text, title, null, nextAction, 0, i === 1 ? FIRST_DIALOGUE_PROMPT_DELAY : 0); } else { - this.scene.ui.showText(text, null, nextAction, i === 1 ? FIRST_DIALOGUE_PROMPT_DELAY : 0, true); + globalScene.ui.showText(text, null, nextAction, i === 1 ? FIRST_DIALOGUE_PROMPT_DELAY : 0, true); } }; @@ -433,110 +462,110 @@ export class EncounterPhase extends BattlePhase { if (!encounterMessage) { doEncounter(); } else { - doTrainerExclamation(this.scene); - this.scene.ui.showDialogue(encounterMessage, "???", null, () => { - this.scene.charSprite.hide().then(() => this.scene.hideFieldOverlay(250).then(() => doEncounter())); + doTrainerExclamation(); + globalScene.ui.showDialogue(encounterMessage, "???", null, () => { + globalScene.charSprite.hide().then(() => globalScene.hideFieldOverlay(250).then(() => doEncounter())); }); } } } end() { - const enemyField = this.scene.getEnemyField(); + const enemyField = globalScene.getEnemyField(); enemyField.forEach((enemyPokemon, e) => { if (enemyPokemon.isShiny()) { - this.scene.unshiftPhase(new ShinySparklePhase(this.scene, BattlerIndex.ENEMY + e)); + globalScene.unshiftPhase(new ShinySparklePhase(BattlerIndex.ENEMY + e)); } /** This sets Eternatus' held item to be untransferrable, preventing it from being stolen */ - if (enemyPokemon.species.speciesId === Species.ETERNATUS && (this.scene.gameMode.isBattleClassicFinalBoss(this.scene.currentBattle.waveIndex) || this.scene.gameMode.isEndlessMajorBoss(this.scene.currentBattle.waveIndex))) { - const enemyMBH = this.scene.findModifier(m => m instanceof TurnHeldItemTransferModifier, false) as TurnHeldItemTransferModifier; + if (enemyPokemon.species.speciesId === Species.ETERNATUS && (globalScene.gameMode.isBattleClassicFinalBoss(globalScene.currentBattle.waveIndex) || globalScene.gameMode.isEndlessMajorBoss(globalScene.currentBattle.waveIndex))) { + const enemyMBH = globalScene.findModifier(m => m instanceof TurnHeldItemTransferModifier, false) as TurnHeldItemTransferModifier; if (enemyMBH) { - this.scene.removeModifier(enemyMBH, true); + globalScene.removeModifier(enemyMBH, true); enemyMBH.setTransferrableFalse(); - this.scene.addEnemyModifier(enemyMBH); + globalScene.addEnemyModifier(enemyMBH); } } }); - if (![ BattleType.TRAINER, BattleType.MYSTERY_ENCOUNTER ].includes(this.scene.currentBattle.battleType)) { - enemyField.map(p => this.scene.pushConditionalPhase(new PostSummonPhase(this.scene, p.getBattlerIndex()), () => { + if (![ BattleType.TRAINER, BattleType.MYSTERY_ENCOUNTER ].includes(globalScene.currentBattle.battleType)) { + enemyField.map(p => globalScene.pushConditionalPhase(new PostSummonPhase(p.getBattlerIndex()), () => { // if there is not a player party, we can't continue - if (!this.scene.getPlayerParty().length) { + if (!globalScene.getPlayerParty().length) { return false; } // how many player pokemon are on the field ? - const pokemonsOnFieldCount = this.scene.getPlayerParty().filter(p => p.isOnField()).length; + const pokemonsOnFieldCount = globalScene.getPlayerParty().filter(p => p.isOnField()).length; // if it's a 2vs1, there will never be a 2nd pokemon on our field even - const requiredPokemonsOnField = Math.min(this.scene.getPlayerParty().filter((p) => !p.isFainted()).length, 2); + const requiredPokemonsOnField = Math.min(globalScene.getPlayerParty().filter((p) => !p.isFainted()).length, 2); // if it's a double, there should be 2, otherwise 1 - if (this.scene.currentBattle.double) { + if (globalScene.currentBattle.double) { return pokemonsOnFieldCount === requiredPokemonsOnField; } return pokemonsOnFieldCount === 1; })); - const ivScannerModifier = this.scene.findModifier(m => m instanceof IvScannerModifier); + const ivScannerModifier = globalScene.findModifier(m => m instanceof IvScannerModifier); if (ivScannerModifier) { - enemyField.map(p => this.scene.pushPhase(new ScanIvsPhase(this.scene, p.getBattlerIndex(), Math.min(ivScannerModifier.getStackCount() * 2, 6)))); + enemyField.map(p => globalScene.pushPhase(new ScanIvsPhase(p.getBattlerIndex()))); } } if (!this.loaded) { - const availablePartyMembers = this.scene.getPokemonAllowedInBattle(); + const availablePartyMembers = globalScene.getPokemonAllowedInBattle(); if (!availablePartyMembers[0].isOnField()) { - this.scene.pushPhase(new SummonPhase(this.scene, 0)); + globalScene.pushPhase(new SummonPhase(0)); } - if (this.scene.currentBattle.double) { + if (globalScene.currentBattle.double) { if (availablePartyMembers.length > 1) { - this.scene.pushPhase(new ToggleDoublePositionPhase(this.scene, true)); + globalScene.pushPhase(new ToggleDoublePositionPhase(true)); if (!availablePartyMembers[1].isOnField()) { - this.scene.pushPhase(new SummonPhase(this.scene, 1)); + globalScene.pushPhase(new SummonPhase(1)); } } } else { if (availablePartyMembers.length > 1 && availablePartyMembers[1].isOnField()) { - this.scene.pushPhase(new ReturnPhase(this.scene, 1)); + globalScene.pushPhase(new ReturnPhase(1)); } - this.scene.pushPhase(new ToggleDoublePositionPhase(this.scene, false)); + globalScene.pushPhase(new ToggleDoublePositionPhase(false)); } - if (this.scene.currentBattle.battleType !== BattleType.TRAINER && (this.scene.currentBattle.waveIndex > 1 || !this.scene.gameMode.isDaily)) { - const minPartySize = this.scene.currentBattle.double ? 2 : 1; + if (globalScene.currentBattle.battleType !== BattleType.TRAINER && (globalScene.currentBattle.waveIndex > 1 || !globalScene.gameMode.isDaily)) { + const minPartySize = globalScene.currentBattle.double ? 2 : 1; if (availablePartyMembers.length > minPartySize) { - this.scene.pushPhase(new CheckSwitchPhase(this.scene, 0, this.scene.currentBattle.double)); - if (this.scene.currentBattle.double) { - this.scene.pushPhase(new CheckSwitchPhase(this.scene, 1, this.scene.currentBattle.double)); + globalScene.pushPhase(new CheckSwitchPhase(0, globalScene.currentBattle.double)); + if (globalScene.currentBattle.double) { + globalScene.pushPhase(new CheckSwitchPhase(1, globalScene.currentBattle.double)); } } } } - handleTutorial(this.scene, Tutorial.Access_Menu).then(() => super.end()); + handleTutorial(Tutorial.Access_Menu).then(() => super.end()); } tryOverrideForBattleSpec(): boolean { - switch (this.scene.currentBattle.battleSpec) { + switch (globalScene.currentBattle.battleSpec) { case BattleSpec.FINAL_BOSS: - const enemy = this.scene.getEnemyPokemon(); - this.scene.ui.showText(this.getEncounterMessage(), null, () => { + const enemy = globalScene.getEnemyPokemon(); + globalScene.ui.showText(this.getEncounterMessage(), null, () => { const localizationKey = "battleSpecDialogue:encounter"; - if (this.scene.ui.shouldSkipDialogue(localizationKey)) { + if (globalScene.ui.shouldSkipDialogue(localizationKey)) { // Logging mirrors logging found in dialogue-ui-handler console.log(`Dialogue ${localizationKey} skipped`); this.doEncounterCommon(false); } else { - const count = 5643853 + this.scene.gameData.gameStats.classicSessionsPlayed; + const count = 5643853 + globalScene.gameData.gameStats.classicSessionsPlayed; // The line below checks if an English ordinal is necessary or not based on whether an entry for encounterLocalizationKey exists in the language or not. const ordinalUsed = !i18next.exists(localizationKey, { fallbackLng: []}) || i18next.resolvedLanguage === "en" ? i18next.t("battleSpecDialogue:key", { count: count, ordinal: true }) : ""; const cycleCount = count.toLocaleString() + ordinalUsed; - const genderIndex = this.scene.gameData.gender ?? PlayerGender.UNSET; + const genderIndex = globalScene.gameData.gender ?? PlayerGender.UNSET; const genderStr = PlayerGender[genderIndex].toLowerCase(); const encounterDialogue = i18next.t(localizationKey, { context: genderStr, cycleCount: cycleCount }); - if (!this.scene.gameData.getSeenDialogues()[localizationKey]) { - this.scene.gameData.saveSeenDialogue(localizationKey); + if (!globalScene.gameData.getSeenDialogues()[localizationKey]) { + globalScene.gameData.saveSeenDialogue(localizationKey); } - this.scene.ui.showDialogue(encounterDialogue, enemy?.species.name, null, () => { + globalScene.ui.showDialogue(encounterDialogue, enemy?.species.name, null, () => { this.doEncounterCommon(false); }); } @@ -556,7 +585,7 @@ export class EncounterPhase extends BattlePhase { */ trySetWeatherIfNewBiome(): void { if (!this.loaded) { - this.scene.arena.trySetWeather(getRandomWeatherType(this.scene.arena), false); + globalScene.arena.trySetWeather(getRandomWeatherType(globalScene.arena), false); } } } diff --git a/src/phases/end-card-phase.ts b/src/phases/end-card-phase.ts index 274a745017a..4615a60e661 100644 --- a/src/phases/end-card-phase.ts +++ b/src/phases/end-card-phase.ts @@ -1,4 +1,4 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { PlayerGender } from "#app/enums/player-gender"; import { Phase } from "#app/phase"; import { addTextObject, TextStyle } from "#app/ui/text"; @@ -8,31 +8,31 @@ export class EndCardPhase extends Phase { public endCard: Phaser.GameObjects.Image; public text: Phaser.GameObjects.Text; - constructor(scene: BattleScene) { - super(scene); + constructor() { + super(); } start(): void { super.start(); - this.scene.ui.getMessageHandler().bg.setVisible(false); - this.scene.ui.getMessageHandler().nameBoxContainer.setVisible(false); + globalScene.ui.getMessageHandler().bg.setVisible(false); + globalScene.ui.getMessageHandler().nameBoxContainer.setVisible(false); - this.endCard = this.scene.add.image(0, 0, `end_${this.scene.gameData.gender === PlayerGender.FEMALE ? "f" : "m"}`); + this.endCard = globalScene.add.image(0, 0, `end_${globalScene.gameData.gender === PlayerGender.FEMALE ? "f" : "m"}`); this.endCard.setOrigin(0); this.endCard.setScale(0.5); - this.scene.field.add(this.endCard); + globalScene.field.add(this.endCard); - this.text = addTextObject(this.scene, this.scene.game.canvas.width / 12, (this.scene.game.canvas.height / 6) - 16, i18next.t("battle:congratulations"), TextStyle.SUMMARY, { fontSize: "128px" }); + this.text = addTextObject(globalScene.game.canvas.width / 12, (globalScene.game.canvas.height / 6) - 16, i18next.t("battle:congratulations"), TextStyle.SUMMARY, { fontSize: "128px" }); this.text.setOrigin(0.5); - this.scene.field.add(this.text); + globalScene.field.add(this.text); - this.scene.ui.clearText(); + globalScene.ui.clearText(); - this.scene.ui.fadeIn(1000).then(() => { + globalScene.ui.fadeIn(1000).then(() => { - this.scene.ui.showText("", null, () => { - this.scene.ui.getMessageHandler().bg.setVisible(true); + globalScene.ui.showText("", null, () => { + globalScene.ui.getMessageHandler().bg.setVisible(true); this.end(); }, null, true); }); diff --git a/src/phases/end-evolution-phase.ts b/src/phases/end-evolution-phase.ts index 8a6ce52553d..58e2e203482 100644 --- a/src/phases/end-evolution-phase.ts +++ b/src/phases/end-evolution-phase.ts @@ -1,16 +1,16 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { Phase } from "#app/phase"; import { Mode } from "#app/ui/ui"; export class EndEvolutionPhase extends Phase { - constructor(scene: BattleScene) { - super(scene); + constructor() { + super(); } start() { super.start(); - this.scene.ui.setModeForceTransition(Mode.MESSAGE).then(() => this.end()); + globalScene.ui.setModeForceTransition(Mode.MESSAGE).then(() => this.end()); } } diff --git a/src/phases/enemy-command-phase.ts b/src/phases/enemy-command-phase.ts index 83a85009ae0..429674e7786 100644 --- a/src/phases/enemy-command-phase.ts +++ b/src/phases/enemy-command-phase.ts @@ -1,4 +1,4 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { BattlerIndex } from "#app/battle"; import { Command } from "#app/ui/command-ui-handler"; import { FieldPhase } from "./field-phase"; @@ -15,14 +15,14 @@ import { BattlerTagType } from "#enums/battler-tag-type"; * @see {@linkcode EnemyPokemon.getNextMove} */ export class EnemyCommandPhase extends FieldPhase { - protected fieldIndex: integer; + protected fieldIndex: number; protected skipTurn: boolean = false; - constructor(scene: BattleScene, fieldIndex: integer) { - super(scene); + constructor(fieldIndex: number) { + super(); this.fieldIndex = fieldIndex; - if (this.scene.currentBattle.mysteryEncounter?.skipEnemyBattleTurns) { + if (globalScene.currentBattle.mysteryEncounter?.skipEnemyBattleTurns) { this.skipTurn = true; } } @@ -30,9 +30,9 @@ export class EnemyCommandPhase extends FieldPhase { start() { super.start(); - const enemyPokemon = this.scene.getEnemyField()[this.fieldIndex]; + const enemyPokemon = globalScene.getEnemyField()[this.fieldIndex]; - const battle = this.scene.currentBattle; + const battle = globalScene.currentBattle; const trainer = battle.trainer; @@ -81,10 +81,14 @@ export class EnemyCommandPhase extends FieldPhase { /** Select a move to use (and a target to use it against, if applicable) */ const nextMove = enemyPokemon.getNextMove(); - this.scene.currentBattle.turnCommands[this.fieldIndex + BattlerIndex.ENEMY] = + if (trainer && trainer.shouldTera(enemyPokemon)) { + globalScene.currentBattle.preTurnCommands[this.fieldIndex + BattlerIndex.ENEMY] = { command: Command.TERA }; + } + + globalScene.currentBattle.turnCommands[this.fieldIndex + BattlerIndex.ENEMY] = { command: Command.FIGHT, move: nextMove, skip: this.skipTurn }; - this.scene.currentBattle.enemySwitchCounter = Math.max(this.scene.currentBattle.enemySwitchCounter - 1, 0); + globalScene.currentBattle.enemySwitchCounter = Math.max(globalScene.currentBattle.enemySwitchCounter - 1, 0); this.end(); } diff --git a/src/phases/enemy-party-member-pokemon-phase.ts b/src/phases/enemy-party-member-pokemon-phase.ts index bb34f53b475..5c701f7d73a 100644 --- a/src/phases/enemy-party-member-pokemon-phase.ts +++ b/src/phases/enemy-party-member-pokemon-phase.ts @@ -1,10 +1,9 @@ -import BattleScene from "#app/battle-scene"; -import { EnemyPokemon } from "#app/field/pokemon"; +import type { EnemyPokemon } from "#app/field/pokemon"; import { PartyMemberPokemonPhase } from "./party-member-pokemon-phase"; export abstract class EnemyPartyMemberPokemonPhase extends PartyMemberPokemonPhase { - constructor(scene: BattleScene, partyMemberIndex: integer) { - super(scene, partyMemberIndex, false); + constructor(partyMemberIndex: number) { + super(partyMemberIndex, false); } getEnemyPokemon(): EnemyPokemon { diff --git a/src/phases/evolution-phase.ts b/src/phases/evolution-phase.ts index 76e521c9b3d..ea857cac8ba 100644 --- a/src/phases/evolution-phase.ts +++ b/src/phases/evolution-phase.ts @@ -1,12 +1,16 @@ import SoundFade from "phaser3-rex-plugins/plugins/soundfade"; import { Phase } from "#app/phase"; -import BattleScene, { AnySound } from "#app/battle-scene"; -import { FusionSpeciesFormEvolution, SpeciesFormEvolution } from "#app/data/balance/pokemon-evolutions"; -import EvolutionSceneHandler from "#app/ui/evolution-scene-handler"; +import type { AnySound } from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; +import type { SpeciesFormEvolution } from "#app/data/balance/pokemon-evolutions"; +import { FusionSpeciesFormEvolution } from "#app/data/balance/pokemon-evolutions"; +import type EvolutionSceneHandler from "#app/ui/evolution-scene-handler"; import * as Utils from "#app/utils"; import { Mode } from "#app/ui/ui"; import { cos, sin } from "#app/field/anims"; -import Pokemon, { LearnMoveSituation, PlayerPokemon } from "#app/field/pokemon"; +import type { PlayerPokemon } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; +import { LearnMoveSituation } from "#app/field/pokemon"; import { getTypeRgb } from "#app/data/type"; import i18next from "i18next"; import { getPokemonNameWithAffix } from "#app/messages"; @@ -16,7 +20,7 @@ import { EVOLVE_MOVE } from "#app/data/balance/pokemon-level-moves"; export class EvolutionPhase extends Phase { protected pokemon: PlayerPokemon; - protected lastLevel: integer; + protected lastLevel: number; private preEvolvedPokemonName: string; @@ -35,8 +39,8 @@ export class EvolutionPhase extends Phase { protected pokemonEvoSprite: Phaser.GameObjects.Sprite; protected pokemonEvoTintSprite: Phaser.GameObjects.Sprite; - constructor(scene: BattleScene, pokemon: PlayerPokemon, evolution: SpeciesFormEvolution | null, lastLevel: integer) { - super(scene); + constructor(pokemon: PlayerPokemon, evolution: SpeciesFormEvolution | null, lastLevel: number) { + super(); this.pokemon = pokemon; this.evolution = evolution; @@ -49,7 +53,7 @@ export class EvolutionPhase extends Phase { } setMode(): Promise { - return this.scene.ui.setModeForceTransition(Mode.EVOLUTION_SCENE); + return globalScene.ui.setModeForceTransition(Mode.EVOLUTION_SCENE); } start() { @@ -61,30 +65,30 @@ export class EvolutionPhase extends Phase { return this.end(); } - this.scene.fadeOutBgm(undefined, false); + globalScene.fadeOutBgm(undefined, false); - this.evolutionHandler = this.scene.ui.getHandler() as EvolutionSceneHandler; + this.evolutionHandler = globalScene.ui.getHandler() as EvolutionSceneHandler; this.evolutionContainer = this.evolutionHandler.evolutionContainer; - this.evolutionBaseBg = this.scene.add.image(0, 0, "default_bg"); + this.evolutionBaseBg = globalScene.add.image(0, 0, "default_bg"); this.evolutionBaseBg.setOrigin(0, 0); this.evolutionContainer.add(this.evolutionBaseBg); - this.evolutionBg = this.scene.add.video(0, 0, "evo_bg").stop(); + this.evolutionBg = globalScene.add.video(0, 0, "evo_bg").stop(); this.evolutionBg.setOrigin(0, 0); this.evolutionBg.setScale(0.4359673025); this.evolutionBg.setVisible(false); this.evolutionContainer.add(this.evolutionBg); - this.evolutionBgOverlay = this.scene.add.rectangle(0, 0, this.scene.game.canvas.width / 6, this.scene.game.canvas.height / 6, 0x262626); + this.evolutionBgOverlay = globalScene.add.rectangle(0, 0, globalScene.game.canvas.width / 6, globalScene.game.canvas.height / 6, 0x262626); this.evolutionBgOverlay.setOrigin(0, 0); this.evolutionBgOverlay.setAlpha(0); this.evolutionContainer.add(this.evolutionBgOverlay); const getPokemonSprite = () => { - const ret = this.scene.addPokemonSprite(this.pokemon, this.evolutionBaseBg.displayWidth / 2, this.evolutionBaseBg.displayHeight / 2, "pkmn__sub"); - ret.setPipeline(this.scene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], ignoreTimeTint: true }); + const ret = globalScene.addPokemonSprite(this.pokemon, this.evolutionBaseBg.displayWidth / 2, this.evolutionBaseBg.displayHeight / 2, "pkmn__sub"); + ret.setPipeline(globalScene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], ignoreTimeTint: true }); return ret; }; @@ -99,10 +103,10 @@ export class EvolutionPhase extends Phase { this.pokemonEvoTintSprite.setVisible(false); this.pokemonEvoTintSprite.setTintFill(0xFFFFFF); - this.evolutionOverlay = this.scene.add.rectangle(0, -this.scene.game.canvas.height / 6, this.scene.game.canvas.width / 6, (this.scene.game.canvas.height / 6) - 48, 0xFFFFFF); + this.evolutionOverlay = globalScene.add.rectangle(0, -globalScene.game.canvas.height / 6, globalScene.game.canvas.width / 6, (globalScene.game.canvas.height / 6) - 48, 0xFFFFFF); this.evolutionOverlay.setOrigin(0, 0); this.evolutionOverlay.setAlpha(0); - this.scene.ui.add(this.evolutionOverlay); + globalScene.ui.add(this.evolutionOverlay); [ this.pokemonSprite, this.pokemonTintSprite, this.pokemonEvoSprite, this.pokemonEvoTintSprite ].map(sprite => { const spriteKey = this.pokemon.getSpriteKey(true); @@ -112,7 +116,7 @@ export class EvolutionPhase extends Phase { console.error(`Failed to play animation for ${spriteKey}`, err); } - sprite.setPipeline(this.scene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], hasShadow: false, teraColor: getTypeRgb(this.pokemon.getTeraType()) }); + sprite.setPipeline(globalScene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], hasShadow: false, teraColor: getTypeRgb(this.pokemon.getTeraType()), isTerastallized: this.pokemon.isTerastallized }); sprite.setPipelineData("ignoreTimeTint", true); sprite.setPipelineData("spriteKey", this.pokemon.getSpriteKey()); sprite.setPipelineData("shiny", this.pokemon.shiny); @@ -130,7 +134,7 @@ export class EvolutionPhase extends Phase { } doEvolution(): void { - this.scene.ui.showText(i18next.t("menu:evolving", { pokemonName: this.preEvolvedPokemonName }), null, () => { + globalScene.ui.showText(i18next.t("menu:evolving", { pokemonName: this.preEvolvedPokemonName }), null, () => { this.pokemon.cry(); this.pokemon.getPossibleEvolution(this.evolution).then(evolvedPokemon => { @@ -155,17 +159,17 @@ export class EvolutionPhase extends Phase { }); }); - this.scene.time.delayedCall(1000, () => { - this.evolutionBgm = this.scene.playSoundWithoutBgm("evolution"); - this.scene.tweens.add({ + globalScene.time.delayedCall(1000, () => { + this.evolutionBgm = globalScene.playSoundWithoutBgm("evolution"); + globalScene.tweens.add({ targets: this.evolutionBgOverlay, alpha: 1, delay: 500, duration: 1500, ease: "Sine.easeOut", onComplete: () => { - this.scene.time.delayedCall(1000, () => { - this.scene.tweens.add({ + globalScene.time.delayedCall(1000, () => { + globalScene.tweens.add({ targets: this.evolutionBgOverlay, alpha: 0, duration: 250 @@ -173,9 +177,9 @@ export class EvolutionPhase extends Phase { this.evolutionBg.setVisible(true); this.evolutionBg.play(); }); - this.scene.playSound("se/charge"); + globalScene.playSound("se/charge"); this.doSpiralUpward(); - this.scene.tweens.addCounter({ + globalScene.tweens.addCounter({ from: 0, to: 1, duration: 2000, @@ -184,10 +188,10 @@ export class EvolutionPhase extends Phase { }, onComplete: () => { this.pokemonSprite.setVisible(false); - this.scene.time.delayedCall(1100, () => { - this.scene.playSound("se/beam"); + globalScene.time.delayedCall(1100, () => { + globalScene.playSound("se/beam"); this.doArcDownward(); - this.scene.time.delayedCall(1500, () => { + globalScene.time.delayedCall(1500, () => { this.pokemonEvoTintSprite.setScale(0.25); this.pokemonEvoTintSprite.setVisible(true); this.evolutionHandler.canCancel = true; @@ -216,7 +220,7 @@ export class EvolutionPhase extends Phase { private handleFailedEvolution(evolvedPokemon: Pokemon): void { this.pokemonSprite.setVisible(true); this.pokemonTintSprite.setScale(1); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: [ this.evolutionBg, this.pokemonTintSprite, this.pokemonEvoSprite, this.pokemonEvoTintSprite ], alpha: 0, duration: 250, @@ -225,25 +229,25 @@ export class EvolutionPhase extends Phase { } }); - SoundFade.fadeOut(this.scene, this.evolutionBgm, 100); + SoundFade.fadeOut(globalScene, this.evolutionBgm, 100); - this.scene.unshiftPhase(new EndEvolutionPhase(this.scene)); + globalScene.unshiftPhase(new EndEvolutionPhase()); - this.scene.ui.showText(i18next.t("menu:stoppedEvolving", { pokemonName: this.preEvolvedPokemonName }), null, () => { - this.scene.ui.showText(i18next.t("menu:pauseEvolutionsQuestion", { pokemonName: this.preEvolvedPokemonName }), null, () => { + globalScene.ui.showText(i18next.t("menu:stoppedEvolving", { pokemonName: this.preEvolvedPokemonName }), null, () => { + globalScene.ui.showText(i18next.t("menu:pauseEvolutionsQuestion", { pokemonName: this.preEvolvedPokemonName }), null, () => { const end = () => { - this.scene.ui.showText("", 0); - this.scene.playBgm(); + globalScene.ui.showText("", 0); + globalScene.playBgm(); evolvedPokemon.destroy(); this.end(); }; - this.scene.ui.setOverlayMode(Mode.CONFIRM, () => { - this.scene.ui.revertMode(); + globalScene.ui.setOverlayMode(Mode.CONFIRM, () => { + globalScene.ui.revertMode(); this.pokemon.pauseEvolutions = true; - this.scene.ui.showText(i18next.t("menu:evolutionsPaused", { pokemonName: this.preEvolvedPokemonName }), null, end, 3000); + globalScene.ui.showText(i18next.t("menu:evolutionsPaused", { pokemonName: this.preEvolvedPokemonName }), null, end, 3000); }, () => { - this.scene.ui.revertMode(); - this.scene.time.delayedCall(3000, end); + globalScene.ui.revertMode(); + globalScene.time.delayedCall(3000, end); }); }); }, null, true); @@ -254,38 +258,38 @@ export class EvolutionPhase extends Phase { * @param evolvedPokemon - The evolved Pokemon */ private handleSuccessEvolution(evolvedPokemon: Pokemon): void { - this.scene.playSound("se/sparkle"); + globalScene.playSound("se/sparkle"); this.pokemonEvoSprite.setVisible(true); this.doCircleInward(); const onEvolutionComplete = () => { - SoundFade.fadeOut(this.scene, this.evolutionBgm, 100); - this.scene.time.delayedCall(250, () => { + SoundFade.fadeOut(globalScene, this.evolutionBgm, 100); + globalScene.time.delayedCall(250, () => { this.pokemon.cry(); - this.scene.time.delayedCall(1250, () => { - this.scene.playSoundWithoutBgm("evolution_fanfare"); + globalScene.time.delayedCall(1250, () => { + globalScene.playSoundWithoutBgm("evolution_fanfare"); evolvedPokemon.destroy(); - this.scene.ui.showText(i18next.t("menu:evolutionDone", { pokemonName: this.preEvolvedPokemonName, evolvedPokemonName: this.pokemon.name }), null, () => this.end(), null, true, Utils.fixedInt(4000)); - this.scene.time.delayedCall(Utils.fixedInt(4250), () => this.scene.playBgm()); + globalScene.ui.showText(i18next.t("menu:evolutionDone", { pokemonName: this.preEvolvedPokemonName, evolvedPokemonName: this.pokemon.species.getExpandedSpeciesName() }), null, () => this.end(), null, true, Utils.fixedInt(4000)); + globalScene.time.delayedCall(Utils.fixedInt(4250), () => globalScene.playBgm()); }); }); }; - this.scene.time.delayedCall(900, () => { + globalScene.time.delayedCall(900, () => { this.evolutionHandler.canCancel = false; this.pokemon.evolve(this.evolution, this.pokemon.species).then(() => { const learnSituation: LearnMoveSituation = this.fusionSpeciesEvolved ? LearnMoveSituation.EVOLUTION_FUSED : this.pokemon.fusionSpecies ? LearnMoveSituation.EVOLUTION_FUSED_BASE : LearnMoveSituation.EVOLUTION; const levelMoves = this.pokemon.getLevelMoves(this.lastLevel + 1, true, false, false, learnSituation).filter(lm => lm[0] === EVOLVE_MOVE); for (const lm of levelMoves) { - this.scene.unshiftPhase(new LearnMovePhase(this.scene, this.scene.getPlayerParty().indexOf(this.pokemon), lm[1])); + globalScene.unshiftPhase(new LearnMovePhase(globalScene.getPlayerParty().indexOf(this.pokemon), lm[1])); } - this.scene.unshiftPhase(new EndEvolutionPhase(this.scene)); + globalScene.unshiftPhase(new EndEvolutionPhase()); - this.scene.playSound("se/shine"); + globalScene.playSound("se/shine"); this.doSpray(); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.evolutionOverlay, alpha: 1, duration: 250, @@ -293,14 +297,14 @@ export class EvolutionPhase extends Phase { onComplete: () => { this.evolutionBgOverlay.setAlpha(1); this.evolutionBg.setVisible(false); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: [ this.evolutionOverlay, this.pokemonEvoTintSprite ], alpha: 0, duration: 2000, delay: 150, easing: "Sine.easeIn", onComplete: () => { - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.evolutionBgOverlay, alpha: 0, duration: 250, @@ -317,7 +321,7 @@ export class EvolutionPhase extends Phase { doSpiralUpward() { let f = 0; - this.scene.tweens.addCounter({ + globalScene.tweens.addCounter({ repeat: 64, duration: Utils.getFrameMs(1), onRepeat: () => { @@ -336,7 +340,7 @@ export class EvolutionPhase extends Phase { doArcDownward() { let f = 0; - this.scene.tweens.addCounter({ + globalScene.tweens.addCounter({ repeat: 96, duration: Utils.getFrameMs(1), onRepeat: () => { @@ -352,17 +356,17 @@ export class EvolutionPhase extends Phase { }); } - doCycle(l: number, lastCycle: integer = 15): Promise { + doCycle(l: number, lastCycle: number = 15): Promise { return new Promise(resolve => { const isLastCycle = l === lastCycle; - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.pokemonTintSprite, scale: 0.25, ease: "Cubic.easeInOut", duration: 500 / l, yoyo: !isLastCycle }); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.pokemonEvoTintSprite, scale: 1, ease: "Cubic.easeInOut", @@ -386,7 +390,7 @@ export class EvolutionPhase extends Phase { doCircleInward() { let f = 0; - this.scene.tweens.addCounter({ + globalScene.tweens.addCounter({ repeat: 48, duration: Utils.getFrameMs(1), onRepeat: () => { @@ -407,7 +411,7 @@ export class EvolutionPhase extends Phase { doSpray() { let f = 0; - this.scene.tweens.addCounter({ + globalScene.tweens.addCounter({ repeat: 48, duration: Utils.getFrameMs(1), onRepeat: () => { @@ -423,15 +427,15 @@ export class EvolutionPhase extends Phase { }); } - doSpiralUpwardParticle(trigIndex: integer) { + doSpiralUpwardParticle(trigIndex: number) { const initialX = this.evolutionBaseBg.displayWidth / 2; - const particle = this.scene.add.image(initialX, 0, "evo_sparkle"); + const particle = globalScene.add.image(initialX, 0, "evo_sparkle"); this.evolutionContainer.add(particle); let f = 0; let amp = 48; - const particleTimer = this.scene.tweens.addCounter({ + const particleTimer = globalScene.tweens.addCounter({ repeat: -1, duration: Utils.getFrameMs(1), onRepeat: () => { @@ -459,16 +463,16 @@ export class EvolutionPhase extends Phase { updateParticle(); } - doArcDownParticle(trigIndex: integer) { + doArcDownParticle(trigIndex: number) { const initialX = this.evolutionBaseBg.displayWidth / 2; - const particle = this.scene.add.image(initialX, 0, "evo_sparkle"); + const particle = globalScene.add.image(initialX, 0, "evo_sparkle"); particle.setScale(0.5); this.evolutionContainer.add(particle); let f = 0; let amp = 8; - const particleTimer = this.scene.tweens.addCounter({ + const particleTimer = globalScene.tweens.addCounter({ repeat: -1, duration: Utils.getFrameMs(1), onRepeat: () => { @@ -492,15 +496,15 @@ export class EvolutionPhase extends Phase { updateParticle(); } - doCircleInwardParticle(trigIndex: integer, speed: integer) { + doCircleInwardParticle(trigIndex: number, speed: number) { const initialX = this.evolutionBaseBg.displayWidth / 2; const initialY = this.evolutionBaseBg.displayHeight / 2; - const particle = this.scene.add.image(initialX, initialY, "evo_sparkle"); + const particle = globalScene.add.image(initialX, initialY, "evo_sparkle"); this.evolutionContainer.add(particle); let amp = 120; - const particleTimer = this.scene.tweens.addCounter({ + const particleTimer = globalScene.tweens.addCounter({ repeat: -1, duration: Utils.getFrameMs(1), onRepeat: () => { @@ -524,10 +528,10 @@ export class EvolutionPhase extends Phase { updateParticle(); } - doSprayParticle(trigIndex: integer) { + doSprayParticle(trigIndex: number) { const initialX = this.evolutionBaseBg.displayWidth / 2; const initialY = this.evolutionBaseBg.displayHeight / 2; - const particle = this.scene.add.image(initialX, initialY, "evo_sparkle"); + const particle = globalScene.add.image(initialX, initialY, "evo_sparkle"); this.evolutionContainer.add(particle); let f = 0; @@ -535,7 +539,7 @@ export class EvolutionPhase extends Phase { const speed = 3 - Utils.randInt(8); const amp = 48 + Utils.randInt(64); - const particleTimer = this.scene.tweens.addCounter({ + const particleTimer = globalScene.tweens.addCounter({ repeat: -1, duration: Utils.getFrameMs(1), onRepeat: () => { diff --git a/src/phases/exp-phase.ts b/src/phases/exp-phase.ts index 81982980d2a..7cf953851a1 100644 --- a/src/phases/exp-phase.ts +++ b/src/phases/exp-phase.ts @@ -1,4 +1,4 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { getPokemonNameWithAffix } from "#app/messages"; import { ExpBoosterModifier } from "#app/modifier/modifier"; import i18next from "i18next"; @@ -9,8 +9,8 @@ import { LevelUpPhase } from "./level-up-phase"; export class ExpPhase extends PlayerPartyMemberPokemonPhase { private expValue: number; - constructor(scene: BattleScene, partyMemberIndex: integer, expValue: number) { - super(scene, partyMemberIndex); + constructor(partyMemberIndex: number, expValue: number) { + super(partyMemberIndex); this.expValue = expValue; } @@ -20,14 +20,14 @@ export class ExpPhase extends PlayerPartyMemberPokemonPhase { const pokemon = this.getPokemon(); const exp = new Utils.NumberHolder(this.expValue); - this.scene.applyModifiers(ExpBoosterModifier, true, exp); + globalScene.applyModifiers(ExpBoosterModifier, true, exp); exp.value = Math.floor(exp.value); - this.scene.ui.showText(i18next.t("battle:expGain", { pokemonName: getPokemonNameWithAffix(pokemon), exp: exp.value }), null, () => { + globalScene.ui.showText(i18next.t("battle:expGain", { pokemonName: getPokemonNameWithAffix(pokemon), exp: exp.value }), null, () => { const lastLevel = pokemon.level; pokemon.addExp(exp.value); const newLevel = pokemon.level; if (newLevel > lastLevel) { - this.scene.unshiftPhase(new LevelUpPhase(this.scene, this.partyMemberIndex, lastLevel, newLevel)); + globalScene.unshiftPhase(new LevelUpPhase(this.partyMemberIndex, lastLevel, newLevel)); } pokemon.updateInfo().then(() => this.end()); }, null, true); diff --git a/src/phases/faint-phase.ts b/src/phases/faint-phase.ts index a0c10015fbf..f354bc8031e 100644 --- a/src/phases/faint-phase.ts +++ b/src/phases/faint-phase.ts @@ -1,13 +1,17 @@ -import { BattlerIndex, BattleType } from "#app/battle"; -import BattleScene from "#app/battle-scene"; +import type { BattlerIndex } from "#app/battle"; +import { BattleType } from "#app/battle"; +import { globalScene } from "#app/global-scene"; import { applyPostFaintAbAttrs, applyPostKnockOutAbAttrs, applyPostVictoryAbAttrs, PostFaintAbAttr, PostKnockOutAbAttr, PostVictoryAbAttr } from "#app/data/ability"; -import { BattlerTagLapseType, DestinyBondTag, GrudgeTag } from "#app/data/battler-tags"; +import type { DestinyBondTag, GrudgeTag } from "#app/data/battler-tags"; +import { BattlerTagLapseType } from "#app/data/battler-tags"; import { battleSpecDialogue } from "#app/data/dialogue"; import { allMoves, PostVictoryStatStageChangeAttr } from "#app/data/move"; import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms"; import { BattleSpec } from "#app/enums/battle-spec"; import { StatusEffect } from "#app/enums/status-effect"; -import Pokemon, { EnemyPokemon, HitResult, PlayerPokemon, PokemonMove } from "#app/field/pokemon"; +import type { EnemyPokemon } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; +import { HitResult, PlayerPokemon, PokemonMove } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { PokemonInstantReviveModifier } from "#app/modifier/modifier"; import { SwitchType } from "#enums/switch-type"; @@ -43,8 +47,8 @@ export class FaintPhase extends PokemonPhase { */ private source?: Pokemon; - constructor(scene: BattleScene, battlerIndex: BattlerIndex, preventEndure: boolean = false, destinyTag?: DestinyBondTag | null, grudgeTag?: GrudgeTag | null, source?: Pokemon) { - super(scene, battlerIndex); + constructor(battlerIndex: BattlerIndex, preventEndure: boolean = false, destinyTag?: DestinyBondTag | null, grudgeTag?: GrudgeTag | null, source?: Pokemon) { + super(battlerIndex); this.preventEndure = preventEndure; this.destinyTag = destinyTag; @@ -66,20 +70,20 @@ export class FaintPhase extends PokemonPhase { } if (!this.preventEndure) { - const instantReviveModifier = this.scene.applyModifier(PokemonInstantReviveModifier, this.player, faintPokemon) as PokemonInstantReviveModifier; + const instantReviveModifier = globalScene.applyModifier(PokemonInstantReviveModifier, this.player, faintPokemon) as PokemonInstantReviveModifier; if (instantReviveModifier) { faintPokemon.loseHeldItem(instantReviveModifier); - this.scene.updateModifiers(this.player); + globalScene.updateModifiers(this.player); return this.end(); } } /** In case the current pokemon was just switched in, make sure it is counted as participating in the combat */ - this.scene.getPlayerField().forEach((pokemon, i) => { + globalScene.getPlayerField().forEach((pokemon, i) => { if (pokemon?.isActive(true)) { if (pokemon.isPlayer()) { - this.scene.currentBattle.addParticipant(pokemon as PlayerPokemon); + globalScene.currentBattle.addParticipant(pokemon as PlayerPokemon); } } }); @@ -92,30 +96,32 @@ export class FaintPhase extends PokemonPhase { doFaint(): void { const pokemon = this.getPokemon(); - - // Track total times pokemon have been KO'd for supreme overlord/last respects + // Track total times pokemon have been KO'd for Last Respects/Supreme Overlord if (pokemon.isPlayer()) { - this.scene.currentBattle.playerFaints += 1; - this.scene.currentBattle.playerFaintsHistory.push({ pokemon: pokemon, turn: this.scene.currentBattle.turn }); + globalScene.arena.playerFaints += 1; + globalScene.currentBattle.playerFaintsHistory.push({ pokemon: pokemon, turn: globalScene.currentBattle.turn }); } else { - this.scene.currentBattle.enemyFaints += 1; - this.scene.currentBattle.enemyFaintsHistory.push({ pokemon: pokemon, turn: this.scene.currentBattle.turn }); + globalScene.currentBattle.enemyFaints += 1; + globalScene.currentBattle.enemyFaintsHistory.push({ pokemon: pokemon, turn: globalScene.currentBattle.turn }); } - this.scene.queueMessage(i18next.t("battle:fainted", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }), null, true); - this.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeActiveTrigger, true); + globalScene.queueMessage(i18next.t("battle:fainted", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }), null, true); + globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeActiveTrigger, true); + + pokemon.resetTera(); if (pokemon.turnData?.attacksReceived?.length) { const lastAttack = pokemon.turnData.attacksReceived[0]; - applyPostFaintAbAttrs(PostFaintAbAttr, pokemon, this.scene.getPokemonById(lastAttack.sourceId)!, new PokemonMove(lastAttack.move).getMove(), lastAttack.result); // TODO: is this bang correct? + applyPostFaintAbAttrs(PostFaintAbAttr, pokemon, globalScene.getPokemonById(lastAttack.sourceId)!, new PokemonMove(lastAttack.move).getMove(), lastAttack.result); // TODO: is this bang correct? } else { //If killed by indirect damage, apply post-faint abilities without providing a last move applyPostFaintAbAttrs(PostFaintAbAttr, pokemon); } - const alivePlayField = this.scene.getField(true); + const alivePlayField = globalScene.getField(true); alivePlayField.forEach(p => applyPostKnockOutAbAttrs(PostKnockOutAbAttr, p, pokemon)); if (pokemon.turnData?.attacksReceived?.length) { - const defeatSource = this.scene.getPokemonById(pokemon.turnData.attacksReceived[0].sourceId); + const defeatSource = this.source; + if (defeatSource?.isOnField()) { applyPostVictoryAbAttrs(PostVictoryAbAttr, defeatSource); const pvmove = allMoves[pokemon.turnData.attacksReceived[0].move]; @@ -130,39 +136,39 @@ export class FaintPhase extends PokemonPhase { if (this.player) { /** The total number of Pokemon in the player's party that can legally fight */ - const legalPlayerPokemon = this.scene.getPokemonAllowedInBattle(); + const legalPlayerPokemon = globalScene.getPokemonAllowedInBattle(); /** The total number of legal player Pokemon that aren't currently on the field */ const legalPlayerPartyPokemon = legalPlayerPokemon.filter(p => !p.isActive(true)); if (!legalPlayerPokemon.length) { /** If the player doesn't have any legal Pokemon, end the game */ - this.scene.unshiftPhase(new GameOverPhase(this.scene)); - } else if (this.scene.currentBattle.double && legalPlayerPokemon.length === 1 && legalPlayerPartyPokemon.length === 0) { + globalScene.unshiftPhase(new GameOverPhase()); + } else if (globalScene.currentBattle.double && legalPlayerPokemon.length === 1 && legalPlayerPartyPokemon.length === 0) { /** * If the player has exactly one Pokemon in total at this point in a double battle, and that Pokemon * is already on the field, unshift a phase that moves that Pokemon to center position. */ - this.scene.unshiftPhase(new ToggleDoublePositionPhase(this.scene, true)); + globalScene.unshiftPhase(new ToggleDoublePositionPhase(true)); } else if (legalPlayerPartyPokemon.length > 0) { /** * If previous conditions weren't met, and the player has at least 1 legal Pokemon off the field, * push a phase that prompts the player to summon a Pokemon from their party. */ - this.scene.pushPhase(new SwitchPhase(this.scene, SwitchType.SWITCH, this.fieldIndex, true, false)); + globalScene.pushPhase(new SwitchPhase(SwitchType.SWITCH, this.fieldIndex, true, false)); } } else { - this.scene.unshiftPhase(new VictoryPhase(this.scene, this.battlerIndex)); - if ([ BattleType.TRAINER, BattleType.MYSTERY_ENCOUNTER ].includes(this.scene.currentBattle.battleType)) { - const hasReservePartyMember = !!this.scene.getEnemyParty().filter(p => p.isActive() && !p.isOnField() && p.trainerSlot === (pokemon as EnemyPokemon).trainerSlot).length; + globalScene.unshiftPhase(new VictoryPhase(this.battlerIndex)); + if ([ BattleType.TRAINER, BattleType.MYSTERY_ENCOUNTER ].includes(globalScene.currentBattle.battleType)) { + const hasReservePartyMember = !!globalScene.getEnemyParty().filter(p => p.isActive() && !p.isOnField() && p.trainerSlot === (pokemon as EnemyPokemon).trainerSlot).length; if (hasReservePartyMember) { - this.scene.pushPhase(new SwitchSummonPhase(this.scene, SwitchType.SWITCH, this.fieldIndex, -1, false, false)); + globalScene.pushPhase(new SwitchSummonPhase(SwitchType.SWITCH, this.fieldIndex, -1, false, false)); } } } // in double battles redirect potential moves off fainted pokemon - if (this.scene.currentBattle.double) { + if (globalScene.currentBattle.double) { const allyPokemon = pokemon.getAlly(); - this.scene.redirectPokemonMoves(pokemon, allyPokemon); + globalScene.redirectPokemonMoves(pokemon, allyPokemon); } pokemon.faintCry(() => { @@ -170,26 +176,24 @@ export class FaintPhase extends PokemonPhase { pokemon.addFriendship(-FRIENDSHIP_LOSS_FROM_FAINT); } pokemon.hideInfo(); - this.scene.playSound("se/faint"); - this.scene.tweens.add({ + globalScene.playSound("se/faint"); + globalScene.tweens.add({ targets: pokemon, duration: 500, y: pokemon.y + 150, ease: "Sine.easeIn", onComplete: () => { - pokemon.resetSprite(); pokemon.lapseTags(BattlerTagLapseType.FAINT); - this.scene.getField(true).filter(p => p !== pokemon).forEach(p => p.removeTagsBySourceId(pokemon.id)); pokemon.y -= 150; pokemon.trySetStatus(StatusEffect.FAINT); if (pokemon.isPlayer()) { - this.scene.currentBattle.removeFaintedParticipant(pokemon as PlayerPokemon); + globalScene.currentBattle.removeFaintedParticipant(pokemon as PlayerPokemon); } else { - this.scene.addFaintedEnemyScore(pokemon as EnemyPokemon); - this.scene.currentBattle.addPostBattleLoot(pokemon as EnemyPokemon); + globalScene.addFaintedEnemyScore(pokemon as EnemyPokemon); + globalScene.currentBattle.addPostBattleLoot(pokemon as EnemyPokemon); } - this.scene.field.remove(pokemon); + pokemon.leaveField(); this.end(); } }); @@ -197,16 +201,16 @@ export class FaintPhase extends PokemonPhase { } tryOverrideForBattleSpec(): boolean { - switch (this.scene.currentBattle.battleSpec) { + switch (globalScene.currentBattle.battleSpec) { case BattleSpec.FINAL_BOSS: if (!this.player) { const enemy = this.getPokemon(); if (enemy.formIndex) { - this.scene.ui.showDialogue(battleSpecDialogue[BattleSpec.FINAL_BOSS].secondStageWin, enemy.species.name, null, () => this.doFaint()); + globalScene.ui.showDialogue(battleSpecDialogue[BattleSpec.FINAL_BOSS].secondStageWin, enemy.species.name, null, () => this.doFaint()); } else { // Final boss' HP threshold has been bypassed; cancel faint and force check for 2nd phase enemy.hp++; - this.scene.unshiftPhase(new DamageAnimPhase(this.scene, enemy.getBattlerIndex(), 0, HitResult.OTHER)); + globalScene.unshiftPhase(new DamageAnimPhase(enemy.getBattlerIndex(), 0, HitResult.OTHER)); this.end(); } return true; diff --git a/src/phases/field-phase.ts b/src/phases/field-phase.ts index 46c3c4983b4..0836d1171c0 100644 --- a/src/phases/field-phase.ts +++ b/src/phases/field-phase.ts @@ -1,11 +1,12 @@ -import Pokemon from "#app/field/pokemon"; +import { globalScene } from "#app/global-scene"; +import type Pokemon from "#app/field/pokemon"; import { BattlePhase } from "./battle-phase"; type PokemonFunc = (pokemon: Pokemon) => void; export abstract class FieldPhase extends BattlePhase { executeForAll(func: PokemonFunc): void { - const field = this.scene.getField(true).filter(p => p.summonData); + const field = globalScene.getField(true).filter(p => p.summonData); field.forEach(pokemon => func(pokemon)); } } diff --git a/src/phases/form-change-phase.ts b/src/phases/form-change-phase.ts index b042cd98294..353fed7b76c 100644 --- a/src/phases/form-change-phase.ts +++ b/src/phases/form-change-phase.ts @@ -1,10 +1,11 @@ -import BattleScene from "../battle-scene"; +import { globalScene } from "#app/global-scene"; import * as Utils from "../utils"; import { achvs } from "../system/achv"; -import { SpeciesFormChange, getSpeciesFormChangeMessage } from "../data/pokemon-forms"; -import { PlayerPokemon } from "../field/pokemon"; +import type { SpeciesFormChange } from "../data/pokemon-forms"; +import { getSpeciesFormChangeMessage } from "../data/pokemon-forms"; +import type { PlayerPokemon } from "../field/pokemon"; import { Mode } from "../ui/ui"; -import PartyUiHandler from "../ui/party-ui-handler"; +import type PartyUiHandler from "../ui/party-ui-handler"; import { getPokemonNameWithAffix } from "../messages"; import { EndEvolutionPhase } from "./end-evolution-phase"; import { EvolutionPhase } from "./evolution-phase"; @@ -15,8 +16,8 @@ export class FormChangePhase extends EvolutionPhase { private formChange: SpeciesFormChange; private modal: boolean; - constructor(scene: BattleScene, pokemon: PlayerPokemon, formChange: SpeciesFormChange, modal: boolean) { - super(scene, pokemon, null, 0); + constructor(pokemon: PlayerPokemon, formChange: SpeciesFormChange, modal: boolean) { + super(pokemon, null, 0); this.formChange = formChange; this.modal = modal; @@ -30,7 +31,7 @@ export class FormChangePhase extends EvolutionPhase { if (!this.modal) { return super.setMode(); } - return this.scene.ui.setOverlayMode(Mode.EVOLUTION_SCENE); + return globalScene.ui.setOverlayMode(Mode.EVOLUTION_SCENE); } doEvolution(): void { @@ -58,16 +59,16 @@ export class FormChangePhase extends EvolutionPhase { }); }); - this.scene.time.delayedCall(250, () => { - this.scene.tweens.add({ + globalScene.time.delayedCall(250, () => { + globalScene.tweens.add({ targets: this.evolutionBgOverlay, alpha: 1, delay: 500, duration: 1500, ease: "Sine.easeOut", onComplete: () => { - this.scene.time.delayedCall(1000, () => { - this.scene.tweens.add({ + globalScene.time.delayedCall(1000, () => { + globalScene.tweens.add({ targets: this.evolutionBgOverlay, alpha: 0, duration: 250 @@ -75,9 +76,9 @@ export class FormChangePhase extends EvolutionPhase { this.evolutionBg.setVisible(true); this.evolutionBg.play(); }); - this.scene.playSound("se/charge"); + globalScene.playSound("se/charge"); this.doSpiralUpward(); - this.scene.tweens.addCounter({ + globalScene.tweens.addCounter({ from: 0, to: 1, duration: 2000, @@ -86,25 +87,25 @@ export class FormChangePhase extends EvolutionPhase { }, onComplete: () => { this.pokemonSprite.setVisible(false); - this.scene.time.delayedCall(1100, () => { - this.scene.playSound("se/beam"); + globalScene.time.delayedCall(1100, () => { + globalScene.playSound("se/beam"); this.doArcDownward(); - this.scene.time.delayedCall(1000, () => { + globalScene.time.delayedCall(1000, () => { this.pokemonEvoTintSprite.setScale(0.25); this.pokemonEvoTintSprite.setVisible(true); this.doCycle(1, 1).then(_success => { - this.scene.playSound("se/sparkle"); + globalScene.playSound("se/sparkle"); this.pokemonEvoSprite.setVisible(true); this.doCircleInward(); - this.scene.time.delayedCall(900, () => { + globalScene.time.delayedCall(900, () => { this.pokemon.changeForm(this.formChange).then(() => { if (!this.modal) { - this.scene.unshiftPhase(new EndEvolutionPhase(this.scene)); + globalScene.unshiftPhase(new EndEvolutionPhase()); } - this.scene.playSound("se/shine"); + globalScene.playSound("se/shine"); this.doSpray(); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.evolutionOverlay, alpha: 1, duration: 250, @@ -112,36 +113,36 @@ export class FormChangePhase extends EvolutionPhase { onComplete: () => { this.evolutionBgOverlay.setAlpha(1); this.evolutionBg.setVisible(false); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: [ this.evolutionOverlay, this.pokemonEvoTintSprite ], alpha: 0, duration: 2000, delay: 150, easing: "Sine.easeIn", onComplete: () => { - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.evolutionBgOverlay, alpha: 0, duration: 250, onComplete: () => { - this.scene.time.delayedCall(250, () => { + globalScene.time.delayedCall(250, () => { this.pokemon.cry(); - this.scene.time.delayedCall(1250, () => { + globalScene.time.delayedCall(1250, () => { let playEvolutionFanfare = false; if (this.formChange.formKey.indexOf(SpeciesFormKey.MEGA) > -1) { - this.scene.validateAchv(achvs.MEGA_EVOLVE); + globalScene.validateAchv(achvs.MEGA_EVOLVE); playEvolutionFanfare = true; } else if (this.formChange.formKey.indexOf(SpeciesFormKey.GIGANTAMAX) > -1 || this.formChange.formKey.indexOf(SpeciesFormKey.ETERNAMAX) > -1) { - this.scene.validateAchv(achvs.GIGANTAMAX); + globalScene.validateAchv(achvs.GIGANTAMAX); playEvolutionFanfare = true; } const delay = playEvolutionFanfare ? 4000 : 1750; - this.scene.playSoundWithoutBgm(playEvolutionFanfare ? "evolution_fanfare" : "minor_fanfare"); + globalScene.playSoundWithoutBgm(playEvolutionFanfare ? "evolution_fanfare" : "minor_fanfare"); transformedPokemon.destroy(); - this.scene.ui.showText(getSpeciesFormChangeMessage(this.pokemon, this.formChange, preName), null, () => this.end(), null, true, Utils.fixedInt(delay)); - this.scene.time.delayedCall(Utils.fixedInt(delay + 250), () => this.scene.playBgm()); + globalScene.ui.showText(getSpeciesFormChangeMessage(this.pokemon, this.formChange, preName), null, () => this.end(), null, true, Utils.fixedInt(delay)); + globalScene.time.delayedCall(Utils.fixedInt(delay + 250), () => globalScene.playBgm()); }); }); } @@ -166,9 +167,9 @@ export class FormChangePhase extends EvolutionPhase { end(): void { this.pokemon.findAndRemoveTags(t => t.tagType === BattlerTagType.AUTOTOMIZED); if (this.modal) { - this.scene.ui.revertMode().then(() => { - if (this.scene.ui.getMode() === Mode.PARTY) { - const partyUiHandler = this.scene.ui.getHandler() as PartyUiHandler; + globalScene.ui.revertMode().then(() => { + if (globalScene.ui.getMode() === Mode.PARTY) { + const partyUiHandler = globalScene.ui.getHandler() as PartyUiHandler; partyUiHandler.clearPartySlots(); partyUiHandler.populatePartySlots(); } diff --git a/src/phases/game-over-modifier-reward-phase.ts b/src/phases/game-over-modifier-reward-phase.ts index a698e62e2e1..93f53bf38c0 100644 --- a/src/phases/game-over-modifier-reward-phase.ts +++ b/src/phases/game-over-modifier-reward-phase.ts @@ -1,27 +1,33 @@ -import BattleScene from "#app/battle-scene"; -import { ModifierTypeFunc } from "#app/modifier/modifier-type"; +import { globalScene } from "#app/global-scene"; +import type { ModifierTypeFunc } from "#app/modifier/modifier-type"; import { Mode } from "#app/ui/ui"; import i18next from "i18next"; import { ModifierRewardPhase } from "./modifier-reward-phase"; export class GameOverModifierRewardPhase extends ModifierRewardPhase { - constructor(scene: BattleScene, modifierTypeFunc: ModifierTypeFunc) { - super(scene, modifierTypeFunc); + constructor(modifierTypeFunc: ModifierTypeFunc) { + super(modifierTypeFunc); } doReward(): Promise { return new Promise(resolve => { const newModifier = this.modifierType.newModifier(); - this.scene.addModifier(newModifier).then(() => { - // Sound loaded into game as is - this.scene.playSound("level_up_fanfare"); - this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.fadeIn(250).then(() => { - this.scene.ui.showText(i18next.t("battle:rewardGain", { modifierName: newModifier?.type.name }), null, () => { - this.scene.time.delayedCall(1500, () => this.scene.arenaBg.setVisible(true)); + globalScene.addModifier(newModifier); + // Sound loaded into game as is + globalScene.playSound("level_up_fanfare"); + globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.fadeIn(250).then(() => { + globalScene.ui.showText( + i18next.t("battle:rewardGain", { modifierName: newModifier?.type.name }), + null, + () => { + globalScene.time.delayedCall(1500, () => globalScene.arenaBg.setVisible(true)); resolve(); - }, null, true, 1500); - }); + }, + null, + true, + 1500, + ); }); }); } diff --git a/src/phases/game-over-phase.ts b/src/phases/game-over-phase.ts index 52d0996b946..d4b529fe00e 100644 --- a/src/phases/game-over-phase.ts +++ b/src/phases/game-over-phase.ts @@ -1,11 +1,12 @@ import { clientSessionId } from "#app/account"; import { BattleType } from "#app/battle"; -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import { getCharVariantFromDialogue } from "#app/data/dialogue"; -import PokemonSpecies, { getPokemonSpecies } from "#app/data/pokemon-species"; +import type PokemonSpecies from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/data/pokemon-species"; import { trainerConfigs } from "#app/data/trainer-config"; -import Pokemon from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; import { modifierTypes } from "#app/modifier/modifier-type"; import { BattlePhase } from "#app/phases/battle-phase"; import { CheckSwitchPhase } from "#app/phases/check-switch-phase"; @@ -23,7 +24,7 @@ import * as Utils from "#app/utils"; import { PlayerGender } from "#enums/player-gender"; import { TrainerType } from "#enums/trainer-type"; import i18next from "i18next"; -import { SessionSaveData } from "#app/system/game-data"; +import type { SessionSaveData } from "#app/system/game-data"; import PersistentModifierData from "#app/system/modifier-data"; import PokemonData from "#app/system/pokemon-data"; import ChallengeData from "#app/system/challenge-data"; @@ -35,8 +36,8 @@ export class GameOverPhase extends BattlePhase { private isVictory: boolean; private firstRibbons: PokemonSpecies[] = []; - constructor(scene: BattleScene, isVictory: boolean = false) { - super(scene); + constructor(isVictory: boolean = false) { + super(); this.isVictory = isVictory; } @@ -45,47 +46,47 @@ export class GameOverPhase extends BattlePhase { super.start(); // Failsafe if players somehow skip floor 200 in classic mode - if (this.scene.gameMode.isClassic && this.scene.currentBattle.waveIndex > 200) { + if (globalScene.gameMode.isClassic && globalScene.currentBattle.waveIndex > 200) { this.isVictory = true; } // Handle Mystery Encounter special Game Over cases // Situations such as when player lost a battle, but it isn't treated as full Game Over - if (!this.isVictory && this.scene.currentBattle.mysteryEncounter?.onGameOver && !this.scene.currentBattle.mysteryEncounter.onGameOver(this.scene)) { + if (!this.isVictory && globalScene.currentBattle.mysteryEncounter?.onGameOver && !globalScene.currentBattle.mysteryEncounter.onGameOver()) { // Do not end the game return this.end(); } // Otherwise, continue standard Game Over logic - if (this.isVictory && this.scene.gameMode.isEndless) { - const genderIndex = this.scene.gameData.gender ?? PlayerGender.UNSET; + if (this.isVictory && globalScene.gameMode.isEndless) { + const genderIndex = globalScene.gameData.gender ?? PlayerGender.UNSET; const genderStr = PlayerGender[genderIndex].toLowerCase(); - this.scene.ui.showDialogue(i18next.t("miscDialogue:ending_endless", { context: genderStr }), i18next.t("miscDialogue:ending_name"), 0, () => this.handleGameOver()); - } else if (this.isVictory || !this.scene.enableRetries) { + globalScene.ui.showDialogue(i18next.t("miscDialogue:ending_endless", { context: genderStr }), i18next.t("miscDialogue:ending_name"), 0, () => this.handleGameOver()); + } else if (this.isVictory || !globalScene.enableRetries) { this.handleGameOver(); } else { - this.scene.ui.showText(i18next.t("battle:retryBattle"), null, () => { - this.scene.ui.setMode(Mode.CONFIRM, () => { - this.scene.ui.fadeOut(1250).then(() => { - this.scene.reset(); - this.scene.clearPhaseQueue(); - this.scene.gameData.loadSession(this.scene, this.scene.sessionSlotId).then(() => { - this.scene.pushPhase(new EncounterPhase(this.scene, true)); + globalScene.ui.showText(i18next.t("battle:retryBattle"), null, () => { + globalScene.ui.setMode(Mode.CONFIRM, () => { + globalScene.ui.fadeOut(1250).then(() => { + globalScene.reset(); + globalScene.clearPhaseQueue(); + globalScene.gameData.loadSession(globalScene.sessionSlotId).then(() => { + globalScene.pushPhase(new EncounterPhase(true)); - const availablePartyMembers = this.scene.getPokemonAllowedInBattle().length; + const availablePartyMembers = globalScene.getPokemonAllowedInBattle().length; - this.scene.pushPhase(new SummonPhase(this.scene, 0)); - if (this.scene.currentBattle.double && availablePartyMembers > 1) { - this.scene.pushPhase(new SummonPhase(this.scene, 1)); + globalScene.pushPhase(new SummonPhase(0)); + if (globalScene.currentBattle.double && availablePartyMembers > 1) { + globalScene.pushPhase(new SummonPhase(1)); } - if (this.scene.currentBattle.waveIndex > 1 && this.scene.currentBattle.battleType !== BattleType.TRAINER) { - this.scene.pushPhase(new CheckSwitchPhase(this.scene, 0, this.scene.currentBattle.double)); - if (this.scene.currentBattle.double && availablePartyMembers > 1) { - this.scene.pushPhase(new CheckSwitchPhase(this.scene, 1, this.scene.currentBattle.double)); + if (globalScene.currentBattle.waveIndex > 1 && globalScene.currentBattle.battleType !== BattleType.TRAINER) { + globalScene.pushPhase(new CheckSwitchPhase(0, globalScene.currentBattle.double)); + if (globalScene.currentBattle.double && availablePartyMembers > 1) { + globalScene.pushPhase(new CheckSwitchPhase(1, globalScene.currentBattle.double)); } } - this.scene.ui.fadeIn(1250); + globalScene.ui.fadeIn(1250); this.end(); }); }); @@ -96,38 +97,38 @@ export class GameOverPhase extends BattlePhase { handleGameOver(): void { const doGameOver = (newClear: boolean) => { - this.scene.disableMenu = true; - this.scene.time.delayedCall(1000, () => { + globalScene.disableMenu = true; + globalScene.time.delayedCall(1000, () => { let firstClear = false; if (this.isVictory && newClear) { - if (this.scene.gameMode.isClassic) { - firstClear = this.scene.validateAchv(achvs.CLASSIC_VICTORY); - this.scene.validateAchv(achvs.UNEVOLVED_CLASSIC_VICTORY); - this.scene.gameData.gameStats.sessionsWon++; - for (const pokemon of this.scene.getPlayerParty()) { + if (globalScene.gameMode.isClassic) { + firstClear = globalScene.validateAchv(achvs.CLASSIC_VICTORY); + globalScene.validateAchv(achvs.UNEVOLVED_CLASSIC_VICTORY); + globalScene.gameData.gameStats.sessionsWon++; + for (const pokemon of globalScene.getPlayerParty()) { this.awardRibbon(pokemon); if (pokemon.species.getRootSpeciesId() !== pokemon.species.getRootSpeciesId(true)) { this.awardRibbon(pokemon, true); } } - } else if (this.scene.gameMode.isDaily && newClear) { - this.scene.gameData.gameStats.dailyRunSessionsWon++; + } else if (globalScene.gameMode.isDaily && newClear) { + globalScene.gameData.gameStats.dailyRunSessionsWon++; } } const fadeDuration = this.isVictory ? 10000 : 5000; - this.scene.fadeOutBgm(fadeDuration, true); - const activeBattlers = this.scene.getField().filter(p => p?.isActive(true)); + globalScene.fadeOutBgm(fadeDuration, true); + const activeBattlers = globalScene.getField().filter(p => p?.isActive(true)); activeBattlers.map(p => p.hideInfo()); - this.scene.ui.fadeOut(fadeDuration).then(() => { + globalScene.ui.fadeOut(fadeDuration).then(() => { activeBattlers.map(a => a.setVisible(false)); - this.scene.setFieldScale(1, true); - this.scene.clearPhaseQueue(); - this.scene.ui.clearText(); + globalScene.setFieldScale(1, true); + globalScene.clearPhaseQueue(); + globalScene.ui.clearText(); - if (this.isVictory && this.scene.gameMode.isChallenge) { - this.scene.gameMode.challenges.forEach(c => this.scene.validateAchvs(ChallengeAchv, c)); + if (this.isVictory && globalScene.gameMode.isChallenge) { + globalScene.gameMode.challenges.forEach(c => globalScene.validateAchvs(ChallengeAchv, c)); } const clear = (endCardPhase?: EndCardPhase) => { @@ -135,34 +136,34 @@ export class GameOverPhase extends BattlePhase { this.handleUnlocks(); for (const species of this.firstRibbons) { - this.scene.unshiftPhase(new RibbonModifierRewardPhase(this.scene, modifierTypes.VOUCHER_PLUS, species)); + globalScene.unshiftPhase(new RibbonModifierRewardPhase(modifierTypes.VOUCHER_PLUS, species)); } if (!firstClear) { - this.scene.unshiftPhase(new GameOverModifierRewardPhase(this.scene, modifierTypes.VOUCHER_PREMIUM)); + globalScene.unshiftPhase(new GameOverModifierRewardPhase(modifierTypes.VOUCHER_PREMIUM)); } } this.getRunHistoryEntry().then(runHistoryEntry => { - this.scene.gameData.saveRunHistory(this.scene, runHistoryEntry, this.isVictory); - this.scene.pushPhase(new PostGameOverPhase(this.scene, endCardPhase)); + globalScene.gameData.saveRunHistory(runHistoryEntry, this.isVictory); + globalScene.pushPhase(new PostGameOverPhase(endCardPhase)); this.end(); }); }; - if (this.isVictory && this.scene.gameMode.isClassic) { + if (this.isVictory && globalScene.gameMode.isClassic) { const dialogueKey = "miscDialogue:ending"; - if (!this.scene.ui.shouldSkipDialogue(dialogueKey)) { - this.scene.ui.fadeIn(500).then(() => { - const genderIndex = this.scene.gameData.gender ?? PlayerGender.UNSET; + if (!globalScene.ui.shouldSkipDialogue(dialogueKey)) { + globalScene.ui.fadeIn(500).then(() => { + const genderIndex = globalScene.gameData.gender ?? PlayerGender.UNSET; const genderStr = PlayerGender[genderIndex].toLowerCase(); // Dialogue has to be retrieved so that the rival's expressions can be loaded and shown via getCharVariantFromDialogue const dialogue = i18next.t(dialogueKey, { context: genderStr }); - this.scene.charSprite.showCharacter(`rival_${this.scene.gameData.gender === PlayerGender.FEMALE ? "m" : "f"}`, getCharVariantFromDialogue(dialogue)).then(() => { - this.scene.ui.showDialogue(dialogueKey, this.scene.gameData.gender === PlayerGender.FEMALE ? trainerConfigs[TrainerType.RIVAL].name : trainerConfigs[TrainerType.RIVAL].nameFemale, null, () => { - this.scene.ui.fadeOut(500).then(() => { - this.scene.charSprite.hide().then(() => { - const endCardPhase = new EndCardPhase(this.scene); - this.scene.unshiftPhase(endCardPhase); + globalScene.charSprite.showCharacter(`rival_${globalScene.gameData.gender === PlayerGender.FEMALE ? "m" : "f"}`, getCharVariantFromDialogue(dialogue)).then(() => { + globalScene.ui.showDialogue(dialogueKey, globalScene.gameData.gender === PlayerGender.FEMALE ? trainerConfigs[TrainerType.RIVAL].name : trainerConfigs[TrainerType.RIVAL].nameFemale, null, () => { + globalScene.ui.fadeOut(500).then(() => { + globalScene.charSprite.hide().then(() => { + const endCardPhase = new EndCardPhase(); + globalScene.unshiftPhase(endCardPhase); clear(endCardPhase); }); }); @@ -170,8 +171,8 @@ export class GameOverPhase extends BattlePhase { }); }); } else { - const endCardPhase = new EndCardPhase(this.scene); - this.scene.unshiftPhase(endCardPhase); + const endCardPhase = new EndCardPhase(); + globalScene.unshiftPhase(endCardPhase); clear(endCardPhase); } } else { @@ -185,10 +186,10 @@ export class GameOverPhase extends BattlePhase { If Online, execute apiFetch as intended If Offline, execute offlineNewClear() only for victory, a localStorage implementation of newClear daily run checks */ if (!Utils.isLocal || Utils.isLocalServerConnected) { - pokerogueApi.savedata.session.newclear({ slot: this.scene.sessionSlotId, isVictory: this.isVictory, clientSessionId: clientSessionId }) + pokerogueApi.savedata.session.newclear({ slot: globalScene.sessionSlotId, isVictory: this.isVictory, clientSessionId: clientSessionId }) .then((success) => doGameOver(!!success)); } else if (this.isVictory) { - this.scene.gameData.offlineNewClear(this.scene).then(result => { + globalScene.gameData.offlineNewClear().then(result => { doGameOver(result); }); } else { @@ -197,57 +198,59 @@ export class GameOverPhase extends BattlePhase { } handleUnlocks(): void { - if (this.isVictory && this.scene.gameMode.isClassic) { - if (!this.scene.gameData.unlocks[Unlockables.ENDLESS_MODE]) { - this.scene.unshiftPhase(new UnlockPhase(this.scene, Unlockables.ENDLESS_MODE)); + if (this.isVictory && globalScene.gameMode.isClassic) { + if (!globalScene.gameData.unlocks[Unlockables.ENDLESS_MODE]) { + globalScene.unshiftPhase(new UnlockPhase(Unlockables.ENDLESS_MODE)); } - if (this.scene.getPlayerParty().filter(p => p.fusionSpecies).length && !this.scene.gameData.unlocks[Unlockables.SPLICED_ENDLESS_MODE]) { - this.scene.unshiftPhase(new UnlockPhase(this.scene, Unlockables.SPLICED_ENDLESS_MODE)); + if (globalScene.getPlayerParty().filter(p => p.fusionSpecies).length && !globalScene.gameData.unlocks[Unlockables.SPLICED_ENDLESS_MODE]) { + globalScene.unshiftPhase(new UnlockPhase(Unlockables.SPLICED_ENDLESS_MODE)); } - if (!this.scene.gameData.unlocks[Unlockables.MINI_BLACK_HOLE]) { - this.scene.unshiftPhase(new UnlockPhase(this.scene, Unlockables.MINI_BLACK_HOLE)); + if (!globalScene.gameData.unlocks[Unlockables.MINI_BLACK_HOLE]) { + globalScene.unshiftPhase(new UnlockPhase(Unlockables.MINI_BLACK_HOLE)); } - if (!this.scene.gameData.unlocks[Unlockables.EVIOLITE] && this.scene.getPlayerParty().some(p => p.getSpeciesForm(true).speciesId in pokemonEvolutions)) { - this.scene.unshiftPhase(new UnlockPhase(this.scene, Unlockables.EVIOLITE)); + if (!globalScene.gameData.unlocks[Unlockables.EVIOLITE] && globalScene.getPlayerParty().some(p => p.getSpeciesForm(true).speciesId in pokemonEvolutions)) { + globalScene.unshiftPhase(new UnlockPhase(Unlockables.EVIOLITE)); } } } awardRibbon(pokemon: Pokemon, forStarter: boolean = false): void { const speciesId = getPokemonSpecies(pokemon.species.speciesId); - const speciesRibbonCount = this.scene.gameData.incrementRibbonCount(speciesId, forStarter); + const speciesRibbonCount = globalScene.gameData.incrementRibbonCount(speciesId, forStarter); // first time classic win, award voucher if (speciesRibbonCount === 1) { this.firstRibbons.push(getPokemonSpecies(pokemon.species.getRootSpeciesId(forStarter))); } } + // TODO: Make function use existing getSessionSaveData() function and then modify the values from there. /** * Slightly modified version of {@linkcode GameData.getSessionSaveData}. * @returns A promise containing the {@linkcode SessionSaveData} */ private async getRunHistoryEntry(): Promise { - const preWaveSessionData = await this.scene.gameData.getSession(this.scene.sessionSlotId); + const preWaveSessionData = await globalScene.gameData.getSession(globalScene.sessionSlotId); return { - seed: this.scene.seed, - playTime: this.scene.sessionPlayTime, - gameMode: this.scene.gameMode.modeId, - party: this.scene.getPlayerParty().map(p => new PokemonData(p)), - enemyParty: this.scene.getEnemyParty().map(p => new PokemonData(p)), - modifiers: preWaveSessionData ? preWaveSessionData.modifiers : this.scene.findModifiers(() => true).map(m => new PersistentModifierData(m, true)), - enemyModifiers: preWaveSessionData ? preWaveSessionData.enemyModifiers : this.scene.findModifiers(() => true, false).map(m => new PersistentModifierData(m, false)), - arena: new ArenaData(this.scene.arena), - pokeballCounts: this.scene.pokeballCounts, - money: Math.floor(this.scene.money), - score: this.scene.score, - waveIndex: this.scene.currentBattle.waveIndex, - battleType: this.scene.currentBattle.battleType, - trainer: this.scene.currentBattle.trainer ? new TrainerData(this.scene.currentBattle.trainer) : null, - gameVersion: this.scene.game.config.gameVersion, + seed: globalScene.seed, + playTime: globalScene.sessionPlayTime, + gameMode: globalScene.gameMode.modeId, + party: globalScene.getPlayerParty().map(p => new PokemonData(p)), + enemyParty: globalScene.getEnemyParty().map(p => new PokemonData(p)), + modifiers: preWaveSessionData ? preWaveSessionData.modifiers : globalScene.findModifiers(() => true).map(m => new PersistentModifierData(m, true)), + enemyModifiers: preWaveSessionData ? preWaveSessionData.enemyModifiers : globalScene.findModifiers(() => true, false).map(m => new PersistentModifierData(m, false)), + arena: new ArenaData(globalScene.arena), + pokeballCounts: globalScene.pokeballCounts, + money: Math.floor(globalScene.money), + score: globalScene.score, + waveIndex: globalScene.currentBattle.waveIndex, + battleType: globalScene.currentBattle.battleType, + trainer: globalScene.currentBattle.trainer ? new TrainerData(globalScene.currentBattle.trainer) : null, + gameVersion: globalScene.game.config.gameVersion, timestamp: new Date().getTime(), - challenges: this.scene.gameMode.challenges.map(c => new ChallengeData(c)), - mysteryEncounterType: this.scene.currentBattle.mysteryEncounter?.encounterType ?? -1, - mysteryEncounterSaveData: this.scene.mysteryEncounterSaveData + challenges: globalScene.gameMode.challenges.map(c => new ChallengeData(c)), + mysteryEncounterType: globalScene.currentBattle.mysteryEncounter?.encounterType ?? -1, + mysteryEncounterSaveData: globalScene.mysteryEncounterSaveData, + playerFaints: globalScene.arena.playerFaints } as SessionSaveData; } } diff --git a/src/phases/hide-party-exp-bar-phase.ts b/src/phases/hide-party-exp-bar-phase.ts index 303650ea1ad..0dce41044c0 100644 --- a/src/phases/hide-party-exp-bar-phase.ts +++ b/src/phases/hide-party-exp-bar-phase.ts @@ -1,14 +1,14 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { BattlePhase } from "./battle-phase"; export class HidePartyExpBarPhase extends BattlePhase { - constructor(scene: BattleScene) { - super(scene); + constructor() { + super(); } start() { super.start(); - this.scene.partyExpBar.hide().then(() => this.end()); + globalScene.partyExpBar.hide().then(() => this.end()); } } diff --git a/src/phases/learn-move-phase.ts b/src/phases/learn-move-phase.ts index fefda384092..c1f3042dbbe 100644 --- a/src/phases/learn-move-phase.ts +++ b/src/phases/learn-move-phase.ts @@ -1,6 +1,7 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { initMoveAnim, loadMoveAnimAssets } from "#app/data/battle-anims"; -import Move, { allMoves } from "#app/data/move"; +import type Move from "#app/data/move"; +import { allMoves } from "#app/data/move"; import { SpeciesFormChangeMoveLearnedTrigger } from "#app/data/pokemon-forms"; import { Moves } from "#enums/moves"; import { getPokemonNameWithAffix } from "#app/messages"; @@ -10,7 +11,7 @@ import { SummaryUiMode } from "#app/ui/summary-ui-handler"; import { Mode } from "#app/ui/ui"; import i18next from "i18next"; import { PlayerPartyMemberPokemonPhase } from "#app/phases/player-party-member-pokemon-phase"; -import Pokemon from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; export enum LearnMoveType { @@ -25,11 +26,11 @@ export enum LearnMoveType { export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { private moveId: Moves; private messageMode: Mode; - private learnMoveType; + private learnMoveType: LearnMoveType; private cost: number; - constructor(scene: BattleScene, partyMemberIndex: integer, moveId: Moves, learnMoveType: LearnMoveType = LearnMoveType.LEARN_MOVE, cost: number = -1) { - super(scene, partyMemberIndex); + constructor(partyMemberIndex: number, moveId: Moves, learnMoveType: LearnMoveType = LearnMoveType.LEARN_MOVE, cost: number = -1) { + super(partyMemberIndex); this.moveId = moveId; this.learnMoveType = learnMoveType; this.cost = cost; @@ -48,8 +49,8 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { return this.end(); } - this.messageMode = this.scene.ui.getHandler() instanceof EvolutionSceneHandler ? Mode.EVOLUTION_SCENE : Mode.MESSAGE; - this.scene.ui.setMode(this.messageMode); + this.messageMode = globalScene.ui.getHandler() instanceof EvolutionSceneHandler ? Mode.EVOLUTION_SCENE : Mode.MESSAGE; + globalScene.ui.setMode(this.messageMode); // If the Pokemon has less than 4 moves, the new move is added to the largest empty moveset index // If it has 4 moves, the phase then checks if the player wants to replace the move itself. if (currentMoveset.length < 4) { @@ -73,12 +74,12 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { const moveLimitReached = i18next.t("battle:learnMoveLimitReached", { pokemonName: getPokemonNameWithAffix(pokemon) }); const shouldReplaceQ = i18next.t("battle:learnMoveReplaceQuestion", { moveName: move.name }); const preQText = [ learnMovePrompt, moveLimitReached ].join("$"); - await this.scene.ui.showTextPromise(preQText); - await this.scene.ui.showTextPromise(shouldReplaceQ, undefined, false); - await this.scene.ui.setModeWithoutClear(Mode.CONFIRM, + await globalScene.ui.showTextPromise(preQText); + await globalScene.ui.showTextPromise(shouldReplaceQ, undefined, false); + await globalScene.ui.setModeWithoutClear(Mode.CONFIRM, () => this.forgetMoveProcess(move, pokemon), // Yes () => { // No - this.scene.ui.setMode(this.messageMode); + globalScene.ui.setMode(this.messageMode); this.rejectMoveAndEnd(move, pokemon); } ); @@ -96,16 +97,16 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { * @param Pokemon The Pokemon learning the move */ async forgetMoveProcess(move: Move, pokemon: Pokemon) { - this.scene.ui.setMode(this.messageMode); - await this.scene.ui.showTextPromise(i18next.t("battle:learnMoveForgetQuestion"), undefined, true); - await this.scene.ui.setModeWithoutClear(Mode.SUMMARY, pokemon, SummaryUiMode.LEARN_MOVE, move, (moveIndex: integer) => { + globalScene.ui.setMode(this.messageMode); + await globalScene.ui.showTextPromise(i18next.t("battle:learnMoveForgetQuestion"), undefined, true); + await globalScene.ui.setModeWithoutClear(Mode.SUMMARY, pokemon, SummaryUiMode.LEARN_MOVE, move, (moveIndex: number) => { if (moveIndex === 4) { - this.scene.ui.setMode(this.messageMode).then(() => this.rejectMoveAndEnd(move, pokemon)); + globalScene.ui.setMode(this.messageMode).then(() => this.rejectMoveAndEnd(move, pokemon)); return; } const forgetSuccessText = i18next.t("battle:learnMoveForgetSuccess", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: pokemon.moveset[moveIndex]!.getName() }); const fullText = [ i18next.t("battle:countdownPoof"), forgetSuccessText, i18next.t("battle:learnMoveAnd") ].join("$"); - this.scene.ui.setMode(this.messageMode).then(() => this.learnMove(moveIndex, move, pokemon, fullText)); + globalScene.ui.setMode(this.messageMode).then(() => this.learnMove(moveIndex, move, pokemon, fullText)); }); } @@ -120,14 +121,14 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { * @param Pokemon The Pokemon learning the move */ async rejectMoveAndEnd(move: Move, pokemon: Pokemon) { - await this.scene.ui.showTextPromise(i18next.t("battle:learnMoveStopTeaching", { moveName: move.name }), undefined, false); - this.scene.ui.setModeWithoutClear(Mode.CONFIRM, + await globalScene.ui.showTextPromise(i18next.t("battle:learnMoveStopTeaching", { moveName: move.name }), undefined, false); + globalScene.ui.setModeWithoutClear(Mode.CONFIRM, () => { - this.scene.ui.setMode(this.messageMode); - this.scene.ui.showTextPromise(i18next.t("battle:learnMoveNotLearned", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: move.name }), undefined, true).then(() => this.end()); + globalScene.ui.setMode(this.messageMode); + globalScene.ui.showTextPromise(i18next.t("battle:learnMoveNotLearned", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: move.name }), undefined, true).then(() => this.end()); }, () => { - this.scene.ui.setMode(this.messageMode); + globalScene.ui.setMode(this.messageMode); this.replaceMoveCheck(move, pokemon); } ); @@ -154,31 +155,31 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { pokemon.usedTMs = []; } pokemon.usedTMs.push(this.moveId); - this.scene.tryRemovePhase((phase) => phase instanceof SelectModifierPhase); + globalScene.tryRemovePhase((phase) => phase instanceof SelectModifierPhase); } else if (this.learnMoveType === LearnMoveType.MEMORY) { if (this.cost !== -1) { if (!Overrides.WAIVE_ROLL_FEE_OVERRIDE) { - this.scene.money -= this.cost; - this.scene.updateMoneyText(); - this.scene.animateMoneyChanged(false); + globalScene.money -= this.cost; + globalScene.updateMoneyText(); + globalScene.animateMoneyChanged(false); } - this.scene.playSound("se/buy"); + globalScene.playSound("se/buy"); } else { - this.scene.tryRemovePhase((phase) => phase instanceof SelectModifierPhase); + globalScene.tryRemovePhase((phase) => phase instanceof SelectModifierPhase); } } pokemon.setMove(index, this.moveId); - initMoveAnim(this.scene, this.moveId).then(() => { - loadMoveAnimAssets(this.scene, [ this.moveId ], true); + initMoveAnim(this.moveId).then(() => { + loadMoveAnimAssets([ this.moveId ], true); }); - this.scene.ui.setMode(this.messageMode); + globalScene.ui.setMode(this.messageMode); const learnMoveText = i18next.t("battle:learnMove", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: move.name }); if (textMessage) { - await this.scene.ui.showTextPromise(textMessage); + await globalScene.ui.showTextPromise(textMessage); } - this.scene.playSound("level_up_fanfare"); // Sound loaded into game as is - this.scene.ui.showText(learnMoveText, null, () => { - this.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeMoveLearnedTrigger, true); + globalScene.playSound("level_up_fanfare"); // Sound loaded into game as is + globalScene.ui.showText(learnMoveText, null, () => { + globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeMoveLearnedTrigger, true); this.end(); }, this.messageMode === Mode.EVOLUTION_SCENE ? 1000 : undefined, true); } diff --git a/src/phases/level-cap-phase.ts b/src/phases/level-cap-phase.ts index d1404e45010..d75bc3be6d4 100644 --- a/src/phases/level-cap-phase.ts +++ b/src/phases/level-cap-phase.ts @@ -1,20 +1,20 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { Mode } from "#app/ui/ui"; import i18next from "i18next"; import { FieldPhase } from "./field-phase"; export class LevelCapPhase extends FieldPhase { - constructor(scene: BattleScene) { - super(scene); + constructor() { + super(); } start(): void { super.start(); - this.scene.ui.setMode(Mode.MESSAGE).then(() => { + globalScene.ui.setMode(Mode.MESSAGE).then(() => { // Sound loaded into game as is - this.scene.playSound("level_up_fanfare"); - this.scene.ui.showText(i18next.t("battle:levelCapUp", { levelCap: this.scene.getMaxExpLevel() }), null, () => this.end(), null, true); + globalScene.playSound("level_up_fanfare"); + globalScene.ui.showText(i18next.t("battle:levelCapUp", { levelCap: globalScene.getMaxExpLevel() }), null, () => this.end(), null, true); this.executeForAll(pokemon => pokemon.updateInfo(true)); }); } diff --git a/src/phases/level-up-phase.ts b/src/phases/level-up-phase.ts index 4f26abc5af3..450ecca0c70 100644 --- a/src/phases/level-up-phase.ts +++ b/src/phases/level-up-phase.ts @@ -1,4 +1,4 @@ -import type BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { ExpNotification } from "#app/enums/exp-notification"; import type { PlayerPokemon } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; @@ -14,8 +14,8 @@ export class LevelUpPhase extends PlayerPartyMemberPokemonPhase { protected level: number; protected pokemon: PlayerPokemon = this.getPlayerPokemon(); - constructor(scene: BattleScene, partyMemberIndex: number, lastLevel: number, level: number) { - super(scene, partyMemberIndex); + constructor(partyMemberIndex: number, lastLevel: number, level: number) { + super(partyMemberIndex); this.lastLevel = lastLevel; this.level = level; @@ -24,27 +24,27 @@ export class LevelUpPhase extends PlayerPartyMemberPokemonPhase { public override start() { super.start(); - if (this.level > this.scene.gameData.gameStats.highestLevel) { - this.scene.gameData.gameStats.highestLevel = this.level; + if (this.level > globalScene.gameData.gameStats.highestLevel) { + globalScene.gameData.gameStats.highestLevel = this.level; } - this.scene.validateAchvs(LevelAchv, new NumberHolder(this.level)); + globalScene.validateAchvs(LevelAchv, new NumberHolder(this.level)); const prevStats = this.pokemon.stats.slice(0); this.pokemon.calculateStats(); this.pokemon.updateInfo(); - if (this.scene.expParty === ExpNotification.DEFAULT) { - this.scene.playSound("level_up_fanfare"); - this.scene.ui.showText( + if (globalScene.expParty === ExpNotification.DEFAULT) { + globalScene.playSound("level_up_fanfare"); + globalScene.ui.showText( i18next.t("battle:levelUp", { pokemonName: getPokemonNameWithAffix(this.pokemon), level: this.level }), null, - () => this.scene.ui.getMessageHandler().promptLevelUpStats(this.partyMemberIndex, prevStats, false) + () => globalScene.ui.getMessageHandler().promptLevelUpStats(this.partyMemberIndex, prevStats, false) .then(() => this.end()), null, true); - } else if (this.scene.expParty === ExpNotification.SKIP) { + } else if (globalScene.expParty === ExpNotification.SKIP) { this.end(); } else { // we still want to display the stats if activated - this.scene.ui.getMessageHandler().promptLevelUpStats(this.partyMemberIndex, prevStats, false).then(() => this.end()); + globalScene.ui.getMessageHandler().promptLevelUpStats(this.partyMemberIndex, prevStats, false).then(() => this.end()); } } @@ -52,13 +52,13 @@ export class LevelUpPhase extends PlayerPartyMemberPokemonPhase { if (this.lastLevel < 100) { // this feels like an unnecessary optimization const levelMoves = this.getPokemon().getLevelMoves(this.lastLevel + 1); for (const lm of levelMoves) { - this.scene.unshiftPhase(new LearnMovePhase(this.scene, this.partyMemberIndex, lm[1])); + globalScene.unshiftPhase(new LearnMovePhase(this.partyMemberIndex, lm[1])); } } if (!this.pokemon.pauseEvolutions) { const evolution = this.pokemon.getEvolution(); if (evolution) { - this.scene.unshiftPhase(new EvolutionPhase(this.scene, this.pokemon, evolution, this.lastLevel)); + globalScene.unshiftPhase(new EvolutionPhase(this.pokemon, evolution, this.lastLevel)); } } return super.end(); diff --git a/src/phases/load-move-anim-phase.ts b/src/phases/load-move-anim-phase.ts new file mode 100644 index 00000000000..66cb90744e0 --- /dev/null +++ b/src/phases/load-move-anim-phase.ts @@ -0,0 +1,20 @@ +import { initMoveAnim, loadMoveAnimAssets } from "#app/data/battle-anims"; +import type { Moves } from "#enums/moves"; +import { Phase } from "#app/phase"; + +/** + * Phase for synchronous move animation loading. + * Should be used when a move invokes another move that + * isn't already loaded (e.g. for Metronome) + */ +export class LoadMoveAnimPhase extends Phase { + constructor(protected moveId: Moves) { + super(); + } + + public override start(): void { + initMoveAnim(this.moveId) + .then(() => loadMoveAnimAssets([ this.moveId ], true)) + .then(() => this.end()); + } +} diff --git a/src/phases/login-phase.ts b/src/phases/login-phase.ts index ac1e68d1b0e..0ed8b6feb88 100644 --- a/src/phases/login-phase.ts +++ b/src/phases/login-phase.ts @@ -1,5 +1,6 @@ import { updateUserInfo } from "#app/account"; -import BattleScene, { bypassLogin } from "#app/battle-scene"; +import { bypassLogin } from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { Phase } from "#app/phase"; import { handleTutorial, Tutorial } from "#app/tutorial"; import { Mode } from "#app/ui/ui"; @@ -11,8 +12,8 @@ import { UnavailablePhase } from "./unavailable-phase"; export class LoginPhase extends Phase { private showText: boolean; - constructor(scene: BattleScene, showText?: boolean) { - super(scene); + constructor(showText?: boolean) { + super(); this.showText = showText === undefined || !!showText; } @@ -22,50 +23,50 @@ export class LoginPhase extends Phase { const hasSession = !!Utils.getCookie(Utils.sessionIdKey); - this.scene.ui.setMode(Mode.LOADING, { buttonActions: []}); + globalScene.ui.setMode(Mode.LOADING, { buttonActions: []}); Utils.executeIf(bypassLogin || hasSession, updateUserInfo).then(response => { const success = response ? response[0] : false; const statusCode = response ? response[1] : null; if (!success) { if (!statusCode || statusCode === 400) { if (this.showText) { - this.scene.ui.showText(i18next.t("menu:logInOrCreateAccount")); + globalScene.ui.showText(i18next.t("menu:logInOrCreateAccount")); } - this.scene.playSound("menu_open"); + globalScene.playSound("menu_open"); const loadData = () => { updateUserInfo().then(success => { if (!success[0]) { Utils.removeCookie(Utils.sessionIdKey); - this.scene.reset(true, true); + globalScene.reset(true, true); return; } - this.scene.gameData.loadSystem().then(() => this.end()); + globalScene.gameData.loadSystem().then(() => this.end()); }); }; - this.scene.ui.setMode(Mode.LOGIN_FORM, { + globalScene.ui.setMode(Mode.LOGIN_FORM, { buttonActions: [ () => { - this.scene.ui.playSelect(); + globalScene.ui.playSelect(); loadData(); }, () => { - this.scene.playSound("menu_open"); - this.scene.ui.setMode(Mode.REGISTRATION_FORM, { + globalScene.playSound("menu_open"); + globalScene.ui.setMode(Mode.REGISTRATION_FORM, { buttonActions: [ () => { - this.scene.ui.playSelect(); + globalScene.ui.playSelect(); updateUserInfo().then(success => { if (!success[0]) { Utils.removeCookie(Utils.sessionIdKey); - this.scene.reset(true, true); + globalScene.reset(true, true); return; } this.end(); } ); }, () => { - this.scene.unshiftPhase(new LoginPhase(this.scene, false)); + globalScene.unshiftPhase(new LoginPhase(false)); this.end(); } ] @@ -85,19 +86,19 @@ export class LoginPhase extends Phase { }); } else if (statusCode === 401) { Utils.removeCookie(Utils.sessionIdKey); - this.scene.reset(true, true); + globalScene.reset(true, true); } else { - this.scene.unshiftPhase(new UnavailablePhase(this.scene)); + globalScene.unshiftPhase(new UnavailablePhase()); super.end(); } return null; } else { - this.scene.gameData.loadSystem().then(success => { + globalScene.gameData.loadSystem().then(success => { if (success || bypassLogin) { this.end(); } else { - this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(t("menu:failedToLoadSaveData")); + globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.showText(t("menu:failedToLoadSaveData")); } }); } @@ -105,12 +106,12 @@ export class LoginPhase extends Phase { } end(): void { - this.scene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(Mode.MESSAGE); - if (!this.scene.gameData.gender) { - this.scene.unshiftPhase(new SelectGenderPhase(this.scene)); + if (!globalScene.gameData.gender) { + globalScene.unshiftPhase(new SelectGenderPhase()); } - handleTutorial(this.scene, Tutorial.Intro).then(() => super.end()); + handleTutorial(Tutorial.Intro).then(() => super.end()); } } diff --git a/src/phases/message-phase.ts b/src/phases/message-phase.ts index 1d953801178..366fd324376 100644 --- a/src/phases/message-phase.ts +++ b/src/phases/message-phase.ts @@ -1,15 +1,15 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { Phase } from "#app/phase"; export class MessagePhase extends Phase { private text: string; - private callbackDelay: integer | null; + private callbackDelay: number | null; private prompt: boolean | null; - private promptDelay: integer | null; + private promptDelay: number | null; private speaker?: string; - constructor(scene: BattleScene, text: string, callbackDelay?: integer | null, prompt?: boolean | null, promptDelay?: integer | null, speaker?: string) { - super(scene); + constructor(text: string, callbackDelay?: number | null, prompt?: boolean | null, promptDelay?: number | null, speaker?: string) { + super(); this.text = text; this.callbackDelay = callbackDelay!; // TODO: is this bang correct? @@ -23,20 +23,20 @@ export class MessagePhase extends Phase { if (this.text.indexOf("$") > -1) { const pageIndex = this.text.indexOf("$"); - this.scene.unshiftPhase(new MessagePhase(this.scene, this.text.slice(pageIndex + 1), this.callbackDelay, this.prompt, this.promptDelay, this.speaker)); + globalScene.unshiftPhase(new MessagePhase(this.text.slice(pageIndex + 1), this.callbackDelay, this.prompt, this.promptDelay, this.speaker)); this.text = this.text.slice(0, pageIndex).trim(); } if (this.speaker) { - this.scene.ui.showDialogue(this.text, this.speaker, null, () => this.end(), this.callbackDelay || (this.prompt ? 0 : 1500), this.promptDelay ?? 0); + globalScene.ui.showDialogue(this.text, this.speaker, null, () => this.end(), this.callbackDelay || (this.prompt ? 0 : 1500), this.promptDelay ?? 0); } else { - this.scene.ui.showText(this.text, null, () => this.end(), this.callbackDelay || (this.prompt ? 0 : 1500), this.prompt, this.promptDelay); + globalScene.ui.showText(this.text, null, () => this.end(), this.callbackDelay || (this.prompt ? 0 : 1500), this.prompt, this.promptDelay); } } end() { - if (this.scene.abilityBar.shown) { - this.scene.abilityBar.hide(); + if (globalScene.abilityBar.shown) { + globalScene.abilityBar.hide(); } super.end(); diff --git a/src/phases/modifier-reward-phase.ts b/src/phases/modifier-reward-phase.ts index 20a8366d9c6..e4fac33767f 100644 --- a/src/phases/modifier-reward-phase.ts +++ b/src/phases/modifier-reward-phase.ts @@ -1,13 +1,14 @@ -import BattleScene from "#app/battle-scene"; -import { ModifierType, ModifierTypeFunc, getModifierType } from "#app/modifier/modifier-type"; +import { globalScene } from "#app/global-scene"; +import type { ModifierType, ModifierTypeFunc } from "#app/modifier/modifier-type"; +import { getModifierType } from "#app/modifier/modifier-type"; import i18next from "i18next"; import { BattlePhase } from "./battle-phase"; export class ModifierRewardPhase extends BattlePhase { protected modifierType: ModifierType; - constructor(scene: BattleScene, modifierTypeFunc: ModifierTypeFunc) { - super(scene); + constructor(modifierTypeFunc: ModifierTypeFunc) { + super(); this.modifierType = getModifierType(modifierTypeFunc); } @@ -21,10 +22,9 @@ export class ModifierRewardPhase extends BattlePhase { doReward(): Promise { return new Promise(resolve => { const newModifier = this.modifierType.newModifier(); - this.scene.addModifier(newModifier).then(() => { - this.scene.playSound("item_fanfare"); - this.scene.ui.showText(i18next.t("battle:rewardGain", { modifierName: newModifier?.type.name }), null, () => resolve(), null, true); - }); + globalScene.addModifier(newModifier); + globalScene.playSound("item_fanfare"); + globalScene.ui.showText(i18next.t("battle:rewardGain", { modifierName: newModifier?.type.name }), null, () => resolve(), null, true); }); } } diff --git a/src/phases/money-reward-phase.ts b/src/phases/money-reward-phase.ts index 2f0a4f7b990..f460f89a72a 100644 --- a/src/phases/money-reward-phase.ts +++ b/src/phases/money-reward-phase.ts @@ -1,4 +1,4 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import { MoneyMultiplierModifier } from "#app/modifier/modifier"; import i18next from "i18next"; @@ -8,27 +8,27 @@ import { BattlePhase } from "./battle-phase"; export class MoneyRewardPhase extends BattlePhase { private moneyMultiplier: number; - constructor(scene: BattleScene, moneyMultiplier: number) { - super(scene); + constructor(moneyMultiplier: number) { + super(); this.moneyMultiplier = moneyMultiplier; } start() { - const moneyAmount = new Utils.IntegerHolder(this.scene.getWaveMoneyAmount(this.moneyMultiplier)); + const moneyAmount = new Utils.NumberHolder(globalScene.getWaveMoneyAmount(this.moneyMultiplier)); - this.scene.applyModifiers(MoneyMultiplierModifier, true, moneyAmount); + globalScene.applyModifiers(MoneyMultiplierModifier, true, moneyAmount); - if (this.scene.arena.getTag(ArenaTagType.HAPPY_HOUR)) { + if (globalScene.arena.getTag(ArenaTagType.HAPPY_HOUR)) { moneyAmount.value *= 2; } - this.scene.addMoney(moneyAmount.value); + globalScene.addMoney(moneyAmount.value); const userLocale = navigator.language || "en-US"; const formattedMoneyAmount = moneyAmount.value.toLocaleString(userLocale); const message = i18next.t("battle:moneyWon", { moneyAmount: formattedMoneyAmount }); - this.scene.ui.showText(message, null, () => this.end(), null, true); + globalScene.ui.showText(message, null, () => this.end(), null, true); } } diff --git a/src/phases/move-anim-phase.ts b/src/phases/move-anim-phase.ts new file mode 100644 index 00000000000..005445924a0 --- /dev/null +++ b/src/phases/move-anim-phase.ts @@ -0,0 +1,20 @@ +import type { MoveAnim } from "#app/data/battle-anims"; +import { Phase } from "#app/phase"; + +/** + * Plays the given {@linkcode MoveAnim} sequentially. + */ +export class MoveAnimPhase extends Phase { + constructor( + protected anim: Anim, + protected onSubstitute: boolean = false, + ) { + super(); + } + + public override start(): void { + super.start(); + + this.anim.play(this.onSubstitute, () => this.end()); + } +} diff --git a/src/phases/move-anim-test-phase.ts b/src/phases/move-anim-test-phase.ts index e4b04ce5de6..588fc402357 100644 --- a/src/phases/move-anim-test-phase.ts +++ b/src/phases/move-anim-test-phase.ts @@ -1,4 +1,4 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { initMoveAnim, loadMoveAnimAssets, MoveAnim } from "#app/data/battle-anims"; import { allMoves, SelfStatusMove } from "#app/data/move"; import { Moves } from "#app/enums/moves"; @@ -8,8 +8,8 @@ import { BattlePhase } from "./battle-phase"; export class MoveAnimTestPhase extends BattlePhase { private moveQueue: Moves[]; - constructor(scene: BattleScene, moveQueue?: Moves[]) { - super(scene); + constructor(moveQueue?: Moves[]) { + super(); this.moveQueue = moveQueue || Utils.getEnumValues(Moves).slice(1); } @@ -28,12 +28,12 @@ export class MoveAnimTestPhase extends BattlePhase { console.log(Moves[moveId]); } - initMoveAnim(this.scene, moveId).then(() => { - loadMoveAnimAssets(this.scene, [ moveId ], true) + initMoveAnim(moveId).then(() => { + loadMoveAnimAssets([ moveId ], true) .then(() => { - const user = player ? this.scene.getPlayerPokemon()! : this.scene.getEnemyPokemon()!; - const target = (player !== (allMoves[moveId] instanceof SelfStatusMove)) ? this.scene.getEnemyPokemon()! : this.scene.getPlayerPokemon()!; - new MoveAnim(moveId, user, target.getBattlerIndex()).play(this.scene, allMoves[moveId].hitsSubstitute(user, target), () => { // TODO: are the bangs correct here? + const user = player ? globalScene.getPlayerPokemon()! : globalScene.getEnemyPokemon()!; + const target = (player !== (allMoves[moveId] instanceof SelfStatusMove)) ? globalScene.getEnemyPokemon()! : globalScene.getPlayerPokemon()!; + new MoveAnim(moveId, user, target.getBattlerIndex()).play(allMoves[moveId].hitsSubstitute(user, target), () => { // TODO: are the bangs correct here? if (player) { this.playMoveAnim(moveQueue, false); } else { diff --git a/src/phases/move-charge-phase.ts b/src/phases/move-charge-phase.ts index d1dc340b81b..6eccdd20254 100644 --- a/src/phases/move-charge-phase.ts +++ b/src/phases/move-charge-phase.ts @@ -1,8 +1,10 @@ -import BattleScene from "#app/battle-scene"; -import { BattlerIndex } from "#app/battle"; +import { globalScene } from "#app/global-scene"; +import type { BattlerIndex } from "#app/battle"; import { MoveChargeAnim } from "#app/data/battle-anims"; import { applyMoveChargeAttrs, MoveEffectAttr, InstantChargeAttr } from "#app/data/move"; -import Pokemon, { MoveResult, PokemonMove } from "#app/field/pokemon"; +import type { PokemonMove } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; +import { MoveResult } from "#app/field/pokemon"; import { BooleanHolder } from "#app/utils"; import { MovePhase } from "#app/phases/move-phase"; import { PokemonPhase } from "#app/phases/pokemon-phase"; @@ -19,8 +21,8 @@ export class MoveChargePhase extends PokemonPhase { /** The field index targeted by the move (Charging moves assume single target) */ public targetIndex: BattlerIndex; - constructor(scene: BattleScene, battlerIndex: BattlerIndex, targetIndex: BattlerIndex, move: PokemonMove) { - super(scene, battlerIndex); + constructor(battlerIndex: BattlerIndex, targetIndex: BattlerIndex, move: PokemonMove) { + super(battlerIndex); this.move = move; this.targetIndex = targetIndex; } @@ -39,13 +41,12 @@ export class MoveChargePhase extends PokemonPhase { return super.end(); } - new MoveChargeAnim(move.chargeAnim, move.id, user).play(this.scene, false, () => { + new MoveChargeAnim(move.chargeAnim, move.id, user).play(false, () => { move.showChargeText(user, target); - applyMoveChargeAttrs(MoveEffectAttr, user, target, move).then(() => { - user.addTag(BattlerTagType.CHARGING, 1, move.id, user.id); - this.end(); - }); + applyMoveChargeAttrs(MoveEffectAttr, user, target, move); + user.addTag(BattlerTagType.CHARGING, 1, move.id, user.id); + this.end(); }); } @@ -61,9 +62,9 @@ export class MoveChargePhase extends PokemonPhase { if (instantCharge.value) { // this MoveEndPhase will be duplicated by the queued MovePhase if not removed - this.scene.tryRemovePhase((phase) => phase instanceof MoveEndPhase && phase.getPokemon() === user); + globalScene.tryRemovePhase((phase) => phase instanceof MoveEndPhase && phase.getPokemon() === user); // queue a new MovePhase for this move's attack phase - this.scene.unshiftPhase(new MovePhase(this.scene, user, [ this.targetIndex ], this.move, false)); + globalScene.unshiftPhase(new MovePhase(user, [ this.targetIndex ], this.move, false)); } else { user.getMoveQueue().push({ move: move.id, targets: [ this.targetIndex ]}); } @@ -75,10 +76,10 @@ export class MoveChargePhase extends PokemonPhase { } public getUserPokemon(): Pokemon { - return (this.player ? this.scene.getPlayerField() : this.scene.getEnemyField())[this.fieldIndex]; + return (this.player ? globalScene.getPlayerField() : globalScene.getEnemyField())[this.fieldIndex]; } public getTargetPokemon(): Pokemon | undefined { - return this.scene.getField(true).find((p) => this.targetIndex === p.getBattlerIndex()); + return globalScene.getField(true).find((p) => this.targetIndex === p.getBattlerIndex()); } } diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index d08fc46e563..f878cb40e2e 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { AddSecondStrikeAbAttr, AlwaysHitAbAttr, @@ -12,6 +12,7 @@ import { PostAttackAbAttr, PostDamageAbAttr, PostDefendAbAttr, + ReflectStatusMoveAbAttr, TypeImmunityAbAttr, } from "#app/data/ability"; import { ArenaTagSide, ConditionalProtectTag } from "#app/data/arena-tag"; @@ -23,15 +24,17 @@ import { SemiInvulnerableTag, SubstituteTag, } from "#app/data/battler-tags"; +import type { + MoveAttr } from "#app/data/move"; import { applyFilteredMoveAttrs, applyMoveAttrs, AttackMove, DelayedAttackAttr, FlinchAttr, + getMoveTargets, HitsTagAttr, MissEffectAttr, - MoveAttr, MoveCategory, MoveEffectAttr, MoveEffectTrigger, @@ -46,7 +49,9 @@ import { } from "#app/data/move"; import { SpeciesFormChangePostMoveTrigger } from "#app/data/pokemon-forms"; import { Type } from "#enums/type"; -import Pokemon, { HitResult, MoveResult, PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; +import { HitResult, MoveResult } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { ContactHeldItemTransferChanceModifier, @@ -56,18 +61,28 @@ import { PokemonMultiHitModifier, } from "#app/modifier/modifier"; import { PokemonPhase } from "#app/phases/pokemon-phase"; -import { BooleanHolder, executeIf, isNullOrUndefined, NumberHolder } from "#app/utils"; +import { BooleanHolder, isNullOrUndefined, NumberHolder } from "#app/utils"; +import { type nil } from "#app/utils"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; +import type { Moves } from "#enums/moves"; import i18next from "i18next"; +import type { Phase } from "#app/phase"; +import { ShowAbilityPhase } from "./show-ability-phase"; +import { MovePhase } from "./move-phase"; +import { MoveEndPhase } from "./move-end-phase"; export class MoveEffectPhase extends PokemonPhase { public move: PokemonMove; protected targets: BattlerIndex[]; + protected reflected: boolean = false; - constructor(scene: BattleScene, battlerIndex: BattlerIndex, targets: BattlerIndex[], move: PokemonMove) { - super(scene, battlerIndex); + /** + * @param reflected Indicates that the move was reflected by the user due to magic coat or magic bounce + */ + constructor(battlerIndex: BattlerIndex, targets: BattlerIndex[], move: PokemonMove, reflected: boolean = false) { + super(battlerIndex); this.move = move; + this.reflected = reflected; /** * In double battles, if the right Pokemon selects a spread move and the left Pokemon dies * with no party members available to switch in, then the right Pokemon takes the index @@ -92,6 +107,13 @@ export class MoveEffectPhase extends PokemonPhase { return super.end(); } + /** If an enemy used this move, set this as last enemy that used move or ability */ + if (!user.isPlayer()) { + globalScene.currentBattle.lastEnemyInvolved = this.fieldIndex; + } else { + globalScene.currentBattle.lastPlayerInvolved = this.fieldIndex; + } + const isDelayedAttack = this.move.getMove().hasAttr(DelayedAttackAttr); /** If the user was somehow removed from the field and it's not a delayed attack, end this phase */ if (!user.isOnField()) { @@ -121,92 +143,103 @@ export class MoveEffectPhase extends PokemonPhase { const move = this.move.getMove(); // Assume single target for override - applyMoveAttrs(OverrideMoveEffectAttr, user, this.getFirstTarget() ?? null, move, overridden, this.move.virtual).then(() => { - // If other effects were overriden, stop this phase before they can be applied - if (overridden.value) { - return this.end(); + applyMoveAttrs(OverrideMoveEffectAttr, user, this.getFirstTarget() ?? null, move, overridden, this.move.virtual); + + // If other effects were overriden, stop this phase before they can be applied + if (overridden.value) { + return this.end(); + } + + user.lapseTags(BattlerTagLapseType.MOVE_EFFECT); + + // If the user is acting again (such as due to Instruct), reset hitsLeft/hitCount so that + // the move executes correctly (ensures all hits of a multi-hit are properly calculated) + if (user.turnData.hitsLeft === 0 && user.turnData.hitCount > 0 && user.turnData.extraTurns > 0) { + user.turnData.hitsLeft = -1; + user.turnData.hitCount = 0; + user.turnData.extraTurns--; + } + + /** + * If this phase is for the first hit of the invoked move, + * resolve the move's total hit count. This block combines the + * effects of the move itself, Parental Bond, and Multi-Lens to do so. + */ + if (user.turnData.hitsLeft === -1) { + const hitCount = new NumberHolder(1); + // Assume single target for multi hit + applyMoveAttrs(MultiHitAttr, user, this.getFirstTarget() ?? null, move, hitCount); + // If Parental Bond is applicable, add another hit + applyPreAttackAbAttrs(AddSecondStrikeAbAttr, user, null, move, false, hitCount, null); + // If Multi-Lens is applicable, add hits equal to the number of held Multi-Lenses + globalScene.applyModifiers(PokemonMultiHitModifier, user.isPlayer(), user, move.id, hitCount); + // Set the user's relevant turnData fields to reflect the final hit count + user.turnData.hitCount = hitCount.value; + user.turnData.hitsLeft = hitCount.value; + } + + /** + * Log to be entered into the user's move history once the move result is resolved. + * Note that `result` (a {@linkcode MoveResult}) logs whether the move was successfully + * used in the sense of "Does it have an effect on the user?". + */ + const moveHistoryEntry = { move: this.move.moveId, targets: this.targets, result: MoveResult.PENDING, virtual: this.move.virtual }; + + /** + * Stores results of hit checks of the invoked move against all targets, organized by battler index. + * @see {@linkcode hitCheck} + */ + const targetHitChecks = Object.fromEntries(targets.map(p => [ p.getBattlerIndex(), this.hitCheck(p) ])); + const hasActiveTargets = targets.some(t => t.isActive(true)); + + /** Check if the target is immune via ability to the attacking move, and NOT in semi invulnerable state */ + const isImmune = targets[0]?.hasAbilityWithAttr(TypeImmunityAbAttr) + && (targets[0]?.getAbility()?.getAttrs(TypeImmunityAbAttr)?.[0]?.getImmuneType() === user.getMoveType(move)) + && !targets[0]?.getTag(SemiInvulnerableTag); + + const mayBounce = move.hasFlag(MoveFlags.REFLECTABLE) && !this.reflected && targets.some(t => t.hasAbilityWithAttr(ReflectStatusMoveAbAttr) || !!t.getTag(BattlerTagType.MAGIC_COAT)); + + /** + * If no targets are left for the move to hit (FAIL), or the invoked move is non-reflectable, single-target + * (and not random target) and failed the hit check against its target (MISS), log the move + * as FAILed or MISSed (depending on the conditions above) and end this phase. + */ + if (!hasActiveTargets || (!mayBounce && !move.hasAttr(VariableTargetAttr) && !move.isMultiTarget() && !targetHitChecks[this.targets[0]] && !targets[0].getTag(ProtectedTag) && !isImmune)) { + this.stopMultiHit(); + if (hasActiveTargets) { + globalScene.queueMessage(i18next.t("battle:attackMissed", { pokemonNameWithAffix: this.getFirstTarget() ? getPokemonNameWithAffix(this.getFirstTarget()!) : "" })); + moveHistoryEntry.result = MoveResult.MISS; + applyMoveAttrs(MissEffectAttr, user, null, this.move.getMove()); + } else { + globalScene.queueMessage(i18next.t("battle:attackFailed")); + moveHistoryEntry.result = MoveResult.FAIL; } + user.pushMoveHistory(moveHistoryEntry); + return this.end(); + } - user.lapseTags(BattlerTagLapseType.MOVE_EFFECT); - - // If the user is acting again (such as due to Instruct), reset hitsLeft/hitCount so that - // the move executes correctly (ensures all hits of a multi-hit are properly calculated) - if (user.turnData.hitsLeft === 0 && user.turnData.hitCount > 0 && user.turnData.extraTurns > 0) { - user.turnData.hitsLeft = -1; - user.turnData.hitCount = 0; - user.turnData.extraTurns--; - } - - /** - * If this phase is for the first hit of the invoked move, - * resolve the move's total hit count. This block combines the - * effects of the move itself, Parental Bond, and Multi-Lens to do so. - */ - if (user.turnData.hitsLeft === -1) { - const hitCount = new NumberHolder(1); - // Assume single target for multi hit - applyMoveAttrs(MultiHitAttr, user, this.getFirstTarget() ?? null, move, hitCount); - // If Parental Bond is applicable, add another hit - applyPreAttackAbAttrs(AddSecondStrikeAbAttr, user, null, move, false, hitCount, null); - // If Multi-Lens is applicable, add hits equal to the number of held Multi-Lenses - this.scene.applyModifiers(PokemonMultiHitModifier, user.isPlayer(), user, move.id, hitCount); - // Set the user's relevant turnData fields to reflect the final hit count - user.turnData.hitCount = hitCount.value; - user.turnData.hitsLeft = hitCount.value; - } - - /** - * Log to be entered into the user's move history once the move result is resolved. - * Note that `result` (a {@linkcode MoveResult}) logs whether the move was successfully - * used in the sense of "Does it have an effect on the user?". - */ - const moveHistoryEntry = { move: this.move.moveId, targets: this.targets, result: MoveResult.PENDING, virtual: this.move.virtual }; - - /** - * Stores results of hit checks of the invoked move against all targets, organized by battler index. - * @see {@linkcode hitCheck} - */ - const targetHitChecks = Object.fromEntries(targets.map(p => [ p.getBattlerIndex(), this.hitCheck(p) ])); - const hasActiveTargets = targets.some(t => t.isActive(true)); - - /** Check if the target is immune via ability to the attacking move, and NOT in semi invulnerable state */ - const isImmune = targets[0]?.hasAbilityWithAttr(TypeImmunityAbAttr) - && (targets[0]?.getAbility()?.getAttrs(TypeImmunityAbAttr)?.[0]?.getImmuneType() === user.getMoveType(move)) - && !targets[0]?.getTag(SemiInvulnerableTag); - - /** - * If no targets are left for the move to hit (FAIL), or the invoked move is single-target - * (and not random target) and failed the hit check against its target (MISS), log the move - * as FAILed or MISSed (depending on the conditions above) and end this phase. - */ - if (!hasActiveTargets || (!move.hasAttr(VariableTargetAttr) && !move.isMultiTarget() && !targetHitChecks[this.targets[0]] && !targets[0].getTag(ProtectedTag) && !isImmune)) { - this.stopMultiHit(); - if (hasActiveTargets) { - this.scene.queueMessage(i18next.t("battle:attackMissed", { pokemonNameWithAffix: this.getFirstTarget() ? getPokemonNameWithAffix(this.getFirstTarget()!) : "" })); - moveHistoryEntry.result = MoveResult.MISS; - applyMoveAttrs(MissEffectAttr, user, null, this.move.getMove()); - } else { - this.scene.queueMessage(i18next.t("battle:attackFailed")); - moveHistoryEntry.result = MoveResult.FAIL; - } - user.pushMoveHistory(moveHistoryEntry); - return this.end(); - } - - /** All move effect attributes are chained together in this array to be applied asynchronously. */ - const applyAttrs: Promise[] = []; - - const playOnEmptyField = this.scene.currentBattle?.mysteryEncounter?.hasBattleAnimationsWithoutTargets ?? false; - // Move animation only needs one target - new MoveAnim(move.id as Moves, user, this.getFirstTarget()!.getBattlerIndex(), playOnEmptyField).play(this.scene, move.hitsSubstitute(user, this.getFirstTarget()!), () => { + const playOnEmptyField = globalScene.currentBattle?.mysteryEncounter?.hasBattleAnimationsWithoutTargets ?? false; + // Move animation only needs one target + new MoveAnim(move.id as Moves, user, this.getFirstTarget()!.getBattlerIndex(), playOnEmptyField).play( + move.hitsSubstitute(user, this.getFirstTarget()!), + () => { /** Has the move successfully hit a target (for damage) yet? */ let hasHit: boolean = false; - for (const target of targets) { - // Prevent ENEMY_SIDE targeted moves from occurring twice in double battles - if (move.moveTarget === MoveTarget.ENEMY_SIDE && target !== targets[targets.length - 1]) { - continue; - } + // Prevent ENEMY_SIDE targeted moves from occurring twice in double battles + // and check which target will magic bounce. + const trueTargets: Pokemon[] = move.moveTarget !== MoveTarget.ENEMY_SIDE ? targets : (() => { + const magicCoatTargets = targets.filter(t => t.getTag(BattlerTagType.MAGIC_COAT) || t.hasAbilityWithAttr(ReflectStatusMoveAbAttr)); + + // only magic coat effect cares about order + if (!mayBounce || magicCoatTargets.length === 0) { + return [ targets[0] ]; + } + return [ magicCoatTargets[0] ]; + })(); + + const queuedPhases: Phase[] = []; + for (const target of trueTargets) { /** The {@linkcode ArenaTagSide} to which the target belongs */ const targetSide = target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; /** Has the invoked move been cancelled by conditional protection (e.g Quick Guard)? */ @@ -215,11 +248,11 @@ export class MoveEffectPhase extends PokemonPhase { const bypassIgnoreProtect = new BooleanHolder(false); /** If the move is not targeting a Pokemon on the user's side, try to apply conditional protection effects */ if (!this.move.getMove().isAllyTarget()) { - this.scene.arena.applyTagsForSide(ConditionalProtectTag, targetSide, false, hasConditionalProtectApplied, user, target, move.id, bypassIgnoreProtect); + globalScene.arena.applyTagsForSide(ConditionalProtectTag, targetSide, false, hasConditionalProtectApplied, user, target, move.id, bypassIgnoreProtect); } /** Is the target protected by Protect, etc. or a relevant conditional protection effect? */ - const isProtected = ( + const isProtected = !([ MoveTarget.ENEMY_SIDE, MoveTarget.BOTH_SIDES ].includes(this.move.getMove().moveTarget)) && ( bypassIgnoreProtect.value || !this.move.getMove().checkFlag(MoveFlags.IGNORE_PROTECT, user, target)) && (hasConditionalProtectApplied.value @@ -228,13 +261,39 @@ export class MoveEffectPhase extends PokemonPhase { || (this.move.getMove().category !== MoveCategory.STATUS && target.findTags(t => t instanceof DamageProtectedTag).find(t => target.lapseTag(t.tagType)))); + /** Is the target hidden by the effects of its Commander ability? */ + const isCommanding = globalScene.currentBattle.double && target.getAlly()?.getTag(BattlerTagType.COMMANDED)?.getSourcePokemon() === target; + + /** Is the target reflecting status moves from the magic coat move? */ + const isReflecting = !!target.getTag(BattlerTagType.MAGIC_COAT); + + /** Is the target's magic bounce ability not ignored and able to reflect this move? */ + const canMagicBounce = !isReflecting && !move.checkFlag(MoveFlags.IGNORE_ABILITIES, user, target) && target.hasAbilityWithAttr(ReflectStatusMoveAbAttr); + + const semiInvulnerableTag = target.getTag(SemiInvulnerableTag); + + /** Is the target reflecting the effect, not protected, and not in an semi-invulnerable state?*/ + const willBounce = (!isProtected && !this.reflected && !isCommanding + && move.hasFlag(MoveFlags.REFLECTABLE) + && (isReflecting || canMagicBounce) + && !semiInvulnerableTag); + + // If the move will bounce, then queue the bounce and move on to the next target + if (!target.switchOutStatus && willBounce) { + const newTargets = move.isMultiTarget() ? getMoveTargets(target, move.id).targets : [ user.getBattlerIndex() ]; + if (!isReflecting) { + queuedPhases.push(new ShowAbilityPhase(target.getBattlerIndex(), target.getPassiveAbility().hasAttr(ReflectStatusMoveAbAttr))); + } + + queuedPhases.push(new MovePhase(target, newTargets, new PokemonMove(move.id, 0, 0, true), true, true, true)); + continue; + } + /** Is the pokemon immune due to an ablility, and also not in a semi invulnerable state? */ const isImmune = target.hasAbilityWithAttr(TypeImmunityAbAttr) && (target.getAbility()?.getAttrs(TypeImmunityAbAttr)?.[0]?.getImmuneType() === user.getMoveType(move)) - && !target.getTag(SemiInvulnerableTag); + && !semiInvulnerableTag; - /** Is the target hidden by the effects of its Commander ability? */ - const isCommanding = this.scene.currentBattle.double && target.getAlly()?.getTag(BattlerTagType.COMMANDED)?.getSourcePokemon(this.scene) === target; /** * If the move missed a target, stop all future hits against that target @@ -243,7 +302,7 @@ export class MoveEffectPhase extends PokemonPhase { if (target.switchOutStatus || isCommanding || (!isImmune && !isProtected && !targetHitChecks[target.getBattlerIndex()])) { this.stopMultiHit(target); if (!target.switchOutStatus) { - this.scene.queueMessage(i18next.t("battle:attackMissed", { pokemonNameWithAffix: getPokemonNameWithAffix(target) })); + globalScene.queueMessage(i18next.t("battle:attackMissed", { pokemonNameWithAffix: getPokemonNameWithAffix(target) })); } if (moveHistoryEntry.result === MoveResult.PENDING) { moveHistoryEntry.result = MoveResult.MISS; @@ -254,7 +313,7 @@ export class MoveEffectPhase extends PokemonPhase { } /** Does this phase represent the invoked move's first strike? */ - const firstHit = (user.turnData.hitsLeft === user.turnData.hitCount); + const firstHit = user.turnData.hitsLeft === user.turnData.hitCount; // Only log the move's result on the first strike if (firstHit) { @@ -304,7 +363,7 @@ export class MoveEffectPhase extends PokemonPhase { } /** Does this phase represent the invoked move's last strike? */ - const lastHit = (user.turnData.hitsLeft === 1 || !this.getFirstTarget()?.isActive()); + const lastHit = user.turnData.hitsLeft === 1 || !this.getFirstTarget()?.isActive(); /** * If the user can change forms by using the invoked move, @@ -312,7 +371,7 @@ export class MoveEffectPhase extends PokemonPhase { * (see Relic Song's interaction with Parental Bond when used by Meloetta). */ if (lastHit) { - this.scene.triggerPokemonFormChange(user, SpeciesFormChangePostMoveTrigger); + globalScene.triggerPokemonFormChange(user, SpeciesFormChangePostMoveTrigger); /** * Multi-Lens, Multi Hit move and Parental Bond check for PostDamageAbAttr * other damage source are calculated in damageAndUpdate in pokemon.ts @@ -322,75 +381,65 @@ export class MoveEffectPhase extends PokemonPhase { } } - /** - * Create a Promise that applies *all* effects from the invoked move's MoveEffectAttrs. - * These are ordered by trigger type (see {@linkcode MoveEffectTrigger}), and each trigger - * type requires different conditions to be met with respect to the move's hit result. - */ - const k = new Promise((resolve) => { - //Start promise chain and apply PRE_APPLY move attributes - let promiseChain: Promise = applyFilteredMoveAttrs((attr: MoveAttr) => - attr instanceof MoveEffectAttr - && attr.trigger === MoveEffectTrigger.PRE_APPLY - && (!attr.firstHitOnly || firstHit) - && (!attr.lastHitOnly || lastHit) - && hitResult !== HitResult.NO_EFFECT, user, target, move); + applyFilteredMoveAttrs( + (attr: MoveAttr) => + attr instanceof MoveEffectAttr && + attr.trigger === MoveEffectTrigger.PRE_APPLY && + (!attr.firstHitOnly || firstHit) && + (!attr.lastHitOnly || lastHit) && + hitResult !== HitResult.NO_EFFECT, + user, + target, + move, + ); - /** Don't complete if the move failed */ - if (hitResult === HitResult.FAIL) { - return resolve(); - } - - /** Apply Move/Ability Effects in correct order */ - promiseChain = promiseChain - .then(this.applySelfTargetEffects(user, target, firstHit, lastHit)); + if (hitResult !== HitResult.FAIL) { + this.applySelfTargetEffects(user, target, firstHit, lastHit); if (hitResult !== HitResult.NO_EFFECT) { - promiseChain - .then(this.applyPostApplyEffects(user, target, firstHit, lastHit)) - .then(this.applyHeldItemFlinchCheck(user, target, dealsDamage)) - .then(this.applySuccessfulAttackEffects(user, target, firstHit, lastHit, !!isProtected, hitResult, firstTarget)) - .then(() => resolve()); + this.applyPostApplyEffects(user, target, firstHit, lastHit); + this.applyHeldItemFlinchCheck(user, target, dealsDamage); + this.applySuccessfulAttackEffects(user, target, firstHit, lastHit, !!isProtected, hitResult, firstTarget); } else { - promiseChain - .then(() => applyMoveAttrs(NoEffectAttr, user, null, move)) - .then(resolve); + applyMoveAttrs(NoEffectAttr, user, null, move); } - }); - - applyAttrs.push(k); - } - - // Apply the move's POST_TARGET effects on the move's last hit, after all targeted effects have resolved - const postTarget = (user.turnData.hitsLeft === 1 || !this.getFirstTarget()?.isActive()) ? - applyFilteredMoveAttrs((attr: MoveAttr) => attr instanceof MoveEffectAttr && attr.trigger === MoveEffectTrigger.POST_TARGET, user, null, move) : - null; - - if (postTarget) { - if (applyAttrs.length) { // If there is a pending asynchronous move effect, do this after - applyAttrs[applyAttrs.length - 1].then(() => postTarget); - } else { // Otherwise, push a new asynchronous move effect - applyAttrs.push(postTarget); } } - // Wait for all move effects to finish applying, then end this phase - Promise.allSettled(applyAttrs).then(() => { - /** - * Remove the target's substitute (if it exists and has expired) - * after all targeted effects have applied. - * This prevents blocked effects from applying until after this hit resolves. - */ - targets.forEach(target => { - const substitute = target.getTag(SubstituteTag); - if (substitute && substitute.hp <= 0) { - target.lapseTag(BattlerTagType.SUBSTITUTE); - } - }); - this.end(); + // Apply queued phases + if (queuedPhases.length) { + globalScene.appendToPhase(queuedPhases, MoveEndPhase); + } + // Apply the move's POST_TARGET effects on the move's last hit, after all targeted effects have resolved + if (user.turnData.hitsLeft === 1 || !this.getFirstTarget()?.isActive()) { + applyFilteredMoveAttrs( + (attr: MoveAttr) => attr instanceof MoveEffectAttr && attr.trigger === MoveEffectTrigger.POST_TARGET, + user, + null, + move, + ); + } + + /** + * Remove the target's substitute (if it exists and has expired) + * after all targeted effects have applied. + * This prevents blocked effects from applying until after this hit resolves. + */ + targets.forEach((target) => { + const substitute = target.getTag(SubstituteTag); + if (substitute && substitute.hp <= 0) { + target.lapseTag(BattlerTagType.SUBSTITUTE); + } }); - }); - }); + + const moveType = user.getMoveType(move, true); + if (move.category !== MoveCategory.STATUS && !user.stellarTypesBoosted.includes(moveType)) { + user.stellarTypesBoosted.push(moveType); + } + + this.end(); + }, + ); } public override end(): void { @@ -404,16 +453,16 @@ export class MoveEffectPhase extends PokemonPhase { */ if (user) { if (user.turnData.hitsLeft && --user.turnData.hitsLeft >= 1 && this.getFirstTarget()?.isActive()) { - this.scene.unshiftPhase(this.getNewHitPhase()); + globalScene.unshiftPhase(this.getNewHitPhase()); } else { // Queue message for number of hits made by multi-move // If multi-hit attack only hits once, still want to render a message const hitsTotal = user.turnData.hitCount - Math.max(user.turnData.hitsLeft, 0); if (hitsTotal > 1 || (user.turnData.hitsLeft && user.turnData.hitsLeft > 0)) { // If there are multiple hits, or if there are hits of the multi-hit move left - this.scene.queueMessage(i18next.t("battle:attackHitsCount", { count: hitsTotal })); + globalScene.queueMessage(i18next.t("battle:attackHitsCount", { count: hitsTotal })); } - this.scene.applyModifiers(HitHealModifier, this.player, user); + globalScene.applyModifiers(HitHealModifier, this.player, user); // Clear all cached move effectiveness values among targets this.getTargets().forEach((target) => target.turnData.moveEffectiveness = null); } @@ -431,8 +480,8 @@ export class MoveEffectPhase extends PokemonPhase { * @param lastHit - `true` if this is the last hit in a multi-hit attack * @returns a function intended to be passed into a `then()` call. */ - protected applySelfTargetEffects(user: Pokemon, target: Pokemon, firstHit: boolean, lastHit: boolean): () => Promise { - return () => applyFilteredMoveAttrs((attr: MoveAttr) => + protected applySelfTargetEffects(user: Pokemon, target: Pokemon, firstHit: boolean, lastHit: boolean): void { + applyFilteredMoveAttrs((attr: MoveAttr) => attr instanceof MoveEffectAttr && attr.trigger === MoveEffectTrigger.POST_APPLY && attr.selfTarget @@ -449,8 +498,8 @@ export class MoveEffectPhase extends PokemonPhase { * @param lastHit - `true` if this is the last hit in a multi-hit attack * @returns a function intended to be passed into a `then()` call. */ - protected applyPostApplyEffects(user: Pokemon, target: Pokemon, firstHit: boolean, lastHit: boolean): () => Promise { - return () => applyFilteredMoveAttrs((attr: MoveAttr) => + protected applyPostApplyEffects(user: Pokemon, target: Pokemon, firstHit: boolean, lastHit: boolean): void { + applyFilteredMoveAttrs((attr: MoveAttr) => attr instanceof MoveEffectAttr && attr.trigger === MoveEffectTrigger.POST_APPLY && !attr.selfTarget @@ -468,8 +517,8 @@ export class MoveEffectPhase extends PokemonPhase { * @param firstTarget - `true` if {@linkcode target} is the first target hit by this strike of {@linkcode move} * @returns a function intended to be passed into a `then()` call. */ - protected applyOnHitEffects(user: Pokemon, target: Pokemon, firstHit : boolean, lastHit: boolean, firstTarget: boolean): Promise { - return applyFilteredMoveAttrs((attr: MoveAttr) => + protected applyOnHitEffects(user: Pokemon, target: Pokemon, firstHit : boolean, lastHit: boolean, firstTarget: boolean): void { + applyFilteredMoveAttrs((attr: MoveAttr) => attr instanceof MoveEffectAttr && attr.trigger === MoveEffectTrigger.HIT && (!attr.firstHitOnly || firstHit) @@ -485,21 +534,18 @@ export class MoveEffectPhase extends PokemonPhase { * @param hitResult - The {@linkcode HitResult} of the attempted move * @returns a `Promise` intended to be passed into a `then()` call. */ - protected applyOnGetHitAbEffects(user: Pokemon, target: Pokemon, hitResult: HitResult): Promise { - return executeIf(!target.isFainted() || target.canApplyAbility(), () => - applyPostDefendAbAttrs(PostDefendAbAttr, target, user, this.move.getMove(), hitResult) - .then(() => { + protected applyOnGetHitAbEffects(user: Pokemon, target: Pokemon, hitResult: HitResult): void { + if (!target.isFainted() || target.canApplyAbility()) { + applyPostDefendAbAttrs(PostDefendAbAttr, target, user, this.move.getMove(), hitResult); - if (!this.move.getMove().hitsSubstitute(user, target)) { - if (!user.isPlayer() && this.move.getMove() instanceof AttackMove) { - user.scene.applyShuffledModifiers(this.scene, EnemyAttackStatusEffectChanceModifier, false, target); - } + if (!this.move.getMove().hitsSubstitute(user, target)) { + if (!user.isPlayer() && this.move.getMove() instanceof AttackMove) { + globalScene.applyShuffledModifiers(EnemyAttackStatusEffectChanceModifier, false, target); + } - target.lapseTags(BattlerTagLapseType.AFTER_HIT); - } - - }) - ); + target.lapseTags(BattlerTagLapseType.AFTER_HIT); + } + } } /** @@ -514,17 +560,15 @@ export class MoveEffectPhase extends PokemonPhase { * @param firstTarget - `true` if {@linkcode target} is the first target hit by this strike of {@linkcode move} * @returns a function intended to be passed into a `then()` call. */ - protected applySuccessfulAttackEffects(user: Pokemon, target: Pokemon, firstHit : boolean, lastHit: boolean, isProtected : boolean, hitResult: HitResult, firstTarget: boolean) : () => Promise { - return () => executeIf(!isProtected, () => - this.applyOnHitEffects(user, target, firstHit, lastHit, firstTarget).then(() => - this.applyOnGetHitAbEffects(user, target, hitResult)).then(() => - applyPostAttackAbAttrs(PostAttackAbAttr, user, target, this.move.getMove(), hitResult)).then(() => { // Item Stealing Effects - - if (this.move.getMove() instanceof AttackMove) { - this.scene.applyModifiers(ContactHeldItemTransferChanceModifier, this.player, user, target); - } - }) - ); + protected applySuccessfulAttackEffects(user: Pokemon, target: Pokemon, firstHit: boolean, lastHit: boolean, isProtected: boolean, hitResult: HitResult, firstTarget: boolean): void { + if (!isProtected) { + this.applyOnHitEffects(user, target, firstHit, lastHit, firstTarget); + this.applyOnGetHitAbEffects(user, target, hitResult); + applyPostAttackAbAttrs(PostAttackAbAttr, user, target, this.move.getMove(), hitResult); + if (this.move.getMove() instanceof AttackMove) { + globalScene.applyModifiers(ContactHeldItemTransferChanceModifier, this.player, user, target); + } + } } /** @@ -534,20 +578,18 @@ export class MoveEffectPhase extends PokemonPhase { * @param dealsDamage - `true` if the attempted move successfully dealt damage * @returns a function intended to be passed into a `then()` call. */ - protected applyHeldItemFlinchCheck(user: Pokemon, target: Pokemon, dealsDamage: boolean) : () => void { - return () => { - if (this.move.getMove().hasAttr(FlinchAttr)) { - return; - } + protected applyHeldItemFlinchCheck(user: Pokemon, target: Pokemon, dealsDamage: boolean) : void { + if (this.move.getMove().hasAttr(FlinchAttr)) { + return; + } - if (dealsDamage && !target.hasAbilityWithAttr(IgnoreMoveEffectsAbAttr) && !this.move.getMove().hitsSubstitute(user, target)) { - const flinched = new BooleanHolder(false); - user.scene.applyModifiers(FlinchChanceModifier, user.isPlayer(), user, flinched); - if (flinched.value) { - target.addTag(BattlerTagType.FLINCHED, undefined, this.move.moveId, user.id); - } + if (dealsDamage && !target.hasAbilityWithAttr(IgnoreMoveEffectsAbAttr) && !this.move.getMove().hitsSubstitute(user, target)) { + const flinched = new BooleanHolder(false); + globalScene.applyModifiers(FlinchChanceModifier, user.isPlayer(), user, flinched); + if (flinched.value) { + target.addTag(BattlerTagType.FLINCHED, undefined, this.move.moveId, user.id); } - }; + } } /** @@ -576,12 +618,7 @@ export class MoveEffectPhase extends PokemonPhase { } } - if (user.hasAbilityWithAttr(AlwaysHitAbAttr) || target.hasAbilityWithAttr(AlwaysHitAbAttr)) { - return true; - } - - // If the user should ignore accuracy on a target, check who the user targeted last turn and see if they match - if (user.getTag(BattlerTagType.IGNORE_ACCURACY) && (user.getLastXMoves().find(() => true)?.targets || []).indexOf(target.getBattlerIndex()) !== -1) { + if (this.checkBypassAccAndInvuln(target)) { return true; } @@ -589,15 +626,12 @@ export class MoveEffectPhase extends PokemonPhase { return true; } - if (target.getTag(BattlerTagType.TELEKINESIS) && !target.getTag(SemiInvulnerableTag) && !this.move.getMove().hasAttr(OneHitKOAttr)) { + const semiInvulnerableTag = target.getTag(SemiInvulnerableTag); + if (target.getTag(BattlerTagType.TELEKINESIS) && !semiInvulnerableTag && !this.move.getMove().hasAttr(OneHitKOAttr)) { return true; } - const semiInvulnerableTag = target.getTag(SemiInvulnerableTag); - if (semiInvulnerableTag - && !this.move.getMove().getAttrs(HitsTagAttr).some(hta => hta.tagType === semiInvulnerableTag.tagType) - && !(this.move.getMove().hasAttr(ToxicAccuracyAttr) && user.isOfType(Type.POISON)) - ) { + if (semiInvulnerableTag && !this.checkBypassSemiInvuln(semiInvulnerableTag)) { return false; } @@ -613,17 +647,63 @@ export class MoveEffectPhase extends PokemonPhase { return rand < (moveAccuracy * accuracyMultiplier); } + /** + * Check whether the move should bypass *both* the accuracy *and* semi-invulnerable states. + * @param target - The {@linkcode Pokemon} targeted by the invoked move + * @returns `true` if the move should bypass accuracy and semi-invulnerability + * + * Accuracy and semi-invulnerability can be bypassed by: + * - An ability like {@linkcode Abilities.NO_GUARD | No Guard} + * - A poison type using {@linkcode Moves.TOXIC | Toxic} + * - A move like {@linkcode Moves.LOCK_ON | Lock-On} or {@linkcode Moves.MIND_READER | Mind Reader}. + * + * Does *not* check against effects {@linkcode Moves.GLAIVE_RUSH | Glaive Rush} status (which + * should not bypass semi-invulnerability), or interactions like Earthquake hitting against Dig, + * (which should not bypass the accuracy check). + * + * @see {@linkcode hitCheck} + */ + public checkBypassAccAndInvuln(target: Pokemon) { + const user = this.getUserPokemon(); + if (!user) { + return false; + } + if (user.hasAbilityWithAttr(AlwaysHitAbAttr) || target.hasAbilityWithAttr(AlwaysHitAbAttr)) { + return true; + } + if ((this.move.getMove().hasAttr(ToxicAccuracyAttr) && user.isOfType(Type.POISON))) { + return true; + } + // TODO: Fix lock on / mind reader check. + if (user.getTag(BattlerTagType.IGNORE_ACCURACY) && (user.getLastXMoves().find(() => true)?.targets || []).indexOf(target.getBattlerIndex()) !== -1) { + return true; + } + } + + /** + * Check whether the move is able to ignore the given `semiInvulnerableTag` + * @param semiInvulnerableTag - The semiInvulnerbale tag to check against + * @returns `true` if the move can ignore the semi-invulnerable state + */ + public checkBypassSemiInvuln(semiInvulnerableTag: SemiInvulnerableTag | nil): boolean { + if (!semiInvulnerableTag) { + return false; + } + const move = this.move.getMove(); + return move.getAttrs(HitsTagAttr).some(hta => hta.tagType === semiInvulnerableTag.tagType); + } + /** @returns The {@linkcode Pokemon} using this phase's invoked move */ public getUserPokemon(): Pokemon | null { if (this.battlerIndex > BattlerIndex.ENEMY_2) { - return this.scene.getPokemonById(this.battlerIndex); + return globalScene.getPokemonById(this.battlerIndex); } - return (this.player ? this.scene.getPlayerField() : this.scene.getEnemyField())[this.fieldIndex]; + return (this.player ? globalScene.getPlayerField() : globalScene.getEnemyField())[this.fieldIndex]; } /** @returns An array of all {@linkcode Pokemon} targeted by this phase's invoked move */ public getTargets(): Pokemon[] { - return this.scene.getField(true).filter(p => this.targets.indexOf(p.getBattlerIndex()) > -1); + return globalScene.getField(true).filter(p => this.targets.indexOf(p.getBattlerIndex()) > -1); } /** @returns The first target of this phase's invoked move */ @@ -665,6 +745,6 @@ export class MoveEffectPhase extends PokemonPhase { /** @returns A new `MoveEffectPhase` with the same properties as this phase */ protected getNewHitPhase(): MoveEffectPhase { - return new MoveEffectPhase(this.scene, this.battlerIndex, this.targets, this.move); + return new MoveEffectPhase(this.battlerIndex, this.targets, this.move); } } diff --git a/src/phases/move-end-phase.ts b/src/phases/move-end-phase.ts index e03f2ec14b0..428dacd639a 100644 --- a/src/phases/move-end-phase.ts +++ b/src/phases/move-end-phase.ts @@ -1,11 +1,11 @@ -import BattleScene from "#app/battle-scene"; -import { BattlerIndex } from "#app/battle"; +import { globalScene } from "#app/global-scene"; +import type { BattlerIndex } from "#app/battle"; import { BattlerTagLapseType } from "#app/data/battler-tags"; import { PokemonPhase } from "./pokemon-phase"; export class MoveEndPhase extends PokemonPhase { - constructor(scene: BattleScene, battlerIndex: BattlerIndex) { - super(scene, battlerIndex); + constructor(battlerIndex: BattlerIndex) { + super(battlerIndex); } start() { @@ -16,7 +16,7 @@ export class MoveEndPhase extends PokemonPhase { pokemon.lapseTags(BattlerTagLapseType.AFTER_MOVE); } - this.scene.arena.setIgnoreAbilities(false); + globalScene.arena.setIgnoreAbilities(false); this.end(); } diff --git a/src/phases/move-header-phase.ts b/src/phases/move-header-phase.ts index c307ff0be6e..5b89548b663 100644 --- a/src/phases/move-header-phase.ts +++ b/src/phases/move-header-phase.ts @@ -1,14 +1,14 @@ -import BattleScene from "#app/battle-scene"; import { applyMoveAttrs, MoveHeaderAttr } from "#app/data/move"; -import Pokemon, { PokemonMove } from "#app/field/pokemon"; +import type { PokemonMove } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; import { BattlePhase } from "./battle-phase"; export class MoveHeaderPhase extends BattlePhase { public pokemon: Pokemon; public move: PokemonMove; - constructor(scene: BattleScene, pokemon: Pokemon, move: PokemonMove) { - super(scene); + constructor(pokemon: Pokemon, move: PokemonMove) { + super(); this.pokemon = pokemon; this.move = move; @@ -22,9 +22,8 @@ export class MoveHeaderPhase extends BattlePhase { super.start(); if (this.canMove()) { - applyMoveAttrs(MoveHeaderAttr, this.pokemon, null, this.move.getMove()).then(() => this.end()); - } else { - this.end(); + applyMoveAttrs(MoveHeaderAttr, this.pokemon, null, this.move.getMove()); } + this.end(); } } diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index 089386bee00..d58c052812f 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { applyAbAttrs, applyPostMoveUsedAbAttrs, @@ -9,9 +9,9 @@ import { PokemonTypeChangeAbAttr, PostMoveUsedAbAttr, RedirectMoveAbAttr, - ReduceStatusEffectDurationAbAttr + ReduceStatusEffectDurationAbAttr, } from "#app/data/ability"; -import { DelayedAttackTag } from "#app/data/arena-tag"; +import type { DelayedAttackTag } from "#app/data/arena-tag"; import { CommonAnim } from "#app/data/battle-anims"; import { BattlerTagLapseType, CenterOfAttentionTag } from "#app/data/battler-tags"; import { @@ -24,14 +24,17 @@ import { frenzyMissFunc, HealStatusEffectAttr, MoveFlags, - PreMoveMessageAttr + PreMoveMessageAttr, + PreUseInterruptAttr, } from "#app/data/move"; import { SpeciesFormChangePreMoveTrigger } from "#app/data/pokemon-forms"; import { getStatusEffectActivationText, getStatusEffectHealText } from "#app/data/status-effect"; import { Type } from "#enums/type"; import { getTerrainBlockMessage } from "#app/data/weather"; import { MoveUsedEvent } from "#app/events/battle-scene"; -import Pokemon, { MoveResult, PokemonMove } from "#app/field/pokemon"; +import type { PokemonMove } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; +import { MoveResult } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import Overrides from "#app/overrides"; import { BattlePhase } from "#app/phases/battle-phase"; @@ -40,7 +43,7 @@ import { MoveChargePhase } from "#app/phases/move-charge-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; import { ShowAbilityPhase } from "#app/phases/show-ability-phase"; -import { BooleanHolder, NumberHolder } from "#app/utils"; +import { NumberHolder } from "#app/utils"; import { Abilities } from "#enums/abilities"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; @@ -54,8 +57,10 @@ export class MovePhase extends BattlePhase { protected _targets: BattlerIndex[]; protected followUp: boolean; protected ignorePp: boolean; + protected forcedLast: boolean; protected failed: boolean = false; protected cancelled: boolean = false; + protected reflected: boolean = false; public get pokemon(): Pokemon { return this._pokemon; @@ -82,17 +87,22 @@ export class MovePhase extends BattlePhase { } /** - * @param followUp Indicates that the move being uses is a "follow-up" - for example, a move being used by Metronome or Dancer. + * @param followUp Indicates that the move being used is a "follow-up" - for example, a move being used by Metronome or Dancer. * Follow-ups bypass a few failure conditions, including flinches, sleep/paralysis/freeze and volatile status checks, etc. + * @param reflected Indicates that the move was reflected by Magic Coat or Magic Bounce. + * Reflected moves cannot be reflected again and will not trigger Dancer. */ - constructor(scene: BattleScene, pokemon: Pokemon, targets: BattlerIndex[], move: PokemonMove, followUp: boolean = false, ignorePp: boolean = false) { - super(scene); + + constructor(pokemon: Pokemon, targets: BattlerIndex[], move: PokemonMove, followUp: boolean = false, ignorePp: boolean = false, reflected: boolean = false, forcedLast: boolean = false) { + super(); this.pokemon = pokemon; this.targets = targets; this.move = move; this.followUp = followUp; this.ignorePp = ignorePp; + this.reflected = reflected; + this.forcedLast = forcedLast; } /** @@ -114,6 +124,15 @@ export class MovePhase extends BattlePhase { this.cancelled = true; } + /** + * Shows whether the current move has been forced to the end of the turn + * Needed for speed order, see {@linkcode Moves.QUASH} + * */ + public isForcedLast(): boolean { + return this.forcedLast; + } + + public start(): void { super.start(); @@ -138,9 +157,9 @@ export class MovePhase extends BattlePhase { } // Check move to see if arena.ignoreAbilities should be true. - if (!this.followUp) { + if (!this.followUp || this.reflected) { if (this.move.getMove().checkFlag(MoveFlags.IGNORE_ABILITIES, this.pokemon, null)) { - this.scene.arena.setIgnoreAbilities(true, this.pokemon.getBattlerIndex()); + globalScene.arena.setIgnoreAbilities(true, this.pokemon.getBattlerIndex()); } } @@ -180,7 +199,7 @@ export class MovePhase extends BattlePhase { } public getActiveTargetPokemon(): Pokemon[] { - return this.scene.getField(true).filter(p => this.targets.includes(p.getBattlerIndex())); + return globalScene.getField(true).filter(p => this.targets.includes(p.getBattlerIndex())); } /** @@ -219,10 +238,10 @@ export class MovePhase extends BattlePhase { if (activated) { this.cancel(); - this.scene.queueMessage(getStatusEffectActivationText(this.pokemon.status.effect, getPokemonNameWithAffix(this.pokemon))); - this.scene.unshiftPhase(new CommonAnimPhase(this.scene, this.pokemon.getBattlerIndex(), undefined, CommonAnim.POISON + (this.pokemon.status.effect - 1))); + globalScene.queueMessage(getStatusEffectActivationText(this.pokemon.status.effect, getPokemonNameWithAffix(this.pokemon))); + globalScene.unshiftPhase(new CommonAnimPhase(this.pokemon.getBattlerIndex(), undefined, CommonAnim.POISON + (this.pokemon.status.effect - 1))); } else if (healed) { - this.scene.queueMessage(getStatusEffectHealText(this.pokemon.status.effect, getPokemonNameWithAffix(this.pokemon))); + globalScene.queueMessage(getStatusEffectHealText(this.pokemon.status.effect, getPokemonNameWithAffix(this.pokemon))); this.pokemon.resetStatus(); this.pokemon.updateInfo(); } @@ -247,13 +266,13 @@ export class MovePhase extends BattlePhase { const moveQueue = this.pokemon.getMoveQueue(); // form changes happen even before we know that the move wll execute. - this.scene.triggerPokemonFormChange(this.pokemon, SpeciesFormChangePreMoveTrigger); + globalScene.triggerPokemonFormChange(this.pokemon, SpeciesFormChangePreMoveTrigger); const isDelayedAttack = this.move.getMove().hasAttr(DelayedAttackAttr); if (isDelayedAttack) { // Check the player side arena if future sight is active - const futureSightTags = this.scene.arena.findTags(t => t.tagType === ArenaTagType.FUTURE_SIGHT); - const doomDesireTags = this.scene.arena.findTags(t => t.tagType === ArenaTagType.DOOM_DESIRE); + const futureSightTags = globalScene.arena.findTags(t => t.tagType === ArenaTagType.FUTURE_SIGHT); + const doomDesireTags = globalScene.arena.findTags(t => t.tagType === ArenaTagType.DOOM_DESIRE); let fail = false; const currentTargetIndex = targets[0].getBattlerIndex(); for (const tag of futureSightTags) { @@ -275,7 +294,18 @@ export class MovePhase extends BattlePhase { } } - this.showMoveText(); + let success: boolean = true; + // Check if there are any attributes that can interrupt the move, overriding the fail message. + for (const move of this.move.getMove().getAttrs(PreUseInterruptAttr)) { + if (move.apply(this.pokemon, targets[0], this.move.getMove())) { + success = false; + break; + } + } + + if (success) { + this.showMoveText(); + } if (moveQueue.length > 0) { // Using .shift here clears out two turn moves once they've been used @@ -291,12 +321,7 @@ export class MovePhase extends BattlePhase { const ppUsed = 1 + this.getPpIncreaseFromPressure(targets); this.move.usePp(ppUsed); - this.scene.eventTarget.dispatchEvent(new MoveUsedEvent(this.pokemon?.id, this.move.getMove(), this.move.ppUsed)); - } - - // Update the battle's "last move" pointer, unless we're currently mimicking a move. - if (!allMoves[this.move.moveId].hasAttr(CopyMoveAttr)) { - this.scene.currentBattle.lastMove = this.move.moveId; + globalScene.eventTarget.dispatchEvent(new MoveUsedEvent(this.pokemon?.id, this.move.getMove(), this.move.ppUsed)); } /** @@ -316,11 +341,22 @@ export class MovePhase extends BattlePhase { * Move conditions assume the move has a single target * TODO: is this sustainable? */ - const passesConditions = move.applyConditions(this.pokemon, targets[0], move); - const failedDueToWeather: boolean = this.scene.arena.isMoveWeatherCancelled(this.pokemon, move); - const failedDueToTerrain: boolean = this.scene.arena.isMoveTerrainCancelled(this.pokemon, this.targets, move); + let failedDueToTerrain: boolean = false; + if (success) { + const passesConditions = move.applyConditions(this.pokemon, targets[0], move); + const failedDueToWeather: boolean = globalScene.arena.isMoveWeatherCancelled(this.pokemon, move); + failedDueToTerrain = globalScene.arena.isMoveTerrainCancelled(this.pokemon, this.targets, move); + success = passesConditions && !failedDueToWeather && !failedDueToTerrain; + } - const success = passesConditions && !failedDueToWeather && !failedDueToTerrain; + + // Update the battle's "last move" pointer, unless we're currently mimicking a move. + if (!allMoves[this.move.moveId].hasAttr(CopyMoveAttr)) { + // The last move used is unaffected by moves that fail + if (success) { + globalScene.currentBattle.lastMove = this.move.moveId; + } + } /** * If the move has not failed, trigger ability-based user type changes and then execute it. @@ -330,7 +366,7 @@ export class MovePhase extends BattlePhase { */ if (success) { applyPreAttackAbAttrs(PokemonTypeChangeAbAttr, this.pokemon, null, this.move.getMove()); - this.scene.unshiftPhase(new MoveEffectPhase(this.scene, this.pokemon.getBattlerIndex(), this.targets, this.move)); + globalScene.unshiftPhase(new MoveEffectPhase(this.pokemon.getBattlerIndex(), this.targets, this.move, this.reflected)); } else { if ([ Moves.ROAR, Moves.WHIRLWIND, Moves.TRICK_OR_TREAT, Moves.FORESTS_CURSE ].includes(this.move.moveId)) { @@ -339,13 +375,12 @@ export class MovePhase extends BattlePhase { this.pokemon.pushMoveHistory({ move: this.move.moveId, targets: this.targets, result: MoveResult.FAIL, virtual: this.move.virtual }); + const failureMessage = move.getFailedText(this.pokemon, targets[0], move); let failedText: string | undefined; - const failureMessage = move.getFailedText(this.pokemon, targets[0], move, new BooleanHolder(false)); - if (failureMessage) { failedText = failureMessage; } else if (failedDueToTerrain) { - failedText = getTerrainBlockMessage(this.pokemon, this.scene.arena.getTerrainType()); + failedText = getTerrainBlockMessage(targets[0], globalScene.arena.getTerrainType()); } this.showFailedText(failedText); @@ -357,7 +392,7 @@ export class MovePhase extends BattlePhase { // Handle Dancer, which triggers immediately after a move is used (rather than waiting on `this.end()`). // Note that the `!this.followUp` check here prevents an infinite Dancer loop. if (this.move.getMove().hasFlag(MoveFlags.DANCE_MOVE) && !this.followUp) { - this.scene.getField(true).forEach(pokemon => { + globalScene.getField(true).forEach(pokemon => { applyPostMoveUsedAbAttrs(PostMoveUsedAbAttr, pokemon, this.move, this.pokemon, this.targets); }); } @@ -373,11 +408,11 @@ export class MovePhase extends BattlePhase { applyPreAttackAbAttrs(PokemonTypeChangeAbAttr, this.pokemon, null, this.move.getMove()); this.showMoveText(); - this.scene.unshiftPhase(new MoveChargePhase(this.scene, this.pokemon.getBattlerIndex(), this.targets[0], this.move)); + globalScene.unshiftPhase(new MoveChargePhase(this.pokemon.getBattlerIndex(), this.targets[0], this.move)); } else { this.pokemon.pushMoveHistory({ move: this.move.moveId, targets: this.targets, result: MoveResult.FAIL, virtual: this.move.virtual }); - const failureMessage = move.getFailedText(this.pokemon, targets[0], move, new BooleanHolder(false)); + const failureMessage = move.getFailedText(this.pokemon, targets[0], move); this.showMoveText(); this.showFailedText(failureMessage ?? undefined); @@ -392,7 +427,7 @@ export class MovePhase extends BattlePhase { */ public end(): void { if (!this.followUp && this.canMove()) { - this.scene.unshiftPhase(new MoveEndPhase(this.scene, this.pokemon.getBattlerIndex())); + globalScene.unshiftPhase(new MoveEndPhase(this.pokemon.getBattlerIndex())); } super.end(); @@ -420,7 +455,7 @@ export class MovePhase extends BattlePhase { const redirectTarget = new NumberHolder(currentTarget); // check move redirection abilities of every pokemon *except* the user. - this.scene.getField(true).filter(p => p !== this.pokemon).forEach(p => applyAbAttrs(RedirectMoveAbAttr, p, null, false, this.move.moveId, redirectTarget)); + globalScene.getField(true).filter(p => p !== this.pokemon).forEach(p => applyAbAttrs(RedirectMoveAbAttr, p, null, false, this.move.moveId, redirectTarget)); /** `true` if an Ability is responsible for redirecting the move to another target; `false` otherwise */ let redirectedByAbility = (currentTarget !== redirectTarget.value); @@ -447,7 +482,7 @@ export class MovePhase extends BattlePhase { if (this.pokemon.hasAbilityWithAttr(BlockRedirectAbAttr)) { redirectTarget.value = currentTarget; - this.scene.unshiftPhase(new ShowAbilityPhase(this.scene, this.pokemon.getBattlerIndex(), this.pokemon.getPassiveAbility().hasAttr(BlockRedirectAbAttr))); + globalScene.unshiftPhase(new ShowAbilityPhase(this.pokemon.getBattlerIndex(), this.pokemon.getPassiveAbility().hasAttr(BlockRedirectAbAttr))); } this.targets[0] = redirectTarget.value; @@ -470,9 +505,9 @@ export class MovePhase extends BattlePhase { // account for metal burst and comeuppance hitting remaining targets in double battles // counterattack will redirect to remaining ally if original attacker faints - if (this.scene.currentBattle.double && this.move.getMove().hasFlag(MoveFlags.REDIRECT_COUNTER)) { - if (this.scene.getField()[this.targets[0]].hp === 0) { - const opposingField = this.pokemon.isPlayer() ? this.scene.getEnemyField() : this.scene.getPlayerField(); + if (globalScene.currentBattle.double && this.move.getMove().hasFlag(MoveFlags.REDIRECT_COUNTER)) { + if (globalScene.getField()[this.targets[0]].hp === 0) { + const opposingField = this.pokemon.isPlayer() ? globalScene.getEnemyField() : globalScene.getPlayerField(); this.targets[0] = opposingField.find(p => p.hp > 0)?.getBattlerIndex() ?? BattlerIndex.ATTACKER; } } @@ -509,14 +544,14 @@ export class MovePhase extends BattlePhase { this.move.usePp(); } - this.scene.eventTarget.dispatchEvent(new MoveUsedEvent(this.pokemon?.id, this.move.getMove(), ppUsed)); + globalScene.eventTarget.dispatchEvent(new MoveUsedEvent(this.pokemon?.id, this.move.getMove(), ppUsed)); } if (this.cancelled && this.pokemon.summonData?.tags?.find(t => t.tagType === BattlerTagType.FRENZY)) { frenzyMissFunc(this.pokemon, this.move.getMove()); } - this.pokemon.pushMoveHistory({ move: Moves.NONE, result: MoveResult.FAIL }); + this.pokemon.pushMoveHistory({ move: Moves.NONE, result: MoveResult.FAIL, targets: this.targets }); this.pokemon.lapseTags(BattlerTagLapseType.MOVE_EFFECT); this.pokemon.lapseTags(BattlerTagLapseType.AFTER_MOVE); @@ -538,14 +573,14 @@ export class MovePhase extends BattlePhase { return; } - this.scene.queueMessage(i18next.t("battle:useMove", { + globalScene.queueMessage(i18next.t(this.reflected ? "battle:magicCoatActivated" : "battle:useMove", { pokemonNameWithAffix: getPokemonNameWithAffix(this.pokemon), moveName: this.move.getName() }), 500); applyMoveAttrs(PreMoveMessageAttr, this.pokemon, this.pokemon.getOpponents()[0], this.move.getMove()); } - public showFailedText(failedText?: string): void { - this.scene.queueMessage(failedText ?? i18next.t("battle:attackFailed")); + public showFailedText(failedText: string = i18next.t("battle:attackFailed")): void { + globalScene.queueMessage(failedText); } } diff --git a/src/phases/mystery-encounter-phases.ts b/src/phases/mystery-encounter-phases.ts index 2d1c3c4ae31..da78f59535f 100644 --- a/src/phases/mystery-encounter-phases.ts +++ b/src/phases/mystery-encounter-phases.ts @@ -1,5 +1,6 @@ import { BattlerTagLapseType } from "#app/data/battler-tags"; -import MysteryEncounterOption, { OptionPhaseCallback } from "#app/data/mystery-encounters/mystery-encounter-option"; +import type { OptionPhaseCallback } from "#app/data/mystery-encounters/mystery-encounter-option"; +import type MysteryEncounterOption from "#app/data/mystery-encounters/mystery-encounter-option"; import { SeenEncounterData } from "#app/data/mystery-encounters/mystery-encounter-save-data"; import { getEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { CheckSwitchPhase } from "#app/phases/check-switch-phase"; @@ -17,9 +18,10 @@ import { BattlerTagType } from "#enums/battler-tag-type"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; import { SwitchType } from "#enums/switch-type"; import i18next from "i18next"; -import BattleScene from "../battle-scene"; +import { globalScene } from "#app/global-scene"; import { getCharVariantFromDialogue } from "../data/dialogue"; -import { OptionSelectSettings, transitionMysteryEncounterIntroVisuals } from "../data/mystery-encounters/utils/encounter-phase-utils"; +import type { OptionSelectSettings } from "../data/mystery-encounters/utils/encounter-phase-utils"; +import { transitionMysteryEncounterIntroVisuals } from "../data/mystery-encounters/utils/encounter-phase-utils"; import { TrainerSlot } from "../data/trainer-config"; import { IvScannerModifier } from "../modifier/modifier"; import { Phase } from "../phase"; @@ -42,11 +44,10 @@ export class MysteryEncounterPhase extends Phase { /** * Mostly useful for having repeated queries during a single encounter, where the queries and options may differ each time - * @param scene * @param optionSelectSettings allows overriding the typical options of an encounter with new ones */ - constructor(scene: BattleScene, optionSelectSettings?: OptionSelectSettings) { - super(scene); + constructor(optionSelectSettings?: OptionSelectSettings) { + super(); this.optionSelectSettings = optionSelectSettings; } @@ -57,20 +58,20 @@ export class MysteryEncounterPhase extends Phase { super.start(); // Clears out queued phases that are part of standard battle - this.scene.clearPhaseQueue(); - this.scene.clearPhaseQueueSplice(); + globalScene.clearPhaseQueue(); + globalScene.clearPhaseQueueSplice(); - const encounter = this.scene.currentBattle.mysteryEncounter!; - encounter.updateSeedOffset(this.scene); + const encounter = globalScene.currentBattle.mysteryEncounter!; + encounter.updateSeedOffset(); if (!this.optionSelectSettings) { // Sets flag that ME was encountered, only if this is not a followup option select phase // Can be used in later MEs to check for requirements to spawn, run history, etc. - this.scene.mysteryEncounterSaveData.encounteredEvents.push(new SeenEncounterData(encounter.encounterType, encounter.encounterTier, this.scene.currentBattle.waveIndex)); + globalScene.mysteryEncounterSaveData.encounteredEvents.push(new SeenEncounterData(encounter.encounterType, encounter.encounterTier, globalScene.currentBattle.waveIndex)); } // Initiates encounter dialogue window and option select - this.scene.ui.setMode(Mode.MYSTERY_ENCOUNTER, this.optionSelectSettings); + globalScene.ui.setMode(Mode.MYSTERY_ENCOUNTER, this.optionSelectSettings); } /** @@ -80,13 +81,13 @@ export class MysteryEncounterPhase extends Phase { */ handleOptionSelect(option: MysteryEncounterOption, index: number): boolean { // Set option selected flag - this.scene.currentBattle.mysteryEncounter!.selectedOption = option; + globalScene.currentBattle.mysteryEncounter!.selectedOption = option; if (!this.optionSelectSettings) { // Saves the selected option in the ME save data, only if this is not a followup option select phase // Can be used for analytics purposes to track what options are popular on certain encounters - const encounterSaveData = this.scene.mysteryEncounterSaveData.encounteredEvents[this.scene.mysteryEncounterSaveData.encounteredEvents.length - 1]; - if (encounterSaveData.type === this.scene.currentBattle.mysteryEncounter?.encounterType) { + const encounterSaveData = globalScene.mysteryEncounterSaveData.encounteredEvents[globalScene.mysteryEncounterSaveData.encounteredEvents.length - 1]; + if (encounterSaveData.type === globalScene.currentBattle.mysteryEncounter?.encounterType) { encounterSaveData.selectedOption = index; } } @@ -96,17 +97,17 @@ export class MysteryEncounterPhase extends Phase { } // Populate dialogue tokens for option requirements - this.scene.currentBattle.mysteryEncounter!.populateDialogueTokensFromRequirements(this.scene); + globalScene.currentBattle.mysteryEncounter!.populateDialogueTokensFromRequirements(); if (option.onPreOptionPhase) { - this.scene.executeWithSeedOffset(async () => { - return await option.onPreOptionPhase!(this.scene) + globalScene.executeWithSeedOffset(async () => { + return await option.onPreOptionPhase!() .then((result) => { if (isNullOrUndefined(result) || result) { this.continueEncounter(); } }); - }, this.scene.currentBattle.mysteryEncounter?.getSeedOffset()); + }, globalScene.currentBattle.mysteryEncounter?.getSeedOffset()); } else { this.continueEncounter(); } @@ -119,30 +120,30 @@ export class MysteryEncounterPhase extends Phase { */ continueEncounter() { const endDialogueAndContinueEncounter = () => { - this.scene.pushPhase(new MysteryEncounterOptionSelectedPhase(this.scene)); + globalScene.pushPhase(new MysteryEncounterOptionSelectedPhase()); this.end(); }; - const optionSelectDialogue = this.scene.currentBattle?.mysteryEncounter?.selectedOption?.dialogue; + const optionSelectDialogue = globalScene.currentBattle?.mysteryEncounter?.selectedOption?.dialogue; if (optionSelectDialogue?.selected && optionSelectDialogue.selected.length > 0) { // Handle intermediate dialogue (between player selection event and the onOptionSelect logic) - this.scene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(Mode.MESSAGE); const selectedDialogue = optionSelectDialogue.selected; let i = 0; const showNextDialogue = () => { const nextAction = i === selectedDialogue.length - 1 ? endDialogueAndContinueEncounter : showNextDialogue; const dialogue = selectedDialogue[i]; let title: string | null = null; - const text: string | null = getEncounterText(this.scene, dialogue.text); + const text: string | null = getEncounterText(dialogue.text); if (dialogue.speaker) { - title = getEncounterText(this.scene, dialogue.speaker); + title = getEncounterText(dialogue.speaker); } i++; if (title) { - this.scene.ui.showDialogue(text ?? "", title, null, nextAction, 0, i === 1 ? this.FIRST_DIALOGUE_PROMPT_DELAY : 0); + globalScene.ui.showDialogue(text ?? "", title, null, nextAction, 0, i === 1 ? this.FIRST_DIALOGUE_PROMPT_DELAY : 0); } else { - this.scene.ui.showText(text ?? "", null, nextAction, i === 1 ? this.FIRST_DIALOGUE_PROMPT_DELAY : 0, true); + globalScene.ui.showText(text ?? "", null, nextAction, i === 1 ? this.FIRST_DIALOGUE_PROMPT_DELAY : 0, true); } }; @@ -156,7 +157,7 @@ export class MysteryEncounterPhase extends Phase { * Ends phase */ end() { - this.scene.ui.setMode(Mode.MESSAGE).then(() => super.end()); + globalScene.ui.setMode(Mode.MESSAGE).then(() => super.end()); } } @@ -170,9 +171,9 @@ export class MysteryEncounterPhase extends Phase { export class MysteryEncounterOptionSelectedPhase extends Phase { onOptionSelect: OptionPhaseCallback; - constructor(scene: BattleScene) { - super(scene); - this.onOptionSelect = this.scene.currentBattle.mysteryEncounter!.selectedOption!.onOptionPhase; + constructor() { + super(); + this.onOptionSelect = globalScene.currentBattle.mysteryEncounter!.selectedOption!.onOptionPhase; } /** @@ -184,20 +185,20 @@ export class MysteryEncounterOptionSelectedPhase extends Phase { */ start() { super.start(); - if (this.scene.currentBattle.mysteryEncounter?.autoHideIntroVisuals) { - transitionMysteryEncounterIntroVisuals(this.scene).then(() => { - this.scene.executeWithSeedOffset(() => { - this.onOptionSelect(this.scene).finally(() => { + if (globalScene.currentBattle.mysteryEncounter?.autoHideIntroVisuals) { + transitionMysteryEncounterIntroVisuals().then(() => { + globalScene.executeWithSeedOffset(() => { + this.onOptionSelect().finally(() => { this.end(); }); - }, this.scene.currentBattle.mysteryEncounter?.getSeedOffset() * 500); + }, globalScene.currentBattle.mysteryEncounter?.getSeedOffset() * 500); }); } else { - this.scene.executeWithSeedOffset(() => { - this.onOptionSelect(this.scene).finally(() => { + globalScene.executeWithSeedOffset(() => { + this.onOptionSelect().finally(() => { this.end(); }); - }, this.scene.currentBattle.mysteryEncounter?.getSeedOffset() * 500); + }, globalScene.currentBattle.mysteryEncounter?.getSeedOffset() * 500); } } } @@ -209,8 +210,8 @@ export class MysteryEncounterOptionSelectedPhase extends Phase { * See {@linkcode TurnEndPhase} for more details */ export class MysteryEncounterBattleStartCleanupPhase extends Phase { - constructor(scene: BattleScene) { - super(scene); + constructor() { + super(); } /** @@ -221,7 +222,7 @@ export class MysteryEncounterBattleStartCleanupPhase extends Phase { // Lapse any residual flinches/endures but ignore all other turn-end battle tags const includedLapseTags = [ BattlerTagType.FLINCHED, BattlerTagType.ENDURING ]; - const field = this.scene.getField(true).filter(p => p.summonData); + const field = globalScene.getField(true).filter(p => p.summonData); field.forEach(pokemon => { const tags = pokemon.summonData.tags; tags.filter(t => includedLapseTags.includes(t.tagType) @@ -233,31 +234,31 @@ export class MysteryEncounterBattleStartCleanupPhase extends Phase { }); // Remove any status tick phases - while (!!this.scene.findPhase(p => p instanceof PostTurnStatusEffectPhase)) { - this.scene.tryRemovePhase(p => p instanceof PostTurnStatusEffectPhase); + while (!!globalScene.findPhase(p => p instanceof PostTurnStatusEffectPhase)) { + globalScene.tryRemovePhase(p => p instanceof PostTurnStatusEffectPhase); } // The total number of Pokemon in the player's party that can legally fight - const legalPlayerPokemon = this.scene.getPokemonAllowedInBattle(); + const legalPlayerPokemon = globalScene.getPokemonAllowedInBattle(); // The total number of legal player Pokemon that aren't currently on the field const legalPlayerPartyPokemon = legalPlayerPokemon.filter(p => !p.isActive(true)); if (!legalPlayerPokemon.length) { - this.scene.unshiftPhase(new GameOverPhase(this.scene)); + globalScene.unshiftPhase(new GameOverPhase()); return this.end(); } // Check for any KOd player mons and switch // For each fainted mon on the field, if there is a legal replacement, summon it - const playerField = this.scene.getPlayerField(); + const playerField = globalScene.getPlayerField(); playerField.forEach((pokemon, i) => { if (!pokemon.isAllowedInBattle() && legalPlayerPartyPokemon.length > i) { - this.scene.unshiftPhase(new SwitchPhase(this.scene, SwitchType.SWITCH, i, true, false)); + globalScene.unshiftPhase(new SwitchPhase(SwitchType.SWITCH, i, true, false)); } }); // THEN, if is a double battle, and player only has 1 summoned pokemon, center pokemon on field - if (this.scene.currentBattle.double && legalPlayerPokemon.length === 1 && legalPlayerPartyPokemon.length === 0) { - this.scene.unshiftPhase(new ToggleDoublePositionPhase(this.scene, true)); + if (globalScene.currentBattle.double && legalPlayerPokemon.length === 1 && legalPlayerPartyPokemon.length === 0) { + globalScene.unshiftPhase(new ToggleDoublePositionPhase(true)); } this.end(); @@ -274,8 +275,8 @@ export class MysteryEncounterBattleStartCleanupPhase extends Phase { export class MysteryEncounterBattlePhase extends Phase { disableSwitch: boolean; - constructor(scene: BattleScene, disableSwitch = false) { - super(scene); + constructor(disableSwitch = false) { + super(); this.disableSwitch = disableSwitch; } @@ -285,28 +286,27 @@ export class MysteryEncounterBattlePhase extends Phase { start() { super.start(); - this.doMysteryEncounterBattle(this.scene); + this.doMysteryEncounterBattle(); } /** * Gets intro battle message for new battle - * @param scene * @private */ - private getBattleMessage(scene: BattleScene): string { - const enemyField = scene.getEnemyField(); - const encounterMode = scene.currentBattle.mysteryEncounter!.encounterMode; + private getBattleMessage(): string { + const enemyField = globalScene.getEnemyField(); + const encounterMode = globalScene.currentBattle.mysteryEncounter!.encounterMode; - if (scene.currentBattle.battleSpec === BattleSpec.FINAL_BOSS) { + if (globalScene.currentBattle.battleSpec === BattleSpec.FINAL_BOSS) { return i18next.t("battle:bossAppeared", { bossName: enemyField[0].name }); } if (encounterMode === MysteryEncounterMode.TRAINER_BATTLE) { - if (scene.currentBattle.double) { - return i18next.t("battle:trainerAppearedDouble", { trainerName: scene.currentBattle.trainer?.getName(TrainerSlot.NONE, true) }); + if (globalScene.currentBattle.double) { + return i18next.t("battle:trainerAppearedDouble", { trainerName: globalScene.currentBattle.trainer?.getName(TrainerSlot.NONE, true) }); } else { - return i18next.t("battle:trainerAppeared", { trainerName: scene.currentBattle.trainer?.getName(TrainerSlot.NONE, true) }); + return i18next.t("battle:trainerAppeared", { trainerName: globalScene.currentBattle.trainer?.getName(TrainerSlot.NONE, true) }); } } @@ -317,66 +317,65 @@ export class MysteryEncounterBattlePhase extends Phase { /** * Queues {@linkcode SummonPhase}s for the new battle, and handles trainer animations/dialogue if it's a Trainer battle - * @param scene * @private */ - private doMysteryEncounterBattle(scene: BattleScene) { - const encounterMode = scene.currentBattle.mysteryEncounter!.encounterMode; + private doMysteryEncounterBattle() { + const encounterMode = globalScene.currentBattle.mysteryEncounter!.encounterMode; if (encounterMode === MysteryEncounterMode.WILD_BATTLE || encounterMode === MysteryEncounterMode.BOSS_BATTLE) { // Summons the wild/boss Pokemon if (encounterMode === MysteryEncounterMode.BOSS_BATTLE) { - scene.playBgm(undefined); + globalScene.playBgm(); } - const availablePartyMembers = scene.getEnemyParty().filter(p => !p.isFainted()).length; - scene.unshiftPhase(new SummonPhase(scene, 0, false)); - if (scene.currentBattle.double && availablePartyMembers > 1) { - scene.unshiftPhase(new SummonPhase(scene, 1, false)); + const availablePartyMembers = globalScene.getEnemyParty().filter(p => !p.isFainted()).length; + globalScene.unshiftPhase(new SummonPhase(0, false)); + if (globalScene.currentBattle.double && availablePartyMembers > 1) { + globalScene.unshiftPhase(new SummonPhase(1, false)); } - if (!scene.currentBattle.mysteryEncounter?.hideBattleIntroMessage) { - scene.ui.showText(this.getBattleMessage(scene), null, () => this.endBattleSetup(scene), 0); + if (!globalScene.currentBattle.mysteryEncounter?.hideBattleIntroMessage) { + globalScene.ui.showText(this.getBattleMessage(), null, () => this.endBattleSetup(), 0); } else { - this.endBattleSetup(scene); + this.endBattleSetup(); } } else if (encounterMode === MysteryEncounterMode.TRAINER_BATTLE) { this.showEnemyTrainer(); const doSummon = () => { - scene.currentBattle.started = true; - scene.playBgm(undefined); - scene.pbTray.showPbTray(scene.getPlayerParty()); - scene.pbTrayEnemy.showPbTray(scene.getEnemyParty()); + globalScene.currentBattle.started = true; + globalScene.playBgm(); + globalScene.pbTray.showPbTray(globalScene.getPlayerParty()); + globalScene.pbTrayEnemy.showPbTray(globalScene.getEnemyParty()); const doTrainerSummon = () => { this.hideEnemyTrainer(); - const availablePartyMembers = scene.getEnemyParty().filter(p => !p.isFainted()).length; - scene.unshiftPhase(new SummonPhase(scene, 0, false)); - if (scene.currentBattle.double && availablePartyMembers > 1) { - scene.unshiftPhase(new SummonPhase(scene, 1, false)); + const availablePartyMembers = globalScene.getEnemyParty().filter(p => !p.isFainted()).length; + globalScene.unshiftPhase(new SummonPhase(0, false)); + if (globalScene.currentBattle.double && availablePartyMembers > 1) { + globalScene.unshiftPhase(new SummonPhase(1, false)); } - this.endBattleSetup(scene); + this.endBattleSetup(); }; - if (!scene.currentBattle.mysteryEncounter?.hideBattleIntroMessage) { - scene.ui.showText(this.getBattleMessage(scene), null, doTrainerSummon, 1000, true); + if (!globalScene.currentBattle.mysteryEncounter?.hideBattleIntroMessage) { + globalScene.ui.showText(this.getBattleMessage(), null, doTrainerSummon, 1000, true); } else { doTrainerSummon(); } }; - const encounterMessages = scene.currentBattle.trainer?.getEncounterMessages(); + const encounterMessages = globalScene.currentBattle.trainer?.getEncounterMessages(); if (!encounterMessages || !encounterMessages.length) { doSummon(); } else { - const trainer = this.scene.currentBattle.trainer; + const trainer = globalScene.currentBattle.trainer; let message: string; - scene.executeWithSeedOffset(() => message = Utils.randSeedItem(encounterMessages), this.scene.currentBattle.mysteryEncounter?.getSeedOffset()); + globalScene.executeWithSeedOffset(() => message = Utils.randSeedItem(encounterMessages), globalScene.currentBattle.mysteryEncounter?.getSeedOffset()); message = message!; // tell TS compiler it's defined now const showDialogueAndSummon = () => { - scene.ui.showDialogue(message, trainer?.getName(TrainerSlot.NONE, true), null, () => { - scene.charSprite.hide().then(() => scene.hideFieldOverlay(250).then(() => doSummon())); + globalScene.ui.showDialogue(message, trainer?.getName(TrainerSlot.NONE, true), null, () => { + globalScene.charSprite.hide().then(() => globalScene.hideFieldOverlay(250).then(() => doSummon())); }); }; - if (this.scene.currentBattle.trainer?.config.hasCharSprite && !this.scene.ui.shouldSkipDialogue(message)) { - this.scene.showFieldOverlay(500).then(() => this.scene.charSprite.showCharacter(trainer?.getKey()!, getCharVariantFromDialogue(encounterMessages[0])).then(() => showDialogueAndSummon())); // TODO: is this bang correct? + if (globalScene.currentBattle.trainer?.config.hasCharSprite && !globalScene.ui.shouldSkipDialogue(message)) { + globalScene.showFieldOverlay(500).then(() => globalScene.charSprite.showCharacter(trainer?.getKey()!, getCharVariantFromDialogue(encounterMessages[0])).then(() => showDialogueAndSummon())); // TODO: is this bang correct? } else { showDialogueAndSummon(); } @@ -386,49 +385,48 @@ export class MysteryEncounterBattlePhase extends Phase { /** * Initiate {@linkcode SummonPhase}s, {@linkcode ScanIvsPhase}, {@linkcode PostSummonPhase}s, etc. - * @param scene * @private */ - private endBattleSetup(scene: BattleScene) { - const enemyField = scene.getEnemyField(); - const encounterMode = scene.currentBattle.mysteryEncounter!.encounterMode; + private endBattleSetup() { + const enemyField = globalScene.getEnemyField(); + const encounterMode = globalScene.currentBattle.mysteryEncounter!.encounterMode; // PostSummon and ShinySparkle phases are handled by SummonPhase if (encounterMode !== MysteryEncounterMode.TRAINER_BATTLE) { - const ivScannerModifier = this.scene.findModifier(m => m instanceof IvScannerModifier); + const ivScannerModifier = globalScene.findModifier(m => m instanceof IvScannerModifier); if (ivScannerModifier) { - enemyField.map(p => this.scene.pushPhase(new ScanIvsPhase(this.scene, p.getBattlerIndex(), Math.min(ivScannerModifier.getStackCount() * 2, 6)))); + enemyField.map(p => globalScene.pushPhase(new ScanIvsPhase(p.getBattlerIndex()))); } } - const availablePartyMembers = scene.getPlayerParty().filter(p => p.isAllowedInBattle()); + const availablePartyMembers = globalScene.getPlayerParty().filter(p => p.isAllowedInBattle()); if (!availablePartyMembers[0].isOnField()) { - scene.pushPhase(new SummonPhase(scene, 0)); + globalScene.pushPhase(new SummonPhase(0)); } - if (scene.currentBattle.double) { + if (globalScene.currentBattle.double) { if (availablePartyMembers.length > 1) { - scene.pushPhase(new ToggleDoublePositionPhase(scene, true)); + globalScene.pushPhase(new ToggleDoublePositionPhase(true)); if (!availablePartyMembers[1].isOnField()) { - scene.pushPhase(new SummonPhase(scene, 1)); + globalScene.pushPhase(new SummonPhase(1)); } } } else { if (availablePartyMembers.length > 1 && availablePartyMembers[1].isOnField()) { - scene.getPlayerField().forEach((pokemon) => pokemon.lapseTag(BattlerTagType.COMMANDED)); - scene.pushPhase(new ReturnPhase(scene, 1)); + globalScene.getPlayerField().forEach((pokemon) => pokemon.lapseTag(BattlerTagType.COMMANDED)); + globalScene.pushPhase(new ReturnPhase(1)); } - scene.pushPhase(new ToggleDoublePositionPhase(scene, false)); + globalScene.pushPhase(new ToggleDoublePositionPhase(false)); } if (encounterMode !== MysteryEncounterMode.TRAINER_BATTLE && !this.disableSwitch) { - const minPartySize = scene.currentBattle.double ? 2 : 1; + const minPartySize = globalScene.currentBattle.double ? 2 : 1; if (availablePartyMembers.length > minPartySize) { - scene.pushPhase(new CheckSwitchPhase(scene, 0, scene.currentBattle.double)); - if (scene.currentBattle.double) { - scene.pushPhase(new CheckSwitchPhase(scene, 1, scene.currentBattle.double)); + globalScene.pushPhase(new CheckSwitchPhase(0, globalScene.currentBattle.double)); + if (globalScene.currentBattle.double) { + globalScene.pushPhase(new CheckSwitchPhase(1, globalScene.currentBattle.double)); } } } @@ -442,7 +440,7 @@ export class MysteryEncounterBattlePhase extends Phase { */ private showEnemyTrainer(): void { // Show enemy trainer - const trainer = this.scene.currentBattle.trainer; + const trainer = globalScene.currentBattle.trainer; if (!trainer) { return; } @@ -450,7 +448,7 @@ export class MysteryEncounterBattlePhase extends Phase { trainer.x += 16; trainer.y -= 16; trainer.setVisible(true); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: trainer, x: "-=16", y: "+=16", @@ -465,8 +463,8 @@ export class MysteryEncounterBattlePhase extends Phase { } private hideEnemyTrainer(): void { - this.scene.tweens.add({ - targets: this.scene.currentBattle.trainer, + globalScene.tweens.add({ + targets: globalScene.currentBattle.trainer, x: "+=16", y: "-=16", alpha: 0, @@ -490,8 +488,8 @@ export class MysteryEncounterBattlePhase extends Phase { export class MysteryEncounterRewardsPhase extends Phase { addHealPhase: boolean; - constructor(scene: BattleScene, addHealPhase: boolean = false) { - super(scene); + constructor(addHealPhase: boolean = false) { + super(); this.addHealPhase = addHealPhase; } @@ -500,23 +498,23 @@ export class MysteryEncounterRewardsPhase extends Phase { */ start() { super.start(); - const encounter = this.scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; if (encounter.doContinueEncounter) { - encounter.doContinueEncounter(this.scene).then(() => { + encounter.doContinueEncounter().then(() => { this.end(); }); } else { - this.scene.executeWithSeedOffset(() => { + globalScene.executeWithSeedOffset(() => { if (encounter.onRewards) { - encounter.onRewards(this.scene).then(() => { + encounter.onRewards().then(() => { this.doEncounterRewardsAndContinue(); }); } else { this.doEncounterRewardsAndContinue(); } // Do not use ME's seedOffset for rewards, these should always be consistent with waveIndex (once per wave) - }, this.scene.currentBattle.waveIndex * 1000); + }, globalScene.currentBattle.waveIndex * 1000); } } @@ -524,20 +522,20 @@ export class MysteryEncounterRewardsPhase extends Phase { * Queues encounter EXP and rewards phases, {@linkcode PostMysteryEncounterPhase}, and ends phase */ doEncounterRewardsAndContinue() { - const encounter = this.scene.currentBattle.mysteryEncounter!; + const encounter = globalScene.currentBattle.mysteryEncounter!; if (encounter.doEncounterExp) { - encounter.doEncounterExp(this.scene); + encounter.doEncounterExp(); } if (encounter.doEncounterRewards) { - encounter.doEncounterRewards(this.scene); + encounter.doEncounterRewards(); } else if (this.addHealPhase) { - this.scene.tryRemovePhase(p => p instanceof SelectModifierPhase); - this.scene.unshiftPhase(new SelectModifierPhase(this.scene, 0, undefined, { fillRemaining: false, rerollMultiplier: -1 })); + globalScene.tryRemovePhase(p => p instanceof SelectModifierPhase); + globalScene.unshiftPhase(new SelectModifierPhase(0, undefined, { fillRemaining: false, rerollMultiplier: -1 })); } - this.scene.pushPhase(new PostMysteryEncounterPhase(this.scene)); + globalScene.pushPhase(new PostMysteryEncounterPhase()); this.end(); } } @@ -553,9 +551,9 @@ export class PostMysteryEncounterPhase extends Phase { private readonly FIRST_DIALOGUE_PROMPT_DELAY = 750; onPostOptionSelect?: OptionPhaseCallback; - constructor(scene: BattleScene) { - super(scene); - this.onPostOptionSelect = this.scene.currentBattle.mysteryEncounter?.selectedOption?.onPostOptionPhase; + constructor() { + super(); + this.onPostOptionSelect = globalScene.currentBattle.mysteryEncounter?.selectedOption?.onPostOptionPhase; } /** @@ -565,14 +563,14 @@ export class PostMysteryEncounterPhase extends Phase { super.start(); if (this.onPostOptionSelect) { - this.scene.executeWithSeedOffset(async () => { - return await this.onPostOptionSelect!(this.scene) + globalScene.executeWithSeedOffset(async () => { + return await this.onPostOptionSelect!() .then((result) => { if (isNullOrUndefined(result) || result) { this.continueEncounter(); } }); - }, this.scene.currentBattle.mysteryEncounter?.getSeedOffset() * 2000); + }, globalScene.currentBattle.mysteryEncounter?.getSeedOffset() * 2000); } else { this.continueEncounter(); } @@ -583,28 +581,28 @@ export class PostMysteryEncounterPhase extends Phase { */ continueEncounter() { const endPhase = () => { - this.scene.pushPhase(new NewBattlePhase(this.scene)); + globalScene.pushPhase(new NewBattlePhase()); this.end(); }; - const outroDialogue = this.scene.currentBattle?.mysteryEncounter?.dialogue?.outro; + const outroDialogue = globalScene.currentBattle?.mysteryEncounter?.dialogue?.outro; if (outroDialogue && outroDialogue.length > 0) { let i = 0; const showNextDialogue = () => { const nextAction = i === outroDialogue.length - 1 ? endPhase : showNextDialogue; const dialogue = outroDialogue[i]; let title: string | null = null; - const text: string | null = getEncounterText(this.scene, dialogue.text); + const text: string | null = getEncounterText(dialogue.text); if (dialogue.speaker) { - title = getEncounterText(this.scene, dialogue.speaker); + title = getEncounterText(dialogue.speaker); } i++; - this.scene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(Mode.MESSAGE); if (title) { - this.scene.ui.showDialogue(text ?? "", title, null, nextAction, 0, i === 1 ? this.FIRST_DIALOGUE_PROMPT_DELAY : 0); + globalScene.ui.showDialogue(text ?? "", title, null, nextAction, 0, i === 1 ? this.FIRST_DIALOGUE_PROMPT_DELAY : 0); } else { - this.scene.ui.showText(text ?? "", null, nextAction, i === 1 ? this.FIRST_DIALOGUE_PROMPT_DELAY : 0, true); + globalScene.ui.showText(text ?? "", null, nextAction, i === 1 ? this.FIRST_DIALOGUE_PROMPT_DELAY : 0, true); } }; diff --git a/src/phases/new-battle-phase.ts b/src/phases/new-battle-phase.ts index 5a422c9e6c7..8cdbdc5891a 100644 --- a/src/phases/new-battle-phase.ts +++ b/src/phases/new-battle-phase.ts @@ -1,10 +1,11 @@ +import { globalScene } from "#app/global-scene"; import { BattlePhase } from "./battle-phase"; export class NewBattlePhase extends BattlePhase { start() { super.start(); - this.scene.newBattle(); + globalScene.newBattle(); this.end(); } diff --git a/src/phases/new-biome-encounter-phase.ts b/src/phases/new-biome-encounter-phase.ts index 910306b76ad..2de9a4300c5 100644 --- a/src/phases/new-biome-encounter-phase.ts +++ b/src/phases/new-biome-encounter-phase.ts @@ -1,34 +1,35 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { applyAbAttrs, PostBiomeChangeAbAttr } from "#app/data/ability"; import { getRandomWeatherType } from "#app/data/weather"; import { NextEncounterPhase } from "./next-encounter-phase"; export class NewBiomeEncounterPhase extends NextEncounterPhase { - constructor(scene: BattleScene) { - super(scene); + constructor() { + super(); } doEncounter(): void { - this.scene.playBgm(undefined, true); + globalScene.playBgm(undefined, true); - for (const pokemon of this.scene.getPlayerParty()) { + for (const pokemon of globalScene.getPlayerParty()) { if (pokemon) { pokemon.resetBattleData(); + pokemon.customPokemonData.resetHitReceivedCount(); } } - for (const pokemon of this.scene.getPlayerParty().filter(p => p.isOnField())) { + for (const pokemon of globalScene.getPlayerParty().filter(p => p.isOnField())) { applyAbAttrs(PostBiomeChangeAbAttr, pokemon, null); } - const enemyField = this.scene.getEnemyField(); - const moveTargets: any[] = [ this.scene.arenaEnemy, enemyField ]; - const mysteryEncounter = this.scene.currentBattle?.mysteryEncounter?.introVisuals; + const enemyField = globalScene.getEnemyField(); + const moveTargets: any[] = [ globalScene.arenaEnemy, enemyField ]; + const mysteryEncounter = globalScene.currentBattle?.mysteryEncounter?.introVisuals; if (mysteryEncounter) { moveTargets.push(mysteryEncounter); } - this.scene.tweens.add({ + globalScene.tweens.add({ targets: moveTargets.flat(), x: "+=300", duration: 2000, @@ -44,6 +45,6 @@ export class NewBiomeEncounterPhase extends NextEncounterPhase { * Set biome weather. */ trySetWeatherIfNewBiome(): void { - this.scene.arena.trySetWeather(getRandomWeatherType(this.scene.arena), false); + globalScene.arena.trySetWeather(getRandomWeatherType(globalScene.arena), false); } } diff --git a/src/phases/next-encounter-phase.ts b/src/phases/next-encounter-phase.ts index e086ed4fe3e..229d37f9a69 100644 --- a/src/phases/next-encounter-phase.ts +++ b/src/phases/next-encounter-phase.ts @@ -1,9 +1,9 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { EncounterPhase } from "./encounter-phase"; export class NextEncounterPhase extends EncounterPhase { - constructor(scene: BattleScene) { - super(scene); + constructor() { + super(); } start() { @@ -11,29 +11,29 @@ export class NextEncounterPhase extends EncounterPhase { } doEncounter(): void { - this.scene.playBgm(undefined, true); + globalScene.playBgm(undefined, true); - for (const pokemon of this.scene.getPlayerParty()) { + for (const pokemon of globalScene.getPlayerParty()) { if (pokemon) { pokemon.resetBattleData(); } } - this.scene.arenaNextEnemy.setBiome(this.scene.arena.biomeType); - this.scene.arenaNextEnemy.setVisible(true); + globalScene.arenaNextEnemy.setBiome(globalScene.arena.biomeType); + globalScene.arenaNextEnemy.setVisible(true); - const enemyField = this.scene.getEnemyField(); - const moveTargets: any[] = [ this.scene.arenaEnemy, this.scene.arenaNextEnemy, this.scene.currentBattle.trainer, enemyField, this.scene.lastEnemyTrainer ]; - const lastEncounterVisuals = this.scene.lastMysteryEncounter?.introVisuals; + const enemyField = globalScene.getEnemyField(); + const moveTargets: any[] = [ globalScene.arenaEnemy, globalScene.arenaNextEnemy, globalScene.currentBattle.trainer, enemyField, globalScene.lastEnemyTrainer ]; + const lastEncounterVisuals = globalScene.lastMysteryEncounter?.introVisuals; if (lastEncounterVisuals) { moveTargets.push(lastEncounterVisuals); } - const nextEncounterVisuals = this.scene.currentBattle.mysteryEncounter?.introVisuals; + const nextEncounterVisuals = globalScene.currentBattle.mysteryEncounter?.introVisuals; if (nextEncounterVisuals) { const enterFromRight = nextEncounterVisuals.enterFromRight; if (enterFromRight) { nextEncounterVisuals.x += 500; - this.scene.tweens.add({ + globalScene.tweens.add({ targets: nextEncounterVisuals, x: "-=200", duration: 2000 @@ -43,22 +43,22 @@ export class NextEncounterPhase extends EncounterPhase { } } - this.scene.tweens.add({ + globalScene.tweens.add({ targets: moveTargets.flat(), x: "+=300", duration: 2000, onComplete: () => { - this.scene.arenaEnemy.setBiome(this.scene.arena.biomeType); - this.scene.arenaEnemy.setX(this.scene.arenaNextEnemy.x); - this.scene.arenaEnemy.setAlpha(1); - this.scene.arenaNextEnemy.setX(this.scene.arenaNextEnemy.x - 300); - this.scene.arenaNextEnemy.setVisible(false); - if (this.scene.lastEnemyTrainer) { - this.scene.lastEnemyTrainer.destroy(); + globalScene.arenaEnemy.setBiome(globalScene.arena.biomeType); + globalScene.arenaEnemy.setX(globalScene.arenaNextEnemy.x); + globalScene.arenaEnemy.setAlpha(1); + globalScene.arenaNextEnemy.setX(globalScene.arenaNextEnemy.x - 300); + globalScene.arenaNextEnemy.setVisible(false); + if (globalScene.lastEnemyTrainer) { + globalScene.lastEnemyTrainer.destroy(); } if (lastEncounterVisuals) { - this.scene.field.remove(lastEncounterVisuals, true); - this.scene.lastMysteryEncounter!.introVisuals = undefined; + globalScene.field.remove(lastEncounterVisuals, true); + globalScene.lastMysteryEncounter!.introVisuals = undefined; } if (!this.tryOverrideForBattleSpec()) { diff --git a/src/phases/obtain-status-effect-phase.ts b/src/phases/obtain-status-effect-phase.ts index 01384b932cb..b01a90bd235 100644 --- a/src/phases/obtain-status-effect-phase.ts +++ b/src/phases/obtain-status-effect-phase.ts @@ -1,9 +1,9 @@ -import BattleScene from "#app/battle-scene"; -import { BattlerIndex } from "#app/battle"; +import { globalScene } from "#app/global-scene"; +import type { BattlerIndex } from "#app/battle"; import { CommonBattleAnim, CommonAnim } from "#app/data/battle-anims"; import { getStatusEffectObtainText, getStatusEffectOverlapText } from "#app/data/status-effect"; import { StatusEffect } from "#app/enums/status-effect"; -import Pokemon from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { PokemonPhase } from "./pokemon-phase"; @@ -13,8 +13,8 @@ export class ObtainStatusEffectPhase extends PokemonPhase { private sourceText?: string | null; private sourcePokemon?: Pokemon | null; - constructor(scene: BattleScene, battlerIndex: BattlerIndex, statusEffect?: StatusEffect, turnsRemaining?: number, sourceText?: string | null, sourcePokemon?: Pokemon | null) { - super(scene, battlerIndex); + constructor(battlerIndex: BattlerIndex, statusEffect?: StatusEffect, turnsRemaining?: number, sourceText?: string | null, sourcePokemon?: Pokemon | null) { + super(battlerIndex); this.statusEffect = statusEffect; this.turnsRemaining = turnsRemaining; @@ -30,14 +30,14 @@ export class ObtainStatusEffectPhase extends PokemonPhase { pokemon.status!.sleepTurnsRemaining = this.turnsRemaining; } pokemon.updateInfo(true); - new CommonBattleAnim(CommonAnim.POISON + (this.statusEffect! - 1), pokemon).play(this.scene, false, () => { - this.scene.queueMessage(getStatusEffectObtainText(this.statusEffect, getPokemonNameWithAffix(pokemon), this.sourceText ?? undefined)); + new CommonBattleAnim(CommonAnim.POISON + (this.statusEffect! - 1), pokemon).play(false, () => { + globalScene.queueMessage(getStatusEffectObtainText(this.statusEffect, getPokemonNameWithAffix(pokemon), this.sourceText ?? undefined)); this.end(); }); return; } } else if (pokemon.status?.effect === this.statusEffect) { - this.scene.queueMessage(getStatusEffectOverlapText(this.statusEffect ?? StatusEffect.NONE, getPokemonNameWithAffix(pokemon))); + globalScene.queueMessage(getStatusEffectOverlapText(this.statusEffect ?? StatusEffect.NONE, getPokemonNameWithAffix(pokemon))); } this.end(); } diff --git a/src/phases/party-exp-phase.ts b/src/phases/party-exp-phase.ts index c5a254871ca..8fd9e1cf0f6 100644 --- a/src/phases/party-exp-phase.ts +++ b/src/phases/party-exp-phase.ts @@ -1,4 +1,4 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { Phase } from "#app/phase"; /** @@ -10,8 +10,8 @@ export class PartyExpPhase extends Phase { useWaveIndexMultiplier?: boolean; pokemonParticipantIds?: Set; - constructor(scene: BattleScene, expValue: number, useWaveIndexMultiplier?: boolean, pokemonParticipantIds?: Set) { - super(scene); + constructor(expValue: number, useWaveIndexMultiplier?: boolean, pokemonParticipantIds?: Set) { + super(); this.expValue = expValue; this.useWaveIndexMultiplier = useWaveIndexMultiplier; @@ -24,7 +24,7 @@ export class PartyExpPhase extends Phase { start() { super.start(); - this.scene.applyPartyExp(this.expValue, false, this.useWaveIndexMultiplier, this.pokemonParticipantIds); + globalScene.applyPartyExp(this.expValue, false, this.useWaveIndexMultiplier, this.pokemonParticipantIds); this.end(); } diff --git a/src/phases/party-heal-phase.ts b/src/phases/party-heal-phase.ts index 4841bf9a5b4..c87c5d00be5 100644 --- a/src/phases/party-heal-phase.ts +++ b/src/phases/party-heal-phase.ts @@ -1,12 +1,12 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import * as Utils from "#app/utils"; import { BattlePhase } from "./battle-phase"; export class PartyHealPhase extends BattlePhase { private resumeBgm: boolean; - constructor(scene: BattleScene, resumeBgm: boolean) { - super(scene); + constructor(resumeBgm: boolean) { + super(); this.resumeBgm = resumeBgm; } @@ -14,12 +14,12 @@ export class PartyHealPhase extends BattlePhase { start() { super.start(); - const bgmPlaying = this.scene.isBgmPlaying(); + const bgmPlaying = globalScene.isBgmPlaying(); if (bgmPlaying) { - this.scene.fadeOutBgm(1000, false); + globalScene.fadeOutBgm(1000, false); } - this.scene.ui.fadeOut(1000).then(() => { - for (const pokemon of this.scene.getPlayerParty()) { + globalScene.ui.fadeOut(1000).then(() => { + for (const pokemon of globalScene.getPlayerParty()) { pokemon.hp = pokemon.getMaxHp(); pokemon.resetStatus(); for (const move of pokemon.moveset) { @@ -27,14 +27,15 @@ export class PartyHealPhase extends BattlePhase { } pokemon.updateInfo(true); } - const healSong = this.scene.playSoundWithoutBgm("heal"); - this.scene.time.delayedCall(Utils.fixedInt(healSong.totalDuration * 1000), () => { + const healSong = globalScene.playSoundWithoutBgm("heal"); + globalScene.time.delayedCall(Utils.fixedInt(healSong.totalDuration * 1000), () => { healSong.destroy(); if (this.resumeBgm && bgmPlaying) { - this.scene.playBgm(); + globalScene.playBgm(); } - this.scene.ui.fadeIn(500).then(() => this.end()); + globalScene.ui.fadeIn(500).then(() => this.end()); }); }); + globalScene.arena.playerTerasUsed = 0; } } diff --git a/src/phases/party-member-pokemon-phase.ts b/src/phases/party-member-pokemon-phase.ts index f2e2b23bfb2..592f35834aa 100644 --- a/src/phases/party-member-pokemon-phase.ts +++ b/src/phases/party-member-pokemon-phase.ts @@ -1,24 +1,24 @@ -import BattleScene from "#app/battle-scene"; -import Pokemon from "#app/field/pokemon"; +import { globalScene } from "#app/global-scene"; +import type Pokemon from "#app/field/pokemon"; import { FieldPhase } from "./field-phase"; export abstract class PartyMemberPokemonPhase extends FieldPhase { - protected partyMemberIndex: integer; - protected fieldIndex: integer; + protected partyMemberIndex: number; + protected fieldIndex: number; protected player: boolean; - constructor(scene: BattleScene, partyMemberIndex: integer, player: boolean) { - super(scene); + constructor(partyMemberIndex: number, player: boolean) { + super(); this.partyMemberIndex = partyMemberIndex; - this.fieldIndex = partyMemberIndex < this.scene.currentBattle.getBattlerCount() + this.fieldIndex = partyMemberIndex < globalScene.currentBattle.getBattlerCount() ? partyMemberIndex : -1; this.player = player; } getParty(): Pokemon[] { - return this.player ? this.scene.getPlayerParty() : this.scene.getEnemyParty(); + return this.player ? globalScene.getPlayerParty() : globalScene.getEnemyParty(); } getPokemon(): Pokemon { diff --git a/src/phases/player-party-member-pokemon-phase.ts b/src/phases/player-party-member-pokemon-phase.ts index 87855b9334c..d97376a8614 100644 --- a/src/phases/player-party-member-pokemon-phase.ts +++ b/src/phases/player-party-member-pokemon-phase.ts @@ -1,10 +1,9 @@ -import BattleScene from "#app/battle-scene"; -import { PlayerPokemon } from "#app/field/pokemon"; +import type { PlayerPokemon } from "#app/field/pokemon"; import { PartyMemberPokemonPhase } from "./party-member-pokemon-phase"; export abstract class PlayerPartyMemberPokemonPhase extends PartyMemberPokemonPhase { - constructor(scene: BattleScene, partyMemberIndex: integer) { - super(scene, partyMemberIndex, true); + constructor(partyMemberIndex: number) { + super(partyMemberIndex, true); } getPlayerPokemon(): PlayerPokemon { diff --git a/src/phases/pokemon-anim-phase.ts b/src/phases/pokemon-anim-phase.ts index eb5431cbc56..54140ec96b5 100644 --- a/src/phases/pokemon-anim-phase.ts +++ b/src/phases/pokemon-anim-phase.ts @@ -1,6 +1,6 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { SubstituteTag } from "#app/data/battler-tags"; -import Pokemon from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; import { BattlePhase } from "#app/phases/battle-phase"; import { isNullOrUndefined } from "#app/utils"; import { PokemonAnimType } from "#enums/pokemon-anim-type"; @@ -15,8 +15,8 @@ export class PokemonAnimPhase extends BattlePhase { /** Any other field sprites affected by this animation */ private fieldAssets: Phaser.GameObjects.Sprite[]; - constructor(scene: BattleScene, key: PokemonAnimType, pokemon: Pokemon, fieldAssets?: Phaser.GameObjects.Sprite[]) { - super(scene); + constructor(key: PokemonAnimType, pokemon: Pokemon, fieldAssets?: Phaser.GameObjects.Sprite[]) { + super(); this.key = key; this.pokemon = pokemon; @@ -57,13 +57,13 @@ export class PokemonAnimPhase extends BattlePhase { } const getSprite = () => { - const sprite = this.scene.addFieldSprite( + const sprite = globalScene.addFieldSprite( this.pokemon.x + this.pokemon.getSprite().x, this.pokemon.y + this.pokemon.getSprite().y, `pkmn${this.pokemon.isPlayer() ? "__back" : ""}__sub` ); sprite.setOrigin(0.5, 1); - this.scene.field.add(sprite); + globalScene.field.add(sprite); return sprite; }; @@ -76,12 +76,12 @@ export class PokemonAnimPhase extends BattlePhase { subTintSprite.setScale(0.01); if (this.pokemon.isPlayer()) { - this.scene.field.bringToTop(this.pokemon); + globalScene.field.bringToTop(this.pokemon); } - this.scene.playSound("PRSFX- Transform"); + globalScene.playSound("PRSFX- Transform"); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.pokemon, duration: 500, x: this.pokemon.x + this.pokemon.getSubstituteOffset()[0], @@ -90,7 +90,7 @@ export class PokemonAnimPhase extends BattlePhase { ease: "Sine.easeIn" }); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: subTintSprite, delay: 250, scale: subScale, @@ -98,7 +98,7 @@ export class PokemonAnimPhase extends BattlePhase { duration: 500, onComplete: () => { subSprite.setVisible(true); - this.pokemon.scene.tweens.add({ + globalScene.tweens.add({ targets: subTintSprite, delay: 250, alpha: 0, @@ -124,14 +124,14 @@ export class PokemonAnimPhase extends BattlePhase { return this.end(); } - this.scene.tweens.add({ + globalScene.tweens.add({ targets: subSprite, alpha: 0, ease: "Sine.easeInOut", duration: 500 }); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.pokemon, x: subSprite.x, y: subSprite.y, @@ -153,7 +153,7 @@ export class PokemonAnimPhase extends BattlePhase { return this.end(); } - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.pokemon, x: subSprite.x + this.pokemon.getSubstituteOffset()[0], y: subSprite.y + this.pokemon.getSubstituteOffset()[1], @@ -162,7 +162,7 @@ export class PokemonAnimPhase extends BattlePhase { duration: 500 }); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: subSprite, alpha: 1, ease: "Sine.easeInOut", @@ -183,13 +183,13 @@ export class PokemonAnimPhase extends BattlePhase { } const getSprite = () => { - const sprite = this.scene.addFieldSprite( + const sprite = globalScene.addFieldSprite( subSprite.x, subSprite.y, `pkmn${this.pokemon.isPlayer() ? "__back" : ""}__sub` ); sprite.setOrigin(0.5, 1); - this.scene.field.add(sprite); + globalScene.field.add(sprite); return sprite; }; @@ -199,30 +199,30 @@ export class PokemonAnimPhase extends BattlePhase { subTintSprite.setTintFill(0xFFFFFF); subTintSprite.setScale(subScale); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: subTintSprite, alpha: 1, ease: "Sine.easeInOut", duration: 500, onComplete: () => { subSprite.destroy(); - const flashTimer = this.scene.time.addEvent({ + const flashTimer = globalScene.time.addEvent({ delay: 100, repeat: 7, startAt: 200, callback: () => { - this.scene.playSound("PRSFX- Substitute2.wav"); + globalScene.playSound("PRSFX- Substitute2.wav"); subTintSprite.setVisible(flashTimer.repeatCount % 2 === 0); if (!flashTimer.repeatCount) { - this.scene.tweens.add({ + globalScene.tweens.add({ targets: subTintSprite, scale: 0.01, ease: "Sine.cubicEaseIn", duration: 500 }); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.pokemon, x: this.pokemon.x - this.pokemon.getSubstituteOffset()[0], y: this.pokemon.y - this.pokemon.getSubstituteOffset()[1], @@ -243,7 +243,7 @@ export class PokemonAnimPhase extends BattlePhase { } private doCommanderApplyAnim(): void { - if (!this.scene.currentBattle?.double) { + if (!globalScene.currentBattle?.double) { return this.end(); } const dondozo = this.pokemon.getAlly(); @@ -256,7 +256,7 @@ export class PokemonAnimPhase extends BattlePhase { const tatsugiriY = this.pokemon.y + this.pokemon.getSprite().y; const getSourceSprite = () => { - const sprite = this.scene.addPokemonSprite(this.pokemon, tatsugiriX, tatsugiriY, this.pokemon.getSprite().texture, this.pokemon.getSprite()!.frame.name, true); + const sprite = globalScene.addPokemonSprite(this.pokemon, tatsugiriX, tatsugiriY, this.pokemon.getSprite().texture, this.pokemon.getSprite()!.frame.name, true); [ "spriteColors", "fusionSpriteColors" ].map(k => sprite.pipelineData[k] = this.pokemon.getSprite().pipelineData[k]); sprite.setPipelineData("spriteKey", this.pokemon.getBattleSpriteKey()); sprite.setPipelineData("shiny", this.pokemon.shiny); @@ -264,7 +264,7 @@ export class PokemonAnimPhase extends BattlePhase { sprite.setPipelineData("ignoreFieldPos", true); sprite.setOrigin(0.5, 1); this.pokemon.getSprite().on("animationupdate", (_anim, frame) => sprite.setFrame(frame.textureFrame)); - this.scene.field.add(sprite); + globalScene.field.add(sprite); return sprite; }; @@ -275,17 +275,17 @@ export class PokemonAnimPhase extends BattlePhase { const sourceFpOffset = this.pokemon.getFieldPositionOffset(); const dondozoFpOffset = dondozo.getFieldPositionOffset(); - this.scene.playSound("se/pb_throw"); + globalScene.playSound("se/pb_throw"); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: sourceSprite, duration: 375, scale: 0.5, x: { value: tatsugiriX + (dondozoFpOffset[0] - sourceFpOffset[0]) / 2, ease: "Linear" }, y: { value: (this.pokemon.isPlayer() ? 100 : 65) + sourceFpOffset[1], ease: "Sine.easeOut" }, onComplete: () => { - this.scene.field.bringToTop(dondozo); - this.scene.tweens.add({ + globalScene.field.bringToTop(dondozo); + globalScene.tweens.add({ targets: sourceSprite, duration: 375, scale: 0.01, @@ -293,8 +293,8 @@ export class PokemonAnimPhase extends BattlePhase { y: { value: dondozo.y + dondozo.height / 2, ease: "Sine.easeIn" }, onComplete: () => { sourceSprite.destroy(); - this.scene.playSound("battle_anims/PRSFX- Liquidation1.wav"); - this.scene.tweens.add({ + globalScene.playSound("battle_anims/PRSFX- Liquidation1.wav"); + globalScene.tweens.add({ targets: dondozo, duration: 250, ease: "Sine.easeInOut", @@ -317,7 +317,7 @@ export class PokemonAnimPhase extends BattlePhase { return this.end(); } - const tatsuSprite = this.scene.addPokemonSprite( + const tatsuSprite = globalScene.addPokemonSprite( tatsugiri, this.pokemon.x + this.pokemon.getSprite().x, this.pokemon.y + this.pokemon.getSprite().y + this.pokemon.height / 2, @@ -335,19 +335,19 @@ export class PokemonAnimPhase extends BattlePhase { tatsuSprite.setOrigin(0.5, 1); tatsuSprite.setScale(0.01); - this.scene.field.add(tatsuSprite); - this.scene.field.bringToTop(this.pokemon); + globalScene.field.add(tatsuSprite); + globalScene.field.bringToTop(this.pokemon); tatsuSprite.setVisible(true); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.pokemon, duration: 250, ease: "Sine.easeInOut", scale: 1.15, yoyo: true, onComplete: () => { - this.scene.playSound("battle_anims/PRSFX- Liquidation4.wav"); - this.scene.tweens.add({ + globalScene.playSound("battle_anims/PRSFX- Liquidation4.wav"); + globalScene.tweens.add({ targets: tatsuSprite, duration: 500, scale: 1, diff --git a/src/phases/pokemon-heal-phase.ts b/src/phases/pokemon-heal-phase.ts index c95b92e3b64..6d0621b8f48 100644 --- a/src/phases/pokemon-heal-phase.ts +++ b/src/phases/pokemon-heal-phase.ts @@ -1,9 +1,10 @@ -import BattleScene from "#app/battle-scene"; -import { BattlerIndex } from "#app/battle"; +import { globalScene } from "#app/global-scene"; +import type { BattlerIndex } from "#app/battle"; import { CommonAnim } from "#app/data/battle-anims"; import { getStatusEffectHealText } from "#app/data/status-effect"; import { StatusEffect } from "#app/enums/status-effect"; -import { HitResult, DamageResult } from "#app/field/pokemon"; +import type { DamageResult } from "#app/field/pokemon"; +import { HitResult } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { HealingBoosterModifier } from "#app/modifier/modifier"; import { HealAchv } from "#app/system/achv"; @@ -11,10 +12,10 @@ import i18next from "i18next"; import * as Utils from "#app/utils"; import { CommonAnimPhase } from "./common-anim-phase"; import { BattlerTagType } from "#app/enums/battler-tag-type"; -import { HealBlockTag } from "#app/data/battler-tags"; +import type { HealBlockTag } from "#app/data/battler-tags"; export class PokemonHealPhase extends CommonAnimPhase { - private hpHealed: integer; + private hpHealed: number; private message: string | null; private showFullHpMessage: boolean; private skipAnim: boolean; @@ -23,8 +24,8 @@ export class PokemonHealPhase extends CommonAnimPhase { private preventFullHeal: boolean; private fullRestorePP: boolean; - constructor(scene: BattleScene, battlerIndex: BattlerIndex, hpHealed: integer, message: string | null, showFullHpMessage: boolean, skipAnim: boolean = false, revive: boolean = false, healStatus: boolean = false, preventFullHeal: boolean = false, fullRestorePP: boolean = false) { - super(scene, battlerIndex, undefined, CommonAnim.HEALTH_UP); + constructor(battlerIndex: BattlerIndex, hpHealed: number, message: string | null, showFullHpMessage: boolean, skipAnim: boolean = false, revive: boolean = false, healStatus: boolean = false, preventFullHeal: boolean = false, fullRestorePP: boolean = false) { + super(battlerIndex, undefined, CommonAnim.HEALTH_UP); this.hpHealed = hpHealed; this.message = message; @@ -57,13 +58,13 @@ export class PokemonHealPhase extends CommonAnimPhase { let lastStatusEffect = StatusEffect.NONE; if (healBlock && this.hpHealed > 0) { - this.scene.queueMessage(healBlock.onActivation(pokemon)); + globalScene.queueMessage(healBlock.onActivation(pokemon)); this.message = null; return super.end(); } else if (healOrDamage) { - const hpRestoreMultiplier = new Utils.IntegerHolder(1); + const hpRestoreMultiplier = new Utils.NumberHolder(1); if (!this.revive) { - this.scene.applyModifiers(HealingBoosterModifier, this.player, hpRestoreMultiplier); + globalScene.applyModifiers(HealingBoosterModifier, this.player, hpRestoreMultiplier); } const healAmount = new Utils.NumberHolder(Math.floor(this.hpHealed * hpRestoreMultiplier.value)); if (healAmount.value < 0) { @@ -76,12 +77,12 @@ export class PokemonHealPhase extends CommonAnimPhase { } healAmount.value = pokemon.heal(healAmount.value); if (healAmount.value) { - this.scene.damageNumberHandler.add(pokemon, healAmount.value, HitResult.HEAL); + globalScene.damageNumberHandler.add(pokemon, healAmount.value, HitResult.HEAL); } if (pokemon.isPlayer()) { - this.scene.validateAchvs(HealAchv, healAmount); - if (healAmount.value > this.scene.gameData.gameStats.highestHeal) { - this.scene.gameData.gameStats.highestHeal = healAmount.value; + globalScene.validateAchvs(HealAchv, healAmount); + if (healAmount.value > globalScene.gameData.gameStats.highestHeal) { + globalScene.gameData.gameStats.highestHeal = healAmount.value; } } if (this.healStatus && !this.revive && pokemon.status) { @@ -105,11 +106,11 @@ export class PokemonHealPhase extends CommonAnimPhase { } if (this.message) { - this.scene.queueMessage(this.message); + globalScene.queueMessage(this.message); } if (this.healStatus && lastStatusEffect && !hasMessage) { - this.scene.queueMessage(getStatusEffectHealText(lastStatusEffect, getPokemonNameWithAffix(pokemon))); + globalScene.queueMessage(getStatusEffectHealText(lastStatusEffect, getPokemonNameWithAffix(pokemon))); } if (!healOrDamage && !lastStatusEffect) { diff --git a/src/phases/pokemon-phase.ts b/src/phases/pokemon-phase.ts index b980c1d1719..bf4193adb6d 100644 --- a/src/phases/pokemon-phase.ts +++ b/src/phases/pokemon-phase.ts @@ -1,18 +1,18 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { BattlerIndex } from "#app/battle"; -import Pokemon from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; import { FieldPhase } from "./field-phase"; export abstract class PokemonPhase extends FieldPhase { - protected battlerIndex: BattlerIndex | integer; + protected battlerIndex: BattlerIndex | number; public player: boolean; - public fieldIndex: integer; + public fieldIndex: number; - constructor(scene: BattleScene, battlerIndex?: BattlerIndex | integer) { - super(scene); + constructor(battlerIndex?: BattlerIndex | number) { + super(); if (battlerIndex === undefined) { - battlerIndex = scene.getField().find(p => p?.isActive())!.getBattlerIndex(); // TODO: is the bang correct here? + battlerIndex = globalScene.getField().find(p => p?.isActive())!.getBattlerIndex(); // TODO: is the bang correct here? } this.battlerIndex = battlerIndex; @@ -22,8 +22,8 @@ export abstract class PokemonPhase extends FieldPhase { getPokemon(): Pokemon { if (this.battlerIndex > BattlerIndex.ENEMY_2) { - return this.scene.getPokemonById(this.battlerIndex)!; //TODO: is this bang correct? + return globalScene.getPokemonById(this.battlerIndex)!; //TODO: is this bang correct? } - return this.scene.getField()[this.battlerIndex]!; //TODO: is this bang correct? + return globalScene.getField()[this.battlerIndex]!; //TODO: is this bang correct? } } diff --git a/src/phases/pokemon-transform-phase.ts b/src/phases/pokemon-transform-phase.ts new file mode 100644 index 00000000000..d67f758b1fd --- /dev/null +++ b/src/phases/pokemon-transform-phase.ts @@ -0,0 +1,77 @@ +import type { BattlerIndex } from "#app/battle"; +import { BattlerTagType } from "#enums/battler-tag-type"; +import { Moves } from "#enums/moves"; +import { EFFECTIVE_STATS, BATTLE_STATS } from "#enums/stat"; +import { PokemonMove } from "#app/field/pokemon"; +import { globalScene } from "#app/global-scene"; +import { PokemonPhase } from "./pokemon-phase"; + +/** + * Transforms a Pokemon into another Pokemon on the field. + * Used for Transform (move) and Imposter (ability) + */ +export class PokemonTransformPhase extends PokemonPhase { + protected targetIndex: BattlerIndex; + private playSound: boolean; + + constructor(userIndex: BattlerIndex, targetIndex: BattlerIndex, playSound: boolean = false) { + super(userIndex); + + this.targetIndex = targetIndex; + this.playSound = playSound; + } + + public override start(): void { + const user = this.getPokemon(); + const target = globalScene.getField(true).find((p) => p.getBattlerIndex() === this.targetIndex); + + if (!target) { + return this.end(); + } + + user.summonData.speciesForm = target.getSpeciesForm(); + user.summonData.ability = target.getAbility().id; + user.summonData.gender = target.getGender(); + + // Power Trick's effect is removed after using Transform + user.removeTag(BattlerTagType.POWER_TRICK); + + // Copy all stats (except HP) + for (const s of EFFECTIVE_STATS) { + user.setStat(s, target.getStat(s, false), false); + } + + // Copy all stat stages + for (const s of BATTLE_STATS) { + user.setStatStage(s, target.getStatStage(s)); + } + + user.summonData.moveset = target.getMoveset().map((m) => { + if (m) { + // If PP value is less than 5, do nothing. If greater, we need to reduce the value to 5. + return new PokemonMove(m.moveId, 0, 0, false, Math.min(m.getMove().pp, 5)); + } else { + console.warn(`Transform: somehow iterating over a ${m} value when copying moveset!`); + return new PokemonMove(Moves.NONE); + } + }); + user.summonData.types = target.getTypes(); + + const promises = [ user.updateInfo() ]; + + if (this.playSound) { + globalScene.playSound("battle_anims/PRSFX- Transform"); + } + + promises.push( + user.loadAssets(false).then(() => { + user.playAnim(); + user.updateInfo(); + // If the new ability activates immediately, it needs to happen after all the transform animations + user.setTempAbility(target.getAbility()); + }), + ); + + Promise.allSettled(promises).then(() => this.end()); + } +} diff --git a/src/phases/post-game-over-phase.ts b/src/phases/post-game-over-phase.ts index beeb30c7260..4643d4d1bef 100644 --- a/src/phases/post-game-over-phase.ts +++ b/src/phases/post-game-over-phase.ts @@ -1,13 +1,13 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { Phase } from "#app/phase"; -import { EndCardPhase } from "./end-card-phase"; +import type { EndCardPhase } from "./end-card-phase"; import { TitlePhase } from "./title-phase"; export class PostGameOverPhase extends Phase { private endCardPhase: EndCardPhase | null; - constructor(scene: BattleScene, endCardPhase?: EndCardPhase) { - super(scene); + constructor(endCardPhase?: EndCardPhase) { + super(); this.endCardPhase = endCardPhase!; // TODO: is this bang correct? } @@ -16,24 +16,24 @@ export class PostGameOverPhase extends Phase { super.start(); const saveAndReset = () => { - this.scene.gameData.saveAll(this.scene, true, true, true).then(success => { + globalScene.gameData.saveAll(true, true, true).then(success => { if (!success) { - return this.scene.reset(true); + return globalScene.reset(true); } - this.scene.gameData.tryClearSession(this.scene, this.scene.sessionSlotId).then((success: boolean | [boolean, boolean]) => { + globalScene.gameData.tryClearSession(globalScene.sessionSlotId).then((success: boolean | [boolean, boolean]) => { if (!success[0]) { - return this.scene.reset(true); + return globalScene.reset(true); } - this.scene.reset(); - this.scene.unshiftPhase(new TitlePhase(this.scene)); + globalScene.reset(); + globalScene.unshiftPhase(new TitlePhase()); this.end(); }); }); }; if (this.endCardPhase) { - this.scene.ui.fadeOut(500).then(() => { - this.scene.ui.getMessageHandler().bg.setVisible(true); + globalScene.ui.fadeOut(500).then(() => { + globalScene.ui.getMessageHandler().bg.setVisible(true); this.endCardPhase?.endCard.destroy(); this.endCardPhase?.text.destroy(); diff --git a/src/phases/post-summon-phase.ts b/src/phases/post-summon-phase.ts index 42e5b930eb1..b92d79501d4 100644 --- a/src/phases/post-summon-phase.ts +++ b/src/phases/post-summon-phase.ts @@ -1,5 +1,5 @@ -import BattleScene from "#app/battle-scene"; -import { BattlerIndex } from "#app/battle"; +import { globalScene } from "#app/global-scene"; +import type { BattlerIndex } from "#app/battle"; import { applyAbAttrs, applyPostSummonAbAttrs, CommanderAbAttr, PostSummonAbAttr } from "#app/data/ability"; import { ArenaTrapTag } from "#app/data/arena-tag"; import { StatusEffect } from "#app/enums/status-effect"; @@ -8,8 +8,8 @@ import { MysteryEncounterPostSummonTag } from "#app/data/battler-tags"; import { BattlerTagType } from "#enums/battler-tag-type"; export class PostSummonPhase extends PokemonPhase { - constructor(scene: BattleScene, battlerIndex: BattlerIndex) { - super(scene, battlerIndex); + constructor(battlerIndex: BattlerIndex) { + super(battlerIndex); } start() { @@ -20,19 +20,17 @@ export class PostSummonPhase extends PokemonPhase { if (pokemon.status?.effect === StatusEffect.TOXIC) { pokemon.status.toxicTurnCount = 0; } - this.scene.arena.applyTags(ArenaTrapTag, false, pokemon); + globalScene.arena.applyTags(ArenaTrapTag, false, pokemon); // If this is mystery encounter and has post summon phase tag, apply post summon effects - if (this.scene.currentBattle.isBattleMysteryEncounter() && pokemon.findTags(t => t instanceof MysteryEncounterPostSummonTag).length > 0) { + if (globalScene.currentBattle.isBattleMysteryEncounter() && pokemon.findTags(t => t instanceof MysteryEncounterPostSummonTag).length > 0) { pokemon.lapseTag(BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON); } - applyPostSummonAbAttrs(PostSummonAbAttr, pokemon) - .then(() => { - const field = pokemon.isPlayer() ? this.scene.getPlayerField() : this.scene.getEnemyField(); - field.forEach((p) => applyAbAttrs(CommanderAbAttr, p, null, false)); + applyPostSummonAbAttrs(PostSummonAbAttr, pokemon); + const field = pokemon.isPlayer() ? globalScene.getPlayerField() : globalScene.getEnemyField(); + field.forEach((p) => applyAbAttrs(CommanderAbAttr, p, null, false)); - this.end(); - }); + this.end(); } } diff --git a/src/phases/post-turn-status-effect-phase.ts b/src/phases/post-turn-status-effect-phase.ts index 378a932cdc5..13cac6eed7c 100644 --- a/src/phases/post-turn-status-effect-phase.ts +++ b/src/phases/post-turn-status-effect-phase.ts @@ -1,5 +1,5 @@ -import BattleScene from "#app/battle-scene"; -import { BattlerIndex } from "#app/battle"; +import { globalScene } from "#app/global-scene"; +import type { BattlerIndex } from "#app/battle"; import { applyAbAttrs, applyPostDamageAbAttrs, BlockNonDirectDamageAbAttr, BlockStatusDamageAbAttr, PostDamageAbAttr, ReduceBurnDamageAbAttr } from "#app/data/ability"; import { CommonBattleAnim, CommonAnim } from "#app/data/battle-anims"; import { getStatusEffectActivationText } from "#app/data/status-effect"; @@ -10,8 +10,8 @@ import * as Utils from "#app/utils"; import { PokemonPhase } from "./pokemon-phase"; export class PostTurnStatusEffectPhase extends PokemonPhase { - constructor(scene: BattleScene, battlerIndex: BattlerIndex) { - super(scene, battlerIndex); + constructor(battlerIndex: BattlerIndex) { + super(battlerIndex); } start() { @@ -23,7 +23,7 @@ export class PostTurnStatusEffectPhase extends PokemonPhase { applyAbAttrs(BlockStatusDamageAbAttr, pokemon, cancelled); if (!cancelled.value) { - this.scene.queueMessage(getStatusEffectActivationText(pokemon.status.effect, getPokemonNameWithAffix(pokemon))); + globalScene.queueMessage(getStatusEffectActivationText(pokemon.status.effect, getPokemonNameWithAffix(pokemon))); const damage = new Utils.NumberHolder(0); switch (pokemon.status.effect) { case StatusEffect.POISON: @@ -39,11 +39,11 @@ export class PostTurnStatusEffectPhase extends PokemonPhase { } if (damage.value) { // Set preventEndure flag to avoid pokemon surviving thanks to focus band, sturdy, endure ... - this.scene.damageNumberHandler.add(this.getPokemon(), pokemon.damage(damage.value, false, true)); + globalScene.damageNumberHandler.add(this.getPokemon(), pokemon.damage(damage.value, false, true)); pokemon.updateInfo(); applyPostDamageAbAttrs(PostDamageAbAttr, pokemon, damage.value, pokemon.hasPassive(), false, []); } - new CommonBattleAnim(CommonAnim.POISON + (pokemon.status.effect - 1), pokemon).play(this.scene, false, () => this.end()); + new CommonBattleAnim(CommonAnim.POISON + (pokemon.status.effect - 1), pokemon).play(false, () => this.end()); } else { this.end(); } @@ -53,8 +53,8 @@ export class PostTurnStatusEffectPhase extends PokemonPhase { } override end() { - if (this.scene.currentBattle.battleSpec === BattleSpec.FINAL_BOSS) { - this.scene.initFinalBossPhaseTwo(this.getPokemon()); + if (globalScene.currentBattle.battleSpec === BattleSpec.FINAL_BOSS) { + globalScene.initFinalBossPhaseTwo(this.getPokemon()); } else { super.end(); } diff --git a/src/phases/quiet-form-change-phase.ts b/src/phases/quiet-form-change-phase.ts index c9e5bec845d..81a39f53a76 100644 --- a/src/phases/quiet-form-change-phase.ts +++ b/src/phases/quiet-form-change-phase.ts @@ -1,21 +1,24 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { SemiInvulnerableTag } from "#app/data/battler-tags"; -import { SpeciesFormChange, getSpeciesFormChangeMessage } from "#app/data/pokemon-forms"; +import type { SpeciesFormChange } from "#app/data/pokemon-forms"; +import { getSpeciesFormChangeMessage, SpeciesFormChangeTeraTrigger } from "#app/data/pokemon-forms"; import { getTypeRgb } from "#app/data/type"; import { BattleSpec } from "#app/enums/battle-spec"; import { BattlerTagType } from "#app/enums/battler-tag-type"; -import Pokemon, { EnemyPokemon } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; +import { EnemyPokemon } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { BattlePhase } from "./battle-phase"; import { MovePhase } from "./move-phase"; import { PokemonHealPhase } from "./pokemon-heal-phase"; +import { applyAbAttrs, ClearTerrainAbAttr, ClearWeatherAbAttr, PostTeraFormChangeStatChangeAbAttr } from "#app/data/ability"; export class QuietFormChangePhase extends BattlePhase { protected pokemon: Pokemon; protected formChange: SpeciesFormChange; - constructor(scene: BattleScene, pokemon: Pokemon, formChange: SpeciesFormChange) { - super(scene); + constructor(pokemon: Pokemon, formChange: SpeciesFormChange) { + super(); this.pokemon = pokemon; this.formChange = formChange; } @@ -32,7 +35,7 @@ export class QuietFormChangePhase extends BattlePhase { if (!this.pokemon.isOnField() || this.pokemon.getTag(SemiInvulnerableTag) || this.pokemon.isFainted()) { if (this.pokemon.isPlayer() || this.pokemon.isActive()) { this.pokemon.changeForm(this.formChange).then(() => { - this.scene.ui.showText(getSpeciesFormChangeMessage(this.pokemon, this.formChange, preName), null, () => this.end(), 1500); + globalScene.ui.showText(getSpeciesFormChangeMessage(this.pokemon, this.formChange, preName), null, () => this.end(), 1500); }); } else { this.end(); @@ -41,7 +44,7 @@ export class QuietFormChangePhase extends BattlePhase { } const getPokemonSprite = () => { - const sprite = this.scene.addPokemonSprite(this.pokemon, this.pokemon.x + this.pokemon.getSprite().x, this.pokemon.y + this.pokemon.getSprite().y, "pkmn__sub"); + const sprite = globalScene.addPokemonSprite(this.pokemon, this.pokemon.x + this.pokemon.getSprite().x, this.pokemon.y + this.pokemon.getSprite().y, "pkmn__sub"); sprite.setOrigin(0.5, 1); const spriteKey = this.pokemon.getBattleSpriteKey(); try { @@ -49,14 +52,14 @@ export class QuietFormChangePhase extends BattlePhase { } catch (err: unknown) { console.error(`Failed to play animation for ${spriteKey}`, err); } - sprite.setPipeline(this.scene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], hasShadow: false, teraColor: getTypeRgb(this.pokemon.getTeraType()) }); + sprite.setPipeline(globalScene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], hasShadow: false, teraColor: getTypeRgb(this.pokemon.getTeraType()), isTerastallized: this.pokemon.isTerastallized }); [ "spriteColors", "fusionSpriteColors" ].map(k => { if (this.pokemon.summonData?.speciesForm) { k += "Base"; } sprite.pipelineData[k] = this.pokemon.getSprite().pipelineData[k]; }); - this.scene.field.add(sprite); + globalScene.field.add(sprite); return sprite; }; @@ -75,9 +78,9 @@ export class QuietFormChangePhase extends BattlePhase { pokemonFormTintSprite.setVisible(false); pokemonFormTintSprite.setTintFill(0xFFFFFF); - this.scene.playSound("battle_anims/PRSFX- Transform"); + globalScene.playSound("battle_anims/PRSFX- Transform"); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: pokemonTintSprite, alpha: 1, duration: 1000, @@ -93,7 +96,7 @@ export class QuietFormChangePhase extends BattlePhase { console.error(`Failed to play animation for ${spriteKey}`, err); } pokemonFormTintSprite.setVisible(true); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: pokemonTintSprite, delay: 250, scale: 0.01, @@ -101,7 +104,7 @@ export class QuietFormChangePhase extends BattlePhase { duration: 500, onComplete: () => pokemonTintSprite.destroy() }); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: pokemonFormTintSprite, delay: 250, scale: this.pokemon.getSpriteScale(), @@ -109,7 +112,7 @@ export class QuietFormChangePhase extends BattlePhase { duration: 500, onComplete: () => { this.pokemon.setVisible(true); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: pokemonFormTintSprite, delay: 250, alpha: 0, @@ -117,7 +120,7 @@ export class QuietFormChangePhase extends BattlePhase { duration: 1000, onComplete: () => { pokemonTintSprite.setVisible(false); - this.scene.ui.showText(getSpeciesFormChangeMessage(this.pokemon, this.formChange, preName), null, () => this.end(), 1500); + globalScene.ui.showText(getSpeciesFormChangeMessage(this.pokemon, this.formChange, preName), null, () => this.end(), 1500); } }); } @@ -129,20 +132,25 @@ export class QuietFormChangePhase extends BattlePhase { end(): void { this.pokemon.findAndRemoveTags(t => t.tagType === BattlerTagType.AUTOTOMIZED); - if (this.pokemon.scene?.currentBattle.battleSpec === BattleSpec.FINAL_BOSS && this.pokemon instanceof EnemyPokemon) { - this.scene.playBgm(); - this.scene.unshiftPhase(new PokemonHealPhase(this.scene, this.pokemon.getBattlerIndex(), this.pokemon.getMaxHp(), null, false, false, false, true)); + if (globalScene?.currentBattle.battleSpec === BattleSpec.FINAL_BOSS && this.pokemon instanceof EnemyPokemon) { + globalScene.playBgm(); + globalScene.unshiftPhase(new PokemonHealPhase(this.pokemon.getBattlerIndex(), this.pokemon.getMaxHp(), null, false, false, false, true)); this.pokemon.findAndRemoveTags(() => true); this.pokemon.bossSegments = 5; this.pokemon.bossSegmentIndex = 4; this.pokemon.initBattleInfo(); this.pokemon.cry(); - const movePhase = this.scene.findPhase(p => p instanceof MovePhase && p.pokemon === this.pokemon) as MovePhase; + const movePhase = globalScene.findPhase(p => p instanceof MovePhase && p.pokemon === this.pokemon) as MovePhase; if (movePhase) { movePhase.cancel(); } } + if (this.formChange.trigger instanceof SpeciesFormChangeTeraTrigger) { + applyAbAttrs(PostTeraFormChangeStatChangeAbAttr, this.pokemon, null); + applyAbAttrs(ClearWeatherAbAttr, this.pokemon, null); + applyAbAttrs(ClearTerrainAbAttr, this.pokemon, null); + } super.end(); } diff --git a/src/phases/reload-session-phase.ts b/src/phases/reload-session-phase.ts index f8a38105869..a88cb1b1de3 100644 --- a/src/phases/reload-session-phase.ts +++ b/src/phases/reload-session-phase.ts @@ -1,4 +1,4 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { Phase } from "#app/phase"; import { Mode } from "#app/ui/ui"; import * as Utils from "#app/utils"; @@ -6,19 +6,19 @@ import * as Utils from "#app/utils"; export class ReloadSessionPhase extends Phase { private systemDataStr: string | null; - constructor(scene: BattleScene, systemDataStr?: string) { - super(scene); + constructor(systemDataStr?: string) { + super(); this.systemDataStr = systemDataStr ?? null; } start(): void { - this.scene.ui.setMode(Mode.SESSION_RELOAD); + globalScene.ui.setMode(Mode.SESSION_RELOAD); let delayElapsed = false; let loaded = false; - this.scene.time.delayedCall(Utils.fixedInt(1500), () => { + globalScene.time.delayedCall(Utils.fixedInt(1500), () => { if (loaded) { this.end(); } else { @@ -26,9 +26,9 @@ export class ReloadSessionPhase extends Phase { } }); - this.scene.gameData.clearLocalData(); + globalScene.gameData.clearLocalData(); - (this.systemDataStr ? this.scene.gameData.initSystem(this.systemDataStr) : this.scene.gameData.loadSystem()).then(() => { + (this.systemDataStr ? globalScene.gameData.initSystem(this.systemDataStr) : globalScene.gameData.loadSystem()).then(() => { if (delayElapsed) { this.end(); } else { diff --git a/src/phases/return-phase.ts b/src/phases/return-phase.ts index eb587201585..8a876268c8e 100644 --- a/src/phases/return-phase.ts +++ b/src/phases/return-phase.ts @@ -1,11 +1,11 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms"; import { SwitchType } from "#enums/switch-type"; import { SwitchSummonPhase } from "./switch-summon-phase"; export class ReturnPhase extends SwitchSummonPhase { - constructor(scene: BattleScene, fieldIndex: integer) { - super(scene, SwitchType.SWITCH, fieldIndex, -1, true); + constructor(fieldIndex: number) { + super(SwitchType.SWITCH, fieldIndex, -1, true); } switchAndSummon(): void { @@ -21,8 +21,8 @@ export class ReturnPhase extends SwitchSummonPhase { pokemon.resetTurnData(); pokemon.resetSummonData(); - this.scene.updateFieldScale(); + globalScene.updateFieldScale(); - this.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeActiveTrigger); + globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeActiveTrigger); } } diff --git a/src/phases/revival-blessing-phase.ts b/src/phases/revival-blessing-phase.ts new file mode 100644 index 00000000000..a063e325a31 --- /dev/null +++ b/src/phases/revival-blessing-phase.ts @@ -0,0 +1,61 @@ +import { SwitchType } from "#enums/switch-type"; +import { globalScene } from "#app/global-scene"; +import type { PartyOption } from "#app/ui/party-ui-handler"; +import PartyUiHandler, { PartyUiMode } from "#app/ui/party-ui-handler"; +import { Mode } from "#app/ui/ui"; +import i18next from "i18next"; +import * as Utils from "#app/utils"; +import { BattlePhase } from "#app/phases/battle-phase"; +import { SwitchSummonPhase } from "#app/phases/switch-summon-phase"; +import { ToggleDoublePositionPhase } from "#app/phases/toggle-double-position-phase"; +import type { PlayerPokemon } from "#app/field/pokemon"; + +/** + * Sets the Party UI and handles the effect of Revival Blessing + * when used by one of the player's Pokemon. + */ +export class RevivalBlessingPhase extends BattlePhase { + constructor(protected user: PlayerPokemon) { + super(); + } + + public override start(): void { + globalScene.ui.setMode( + Mode.PARTY, + PartyUiMode.REVIVAL_BLESSING, + this.user.getFieldIndex(), + (slotIndex: integer, option: PartyOption) => { + if (slotIndex >= 0 && slotIndex < 6) { + const pokemon = globalScene.getPlayerParty()[slotIndex]; + if (!pokemon || !pokemon.isFainted()) { + return this.end(); + } + + pokemon.resetTurnData(); + pokemon.resetStatus(); + pokemon.heal(Math.min(Utils.toDmgValue(0.5 * pokemon.getMaxHp()), pokemon.getMaxHp())); + globalScene.queueMessage(i18next.t("moveTriggers:revivalBlessing", { pokemonName: pokemon.name }), 0, true); + + if (globalScene.currentBattle.double && globalScene.getPlayerParty().length > 1) { + const allyPokemon = this.user.getAlly(); + if (slotIndex <= 1) { + // Revived ally pokemon + globalScene.unshiftPhase( + new SwitchSummonPhase(SwitchType.SWITCH, pokemon.getFieldIndex(), slotIndex, false, true), + ); + globalScene.unshiftPhase(new ToggleDoublePositionPhase(true)); + } else if (allyPokemon.isFainted()) { + // Revived party pokemon, and ally pokemon is fainted + globalScene.unshiftPhase( + new SwitchSummonPhase(SwitchType.SWITCH, allyPokemon.getFieldIndex(), slotIndex, false, true), + ); + globalScene.unshiftPhase(new ToggleDoublePositionPhase(true)); + } + } + } + globalScene.ui.setMode(Mode.MESSAGE).then(() => this.end()); + }, + PartyUiHandler.FilterFainted, + ); + } +} diff --git a/src/phases/ribbon-modifier-reward-phase.ts b/src/phases/ribbon-modifier-reward-phase.ts index fabb3bfa1b1..72a8f4bf37c 100644 --- a/src/phases/ribbon-modifier-reward-phase.ts +++ b/src/phases/ribbon-modifier-reward-phase.ts @@ -1,6 +1,6 @@ -import BattleScene from "#app/battle-scene"; -import PokemonSpecies from "#app/data/pokemon-species"; -import { ModifierTypeFunc } from "#app/modifier/modifier-type"; +import { globalScene } from "#app/global-scene"; +import type PokemonSpecies from "#app/data/pokemon-species"; +import type { ModifierTypeFunc } from "#app/modifier/modifier-type"; import { Mode } from "#app/ui/ui"; import i18next from "i18next"; import { ModifierRewardPhase } from "./modifier-reward-phase"; @@ -8,8 +8,8 @@ import { ModifierRewardPhase } from "./modifier-reward-phase"; export class RibbonModifierRewardPhase extends ModifierRewardPhase { private species: PokemonSpecies; - constructor(scene: BattleScene, modifierTypeFunc: ModifierTypeFunc, species: PokemonSpecies) { - super(scene, modifierTypeFunc); + constructor(modifierTypeFunc: ModifierTypeFunc, species: PokemonSpecies) { + super(modifierTypeFunc); this.species = species; } @@ -17,17 +17,16 @@ export class RibbonModifierRewardPhase extends ModifierRewardPhase { doReward(): Promise { return new Promise(resolve => { const newModifier = this.modifierType.newModifier(); - this.scene.addModifier(newModifier).then(() => { - this.scene.playSound("level_up_fanfare"); - this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(i18next.t("battle:beatModeFirstTime", { - speciesName: this.species.name, - gameMode: this.scene.gameMode.getName(), - newModifier: newModifier?.type.name - }), null, () => { - resolve(); - }, null, true, 1500); - }); + globalScene.addModifier(newModifier); + globalScene.playSound("level_up_fanfare"); + globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.showText(i18next.t("battle:beatModeFirstTime", { + speciesName: this.species.name, + gameMode: globalScene.gameMode.getName(), + newModifier: newModifier?.type.name, + }), null, () => { + resolve(); + }, null, true, 1500); }); } } diff --git a/src/phases/scan-ivs-phase.ts b/src/phases/scan-ivs-phase.ts index 5ec61d5eec6..9230844ff9b 100644 --- a/src/phases/scan-ivs-phase.ts +++ b/src/phases/scan-ivs-phase.ts @@ -1,7 +1,6 @@ -import BattleScene from "#app/battle-scene"; -import { BattlerIndex } from "#app/battle"; -import { CommonBattleAnim, CommonAnim } from "#app/data/battle-anims"; -import { Stat } from "#app/enums/stat"; +import { globalScene } from "#app/global-scene"; +import type { BattlerIndex } from "#app/battle"; +import { PERMANENT_STATS, Stat } from "#app/enums/stat"; import { getPokemonNameWithAffix } from "#app/messages"; import { getTextColor, TextStyle } from "#app/ui/text"; import { Mode } from "#app/ui/ui"; @@ -9,37 +8,29 @@ import i18next from "i18next"; import { PokemonPhase } from "./pokemon-phase"; export class ScanIvsPhase extends PokemonPhase { - private shownIvs: integer; - constructor(scene: BattleScene, battlerIndex: BattlerIndex, shownIvs: integer) { - super(scene, battlerIndex); - - this.shownIvs = shownIvs; + constructor(battlerIndex: BattlerIndex) { + super(battlerIndex); } start() { super.start(); - if (!this.shownIvs) { - return this.end(); - } - const pokemon = this.getPokemon(); let enemyIvs: number[] = []; let statsContainer: Phaser.GameObjects.Sprite[] = []; let statsContainerLabels: Phaser.GameObjects.Sprite[] = []; - const enemyField = this.scene.getEnemyField(); - const uiTheme = (this.scene as BattleScene).uiTheme; // Assuming uiTheme is accessible + const enemyField = globalScene.getEnemyField(); + const uiTheme = globalScene.uiTheme; // Assuming uiTheme is accessible for (let e = 0; e < enemyField.length; e++) { enemyIvs = enemyField[e].ivs; - const currentIvs = this.scene.gameData.dexData[enemyField[e].species.getRootSpeciesId()].ivs; // we are using getRootSpeciesId() here because we want to check against the baby form, not the mid form if it exists - const ivsToShow = this.scene.ui.getMessageHandler().getTopIvs(enemyIvs, this.shownIvs); + const currentIvs = globalScene.gameData.dexData[enemyField[e].species.getRootSpeciesId()].ivs; // we are using getRootSpeciesId() here because we want to check against the baby form, not the mid form if it exists statsContainer = enemyField[e].getBattleInfo().getStatsValueContainer().list as Phaser.GameObjects.Sprite[]; statsContainerLabels = statsContainer.filter(m => m.name.indexOf("icon_stat_label") >= 0); for (let s = 0; s < statsContainerLabels.length; s++) { const ivStat = Stat[statsContainerLabels[s].frame.name]; - if (enemyIvs[ivStat] > currentIvs[ivStat] && ivsToShow.indexOf(Number(ivStat)) >= 0) { + if (enemyIvs[ivStat] > currentIvs[ivStat] && PERMANENT_STATS.indexOf(Number(ivStat)) >= 0) { const hexColour = enemyIvs[ivStat] === 31 ? getTextColor(TextStyle.PERFECT_IV, false, uiTheme) : getTextColor(TextStyle.SUMMARY_GREEN, false, uiTheme); const hexTextColour = Phaser.Display.Color.HexStringToColor(hexColour).color; statsContainerLabels[s].setTint(hexTextColour); @@ -48,17 +39,15 @@ export class ScanIvsPhase extends PokemonPhase { } } - if (!this.scene.hideIvs) { - this.scene.ui.showText(i18next.t("battle:ivScannerUseQuestion", { pokemonName: getPokemonNameWithAffix(pokemon) }), null, () => { - this.scene.ui.setMode(Mode.CONFIRM, () => { - this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.clearText(); - new CommonBattleAnim(CommonAnim.LOCK_ON, pokemon, pokemon).play(this.scene, false, () => { - this.scene.ui.getMessageHandler().promptIvs(pokemon.id, pokemon.ivs, this.shownIvs).then(() => this.end()); - }); + if (!globalScene.hideIvs) { + globalScene.ui.showText(i18next.t("battle:ivScannerUseQuestion", { pokemonName: getPokemonNameWithAffix(pokemon) }), null, () => { + globalScene.ui.setMode(Mode.CONFIRM, () => { + globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.clearText(); + globalScene.ui.getMessageHandler().promptIvs(pokemon.id, pokemon.ivs).then(() => this.end()); }, () => { - this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.clearText(); + globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.clearText(); this.end(); }); }); diff --git a/src/phases/select-biome-phase.ts b/src/phases/select-biome-phase.ts index 817cd7bcd3d..ea4dcc4274b 100644 --- a/src/phases/select-biome-phase.ts +++ b/src/phases/select-biome-phase.ts @@ -1,8 +1,8 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { biomeLinks, getBiomeName } from "#app/data/balance/biomes"; import { Biome } from "#app/enums/biome"; import { MoneyInterestModifier, MapModifier } from "#app/modifier/modifier"; -import { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; +import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import { Mode } from "#app/ui/ui"; import { BattlePhase } from "./battle-phase"; import * as Utils from "#app/utils"; @@ -10,58 +10,58 @@ import { PartyHealPhase } from "./party-heal-phase"; import { SwitchBiomePhase } from "./switch-biome-phase"; export class SelectBiomePhase extends BattlePhase { - constructor(scene: BattleScene) { - super(scene); + constructor() { + super(); } start() { super.start(); - const currentBiome = this.scene.arena.biomeType; + const currentBiome = globalScene.arena.biomeType; const setNextBiome = (nextBiome: Biome) => { - if (this.scene.currentBattle.waveIndex % 10 === 1) { - this.scene.applyModifiers(MoneyInterestModifier, true, this.scene); - this.scene.unshiftPhase(new PartyHealPhase(this.scene, false)); + if (globalScene.currentBattle.waveIndex % 10 === 1) { + globalScene.applyModifiers(MoneyInterestModifier, true); + globalScene.unshiftPhase(new PartyHealPhase(false)); } - this.scene.unshiftPhase(new SwitchBiomePhase(this.scene, nextBiome)); + globalScene.unshiftPhase(new SwitchBiomePhase(nextBiome)); this.end(); }; - if ((this.scene.gameMode.isClassic && this.scene.gameMode.isWaveFinal(this.scene.currentBattle.waveIndex + 9)) - || (this.scene.gameMode.isDaily && this.scene.gameMode.isWaveFinal(this.scene.currentBattle.waveIndex)) - || (this.scene.gameMode.hasShortBiomes && !(this.scene.currentBattle.waveIndex % 50))) { + if ((globalScene.gameMode.isClassic && globalScene.gameMode.isWaveFinal(globalScene.currentBattle.waveIndex + 9)) + || (globalScene.gameMode.isDaily && globalScene.gameMode.isWaveFinal(globalScene.currentBattle.waveIndex)) + || (globalScene.gameMode.hasShortBiomes && !(globalScene.currentBattle.waveIndex % 50))) { setNextBiome(Biome.END); - } else if (this.scene.gameMode.hasRandomBiomes) { + } else if (globalScene.gameMode.hasRandomBiomes) { setNextBiome(this.generateNextBiome()); } else if (Array.isArray(biomeLinks[currentBiome])) { let biomes: Biome[] = []; - this.scene.executeWithSeedOffset(() => { - biomes = (biomeLinks[currentBiome] as (Biome | [Biome, integer])[]) + globalScene.executeWithSeedOffset(() => { + biomes = (biomeLinks[currentBiome] as (Biome | [Biome, number])[]) .filter(b => !Array.isArray(b) || !Utils.randSeedInt(b[1])) .map(b => !Array.isArray(b) ? b : b[0]); - }, this.scene.currentBattle.waveIndex); - if (biomes.length > 1 && this.scene.findModifier(m => m instanceof MapModifier)) { + }, globalScene.currentBattle.waveIndex); + if (biomes.length > 1 && globalScene.findModifier(m => m instanceof MapModifier)) { let biomeChoices: Biome[] = []; - this.scene.executeWithSeedOffset(() => { + globalScene.executeWithSeedOffset(() => { biomeChoices = (!Array.isArray(biomeLinks[currentBiome]) ? [ biomeLinks[currentBiome] as Biome ] - : biomeLinks[currentBiome] as (Biome | [Biome, integer])[]) + : biomeLinks[currentBiome] as (Biome | [Biome, number])[]) .filter((b, i) => !Array.isArray(b) || !Utils.randSeedInt(b[1])) .map(b => Array.isArray(b) ? b[0] : b); - }, this.scene.currentBattle.waveIndex); + }, globalScene.currentBattle.waveIndex); const biomeSelectItems = biomeChoices.map(b => { const ret: OptionSelectItem = { label: getBiomeName(b), handler: () => { - this.scene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(Mode.MESSAGE); setNextBiome(b); return true; } }; return ret; }); - this.scene.ui.setMode(Mode.OPTION_SELECT, { + globalScene.ui.setMode(Mode.OPTION_SELECT, { options: biomeSelectItems, delay: 1000 }); @@ -76,9 +76,9 @@ export class SelectBiomePhase extends BattlePhase { } generateNextBiome(): Biome { - if (!(this.scene.currentBattle.waveIndex % 50)) { + if (!(globalScene.currentBattle.waveIndex % 50)) { return Biome.END; } - return this.scene.generateRandomBiome(this.scene.currentBattle.waveIndex); + return globalScene.generateRandomBiome(globalScene.currentBattle.waveIndex); } } diff --git a/src/phases/select-challenge-phase.ts b/src/phases/select-challenge-phase.ts index 9450c60fec5..2a6797d3556 100644 --- a/src/phases/select-challenge-phase.ts +++ b/src/phases/select-challenge-phase.ts @@ -1,17 +1,17 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { Phase } from "#app/phase"; import { Mode } from "#app/ui/ui"; export class SelectChallengePhase extends Phase { - constructor(scene: BattleScene) { - super(scene); + constructor() { + super(); } start() { super.start(); - this.scene.playBgm("menu"); + globalScene.playBgm("menu"); - this.scene.ui.setMode(Mode.CHALLENGE_SELECT); + globalScene.ui.setMode(Mode.CHALLENGE_SELECT); } } diff --git a/src/phases/select-gender-phase.ts b/src/phases/select-gender-phase.ts index 7f2c965f1d1..45cbb70dcac 100644 --- a/src/phases/select-gender-phase.ts +++ b/src/phases/select-gender-phase.ts @@ -1,4 +1,4 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { PlayerGender } from "#app/enums/player-gender"; import { Phase } from "#app/phase"; import { SettingKeys } from "#app/system/settings/settings"; @@ -6,31 +6,31 @@ import { Mode } from "#app/ui/ui"; import i18next from "i18next"; export class SelectGenderPhase extends Phase { - constructor(scene: BattleScene) { - super(scene); + constructor() { + super(); } start(): void { super.start(); - this.scene.ui.showText(i18next.t("menu:boyOrGirl"), null, () => { - this.scene.ui.setMode(Mode.OPTION_SELECT, { + globalScene.ui.showText(i18next.t("menu:boyOrGirl"), null, () => { + globalScene.ui.setMode(Mode.OPTION_SELECT, { options: [ { label: i18next.t("settings:boy"), handler: () => { - this.scene.gameData.gender = PlayerGender.MALE; - this.scene.gameData.saveSetting(SettingKeys.Player_Gender, 0); - this.scene.gameData.saveSystem().then(() => this.end()); + globalScene.gameData.gender = PlayerGender.MALE; + globalScene.gameData.saveSetting(SettingKeys.Player_Gender, 0); + globalScene.gameData.saveSystem().then(() => this.end()); return true; } }, { label: i18next.t("settings:girl"), handler: () => { - this.scene.gameData.gender = PlayerGender.FEMALE; - this.scene.gameData.saveSetting(SettingKeys.Player_Gender, 1); - this.scene.gameData.saveSystem().then(() => this.end()); + globalScene.gameData.gender = PlayerGender.FEMALE; + globalScene.gameData.saveSetting(SettingKeys.Player_Gender, 1); + globalScene.gameData.saveSystem().then(() => this.end()); return true; } } @@ -40,7 +40,7 @@ export class SelectGenderPhase extends Phase { } end(): void { - this.scene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(Mode.MESSAGE); super.end(); } } diff --git a/src/phases/select-modifier-phase.ts b/src/phases/select-modifier-phase.ts index 19e1ccc12ae..36f18a8d64d 100644 --- a/src/phases/select-modifier-phase.ts +++ b/src/phases/select-modifier-phase.ts @@ -1,27 +1,30 @@ -import BattleScene from "#app/battle-scene"; -import { ModifierTier } from "#app/modifier/modifier-tier"; -import { regenerateModifierPoolThresholds, ModifierTypeOption, ModifierType, getPlayerShopModifierTypeOptionsForWave, PokemonModifierType, FusePokemonModifierType, PokemonMoveModifierType, TmModifierType, RememberMoveModifierType, PokemonPpRestoreModifierType, PokemonPpUpModifierType, ModifierPoolType, getPlayerModifierTypeOptions } from "#app/modifier/modifier-type"; -import { ExtraModifierModifier, HealShopCostModifier, Modifier, PokemonHeldItemModifier, TempExtraModifierModifier } from "#app/modifier/modifier"; -import ModifierSelectUiHandler, { SHOP_OPTIONS_ROW_LIMIT } from "#app/ui/modifier-select-ui-handler"; +import { globalScene } from "#app/global-scene"; +import type { ModifierTier } from "#app/modifier/modifier-tier"; +import type { ModifierTypeOption, ModifierType } from "#app/modifier/modifier-type"; +import { regenerateModifierPoolThresholds, getPlayerShopModifierTypeOptionsForWave, PokemonModifierType, FusePokemonModifierType, PokemonMoveModifierType, TmModifierType, RememberMoveModifierType, PokemonPpRestoreModifierType, PokemonPpUpModifierType, ModifierPoolType, getPlayerModifierTypeOptions } from "#app/modifier/modifier-type"; +import type { Modifier } from "#app/modifier/modifier"; +import { ExtraModifierModifier, HealShopCostModifier, PokemonHeldItemModifier, TempExtraModifierModifier } from "#app/modifier/modifier"; +import type ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; +import { SHOP_OPTIONS_ROW_LIMIT } from "#app/ui/modifier-select-ui-handler"; import PartyUiHandler, { PartyUiMode, PartyOption } from "#app/ui/party-ui-handler"; import { Mode } from "#app/ui/ui"; import i18next from "i18next"; import * as Utils from "#app/utils"; import { BattlePhase } from "./battle-phase"; import Overrides from "#app/overrides"; -import { CustomModifierSettings } from "#app/modifier/modifier-type"; +import type { CustomModifierSettings } from "#app/modifier/modifier-type"; import { isNullOrUndefined, NumberHolder } from "#app/utils"; export class SelectModifierPhase extends BattlePhase { - private rerollCount: integer; + private rerollCount: number; private modifierTiers?: ModifierTier[]; private customModifierSettings?: CustomModifierSettings; private isCopy: boolean; private typeOptions: ModifierTypeOption[]; - constructor(scene: BattleScene, rerollCount: integer = 0, modifierTiers?: ModifierTier[], customModifierSettings?: CustomModifierSettings, isCopy: boolean = false) { - super(scene); + constructor(rerollCount: number = 0, modifierTiers?: ModifierTier[], customModifierSettings?: CustomModifierSettings, isCopy: boolean = false) { + super(); this.rerollCount = rerollCount; this.modifierTiers = modifierTiers; @@ -35,17 +38,17 @@ export class SelectModifierPhase extends BattlePhase { if (!this.rerollCount && !this.isCopy) { this.updateSeed(); } else if (this.rerollCount) { - this.scene.reroll = false; + globalScene.reroll = false; } - const party = this.scene.getPlayerParty(); + const party = globalScene.getPlayerParty(); if (!this.isCopy) { regenerateModifierPoolThresholds(party, this.getPoolType(), this.rerollCount); } - const modifierCount = new Utils.IntegerHolder(3); + const modifierCount = new Utils.NumberHolder(3); if (this.isPlayer()) { - this.scene.applyModifiers(ExtraModifierModifier, true, modifierCount); - this.scene.applyModifiers(TempExtraModifierModifier, true, modifierCount); + globalScene.applyModifiers(ExtraModifierModifier, true, modifierCount); + globalScene.applyModifiers(TempExtraModifierModifier, true, modifierCount); } // If custom modifiers are specified, overrides default item count @@ -63,66 +66,66 @@ export class SelectModifierPhase extends BattlePhase { this.typeOptions = this.getModifierTypeOptions(modifierCount.value); - const modifierSelectCallback = (rowCursor: integer, cursor: integer) => { + const modifierSelectCallback = (rowCursor: number, cursor: number) => { if (rowCursor < 0 || cursor < 0) { - this.scene.ui.showText(i18next.t("battle:skipItemQuestion"), null, () => { - this.scene.ui.setOverlayMode(Mode.CONFIRM, () => { - this.scene.ui.revertMode(); - this.scene.ui.setMode(Mode.MESSAGE); + globalScene.ui.showText(i18next.t("battle:skipItemQuestion"), null, () => { + globalScene.ui.setOverlayMode(Mode.CONFIRM, () => { + globalScene.ui.revertMode(); + globalScene.ui.setMode(Mode.MESSAGE); super.end(); - }, () => this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), this.typeOptions, modifierSelectCallback, this.getRerollCost(this.scene.lockModifierTiers))); + }, () => globalScene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), this.typeOptions, modifierSelectCallback, this.getRerollCost(globalScene.lockModifierTiers))); }); return false; } let modifierType: ModifierType; - let cost: integer; - const rerollCost = this.getRerollCost(this.scene.lockModifierTiers); + let cost: number; + const rerollCost = this.getRerollCost(globalScene.lockModifierTiers); switch (rowCursor) { case 0: switch (cursor) { case 0: - if (rerollCost < 0 || this.scene.money < rerollCost) { - this.scene.ui.playError(); + if (rerollCost < 0 || globalScene.money < rerollCost) { + globalScene.ui.playError(); return false; } else { - this.scene.reroll = true; - this.scene.unshiftPhase(new SelectModifierPhase(this.scene, this.rerollCount + 1, this.typeOptions.map(o => o.type?.tier).filter(t => t !== undefined) as ModifierTier[])); - this.scene.ui.clearText(); - this.scene.ui.setMode(Mode.MESSAGE).then(() => super.end()); + globalScene.reroll = true; + globalScene.unshiftPhase(new SelectModifierPhase(this.rerollCount + 1, this.typeOptions.map(o => o.type?.tier).filter(t => t !== undefined) as ModifierTier[])); + globalScene.ui.clearText(); + globalScene.ui.setMode(Mode.MESSAGE).then(() => super.end()); if (!Overrides.WAIVE_ROLL_FEE_OVERRIDE) { - this.scene.money -= rerollCost; - this.scene.updateMoneyText(); - this.scene.animateMoneyChanged(false); + globalScene.money -= rerollCost; + globalScene.updateMoneyText(); + globalScene.animateMoneyChanged(false); } - this.scene.playSound("se/buy"); + globalScene.playSound("se/buy"); } break; case 1: - this.scene.ui.setModeWithoutClear(Mode.PARTY, PartyUiMode.MODIFIER_TRANSFER, -1, (fromSlotIndex: integer, itemIndex: integer, itemQuantity: integer, toSlotIndex: integer) => { + globalScene.ui.setModeWithoutClear(Mode.PARTY, PartyUiMode.MODIFIER_TRANSFER, -1, (fromSlotIndex: number, itemIndex: number, itemQuantity: number, toSlotIndex: number) => { if (toSlotIndex !== undefined && fromSlotIndex < 6 && toSlotIndex < 6 && fromSlotIndex !== toSlotIndex && itemIndex > -1) { - const itemModifiers = this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier + const itemModifiers = globalScene.findModifiers(m => m instanceof PokemonHeldItemModifier && m.isTransferable && m.pokemonId === party[fromSlotIndex].id) as PokemonHeldItemModifier[]; const itemModifier = itemModifiers[itemIndex]; - this.scene.tryTransferHeldItemModifier(itemModifier, party[toSlotIndex], true, itemQuantity, undefined, undefined, false); + globalScene.tryTransferHeldItemModifier(itemModifier, party[toSlotIndex], true, itemQuantity, undefined, undefined, false); } else { - this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), this.typeOptions, modifierSelectCallback, this.getRerollCost(this.scene.lockModifierTiers)); + globalScene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), this.typeOptions, modifierSelectCallback, this.getRerollCost(globalScene.lockModifierTiers)); } }, PartyUiHandler.FilterItemMaxStacks); break; case 2: - this.scene.ui.setModeWithoutClear(Mode.PARTY, PartyUiMode.CHECK, -1, () => { - this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), this.typeOptions, modifierSelectCallback, this.getRerollCost(this.scene.lockModifierTiers)); + globalScene.ui.setModeWithoutClear(Mode.PARTY, PartyUiMode.CHECK, -1, () => { + globalScene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), this.typeOptions, modifierSelectCallback, this.getRerollCost(globalScene.lockModifierTiers)); }); break; case 3: if (rerollCost < 0) { // Reroll lock button is also disabled when reroll is disabled - this.scene.ui.playError(); + globalScene.ui.playError(); return false; } - this.scene.lockModifierTiers = !this.scene.lockModifierTiers; - const uiHandler = this.scene.ui.getHandler() as ModifierSelectUiHandler; - uiHandler.setRerollCost(this.getRerollCost(this.scene.lockModifierTiers)); + globalScene.lockModifierTiers = !globalScene.lockModifierTiers; + const uiHandler = globalScene.ui.getHandler() as ModifierSelectUiHandler; + uiHandler.setRerollCost(this.getRerollCost(globalScene.lockModifierTiers)); uiHandler.updateLockRaritiesText(); uiHandler.updateRerollCostText(); return false; @@ -130,8 +133,8 @@ export class SelectModifierPhase extends BattlePhase { return true; case 1: if (this.typeOptions.length === 0) { - this.scene.ui.clearText(); - this.scene.ui.setMode(Mode.MESSAGE); + globalScene.ui.clearText(); + globalScene.ui.setMode(Mode.MESSAGE); super.end(); return true; } @@ -140,71 +143,62 @@ export class SelectModifierPhase extends BattlePhase { } break; default: - const shopOptions = getPlayerShopModifierTypeOptionsForWave(this.scene.currentBattle.waveIndex, this.scene.getWaveMoneyAmount(1)); + const shopOptions = getPlayerShopModifierTypeOptionsForWave(globalScene.currentBattle.waveIndex, globalScene.getWaveMoneyAmount(1)); const shopOption = shopOptions[rowCursor > 2 || shopOptions.length <= SHOP_OPTIONS_ROW_LIMIT ? cursor : cursor + SHOP_OPTIONS_ROW_LIMIT]; if (shopOption.type) { modifierType = shopOption.type; } // Apply Black Sludge to healing item cost const healingItemCost = new NumberHolder(shopOption.cost); - this.scene.applyModifier(HealShopCostModifier, true, healingItemCost); + globalScene.applyModifier(HealShopCostModifier, true, healingItemCost); cost = healingItemCost.value; break; } - if (cost! && (this.scene.money < cost) && !Overrides.WAIVE_ROLL_FEE_OVERRIDE) { // TODO: is the bang on cost correct? - this.scene.ui.playError(); + if (cost! && (globalScene.money < cost) && !Overrides.WAIVE_ROLL_FEE_OVERRIDE) { // TODO: is the bang on cost correct? + globalScene.ui.playError(); return false; } const applyModifier = (modifier: Modifier, playSound: boolean = false) => { - const result = this.scene.addModifier(modifier, false, playSound, undefined, undefined, cost); + const result = globalScene.addModifier(modifier, false, playSound, undefined, undefined, cost); // Queue a copy of this phase when applying a TM or Memory Mushroom. // If the player selects either of these, then escapes out of consuming them, // they are returned to a shop in the same state. if (modifier.type instanceof RememberMoveModifierType || modifier.type instanceof TmModifierType) { - this.scene.unshiftPhase(this.copy()); + globalScene.unshiftPhase(this.copy()); } if (cost && !(modifier.type instanceof RememberMoveModifierType)) { - result.then(success => { - if (success) { - if (!Overrides.WAIVE_ROLL_FEE_OVERRIDE) { - this.scene.money -= cost; - this.scene.updateMoneyText(); - this.scene.animateMoneyChanged(false); - } - this.scene.playSound("se/buy"); - (this.scene.ui.getHandler() as ModifierSelectUiHandler).updateCostText(); - } else { - this.scene.ui.playError(); + if (result) { + if (!Overrides.WAIVE_ROLL_FEE_OVERRIDE) { + globalScene.money -= cost; + globalScene.updateMoneyText(); + globalScene.animateMoneyChanged(false); } - }); - } else { - const doEnd = () => { - this.scene.ui.clearText(); - this.scene.ui.setMode(Mode.MESSAGE); - super.end(); - }; - if (result instanceof Promise) { - result.then(() => doEnd()); + globalScene.playSound("se/buy"); + (globalScene.ui.getHandler() as ModifierSelectUiHandler).updateCostText(); } else { - doEnd(); + globalScene.ui.playError(); } + } else { + globalScene.ui.clearText(); + globalScene.ui.setMode(Mode.MESSAGE); + super.end(); } }; if (modifierType! instanceof PokemonModifierType) { //TODO: is the bang correct? if (modifierType instanceof FusePokemonModifierType) { - this.scene.ui.setModeWithoutClear(Mode.PARTY, PartyUiMode.SPLICE, -1, (fromSlotIndex: integer, spliceSlotIndex: integer) => { + globalScene.ui.setModeWithoutClear(Mode.PARTY, PartyUiMode.SPLICE, -1, (fromSlotIndex: number, spliceSlotIndex: number) => { if (spliceSlotIndex !== undefined && fromSlotIndex < 6 && spliceSlotIndex < 6 && fromSlotIndex !== spliceSlotIndex) { - this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer()).then(() => { + globalScene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer()).then(() => { const modifier = modifierType.newModifier(party[fromSlotIndex], party[spliceSlotIndex])!; //TODO: is the bang correct? applyModifier(modifier, true); }); } else { - this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), this.typeOptions, modifierSelectCallback, this.getRerollCost(this.scene.lockModifierTiers)); + globalScene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), this.typeOptions, modifierSelectCallback, this.getRerollCost(globalScene.lockModifierTiers)); } }, modifierType.selectFilter); } else { @@ -220,18 +214,18 @@ export class SelectModifierPhase extends BattlePhase { const tmMoveId = isTmModifier ? (modifierType as TmModifierType).moveId : undefined; - this.scene.ui.setModeWithoutClear(Mode.PARTY, partyUiMode, -1, (slotIndex: integer, option: PartyOption) => { + globalScene.ui.setModeWithoutClear(Mode.PARTY, partyUiMode, -1, (slotIndex: number, option: PartyOption) => { if (slotIndex < 6) { - this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer()).then(() => { + globalScene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer()).then(() => { const modifier = !isMoveModifier ? !isRememberMoveModifier ? modifierType.newModifier(party[slotIndex]) - : modifierType.newModifier(party[slotIndex], option as integer) + : modifierType.newModifier(party[slotIndex], option as number) : modifierType.newModifier(party[slotIndex], option - PartyOption.MOVE_1); applyModifier(modifier!, true); // TODO: is the bang correct? }); } else { - this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), this.typeOptions, modifierSelectCallback, this.getRerollCost(this.scene.lockModifierTiers)); + globalScene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), this.typeOptions, modifierSelectCallback, this.getRerollCost(globalScene.lockModifierTiers)); } }, pokemonModifierType.selectFilter, modifierType instanceof PokemonMoveModifierType ? (modifierType as PokemonMoveModifierType).moveSelectFilter : undefined, tmMoveId, isPpRestoreModifier); } @@ -241,11 +235,11 @@ export class SelectModifierPhase extends BattlePhase { return !cost!;// TODO: is the bang correct? }; - this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), this.typeOptions, modifierSelectCallback, this.getRerollCost(this.scene.lockModifierTiers)); + globalScene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), this.typeOptions, modifierSelectCallback, this.getRerollCost(globalScene.lockModifierTiers)); } updateSeed(): void { - this.scene.resetSeed(); + globalScene.resetSeed(); } isPlayer(): boolean { @@ -276,11 +270,11 @@ export class SelectModifierPhase extends BattlePhase { multiplier = this.customModifierSettings.rerollMultiplier; } - const baseMultiplier = Math.min(Math.ceil(this.scene.currentBattle.waveIndex / 10) * baseValue * (2 ** this.rerollCount) * multiplier, Number.MAX_SAFE_INTEGER); + const baseMultiplier = Math.min(Math.ceil(globalScene.currentBattle.waveIndex / 10) * baseValue * (2 ** this.rerollCount) * multiplier, Number.MAX_SAFE_INTEGER); // Apply Black Sludge to reroll cost const modifiedRerollCost = new NumberHolder(baseMultiplier); - this.scene.applyModifier(HealShopCostModifier, true, modifiedRerollCost); + globalScene.applyModifier(HealShopCostModifier, true, modifiedRerollCost); return modifiedRerollCost.value; } @@ -288,13 +282,12 @@ export class SelectModifierPhase extends BattlePhase { return ModifierPoolType.PLAYER; } - getModifierTypeOptions(modifierCount: integer): ModifierTypeOption[] { - return getPlayerModifierTypeOptions(modifierCount, this.scene.getPlayerParty(), this.scene.lockModifierTiers ? this.modifierTiers : undefined, this.customModifierSettings); + getModifierTypeOptions(modifierCount: number): ModifierTypeOption[] { + return getPlayerModifierTypeOptions(modifierCount, globalScene.getPlayerParty(), globalScene.lockModifierTiers ? this.modifierTiers : undefined, this.customModifierSettings); } copy(): SelectModifierPhase { return new SelectModifierPhase( - this.scene, this.rerollCount, this.modifierTiers, { guaranteedModifierTypeOptions: this.typeOptions, rerollMultiplier: this.customModifierSettings?.rerollMultiplier, allowLuckUpgrades: false }, @@ -302,7 +295,7 @@ export class SelectModifierPhase extends BattlePhase { ); } - addModifier(modifier: Modifier): Promise { - return this.scene.addModifier(modifier, false, true); + addModifier(modifier: Modifier): boolean { + return globalScene.addModifier(modifier, false, true); } } diff --git a/src/phases/select-starter-phase.ts b/src/phases/select-starter-phase.ts index 2273ab1cd3c..b7ad15533a6 100644 --- a/src/phases/select-starter-phase.ts +++ b/src/phases/select-starter-phase.ts @@ -1,4 +1,4 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { applyChallenges, ChallengeType } from "#app/data/challenge"; import { Gender } from "#app/data/gender"; import { SpeciesFormChangeMoveLearnedTrigger } from "#app/data/pokemon-forms"; @@ -8,31 +8,32 @@ import Overrides from "#app/overrides"; import { Phase } from "#app/phase"; import { TitlePhase } from "#app/phases/title-phase"; import { SaveSlotUiMode } from "#app/ui/save-slot-select-ui-handler"; -import { Starter } from "#app/ui/starter-select-ui-handler"; +import type { Starter } from "#app/ui/starter-select-ui-handler"; import { Mode } from "#app/ui/ui"; -import { Species } from "#enums/species"; +import type { Species } from "#enums/species"; import SoundFade from "phaser3-rex-plugins/plugins/soundfade"; +import * as Utils from "../utils"; export class SelectStarterPhase extends Phase { - constructor(scene: BattleScene) { - super(scene); + constructor() { + super(); } start() { super.start(); - this.scene.playBgm("menu"); + globalScene.playBgm("menu"); - this.scene.ui.setMode(Mode.STARTER_SELECT, (starters: Starter[]) => { - this.scene.ui.clearText(); - this.scene.ui.setMode(Mode.SAVE_SLOT, SaveSlotUiMode.SAVE, (slotId: integer) => { + globalScene.ui.setMode(Mode.STARTER_SELECT, (starters: Starter[]) => { + globalScene.ui.clearText(); + globalScene.ui.setMode(Mode.SAVE_SLOT, SaveSlotUiMode.SAVE, (slotId: number) => { if (slotId === -1) { - this.scene.clearPhaseQueue(); - this.scene.pushPhase(new TitlePhase(this.scene)); + globalScene.clearPhaseQueue(); + globalScene.pushPhase(new TitlePhase()); return this.end(); } - this.scene.sessionSlotId = slotId; + globalScene.sessionSlotId = slotId; this.initBattle(starters); }); }); @@ -43,13 +44,13 @@ export class SelectStarterPhase extends Phase { * @param starters {@linkcode Pokemon} with which to start the first battle */ initBattle(starters: Starter[]) { - const party = this.scene.getPlayerParty(); + const party = globalScene.getPlayerParty(); const loadPokemonAssets: Promise[] = []; - starters.forEach((starter: Starter, i: integer) => { + starters.forEach((starter: Starter, i: number) => { if (!i && Overrides.STARTER_SPECIES_OVERRIDE) { starter.species = getPokemonSpecies(Overrides.STARTER_SPECIES_OVERRIDE as Species); } - const starterProps = this.scene.gameData.getSpeciesDexAttrProps(starter.species, starter.dexAttr); + const starterProps = globalScene.gameData.getSpeciesDexAttrProps(starter.species, starter.dexAttr); let starterFormIndex = Math.min(starterProps.formIndex, Math.max(starter.species.forms.length - 1, 0)); if ( starter.species.speciesId in Overrides.STARTER_FORM_OVERRIDES && @@ -64,13 +65,13 @@ export class SelectStarterPhase extends Phase { if (Overrides.GENDER_OVERRIDE !== null) { starterGender = Overrides.GENDER_OVERRIDE; } - const starterIvs = this.scene.gameData.dexData[starter.species.speciesId].ivs.slice(0); - const starterPokemon = this.scene.addPlayerPokemon(starter.species, this.scene.gameMode.getStartingLevel(), starter.abilityIndex, starterFormIndex, starterGender, starterProps.shiny, starterProps.variant, starterIvs, starter.nature); + const starterIvs = globalScene.gameData.dexData[starter.species.speciesId].ivs.slice(0); + const starterPokemon = globalScene.addPlayerPokemon(starter.species, globalScene.gameMode.getStartingLevel(), starter.abilityIndex, starterFormIndex, starterGender, starterProps.shiny, starterProps.variant, starterIvs, starter.nature); starter.moveset && starterPokemon.tryPopulateMoveset(starter.moveset); if (starter.passive) { starterPokemon.passive = true; } - starterPokemon.luck = this.scene.gameData.getDexAttrLuck(this.scene.gameData.dexData[starter.species.speciesId].caughtAttr); + starterPokemon.luck = globalScene.gameData.getDexAttrLuck(globalScene.gameData.dexData[starter.species.speciesId].caughtAttr); if (starter.pokerus) { starterPokemon.pokerus = true; } @@ -79,31 +80,37 @@ export class SelectStarterPhase extends Phase { starterPokemon.nickname = starter.nickname; } - if (this.scene.gameMode.isSplicedOnly || Overrides.STARTER_FUSION_OVERRIDE) { + if (!Utils.isNullOrUndefined(starter.teraType)) { + starterPokemon.teraType = starter.teraType; + } else { + starterPokemon.teraType = starterPokemon.species.type1; + } + + if (globalScene.gameMode.isSplicedOnly || Overrides.STARTER_FUSION_OVERRIDE) { starterPokemon.generateFusionSpecies(true); } starterPokemon.setVisible(false); - applyChallenges(this.scene.gameMode, ChallengeType.STARTER_MODIFY, starterPokemon); + applyChallenges(globalScene.gameMode, ChallengeType.STARTER_MODIFY, starterPokemon); party.push(starterPokemon); loadPokemonAssets.push(starterPokemon.loadAssets()); }); - overrideModifiers(this.scene); - overrideHeldItems(this.scene, party[0]); + overrideModifiers(); + overrideHeldItems(party[0]); Promise.all(loadPokemonAssets).then(() => { - SoundFade.fadeOut(this.scene, this.scene.sound.get("menu"), 500, true); - this.scene.time.delayedCall(500, () => this.scene.playBgm()); - if (this.scene.gameMode.isClassic) { - this.scene.gameData.gameStats.classicSessionsPlayed++; + SoundFade.fadeOut(globalScene, globalScene.sound.get("menu"), 500, true); + globalScene.time.delayedCall(500, () => globalScene.playBgm()); + if (globalScene.gameMode.isClassic) { + globalScene.gameData.gameStats.classicSessionsPlayed++; } else { - this.scene.gameData.gameStats.endlessSessionsPlayed++; + globalScene.gameData.gameStats.endlessSessionsPlayed++; } - this.scene.newBattle(); - this.scene.arena.init(); - this.scene.sessionPlayTime = 0; - this.scene.lastSavePlayTime = 0; + globalScene.newBattle(); + globalScene.arena.init(); + globalScene.sessionPlayTime = 0; + globalScene.lastSavePlayTime = 0; // Ensures Keldeo (or any future Pokemon that have this type of form change) starts in the correct form - this.scene.getPlayerParty().forEach((p) => { - this.scene.triggerPokemonFormChange(p, SpeciesFormChangeMoveLearnedTrigger); + globalScene.getPlayerParty().forEach((p) => { + globalScene.triggerPokemonFormChange(p, SpeciesFormChangeMoveLearnedTrigger); }); this.end(); }); diff --git a/src/phases/select-target-phase.ts b/src/phases/select-target-phase.ts index 6f11f984c4b..a30ef9000a5 100644 --- a/src/phases/select-target-phase.ts +++ b/src/phases/select-target-phase.ts @@ -1,5 +1,5 @@ -import BattleScene from "#app/battle-scene"; -import { BattlerIndex } from "#app/battle"; +import { globalScene } from "#app/global-scene"; +import type { BattlerIndex } from "#app/battle"; import { Command } from "#app/ui/command-ui-handler"; import { Mode } from "#app/ui/ui"; import { CommandPhase } from "./command-phase"; @@ -8,33 +8,33 @@ import i18next from "#app/plugins/i18n"; import { allMoves } from "#app/data/move"; export class SelectTargetPhase extends PokemonPhase { - constructor(scene: BattleScene, fieldIndex: integer) { - super(scene, fieldIndex); + constructor(fieldIndex: number) { + super(fieldIndex); } start() { super.start(); - const turnCommand = this.scene.currentBattle.turnCommands[this.fieldIndex]; + const turnCommand = globalScene.currentBattle.turnCommands[this.fieldIndex]; const move = turnCommand?.move?.move; - this.scene.ui.setMode(Mode.TARGET_SELECT, this.fieldIndex, move, (targets: BattlerIndex[]) => { - this.scene.ui.setMode(Mode.MESSAGE); - const fieldSide = this.scene.getField(); + globalScene.ui.setMode(Mode.TARGET_SELECT, this.fieldIndex, move, (targets: BattlerIndex[]) => { + globalScene.ui.setMode(Mode.MESSAGE); + const fieldSide = globalScene.getField(); const user = fieldSide[this.fieldIndex]; const moveObject = allMoves[move!]; if (moveObject && user.isMoveTargetRestricted(moveObject.id, user, fieldSide[targets[0]])) { const errorMessage = user.getRestrictingTag(move!, user, fieldSide[targets[0]])!.selectionDeniedText(user, moveObject.id); - user.scene.queueMessage(i18next.t(errorMessage, { moveName: moveObject.name }), 0, true); + globalScene.queueMessage(i18next.t(errorMessage, { moveName: moveObject.name }), 0, true); targets = []; } if (targets.length < 1) { - this.scene.currentBattle.turnCommands[this.fieldIndex] = null; - this.scene.unshiftPhase(new CommandPhase(this.scene, this.fieldIndex)); + globalScene.currentBattle.turnCommands[this.fieldIndex] = null; + globalScene.unshiftPhase(new CommandPhase(this.fieldIndex)); } else { turnCommand!.targets = targets; //TODO: is the bang correct here? } if (turnCommand?.command === Command.BALL && this.fieldIndex) { - this.scene.currentBattle.turnCommands[this.fieldIndex - 1]!.skip = true; //TODO: is the bang correct here? + globalScene.currentBattle.turnCommands[this.fieldIndex - 1]!.skip = true; //TODO: is the bang correct here? } this.end(); }); diff --git a/src/phases/shiny-sparkle-phase.ts b/src/phases/shiny-sparkle-phase.ts index 49c60a82dd5..2540d98fb79 100644 --- a/src/phases/shiny-sparkle-phase.ts +++ b/src/phases/shiny-sparkle-phase.ts @@ -1,16 +1,16 @@ -import BattleScene from "#app/battle-scene"; -import { BattlerIndex } from "#app/battle"; +import { globalScene } from "#app/global-scene"; +import type { BattlerIndex } from "#app/battle"; import { PokemonPhase } from "./pokemon-phase"; export class ShinySparklePhase extends PokemonPhase { - constructor(scene: BattleScene, battlerIndex: BattlerIndex) { - super(scene, battlerIndex); + constructor(battlerIndex: BattlerIndex) { + super(battlerIndex); } start() { super.start(); this.getPokemon().sparkle(); - this.scene.time.delayedCall(1000, () => this.end()); + globalScene.time.delayedCall(1000, () => this.end()); } } diff --git a/src/phases/show-ability-phase.ts b/src/phases/show-ability-phase.ts index cf34e327b4f..d759ad833a1 100644 --- a/src/phases/show-ability-phase.ts +++ b/src/phases/show-ability-phase.ts @@ -1,12 +1,12 @@ -import BattleScene from "#app/battle-scene"; -import { BattlerIndex } from "#app/battle"; +import { globalScene } from "#app/global-scene"; +import type { BattlerIndex } from "#app/battle"; import { PokemonPhase } from "./pokemon-phase"; export class ShowAbilityPhase extends PokemonPhase { private passive: boolean; - constructor(scene: BattleScene, battlerIndex: BattlerIndex, passive: boolean = false) { - super(scene, battlerIndex); + constructor(battlerIndex: BattlerIndex, passive: boolean = false) { + super(battlerIndex); this.passive = passive; } @@ -17,7 +17,15 @@ export class ShowAbilityPhase extends PokemonPhase { const pokemon = this.getPokemon(); if (pokemon) { - this.scene.abilityBar.showAbility(pokemon, this.passive); + + if (!pokemon.isPlayer()) { + /** If its an enemy pokemon, list it as last enemy to use ability or move */ + globalScene.currentBattle.lastEnemyInvolved = pokemon.getBattlerIndex() % 2; + } else { + globalScene.currentBattle.lastPlayerInvolved = pokemon.getBattlerIndex() % 2; + } + + globalScene.abilityBar.showAbility(pokemon, this.passive); if (pokemon?.battleData) { pokemon.battleData.abilityRevealed = true; diff --git a/src/phases/show-party-exp-bar-phase.ts b/src/phases/show-party-exp-bar-phase.ts index f1783e7715f..004592bc335 100644 --- a/src/phases/show-party-exp-bar-phase.ts +++ b/src/phases/show-party-exp-bar-phase.ts @@ -1,4 +1,4 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { ExpGainsSpeed } from "#app/enums/exp-gains-speed"; import { ExpNotification } from "#app/enums/exp-notification"; import { ExpBoosterModifier } from "#app/modifier/modifier"; @@ -10,8 +10,8 @@ import { PlayerPartyMemberPokemonPhase } from "./player-party-member-pokemon-pha export class ShowPartyExpBarPhase extends PlayerPartyMemberPokemonPhase { private expValue: number; - constructor(scene: BattleScene, partyMemberIndex: integer, expValue: number) { - super(scene, partyMemberIndex); + constructor(partyMemberIndex: number, expValue: number) { + super(partyMemberIndex); this.expValue = expValue; } @@ -21,33 +21,33 @@ export class ShowPartyExpBarPhase extends PlayerPartyMemberPokemonPhase { const pokemon = this.getPokemon(); const exp = new Utils.NumberHolder(this.expValue); - this.scene.applyModifiers(ExpBoosterModifier, true, exp); + globalScene.applyModifiers(ExpBoosterModifier, true, exp); exp.value = Math.floor(exp.value); const lastLevel = pokemon.level; pokemon.addExp(exp.value); const newLevel = pokemon.level; if (newLevel > lastLevel) { - this.scene.unshiftPhase(new LevelUpPhase(this.scene, this.partyMemberIndex, lastLevel, newLevel)); + globalScene.unshiftPhase(new LevelUpPhase(this.partyMemberIndex, lastLevel, newLevel)); } - this.scene.unshiftPhase(new HidePartyExpBarPhase(this.scene)); + globalScene.unshiftPhase(new HidePartyExpBarPhase()); pokemon.updateInfo(); - if (this.scene.expParty === ExpNotification.SKIP) { + if (globalScene.expParty === ExpNotification.SKIP) { this.end(); - } else if (this.scene.expParty === ExpNotification.ONLY_LEVEL_UP) { + } else if (globalScene.expParty === ExpNotification.ONLY_LEVEL_UP) { if (newLevel > lastLevel) { // this means if we level up // instead of displaying the exp gain in the small frame, we display the new level // we use the same method for mode 0 & 1, by giving a parameter saying to display the exp or the level - this.scene.partyExpBar.showPokemonExp(pokemon, exp.value, this.scene.expParty === ExpNotification.ONLY_LEVEL_UP, newLevel).then(() => { - setTimeout(() => this.end(), 800 / Math.pow(2, this.scene.expGainsSpeed)); + globalScene.partyExpBar.showPokemonExp(pokemon, exp.value, globalScene.expParty === ExpNotification.ONLY_LEVEL_UP, newLevel).then(() => { + setTimeout(() => this.end(), 800 / Math.pow(2, globalScene.expGainsSpeed)); }); } else { this.end(); } - } else if (this.scene.expGainsSpeed < ExpGainsSpeed.SKIP) { - this.scene.partyExpBar.showPokemonExp(pokemon, exp.value, false, newLevel).then(() => { - setTimeout(() => this.end(), 500 / Math.pow(2, this.scene.expGainsSpeed)); + } else if (globalScene.expGainsSpeed < ExpGainsSpeed.SKIP) { + globalScene.partyExpBar.showPokemonExp(pokemon, exp.value, false, newLevel).then(() => { + setTimeout(() => this.end(), 500 / Math.pow(2, globalScene.expGainsSpeed)); }); } else { this.end(); diff --git a/src/phases/show-trainer-phase.ts b/src/phases/show-trainer-phase.ts index 26ccddd53fc..17106b54048 100644 --- a/src/phases/show-trainer-phase.ts +++ b/src/phases/show-trainer-phase.ts @@ -1,21 +1,21 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { PlayerGender } from "#app/enums/player-gender"; import { BattlePhase } from "./battle-phase"; export class ShowTrainerPhase extends BattlePhase { - constructor(scene: BattleScene) { - super(scene); + constructor() { + super(); } start() { super.start(); - this.scene.trainer.setVisible(true); + globalScene.trainer.setVisible(true); - this.scene.trainer.setTexture(`trainer_${this.scene.gameData.gender === PlayerGender.FEMALE ? "f" : "m"}_back`); + globalScene.trainer.setTexture(`trainer_${globalScene.gameData.gender === PlayerGender.FEMALE ? "f" : "m"}_back`); - this.scene.tweens.add({ - targets: this.scene.trainer, + globalScene.tweens.add({ + targets: globalScene.trainer, x: 106, duration: 1000, onComplete: () => this.end() diff --git a/src/phases/stat-stage-change-phase.ts b/src/phases/stat-stage-change-phase.ts index 44144f9d047..753d1f7cede 100644 --- a/src/phases/stat-stage-change-phase.ts +++ b/src/phases/stat-stage-change-phase.ts @@ -1,8 +1,9 @@ -import { BattlerIndex } from "#app/battle"; -import BattleScene from "#app/battle-scene"; -import { applyAbAttrs, applyPostStatStageChangeAbAttrs, applyPreStatStageChangeAbAttrs, PostStatStageChangeAbAttr, ProtectStatAbAttr, StatStageChangeCopyAbAttr, StatStageChangeMultiplierAbAttr } from "#app/data/ability"; +import { globalScene } from "#app/global-scene"; +import type { BattlerIndex } from "#app/battle"; +import { applyAbAttrs, applyPostStatStageChangeAbAttrs, applyPreStatStageChangeAbAttrs, PostStatStageChangeAbAttr, ProtectStatAbAttr, ReflectStatStageChangeAbAttr, StatStageChangeCopyAbAttr, StatStageChangeMultiplierAbAttr } from "#app/data/ability"; import { ArenaTagSide, MistTag } from "#app/data/arena-tag"; -import Pokemon from "#app/field/pokemon"; +import type { ArenaTag } from "#app/data/arena-tag"; +import type Pokemon from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { ResetNegativeStatStageModifier } from "#app/modifier/modifier"; import { handleTutorial, Tutorial } from "#app/tutorial"; @@ -10,21 +11,25 @@ import { NumberHolder, BooleanHolder } from "#app/utils"; import i18next from "i18next"; import { PokemonPhase } from "./pokemon-phase"; import { Stat, type BattleStat, getStatKey, getStatStageChangeDescriptionKey } from "#enums/stat"; +import { OctolockTag } from "#app/data/battler-tags"; +import { ArenaTagType } from "#app/enums/arena-tag-type"; export type StatStageChangeCallback = (target: Pokemon | null, changed: BattleStat[], relativeChanges: number[]) => void; export class StatStageChangePhase extends PokemonPhase { private stats: BattleStat[]; private selfTarget: boolean; - private stages: integer; + private stages: number; private showMessage: boolean; private ignoreAbilities: boolean; private canBeCopied: boolean; private onChange: StatStageChangeCallback | null; + private comingFromMirrorArmorUser: boolean; + private comingFromStickyWeb: boolean; - constructor(scene: BattleScene, battlerIndex: BattlerIndex, selfTarget: boolean, stats: BattleStat[], stages: integer, showMessage: boolean = true, ignoreAbilities: boolean = false, canBeCopied: boolean = true, onChange: StatStageChangeCallback | null = null) { - super(scene, battlerIndex); + constructor(battlerIndex: BattlerIndex, selfTarget: boolean, stats: BattleStat[], stages: number, showMessage: boolean = true, ignoreAbilities: boolean = false, canBeCopied: boolean = true, onChange: StatStageChangeCallback | null = null, comingFromMirrorArmorUser: boolean = false, comingFromStickyWeb: boolean = false) { + super(battlerIndex); this.selfTarget = selfTarget; this.stats = stats; @@ -33,6 +38,8 @@ export class StatStageChangePhase extends PokemonPhase { this.ignoreAbilities = ignoreAbilities; this.canBeCopied = canBeCopied; this.onChange = onChange; + this.comingFromMirrorArmorUser = comingFromMirrorArmorUser; + this.comingFromStickyWeb = comingFromStickyWeb; } start() { @@ -41,12 +48,44 @@ export class StatStageChangePhase extends PokemonPhase { if (this.stats.length > 1) { for (let i = 0; i < this.stats.length; i++) { const stat = [ this.stats[i] ]; - this.scene.unshiftPhase(new StatStageChangePhase(this.scene, this.battlerIndex, this.selfTarget, stat, this.stages, this.showMessage, this.ignoreAbilities, this.canBeCopied, this.onChange)); + globalScene.unshiftPhase(new StatStageChangePhase(this.battlerIndex, this.selfTarget, stat, this.stages, this.showMessage, this.ignoreAbilities, this.canBeCopied, this.onChange, this.comingFromMirrorArmorUser)); } return this.end(); } const pokemon = this.getPokemon(); + let opponentPokemon: Pokemon | undefined; + + /** Gets the position of last enemy or player pokemon that used ability or move, primarily for double battles involving Mirror Armor */ + if (pokemon.isPlayer()) { + /** If this SSCP is not from sticky web, then we find the opponent pokemon that last did something */ + if (!this.comingFromStickyWeb) { + opponentPokemon = globalScene.getEnemyField()[globalScene.currentBattle.lastEnemyInvolved]; + } else { + /** If this SSCP is from sticky web, then check if pokemon that last sucessfully used sticky web is on field */ + const stickyTagID = globalScene.arena.findTagsOnSide( + (t: ArenaTag) => t.tagType === ArenaTagType.STICKY_WEB, + ArenaTagSide.PLAYER)[0].sourceId; + globalScene.getEnemyField().forEach((e) => { + if (e.id === stickyTagID) { + opponentPokemon = e; + } + }); + } + } else { + if (!this.comingFromStickyWeb) { + opponentPokemon = globalScene.getPlayerField()[globalScene.currentBattle.lastPlayerInvolved]; + } else { + const stickyTagID = globalScene.arena.findTagsOnSide( + (t: ArenaTag) => t.tagType === ArenaTagType.STICKY_WEB, + ArenaTagSide.ENEMY)[0].sourceId; + globalScene.getPlayerField().forEach((e) => { + if (e.id === stickyTagID) { + opponentPokemon = e; + } + }); + } + } if (!pokemon.isActive(true)) { return this.end(); @@ -65,11 +104,16 @@ export class StatStageChangePhase extends PokemonPhase { if (!this.selfTarget && stages.value < 0) { // TODO: add a reference to the source of the stat change to fix Infiltrator interaction - this.scene.arena.applyTagsForSide(MistTag, pokemon.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY, false, null, cancelled); + globalScene.arena.applyTagsForSide(MistTag, pokemon.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY, false, null, cancelled); } if (!cancelled.value && !this.selfTarget && stages.value < 0) { applyPreStatStageChangeAbAttrs(ProtectStatAbAttr, pokemon, stat, cancelled, simulate); + + /** Potential stat reflection due to Mirror Armor, does not apply to Octolock end of turn effect */ + if (opponentPokemon !== undefined && !pokemon.findTag(t => t instanceof OctolockTag) && !this.comingFromMirrorArmorUser) { + applyPreStatStageChangeAbAttrs(ReflectStatStageChangeAbAttr, pokemon, stat, cancelled, simulate, opponentPokemon, this.stages); + } } // If one stat stage decrease is cancelled, simulate the rest of the applications @@ -88,7 +132,7 @@ export class StatStageChangePhase extends PokemonPhase { if (this.showMessage) { const messages = this.getStatStageChangeMessages(filteredStats, stages.value, relLevels); for (const message of messages) { - this.scene.queueMessage(message); + globalScene.queueMessage(message); } } @@ -119,50 +163,50 @@ export class StatStageChangePhase extends PokemonPhase { applyPostStatStageChangeAbAttrs(PostStatStageChangeAbAttr, pokemon, filteredStats, this.stages, this.selfTarget); // Look for any other stat change phases; if this is the last one, do White Herb check - const existingPhase = this.scene.findPhase(p => p instanceof StatStageChangePhase && p.battlerIndex === this.battlerIndex); + const existingPhase = globalScene.findPhase(p => p instanceof StatStageChangePhase && p.battlerIndex === this.battlerIndex); if (!(existingPhase instanceof StatStageChangePhase)) { // Apply White Herb if needed - const whiteHerb = this.scene.applyModifier(ResetNegativeStatStageModifier, this.player, pokemon) as ResetNegativeStatStageModifier; + const whiteHerb = globalScene.applyModifier(ResetNegativeStatStageModifier, this.player, pokemon) as ResetNegativeStatStageModifier; // If the White Herb was applied, consume it if (whiteHerb) { pokemon.loseHeldItem(whiteHerb); - this.scene.updateModifiers(this.player); + globalScene.updateModifiers(this.player); } } pokemon.updateInfo(); - handleTutorial(this.scene, Tutorial.Stat_Change).then(() => super.end()); + handleTutorial(Tutorial.Stat_Change).then(() => super.end()); }; - if (relLevels.filter(l => l).length && this.scene.moveAnimations) { + if (relLevels.filter(l => l).length && globalScene.moveAnimations) { pokemon.enableMask(); const pokemonMaskSprite = pokemon.maskSprite; - const tileX = (this.player ? 106 : 236) * pokemon.getSpriteScale() * this.scene.field.scale; - const tileY = ((this.player ? 148 : 84) + (stages.value >= 1 ? 160 : 0)) * pokemon.getSpriteScale() * this.scene.field.scale; - const tileWidth = 156 * this.scene.field.scale * pokemon.getSpriteScale(); - const tileHeight = 316 * this.scene.field.scale * pokemon.getSpriteScale(); + const tileX = (this.player ? 106 : 236) * pokemon.getSpriteScale() * globalScene.field.scale; + const tileY = ((this.player ? 148 : 84) + (stages.value >= 1 ? 160 : 0)) * pokemon.getSpriteScale() * globalScene.field.scale; + const tileWidth = 156 * globalScene.field.scale * pokemon.getSpriteScale(); + const tileHeight = 316 * globalScene.field.scale * pokemon.getSpriteScale(); // On increase, show the red sprite located at ATK // On decrease, show the blue sprite located at SPD const spriteColor = stages.value >= 1 ? Stat[Stat.ATK].toLowerCase() : Stat[Stat.SPD].toLowerCase(); - const statSprite = this.scene.add.tileSprite(tileX, tileY, tileWidth, tileHeight, "battle_stats", spriteColor); - statSprite.setPipeline(this.scene.fieldSpritePipeline); + const statSprite = globalScene.add.tileSprite(tileX, tileY, tileWidth, tileHeight, "battle_stats", spriteColor); + statSprite.setPipeline(globalScene.fieldSpritePipeline); statSprite.setAlpha(0); statSprite.setScale(6); statSprite.setOrigin(0.5, 1); - this.scene.playSound(`se/stat_${stages.value >= 1 ? "up" : "down"}`); + globalScene.playSound(`se/stat_${stages.value >= 1 ? "up" : "down"}`); - statSprite.setMask(new Phaser.Display.Masks.BitmapMask(this.scene, pokemonMaskSprite ?? undefined)); + statSprite.setMask(new Phaser.Display.Masks.BitmapMask(globalScene, pokemonMaskSprite ?? undefined)); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: statSprite, duration: 250, alpha: 0.8375, onComplete: () => { - this.scene.tweens.add({ + globalScene.tweens.add({ targets: statSprite, delay: 1000, duration: 250, @@ -171,13 +215,13 @@ export class StatStageChangePhase extends PokemonPhase { } }); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: statSprite, duration: 1500, y: `${stages.value >= 1 ? "-" : "+"}=${160 * 6}` }); - this.scene.time.delayedCall(1750, () => { + globalScene.time.delayedCall(1750, () => { pokemon.disableMask(); end(); }); @@ -191,27 +235,27 @@ export class StatStageChangePhase extends PokemonPhase { const isAccEva = accEva.some(s => this.stats.includes(s)); let existingPhase: StatStageChangePhase; if (this.stats.length === 1) { - while ((existingPhase = (this.scene.findPhase(p => p instanceof StatStageChangePhase && p.battlerIndex === this.battlerIndex && p.stats.length === 1 + while ((existingPhase = (globalScene.findPhase(p => p instanceof StatStageChangePhase && p.battlerIndex === this.battlerIndex && p.stats.length === 1 && (p.stats[0] === this.stats[0]) && p.selfTarget === this.selfTarget && p.showMessage === this.showMessage && p.ignoreAbilities === this.ignoreAbilities) as StatStageChangePhase))) { this.stages += existingPhase.stages; - if (!this.scene.tryRemovePhase(p => p === existingPhase)) { + if (!globalScene.tryRemovePhase(p => p === existingPhase)) { break; } } } - while ((existingPhase = (this.scene.findPhase(p => p instanceof StatStageChangePhase && p.battlerIndex === this.battlerIndex && p.selfTarget === this.selfTarget + while ((existingPhase = (globalScene.findPhase(p => p instanceof StatStageChangePhase && p.battlerIndex === this.battlerIndex && p.selfTarget === this.selfTarget && (accEva.some(s => p.stats.includes(s)) === isAccEva) && p.stages === this.stages && p.showMessage === this.showMessage && p.ignoreAbilities === this.ignoreAbilities) as StatStageChangePhase))) { this.stats.push(...existingPhase.stats); - if (!this.scene.tryRemovePhase(p => p === existingPhase)) { + if (!globalScene.tryRemovePhase(p => p === existingPhase)) { break; } } } - getStatStageChangeMessages(stats: BattleStat[], stages: integer, relStages: integer[]): string[] { + getStatStageChangeMessages(stats: BattleStat[], stages: number, relStages: number[]): string[] { const messages: string[] = []; const relStageStatIndexes = {}; diff --git a/src/phases/summon-missing-phase.ts b/src/phases/summon-missing-phase.ts index 83ac8779dd8..459a0399964 100644 --- a/src/phases/summon-missing-phase.ts +++ b/src/phases/summon-missing-phase.ts @@ -1,15 +1,15 @@ -import BattleScene from "#app/battle-scene"; import { getPokemonNameWithAffix } from "#app/messages"; import i18next from "i18next"; import { SummonPhase } from "./summon-phase"; +import { globalScene } from "#app/global-scene"; export class SummonMissingPhase extends SummonPhase { - constructor(scene: BattleScene, fieldIndex: integer) { - super(scene, fieldIndex); + constructor(fieldIndex: number) { + super(fieldIndex); } preSummon(): void { - this.scene.ui.showText(i18next.t("battle:sendOutPokemon", { pokemonName: getPokemonNameWithAffix(this.getPokemon()) })); - this.scene.time.delayedCall(250, () => this.summon()); + globalScene.ui.showText(i18next.t("battle:sendOutPokemon", { pokemonName: getPokemonNameWithAffix(this.getPokemon()) })); + globalScene.time.delayedCall(250, () => this.summon()); } } diff --git a/src/phases/summon-phase.ts b/src/phases/summon-phase.ts index 177e09c4527..09eded9e52f 100644 --- a/src/phases/summon-phase.ts +++ b/src/phases/summon-phase.ts @@ -1,11 +1,11 @@ -import BattleScene from "#app/battle-scene"; import { BattleType } from "#app/battle"; import { getPokeballAtlasKey, getPokeballTintColor } from "#app/data/pokeball"; import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms"; import { TrainerSlot } from "#app/data/trainer-config"; import { PlayerGender } from "#app/enums/player-gender"; import { addPokeballOpenParticles } from "#app/field/anims"; -import Pokemon, { FieldPosition } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; +import { FieldPosition } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import i18next from "i18next"; import { PartyMemberPokemonPhase } from "./party-member-pokemon-phase"; @@ -13,12 +13,13 @@ import { PostSummonPhase } from "./post-summon-phase"; import { GameOverPhase } from "./game-over-phase"; import { ShinySparklePhase } from "./shiny-sparkle-phase"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; +import { globalScene } from "#app/global-scene"; export class SummonPhase extends PartyMemberPokemonPhase { private loaded: boolean; - constructor(scene: BattleScene, fieldIndex: integer, player: boolean = true, loaded: boolean = false) { - super(scene, fieldIndex, player); + constructor(fieldIndex: number, player: boolean = true, loaded: boolean = false) { + super(fieldIndex, player); this.loaded = loaded; } @@ -50,8 +51,8 @@ export class SummonPhase extends PartyMemberPokemonPhase { if (legalIndex === -1) { console.error("Party Details:\n", party); console.error("All available Pokemon were fainted or illegal!"); - this.scene.clearPhaseQueue(); - this.scene.unshiftPhase(new GameOverPhase(this.scene)); + globalScene.clearPhaseQueue(); + globalScene.unshiftPhase(new GameOverPhase()); this.end(); return; } @@ -62,33 +63,33 @@ export class SummonPhase extends PartyMemberPokemonPhase { } if (this.player) { - this.scene.ui.showText(i18next.t("battle:playerGo", { pokemonName: getPokemonNameWithAffix(this.getPokemon()) })); + globalScene.ui.showText(i18next.t("battle:playerGo", { pokemonName: getPokemonNameWithAffix(this.getPokemon()) })); if (this.player) { - this.scene.pbTray.hide(); + globalScene.pbTray.hide(); } - this.scene.trainer.setTexture(`trainer_${this.scene.gameData.gender === PlayerGender.FEMALE ? "f" : "m"}_back_pb`); - this.scene.time.delayedCall(562, () => { - this.scene.trainer.setFrame("2"); - this.scene.time.delayedCall(64, () => { - this.scene.trainer.setFrame("3"); + globalScene.trainer.setTexture(`trainer_${globalScene.gameData.gender === PlayerGender.FEMALE ? "f" : "m"}_back_pb`); + globalScene.time.delayedCall(562, () => { + globalScene.trainer.setFrame("2"); + globalScene.time.delayedCall(64, () => { + globalScene.trainer.setFrame("3"); }); }); - this.scene.tweens.add({ - targets: this.scene.trainer, + globalScene.tweens.add({ + targets: globalScene.trainer, x: -36, duration: 1000, - onComplete: () => this.scene.trainer.setVisible(false) + onComplete: () => globalScene.trainer.setVisible(false) }); - this.scene.time.delayedCall(750, () => this.summon()); - } else if (this.scene.currentBattle.battleType === BattleType.TRAINER || this.scene.currentBattle.mysteryEncounter?.encounterMode === MysteryEncounterMode.TRAINER_BATTLE) { - const trainerName = this.scene.currentBattle.trainer?.getName(!(this.fieldIndex % 2) ? TrainerSlot.TRAINER : TrainerSlot.TRAINER_PARTNER); + globalScene.time.delayedCall(750, () => this.summon()); + } else if (globalScene.currentBattle.battleType === BattleType.TRAINER || globalScene.currentBattle.mysteryEncounter?.encounterMode === MysteryEncounterMode.TRAINER_BATTLE) { + const trainerName = globalScene.currentBattle.trainer?.getName(!(this.fieldIndex % 2) ? TrainerSlot.TRAINER : TrainerSlot.TRAINER_PARTNER); const pokemonName = this.getPokemon().getNameToRender(); const message = i18next.t("battle:trainerSendOut", { trainerName, pokemonName }); - this.scene.pbTrayEnemy.hide(); - this.scene.ui.showText(message, null, () => this.summon()); - } else if (this.scene.currentBattle.isBattleMysteryEncounter()) { - this.scene.pbTrayEnemy.hide(); + globalScene.pbTrayEnemy.hide(); + globalScene.ui.showText(message, null, () => this.summon()); + } else if (globalScene.currentBattle.isBattleMysteryEncounter()) { + globalScene.pbTrayEnemy.hide(); this.summonWild(); } } @@ -99,55 +100,55 @@ export class SummonPhase extends PartyMemberPokemonPhase { summon(): void { const pokemon = this.getPokemon(); - const pokeball = this.scene.addFieldSprite(this.player ? 36 : 248, this.player ? 80 : 44, "pb", getPokeballAtlasKey(pokemon.pokeball)); + const pokeball = globalScene.addFieldSprite(this.player ? 36 : 248, this.player ? 80 : 44, "pb", getPokeballAtlasKey(pokemon.pokeball)); pokeball.setVisible(false); pokeball.setOrigin(0.5, 0.625); - this.scene.field.add(pokeball); + globalScene.field.add(pokeball); if (this.fieldIndex === 1) { pokemon.setFieldPosition(FieldPosition.RIGHT, 0); } else { const availablePartyMembers = this.getParty().filter(p => p.isAllowedInBattle()).length; - pokemon.setFieldPosition(!this.scene.currentBattle.double || availablePartyMembers === 1 ? FieldPosition.CENTER : FieldPosition.LEFT); + pokemon.setFieldPosition(!globalScene.currentBattle.double || availablePartyMembers === 1 ? FieldPosition.CENTER : FieldPosition.LEFT); } const fpOffset = pokemon.getFieldPositionOffset(); pokeball.setVisible(true); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: pokeball, duration: 650, x: (this.player ? 100 : 236) + fpOffset[0] }); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: pokeball, duration: 150, ease: "Cubic.easeOut", y: (this.player ? 70 : 34) + fpOffset[1], onComplete: () => { - this.scene.tweens.add({ + globalScene.tweens.add({ targets: pokeball, duration: 500, ease: "Cubic.easeIn", angle: 1440, y: (this.player ? 132 : 86) + fpOffset[1], onComplete: () => { - this.scene.playSound("se/pb_rel"); + globalScene.playSound("se/pb_rel"); pokeball.destroy(); - this.scene.add.existing(pokemon); - this.scene.field.add(pokemon); + globalScene.add.existing(pokemon); + globalScene.field.add(pokemon); if (!this.player) { - const playerPokemon = this.scene.getPlayerPokemon() as Pokemon; + const playerPokemon = globalScene.getPlayerPokemon() as Pokemon; if (playerPokemon?.isOnField()) { - this.scene.field.moveBelow(pokemon, playerPokemon); + globalScene.field.moveBelow(pokemon, playerPokemon); } - this.scene.currentBattle.seenEnemyPartyMemberIds.add(pokemon.id); + globalScene.currentBattle.seenEnemyPartyMemberIds.add(pokemon.id); } - addPokeballOpenParticles(this.scene, pokemon.x, pokemon.y - 16, pokemon.pokeball); - this.scene.updateModifiers(this.player); - this.scene.updateFieldScale(); + addPokeballOpenParticles(pokemon.x, pokemon.y - 16, pokemon.pokeball); + globalScene.updateModifiers(this.player); + globalScene.updateFieldScale(); pokemon.showInfo(); pokemon.playAnim(); pokemon.setVisible(true); @@ -155,8 +156,8 @@ export class SummonPhase extends PartyMemberPokemonPhase { pokemon.setScale(0.5); pokemon.tint(getPokeballTintColor(pokemon.pokeball)); pokemon.untint(250, "Sine.easeIn"); - this.scene.updateFieldScale(); - this.scene.tweens.add({ + globalScene.updateFieldScale(); + globalScene.tweens.add({ targets: pokemon, duration: 250, ease: "Sine.easeIn", @@ -165,7 +166,7 @@ export class SummonPhase extends PartyMemberPokemonPhase { pokemon.cry(pokemon.getHpRatio() > 0.25 ? undefined : { rate: 0.85 }); pokemon.getSprite().clearTint(); pokemon.resetSummonData(); - this.scene.time.delayedCall(1000, () => this.end()); + globalScene.time.delayedCall(1000, () => this.end()); } }); } @@ -186,20 +187,20 @@ export class SummonPhase extends PartyMemberPokemonPhase { pokemon.setFieldPosition(FieldPosition.RIGHT, 0); } else { const availablePartyMembers = this.getParty().filter(p => !p.isFainted()).length; - pokemon.setFieldPosition(!this.scene.currentBattle.double || availablePartyMembers === 1 ? FieldPosition.CENTER : FieldPosition.LEFT); + pokemon.setFieldPosition(!globalScene.currentBattle.double || availablePartyMembers === 1 ? FieldPosition.CENTER : FieldPosition.LEFT); } - this.scene.add.existing(pokemon); - this.scene.field.add(pokemon); + globalScene.add.existing(pokemon); + globalScene.field.add(pokemon); if (!this.player) { - const playerPokemon = this.scene.getPlayerPokemon() as Pokemon; + const playerPokemon = globalScene.getPlayerPokemon() as Pokemon; if (playerPokemon?.isOnField()) { - this.scene.field.moveBelow(pokemon, playerPokemon); + globalScene.field.moveBelow(pokemon, playerPokemon); } - this.scene.currentBattle.seenEnemyPartyMemberIds.add(pokemon.id); + globalScene.currentBattle.seenEnemyPartyMemberIds.add(pokemon.id); } - this.scene.updateModifiers(this.player); - this.scene.updateFieldScale(); + globalScene.updateModifiers(this.player); + globalScene.updateFieldScale(); pokemon.showInfo(); pokemon.playAnim(); pokemon.setVisible(true); @@ -207,13 +208,13 @@ export class SummonPhase extends PartyMemberPokemonPhase { pokemon.setScale(0.75); pokemon.tint(getPokeballTintColor(pokemon.pokeball)); pokemon.untint(250, "Sine.easeIn"); - this.scene.updateFieldScale(); + globalScene.updateFieldScale(); pokemon.x += 16; pokemon.y -= 20; pokemon.alpha = 0; // Ease pokemon in - this.scene.tweens.add({ + globalScene.tweens.add({ targets: pokemon, x: "-=16", y: "+=16", @@ -225,8 +226,8 @@ export class SummonPhase extends PartyMemberPokemonPhase { pokemon.cry(pokemon.getHpRatio() > 0.25 ? undefined : { rate: 0.85 }); pokemon.getSprite().clearTint(); pokemon.resetSummonData(); - this.scene.updateFieldScale(); - this.scene.time.delayedCall(1000, () => this.end()); + globalScene.updateFieldScale(); + globalScene.time.delayedCall(1000, () => this.end()); } }); } @@ -235,19 +236,19 @@ export class SummonPhase extends PartyMemberPokemonPhase { const pokemon = this.getPokemon(); if (pokemon.isShiny()) { - this.scene.unshiftPhase(new ShinySparklePhase(this.scene, pokemon.getBattlerIndex())); + globalScene.unshiftPhase(new ShinySparklePhase(pokemon.getBattlerIndex())); } pokemon.resetTurnData(); - if (!this.loaded || [ BattleType.TRAINER, BattleType.MYSTERY_ENCOUNTER ].includes(this.scene.currentBattle.battleType) || (this.scene.currentBattle.waveIndex % 10) === 1) { - this.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeActiveTrigger, true); + if (!this.loaded || [ BattleType.TRAINER, BattleType.MYSTERY_ENCOUNTER ].includes(globalScene.currentBattle.battleType) || (globalScene.currentBattle.waveIndex % 10) === 1) { + globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeActiveTrigger, true); this.queuePostSummon(); } } queuePostSummon(): void { - this.scene.pushPhase(new PostSummonPhase(this.scene, this.getPokemon().getBattlerIndex())); + globalScene.pushPhase(new PostSummonPhase(this.getPokemon().getBattlerIndex())); } end() { diff --git a/src/phases/switch-biome-phase.ts b/src/phases/switch-biome-phase.ts index 80a31794209..88addb4ef47 100644 --- a/src/phases/switch-biome-phase.ts +++ b/src/phases/switch-biome-phase.ts @@ -1,13 +1,13 @@ -import BattleScene from "#app/battle-scene"; -import { Biome } from "#app/enums/biome"; +import { globalScene } from "#app/global-scene"; +import type { Biome } from "#app/enums/biome"; import { getBiomeKey } from "#app/field/arena"; import { BattlePhase } from "./battle-phase"; export class SwitchBiomePhase extends BattlePhase { private nextBiome: Biome; - constructor(scene: BattleScene, nextBiome: Biome) { - super(scene); + constructor(nextBiome: Biome) { + super(); this.nextBiome = nextBiome; } @@ -19,41 +19,41 @@ export class SwitchBiomePhase extends BattlePhase { return this.end(); } - this.scene.tweens.add({ - targets: [ this.scene.arenaEnemy, this.scene.lastEnemyTrainer ], + globalScene.tweens.add({ + targets: [ globalScene.arenaEnemy, globalScene.lastEnemyTrainer ], x: "+=300", duration: 2000, onComplete: () => { - this.scene.arenaEnemy.setX(this.scene.arenaEnemy.x - 600); + globalScene.arenaEnemy.setX(globalScene.arenaEnemy.x - 600); - this.scene.newArena(this.nextBiome); + globalScene.newArena(this.nextBiome); const biomeKey = getBiomeKey(this.nextBiome); const bgTexture = `${biomeKey}_bg`; - this.scene.arenaBgTransition.setTexture(bgTexture); - this.scene.arenaBgTransition.setAlpha(0); - this.scene.arenaBgTransition.setVisible(true); - this.scene.arenaPlayerTransition.setBiome(this.nextBiome); - this.scene.arenaPlayerTransition.setAlpha(0); - this.scene.arenaPlayerTransition.setVisible(true); + globalScene.arenaBgTransition.setTexture(bgTexture); + globalScene.arenaBgTransition.setAlpha(0); + globalScene.arenaBgTransition.setVisible(true); + globalScene.arenaPlayerTransition.setBiome(this.nextBiome); + globalScene.arenaPlayerTransition.setAlpha(0); + globalScene.arenaPlayerTransition.setVisible(true); - this.scene.tweens.add({ - targets: [ this.scene.arenaPlayer, this.scene.arenaBgTransition, this.scene.arenaPlayerTransition ], + globalScene.tweens.add({ + targets: [ globalScene.arenaPlayer, globalScene.arenaBgTransition, globalScene.arenaPlayerTransition ], duration: 1000, delay: 1000, ease: "Sine.easeInOut", - alpha: (target: any) => target === this.scene.arenaPlayer ? 0 : 1, + alpha: (target: any) => target === globalScene.arenaPlayer ? 0 : 1, onComplete: () => { - this.scene.arenaBg.setTexture(bgTexture); - this.scene.arenaPlayer.setBiome(this.nextBiome); - this.scene.arenaPlayer.setAlpha(1); - this.scene.arenaEnemy.setBiome(this.nextBiome); - this.scene.arenaEnemy.setAlpha(1); - this.scene.arenaNextEnemy.setBiome(this.nextBiome); - this.scene.arenaBgTransition.setVisible(false); - this.scene.arenaPlayerTransition.setVisible(false); - if (this.scene.lastEnemyTrainer) { - this.scene.lastEnemyTrainer.destroy(); + globalScene.arenaBg.setTexture(bgTexture); + globalScene.arenaPlayer.setBiome(this.nextBiome); + globalScene.arenaPlayer.setAlpha(1); + globalScene.arenaEnemy.setBiome(this.nextBiome); + globalScene.arenaEnemy.setAlpha(1); + globalScene.arenaNextEnemy.setBiome(this.nextBiome); + globalScene.arenaBgTransition.setVisible(false); + globalScene.arenaPlayerTransition.setVisible(false); + if (globalScene.lastEnemyTrainer) { + globalScene.lastEnemyTrainer.destroy(); } this.end(); diff --git a/src/phases/switch-phase.ts b/src/phases/switch-phase.ts index 481d64c451e..34b70aeaf63 100644 --- a/src/phases/switch-phase.ts +++ b/src/phases/switch-phase.ts @@ -1,4 +1,4 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import PartyUiHandler, { PartyOption, PartyUiMode } from "#app/ui/party-ui-handler"; import { Mode } from "#app/ui/ui"; import { SwitchType } from "#enums/switch-type"; @@ -11,14 +11,13 @@ import { SwitchSummonPhase } from "./switch-summon-phase"; * for the player (if a switch would be valid for the current battle state). */ export class SwitchPhase extends BattlePhase { - protected readonly fieldIndex: integer; + protected readonly fieldIndex: number; private readonly switchType: SwitchType; private readonly isModal: boolean; private readonly doReturn: boolean; /** * Creates a new SwitchPhase - * @param scene {@linkcode BattleScene} Current battle scene * @param switchType {@linkcode SwitchType} The type of switch logic this phase implements * @param fieldIndex Field index to switch out * @param isModal Indicates if the switch should be forced (true) or is @@ -26,8 +25,8 @@ export class SwitchPhase extends BattlePhase { * @param doReturn Indicates if the party member on the field should be * recalled to ball or has already left the field. Passed to {@linkcode SwitchSummonPhase}. */ - constructor(scene: BattleScene, switchType: SwitchType, fieldIndex: integer, isModal: boolean, doReturn: boolean) { - super(scene); + constructor(switchType: SwitchType, fieldIndex: number, isModal: boolean, doReturn: boolean) { + super(); this.switchType = switchType; this.fieldIndex = fieldIndex; @@ -39,7 +38,7 @@ export class SwitchPhase extends BattlePhase { super.start(); // Skip modal switch if impossible (no remaining party members that aren't in battle) - if (this.isModal && !this.scene.getPlayerParty().filter(p => p.isAllowedInBattle() && !p.isActive(true)).length) { + if (this.isModal && !globalScene.getPlayerParty().filter(p => p.isAllowedInBattle() && !p.isActive(true)).length) { return super.end(); } @@ -50,27 +49,27 @@ export class SwitchPhase extends BattlePhase { * if the mon should have already been returned but is still alive and well * on the field. see also; battle.test.ts */ - if (this.isModal && !this.doReturn && !this.scene.getPlayerParty()[this.fieldIndex].isFainted()) { + if (this.isModal && !this.doReturn && !globalScene.getPlayerParty()[this.fieldIndex].isFainted()) { return super.end(); } // Check if there is any space still in field - if (this.isModal && this.scene.getPlayerField().filter(p => p.isAllowedInBattle() && p.isActive(true)).length >= this.scene.currentBattle.getBattlerCount()) { + if (this.isModal && globalScene.getPlayerField().filter(p => p.isAllowedInBattle() && p.isActive(true)).length >= globalScene.currentBattle.getBattlerCount()) { return super.end(); } // Override field index to 0 in case of double battle where 2/3 remaining legal party members fainted at once - const fieldIndex = this.scene.currentBattle.getBattlerCount() === 1 || this.scene.getPokemonAllowedInBattle().length > 1 ? this.fieldIndex : 0; + const fieldIndex = globalScene.currentBattle.getBattlerCount() === 1 || globalScene.getPokemonAllowedInBattle().length > 1 ? this.fieldIndex : 0; - this.scene.ui.setMode(Mode.PARTY, this.isModal ? PartyUiMode.FAINT_SWITCH : PartyUiMode.POST_BATTLE_SWITCH, fieldIndex, (slotIndex: integer, option: PartyOption) => { - if (slotIndex >= this.scene.currentBattle.getBattlerCount() && slotIndex < 6) { + globalScene.ui.setMode(Mode.PARTY, this.isModal ? PartyUiMode.FAINT_SWITCH : PartyUiMode.POST_BATTLE_SWITCH, fieldIndex, (slotIndex: number, option: PartyOption) => { + if (slotIndex >= globalScene.currentBattle.getBattlerCount() && slotIndex < 6) { // Remove any pre-existing PostSummonPhase under the same field index. // Pre-existing PostSummonPhases may occur when this phase is invoked during a prompt to switch at the start of a wave. - this.scene.tryRemovePhase(p => p instanceof PostSummonPhase && p.player && p.fieldIndex === this.fieldIndex); + globalScene.tryRemovePhase(p => p instanceof PostSummonPhase && p.player && p.fieldIndex === this.fieldIndex); const switchType = (option === PartyOption.PASS_BATON) ? SwitchType.BATON_PASS : this.switchType; - this.scene.unshiftPhase(new SwitchSummonPhase(this.scene, switchType, fieldIndex, slotIndex, this.doReturn)); + globalScene.unshiftPhase(new SwitchSummonPhase(switchType, fieldIndex, slotIndex, this.doReturn)); } - this.scene.ui.setMode(Mode.MESSAGE).then(() => super.end()); + globalScene.ui.setMode(Mode.MESSAGE).then(() => super.end()); }, PartyUiHandler.FilterNonFainted); } } diff --git a/src/phases/switch-summon-phase.ts b/src/phases/switch-summon-phase.ts index a1925768d83..dad0f6f11ad 100644 --- a/src/phases/switch-summon-phase.ts +++ b/src/phases/switch-summon-phase.ts @@ -1,10 +1,10 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { applyPreSwitchOutAbAttrs, PostDamageForceSwitchAbAttr, PreSwitchOutAbAttr } from "#app/data/ability"; import { allMoves, ForceSwitchOutAttr } from "#app/data/move"; import { getPokeballTintColor } from "#app/data/pokeball"; import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms"; import { TrainerSlot } from "#app/data/trainer-config"; -import Pokemon from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { SwitchEffectTransferModifier } from "#app/modifier/modifier"; import { Command } from "#app/ui/command-ui-handler"; @@ -16,22 +16,21 @@ import { SwitchType } from "#enums/switch-type"; export class SwitchSummonPhase extends SummonPhase { private readonly switchType: SwitchType; - private readonly slotIndex: integer; + private readonly slotIndex: number; private readonly doReturn: boolean; private lastPokemon: Pokemon; /** * Constructor for creating a new SwitchSummonPhase - * @param scene {@linkcode BattleScene} the scene the phase is associated with * @param switchType the type of switch behavior * @param fieldIndex integer representing position on the battle field * @param slotIndex integer for the index of pokemon (in party of 6) to switch into * @param doReturn boolean whether to render "comeback" dialogue * @param player boolean if the switch is from the player */ - constructor(scene: BattleScene, switchType: SwitchType, fieldIndex: integer, slotIndex: integer, doReturn: boolean, player?: boolean) { - super(scene, fieldIndex, player !== undefined ? player : true); + constructor(switchType: SwitchType, fieldIndex: number, slotIndex: number, doReturn: boolean, player?: boolean) { + super(fieldIndex, player !== undefined ? player : true); this.switchType = switchType; this.slotIndex = slotIndex; @@ -46,29 +45,30 @@ export class SwitchSummonPhase extends SummonPhase { if (!this.player) { if (this.slotIndex === -1) { //@ts-ignore - this.slotIndex = this.scene.currentBattle.trainer?.getNextSummonIndex(!this.fieldIndex ? TrainerSlot.TRAINER : TrainerSlot.TRAINER_PARTNER); // TODO: what would be the default trainer-slot fallback? + this.slotIndex = globalScene.currentBattle.trainer?.getNextSummonIndex(!this.fieldIndex ? TrainerSlot.TRAINER : TrainerSlot.TRAINER_PARTNER); // TODO: what would be the default trainer-slot fallback? } if (this.slotIndex > -1) { this.showEnemyTrainer(!(this.fieldIndex % 2) ? TrainerSlot.TRAINER : TrainerSlot.TRAINER_PARTNER); - this.scene.pbTrayEnemy.showPbTray(this.scene.getEnemyParty()); + globalScene.pbTrayEnemy.showPbTray(globalScene.getEnemyParty()); } } - if (!this.doReturn || (this.slotIndex !== -1 && !(this.player ? this.scene.getPlayerParty() : this.scene.getEnemyParty())[this.slotIndex])) { + if (!this.doReturn || (this.slotIndex !== -1 && !(this.player ? globalScene.getPlayerParty() : globalScene.getEnemyParty())[this.slotIndex])) { if (this.player) { return this.switchAndSummon(); } else { - this.scene.time.delayedCall(750, () => this.switchAndSummon()); + globalScene.time.delayedCall(750, () => this.switchAndSummon()); return; } } const pokemon = this.getPokemon(); - (this.player ? this.scene.getEnemyField() : this.scene.getPlayerField()).forEach(enemyPokemon => enemyPokemon.removeTagsBySourceId(pokemon.id)); + (this.player ? globalScene.getEnemyField() : globalScene.getPlayerField()).forEach(enemyPokemon => enemyPokemon.removeTagsBySourceId(pokemon.id)); + if (this.switchType === SwitchType.SWITCH || this.switchType === SwitchType.INITIAL_SWITCH) { const substitute = pokemon.getTag(SubstituteTag); if (substitute) { - this.scene.tweens.add({ + globalScene.tweens.add({ targets: substitute.sprite, duration: 250, scale: substitute.sprite.scale * 0.5, @@ -78,40 +78,40 @@ export class SwitchSummonPhase extends SummonPhase { } } - this.scene.ui.showText(this.player ? + globalScene.ui.showText(this.player ? i18next.t("battle:playerComeBack", { pokemonName: getPokemonNameWithAffix(pokemon) }) : i18next.t("battle:trainerComeBack", { - trainerName: this.scene.currentBattle.trainer?.getName(!(this.fieldIndex % 2) ? TrainerSlot.TRAINER : TrainerSlot.TRAINER_PARTNER), + trainerName: globalScene.currentBattle.trainer?.getName(!(this.fieldIndex % 2) ? TrainerSlot.TRAINER : TrainerSlot.TRAINER_PARTNER), pokemonName: pokemon.getNameToRender() }) ); - this.scene.playSound("se/pb_rel"); + globalScene.playSound("se/pb_rel"); pokemon.hideInfo(); pokemon.tint(getPokeballTintColor(pokemon.pokeball), 1, 250, "Sine.easeIn"); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: pokemon, duration: 250, ease: "Sine.easeIn", scale: 0.5, onComplete: () => { + globalScene.time.delayedCall(750, () => this.switchAndSummon()); pokemon.leaveField(this.switchType === SwitchType.SWITCH, false); - this.scene.time.delayedCall(750, () => this.switchAndSummon()); } }); } switchAndSummon() { - const party = this.player ? this.getParty() : this.scene.getEnemyParty(); + const party = this.player ? this.getParty() : globalScene.getEnemyParty(); const switchedInPokemon = party[this.slotIndex]; this.lastPokemon = this.getPokemon(); applyPreSwitchOutAbAttrs(PreSwitchOutAbAttr, this.lastPokemon); if (this.switchType === SwitchType.BATON_PASS && switchedInPokemon) { - (this.player ? this.scene.getEnemyField() : this.scene.getPlayerField()).forEach(enemyPokemon => enemyPokemon.transferTagsBySourceId(this.lastPokemon.id, switchedInPokemon.id)); - if (!this.scene.findModifier(m => m instanceof SwitchEffectTransferModifier && (m as SwitchEffectTransferModifier).pokemonId === switchedInPokemon.id)) { - const batonPassModifier = this.scene.findModifier(m => m instanceof SwitchEffectTransferModifier + (this.player ? globalScene.getEnemyField() : globalScene.getPlayerField()).forEach(enemyPokemon => enemyPokemon.transferTagsBySourceId(this.lastPokemon.id, switchedInPokemon.id)); + if (!globalScene.findModifier(m => m instanceof SwitchEffectTransferModifier && (m as SwitchEffectTransferModifier).pokemonId === switchedInPokemon.id)) { + const batonPassModifier = globalScene.findModifier(m => m instanceof SwitchEffectTransferModifier && (m as SwitchEffectTransferModifier).pokemonId === this.lastPokemon.id) as SwitchEffectTransferModifier; - if (batonPassModifier && !this.scene.findModifier(m => m instanceof SwitchEffectTransferModifier && (m as SwitchEffectTransferModifier).pokemonId === switchedInPokemon.id)) { - this.scene.tryTransferHeldItemModifier(batonPassModifier, switchedInPokemon, false, undefined, undefined, undefined, false); + if (batonPassModifier && !globalScene.findModifier(m => m instanceof SwitchEffectTransferModifier && (m as SwitchEffectTransferModifier).pokemonId === switchedInPokemon.id)) { + globalScene.tryTransferHeldItemModifier(batonPassModifier, switchedInPokemon, false, undefined, undefined, undefined, false); } } } @@ -119,10 +119,10 @@ export class SwitchSummonPhase extends SummonPhase { party[this.slotIndex] = this.lastPokemon; party[this.fieldIndex] = switchedInPokemon; const showTextAndSummon = () => { - this.scene.ui.showText(this.player ? + globalScene.ui.showText(this.player ? i18next.t("battle:playerGo", { pokemonName: getPokemonNameWithAffix(switchedInPokemon) }) : i18next.t("battle:trainerGo", { - trainerName: this.scene.currentBattle.trainer?.getName(!(this.fieldIndex % 2) ? TrainerSlot.TRAINER : TrainerSlot.TRAINER_PARTNER), + trainerName: globalScene.currentBattle.trainer?.getName(!(this.fieldIndex % 2) ? TrainerSlot.TRAINER : TrainerSlot.TRAINER_PARTNER), pokemonName: this.getPokemon().getNameToRender() }) ); @@ -145,9 +145,9 @@ export class SwitchSummonPhase extends SummonPhase { if (this.player) { showTextAndSummon(); } else { - this.scene.time.delayedCall(1500, () => { + globalScene.time.delayedCall(1500, () => { this.hideEnemyTrainer(); - this.scene.pbTrayEnemy.hide(); + globalScene.pbTrayEnemy.hide(); showTextAndSummon(); }); } @@ -161,10 +161,10 @@ export class SwitchSummonPhase extends SummonPhase { const pokemon = this.getPokemon(); - const moveId = this.lastPokemon?.scene.currentBattle.lastMove; + const moveId = globalScene.currentBattle.lastMove; const lastUsedMove = moveId ? allMoves[moveId] : undefined; - const currentCommand = pokemon.scene.currentBattle.turnCommands[this.fieldIndex]?.command; + const currentCommand = globalScene.currentBattle.turnCommands[this.fieldIndex]?.command; const lastPokemonIsForceSwitchedAndNotFainted = lastUsedMove?.hasAttr(ForceSwitchOutAttr) && !this.lastPokemon.isFainted(); const lastPokemonHasForceSwitchAbAttr = this.lastPokemon.hasAbilityWithAttr(PostDamageForceSwitchAbAttr) && !this.lastPokemon.isFainted(); @@ -191,12 +191,12 @@ export class SwitchSummonPhase extends SummonPhase { this.lastPokemon?.resetSummonData(); - this.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeActiveTrigger, true); + globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeActiveTrigger, true); // Reverts to weather-based forms when weather suppressors (Cloud Nine/Air Lock) are switched out - this.scene.arena.triggerWeatherBasedFormChanges(); + globalScene.arena.triggerWeatherBasedFormChanges(); } queuePostSummon(): void { - this.scene.unshiftPhase(new PostSummonPhase(this.scene, this.getPokemon().getBattlerIndex())); + globalScene.unshiftPhase(new PostSummonPhase(this.getPokemon().getBattlerIndex())); } } diff --git a/src/phases/tera-phase.ts b/src/phases/tera-phase.ts new file mode 100644 index 00000000000..462a4e1882e --- /dev/null +++ b/src/phases/tera-phase.ts @@ -0,0 +1,49 @@ +import type Pokemon from "#app/field/pokemon"; +import { getPokemonNameWithAffix } from "#app/messages"; +import { BattlePhase } from "./battle-phase"; +import i18next from "i18next"; +import { globalScene } from "#app/global-scene"; +import { Type } from "#app/enums/type"; +import { achvs } from "#app/system/achv"; +import { SpeciesFormChangeTeraTrigger } from "#app/data/pokemon-forms"; +import { CommonAnim, CommonBattleAnim } from "#app/data/battle-anims"; + +export class TeraPhase extends BattlePhase { + public pokemon: Pokemon; + + constructor(pokemon: Pokemon) { + super(); + + this.pokemon = pokemon; + } + + start() { + super.start(); + + globalScene.queueMessage(i18next.t("battle:pokemonTerastallized", { pokemonNameWithAffix: getPokemonNameWithAffix(this.pokemon), type: i18next.t(`pokemonInfo:Type.${Type[this.pokemon.getTeraType()]}`) })); + new CommonBattleAnim(CommonAnim.TERASTALLIZE, this.pokemon).play(false, () => { + this.end(); + }); + } + + + end() { + this.pokemon.isTerastallized = true; + this.pokemon.updateSpritePipelineData(); + + if (this.pokemon.isPlayer()) { + globalScene.arena.playerTerasUsed += 1; + } + + globalScene.triggerPokemonFormChange(this.pokemon, SpeciesFormChangeTeraTrigger); + + if (this.pokemon.isPlayer()) { + globalScene.validateAchv(achvs.TERASTALLIZE); + if (this.pokemon.getTeraType() === Type.STELLAR) { + globalScene.validateAchv(achvs.STELLAR_TERASTALLIZE); + } + } + + super.end(); + } +} diff --git a/src/phases/test-message-phase.ts b/src/phases/test-message-phase.ts index 464a5ed1f94..d5e74efd490 100644 --- a/src/phases/test-message-phase.ts +++ b/src/phases/test-message-phase.ts @@ -1,8 +1,7 @@ -import BattleScene from "#app/battle-scene"; import { MessagePhase } from "./message-phase"; export class TestMessagePhase extends MessagePhase { - constructor(scene: BattleScene, message: string) { - super(scene, message, null, true); + constructor(message: string) { + super(message, null, true); } } diff --git a/src/phases/title-phase.ts b/src/phases/title-phase.ts index 88793617776..a560897037e 100644 --- a/src/phases/title-phase.ts +++ b/src/phases/title-phase.ts @@ -1,17 +1,16 @@ import { loggedInUser } from "#app/account"; import { BattleType } from "#app/battle"; -import BattleScene from "#app/battle-scene"; import { fetchDailyRunSeed, getDailyRunStarters } from "#app/data/daily-run"; import { Gender } from "#app/data/gender"; import { getBiomeKey } from "#app/field/arena"; import { GameMode, GameModes, getGameMode } from "#app/game-mode"; -import { Modifier } from "#app/modifier/modifier"; +import type { Modifier } from "#app/modifier/modifier"; import { getDailyRunStarterModifiers, ModifierPoolType, modifierTypes, regenerateModifierPoolThresholds } from "#app/modifier/modifier-type"; import { Phase } from "#app/phase"; -import { SessionSaveData } from "#app/system/game-data"; +import type { SessionSaveData } from "#app/system/game-data"; import { Unlockables } from "#app/system/unlockables"; import { vouchers } from "#app/system/voucher"; -import { OptionSelectConfig, OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; +import type { OptionSelectConfig, OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import { SaveSlotUiMode } from "#app/ui/save-slot-select-ui-handler"; import { Mode } from "#app/ui/ui"; import * as Utils from "#app/utils"; @@ -21,6 +20,8 @@ import { EncounterPhase } from "./encounter-phase"; import { SelectChallengePhase } from "./select-challenge-phase"; import { SelectStarterPhase } from "./select-starter-phase"; import { SummonPhase } from "./summon-phase"; +import { globalScene } from "#app/global-scene"; +import Overrides from "#app/overrides"; export class TitlePhase extends Phase { @@ -28,8 +29,8 @@ export class TitlePhase extends Phase { private lastSessionData: SessionSaveData; public gameMode: GameModes; - constructor(scene: BattleScene) { - super(scene); + constructor() { + super(); this.loaded = false; } @@ -37,17 +38,17 @@ export class TitlePhase extends Phase { start(): void { super.start(); - this.scene.ui.clearText(); - this.scene.ui.fadeIn(250); + globalScene.ui.clearText(); + globalScene.ui.fadeIn(250); - this.scene.playBgm("title", true); + globalScene.playBgm("title", true); - this.scene.gameData.getSession(loggedInUser?.lastSessionSlot ?? -1).then(sessionData => { + globalScene.gameData.getSession(loggedInUser?.lastSessionSlot ?? -1).then(sessionData => { if (sessionData) { this.lastSessionData = sessionData; const biomeKey = getBiomeKey(sessionData.arena.biome); const bgTexture = `${biomeKey}_bg`; - this.scene.arenaBg.setTexture(bgTexture); + globalScene.arenaBg.setTexture(bgTexture); } this.showOptions(); }).catch(err => { @@ -72,35 +73,41 @@ export class TitlePhase extends Phase { handler: () => { const setModeAndEnd = (gameMode: GameModes) => { this.gameMode = gameMode; - this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.clearText(); + globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.clearText(); this.end(); }; - const { gameData } = this.scene; + const { gameData } = globalScene; + const options: OptionSelectItem[] = []; + options.push({ + label: GameMode.getModeName(GameModes.CLASSIC), + handler: () => { + setModeAndEnd(GameModes.CLASSIC); + return true; + } + }); + options.push({ + label: i18next.t("menu:dailyRun"), + handler: () => { + this.initDailyRun(); + return true; + } + }); if (gameData.isUnlocked(Unlockables.ENDLESS_MODE)) { - const options: OptionSelectItem[] = [ - { - label: GameMode.getModeName(GameModes.CLASSIC), - handler: () => { - setModeAndEnd(GameModes.CLASSIC); - return true; - } - }, - { - label: GameMode.getModeName(GameModes.CHALLENGE), - handler: () => { - setModeAndEnd(GameModes.CHALLENGE); - return true; - } - }, - { - label: GameMode.getModeName(GameModes.ENDLESS), - handler: () => { - setModeAndEnd(GameModes.ENDLESS); - return true; - } + options.push({ + label: GameMode.getModeName(GameModes.CHALLENGE), + handler: () => { + setModeAndEnd(GameModes.CHALLENGE); + return true; } - ]; + }); + options.push({ + label: GameMode.getModeName(GameModes.ENDLESS), + handler: () => { + setModeAndEnd(GameModes.ENDLESS); + return true; + } + }); if (gameData.isUnlocked(Unlockables.SPLICED_ENDLESS_MODE)) { options.push({ label: GameMode.getModeName(GameModes.SPLICED_ENDLESS), @@ -110,30 +117,25 @@ export class TitlePhase extends Phase { } }); } - options.push({ - label: i18next.t("menu:cancel"), - handler: () => { - this.scene.clearPhaseQueue(); - this.scene.pushPhase(new TitlePhase(this.scene)); - super.end(); - return true; - } - }); - this.scene.ui.showText(i18next.t("menu:selectGameMode"), null, () => this.scene.ui.setOverlayMode(Mode.OPTION_SELECT, { options: options })); - } else { - this.gameMode = GameModes.CLASSIC; - this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.clearText(); - this.end(); } + options.push({ + label: i18next.t("menu:cancel"), + handler: () => { + globalScene.clearPhaseQueue(); + globalScene.pushPhase(new TitlePhase()); + super.end(); + return true; + } + }); + globalScene.ui.showText(i18next.t("menu:selectGameMode"), null, () => globalScene.ui.setOverlayMode(Mode.OPTION_SELECT, { options: options })); return true; } }, { label: i18next.t("menu:loadGame"), handler: () => { - this.scene.ui.setOverlayMode(Mode.SAVE_SLOT, SaveSlotUiMode.LOAD, - (slotId: integer) => { + globalScene.ui.setOverlayMode(Mode.SAVE_SLOT, SaveSlotUiMode.LOAD, + (slotId: number) => { if (slotId === -1) { return this.showOptions(); } @@ -143,9 +145,9 @@ export class TitlePhase extends Phase { } }, { - label: i18next.t("menu:dailyRun"), + label: i18next.t("menu:runHistory"), handler: () => { - this.initDailyRun(); + globalScene.ui.setOverlayMode(Mode.RUN_HISTORY); return true; }, keepOpen: true @@ -153,7 +155,7 @@ export class TitlePhase extends Phase { { label: i18next.t("menu:settings"), handler: () => { - this.scene.ui.setOverlayMode(Mode.SETTINGS); + globalScene.ui.setOverlayMode(Mode.SETTINGS); return true; }, keepOpen: true @@ -163,55 +165,56 @@ export class TitlePhase extends Phase { noCancel: true, yOffset: 47 }; - this.scene.ui.setMode(Mode.TITLE, config); + globalScene.ui.setMode(Mode.TITLE, config); } - loadSaveSlot(slotId: integer): void { - this.scene.sessionSlotId = slotId > -1 || !loggedInUser ? slotId : loggedInUser.lastSessionSlot; - this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.resetModeChain(); - this.scene.gameData.loadSession(this.scene, slotId, slotId === -1 ? this.lastSessionData : undefined).then((success: boolean) => { + loadSaveSlot(slotId: number): void { + globalScene.sessionSlotId = slotId > -1 || !loggedInUser ? slotId : loggedInUser.lastSessionSlot; + globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.resetModeChain(); + globalScene.gameData.loadSession(slotId, slotId === -1 ? this.lastSessionData : undefined).then((success: boolean) => { if (success) { this.loaded = true; - this.scene.ui.showText(i18next.t("menu:sessionSuccess"), null, () => this.end()); + globalScene.ui.showText(i18next.t("menu:sessionSuccess"), null, () => this.end()); } else { this.end(); } }).catch(err => { console.error(err); - this.scene.ui.showText(i18next.t("menu:failedToLoadSession"), null); + globalScene.ui.showText(i18next.t("menu:failedToLoadSession"), null); }); } initDailyRun(): void { - this.scene.ui.setMode(Mode.SAVE_SLOT, SaveSlotUiMode.SAVE, (slotId: integer) => { - this.scene.clearPhaseQueue(); + globalScene.ui.clearText(); + globalScene.ui.setMode(Mode.SAVE_SLOT, SaveSlotUiMode.SAVE, (slotId: number) => { + globalScene.clearPhaseQueue(); if (slotId === -1) { - this.scene.pushPhase(new TitlePhase(this.scene)); + globalScene.pushPhase(new TitlePhase()); return super.end(); } - this.scene.sessionSlotId = slotId; + globalScene.sessionSlotId = slotId; const generateDaily = (seed: string) => { - this.scene.gameMode = getGameMode(GameModes.DAILY); + globalScene.gameMode = getGameMode(GameModes.DAILY); - this.scene.setSeed(seed); - this.scene.resetSeed(0); + globalScene.setSeed(seed); + globalScene.resetSeed(0); - this.scene.money = this.scene.gameMode.getStartingMoney(); + globalScene.money = globalScene.gameMode.getStartingMoney(); - const starters = getDailyRunStarters(this.scene, seed); - const startingLevel = this.scene.gameMode.getStartingLevel(); + const starters = getDailyRunStarters(seed); + const startingLevel = globalScene.gameMode.getStartingLevel(); - const party = this.scene.getPlayerParty(); + const party = globalScene.getPlayerParty(); const loadPokemonAssets: Promise[] = []; for (const starter of starters) { - const starterProps = this.scene.gameData.getSpeciesDexAttrProps(starter.species, starter.dexAttr); + const starterProps = globalScene.gameData.getSpeciesDexAttrProps(starter.species, starter.dexAttr); const starterFormIndex = Math.min(starterProps.formIndex, Math.max(starter.species.forms.length - 1, 0)); const starterGender = starter.species.malePercent !== null ? !starterProps.female ? Gender.MALE : Gender.FEMALE : Gender.GENDERLESS; - const starterPokemon = this.scene.addPlayerPokemon(starter.species, startingLevel, starter.abilityIndex, starterFormIndex, starterGender, starterProps.shiny, starterProps.variant, undefined, starter.nature); + const starterPokemon = globalScene.addPlayerPokemon(starter.species, startingLevel, starter.abilityIndex, starterFormIndex, starterGender, starterProps.shiny, starterProps.variant, undefined, starter.nature); starterPokemon.setVisible(false); party.push(starterPokemon); loadPokemonAssets.push(starterPokemon.loadAssets()); @@ -226,18 +229,18 @@ export class TitlePhase extends Phase { .filter((m) => m !== null); for (const m of modifiers) { - this.scene.addModifier(m, true, false, false, true); + globalScene.addModifier(m, true, false, false, true); } - this.scene.updateModifiers(true, true); + globalScene.updateModifiers(true, true); Promise.all(loadPokemonAssets).then(() => { - this.scene.time.delayedCall(500, () => this.scene.playBgm()); - this.scene.gameData.gameStats.dailyRunSessionsPlayed++; - this.scene.newArena(this.scene.gameMode.getStartingBiome(this.scene)); - this.scene.newBattle(); - this.scene.arena.init(); - this.scene.sessionPlayTime = 0; - this.scene.lastSavePlayTime = 0; + globalScene.time.delayedCall(500, () => globalScene.playBgm()); + globalScene.gameData.gameStats.dailyRunSessionsPlayed++; + globalScene.newArena(globalScene.gameMode.getStartingBiome()); + globalScene.newBattle(); + globalScene.arena.init(); + globalScene.sessionPlayTime = 0; + globalScene.lastSavePlayTime = 0; this.end(); }); }; @@ -254,49 +257,53 @@ export class TitlePhase extends Phase { console.error("Failed to load daily run:\n", err); }); } else { - generateDaily(btoa(new Date().toISOString().substring(0, 10))); + let seed: string = btoa(new Date().toISOString().substring(0, 10)); + if (!Utils.isNullOrUndefined(Overrides.DAILY_RUN_SEED_OVERRIDE)) { + seed = Overrides.DAILY_RUN_SEED_OVERRIDE; + } + generateDaily(seed); } }); } end(): void { - if (!this.loaded && !this.scene.gameMode.isDaily) { - this.scene.arena.preloadBgm(); - this.scene.gameMode = getGameMode(this.gameMode); + if (!this.loaded && !globalScene.gameMode.isDaily) { + globalScene.arena.preloadBgm(); + globalScene.gameMode = getGameMode(this.gameMode); if (this.gameMode === GameModes.CHALLENGE) { - this.scene.pushPhase(new SelectChallengePhase(this.scene)); + globalScene.pushPhase(new SelectChallengePhase()); } else { - this.scene.pushPhase(new SelectStarterPhase(this.scene)); + globalScene.pushPhase(new SelectStarterPhase()); } - this.scene.newArena(this.scene.gameMode.getStartingBiome(this.scene)); + globalScene.newArena(globalScene.gameMode.getStartingBiome()); } else { - this.scene.playBgm(); + globalScene.playBgm(); } - this.scene.pushPhase(new EncounterPhase(this.scene, this.loaded)); + globalScene.pushPhase(new EncounterPhase(this.loaded)); if (this.loaded) { - const availablePartyMembers = this.scene.getPokemonAllowedInBattle().length; + const availablePartyMembers = globalScene.getPokemonAllowedInBattle().length; - this.scene.pushPhase(new SummonPhase(this.scene, 0, true, true)); - if (this.scene.currentBattle.double && availablePartyMembers > 1) { - this.scene.pushPhase(new SummonPhase(this.scene, 1, true, true)); + globalScene.pushPhase(new SummonPhase(0, true, true)); + if (globalScene.currentBattle.double && availablePartyMembers > 1) { + globalScene.pushPhase(new SummonPhase(1, true, true)); } - if (this.scene.currentBattle.battleType !== BattleType.TRAINER && (this.scene.currentBattle.waveIndex > 1 || !this.scene.gameMode.isDaily)) { - const minPartySize = this.scene.currentBattle.double ? 2 : 1; + if (globalScene.currentBattle.battleType !== BattleType.TRAINER && (globalScene.currentBattle.waveIndex > 1 || !globalScene.gameMode.isDaily)) { + const minPartySize = globalScene.currentBattle.double ? 2 : 1; if (availablePartyMembers > minPartySize) { - this.scene.pushPhase(new CheckSwitchPhase(this.scene, 0, this.scene.currentBattle.double)); - if (this.scene.currentBattle.double) { - this.scene.pushPhase(new CheckSwitchPhase(this.scene, 1, this.scene.currentBattle.double)); + globalScene.pushPhase(new CheckSwitchPhase(0, globalScene.currentBattle.double)); + if (globalScene.currentBattle.double) { + globalScene.pushPhase(new CheckSwitchPhase(1, globalScene.currentBattle.double)); } } } } - for (const achv of Object.keys(this.scene.gameData.achvUnlocks)) { + for (const achv of Object.keys(globalScene.gameData.achvUnlocks)) { if (vouchers.hasOwnProperty(achv) && achv !== "CLASSIC_VICTORY") { - this.scene.validateVoucher(vouchers[achv]); + globalScene.validateVoucher(vouchers[achv]); } } diff --git a/src/phases/toggle-double-position-phase.ts b/src/phases/toggle-double-position-phase.ts index eff92bc6acd..f61577444d2 100644 --- a/src/phases/toggle-double-position-phase.ts +++ b/src/phases/toggle-double-position-phase.ts @@ -1,12 +1,12 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { FieldPosition } from "#app/field/pokemon"; import { BattlePhase } from "./battle-phase"; export class ToggleDoublePositionPhase extends BattlePhase { private double: boolean; - constructor(scene: BattleScene, double: boolean) { - super(scene); + constructor(double: boolean) { + super(); this.double = double; } @@ -14,11 +14,11 @@ export class ToggleDoublePositionPhase extends BattlePhase { start() { super.start(); - const playerPokemon = this.scene.getPlayerField().find(p => p.isActive(true)); + const playerPokemon = globalScene.getPlayerField().find(p => p.isActive(true)); if (playerPokemon) { - playerPokemon.setFieldPosition(this.double && this.scene.getPokemonAllowedInBattle().length > 1 ? FieldPosition.LEFT : FieldPosition.CENTER, 500).then(() => { + playerPokemon.setFieldPosition(this.double && globalScene.getPokemonAllowedInBattle().length > 1 ? FieldPosition.LEFT : FieldPosition.CENTER, 500).then(() => { if (playerPokemon.getFieldIndex() === 1) { - const party = this.scene.getPlayerParty(); + const party = globalScene.getPlayerParty(); party[1] = party[0]; party[0] = playerPokemon; } diff --git a/src/phases/trainer-message-test-phase.ts b/src/phases/trainer-message-test-phase.ts index d9e58473bd5..34ce2e8b53e 100644 --- a/src/phases/trainer-message-test-phase.ts +++ b/src/phases/trainer-message-test-phase.ts @@ -1,14 +1,14 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { trainerConfigs } from "#app/data/trainer-config"; -import { TrainerType } from "#app/enums/trainer-type"; +import type { TrainerType } from "#app/enums/trainer-type"; import { BattlePhase } from "./battle-phase"; import { TestMessagePhase } from "./test-message-phase"; export class TrainerMessageTestPhase extends BattlePhase { private trainerTypes: TrainerType[]; - constructor(scene: BattleScene, ...trainerTypes: TrainerType[]) { - super(scene); + constructor(...trainerTypes: TrainerType[]) { + super(); this.trainerTypes = trainerTypes; } @@ -33,7 +33,7 @@ export class TrainerMessageTestPhase extends BattlePhase { } for (const message of testMessages) { - this.scene.pushPhase(new TestMessagePhase(this.scene, message)); + globalScene.pushPhase(new TestMessagePhase(message)); } this.end(); diff --git a/src/phases/trainer-victory-phase.ts b/src/phases/trainer-victory-phase.ts index d797e4360ac..e2617f598da 100644 --- a/src/phases/trainer-victory-phase.ts +++ b/src/phases/trainer-victory-phase.ts @@ -1,4 +1,3 @@ -import BattleScene from "#app/battle-scene"; import { getCharVariantFromDialogue } from "#app/data/dialogue"; import { TrainerType } from "#app/enums/trainer-type"; import { modifierTypes } from "#app/modifier/modifier-type"; @@ -9,63 +8,70 @@ import { BattlePhase } from "./battle-phase"; import { ModifierRewardPhase } from "./modifier-reward-phase"; import { MoneyRewardPhase } from "./money-reward-phase"; import { TrainerSlot } from "#app/data/trainer-config"; +import { globalScene } from "#app/global-scene"; import { Biome } from "#app/enums/biome"; import { achvs } from "#app/system/achv"; export class TrainerVictoryPhase extends BattlePhase { - constructor(scene: BattleScene) { - super(scene); + constructor() { + super(); } start() { - this.scene.disableMenu = true; + globalScene.disableMenu = true; - this.scene.playBgm(this.scene.currentBattle.trainer?.config.victoryBgm); + globalScene.playBgm(globalScene.currentBattle.trainer?.config.victoryBgm); - this.scene.unshiftPhase(new MoneyRewardPhase(this.scene, this.scene.currentBattle.trainer?.config.moneyMultiplier!)); // TODO: is this bang correct? + globalScene.unshiftPhase(new MoneyRewardPhase(globalScene.currentBattle.trainer?.config.moneyMultiplier!)); // TODO: is this bang correct? - const modifierRewardFuncs = this.scene.currentBattle.trainer?.config.modifierRewardFuncs!; // TODO: is this bang correct? + const modifierRewardFuncs = globalScene.currentBattle.trainer?.config.modifierRewardFuncs!; // TODO: is this bang correct? for (const modifierRewardFunc of modifierRewardFuncs) { - this.scene.unshiftPhase(new ModifierRewardPhase(this.scene, modifierRewardFunc)); + globalScene.unshiftPhase(new ModifierRewardPhase(modifierRewardFunc)); } - if (this.scene.eventManager.isEventActive()) { - for (const rewardFunc of this.scene.currentBattle.trainer?.config.eventRewardFuncs!) { - this.scene.unshiftPhase(new ModifierRewardPhase(this.scene, rewardFunc)); + if (globalScene.eventManager.isEventActive()) { + for (const rewardFunc of globalScene.currentBattle.trainer?.config.eventRewardFuncs!) { + globalScene.unshiftPhase(new ModifierRewardPhase(rewardFunc)); } } - const trainerType = this.scene.currentBattle.trainer?.config.trainerType!; // TODO: is this bang correct? + const trainerType = globalScene.currentBattle.trainer?.config.trainerType!; // TODO: is this bang correct? // Validate Voucher for boss trainers if (vouchers.hasOwnProperty(TrainerType[trainerType])) { - if (!this.scene.validateVoucher(vouchers[TrainerType[trainerType]]) && this.scene.currentBattle.trainer?.config.isBoss) { - this.scene.unshiftPhase(new ModifierRewardPhase(this.scene, [ modifierTypes.VOUCHER, modifierTypes.VOUCHER, modifierTypes.VOUCHER_PLUS, modifierTypes.VOUCHER_PREMIUM ][vouchers[TrainerType[trainerType]].voucherType])); + if (!globalScene.validateVoucher(vouchers[TrainerType[trainerType]]) && globalScene.currentBattle.trainer?.config.isBoss) { + if (globalScene.eventManager.getUpgradeUnlockedVouchers()) { + globalScene.unshiftPhase(new ModifierRewardPhase([ modifierTypes.VOUCHER_PLUS, modifierTypes.VOUCHER_PLUS, modifierTypes.VOUCHER_PLUS, modifierTypes.VOUCHER_PREMIUM ][vouchers[TrainerType[trainerType]].voucherType])); + } else { + globalScene.unshiftPhase(new ModifierRewardPhase([ modifierTypes.VOUCHER, modifierTypes.VOUCHER, modifierTypes.VOUCHER_PLUS, modifierTypes.VOUCHER_PREMIUM ][vouchers[TrainerType[trainerType]].voucherType])); + } } } // Breeders in Space achievement - if (this.scene.arena.biomeType === Biome.SPACE - && (trainerType === TrainerType.BREEDER || trainerType === TrainerType.EXPERT_POKEMON_BREEDER)) { - this.scene.validateAchv(achvs.BREEDERS_IN_SPACE); + if ( + globalScene.arena.biomeType === Biome.SPACE + && (trainerType === TrainerType.BREEDER || trainerType === TrainerType.EXPERT_POKEMON_BREEDER) + ) { + globalScene.validateAchv(achvs.BREEDERS_IN_SPACE); } - this.scene.ui.showText(i18next.t("battle:trainerDefeated", { trainerName: this.scene.currentBattle.trainer?.getName(TrainerSlot.NONE, true) }), null, () => { - const victoryMessages = this.scene.currentBattle.trainer?.getVictoryMessages()!; // TODO: is this bang correct? + globalScene.ui.showText(i18next.t("battle:trainerDefeated", { trainerName: globalScene.currentBattle.trainer?.getName(TrainerSlot.NONE, true) }), null, () => { + const victoryMessages = globalScene.currentBattle.trainer?.getVictoryMessages()!; // TODO: is this bang correct? let message: string; - this.scene.executeWithSeedOffset(() => message = Utils.randSeedItem(victoryMessages), this.scene.currentBattle.waveIndex); + globalScene.executeWithSeedOffset(() => message = Utils.randSeedItem(victoryMessages), globalScene.currentBattle.waveIndex); message = message!; // tell TS compiler it's defined now const showMessage = () => { const originalFunc = showMessageOrEnd; - showMessageOrEnd = () => this.scene.ui.showDialogue(message, this.scene.currentBattle.trainer?.getName(TrainerSlot.TRAINER, true), null, originalFunc); + showMessageOrEnd = () => globalScene.ui.showDialogue(message, globalScene.currentBattle.trainer?.getName(TrainerSlot.TRAINER, true), null, originalFunc); showMessageOrEnd(); }; let showMessageOrEnd = () => this.end(); if (victoryMessages?.length) { - if (this.scene.currentBattle.trainer?.config.hasCharSprite && !this.scene.ui.shouldSkipDialogue(message)) { + if (globalScene.currentBattle.trainer?.config.hasCharSprite && !globalScene.ui.shouldSkipDialogue(message)) { const originalFunc = showMessageOrEnd; - showMessageOrEnd = () => this.scene.charSprite.hide().then(() => this.scene.hideFieldOverlay(250).then(() => originalFunc())); - this.scene.showFieldOverlay(500).then(() => this.scene.charSprite.showCharacter(this.scene.currentBattle.trainer?.getKey()!, getCharVariantFromDialogue(victoryMessages[0])).then(() => showMessage())); // TODO: is this bang correct? + showMessageOrEnd = () => globalScene.charSprite.hide().then(() => globalScene.hideFieldOverlay(250).then(() => originalFunc())); + globalScene.showFieldOverlay(500).then(() => globalScene.charSprite.showCharacter(globalScene.currentBattle.trainer?.getKey()!, getCharVariantFromDialogue(victoryMessages[0])).then(() => showMessage())); // TODO: is this bang correct? } else { showMessage(); } diff --git a/src/phases/turn-end-phase.ts b/src/phases/turn-end-phase.ts index e5f1850758d..fc4190ef2eb 100644 --- a/src/phases/turn-end-phase.ts +++ b/src/phases/turn-end-phase.ts @@ -1,49 +1,49 @@ -import BattleScene from "#app/battle-scene"; import { applyPostTurnAbAttrs, PostTurnAbAttr } from "#app/data/ability"; import { BattlerTagLapseType } from "#app/data/battler-tags"; import { TerrainType } from "#app/data/terrain"; import { WeatherType } from "#app/enums/weather-type"; import { TurnEndEvent } from "#app/events/battle-scene"; -import Pokemon from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { TurnHealModifier, EnemyTurnHealModifier, EnemyStatusEffectHealChanceModifier, TurnStatusEffectModifier, TurnHeldItemTransferModifier } from "#app/modifier/modifier"; import i18next from "i18next"; import { FieldPhase } from "./field-phase"; import { PokemonHealPhase } from "./pokemon-heal-phase"; +import { globalScene } from "#app/global-scene"; export class TurnEndPhase extends FieldPhase { - constructor(scene: BattleScene) { - super(scene); + constructor() { + super(); } start() { super.start(); - this.scene.currentBattle.incrementTurn(this.scene); - this.scene.eventTarget.dispatchEvent(new TurnEndEvent(this.scene.currentBattle.turn)); + globalScene.currentBattle.incrementTurn(); + globalScene.eventTarget.dispatchEvent(new TurnEndEvent(globalScene.currentBattle.turn)); const handlePokemon = (pokemon: Pokemon) => { if (!pokemon.switchOutStatus) { pokemon.lapseTags(BattlerTagLapseType.TURN_END); - this.scene.applyModifiers(TurnHealModifier, pokemon.isPlayer(), pokemon); + globalScene.applyModifiers(TurnHealModifier, pokemon.isPlayer(), pokemon); - if (this.scene.arena.terrain?.terrainType === TerrainType.GRASSY && pokemon.isGrounded()) { - this.scene.unshiftPhase(new PokemonHealPhase(this.scene, pokemon.getBattlerIndex(), + if (globalScene.arena.terrain?.terrainType === TerrainType.GRASSY && pokemon.isGrounded()) { + globalScene.unshiftPhase(new PokemonHealPhase(pokemon.getBattlerIndex(), Math.max(pokemon.getMaxHp() >> 4, 1), i18next.t("battle:turnEndHpRestore", { pokemonName: getPokemonNameWithAffix(pokemon) }), true)); } if (!pokemon.isPlayer()) { - this.scene.applyModifiers(EnemyTurnHealModifier, false, pokemon); - this.scene.applyModifier(EnemyStatusEffectHealChanceModifier, false, pokemon); + globalScene.applyModifiers(EnemyTurnHealModifier, false, pokemon); + globalScene.applyModifier(EnemyStatusEffectHealChanceModifier, false, pokemon); } applyPostTurnAbAttrs(PostTurnAbAttr, pokemon); } - this.scene.applyModifiers(TurnStatusEffectModifier, pokemon.isPlayer(), pokemon); + globalScene.applyModifiers(TurnStatusEffectModifier, pokemon.isPlayer(), pokemon); - this.scene.applyModifiers(TurnHeldItemTransferModifier, pokemon.isPlayer(), pokemon); + globalScene.applyModifiers(TurnHeldItemTransferModifier, pokemon.isPlayer(), pokemon); pokemon.battleSummonData.turnCount++; pokemon.battleSummonData.waveTurnCount++; @@ -51,15 +51,15 @@ export class TurnEndPhase extends FieldPhase { this.executeForAll(handlePokemon); - this.scene.arena.lapseTags(); + globalScene.arena.lapseTags(); - if (this.scene.arena.weather && !this.scene.arena.weather.lapse()) { - this.scene.arena.trySetWeather(WeatherType.NONE, false); - this.scene.arena.triggerWeatherBasedFormChangesToNormal(); + if (globalScene.arena.weather && !globalScene.arena.weather.lapse()) { + globalScene.arena.trySetWeather(WeatherType.NONE, false); + globalScene.arena.triggerWeatherBasedFormChangesToNormal(); } - if (this.scene.arena.terrain && !this.scene.arena.terrain.lapse()) { - this.scene.arena.trySetTerrain(TerrainType.NONE, false); + if (globalScene.arena.terrain && !globalScene.arena.terrain.lapse()) { + globalScene.arena.trySetTerrain(TerrainType.NONE, false); } this.end(); diff --git a/src/phases/turn-init-phase.ts b/src/phases/turn-init-phase.ts index baff6c7d73f..946c9626718 100644 --- a/src/phases/turn-init-phase.ts +++ b/src/phases/turn-init-phase.ts @@ -1,8 +1,7 @@ import { BattlerIndex } from "#app/battle"; -import BattleScene from "#app/battle-scene"; import { handleMysteryEncounterBattleStartEffects, handleMysteryEncounterTurnStartEffects } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { TurnInitEvent } from "#app/events/battle-scene"; -import { PlayerPokemon } from "#app/field/pokemon"; +import type { PlayerPokemon } from "#app/field/pokemon"; import i18next from "i18next"; import { CommandPhase } from "./command-phase"; import { EnemyCommandPhase } from "./enemy-command-phase"; @@ -10,27 +9,28 @@ import { FieldPhase } from "./field-phase"; import { GameOverPhase } from "./game-over-phase"; import { ToggleDoublePositionPhase } from "./toggle-double-position-phase"; import { TurnStartPhase } from "./turn-start-phase"; +import { globalScene } from "#app/global-scene"; export class TurnInitPhase extends FieldPhase { - constructor(scene: BattleScene) { - super(scene); + constructor() { + super(); } start() { super.start(); - this.scene.getPlayerField().forEach(p => { + globalScene.getPlayerField().forEach(p => { // If this pokemon is in play and evolved into something illegal under the current challenge, force a switch if (p.isOnField() && !p.isAllowedInBattle()) { - this.scene.queueMessage(i18next.t("challenges:illegalEvolution", { "pokemon": p.name }), null, true); + globalScene.queueMessage(i18next.t("challenges:illegalEvolution", { "pokemon": p.name }), null, true); - const allowedPokemon = this.scene.getPokemonAllowedInBattle(); + const allowedPokemon = globalScene.getPokemonAllowedInBattle(); if (!allowedPokemon.length) { // If there are no longer any legal pokemon in the party, game over. - this.scene.clearPhaseQueue(); - this.scene.unshiftPhase(new GameOverPhase(this.scene)); - } else if (allowedPokemon.length >= this.scene.currentBattle.getBattlerCount() || (this.scene.currentBattle.double && !allowedPokemon[0].isActive(true))) { + globalScene.clearPhaseQueue(); + globalScene.unshiftPhase(new GameOverPhase()); + } else if (allowedPokemon.length >= globalScene.currentBattle.getBattlerCount() || (globalScene.currentBattle.double && !allowedPokemon[0].isActive(true))) { // If there is at least one pokemon in the back that is legal to switch in, force a switch. p.switchOut(); } else { @@ -38,36 +38,35 @@ export class TurnInitPhase extends FieldPhase { // This should only happen in double battles. p.leaveField(); } - if (allowedPokemon.length === 1 && this.scene.currentBattle.double) { - this.scene.unshiftPhase(new ToggleDoublePositionPhase(this.scene, true)); + if (allowedPokemon.length === 1 && globalScene.currentBattle.double) { + globalScene.unshiftPhase(new ToggleDoublePositionPhase(true)); } } }); - //this.scene.pushPhase(new MoveAnimTestPhase(this.scene)); - this.scene.eventTarget.dispatchEvent(new TurnInitEvent()); + globalScene.eventTarget.dispatchEvent(new TurnInitEvent()); - handleMysteryEncounterBattleStartEffects(this.scene); + handleMysteryEncounterBattleStartEffects(); // If true, will skip remainder of current phase (and not queue CommandPhases etc.) - if (handleMysteryEncounterTurnStartEffects(this.scene)) { + if (handleMysteryEncounterTurnStartEffects()) { this.end(); return; } - this.scene.getField().forEach((pokemon, i) => { + globalScene.getField().forEach((pokemon, i) => { if (pokemon?.isActive()) { if (pokemon.isPlayer()) { - this.scene.currentBattle.addParticipant(pokemon as PlayerPokemon); + globalScene.currentBattle.addParticipant(pokemon as PlayerPokemon); } pokemon.resetTurnData(); - this.scene.pushPhase(pokemon.isPlayer() ? new CommandPhase(this.scene, i) : new EnemyCommandPhase(this.scene, i - BattlerIndex.ENEMY)); + globalScene.pushPhase(pokemon.isPlayer() ? new CommandPhase(i) : new EnemyCommandPhase(i - BattlerIndex.ENEMY)); } }); - this.scene.pushPhase(new TurnStartPhase(this.scene)); + globalScene.pushPhase(new TurnStartPhase()); this.end(); } diff --git a/src/phases/turn-start-phase.ts b/src/phases/turn-start-phase.ts index b48b018a046..c6d145e1a4c 100644 --- a/src/phases/turn-start-phase.ts +++ b/src/phases/turn-start-phase.ts @@ -1,9 +1,9 @@ -import BattleScene from "#app/battle-scene"; import { applyAbAttrs, BypassSpeedChanceAbAttr, PreventBypassSpeedChanceAbAttr } from "#app/data/ability"; import { allMoves, MoveHeaderAttr } from "#app/data/move"; import { Abilities } from "#app/enums/abilities"; import { Stat } from "#app/enums/stat"; -import Pokemon, { PokemonMove } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; +import { PokemonMove } from "#app/field/pokemon"; import { BypassSpeedChanceModifier } from "#app/modifier/modifier"; import { Command } from "#app/ui/command-ui-handler"; import * as Utils from "#app/utils"; @@ -20,10 +20,12 @@ import { CheckStatusEffectPhase } from "#app/phases/check-status-effect-phase"; import { BattlerIndex } from "#app/battle"; import { TrickRoomTag } from "#app/data/arena-tag"; import { SwitchType } from "#enums/switch-type"; +import { globalScene } from "#app/global-scene"; +import { TeraPhase } from "./tera-phase"; export class TurnStartPhase extends FieldPhase { - constructor(scene: BattleScene) { - super(scene); + constructor() { + super(); } /** @@ -32,20 +34,20 @@ export class TurnStartPhase extends FieldPhase { * @returns {@linkcode BattlerIndex[]} the battle indices of all pokemon on the field ordered by speed */ getSpeedOrder(): BattlerIndex[] { - const playerField = this.scene.getPlayerField().filter(p => p.isActive()) as Pokemon[]; - const enemyField = this.scene.getEnemyField().filter(p => p.isActive()) as Pokemon[]; + const playerField = globalScene.getPlayerField().filter(p => p.isActive()) as Pokemon[]; + const enemyField = globalScene.getEnemyField().filter(p => p.isActive()) as Pokemon[]; // We shuffle the list before sorting so speed ties produce random results let orderedTargets: Pokemon[] = playerField.concat(enemyField); // We seed it with the current turn to prevent an inconsistency where it // was varying based on how long since you last reloaded - this.scene.executeWithSeedOffset(() => { + globalScene.executeWithSeedOffset(() => { orderedTargets = Utils.randSeedShuffle(orderedTargets); - }, this.scene.currentBattle.turn, this.scene.waveSeed); + }, globalScene.currentBattle.turn, globalScene.waveSeed); // Next, a check for Trick Room is applied to determine sort order. const speedReversed = new Utils.BooleanHolder(false); - this.scene.arena.applyTags(TrickRoomTag, false, speedReversed); + globalScene.arena.applyTags(TrickRoomTag, false, speedReversed); // Adjust the sort function based on whether Trick Room is active. orderedTargets.sort((a: Pokemon, b: Pokemon) => { @@ -70,13 +72,13 @@ export class TurnStartPhase extends FieldPhase { // This occurs before the main loop because of battles with more than two Pokemon const battlerBypassSpeed = {}; - this.scene.getField(true).filter(p => p.summonData).map(p => { + globalScene.getField(true).filter(p => p.summonData).map(p => { const bypassSpeed = new Utils.BooleanHolder(false); const canCheckHeldItems = new Utils.BooleanHolder(true); applyAbAttrs(BypassSpeedChanceAbAttr, p, null, false, bypassSpeed); applyAbAttrs(PreventBypassSpeedChanceAbAttr, p, null, false, bypassSpeed, canCheckHeldItems); if (canCheckHeldItems.value) { - this.scene.applyModifiers(BypassSpeedChanceModifier, p.isPlayer(), p, bypassSpeed); + globalScene.applyModifiers(BypassSpeedChanceModifier, p.isPlayer(), p, bypassSpeed); } battlerBypassSpeed[p.getBattlerIndex()] = bypassSpeed; }); @@ -85,8 +87,8 @@ export class TurnStartPhase extends FieldPhase { // Non-FIGHT commands (SWITCH, BALL, RUN) have a higher command priority and will always occur before any FIGHT commands. moveOrder = moveOrder.slice(0); moveOrder.sort((a, b) => { - const aCommand = this.scene.currentBattle.turnCommands[a]; - const bCommand = this.scene.currentBattle.turnCommands[b]; + const aCommand = globalScene.currentBattle.turnCommands[a]; + const bCommand = globalScene.currentBattle.turnCommands[b]; if (aCommand?.command !== bCommand?.command) { if (aCommand?.command === Command.FIGHT) { @@ -98,8 +100,8 @@ export class TurnStartPhase extends FieldPhase { const aMove = allMoves[aCommand.move!.move]; const bMove = allMoves[bCommand!.move!.move]; - const aUser = this.scene.getField(true).find(p => p.getBattlerIndex() === a)!; - const bUser = this.scene.getField(true).find(p => p.getBattlerIndex() === b)!; + const aUser = globalScene.getField(true).find(p => p.getBattlerIndex() === a)!; + const bUser = globalScene.getField(true).find(p => p.getBattlerIndex() === b)!; const aPriority = aMove.getPriority(aUser, false); const bPriority = bMove.getPriority(bUser, false); @@ -133,15 +135,29 @@ export class TurnStartPhase extends FieldPhase { start() { super.start(); - const field = this.scene.getField(); + const field = globalScene.getField(); const moveOrder = this.getCommandOrder(); let orderIndex = 0; + for (const o of this.getSpeedOrder()) { + const pokemon = field[o]; + const preTurnCommand = globalScene.currentBattle.preTurnCommands[o]; + + if (preTurnCommand?.skip) { + continue; + } + + switch (preTurnCommand?.command) { + case Command.TERA: + globalScene.pushPhase(new TeraPhase(pokemon)); + } + } + for (const o of moveOrder) { const pokemon = field[o]; - const turnCommand = this.scene.currentBattle.turnCommands[o]; + const turnCommand = globalScene.currentBattle.turnCommands[o]; if (turnCommand?.skip) { continue; @@ -156,29 +172,29 @@ export class TurnStartPhase extends FieldPhase { } const move = pokemon.getMoveset().find(m => m?.moveId === queuedMove.move && m?.ppUsed < m?.getMovePp()) || new PokemonMove(queuedMove.move); if (move.getMove().hasAttr(MoveHeaderAttr)) { - this.scene.unshiftPhase(new MoveHeaderPhase(this.scene, pokemon, move)); + globalScene.unshiftPhase(new MoveHeaderPhase(pokemon, move)); } if (pokemon.isPlayer()) { if (turnCommand.cursor === -1) { - this.scene.pushPhase(new MovePhase(this.scene, pokemon, turnCommand.targets || turnCommand.move!.targets, move));//TODO: is the bang correct here? + globalScene.pushPhase(new MovePhase(pokemon, turnCommand.targets || turnCommand.move!.targets, move));//TODO: is the bang correct here? } else { - const playerPhase = new MovePhase(this.scene, pokemon, turnCommand.targets || turnCommand.move!.targets, move, false, queuedMove.ignorePP);//TODO: is the bang correct here? - this.scene.pushPhase(playerPhase); + const playerPhase = new MovePhase(pokemon, turnCommand.targets || turnCommand.move!.targets, move, false, queuedMove.ignorePP);//TODO: is the bang correct here? + globalScene.pushPhase(playerPhase); } } else { - this.scene.pushPhase(new MovePhase(this.scene, pokemon, turnCommand.targets || turnCommand.move!.targets, move, false, queuedMove.ignorePP));//TODO: is the bang correct here? + globalScene.pushPhase(new MovePhase(pokemon, turnCommand.targets || turnCommand.move!.targets, move, false, queuedMove.ignorePP));//TODO: is the bang correct here? } break; case Command.BALL: - this.scene.unshiftPhase(new AttemptCapturePhase(this.scene, turnCommand.targets![0] % 2, turnCommand.cursor!));//TODO: is the bang correct here? + globalScene.unshiftPhase(new AttemptCapturePhase(turnCommand.targets![0] % 2, turnCommand.cursor!));//TODO: is the bang correct here? break; case Command.POKEMON: const switchType = turnCommand.args?.[0] ? SwitchType.BATON_PASS : SwitchType.SWITCH; - this.scene.unshiftPhase(new SwitchSummonPhase(this.scene, switchType, pokemon.getFieldIndex(), turnCommand.cursor!, true, pokemon.isPlayer())); + globalScene.unshiftPhase(new SwitchSummonPhase(switchType, pokemon.getFieldIndex(), turnCommand.cursor!, true, pokemon.isPlayer())); break; case Command.RUN: let runningPokemon = pokemon; - if (this.scene.currentBattle.double) { + if (globalScene.currentBattle.double) { const playerActivePokemon = field.filter(pokemon => { if (!!pokemon) { return pokemon.isPlayer() && pokemon.isActive(); @@ -195,18 +211,18 @@ export class TurnStartPhase extends FieldPhase { runningPokemon = hasRunAway !== undefined ? hasRunAway : fasterPokemon; } } - this.scene.unshiftPhase(new AttemptRunPhase(this.scene, runningPokemon.getFieldIndex())); + globalScene.unshiftPhase(new AttemptRunPhase(runningPokemon.getFieldIndex())); break; } } - this.scene.pushPhase(new WeatherEffectPhase(this.scene)); - this.scene.pushPhase(new BerryPhase(this.scene)); + globalScene.pushPhase(new WeatherEffectPhase()); + globalScene.pushPhase(new BerryPhase()); /** Add a new phase to check who should be taking status damage */ - this.scene.pushPhase(new CheckStatusEffectPhase(this.scene, moveOrder)); + globalScene.pushPhase(new CheckStatusEffectPhase(moveOrder)); - this.scene.pushPhase(new TurnEndPhase(this.scene)); + globalScene.pushPhase(new TurnEndPhase()); /** * this.end() will call shiftPhase(), which dumps everything from PrependQueue (aka everything that is unshifted()) to the front diff --git a/src/phases/unavailable-phase.ts b/src/phases/unavailable-phase.ts index 59bfca7875e..c0b5d4224c5 100644 --- a/src/phases/unavailable-phase.ts +++ b/src/phases/unavailable-phase.ts @@ -1,16 +1,16 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { Phase } from "#app/phase"; import { Mode } from "#app/ui/ui"; import { LoginPhase } from "./login-phase"; export class UnavailablePhase extends Phase { - constructor(scene: BattleScene) { - super(scene); + constructor() { + super(); } start(): void { - this.scene.ui.setMode(Mode.UNAVAILABLE, () => { - this.scene.unshiftPhase(new LoginPhase(this.scene, true)); + globalScene.ui.setMode(Mode.UNAVAILABLE, () => { + globalScene.unshiftPhase(new LoginPhase(true)); this.end(); }); } diff --git a/src/phases/unlock-phase.ts b/src/phases/unlock-phase.ts index 65060309a6c..2d24ee92baf 100644 --- a/src/phases/unlock-phase.ts +++ b/src/phases/unlock-phase.ts @@ -1,26 +1,27 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { Phase } from "#app/phase"; -import { Unlockables, getUnlockableName } from "#app/system/unlockables"; +import type { Unlockables } from "#app/system/unlockables"; +import { getUnlockableName } from "#app/system/unlockables"; import { Mode } from "#app/ui/ui"; import i18next from "i18next"; export class UnlockPhase extends Phase { private unlockable: Unlockables; - constructor(scene: BattleScene, unlockable: Unlockables) { - super(scene); + constructor(unlockable: Unlockables) { + super(); this.unlockable = unlockable; } start(): void { - this.scene.time.delayedCall(2000, () => { - this.scene.gameData.unlocks[this.unlockable] = true; + globalScene.time.delayedCall(2000, () => { + globalScene.gameData.unlocks[this.unlockable] = true; // Sound loaded into game as is - this.scene.playSound("level_up_fanfare"); - this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(i18next.t("battle:unlockedSomething", { unlockedThing: getUnlockableName(this.unlockable) }), null, () => { - this.scene.time.delayedCall(1500, () => this.scene.arenaBg.setVisible(true)); + globalScene.playSound("level_up_fanfare"); + globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.showText(i18next.t("battle:unlockedSomething", { unlockedThing: getUnlockableName(this.unlockable) }), null, () => { + globalScene.time.delayedCall(1500, () => globalScene.arenaBg.setVisible(true)); this.end(); }, null, true, 1500); }); diff --git a/src/phases/victory-phase.ts b/src/phases/victory-phase.ts index 62479241a6c..13e04569ef3 100644 --- a/src/phases/victory-phase.ts +++ b/src/phases/victory-phase.ts @@ -1,6 +1,7 @@ -import BattleScene from "#app/battle-scene"; -import { BattlerIndex, BattleType, ClassicFixedBossWaves } from "#app/battle"; -import { CustomModifierSettings, modifierTypes } from "#app/modifier/modifier-type"; +import type { BattlerIndex } from "#app/battle"; +import { BattleType, ClassicFixedBossWaves } from "#app/battle"; +import type { CustomModifierSettings } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/modifier/modifier-type"; import { BattleEndPhase } from "./battle-end-phase"; import { NewBattlePhase } from "./new-battle-phase"; import { PokemonPhase } from "./pokemon-phase"; @@ -11,13 +12,14 @@ import { ModifierRewardPhase } from "./modifier-reward-phase"; import { SelectModifierPhase } from "./select-modifier-phase"; import { TrainerVictoryPhase } from "./trainer-victory-phase"; import { handleMysteryEncounterVictory } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import { globalScene } from "#app/global-scene"; export class VictoryPhase extends PokemonPhase { /** If true, indicates that the phase is intended for EXP purposes only, and not to continue a battle to next phase */ isExpOnly: boolean; - constructor(scene: BattleScene, battlerIndex: BattlerIndex | integer, isExpOnly: boolean = false) { - super(scene, battlerIndex); + constructor(battlerIndex: BattlerIndex | number, isExpOnly: boolean = false) { + super(battlerIndex); this.isExpOnly = isExpOnly; } @@ -25,61 +27,61 @@ export class VictoryPhase extends PokemonPhase { start() { super.start(); - const isMysteryEncounter = this.scene.currentBattle.isBattleMysteryEncounter(); + const isMysteryEncounter = globalScene.currentBattle.isBattleMysteryEncounter(); // update Pokemon defeated count except for MEs that disable it - if (!isMysteryEncounter || !this.scene.currentBattle.mysteryEncounter?.preventGameStatsUpdates) { - this.scene.gameData.gameStats.pokemonDefeated++; + if (!isMysteryEncounter || !globalScene.currentBattle.mysteryEncounter?.preventGameStatsUpdates) { + globalScene.gameData.gameStats.pokemonDefeated++; } const expValue = this.getPokemon().getExpValue(); - this.scene.applyPartyExp(expValue, true); + globalScene.applyPartyExp(expValue, true); if (isMysteryEncounter) { - handleMysteryEncounterVictory(this.scene, false, this.isExpOnly); + handleMysteryEncounterVictory(false, this.isExpOnly); return this.end(); } - if (!this.scene.getEnemyParty().find(p => this.scene.currentBattle.battleType === BattleType.WILD ? p.isOnField() : !p?.isFainted(true))) { - this.scene.pushPhase(new BattleEndPhase(this.scene, true)); - if (this.scene.currentBattle.battleType === BattleType.TRAINER) { - this.scene.pushPhase(new TrainerVictoryPhase(this.scene)); + if (!globalScene.getEnemyParty().find(p => globalScene.currentBattle.battleType === BattleType.WILD ? p.isOnField() : !p?.isFainted(true))) { + globalScene.pushPhase(new BattleEndPhase(true)); + if (globalScene.currentBattle.battleType === BattleType.TRAINER) { + globalScene.pushPhase(new TrainerVictoryPhase()); } - if (this.scene.gameMode.isEndless || !this.scene.gameMode.isWaveFinal(this.scene.currentBattle.waveIndex)) { - this.scene.pushPhase(new EggLapsePhase(this.scene)); - if (this.scene.gameMode.isClassic && this.scene.currentBattle.waveIndex === ClassicFixedBossWaves.EVIL_BOSS_2) { + if (globalScene.gameMode.isEndless || !globalScene.gameMode.isWaveFinal(globalScene.currentBattle.waveIndex)) { + globalScene.pushPhase(new EggLapsePhase()); + if (globalScene.gameMode.isClassic && globalScene.currentBattle.waveIndex === ClassicFixedBossWaves.EVIL_BOSS_2) { // Should get Lock Capsule on 165 before shop phase so it can be used in the rewards shop - this.scene.pushPhase(new ModifierRewardPhase(this.scene, modifierTypes.LOCK_CAPSULE)); + globalScene.pushPhase(new ModifierRewardPhase(modifierTypes.LOCK_CAPSULE)); } - if (this.scene.currentBattle.waveIndex % 10) { - this.scene.pushPhase(new SelectModifierPhase(this.scene, undefined, undefined, this.getFixedBattleCustomModifiers())); - } else if (this.scene.gameMode.isDaily) { - this.scene.pushPhase(new ModifierRewardPhase(this.scene, modifierTypes.EXP_CHARM)); - if (this.scene.currentBattle.waveIndex > 10 && !this.scene.gameMode.isWaveFinal(this.scene.currentBattle.waveIndex)) { - this.scene.pushPhase(new ModifierRewardPhase(this.scene, modifierTypes.GOLDEN_POKEBALL)); + if (globalScene.currentBattle.waveIndex % 10) { + globalScene.pushPhase(new SelectModifierPhase(undefined, undefined, this.getFixedBattleCustomModifiers())); + } else if (globalScene.gameMode.isDaily) { + globalScene.pushPhase(new ModifierRewardPhase(modifierTypes.EXP_CHARM)); + if (globalScene.currentBattle.waveIndex > 10 && !globalScene.gameMode.isWaveFinal(globalScene.currentBattle.waveIndex)) { + globalScene.pushPhase(new ModifierRewardPhase(modifierTypes.GOLDEN_POKEBALL)); } } else { - const superExpWave = !this.scene.gameMode.isEndless ? (this.scene.offsetGym ? 0 : 20) : 10; - if (this.scene.gameMode.isEndless && this.scene.currentBattle.waveIndex === 10) { - this.scene.pushPhase(new ModifierRewardPhase(this.scene, modifierTypes.EXP_SHARE)); + const superExpWave = !globalScene.gameMode.isEndless ? (globalScene.offsetGym ? 0 : 20) : 10; + if (globalScene.gameMode.isEndless && globalScene.currentBattle.waveIndex === 10) { + globalScene.pushPhase(new ModifierRewardPhase(modifierTypes.EXP_SHARE)); } - if (this.scene.currentBattle.waveIndex <= 750 && (this.scene.currentBattle.waveIndex <= 500 || (this.scene.currentBattle.waveIndex % 30) === superExpWave)) { - this.scene.pushPhase(new ModifierRewardPhase(this.scene, (this.scene.currentBattle.waveIndex % 30) !== superExpWave || this.scene.currentBattle.waveIndex > 250 ? modifierTypes.EXP_CHARM : modifierTypes.SUPER_EXP_CHARM)); + if (globalScene.currentBattle.waveIndex <= 750 && (globalScene.currentBattle.waveIndex <= 500 || (globalScene.currentBattle.waveIndex % 30) === superExpWave)) { + globalScene.pushPhase(new ModifierRewardPhase((globalScene.currentBattle.waveIndex % 30) !== superExpWave || globalScene.currentBattle.waveIndex > 250 ? modifierTypes.EXP_CHARM : modifierTypes.SUPER_EXP_CHARM)); } - if (this.scene.currentBattle.waveIndex <= 150 && !(this.scene.currentBattle.waveIndex % 50)) { - this.scene.pushPhase(new ModifierRewardPhase(this.scene, modifierTypes.GOLDEN_POKEBALL)); + if (globalScene.currentBattle.waveIndex <= 150 && !(globalScene.currentBattle.waveIndex % 50)) { + globalScene.pushPhase(new ModifierRewardPhase(modifierTypes.GOLDEN_POKEBALL)); } - if (this.scene.gameMode.isEndless && !(this.scene.currentBattle.waveIndex % 50)) { - this.scene.pushPhase(new ModifierRewardPhase(this.scene, !(this.scene.currentBattle.waveIndex % 250) ? modifierTypes.VOUCHER_PREMIUM : modifierTypes.VOUCHER_PLUS)); - this.scene.pushPhase(new AddEnemyBuffModifierPhase(this.scene)); + if (globalScene.gameMode.isEndless && !(globalScene.currentBattle.waveIndex % 50)) { + globalScene.pushPhase(new ModifierRewardPhase(!(globalScene.currentBattle.waveIndex % 250) ? modifierTypes.VOUCHER_PREMIUM : modifierTypes.VOUCHER_PLUS)); + globalScene.pushPhase(new AddEnemyBuffModifierPhase()); } } - this.scene.pushPhase(new NewBattlePhase(this.scene)); + globalScene.pushPhase(new NewBattlePhase()); } else { - this.scene.currentBattle.battleType = BattleType.CLEAR; - this.scene.score += this.scene.gameMode.getClearScoreBonus(); - this.scene.updateScoreText(); - this.scene.pushPhase(new GameOverPhase(this.scene, true)); + globalScene.currentBattle.battleType = BattleType.CLEAR; + globalScene.score += globalScene.gameMode.getClearScoreBonus(); + globalScene.updateScoreText(); + globalScene.pushPhase(new GameOverPhase(true)); } } @@ -91,8 +93,8 @@ export class VictoryPhase extends PokemonPhase { * will pass those settings to the upcoming {@linkcode SelectModifierPhase}`. */ getFixedBattleCustomModifiers(): CustomModifierSettings | undefined { - const gameMode = this.scene.gameMode; - const waveIndex = this.scene.currentBattle.waveIndex; + const gameMode = globalScene.gameMode; + const waveIndex = globalScene.currentBattle.waveIndex; if (gameMode.isFixedBattle(waveIndex)) { return gameMode.getFixedBattle(waveIndex).customModifierRewardSettings; } diff --git a/src/phases/weather-effect-phase.ts b/src/phases/weather-effect-phase.ts index 442bafa0ca7..aa09f8a850d 100644 --- a/src/phases/weather-effect-phase.ts +++ b/src/phases/weather-effect-phase.ts @@ -1,24 +1,26 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { applyPreWeatherEffectAbAttrs, SuppressWeatherEffectAbAttr, PreWeatherDamageAbAttr, applyAbAttrs, BlockNonDirectDamageAbAttr, applyPostWeatherLapseAbAttrs, PostWeatherLapseAbAttr } from "#app/data/ability"; import { CommonAnim } from "#app/data/battle-anims"; -import { Weather, getWeatherDamageMessage, getWeatherLapseMessage } from "#app/data/weather"; +import type { Weather } from "#app/data/weather"; +import { getWeatherDamageMessage, getWeatherLapseMessage } from "#app/data/weather"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { WeatherType } from "#app/enums/weather-type"; -import Pokemon, { HitResult } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; +import { HitResult } from "#app/field/pokemon"; import * as Utils from "#app/utils"; import { CommonAnimPhase } from "./common-anim-phase"; export class WeatherEffectPhase extends CommonAnimPhase { public weather: Weather | null; - constructor(scene: BattleScene) { - super(scene, undefined, undefined, CommonAnim.SUNNY + ((scene?.arena?.weather?.weatherType || WeatherType.NONE) - 1)); - this.weather = scene?.arena?.weather; + constructor() { + super(undefined, undefined, CommonAnim.SUNNY + ((globalScene?.arena?.weather?.weatherType || WeatherType.NONE) - 1)); + this.weather = globalScene?.arena?.weather; } start() { // Update weather state with any changes that occurred during the turn - this.weather = this.scene?.arena?.weather; + this.weather = globalScene?.arena?.weather; if (!this.weather) { this.end(); @@ -46,7 +48,7 @@ export class WeatherEffectPhase extends CommonAnimPhase { const damage = Utils.toDmgValue(pokemon.getMaxHp() / 16); - this.scene.queueMessage(getWeatherDamageMessage(this.weather?.weatherType!, pokemon)!); // TODO: are those bangs correct? + globalScene.queueMessage(getWeatherDamageMessage(this.weather?.weatherType!, pokemon)!); // TODO: are those bangs correct? pokemon.damageAndUpdate(damage, HitResult.EFFECTIVE, false, false, true); }; @@ -59,7 +61,7 @@ export class WeatherEffectPhase extends CommonAnimPhase { } } - this.scene.ui.showText(getWeatherLapseMessage(this.weather.weatherType) ?? "", null, () => { + globalScene.ui.showText(getWeatherLapseMessage(this.weather.weatherType) ?? "", null, () => { this.executeForAll((pokemon: Pokemon) => { if (!pokemon.switchOutStatus) { applyPostWeatherLapseAbAttrs(PostWeatherLapseAbAttr, pokemon, this.weather); diff --git a/src/pipelines/field-sprite.ts b/src/pipelines/field-sprite.ts index c370f5586e5..f81845073c1 100644 --- a/src/pipelines/field-sprite.ts +++ b/src/pipelines/field-sprite.ts @@ -1,4 +1,4 @@ -import BattleScene from "../battle-scene"; +import { globalScene } from "#app/global-scene"; import { TerrainType, getTerrainColor } from "../data/terrain"; import * as Utils from "../utils"; @@ -227,22 +227,21 @@ export default class FieldSpritePipeline extends Phaser.Renderer.WebGL.Pipelines super.onBind(); const sprite = gameObject as Phaser.GameObjects.Sprite | Phaser.GameObjects.NineSlice; - const scene = sprite.scene as BattleScene; const data = sprite.pipelineData; const ignoreTimeTint = data["ignoreTimeTint"] as boolean; const terrainColorRatio = data["terrainColorRatio"] as number || 0; - const time = scene.currentBattle?.waveIndex - ? ((scene.currentBattle.waveIndex + scene.waveCycleOffset) % 40) / 40 // ((new Date().getSeconds() * 1000 + new Date().getMilliseconds()) % 10000) / 10000 + const time = globalScene.currentBattle?.waveIndex + ? ((globalScene.currentBattle.waveIndex + globalScene.waveCycleOffset) % 40) / 40 // ((new Date().getSeconds() * 1000 + new Date().getMilliseconds()) % 10000) / 10000 : Utils.getCurrentTime(); this.set1f("time", time); this.set1i("ignoreTimeTint", ignoreTimeTint ? 1 : 0); - this.set1i("isOutside", scene.arena.isOutside() ? 1 : 0); - this.set3fv("dayTint", scene.arena.getDayTint().map(c => c / 255)); - this.set3fv("duskTint", scene.arena.getDuskTint().map(c => c / 255)); - this.set3fv("nightTint", scene.arena.getNightTint().map(c => c / 255)); - this.set3fv("terrainColor", getTerrainColor(scene.arena.terrain?.terrainType || TerrainType.NONE).map(c => c / 255)); + this.set1i("isOutside", globalScene.arena.isOutside() ? 1 : 0); + this.set3fv("dayTint", globalScene.arena.getDayTint().map(c => c / 255)); + this.set3fv("duskTint", globalScene.arena.getDuskTint().map(c => c / 255)); + this.set3fv("nightTint", globalScene.arena.getNightTint().map(c => c / 255)); + this.set3fv("terrainColor", getTerrainColor(globalScene.arena.terrain?.terrainType || TerrainType.NONE).map(c => c / 255)); this.set1f("terrainColorRatio", terrainColorRatio); } diff --git a/src/pipelines/invert.ts b/src/pipelines/invert.ts index 5d0161e8afa..9c30f2b5cee 100644 --- a/src/pipelines/invert.ts +++ b/src/pipelines/invert.ts @@ -1,4 +1,4 @@ -import { Game } from "phaser"; +import type { Game } from "phaser"; const fragShader = ` precision mediump float; diff --git a/src/pipelines/sprite.ts b/src/pipelines/sprite.ts index 88d6ce2d387..90c0e65d25c 100644 --- a/src/pipelines/sprite.ts +++ b/src/pipelines/sprite.ts @@ -1,10 +1,10 @@ -import BattleScene from "../battle-scene"; import { variantColorCache } from "#app/data/variant"; -import Pokemon from "../field/pokemon"; -import Trainer from "../field/trainer"; +import MysteryEncounterIntroVisuals from "#app/field/mystery-encounter-intro"; +import Pokemon from "#app/field/pokemon"; +import Trainer from "#app/field/trainer"; +import { globalScene } from "#app/global-scene"; +import * as Utils from "#app/utils"; import FieldSpritePipeline from "./field-sprite"; -import * as Utils from "../utils"; -import MysteryEncounterIntroVisuals from "../field/mystery-encounter-intro"; const spriteFragShader = ` #ifdef GL_FRAGMENT_PRECISION_HIGH @@ -351,7 +351,7 @@ export default class SpritePipeline extends FieldSpritePipeline { const data = sprite.pipelineData; const tone = data["tone"] as number[]; - const teraColor = data["teraColor"] as integer[] ?? [ 0, 0, 0 ]; + const teraColor = (data["isTerastallized"] as boolean) ? (data["teraColor"] as number[] ?? [ 0, 0, 0 ]) : [ 0, 0, 0 ]; const hasShadow = data["hasShadow"] as boolean; const yShadowOffset = data["yShadowOffset"] as number; const ignoreFieldPos = data["ignoreFieldPos"] as boolean; @@ -384,13 +384,13 @@ export default class SpritePipeline extends FieldSpritePipeline { this.set4fv("tone", tone); this.bindTexture(this.game.textures.get("tera").source[0].glTexture!, 1); // TODO: is this bang correct? - if ((gameObject.scene as BattleScene).fusionPaletteSwaps) { + if (globalScene.fusionPaletteSwaps) { const spriteColors = ((ignoreOverride && data["spriteColorsBase"]) || data["spriteColors"] || []) as number[][]; const fusionSpriteColors = ((ignoreOverride && data["fusionSpriteColorsBase"]) || data["fusionSpriteColors"] || []) as number[][]; const emptyColors = [ 0, 0, 0, 0 ]; - const flatSpriteColors: integer[] = []; - const flatFusionSpriteColors: integer[] = []; + const flatSpriteColors: number[] = []; + const flatFusionSpriteColors: number[] = []; for (let c = 0; c < 32; c++) { flatSpriteColors.splice(flatSpriteColors.length, 0, ...(c < spriteColors.length ? spriteColors[c] : emptyColors)); flatFusionSpriteColors.splice(flatFusionSpriteColors.length, 0, ...(c < fusionSpriteColors.length ? fusionSpriteColors[c] : emptyColors)); @@ -406,14 +406,14 @@ export default class SpritePipeline extends FieldSpritePipeline { const sprite = (gameObject as Phaser.GameObjects.Sprite); const data = sprite.pipelineData; - const variant: integer = data.hasOwnProperty("variant") + const variant: number = data.hasOwnProperty("variant") ? data["variant"] : sprite.parentContainer instanceof Pokemon ? sprite.parentContainer.variant : 0; let variantColors; const emptyColors = [ 0, 0, 0, 0 ]; - const flatBaseColors: integer[] = []; + const flatBaseColors: number[] = []; const flatVariantColors: number[] = []; if ((sprite.parentContainer instanceof Pokemon ? sprite.parentContainer.shiny : !!data["shiny"]) diff --git a/src/plugins/i18n.ts b/src/plugins/i18n.ts index 845739dfcac..904b51c6dc7 100644 --- a/src/plugins/i18n.ts +++ b/src/plugins/i18n.ts @@ -193,6 +193,7 @@ export async function initI18n(): Promise { "egg", "fightUiHandler", "filterBar", + "filterText", "gameMode", "gameStatsUiHandler", "growth", @@ -203,7 +204,9 @@ export async function initI18n(): Promise { "move", "nature", "pokeball", + "pokedexUiHandler", "pokemon", + "pokemonEvolutions", "pokemonForm", "pokemonInfo", "pokemonInfoContainer", diff --git a/src/scene-base.ts b/src/scene-base.ts index 9af97b8e6d4..c6ca9bb8ba2 100644 --- a/src/scene-base.ts +++ b/src/scene-base.ts @@ -41,7 +41,7 @@ export class SceneBase extends Phaser.Scene { } } - loadSpritesheet(key: string, folder: string, size: integer, filename?: string) { + loadSpritesheet(key: string, folder: string, size: number, filename?: string) { if (!filename) { filename = `${key}.png`; } diff --git a/src/system/achv.ts b/src/system/achv.ts index a98e396264d..bd9348a52bf 100644 --- a/src/system/achv.ts +++ b/src/system/achv.ts @@ -1,14 +1,15 @@ -import { Modifier } from "typescript"; -import BattleScene from "../battle-scene"; +import type { Modifier } from "typescript"; import { TurnHeldItemTransferModifier } from "../modifier/modifier"; import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import i18next from "i18next"; import * as Utils from "../utils"; import { PlayerGender } from "#enums/player-gender"; -import { Challenge, FreshStartChallenge, SingleGenerationChallenge, SingleTypeChallenge, InverseBattleChallenge } from "#app/data/challenge"; -import { ConditionFn } from "#app/@types/common"; +import type { Challenge } from "#app/data/challenge"; +import { FlipStatChallenge, FreshStartChallenge, SingleGenerationChallenge, SingleTypeChallenge, InverseBattleChallenge } from "#app/data/challenge"; +import type { ConditionFn } from "#app/@types/common"; import { Stat, getShortenedStatKey } from "#app/enums/stat"; import { Challenges } from "#app/enums/challenges"; +import { globalScene } from "#app/global-scene"; export enum AchvTier { COMMON, @@ -24,7 +25,7 @@ export class Achv { public name: string; public description: string; public iconImage: string; - public score: integer; + public score: number; public secret: boolean; public hasParent: boolean; @@ -32,7 +33,7 @@ export class Achv { private conditionFunc: ConditionFn | undefined; - constructor(localizationKey:string, name: string, description: string, iconImage: string, score: integer, conditionFunc?: ConditionFn) { + constructor(localizationKey:string, name: string, description: string, iconImage: string, score: number, conditionFunc?: ConditionFn) { this.name = name; this.description = description; this.iconImage = iconImage; @@ -66,8 +67,8 @@ export class Achv { return this; } - validate(scene: BattleScene, args?: any[]): boolean { - return !this.conditionFunc || this.conditionFunc(scene, args); + validate(args?: any[]): boolean { + return !this.conditionFunc || this.conditionFunc(args); } getTier(): AchvTier { @@ -88,59 +89,59 @@ export class Achv { } export class MoneyAchv extends Achv { - moneyAmount: integer; + moneyAmount: number; - constructor(localizationKey: string, name: string, moneyAmount: integer, iconImage: string, score: integer) { - super(localizationKey, name, "", iconImage, score, (scene: BattleScene, _args: any[]) => scene.money >= this.moneyAmount); + constructor(localizationKey: string, name: string, moneyAmount: number, iconImage: string, score: number) { + super(localizationKey, name, "", iconImage, score, (_args: any[]) => globalScene.money >= this.moneyAmount); this.moneyAmount = moneyAmount; } } export class RibbonAchv extends Achv { - ribbonAmount: integer; + ribbonAmount: number; - constructor(localizationKey: string, name: string, ribbonAmount: integer, iconImage: string, score: integer) { - super(localizationKey, name, "", iconImage, score, (scene: BattleScene, _args: any[]) => scene.gameData.gameStats.ribbonsOwned >= this.ribbonAmount); + constructor(localizationKey: string, name: string, ribbonAmount: number, iconImage: string, score: number) { + super(localizationKey, name, "", iconImage, score, (_args: any[]) => globalScene.gameData.gameStats.ribbonsOwned >= this.ribbonAmount); this.ribbonAmount = ribbonAmount; } } export class DamageAchv extends Achv { - damageAmount: integer; + damageAmount: number; - constructor(localizationKey: string, name: string, damageAmount: integer, iconImage: string, score: integer) { - super(localizationKey, name, "", iconImage, score, (_scene: BattleScene, args: any[]) => (args[0] instanceof Utils.NumberHolder ? args[0].value : args[0]) >= this.damageAmount); + constructor(localizationKey: string, name: string, damageAmount: number, iconImage: string, score: number) { + super(localizationKey, name, "", iconImage, score, (args: any[]) => (args[0] instanceof Utils.NumberHolder ? args[0].value : args[0]) >= this.damageAmount); this.damageAmount = damageAmount; } } export class HealAchv extends Achv { - healAmount: integer; + healAmount: number; - constructor(localizationKey: string, name: string, healAmount: integer, iconImage: string, score: integer) { - super(localizationKey, name, "", iconImage, score, (_scene: BattleScene, args: any[]) => (args[0] instanceof Utils.NumberHolder ? args[0].value : args[0]) >= this.healAmount); + constructor(localizationKey: string, name: string, healAmount: number, iconImage: string, score: number) { + super(localizationKey, name, "", iconImage, score, (args: any[]) => (args[0] instanceof Utils.NumberHolder ? args[0].value : args[0]) >= this.healAmount); this.healAmount = healAmount; } } export class LevelAchv extends Achv { - level: integer; + level: number; - constructor(localizationKey: string, name: string, level: integer, iconImage: string, score: integer) { - super(localizationKey, name, "", iconImage, score, (scene: BattleScene, args: any[]) => (args[0] instanceof Utils.NumberHolder ? args[0].value : args[0]) >= this.level); + constructor(localizationKey: string, name: string, level: number, iconImage: string, score: number) { + super(localizationKey, name, "", iconImage, score, (args: any[]) => (args[0] instanceof Utils.NumberHolder ? args[0].value : args[0]) >= this.level); this.level = level; } } export class ModifierAchv extends Achv { - constructor(localizationKey: string, name: string, description: string, iconImage: string, score: integer, modifierFunc: (modifier: Modifier) => boolean) { - super(localizationKey, name, description, iconImage, score, (_scene: BattleScene, args: any[]) => modifierFunc((args[0] as Modifier))); + constructor(localizationKey: string, name: string, description: string, iconImage: string, score: number, modifierFunc: (modifier: Modifier) => boolean) { + super(localizationKey, name, description, iconImage, score, (args: any[]) => modifierFunc((args[0] as Modifier))); } } export class ChallengeAchv extends Achv { - constructor(localizationKey: string, name: string, description: string, iconImage: string, score: integer, challengeFunc: (challenge: Challenge, scene: BattleScene) => boolean) { - super(localizationKey, name, description, iconImage, score, (_scene: BattleScene, args: any[]) => challengeFunc(args[0] as Challenge, _scene)); + constructor(localizationKey: string, name: string, description: string, iconImage: string, score: number, challengeFunc: (challenge: Challenge) => boolean) { + super(localizationKey, name, description, iconImage, score, (args: any[]) => challengeFunc(args[0] as Challenge)); } } @@ -152,7 +153,7 @@ export class ChallengeAchv extends Achv { */ export function getAchievementDescription(localizationKey: string): string { // We need to get the player gender from the game data to add the correct prefix to the achievement name - const genderIndex = this?.scene?.gameData?.gender ?? PlayerGender.MALE; //TODO: why is `this` being used here!? We are not inside a scope (copied from original) + const genderIndex = globalScene?.gameData?.gender ?? PlayerGender.MALE; const genderStr = PlayerGender[genderIndex].toLowerCase(); switch (localizationKey) { @@ -279,6 +280,10 @@ export function getAchievementDescription(localizationKey: string): string { return i18next.t("achv:FRESH_START.description", { context: genderStr }); case "INVERSE_BATTLE": return i18next.t("achv:INVERSE_BATTLE.description", { context: genderStr }); + case "FLIP_STATS": + return i18next.t("achv:FLIP_STATS.description", { context: genderStr }); + case "FLIP_INVERSE": + return i18next.t("achv:FLIP_INVERSE.description", { context: genderStr }); case "BREEDERS_IN_SPACE": return i18next.t("achv:BREEDERS_IN_SPACE.description", { context: genderStr }); default: @@ -327,43 +332,45 @@ export const achvs = { HATCH_SHINY: new Achv("HATCH_SHINY", "", "HATCH_SHINY.description", "golden_egg", 100).setSecret(), HIDDEN_ABILITY: new Achv("HIDDEN_ABILITY", "", "HIDDEN_ABILITY.description", "ability_charm", 75), PERFECT_IVS: new Achv("PERFECT_IVS", "", "PERFECT_IVS.description", "blunder_policy", 100), - CLASSIC_VICTORY: new Achv("CLASSIC_VICTORY", "", "CLASSIC_VICTORY.description", "relic_crown", 150, c => c.gameData.gameStats.sessionsWon === 0), - UNEVOLVED_CLASSIC_VICTORY: new Achv("UNEVOLVED_CLASSIC_VICTORY", "", "UNEVOLVED_CLASSIC_VICTORY.description", "eviolite", 175, c => c.getPlayerParty().some(p => p.getSpeciesForm(true).speciesId in pokemonEvolutions)), - MONO_GEN_ONE_VICTORY: new ChallengeAchv("MONO_GEN_ONE", "", "MONO_GEN_ONE.description", "ribbon_gen1", 100, (c, scene) => c instanceof SingleGenerationChallenge && c.value === 1 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), - MONO_GEN_TWO_VICTORY: new ChallengeAchv("MONO_GEN_TWO", "", "MONO_GEN_TWO.description", "ribbon_gen2", 100, (c, scene) => c instanceof SingleGenerationChallenge && c.value === 2 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), - MONO_GEN_THREE_VICTORY: new ChallengeAchv("MONO_GEN_THREE", "", "MONO_GEN_THREE.description", "ribbon_gen3", 100, (c, scene) => c instanceof SingleGenerationChallenge && c.value === 3 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), - MONO_GEN_FOUR_VICTORY: new ChallengeAchv("MONO_GEN_FOUR", "", "MONO_GEN_FOUR.description", "ribbon_gen4", 100, (c, scene) => c instanceof SingleGenerationChallenge && c.value === 4 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), - MONO_GEN_FIVE_VICTORY: new ChallengeAchv("MONO_GEN_FIVE", "", "MONO_GEN_FIVE.description", "ribbon_gen5", 100, (c, scene) => c instanceof SingleGenerationChallenge && c.value === 5 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), - MONO_GEN_SIX_VICTORY: new ChallengeAchv("MONO_GEN_SIX", "", "MONO_GEN_SIX.description", "ribbon_gen6", 100, (c, scene) => c instanceof SingleGenerationChallenge && c.value === 6 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), - MONO_GEN_SEVEN_VICTORY: new ChallengeAchv("MONO_GEN_SEVEN", "", "MONO_GEN_SEVEN.description", "ribbon_gen7", 100, (c, scene) => c instanceof SingleGenerationChallenge && c.value === 7 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), - MONO_GEN_EIGHT_VICTORY: new ChallengeAchv("MONO_GEN_EIGHT", "", "MONO_GEN_EIGHT.description", "ribbon_gen8", 100, (c, scene) => c instanceof SingleGenerationChallenge && c.value === 8 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), - MONO_GEN_NINE_VICTORY: new ChallengeAchv("MONO_GEN_NINE", "", "MONO_GEN_NINE.description", "ribbon_gen9", 100, (c, scene) => c instanceof SingleGenerationChallenge && c.value === 9 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), - MONO_NORMAL: new ChallengeAchv("MONO_NORMAL", "", "MONO_NORMAL.description", "silk_scarf", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 1 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), - MONO_FIGHTING: new ChallengeAchv("MONO_FIGHTING", "", "MONO_FIGHTING.description", "black_belt", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 2 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), - MONO_FLYING: new ChallengeAchv("MONO_FLYING", "", "MONO_FLYING.description", "sharp_beak", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 3 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), - MONO_POISON: new ChallengeAchv("MONO_POISON", "", "MONO_POISON.description", "poison_barb", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 4 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), - MONO_GROUND: new ChallengeAchv("MONO_GROUND", "", "MONO_GROUND.description", "soft_sand", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 5 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), - MONO_ROCK: new ChallengeAchv("MONO_ROCK", "", "MONO_ROCK.description", "hard_stone", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 6 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), - MONO_BUG: new ChallengeAchv("MONO_BUG", "", "MONO_BUG.description", "silver_powder", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 7 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), - MONO_GHOST: new ChallengeAchv("MONO_GHOST", "", "MONO_GHOST.description", "spell_tag", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 8 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), - MONO_STEEL: new ChallengeAchv("MONO_STEEL", "", "MONO_STEEL.description", "metal_coat", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 9 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), - MONO_FIRE: new ChallengeAchv("MONO_FIRE", "", "MONO_FIRE.description", "charcoal", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 10 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), - MONO_WATER: new ChallengeAchv("MONO_WATER", "", "MONO_WATER.description", "mystic_water", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 11 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), - MONO_GRASS: new ChallengeAchv("MONO_GRASS", "", "MONO_GRASS.description", "miracle_seed", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 12 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), - MONO_ELECTRIC: new ChallengeAchv("MONO_ELECTRIC", "", "MONO_ELECTRIC.description", "magnet", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 13 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), - MONO_PSYCHIC: new ChallengeAchv("MONO_PSYCHIC", "", "MONO_PSYCHIC.description", "twisted_spoon", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 14 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), - MONO_ICE: new ChallengeAchv("MONO_ICE", "", "MONO_ICE.description", "never_melt_ice", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 15 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), - MONO_DRAGON: new ChallengeAchv("MONO_DRAGON", "", "MONO_DRAGON.description", "dragon_fang", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 16 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), - MONO_DARK: new ChallengeAchv("MONO_DARK", "", "MONO_DARK.description", "black_glasses", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 17 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), - MONO_FAIRY: new ChallengeAchv("MONO_FAIRY", "", "MONO_FAIRY.description", "fairy_feather", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 18 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), - FRESH_START: new ChallengeAchv("FRESH_START", "", "FRESH_START.description", "reviver_seed", 100, (c, scene) => c instanceof FreshStartChallenge && c.value > 0 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), - INVERSE_BATTLE: new ChallengeAchv("INVERSE_BATTLE", "", "INVERSE_BATTLE.description", "inverse", 100, c => c instanceof InverseBattleChallenge && c.value > 0), + CLASSIC_VICTORY: new Achv("CLASSIC_VICTORY", "", "CLASSIC_VICTORY.description", "relic_crown", 150, (_) => globalScene.gameData.gameStats.sessionsWon === 0), + UNEVOLVED_CLASSIC_VICTORY: new Achv("UNEVOLVED_CLASSIC_VICTORY", "", "UNEVOLVED_CLASSIC_VICTORY.description", "eviolite", 175, (_) => globalScene.getPlayerParty().some(p => p.getSpeciesForm(true).speciesId in pokemonEvolutions)), + MONO_GEN_ONE_VICTORY: new ChallengeAchv("MONO_GEN_ONE", "", "MONO_GEN_ONE.description", "ribbon_gen1", 100, (c) => c instanceof SingleGenerationChallenge && c.value === 1 && !globalScene.gameMode.challenges.some(c => [ Challenges.INVERSE_BATTLE, Challenges.FLIP_STAT ].includes(c.id) && c.value > 0)), + MONO_GEN_TWO_VICTORY: new ChallengeAchv("MONO_GEN_TWO", "", "MONO_GEN_TWO.description", "ribbon_gen2", 100, (c) => c instanceof SingleGenerationChallenge && c.value === 2 && !globalScene.gameMode.challenges.some(c => [ Challenges.INVERSE_BATTLE, Challenges.FLIP_STAT ].includes(c.id) && c.value > 0)), + MONO_GEN_THREE_VICTORY: new ChallengeAchv("MONO_GEN_THREE", "", "MONO_GEN_THREE.description", "ribbon_gen3", 100, (c) => c instanceof SingleGenerationChallenge && c.value === 3 && !globalScene.gameMode.challenges.some(c => [ Challenges.INVERSE_BATTLE, Challenges.FLIP_STAT ].includes(c.id) && c.value > 0)), + MONO_GEN_FOUR_VICTORY: new ChallengeAchv("MONO_GEN_FOUR", "", "MONO_GEN_FOUR.description", "ribbon_gen4", 100, (c) => c instanceof SingleGenerationChallenge && c.value === 4 && !globalScene.gameMode.challenges.some(c => [ Challenges.INVERSE_BATTLE, Challenges.FLIP_STAT ].includes(c.id) && c.value > 0)), + MONO_GEN_FIVE_VICTORY: new ChallengeAchv("MONO_GEN_FIVE", "", "MONO_GEN_FIVE.description", "ribbon_gen5", 100, (c) => c instanceof SingleGenerationChallenge && c.value === 5 && !globalScene.gameMode.challenges.some(c => [ Challenges.INVERSE_BATTLE, Challenges.FLIP_STAT ].includes(c.id) && c.value > 0)), + MONO_GEN_SIX_VICTORY: new ChallengeAchv("MONO_GEN_SIX", "", "MONO_GEN_SIX.description", "ribbon_gen6", 100, (c) => c instanceof SingleGenerationChallenge && c.value === 6 && !globalScene.gameMode.challenges.some(c => [ Challenges.INVERSE_BATTLE, Challenges.FLIP_STAT ].includes(c.id) && c.value > 0)), + MONO_GEN_SEVEN_VICTORY: new ChallengeAchv("MONO_GEN_SEVEN", "", "MONO_GEN_SEVEN.description", "ribbon_gen7", 100, (c) => c instanceof SingleGenerationChallenge && c.value === 7 && !globalScene.gameMode.challenges.some(c => [ Challenges.INVERSE_BATTLE, Challenges.FLIP_STAT ].includes(c.id) && c.value > 0)), + MONO_GEN_EIGHT_VICTORY: new ChallengeAchv("MONO_GEN_EIGHT", "", "MONO_GEN_EIGHT.description", "ribbon_gen8", 100, (c) => c instanceof SingleGenerationChallenge && c.value === 8 && !globalScene.gameMode.challenges.some(c => [ Challenges.INVERSE_BATTLE, Challenges.FLIP_STAT ].includes(c.id) && c.value > 0)), + MONO_GEN_NINE_VICTORY: new ChallengeAchv("MONO_GEN_NINE", "", "MONO_GEN_NINE.description", "ribbon_gen9", 100, (c) => c instanceof SingleGenerationChallenge && c.value === 9 && !globalScene.gameMode.challenges.some(c => [ Challenges.INVERSE_BATTLE, Challenges.FLIP_STAT ].includes(c.id) && c.value > 0)), + MONO_NORMAL: new ChallengeAchv("MONO_NORMAL", "", "MONO_NORMAL.description", "silk_scarf", 100, (c) => c instanceof SingleTypeChallenge && c.value === 1 && !globalScene.gameMode.challenges.some(c => [ Challenges.INVERSE_BATTLE, Challenges.FLIP_STAT ].includes(c.id) && c.value > 0)), + MONO_FIGHTING: new ChallengeAchv("MONO_FIGHTING", "", "MONO_FIGHTING.description", "black_belt", 100, (c) => c instanceof SingleTypeChallenge && c.value === 2 && !globalScene.gameMode.challenges.some(c => [ Challenges.INVERSE_BATTLE, Challenges.FLIP_STAT ].includes(c.id) && c.value > 0)), + MONO_FLYING: new ChallengeAchv("MONO_FLYING", "", "MONO_FLYING.description", "sharp_beak", 100, (c) => c instanceof SingleTypeChallenge && c.value === 3 && !globalScene.gameMode.challenges.some(c => [ Challenges.INVERSE_BATTLE, Challenges.FLIP_STAT ].includes(c.id) && c.value > 0)), + MONO_POISON: new ChallengeAchv("MONO_POISON", "", "MONO_POISON.description", "poison_barb", 100, (c) => c instanceof SingleTypeChallenge && c.value === 4 && !globalScene.gameMode.challenges.some(c => [ Challenges.INVERSE_BATTLE, Challenges.FLIP_STAT ].includes(c.id) && c.value > 0)), + MONO_GROUND: new ChallengeAchv("MONO_GROUND", "", "MONO_GROUND.description", "soft_sand", 100, (c) => c instanceof SingleTypeChallenge && c.value === 5 && !globalScene.gameMode.challenges.some(c => [ Challenges.INVERSE_BATTLE, Challenges.FLIP_STAT ].includes(c.id) && c.value > 0)), + MONO_ROCK: new ChallengeAchv("MONO_ROCK", "", "MONO_ROCK.description", "hard_stone", 100, (c) => c instanceof SingleTypeChallenge && c.value === 6 && !globalScene.gameMode.challenges.some(c => [ Challenges.INVERSE_BATTLE, Challenges.FLIP_STAT ].includes(c.id) && c.value > 0)), + MONO_BUG: new ChallengeAchv("MONO_BUG", "", "MONO_BUG.description", "silver_powder", 100, (c) => c instanceof SingleTypeChallenge && c.value === 7 && !globalScene.gameMode.challenges.some(c => [ Challenges.INVERSE_BATTLE, Challenges.FLIP_STAT ].includes(c.id) && c.value > 0)), + MONO_GHOST: new ChallengeAchv("MONO_GHOST", "", "MONO_GHOST.description", "spell_tag", 100, (c) => c instanceof SingleTypeChallenge && c.value === 8 && !globalScene.gameMode.challenges.some(c => [ Challenges.INVERSE_BATTLE, Challenges.FLIP_STAT ].includes(c.id) && c.value > 0)), + MONO_STEEL: new ChallengeAchv("MONO_STEEL", "", "MONO_STEEL.description", "metal_coat", 100, (c) => c instanceof SingleTypeChallenge && c.value === 9 && !globalScene.gameMode.challenges.some(c => [ Challenges.INVERSE_BATTLE, Challenges.FLIP_STAT ].includes(c.id) && c.value > 0)), + MONO_FIRE: new ChallengeAchv("MONO_FIRE", "", "MONO_FIRE.description", "charcoal", 100, (c) => c instanceof SingleTypeChallenge && c.value === 10 && !globalScene.gameMode.challenges.some(c => [ Challenges.INVERSE_BATTLE, Challenges.FLIP_STAT ].includes(c.id) && c.value > 0)), + MONO_WATER: new ChallengeAchv("MONO_WATER", "", "MONO_WATER.description", "mystic_water", 100, (c) => c instanceof SingleTypeChallenge && c.value === 11 && !globalScene.gameMode.challenges.some(c => [ Challenges.INVERSE_BATTLE, Challenges.FLIP_STAT ].includes(c.id) && c.value > 0)), + MONO_GRASS: new ChallengeAchv("MONO_GRASS", "", "MONO_GRASS.description", "miracle_seed", 100, (c) => c instanceof SingleTypeChallenge && c.value === 12 && !globalScene.gameMode.challenges.some(c => [ Challenges.INVERSE_BATTLE, Challenges.FLIP_STAT ].includes(c.id) && c.value > 0)), + MONO_ELECTRIC: new ChallengeAchv("MONO_ELECTRIC", "", "MONO_ELECTRIC.description", "magnet", 100, (c) => c instanceof SingleTypeChallenge && c.value === 13 && !globalScene.gameMode.challenges.some(c => [ Challenges.INVERSE_BATTLE, Challenges.FLIP_STAT ].includes(c.id) && c.value > 0)), + MONO_PSYCHIC: new ChallengeAchv("MONO_PSYCHIC", "", "MONO_PSYCHIC.description", "twisted_spoon", 100, (c) => c instanceof SingleTypeChallenge && c.value === 14 && !globalScene.gameMode.challenges.some(c => [ Challenges.INVERSE_BATTLE, Challenges.FLIP_STAT ].includes(c.id) && c.value > 0)), + MONO_ICE: new ChallengeAchv("MONO_ICE", "", "MONO_ICE.description", "never_melt_ice", 100, (c) => c instanceof SingleTypeChallenge && c.value === 15 && !globalScene.gameMode.challenges.some(c => [ Challenges.INVERSE_BATTLE, Challenges.FLIP_STAT ].includes(c.id) && c.value > 0)), + MONO_DRAGON: new ChallengeAchv("MONO_DRAGON", "", "MONO_DRAGON.description", "dragon_fang", 100, (c) => c instanceof SingleTypeChallenge && c.value === 16 && !globalScene.gameMode.challenges.some(c => [ Challenges.INVERSE_BATTLE, Challenges.FLIP_STAT ].includes(c.id) && c.value > 0)), + MONO_DARK: new ChallengeAchv("MONO_DARK", "", "MONO_DARK.description", "black_glasses", 100, (c) => c instanceof SingleTypeChallenge && c.value === 17 && !globalScene.gameMode.challenges.some(c => [ Challenges.INVERSE_BATTLE, Challenges.FLIP_STAT ].includes(c.id) && c.value > 0)), + MONO_FAIRY: new ChallengeAchv("MONO_FAIRY", "", "MONO_FAIRY.description", "fairy_feather", 100, (c) => c instanceof SingleTypeChallenge && c.value === 18 && !globalScene.gameMode.challenges.some(c => [ Challenges.INVERSE_BATTLE, Challenges.FLIP_STAT ].includes(c.id) && c.value > 0)), + FRESH_START: new ChallengeAchv("FRESH_START", "", "FRESH_START.description", "reviver_seed", 100, (c) => c instanceof FreshStartChallenge && c.value > 0 && !globalScene.gameMode.challenges.some(c => [ Challenges.INVERSE_BATTLE, Challenges.FLIP_STAT ].includes(c.id) && c.value > 0)), + INVERSE_BATTLE: new ChallengeAchv("INVERSE_BATTLE", "", "INVERSE_BATTLE.description", "inverse", 100, (c) => c instanceof InverseBattleChallenge && c.value > 0), + FLIP_STATS: new ChallengeAchv("FLIP_STATS", "", "FLIP_STATS.description", "dubious_disc", 100, (c) => c instanceof FlipStatChallenge && c.value > 0), + FLIP_INVERSE: new ChallengeAchv("FLIP_INVERSE", "", "FLIP_INVERSE.description", "cracked_pot", 100, (c) => c instanceof FlipStatChallenge && c.value > 0 && globalScene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)).setSecret(), BREEDERS_IN_SPACE: new Achv("BREEDERS_IN_SPACE", "", "BREEDERS_IN_SPACE.description", "moon_stone", 50).setSecret(), }; export function initAchievements() { const achvKeys = Object.keys(achvs); - achvKeys.forEach((a: string, i: integer) => { + achvKeys.forEach((a: string, i: number) => { achvs[a].id = a; if (achvs[a].hasParent) { achvs[a].parentId = achvKeys[i - 1]; diff --git a/src/system/arena-data.ts b/src/system/arena-data.ts index ba37de0ed0e..518acb55c89 100644 --- a/src/system/arena-data.ts +++ b/src/system/arena-data.ts @@ -1,6 +1,7 @@ import { Arena } from "../field/arena"; -import { ArenaTag, loadArenaTag } from "../data/arena-tag"; -import { Biome } from "#enums/biome"; +import type { ArenaTag } from "../data/arena-tag"; +import { loadArenaTag } from "../data/arena-tag"; +import type { Biome } from "#enums/biome"; import { Weather } from "../data/weather"; import { Terrain } from "#app/data/terrain"; @@ -9,12 +10,14 @@ export default class ArenaData { public weather: Weather | null; public terrain: Terrain | null; public tags: ArenaTag[]; + public playerTerasUsed: number; constructor(source: Arena | any) { const sourceArena = source instanceof Arena ? source as Arena : null; this.biome = sourceArena ? sourceArena.biomeType : source.biome; this.weather = sourceArena ? sourceArena.weather : source.weather ? new Weather(source.weather.weatherType, source.weather.turnsLeft) : null; this.terrain = sourceArena ? sourceArena.terrain : source.terrain ? new Terrain(source.terrain.terrainType, source.terrain.turnsLeft) : null; + this.playerTerasUsed = (sourceArena ? sourceArena.playerTerasUsed : source.playerTerasUsed) ?? 0; this.tags = []; if (source.tags) { diff --git a/src/system/challenge-data.ts b/src/system/challenge-data.ts index 394d63867be..87299ae653a 100644 --- a/src/system/challenge-data.ts +++ b/src/system/challenge-data.ts @@ -1,9 +1,10 @@ -import { Challenge, copyChallenge } from "#app/data/challenge"; +import type { Challenge } from "#app/data/challenge"; +import { copyChallenge } from "#app/data/challenge"; export default class ChallengeData { - public id: integer; - public value: integer; - public severity: integer; + public id: number; + public value: number; + public severity: number; constructor(source: Challenge | any) { this.id = source.id; diff --git a/src/system/egg-data.ts b/src/system/egg-data.ts index aa06316a61f..8296c2da98e 100644 --- a/src/system/egg-data.ts +++ b/src/system/egg-data.ts @@ -1,15 +1,15 @@ -import { EggTier } from "#enums/egg-type"; -import { Species } from "#enums/species"; -import { VariantTier } from "#enums/variant-tier"; +import type { EggTier } from "#enums/egg-type"; +import type { Species } from "#enums/species"; +import type { VariantTier } from "#enums/variant-tier"; import { EGG_SEED, Egg } from "../data/egg"; -import { EggSourceType } from "#app/enums/egg-source-types"; +import type { EggSourceType } from "#app/enums/egg-source-types"; export default class EggData { - public id: integer; + public id: number; public tier: EggTier; public sourceType: EggSourceType; - public hatchWaves: integer; - public timestamp: integer; + public hatchWaves: number; + public timestamp: number; public variantTier: VariantTier; public isShiny: boolean; public species: Species; diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 3e3a6ce8f8b..aefc583a98a 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -1,8 +1,12 @@ import i18next from "i18next"; -import BattleScene, { bypassLogin, PokeballCounts } from "#app/battle-scene"; -import Pokemon, { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; +import type { PokeballCounts } from "#app/battle-scene"; +import { bypassLogin } from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; +import type { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; import { pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; -import PokemonSpecies, { allSpecies, getPokemonSpecies, noStarterFormKeys } from "#app/data/pokemon-species"; +import type PokemonSpecies from "#app/data/pokemon-species"; +import { allSpecies, getPokemonSpecies } from "#app/data/pokemon-species"; import { speciesStarterCosts } from "#app/data/balance/starters"; import * as Utils from "#app/utils"; import Overrides from "#app/overrides"; @@ -17,7 +21,7 @@ import { trainerConfigs } from "#app/data/trainer-config"; import { resetSettings, setSetting, SettingKeys } from "#app/system/settings/settings"; import { achvs } from "#app/system/achv"; import EggData from "#app/system/egg-data"; -import { Egg } from "#app/data/egg"; +import type { Egg } from "#app/data/egg"; import { vouchers, VoucherType } from "#app/system/voucher"; import { AES, enc } from "crypto-js"; import { Mode } from "#app/ui/ui"; @@ -28,16 +32,17 @@ import { Tutorial } from "#app/tutorial"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; import { allMoves } from "#app/data/move"; import { TrainerVariant } from "#app/field/trainer"; -import { Variant } from "#app/data/variant"; +import type { Variant } from "#app/data/variant"; import { setSettingGamepad, SettingGamepad, settingGamepadDefaults } from "#app/system/settings/settings-gamepad"; -import { setSettingKeyboard, SettingKeyboard } from "#app/system/settings/settings-keyboard"; +import type { SettingKeyboard } from "#app/system/settings/settings-keyboard"; +import { setSettingKeyboard } from "#app/system/settings/settings-keyboard"; import { TagAddedEvent, TerrainChangedEvent, WeatherChangedEvent } from "#app/events/arena"; import * as Modifier from "#app/modifier/modifier"; import { StatusEffect } from "#enums/status-effect"; import ChallengeData from "#app/system/challenge-data"; import { Device } from "#enums/devices"; import { GameDataType } from "#enums/game-data-type"; -import { Moves } from "#enums/moves"; +import type { Moves } from "#enums/moves"; import { PlayerGender } from "#enums/player-gender"; import { Species } from "#enums/species"; import { applyChallenges, ChallengeType } from "#app/data/challenge"; @@ -47,9 +52,11 @@ import { ReloadSessionPhase } from "#app/phases/reload-session-phase"; import { RUN_HISTORY_LIMIT } from "#app/ui/run-history-ui-handler"; import { applySessionVersionMigration, applySystemVersionMigration, applySettingsVersionMigration } from "./version_migration/version_converter"; import { MysteryEncounterSaveData } from "#app/data/mystery-encounters/mystery-encounter-save-data"; -import { MysteryEncounterType } from "#enums/mystery-encounter-type"; +import type { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; import { ArenaTrapTag } from "#app/data/arena-tag"; +import { pokemonFormChanges } from "#app/data/pokemon-forms"; +import type { Type } from "#enums/type"; export const defaultStarterSpecies: Species[] = [ Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE, @@ -65,7 +72,7 @@ export const defaultStarterSpecies: Species[] = [ const saveKey = "x0i2O7WRiANTqPmZ"; // Temporary; secure encryption is not yet necessary -export function getDataTypeKey(dataType: GameDataType, slotId: integer = 0): string { +export function getDataTypeKey(dataType: GameDataType, slotId: number = 0): string { switch (dataType) { case GameDataType.SYSTEM: return "data"; @@ -99,8 +106,8 @@ export function decrypt(data: string, bypassLogin: boolean): string { } export interface SystemSaveData { - trainerId: integer; - secretId: integer; + trainerId: number; + secretId: number; gender: PlayerGender; dexData: DexData; starterData: StarterData; @@ -111,14 +118,14 @@ export interface SystemSaveData { voucherCounts: VoucherCounts; eggs: EggData[]; gameVersion: string; - timestamp: integer; - eggPity: integer[]; - unlockPity: integer[]; + timestamp: number; + eggPity: number[]; + unlockPity: number[]; } export interface SessionSaveData { seed: string; - playTime: integer; + playTime: number; gameMode: GameModes; party: PokemonData[]; enemyParty: PokemonData[]; @@ -126,46 +133,50 @@ export interface SessionSaveData { enemyModifiers: PersistentModifierData[]; arena: ArenaData; pokeballCounts: PokeballCounts; - money: integer; - score: integer; - waveIndex: integer; + money: number; + score: number; + waveIndex: number; battleType: BattleType; trainer: TrainerData; gameVersion: string; - timestamp: integer; + timestamp: number; challenges: ChallengeData[]; mysteryEncounterType: MysteryEncounterType | -1; // Only defined when current wave is ME, mysteryEncounterSaveData: MysteryEncounterSaveData; + /** + * Counts the amount of pokemon fainted in your party during the current arena encounter. + */ + playerFaints: number; } interface Unlocks { - [key: integer]: boolean; + [key: number]: boolean; } interface AchvUnlocks { - [key: string]: integer + [key: string]: number } interface VoucherUnlocks { - [key: string]: integer + [key: string]: number } export interface VoucherCounts { - [type: string]: integer; + [type: string]: number; } export interface DexData { - [key: integer]: DexEntry + [key: number]: DexEntry } export interface DexEntry { seenAttr: bigint; caughtAttr: bigint; - natureAttr: integer, - seenCount: integer; - caughtCount: integer; - hatchedCount: integer; - ivs: integer[]; + natureAttr: number, + seenCount: number; + caughtCount: number; + hatchedCount: number; + ivs: number[]; } export const DexAttr = { @@ -183,7 +194,7 @@ export interface DexAttrProps { shiny: boolean; female: boolean; variant: Variant; - formIndex: integer; + formIndex: number; } export const AbilityAttr = { @@ -204,26 +215,27 @@ export interface RunEntry { export type StarterMoveset = [ Moves ] | [ Moves, Moves ] | [ Moves, Moves, Moves ] | [ Moves, Moves, Moves, Moves ]; export interface StarterFormMoveData { - [key: integer]: StarterMoveset + [key: number]: StarterMoveset } export interface StarterMoveData { - [key: integer]: StarterMoveset | StarterFormMoveData + [key: number]: StarterMoveset | StarterFormMoveData } export interface StarterAttributes { - nature?: integer; - ability?: integer; - variant?: integer; - form?: integer; + nature?: number; + ability?: number; + variant?: number; + form?: number; female?: boolean; shiny?: boolean; favorite?: boolean; nickname?: string; + tera?: Type; } export interface StarterPreferences { - [key: integer]: StarterAttributes; + [key: number]: StarterAttributes; } // 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. @@ -258,17 +270,17 @@ export class StarterPrefs { export interface StarterDataEntry { moveset: StarterMoveset | StarterFormMoveData | null; - eggMoves: integer; - candyCount: integer; - friendship: integer; - abilityAttr: integer; - passiveAttr: integer; - valueReduction: integer; - classicWinCount: integer; + eggMoves: number; + candyCount: number; + friendship: number; + abilityAttr: number; + passiveAttr: number; + valueReduction: number; + classicWinCount: number; } export interface StarterData { - [key: integer]: StarterDataEntry + [key: number]: StarterDataEntry } export interface TutorialFlags { @@ -298,10 +310,8 @@ const systemShortKeys = { }; export class GameData { - private scene: BattleScene; - - public trainerId: integer; - public secretId: integer; + public trainerId: number; + public secretId: number; public gender: PlayerGender; @@ -320,11 +330,10 @@ export class GameData { public voucherUnlocks: VoucherUnlocks; public voucherCounts: VoucherCounts; public eggs: Egg[]; - public eggPity: integer[]; - public unlockPity: integer[]; + public eggPity: number[]; + public unlockPity: number[]; - constructor(scene: BattleScene) { - this.scene = scene; + constructor() { this.loadSettings(); this.loadGamepadSettings(); this.loadMappingConfigs(); @@ -367,7 +376,7 @@ export class GameData { voucherUnlocks: this.voucherUnlocks, voucherCounts: this.voucherCounts, eggs: this.eggs.map(e => new EggData(e)), - gameVersion: this.scene.game.config.gameVersion, + gameVersion: globalScene.game.config.gameVersion, timestamp: new Date().getTime(), eggPity: this.eggPity.slice(0), unlockPity: this.unlockPity.slice(0) @@ -388,7 +397,7 @@ export class GameData { public saveSystem(): Promise { return new Promise(resolve => { - this.scene.ui.savingIcon.show(); + globalScene.ui.savingIcon.show(); const data = this.getSystemSaveData(); const maxIntAttrValue = 0x80000000; @@ -399,11 +408,11 @@ export class GameData { if (!bypassLogin) { pokerogueApi.savedata.system.update({ clientSessionId }, systemData) .then(error => { - this.scene.ui.savingIcon.hide(); + globalScene.ui.savingIcon.hide(); if (error) { if (error.startsWith("session out of date")) { - this.scene.clearPhaseQueue(); - this.scene.unshiftPhase(new ReloadSessionPhase(this.scene)); + globalScene.clearPhaseQueue(); + globalScene.unshiftPhase(new ReloadSessionPhase()); } console.error(error); return resolve(false); @@ -411,7 +420,7 @@ export class GameData { resolve(true); }); } else { - this.scene.ui.savingIcon.hide(); + globalScene.ui.savingIcon.hide(); resolve(true); } @@ -431,10 +440,10 @@ export class GameData { .then(saveDataOrErr => { if (!saveDataOrErr || saveDataOrErr.length === 0 || saveDataOrErr[0] !== "{") { if (saveDataOrErr?.startsWith("sql: no rows in result set")) { - this.scene.queueMessage("Save data could not be found. If this is a new account, you can safely ignore this message.", null, true); + globalScene.queueMessage("Save data could not be found. If this is a new account, you can safely ignore this message.", null, true); return resolve(true); } else if (saveDataOrErr?.includes("Too many connections")) { - this.scene.queueMessage("Too many people are trying to connect and the server is overloaded. Please try again later.", null, true); + globalScene.queueMessage("Too many people are trying to connect and the server is overloaded. Please try again later.", null, true); return resolve(false); } console.error(saveDataOrErr); @@ -574,7 +583,7 @@ export class GameData { * Retrieves current run history data, organized by time stamp. * At the moment, only retrievable from locale cache */ - async getRunHistoryData(scene: BattleScene): Promise { + async getRunHistoryData(): Promise { if (!Utils.isLocal) { /** * Networking Code DO NOT DELETE! @@ -623,13 +632,12 @@ export class GameData { /** * Saves a new entry to Run History - * @param scene: BattleScene object * @param runEntry: most recent SessionSaveData of the run * @param isVictory: result of the run * Arbitrary limit of 25 runs per player - Will delete runs, starting with the oldest one, if needed */ - async saveRunHistory(scene: BattleScene, runEntry : SessionSaveData, isVictory: boolean): Promise { - const runHistoryData = await this.getRunHistoryData(scene); + async saveRunHistory(runEntry : SessionSaveData, isVictory: boolean): Promise { + const runHistoryData = await this.getRunHistoryData(); // runHistoryData should always return run history or {} empty object let timestamps = Object.keys(runHistoryData).map(Number); @@ -707,8 +715,8 @@ export class GameData { const systemData = await pokerogueApi.savedata.system.verify({ clientSessionId }); if (systemData) { - this.scene.clearPhaseQueue(); - this.scene.unshiftPhase(new ReloadSessionPhase(this.scene, JSON.stringify(systemData))); + globalScene.clearPhaseQueue(); + globalScene.unshiftPhase(new ReloadSessionPhase(JSON.stringify(systemData))); this.clearLocalData(); return false; } @@ -732,16 +740,16 @@ export class GameData { * @param valueIndex index of the setting's option * @returns true */ - public saveSetting(setting: string, valueIndex: integer): boolean { + public saveSetting(setting: string, valueIndex: number): boolean { let settings: object = {}; if (localStorage.hasOwnProperty("settings")) { settings = JSON.parse(localStorage.getItem("settings")!); // TODO: is this bang correct? } - setSetting(this.scene, setting, valueIndex); + setSetting(setting, valueIndex); settings[setting] = valueIndex; - settings["gameVersion"] = this.scene.game.config.gameVersion; + settings["gameVersion"] = globalScene.game.config.gameVersion; localStorage.setItem("settings", JSON.stringify(settings)); @@ -787,7 +795,7 @@ export class GameData { const mappingConfigs = JSON.parse(localStorage.getItem("mappingConfigs")!); // Parse the existing 'mappingConfigs' from localStorage // TODO: is this bang correct? for (const key of Object.keys(mappingConfigs)) {// Iterate over the keys of the mapping configurations - this.scene.inputController.injectConfig(key, mappingConfigs[key]); + globalScene.inputController.injectConfig(key, mappingConfigs[key]); } // Inject each configuration into the input controller for the corresponding key return true; // Return true to indicate the operation was successful @@ -798,7 +806,7 @@ export class GameData { return false; } // If 'mappingConfigs' does not exist, return false localStorage.removeItem("mappingConfigs"); - this.scene.inputController.resetConfigs(); + globalScene.inputController.resetConfigs(); return true; // TODO: is `true` the correct return value? } @@ -815,7 +823,7 @@ export class GameData { * to update the specified setting with the new value. Finally, it saves the updated settings back * to localStorage and returns `true` to indicate success. */ - public saveControlSetting(device: Device, localStoragePropertyName: string, setting: SettingGamepad|SettingKeyboard, settingDefaults, valueIndex: integer): boolean { + public saveControlSetting(device: Device, localStoragePropertyName: string, setting: SettingGamepad|SettingKeyboard, settingDefaults, valueIndex: number): boolean { let settingsControls: object = {}; // Initialize an empty object to hold the gamepad settings if (localStorage.hasOwnProperty(localStoragePropertyName)) { // Check if 'settingsControls' exists in localStorage @@ -823,9 +831,9 @@ export class GameData { } if (device === Device.GAMEPAD) { - setSettingGamepad(this.scene, setting as SettingGamepad, valueIndex); // Set the gamepad setting in the current scene + setSettingGamepad(setting as SettingGamepad, valueIndex); } else if (device === Device.KEYBOARD) { - setSettingKeyboard(this.scene, setting as SettingKeyboard, valueIndex); // Set the keyboard setting in the current scene + setSettingKeyboard(setting as SettingKeyboard, valueIndex); } Object.keys(settingDefaults).forEach(s => { // Iterate over the default gamepad settings @@ -844,7 +852,7 @@ export class GameData { * @returns true if succesful, false if not */ private loadSettings(): boolean { - resetSettings(this.scene); + resetSettings(); if (!localStorage.hasOwnProperty("settings")) { return false; @@ -855,14 +863,14 @@ export class GameData { applySettingsVersionMigration(settings); for (const setting of Object.keys(settings)) { - setSetting(this.scene, setting, settings[setting]); + setSetting(setting, settings[setting]); } return true; // TODO: is `true` the correct return value? } private loadGamepadSettings(): boolean { - Object.values(SettingGamepad).map(setting => setting as SettingGamepad).forEach(setting => setSettingGamepad(this.scene, setting, settingGamepadDefaults[setting])); + Object.values(SettingGamepad).map(setting => setting as SettingGamepad).forEach(setting => setSettingGamepad(setting, settingGamepadDefaults[setting])); if (!localStorage.hasOwnProperty("settingsGamepad")) { return false; @@ -870,7 +878,7 @@ export class GameData { const settingsGamepad = JSON.parse(localStorage.getItem("settingsGamepad")!); // TODO: is this bang correct? for (const setting of Object.keys(settingsGamepad)) { - setSettingGamepad(this.scene, setting as SettingGamepad, settingsGamepad[setting]); + setSettingGamepad(setting as SettingGamepad, settingsGamepad[setting]); } return true; // TODO: is `true` the correct return value? @@ -943,31 +951,32 @@ export class GameData { return ret; } - public getSessionSaveData(scene: BattleScene): SessionSaveData { + public getSessionSaveData(): SessionSaveData { return { - seed: scene.seed, - playTime: scene.sessionPlayTime, - gameMode: scene.gameMode.modeId, - party: scene.getPlayerParty().map(p => new PokemonData(p)), - enemyParty: scene.getEnemyParty().map(p => new PokemonData(p)), - modifiers: scene.findModifiers(() => true).map(m => new PersistentModifierData(m, true)), - enemyModifiers: scene.findModifiers(() => true, false).map(m => new PersistentModifierData(m, false)), - arena: new ArenaData(scene.arena), - pokeballCounts: scene.pokeballCounts, - money: Math.floor(scene.money), - score: scene.score, - waveIndex: scene.currentBattle.waveIndex, - battleType: scene.currentBattle.battleType, - trainer: scene.currentBattle.battleType === BattleType.TRAINER ? new TrainerData(scene.currentBattle.trainer) : null, - gameVersion: scene.game.config.gameVersion, + seed: globalScene.seed, + playTime: globalScene.sessionPlayTime, + gameMode: globalScene.gameMode.modeId, + party: globalScene.getPlayerParty().map(p => new PokemonData(p)), + enemyParty: globalScene.getEnemyParty().map(p => new PokemonData(p)), + modifiers: globalScene.findModifiers(() => true).map(m => new PersistentModifierData(m, true)), + enemyModifiers: globalScene.findModifiers(() => true, false).map(m => new PersistentModifierData(m, false)), + arena: new ArenaData(globalScene.arena), + pokeballCounts: globalScene.pokeballCounts, + money: Math.floor(globalScene.money), + score: globalScene.score, + waveIndex: globalScene.currentBattle.waveIndex, + battleType: globalScene.currentBattle.battleType, + trainer: globalScene.currentBattle.battleType === BattleType.TRAINER ? new TrainerData(globalScene.currentBattle.trainer) : null, + gameVersion: globalScene.game.config.gameVersion, timestamp: new Date().getTime(), - challenges: scene.gameMode.challenges.map(c => new ChallengeData(c)), - mysteryEncounterType: scene.currentBattle.mysteryEncounter?.encounterType ?? -1, - mysteryEncounterSaveData: scene.mysteryEncounterSaveData + challenges: globalScene.gameMode.challenges.map(c => new ChallengeData(c)), + mysteryEncounterType: globalScene.currentBattle.mysteryEncounter?.encounterType ?? -1, + mysteryEncounterSaveData: globalScene.mysteryEncounterSaveData, + playerFaints: globalScene.arena.playerFaints } as SessionSaveData; } - getSession(slotId: integer): Promise { + getSession(slotId: number): Promise { return new Promise(async (resolve, reject) => { if (slotId < 0) { return resolve(null); @@ -1005,68 +1014,68 @@ export class GameData { }); } - loadSession(scene: BattleScene, slotId: integer, sessionData?: SessionSaveData): Promise { + loadSession(slotId: number, sessionData?: SessionSaveData): Promise { return new Promise(async (resolve, reject) => { try { const initSessionFromData = async (sessionData: SessionSaveData) => { console.debug(sessionData); - scene.gameMode = getGameMode(sessionData.gameMode || GameModes.CLASSIC); + globalScene.gameMode = getGameMode(sessionData.gameMode || GameModes.CLASSIC); if (sessionData.challenges) { - scene.gameMode.challenges = sessionData.challenges.map(c => c.toChallenge()); + globalScene.gameMode.challenges = sessionData.challenges.map(c => c.toChallenge()); } - scene.setSeed(sessionData.seed || scene.game.config.seed[0]); - scene.resetSeed(); + globalScene.setSeed(sessionData.seed || globalScene.game.config.seed[0]); + globalScene.resetSeed(); - console.log("Seed:", scene.seed); + console.log("Seed:", globalScene.seed); - scene.sessionPlayTime = sessionData.playTime || 0; - scene.lastSavePlayTime = 0; + globalScene.sessionPlayTime = sessionData.playTime || 0; + globalScene.lastSavePlayTime = 0; const loadPokemonAssets: Promise[] = []; - const party = scene.getPlayerParty(); + const party = globalScene.getPlayerParty(); party.splice(0, party.length); for (const p of sessionData.party) { - const pokemon = p.toPokemon(scene) as PlayerPokemon; + const pokemon = p.toPokemon() as PlayerPokemon; pokemon.setVisible(false); loadPokemonAssets.push(pokemon.loadAssets()); party.push(pokemon); } - Object.keys(scene.pokeballCounts).forEach((key: string) => { - scene.pokeballCounts[key] = sessionData.pokeballCounts[key] || 0; + Object.keys(globalScene.pokeballCounts).forEach((key: string) => { + globalScene.pokeballCounts[key] = sessionData.pokeballCounts[key] || 0; }); if (Overrides.POKEBALL_OVERRIDE.active) { - scene.pokeballCounts = Overrides.POKEBALL_OVERRIDE.pokeballs; + globalScene.pokeballCounts = Overrides.POKEBALL_OVERRIDE.pokeballs; } - scene.money = Math.floor(sessionData.money || 0); - scene.updateMoneyText(); + globalScene.money = Math.floor(sessionData.money || 0); + globalScene.updateMoneyText(); - if (scene.money > this.gameStats.highestMoney) { - this.gameStats.highestMoney = scene.money; + if (globalScene.money > this.gameStats.highestMoney) { + this.gameStats.highestMoney = globalScene.money; } - scene.score = sessionData.score; - scene.updateScoreText(); + globalScene.score = sessionData.score; + globalScene.updateScoreText(); - scene.mysteryEncounterSaveData = new MysteryEncounterSaveData(sessionData.mysteryEncounterSaveData); + globalScene.mysteryEncounterSaveData = new MysteryEncounterSaveData(sessionData.mysteryEncounterSaveData); - scene.newArena(sessionData.arena.biome); + globalScene.newArena(sessionData.arena.biome, sessionData.playerFaints); const battleType = sessionData.battleType || 0; const trainerConfig = sessionData.trainer ? trainerConfigs[sessionData.trainer.trainerType] : null; const mysteryEncounterType = sessionData.mysteryEncounterType !== -1 ? sessionData.mysteryEncounterType : undefined; - const battle = scene.newBattle(sessionData.waveIndex, battleType, sessionData.trainer, battleType === BattleType.TRAINER ? trainerConfig?.doubleOnly || sessionData.trainer?.variant === TrainerVariant.DOUBLE : sessionData.enemyParty.length > 1, mysteryEncounterType)!; // TODO: is this bang correct? + const battle = globalScene.newBattle(sessionData.waveIndex, battleType, sessionData.trainer, battleType === BattleType.TRAINER ? trainerConfig?.doubleOnly || sessionData.trainer?.variant === TrainerVariant.DOUBLE : sessionData.enemyParty.length > 1, mysteryEncounterType)!; // TODO: is this bang correct? battle.enemyLevels = sessionData.enemyParty.map(p => p.level); - scene.arena.init(); + globalScene.arena.init(); sessionData.enemyParty.forEach((enemyData, e) => { - const enemyPokemon = enemyData.toPokemon(scene, battleType, e, sessionData.trainer?.variant === TrainerVariant.DOUBLE) as EnemyPokemon; + const enemyPokemon = enemyData.toPokemon(battleType, e, sessionData.trainer?.variant === TrainerVariant.DOUBLE) as EnemyPokemon; battle.enemyParty[e] = enemyPokemon; if (battleType === BattleType.WILD) { battle.seenEnemyPartyMemberIds.add(enemyPokemon.id); @@ -1075,41 +1084,43 @@ export class GameData { loadPokemonAssets.push(enemyPokemon.loadAssets()); }); - scene.arena.weather = sessionData.arena.weather; - scene.arena.eventTarget.dispatchEvent(new WeatherChangedEvent(WeatherType.NONE, scene.arena.weather?.weatherType!, scene.arena.weather?.turnsLeft!)); // TODO: is this bang correct? + globalScene.arena.weather = sessionData.arena.weather; + globalScene.arena.eventTarget.dispatchEvent(new WeatherChangedEvent(WeatherType.NONE, globalScene.arena.weather?.weatherType!, globalScene.arena.weather?.turnsLeft!)); // TODO: is this bang correct? - scene.arena.terrain = sessionData.arena.terrain; - scene.arena.eventTarget.dispatchEvent(new TerrainChangedEvent(TerrainType.NONE, scene.arena.terrain?.terrainType!, scene.arena.terrain?.turnsLeft!)); // TODO: is this bang correct? + globalScene.arena.terrain = sessionData.arena.terrain; + globalScene.arena.eventTarget.dispatchEvent(new TerrainChangedEvent(TerrainType.NONE, globalScene.arena.terrain?.terrainType!, globalScene.arena.terrain?.turnsLeft!)); // TODO: is this bang correct? - scene.arena.tags = sessionData.arena.tags; - if (scene.arena.tags) { - for (const tag of scene.arena.tags) { + globalScene.arena.playerTerasUsed = sessionData.arena.playerTerasUsed; + + globalScene.arena.tags = sessionData.arena.tags; + if (globalScene.arena.tags) { + for (const tag of globalScene.arena.tags) { if (tag instanceof ArenaTrapTag) { const { tagType, side, turnCount, layers, maxLayers } = tag as ArenaTrapTag; - scene.arena.eventTarget.dispatchEvent(new TagAddedEvent(tagType, side, turnCount, layers, maxLayers)); + globalScene.arena.eventTarget.dispatchEvent(new TagAddedEvent(tagType, side, turnCount, layers, maxLayers)); } else { - scene.arena.eventTarget.dispatchEvent(new TagAddedEvent(tag.tagType, tag.side, tag.turnCount)); + globalScene.arena.eventTarget.dispatchEvent(new TagAddedEvent(tag.tagType, tag.side, tag.turnCount)); } } } for (const modifierData of sessionData.modifiers) { - const modifier = modifierData.toModifier(scene, Modifier[modifierData.className]); + const modifier = modifierData.toModifier(Modifier[modifierData.className]); if (modifier) { - scene.addModifier(modifier, true); + globalScene.addModifier(modifier, true); } } - scene.updateModifiers(true); + globalScene.updateModifiers(true); for (const enemyModifierData of sessionData.enemyModifiers) { - const modifier = enemyModifierData.toModifier(scene, Modifier[enemyModifierData.className]); + const modifier = enemyModifierData.toModifier(Modifier[enemyModifierData.className]); if (modifier) { - scene.addEnemyModifier(modifier, true); + globalScene.addEnemyModifier(modifier, true); } } - scene.updateModifiers(false); + globalScene.updateModifiers(false); Promise.all(loadPokemonAssets).then(() => resolve(true)); }; @@ -1136,7 +1147,7 @@ export class GameData { * @param slotId the slot to clear * @returns Promise with result `true` if the session was deleted successfully, `false` otherwise */ - deleteSession(slotId: integer): Promise { + deleteSession(slotId: number): Promise { return new Promise(resolve => { if (bypassLogin) { localStorage.removeItem(`sessionData${slotId ? slotId : ""}_${loggedInUser?.username}`); @@ -1150,8 +1161,8 @@ export class GameData { pokerogueApi.savedata.session.delete({ slot: slotId, clientSessionId }).then(error => { if (error) { if (error.startsWith("session out of date")) { - this.scene.clearPhaseQueue(); - this.scene.unshiftPhase(new ReloadSessionPhase(this.scene)); + globalScene.clearPhaseQueue(); + globalScene.unshiftPhase(new ReloadSessionPhase()); } console.error(error); resolve(false); @@ -1172,9 +1183,9 @@ export class GameData { /* Defines a localStorage item 'daily' to check on clears, offline implementation of savedata/newclear API If a GameModes clear other than Daily is checked, newClear = true as usual If a Daily mode is cleared, checks if it was already cleared before, based on seed, and returns true only to new daily clear runs */ - offlineNewClear(scene: BattleScene): Promise { + offlineNewClear(): Promise { return new Promise(resolve => { - const sessionData = this.getSessionSaveData(scene); + const sessionData = this.getSessionSaveData(); const seed = sessionData.seed; let daily: string[] = []; @@ -1205,14 +1216,14 @@ export class GameData { * After session data is removed, attempt to update user info so the menu updates * To delete an unfinished run instead, use {@linkcode deleteSession} */ - async tryClearSession(scene: BattleScene, slotId: integer): Promise<[success: boolean, newClear: boolean]> { + async tryClearSession(slotId: number): Promise<[success: boolean, newClear: boolean]> { let result: [boolean, boolean] = [ false, false ]; if (bypassLogin) { localStorage.removeItem(`sessionData${slotId ? slotId : ""}_${loggedInUser?.username}`); result = [ true, true ]; } else { - const sessionData = this.getSessionSaveData(scene); + const sessionData = this.getSessionSaveData(); const { trainerId } = this; const jsonResponse = await pokerogueApi.savedata.session.clear({ slot: slotId, trainerId, clientSessionId }, sessionData); @@ -1224,8 +1235,8 @@ export class GameData { localStorage.removeItem(`sessionData${slotId ? slotId : ""}_${loggedInUser?.username}`); } else { if (jsonResponse && jsonResponse.error?.startsWith("session out of date")) { - this.scene.clearPhaseQueue(); - this.scene.unshiftPhase(new ReloadSessionPhase(this.scene)); + globalScene.clearPhaseQueue(); + globalScene.unshiftPhase(new ReloadSessionPhase()); } console.error(jsonResponse); @@ -1240,12 +1251,6 @@ export class GameData { parseSessionData(dataStr: string): SessionSaveData { const sessionData = JSON.parse(dataStr, (k: string, v: any) => { - /*const versions = [ scene.game.config.gameVersion, sessionData.gameVersion || '0.0.0' ]; - - if (versions[0] !== versions[1]) { - const [ versionNumbers, oldVersionNumbers ] = versions.map(ver => ver.split('.').map(v => parseInt(v))); - }*/ - if (k === "party" || k === "enemyParty") { const ret: PokemonData[] = []; if (v === null) { @@ -1310,16 +1315,18 @@ export class GameData { return sessionData; } - saveAll(scene: BattleScene, skipVerification: boolean = false, sync: boolean = false, useCachedSession: boolean = false, useCachedSystem: boolean = false): Promise { + saveAll(skipVerification: boolean = false, sync: boolean = false, useCachedSession: boolean = false, useCachedSystem: boolean = false): Promise { return new Promise(resolve => { Utils.executeIf(!skipVerification, updateUserInfo).then(success => { if (success !== null && !success) { return resolve(false); } if (sync) { - this.scene.ui.savingIcon.show(); + globalScene.ui.savingIcon.show(); } - const sessionData = useCachedSession ? this.parseSessionData(decrypt(localStorage.getItem(`sessionData${scene.sessionSlotId ? scene.sessionSlotId : ""}_${loggedInUser?.username}`)!, bypassLogin)) : this.getSessionSaveData(scene); // TODO: is this bang correct? + const sessionData = useCachedSession ? + this.parseSessionData(decrypt(localStorage.getItem(`sessionData${globalScene.sessionSlotId ? globalScene.sessionSlotId : ""}_${loggedInUser?.username}`)!, bypassLogin)) // TODO: is this bang correct? + : this.getSessionSaveData(); const maxIntAttrValue = 0x80000000; const systemData = useCachedSystem ? this.parseSystemData(decrypt(localStorage.getItem(`data_${loggedInUser?.username}`)!, bypassLogin)) : this.getSystemSaveData(); // TODO: is this bang correct? @@ -1327,13 +1334,13 @@ export class GameData { const request = { system: systemData, session: sessionData, - sessionSlotId: scene.sessionSlotId, + sessionSlotId: globalScene.sessionSlotId, clientSessionId: clientSessionId }; localStorage.setItem(`data_${loggedInUser?.username}`, encrypt(JSON.stringify(systemData, (k: any, v: any) => typeof v === "bigint" ? v <= maxIntAttrValue ? Number(v) : v.toString() : v), bypassLogin)); - localStorage.setItem(`sessionData${scene.sessionSlotId ? scene.sessionSlotId : ""}_${loggedInUser?.username}`, encrypt(JSON.stringify(sessionData), bypassLogin)); + localStorage.setItem(`sessionData${globalScene.sessionSlotId ? globalScene.sessionSlotId : ""}_${loggedInUser?.username}`, encrypt(JSON.stringify(sessionData), bypassLogin)); console.debug("Session data saved"); @@ -1341,13 +1348,13 @@ export class GameData { pokerogueApi.savedata.updateAll(request) .then(error => { if (sync) { - this.scene.lastSavePlayTime = 0; - this.scene.ui.savingIcon.hide(); + globalScene.lastSavePlayTime = 0; + globalScene.ui.savingIcon.hide(); } if (error) { if (error.startsWith("session out of date")) { - this.scene.clearPhaseQueue(); - this.scene.unshiftPhase(new ReloadSessionPhase(this.scene)); + globalScene.clearPhaseQueue(); + globalScene.unshiftPhase(new ReloadSessionPhase()); } console.error(error); return resolve(false); @@ -1356,7 +1363,7 @@ export class GameData { }); } else { this.verify().then(success => { - this.scene.ui.savingIcon.hide(); + globalScene.ui.savingIcon.hide(); resolve(success); }); } @@ -1364,7 +1371,7 @@ export class GameData { }); } - public tryExportData(dataType: GameDataType, slotId: integer = 0): Promise { + public tryExportData(dataType: GameDataType, slotId: number = 0): Promise { return new Promise(resolve => { const dataKey: string = `${getDataTypeKey(dataType, slotId)}_${loggedInUser?.username}`; const handleData = (dataStr: string) => { @@ -1410,7 +1417,7 @@ export class GameData { }); } - public importData(dataType: GameDataType, slotId: integer = 0): void { + public importData(dataType: GameDataType, slotId: number = 0): void { const dataKey = `${getDataTypeKey(dataType, slotId)}_${loggedInUser?.username}`; let saveFile: any = document.getElementById("saveFile"); @@ -1462,15 +1469,15 @@ export class GameData { console.error(ex); } - const displayError = (error: string) => this.scene.ui.showText(error, null, () => this.scene.ui.showText("", 0), Utils.fixedInt(1500)); + const displayError = (error: string) => globalScene.ui.showText(error, null, () => globalScene.ui.showText("", 0), Utils.fixedInt(1500)); dataName = dataName!; // tell TS compiler that dataName is defined! if (!valid) { - return this.scene.ui.showText(`Your ${dataName} data could not be loaded. It may be corrupted.`, null, () => this.scene.ui.showText("", 0), Utils.fixedInt(1500)); + return globalScene.ui.showText(`Your ${dataName} data could not be loaded. It may be corrupted.`, null, () => globalScene.ui.showText("", 0), Utils.fixedInt(1500)); } - this.scene.ui.showText(`Your ${dataName} data will be overridden and the page will reload. Proceed?`, null, () => { - this.scene.ui.setOverlayMode(Mode.CONFIRM, () => { + globalScene.ui.showText(`Your ${dataName} data will be overridden and the page will reload. Proceed?`, null, () => { + globalScene.ui.setOverlayMode(Mode.CONFIRM, () => { localStorage.setItem(dataKey, encrypt(dataStr, bypassLogin)); if (!bypassLogin && dataType < GameDataType.SETTINGS) { @@ -1498,8 +1505,8 @@ export class GameData { window.location = window.location; } }, () => { - this.scene.ui.revertMode(); - this.scene.ui.showText("", 0); + globalScene.ui.revertMode(); + globalScene.ui.showText("", 0); }, false, -98); }); }; @@ -1509,9 +1516,6 @@ export class GameData { } ); saveFile.click(); - /*(this.scene.plugins.get('rexfilechooserplugin') as FileChooserPlugin).open({ accept: '.prsv' }) - .then(result => { - });*/ } private initDexData(): void { @@ -1527,7 +1531,7 @@ export class GameData { const defaultStarterNatures: Nature[] = []; - this.scene.executeWithSeedOffset(() => { + globalScene.executeWithSeedOffset(() => { const neutralNatures = [ Nature.HARDY, Nature.DOCILE, Nature.SERIOUS, Nature.BASHFUL, Nature.QUIRKY ]; for (let s = 0; s < defaultStarterSpecies.length; s++) { defaultStarterNatures.push(Utils.randSeedItem(neutralNatures)); @@ -1571,7 +1575,7 @@ export class GameData { setPokemonSeen(pokemon: Pokemon, incrementCount: boolean = true, trainer: boolean = false): void { // Some Mystery Encounters block updates to these stats - if (this.scene.currentBattle?.isBattleMysteryEncounter() && this.scene.currentBattle.mysteryEncounter?.preventGameStatsUpdates) { + if (globalScene.currentBattle?.isBattleMysteryEncounter() && globalScene.currentBattle.mysteryEncounter?.preventGameStatsUpdates) { return; } const dexEntry = this.dexData[pokemon.species.speciesId]; @@ -1604,7 +1608,7 @@ export class GameData { // If incrementCount === false (not a catch scenario), only update the pokemon's dex data if the Pokemon has already been marked as caught in dex // Prevents form changes, nature changes, etc. from unintentionally updating the dex data of a "rental" pokemon const speciesRootForm = pokemon.species.getRootSpeciesId(); - if (!incrementCount && !this.scene.gameData.dexData[speciesRootForm].caughtAttr) { + if (!incrementCount && !globalScene.gameData.dexData[speciesRootForm].caughtAttr) { return Promise.resolve(false); } else { return this.setPokemonSpeciesCaught(pokemon, pokemon.species, incrementCount, fromEgg, showMessage); @@ -1625,15 +1629,38 @@ export class GameData { const dexEntry = this.dexData[species.speciesId]; const caughtAttr = dexEntry.caughtAttr; const formIndex = pokemon.formIndex; - if (noStarterFormKeys.includes(pokemon.getFormKey())) { - pokemon.formIndex = 0; - } const dexAttr = pokemon.getDexAttr(); - pokemon.formIndex = formIndex; // Mark as caught dexEntry.caughtAttr |= dexAttr; + // If the caught form is a battleform, we want to also mark the base form as caught. + // This snippet assumes that the base form has formIndex equal to 0, which should be + // always true except for the case of Urshifu. + const formKey = pokemon.getFormKey(); + if (formIndex > 0) { + if (pokemon.species.speciesId === Species.URSHIFU) { + if (formIndex === 2) { + dexEntry.caughtAttr |= globalScene.gameData.getFormAttr(0); + } else if (formIndex === 3) { + dexEntry.caughtAttr |= globalScene.gameData.getFormAttr(1); + } + } else if (pokemon.species.speciesId === Species.ZYGARDE) { + if (formIndex === 4) { + dexEntry.caughtAttr |= globalScene.gameData.getFormAttr(2); + } else if (formIndex === 5) { + dexEntry.caughtAttr |= globalScene.gameData.getFormAttr(3); + } + } else { + const allFormChanges = pokemonFormChanges.hasOwnProperty(species.speciesId) ? pokemonFormChanges[species.speciesId] : []; + const toCurrentFormChanges = allFormChanges.filter(f => (f.formKey === formKey)); + if (toCurrentFormChanges.length > 0) { + // Needs to do this or Castform can unlock the wrong form, etc. + dexEntry.caughtAttr |= globalScene.gameData.getFormAttr(0); + } + } + } + // Unlock ability if (speciesStarterCosts.hasOwnProperty(species.speciesId)) { this.starterData[species.speciesId].abilityAttr |= pokemon.abilityIndex !== 1 || pokemon.species.ability2 @@ -1677,7 +1704,7 @@ export class GameData { } } - if (!hasPrevolution && (!pokemon.scene.gameMode.isDaily || hasNewAttr || fromEgg)) { + if (!hasPrevolution && (!globalScene.gameMode.isDaily || hasNewAttr || fromEgg)) { this.addStarterCandy(species, (1 * (pokemon.isShiny() ? 5 * (1 << (pokemon.variant ?? 0)) : 1)) * (fromEgg || pokemon.isBoss() ? 2 : 1)); } } @@ -1696,15 +1723,15 @@ export class GameData { resolve(true); return; } - this.scene.playSound("level_up_fanfare"); - this.scene.ui.showText(i18next.t("battle:addedAsAStarter", { pokemonName: species.name }), null, () => checkPrevolution(true), null, true); + globalScene.playSound("level_up_fanfare"); + globalScene.ui.showText(i18next.t("battle:addedAsAStarter", { pokemonName: species.name }), null, () => checkPrevolution(true), null, true); } else { checkPrevolution(false); } }); } - incrementRibbonCount(species: PokemonSpecies, forStarter: boolean = false): integer { + incrementRibbonCount(species: PokemonSpecies, forStarter: boolean = false): number { const speciesIdToIncrement: Species = species.getRootSpeciesId(forStarter); if (!this.starterData[speciesIdToIncrement].classicWinCount) { @@ -1712,25 +1739,25 @@ export class GameData { } if (!this.starterData[speciesIdToIncrement].classicWinCount) { - this.scene.gameData.gameStats.ribbonsOwned++; + globalScene.gameData.gameStats.ribbonsOwned++; } - const ribbonsInStats: integer = this.scene.gameData.gameStats.ribbonsOwned; + const ribbonsInStats: number = globalScene.gameData.gameStats.ribbonsOwned; if (ribbonsInStats >= 100) { - this.scene.validateAchv(achvs._100_RIBBONS); + globalScene.validateAchv(achvs._100_RIBBONS); } if (ribbonsInStats >= 75) { - this.scene.validateAchv(achvs._75_RIBBONS); + globalScene.validateAchv(achvs._75_RIBBONS); } if (ribbonsInStats >= 50) { - this.scene.validateAchv(achvs._50_RIBBONS); + globalScene.validateAchv(achvs._50_RIBBONS); } if (ribbonsInStats >= 25) { - this.scene.validateAchv(achvs._25_RIBBONS); + globalScene.validateAchv(achvs._25_RIBBONS); } if (ribbonsInStats >= 10) { - this.scene.validateAchv(achvs._10_RIBBONS); + globalScene.validateAchv(achvs._10_RIBBONS); } return ++this.starterData[speciesIdToIncrement].classicWinCount; @@ -1742,11 +1769,11 @@ export class GameData { * @param species * @param count */ - addStarterCandy(species: PokemonSpecies, count: integer): void { + addStarterCandy(species: PokemonSpecies, count: number): void { // Only gain candies if the Pokemon has already been marked as caught in dex (ignore "rental" pokemon) const speciesRootForm = species.getRootSpeciesId(); - if (this.scene.gameData.dexData[speciesRootForm].caughtAttr) { - this.scene.candyBar.showStarterSpeciesCandy(species.speciesId, count); + if (globalScene.gameData.dexData[speciesRootForm].caughtAttr) { + globalScene.candyBar.showStarterSpeciesCandy(species.speciesId, count); this.starterData[species.speciesId].candyCount += count; } } @@ -1758,7 +1785,7 @@ export class GameData { * @param showMessage Default true. If true, will display message for unlocked egg move * @param prependSpeciesToMessage Default false. If true, will change message from "X Egg Move Unlocked!" to "Bulbasaur X Egg Move Unlocked!" */ - setEggMoveUnlocked(species: PokemonSpecies, eggMoveIndex: integer, showMessage: boolean = true, prependSpeciesToMessage: boolean = false): Promise { + setEggMoveUnlocked(species: PokemonSpecies, eggMoveIndex: number, showMessage: boolean = true, prependSpeciesToMessage: boolean = false): Promise { return new Promise(resolve => { const speciesId = species.speciesId; if (!speciesEggMoves.hasOwnProperty(speciesId) || !speciesEggMoves[speciesId][eggMoveIndex]) { @@ -1782,12 +1809,12 @@ export class GameData { resolve(true); return; } - this.scene.playSound("level_up_fanfare"); + globalScene.playSound("level_up_fanfare"); const moveName = allMoves[speciesEggMoves[speciesId][eggMoveIndex]].name; let message = prependSpeciesToMessage ? species.getName() + " " : ""; message += eggMoveIndex === 3 ? i18next.t("egg:rareEggMoveUnlock", { moveName: moveName }) : i18next.t("egg:eggMoveUnlock", { moveName: moveName }); - this.scene.ui.showText(message, null, () => resolve(true), null, true); + globalScene.ui.showText(message, null, () => resolve(true), null, true); }); } @@ -1817,10 +1844,10 @@ export class GameData { _unlockSpeciesNature(species.speciesId); } - updateSpeciesDexIvs(speciesId: Species, ivs: integer[]): void { + updateSpeciesDexIvs(speciesId: Species, ivs: number[]): void { let dexEntry: DexEntry; do { - dexEntry = this.scene.gameData.dexData[speciesId]; + dexEntry = globalScene.gameData.dexData[speciesId]; const dexIvs = dexEntry.ivs; for (let i = 0; i < dexIvs.length; i++) { if (dexIvs[i] < ivs[i]) { @@ -1828,12 +1855,12 @@ export class GameData { } } if (dexIvs.filter(iv => iv === 31).length === 6) { - this.scene.validateAchv(achvs.PERFECT_IVS); + globalScene.validateAchv(achvs.PERFECT_IVS); } } while (pokemonPrevolutions.hasOwnProperty(speciesId) && (speciesId = pokemonPrevolutions[speciesId])); } - getSpeciesCount(dexEntryPredicate: (entry: DexEntry) => boolean): integer { + getSpeciesCount(dexEntryPredicate: (entry: DexEntry) => boolean): number { const dexKeys = Object.keys(this.dexData); let speciesCount = 0; for (const s of dexKeys) { @@ -1844,7 +1871,7 @@ export class GameData { return speciesCount; } - getStarterCount(dexEntryPredicate: (entry: DexEntry) => boolean): integer { + getStarterCount(dexEntryPredicate: (entry: DexEntry) => boolean): number { const starterKeys = Object.keys(speciesStarterCosts); let starterCount = 0; for (const s of starterKeys) { @@ -1915,7 +1942,7 @@ export class GameData { }; } - getStarterSpeciesDefaultAbilityIndex(species: PokemonSpecies): integer { + getStarterSpeciesDefaultAbilityIndex(species: PokemonSpecies): number { const abilityAttr = this.starterData[species.speciesId].abilityAttr; return abilityAttr & AbilityAttr.ABILITY_1 ? 0 : !species.ability2 || abilityAttr & AbilityAttr.ABILITY_2 ? 1 : 2; } @@ -1930,15 +1957,15 @@ export class GameData { return 0 as Nature; } - getSpeciesDefaultNatureAttr(species: PokemonSpecies): integer { + getSpeciesDefaultNatureAttr(species: PokemonSpecies): number { return 1 << (this.getSpeciesDefaultNature(species)); } - getDexAttrLuck(dexAttr: bigint): integer { + getDexAttrLuck(dexAttr: bigint): number { return dexAttr & DexAttr.SHINY ? dexAttr & DexAttr.VARIANT_3 ? 3 : dexAttr & DexAttr.VARIANT_2 ? 2 : 1 : 0; } - getNaturesForAttr(natureAttr: integer = 0): Nature[] { + getNaturesForAttr(natureAttr: number = 0): Nature[] { const ret: Nature[] = []; for (let n = 0; n < 25; n++) { if (natureAttr & (1 << (n + 1))) { @@ -1966,12 +1993,12 @@ export class GameData { } const cost = new Utils.NumberHolder(value); - applyChallenges(this.scene.gameMode, ChallengeType.STARTER_COST, speciesId, cost); + applyChallenges(globalScene.gameMode, ChallengeType.STARTER_COST, speciesId, cost); return cost.value; } - getFormIndex(attr: bigint): integer { + getFormIndex(attr: bigint): number { if (!attr || attr < DexAttr.DEFAULT_FORM) { return 0; } @@ -1982,7 +2009,7 @@ export class GameData { return f; } - getFormAttr(formIndex: integer): bigint { + getFormAttr(formIndex: number): bigint { return BigInt(1) << BigInt(7 + formIndex); } diff --git a/src/system/game-speed.ts b/src/system/game-speed.ts index 861c3d4705d..4b34a04b5f8 100644 --- a/src/system/game-speed.ts +++ b/src/system/game-speed.ts @@ -1,7 +1,8 @@ import SoundFade from "phaser3-rex-plugins/plugins/soundfade"; -import FadeIn from "phaser3-rex-plugins/plugins/audio/fade/FadeIn"; -import FadeOut from "phaser3-rex-plugins/plugins/audio/fade/FadeOut"; -import BattleScene from "../battle-scene"; +import type FadeIn from "phaser3-rex-plugins/plugins/audio/fade/FadeIn"; +import type FadeOut from "phaser3-rex-plugins/plugins/audio/fade/FadeOut"; +import type BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import * as Utils from "../utils"; type FadeIn = typeof FadeIn; @@ -98,7 +99,7 @@ export function initGameSpeed() { sound: Phaser.Sound.BaseSound, duration: number, destroy?: boolean - ) => originalFadeOut(scene, sound, transformValue(duration), destroy)) as FadeOut; + ) => originalFadeOut(globalScene, sound, transformValue(duration), destroy)) as FadeOut; const originalFadeIn = SoundFade.fadeIn; SoundFade.fadeIn = (( @@ -107,5 +108,5 @@ export function initGameSpeed() { duration: number, endVolume?: number, startVolume?: number - ) => originalFadeIn(scene, sound, transformValue(duration), endVolume, startVolume)) as FadeIn; + ) => originalFadeIn(globalScene, sound, transformValue(duration), endVolume, startVolume)) as FadeIn; } diff --git a/src/system/game-stats.ts b/src/system/game-stats.ts index a8b74f29bb7..5553a0332fc 100644 --- a/src/system/game-stats.ts +++ b/src/system/game-stats.ts @@ -1,43 +1,43 @@ -// public (.*?): integer; +// public (.*?): number; // this.$1 = source?.$1 || 0; export class GameStats { - public playTime: integer; - public battles: integer; - public classicSessionsPlayed: integer; - public sessionsWon: integer; - public ribbonsOwned: integer; - public dailyRunSessionsPlayed: integer; - public dailyRunSessionsWon: integer; - public endlessSessionsPlayed: integer; - public highestEndlessWave: integer; - public highestLevel: integer; - public highestMoney: integer; - public highestDamage: integer; - public highestHeal: integer; - public pokemonSeen: integer; - public pokemonDefeated: integer; - public pokemonCaught: integer; - public pokemonHatched: integer; - public subLegendaryPokemonSeen: integer; - public subLegendaryPokemonCaught: integer; - public subLegendaryPokemonHatched: integer; - public legendaryPokemonSeen: integer; - public legendaryPokemonCaught: integer; - public legendaryPokemonHatched: integer; - public mythicalPokemonSeen: integer; - public mythicalPokemonCaught: integer; - public mythicalPokemonHatched: integer; - public shinyPokemonSeen: integer; - public shinyPokemonCaught: integer; - public shinyPokemonHatched: integer; - public pokemonFused: integer; - public trainersDefeated: integer; - public eggsPulled: integer; - public rareEggsPulled: integer; - public epicEggsPulled: integer; - public legendaryEggsPulled: integer; - public manaphyEggsPulled: integer; + public playTime: number; + public battles: number; + public classicSessionsPlayed: number; + public sessionsWon: number; + public ribbonsOwned: number; + public dailyRunSessionsPlayed: number; + public dailyRunSessionsWon: number; + public endlessSessionsPlayed: number; + public highestEndlessWave: number; + public highestLevel: number; + public highestMoney: number; + public highestDamage: number; + public highestHeal: number; + public pokemonSeen: number; + public pokemonDefeated: number; + public pokemonCaught: number; + public pokemonHatched: number; + public subLegendaryPokemonSeen: number; + public subLegendaryPokemonCaught: number; + public subLegendaryPokemonHatched: number; + public legendaryPokemonSeen: number; + public legendaryPokemonCaught: number; + public legendaryPokemonHatched: number; + public mythicalPokemonSeen: number; + public mythicalPokemonCaught: number; + public mythicalPokemonHatched: number; + public shinyPokemonSeen: number; + public shinyPokemonCaught: number; + public shinyPokemonHatched: number; + public pokemonFused: number; + public trainersDefeated: number; + public eggsPulled: number; + public rareEggsPulled: number; + public epicEggsPulled: number; + public legendaryEggsPulled: number; + public manaphyEggsPulled: number; constructor(source?: any) { this.playTime = source?.playTime || 0; diff --git a/src/system/modifier-data.ts b/src/system/modifier-data.ts index c68f9ccb47d..4816115f586 100644 --- a/src/system/modifier-data.ts +++ b/src/system/modifier-data.ts @@ -1,13 +1,14 @@ -import BattleScene from "../battle-scene"; -import { PersistentModifier } from "../modifier/modifier"; -import { GeneratedPersistentModifierType, ModifierType, ModifierTypeGenerator, getModifierTypeFuncById } from "../modifier/modifier-type"; +import { globalScene } from "#app/global-scene"; +import { PersistentModifier } from "#app/modifier/modifier"; +import type { GeneratedPersistentModifierType, ModifierType } from "#app/modifier/modifier-type"; +import { ModifierTypeGenerator, getModifierTypeFuncById } from "#app/modifier/modifier-type"; export default class ModifierData { public player: boolean; public typeId: string; public typePregenArgs: any[]; public args: any[]; - public stackCount: integer; + public stackCount: number; public className: string; @@ -27,7 +28,7 @@ export default class ModifierData { this.className = sourceModifier ? sourceModifier.constructor.name : source.className; } - toModifier(scene: BattleScene, constructor: any): PersistentModifier | null { + toModifier(constructor: any): PersistentModifier | null { const typeFunc = getModifierTypeFuncById(this.typeId); if (!typeFunc) { return null; @@ -38,13 +39,13 @@ export default class ModifierData { type.id = this.typeId; if (type instanceof ModifierTypeGenerator) { - type = (type as ModifierTypeGenerator).generateType(this.player ? scene.getPlayerParty() : scene.getEnemyField(), this.typePregenArgs); + type = (type as ModifierTypeGenerator).generateType(this.player ? globalScene.getPlayerParty() : globalScene.getEnemyField(), this.typePregenArgs); } const ret = Reflect.construct(constructor, ([ type ] as any[]).concat(this.args).concat(this.stackCount)) as PersistentModifier; - if (ret.stackCount > ret.getMaxStackCount(scene)) { - ret.stackCount = ret.getMaxStackCount(scene); + if (ret.stackCount > ret.getMaxStackCount()) { + ret.stackCount = ret.getMaxStackCount(); } return ret; diff --git a/src/system/pokemon-data.ts b/src/system/pokemon-data.ts index 64801cc0ff1..20507860e4e 100644 --- a/src/system/pokemon-data.ts +++ b/src/system/pokemon-data.ts @@ -1,61 +1,66 @@ import { BattleType } from "../battle"; -import BattleScene from "../battle-scene"; -import { Gender } from "../data/gender"; -import { Nature } from "#enums/nature"; -import { PokeballType } from "#enums/pokeball"; +import { globalScene } from "#app/global-scene"; +import type { Gender } from "../data/gender"; +import type { Nature } from "#enums/nature"; +import type { PokeballType } from "#enums/pokeball"; import { getPokemonSpecies } from "../data/pokemon-species"; import { Status } from "../data/status-effect"; import Pokemon, { EnemyPokemon, PokemonMove, PokemonSummonData } from "../field/pokemon"; import { TrainerSlot } from "../data/trainer-config"; -import { Variant } from "#app/data/variant"; +import type { Variant } from "#app/data/variant"; import { loadBattlerTag } from "../data/battler-tags"; -import { Biome } from "#enums/biome"; +import type { Biome } from "#enums/biome"; import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import type { Species } from "#enums/species"; import { CustomPokemonData } from "#app/data/custom-pokemon-data"; +import type { Type } from "#app/enums/type"; export default class PokemonData { - public id: integer; + public id: number; public player: boolean; public species: Species; public nickname: string; - public formIndex: integer; - public abilityIndex: integer; + public formIndex: number; + public abilityIndex: number; public passive: boolean; public shiny: boolean; public variant: Variant; public pokeball: PokeballType; - public level: integer; - public exp: integer; - public levelExp: integer; + public level: number; + public exp: number; + public levelExp: number; public gender: Gender; - public hp: integer; - public stats: integer[]; - public ivs: integer[]; + public hp: number; + public stats: number[]; + public ivs: number[]; public nature: Nature; public moveset: (PokemonMove | null)[]; public status: Status | null; - public friendship: integer; - public metLevel: integer; + public friendship: number; + public metLevel: number; public metBiome: Biome | -1; // -1 for starters public metSpecies: Species; public metWave: number; // 0 for unknown (previous saves), -1 for starters - public luck: integer; + public luck: number; public pauseEvolutions: boolean; public pokerus: boolean; public usedTMs: Moves[]; - public evoCounter: integer; + public evoCounter: number; + public teraType: Type; + public isTerastallized: boolean; + public stellarTypesBoosted: Type[]; public fusionSpecies: Species; - public fusionFormIndex: integer; - public fusionAbilityIndex: integer; + public fusionFormIndex: number; + public fusionAbilityIndex: number; public fusionShiny: boolean; public fusionVariant: Variant; public fusionGender: Gender; - public fusionLuck: integer; + public fusionLuck: number; + public fusionTeraType: Type; public boss: boolean; - public bossSegments?: integer; + public bossSegments?: number; public summonData: PokemonSummonData; @@ -103,6 +108,9 @@ export default class PokemonData { this.evoCounter = source.evoCounter ?? 0; } this.pokerus = !!source.pokerus; + this.teraType = source.teraType as Type; + this.isTerastallized = source.isTerastallized || false; + this.stellarTypesBoosted = source.stellarTypesBoosted || []; this.fusionSpecies = sourcePokemon ? sourcePokemon.fusionSpecies?.speciesId : source.fusionSpecies; this.fusionFormIndex = source.fusionFormIndex; @@ -112,6 +120,7 @@ export default class PokemonData { this.fusionGender = source.fusionGender; this.fusionLuck = source.fusionLuck !== undefined ? source.fusionLuck : (source.fusionShiny ? source.fusionVariant + 1 : 0); this.fusionCustomPokemonData = new CustomPokemonData(source.fusionCustomPokemonData); + this.fusionTeraType = (source.fusionTeraType ?? 0) as Type; this.usedTMs = source.usedTMs ?? []; this.customPokemonData = new CustomPokemonData(source.customPokemonData); @@ -163,15 +172,15 @@ export default class PokemonData { } } - toPokemon(scene: BattleScene, battleType?: BattleType, partyMemberIndex: integer = 0, double: boolean = false): Pokemon { + toPokemon(battleType?: BattleType, partyMemberIndex: number = 0, double: boolean = false): Pokemon { const species = getPokemonSpecies(this.species); const ret: Pokemon = this.player - ? scene.addPlayerPokemon(species, this.level, this.abilityIndex, this.formIndex, this.gender, this.shiny, this.variant, this.ivs, this.nature, this, (playerPokemon) => { + ? globalScene.addPlayerPokemon(species, this.level, this.abilityIndex, this.formIndex, this.gender, this.shiny, this.variant, this.ivs, this.nature, this, (playerPokemon) => { if (this.nickname) { playerPokemon.nickname = this.nickname; } }) - : scene.addEnemyPokemon(species, this.level, battleType === BattleType.TRAINER ? !double || !(partyMemberIndex % 2) ? TrainerSlot.TRAINER : TrainerSlot.TRAINER_PARTNER : TrainerSlot.NONE, this.boss, false, this); + : globalScene.addEnemyPokemon(species, this.level, battleType === BattleType.TRAINER ? !double || !(partyMemberIndex % 2) ? TrainerSlot.TRAINER : TrainerSlot.TRAINER_PARTNER : TrainerSlot.NONE, this.boss, false, this); if (this.summonData) { ret.primeSummonData(this.summonData); } diff --git a/src/system/session-history.ts b/src/system/session-history.ts index 85a300110d9..d9dd2022d8f 100644 --- a/src/system/session-history.ts +++ b/src/system/session-history.ts @@ -1,6 +1,6 @@ -import { GameModes } from "../game-mode"; -import PokemonData from "./pokemon-data"; -import PersistentModifierData from "./modifier-data"; +import type { GameModes } from "../game-mode"; +import type PokemonData from "./pokemon-data"; +import type PersistentModifierData from "./modifier-data"; export enum SessionHistoryResult { ACTIVE, @@ -10,13 +10,13 @@ export enum SessionHistoryResult { export interface SessionHistory { seed: string; - playTime: integer; + playTime: number; result: SessionHistoryResult, gameMode: GameModes; party: PokemonData[]; modifiers: PersistentModifierData[]; - money: integer; - waveIndex: integer; + money: number; + waveIndex: number; gameVersion: string; - timestamp: integer; + timestamp: number; } diff --git a/src/system/settings/settings-gamepad.ts b/src/system/settings/settings-gamepad.ts index 322b2baac9e..840304ab1ba 100644 --- a/src/system/settings/settings-gamepad.ts +++ b/src/system/settings/settings-gamepad.ts @@ -1,9 +1,9 @@ -import BattleScene from "../../battle-scene"; -import SettingsGamepadUiHandler from "../../ui/settings/settings-gamepad-ui-handler"; +import type SettingsGamepadUiHandler from "../../ui/settings/settings-gamepad-ui-handler"; import { Mode } from "../../ui/ui"; import { truncateString } from "../../utils"; import { Button } from "#enums/buttons"; import { SettingKeyboard } from "#app/system/settings/settings-keyboard"; +import { globalScene } from "#app/global-scene"; export enum SettingGamepad { Controller = "CONTROLLER", @@ -21,7 +21,7 @@ export enum SettingGamepad { Button_Cycle_Gender = "BUTTON_CYCLE_GENDER", Button_Cycle_Ability = "BUTTON_CYCLE_ABILITY", Button_Cycle_Nature = "BUTTON_CYCLE_NATURE", - Button_Cycle_Variant = "BUTTON_CYCLE_VARIANT", + Button_Cycle_Tera = "BUTTON_CYCLE_TERA", Button_Speed_Up = "BUTTON_SPEED_UP", Button_Slow_Down = "BUTTON_SLOW_DOWN", Button_Submit = "BUTTON_SUBMIT", @@ -45,7 +45,7 @@ export const settingGamepadOptions = { [SettingGamepad.Button_Cycle_Gender]: [ `KEY ${Button.CYCLE_GENDER.toString()}`, pressAction ], [SettingGamepad.Button_Cycle_Ability]: [ `KEY ${Button.CYCLE_ABILITY.toString()}`, pressAction ], [SettingGamepad.Button_Cycle_Nature]: [ `KEY ${Button.CYCLE_NATURE.toString()}`, pressAction ], - [SettingGamepad.Button_Cycle_Variant]: [ `KEY ${Button.V.toString()}`, pressAction ], + [SettingGamepad.Button_Cycle_Tera]: [ `KEY ${Button.CYCLE_TERA.toString()}`, pressAction ], [SettingGamepad.Button_Speed_Up]: [ `KEY ${Button.SPEED_UP.toString()}`, pressAction ], [SettingGamepad.Button_Slow_Down]: [ `KEY ${Button.SLOW_DOWN.toString()}`, pressAction ], [SettingGamepad.Button_Submit]: [ `KEY ${Button.SUBMIT.toString()}`, pressAction ], @@ -67,7 +67,7 @@ export const settingGamepadDefaults = { [SettingGamepad.Button_Cycle_Gender]: 0, [SettingGamepad.Button_Cycle_Ability]: 0, [SettingGamepad.Button_Cycle_Nature]: 0, - [SettingGamepad.Button_Cycle_Variant]: 0, + [SettingGamepad.Button_Cycle_Tera]: 0, [SettingGamepad.Button_Speed_Up]: 0, [SettingGamepad.Button_Slow_Down]: 0, [SettingGamepad.Button_Submit]: 0, @@ -80,12 +80,12 @@ export const settingGamepadBlackList = [ SettingKeyboard.Button_Right, ]; -export function setSettingGamepad(scene: BattleScene, setting: SettingGamepad, value: integer): boolean { +export function setSettingGamepad(setting: SettingGamepad, value: number): boolean { switch (setting) { case SettingGamepad.Gamepad_Support: // if we change the value of the gamepad support, we call a method in the inputController to // activate or deactivate the controller listener - scene.inputController.setGamepadSupport(settingGamepadOptions[setting][value] !== "Disabled"); + globalScene.inputController.setGamepadSupport(settingGamepadOptions[setting][value] !== "Disabled"); break; case SettingGamepad.Button_Action: case SettingGamepad.Button_Cancel: @@ -96,18 +96,18 @@ export function setSettingGamepad(scene: BattleScene, setting: SettingGamepad, v case SettingGamepad.Button_Cycle_Gender: case SettingGamepad.Button_Cycle_Ability: case SettingGamepad.Button_Cycle_Nature: - case SettingGamepad.Button_Cycle_Variant: + case SettingGamepad.Button_Cycle_Tera: case SettingGamepad.Button_Speed_Up: case SettingGamepad.Button_Slow_Down: case SettingGamepad.Button_Submit: if (value) { - if (scene.ui) { + if (globalScene.ui) { const cancelHandler = (success: boolean = false) : boolean => { - scene.ui.revertMode(); - (scene.ui.getHandler() as SettingsGamepadUiHandler).updateBindings(); + globalScene.ui.revertMode(); + (globalScene.ui.getHandler() as SettingsGamepadUiHandler).updateBindings(); return success; }; - scene.ui.setOverlayMode(Mode.GAMEPAD_BINDING, { + globalScene.ui.setOverlayMode(Mode.GAMEPAD_BINDING, { target: setting, cancelHandler: cancelHandler, }); @@ -116,20 +116,20 @@ export function setSettingGamepad(scene: BattleScene, setting: SettingGamepad, v break; case SettingGamepad.Controller: if (value) { - const gp = scene.inputController.getGamepadsName(); - if (scene.ui && gp) { + const gp = globalScene.inputController.getGamepadsName(); + if (globalScene.ui && gp) { const cancelHandler = () => { - scene.ui.revertMode(); - (scene.ui.getHandler() as SettingsGamepadUiHandler).setOptionCursor(Object.values(SettingGamepad).indexOf(SettingGamepad.Controller), 0, true); - (scene.ui.getHandler() as SettingsGamepadUiHandler).updateBindings(); + globalScene.ui.revertMode(); + (globalScene.ui.getHandler() as SettingsGamepadUiHandler).setOptionCursor(Object.values(SettingGamepad).indexOf(SettingGamepad.Controller), 0, true); + (globalScene.ui.getHandler() as SettingsGamepadUiHandler).updateBindings(); return false; }; const changeGamepadHandler = (gamepad: string) => { - scene.inputController.setChosenGamepad(gamepad); + globalScene.inputController.setChosenGamepad(gamepad); cancelHandler(); return true; }; - scene.ui.setOverlayMode(Mode.OPTION_SELECT, { + globalScene.ui.setOverlayMode(Mode.OPTION_SELECT, { options: [ ...gp.map((g: string) => ({ label: truncateString(g, 30), // Truncate the gamepad name for display handler: () => changeGamepadHandler(g) diff --git a/src/system/settings/settings-keyboard.ts b/src/system/settings/settings-keyboard.ts index 97990f61c86..1a7db1b10c2 100644 --- a/src/system/settings/settings-keyboard.ts +++ b/src/system/settings/settings-keyboard.ts @@ -1,8 +1,8 @@ import { Button } from "#enums/buttons"; -import BattleScene from "#app/battle-scene"; import { Mode } from "#app/ui/ui"; -import SettingsKeyboardUiHandler from "#app/ui/settings/settings-keyboard-ui-handler"; +import type SettingsKeyboardUiHandler from "#app/ui/settings/settings-keyboard-ui-handler"; import i18next from "i18next"; +import { globalScene } from "#app/global-scene"; export enum SettingKeyboard { // Default_Layout = "DEFAULT_LAYOUT", @@ -32,8 +32,8 @@ export enum SettingKeyboard { Alt_Button_Cycle_Ability = "ALT_BUTTON_CYCLE_ABILITY", Button_Cycle_Nature = "BUTTON_CYCLE_NATURE", Alt_Button_Cycle_Nature = "ALT_BUTTON_CYCLE_NATURE", - Button_Cycle_Variant = "BUTTON_CYCLE_VARIANT", - Alt_Button_Cycle_Variant = "ALT_BUTTON_CYCLE_VARIANT", + Button_Cycle_Tera = "BUTTON_CYCLE_TERA", + Alt_Button_Cycle_Tera = "ALT_BUTTON_CYCLE_TERA", Button_Speed_Up = "BUTTON_SPEED_UP", Alt_Button_Speed_Up = "ALT_BUTTON_SPEED_UP", Button_Slow_Down = "BUTTON_SLOW_DOWN", @@ -73,8 +73,8 @@ export const settingKeyboardOptions = { [SettingKeyboard.Alt_Button_Cycle_Ability]: [ `KEY ${Button.CYCLE_ABILITY.toString()}`, pressAction ], [SettingKeyboard.Button_Cycle_Nature]: [ `KEY ${Button.CYCLE_NATURE.toString()}`, pressAction ], [SettingKeyboard.Alt_Button_Cycle_Nature]: [ `KEY ${Button.CYCLE_NATURE.toString()}`, pressAction ], - [SettingKeyboard.Button_Cycle_Variant]: [ `KEY ${Button.V.toString()}`, pressAction ], - [SettingKeyboard.Alt_Button_Cycle_Variant]: [ `KEY ${Button.V.toString()}`, pressAction ], + [SettingKeyboard.Button_Cycle_Tera]: [ `KEY ${Button.CYCLE_TERA.toString()}`, pressAction ], + [SettingKeyboard.Alt_Button_Cycle_Tera]: [ `KEY ${Button.CYCLE_TERA.toString()}`, pressAction ], [SettingKeyboard.Button_Speed_Up]: [ `KEY ${Button.SPEED_UP.toString()}`, pressAction ], [SettingKeyboard.Alt_Button_Speed_Up]: [ `KEY ${Button.SPEED_UP.toString()}`, pressAction ], [SettingKeyboard.Button_Slow_Down]: [ `KEY ${Button.SLOW_DOWN.toString()}`, pressAction ], @@ -112,8 +112,8 @@ export const settingKeyboardDefaults = { [SettingKeyboard.Alt_Button_Cycle_Ability]: 0, [SettingKeyboard.Button_Cycle_Nature]: 0, [SettingKeyboard.Alt_Button_Cycle_Nature]: 0, - [SettingKeyboard.Button_Cycle_Variant]: 0, - [SettingKeyboard.Alt_Button_Cycle_Variant]: 0, + [SettingKeyboard.Button_Cycle_Tera]: 0, + [SettingKeyboard.Alt_Button_Cycle_Tera]: 0, [SettingKeyboard.Button_Speed_Up]: 0, [SettingKeyboard.Alt_Button_Speed_Up]: 0, [SettingKeyboard.Button_Slow_Down]: 0, @@ -133,7 +133,7 @@ export const settingKeyboardBlackList = [ ]; -export function setSettingKeyboard(scene: BattleScene, setting: SettingKeyboard, value: integer): boolean { +export function setSettingKeyboard(setting: SettingKeyboard, value: number): boolean { switch (setting) { case SettingKeyboard.Button_Up: case SettingKeyboard.Button_Down: @@ -148,7 +148,7 @@ export function setSettingKeyboard(scene: BattleScene, setting: SettingKeyboard, case SettingKeyboard.Button_Cycle_Gender: case SettingKeyboard.Button_Cycle_Ability: case SettingKeyboard.Button_Cycle_Nature: - case SettingKeyboard.Button_Cycle_Variant: + case SettingKeyboard.Button_Cycle_Tera: case SettingKeyboard.Button_Speed_Up: case SettingKeyboard.Button_Slow_Down: case SettingKeyboard.Alt_Button_Up: @@ -164,45 +164,24 @@ export function setSettingKeyboard(scene: BattleScene, setting: SettingKeyboard, case SettingKeyboard.Alt_Button_Cycle_Gender: case SettingKeyboard.Alt_Button_Cycle_Ability: case SettingKeyboard.Alt_Button_Cycle_Nature: - case SettingKeyboard.Alt_Button_Cycle_Variant: + case SettingKeyboard.Alt_Button_Cycle_Tera: case SettingKeyboard.Alt_Button_Speed_Up: case SettingKeyboard.Alt_Button_Slow_Down: case SettingKeyboard.Alt_Button_Submit: if (value) { - if (scene.ui) { + if (globalScene.ui) { const cancelHandler = (success: boolean = false) : boolean => { - scene.ui.revertMode(); - (scene.ui.getHandler() as SettingsKeyboardUiHandler).updateBindings(); + globalScene.ui.revertMode(); + (globalScene.ui.getHandler() as SettingsKeyboardUiHandler).updateBindings(); return success; }; - scene.ui.setOverlayMode(Mode.KEYBOARD_BINDING, { + globalScene.ui.setOverlayMode(Mode.KEYBOARD_BINDING, { target: setting, cancelHandler: cancelHandler, }); } } break; - // case SettingKeyboard.Default_Layout: - // if (value && scene.ui) { - // const cancelHandler = () => { - // scene.ui.revertMode(); - // (scene.ui.getHandler() as SettingsKeyboardUiHandler).setOptionCursor(Object.values(SettingKeyboard).indexOf(SettingKeyboard.Default_Layout), 0, true); - // (scene.ui.getHandler() as SettingsKeyboardUiHandler).updateBindings(); - // return false; - // }; - // const changeKeyboardHandler = (keyboardLayout: string) => { - // scene.inputController.setChosenKeyboardLayout(keyboardLayout); - // cancelHandler(); - // return true; - // }; - // scene.ui.setOverlayMode(Mode.OPTION_SELECT, { - // options: [{ - // label: 'Default', - // handler: changeKeyboardHandler, - // }] - // }); - // return false; - // } } return true; diff --git a/src/system/settings/settings.ts b/src/system/settings/settings.ts index 64ddfdae5cf..b750400d6f5 100644 --- a/src/system/settings/settings.ts +++ b/src/system/settings/settings.ts @@ -1,29 +1,22 @@ import { Mode } from "#app/ui/ui"; import i18next from "i18next"; -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { hasTouchscreen } from "#app/touch-controls"; import { updateWindowType } from "#app/ui/ui-theme"; import { CandyUpgradeNotificationChangedEvent } from "#app/events/battle-scene"; -import SettingsUiHandler from "#app/ui/settings/settings-ui-handler"; +import type SettingsUiHandler from "#app/ui/settings/settings-ui-handler"; import { EaseType } from "#enums/ease-type"; import { MoneyFormat } from "#enums/money-format"; import { PlayerGender } from "#enums/player-gender"; -import { getIsInitialized, initI18n } from "#app/plugins/i18n"; -import { ShopCursorTarget } from "#app/enums/shop-cursor-target"; - -function getTranslation(key: string): string { - if (!getIsInitialized()) { - initI18n(); - } - return i18next.t(key); -} +import { ShopCursorTarget } from "#enums/shop-cursor-target"; +import { isLocal } from "#app/utils"; const VOLUME_OPTIONS: SettingOption[] = new Array(11).fill(null).map((_, i) => i ? { value: (i * 10).toString(), label: (i * 10).toString(), } : { value: "Mute", - label: getTranslation("settings:mute") + label: i18next.t("settings:mute") }); const SHOP_OVERLAY_OPACITY_OPTIONS: SettingOption[] = new Array(9).fill(null).map((_, i) => { @@ -157,6 +150,8 @@ export const SettingKeys = { Move_Animations: "MOVE_ANIMATIONS", Show_Stats_on_Level_Up: "SHOW_LEVEL_UP_STATS", Shop_Cursor_Target: "SHOP_CURSOR_TARGET", + Command_Cursor_Memory: "COMMAND_CURSOR_MEMORY", + Dex_For_Devs: "DEX_FOR_DEVS", Candy_Upgrade_Notification: "CANDY_UPGRADE_NOTIFICATION", Candy_Upgrade_Display: "CANDY_UPGRADE_DISPLAY", Move_Info: "MOVE_INFO", @@ -173,15 +168,15 @@ export const SettingKeys = { Field_Volume: "FIELD_VOLUME", SE_Volume: "SE_VOLUME", UI_Volume: "UI_SOUND_EFFECTS", - Music_Preference: "MUSIC_PREFERENCE", + Battle_Music: "BATTLE_MUSIC", Show_BGM_Bar: "SHOW_BGM_BAR", Move_Touch_Controls: "MOVE_TOUCH_CONTROLS", Shop_Overlay_Opacity: "SHOP_OVERLAY_OPACITY" }; export enum MusicPreference { - CONSISTENT, - MIXED + GENFIVE, + ALLGENS } /** @@ -339,6 +334,13 @@ export const Setting: Array = [ default: 0, type: SettingType.GENERAL }, + { + key: SettingKeys.Command_Cursor_Memory, + label: i18next.t("settings:commandCursorMemory"), + options: OFF_ON, + default: 0, + type: SettingType.GENERAL + }, { key: SettingKeys.Enable_Retries, label: i18next.t("settings:enableRetries"), @@ -577,8 +579,8 @@ export const Setting: Array = [ label: i18next.t("settings:consistent") }, { - value: "Mixed Animated", - label: i18next.t("settings:mixedAnimated") + value: "Experimental", + label: i18next.t("settings:experimental") } ], default: 0, @@ -658,19 +660,19 @@ export const Setting: Array = [ type: SettingType.AUDIO }, { - key: SettingKeys.Music_Preference, - label: i18next.t("settings:musicPreference"), + key: SettingKeys.Battle_Music, + label: i18next.t("settings:battleMusic"), options: [ { - value: "Consistent", - label: i18next.t("settings:consistent") + value: "Gen V", + label: i18next.t("settings:musicGenFive") }, { - value: "Mixed", - label: i18next.t("settings:mixed") + value: "All Gens", + label: i18next.t("settings:musicAllGens") } ], - default: MusicPreference.MIXED, + default: MusicPreference.ALLGENS, type: SettingType.AUDIO, requireReload: true }, @@ -691,6 +693,16 @@ export const Setting: Array = [ } ]; +if (isLocal) { + Setting.push({ + key: SettingKeys.Dex_For_Devs, + label: i18next.t("settings:dexForDevs"), + options: OFF_ON, + default: 0, + type: SettingType.GENERAL + }); +} + /** * Return the index of a Setting * @param key SettingKey @@ -702,171 +714,175 @@ export function settingIndex(key: string) { /** * Resets all settings to their defaults - * @param scene current BattleScene */ -export function resetSettings(scene: BattleScene) { - Setting.forEach(s => setSetting(scene, s.key, s.default)); +export function resetSettings() { + Setting.forEach(s => setSetting(s.key, s.default)); } /** - * Updates a setting for current BattleScene - * @param scene current BattleScene + * Updates a setting * @param setting string ideally from SettingKeys * @param value value to update setting with * @returns true if successful, false if not */ -export function setSetting(scene: BattleScene, setting: string, value: integer): boolean { +export function setSetting(setting: string, value: number): boolean { const index: number = settingIndex(setting); if (index === -1) { return false; } switch (Setting[index].key) { case SettingKeys.Game_Speed: - scene.gameSpeed = parseFloat(Setting[index].options[value].value.replace("x", "")); + globalScene.gameSpeed = parseFloat(Setting[index].options[value].value.replace("x", "")); break; case SettingKeys.Master_Volume: - scene.masterVolume = value ? parseInt(Setting[index].options[value].value) * 0.01 : 0; - scene.updateSoundVolume(); + globalScene.masterVolume = value ? parseInt(Setting[index].options[value].value) * 0.01 : 0; + globalScene.updateSoundVolume(); break; case SettingKeys.BGM_Volume: - scene.bgmVolume = value ? parseInt(Setting[index].options[value].value) * 0.01 : 0; - scene.updateSoundVolume(); + globalScene.bgmVolume = value ? parseInt(Setting[index].options[value].value) * 0.01 : 0; + globalScene.updateSoundVolume(); break; case SettingKeys.Field_Volume: - scene.fieldVolume = value ? parseInt(Setting[index].options[value].value) * 0.01 : 0; - scene.updateSoundVolume(); + globalScene.fieldVolume = value ? parseInt(Setting[index].options[value].value) * 0.01 : 0; + globalScene.updateSoundVolume(); break; case SettingKeys.SE_Volume: - scene.seVolume = value ? parseInt(Setting[index].options[value].value) * 0.01 : 0; - scene.updateSoundVolume(); + globalScene.seVolume = value ? parseInt(Setting[index].options[value].value) * 0.01 : 0; + globalScene.updateSoundVolume(); break; case SettingKeys.UI_Volume: - scene.uiVolume = value ? parseInt(Setting[index].options[value].value) * 0.01 : 0; + globalScene.uiVolume = value ? parseInt(Setting[index].options[value].value) * 0.01 : 0; break; - case SettingKeys.Music_Preference: - scene.musicPreference = value; + case SettingKeys.Battle_Music: + globalScene.musicPreference = value; break; case SettingKeys.Damage_Numbers: - scene.damageNumbersMode = value; + globalScene.damageNumbersMode = value; break; case SettingKeys.UI_Theme: - scene.uiTheme = value; + globalScene.uiTheme = value; break; case SettingKeys.Window_Type: - updateWindowType(scene, parseInt(Setting[index].options[value].value)); + updateWindowType(parseInt(Setting[index].options[value].value)); break; case SettingKeys.Tutorials: - scene.enableTutorials = Setting[index].options[value].value === "On"; + globalScene.enableTutorials = Setting[index].options[value].value === "On"; break; case SettingKeys.Move_Info: - scene.enableMoveInfo = Setting[index].options[value].value === "On"; + globalScene.enableMoveInfo = Setting[index].options[value].value === "On"; break; case SettingKeys.Enable_Retries: - scene.enableRetries = Setting[index].options[value].value === "On"; + globalScene.enableRetries = Setting[index].options[value].value === "On"; break; case SettingKeys.Hide_IVs: - scene.hideIvs = Setting[index].options[value].value === "On"; + globalScene.hideIvs = Setting[index].options[value].value === "On"; break; case SettingKeys.Skip_Seen_Dialogues: - scene.skipSeenDialogues = Setting[index].options[value].value === "On"; + globalScene.skipSeenDialogues = Setting[index].options[value].value === "On"; break; case SettingKeys.Egg_Skip: - scene.eggSkipPreference = value; + globalScene.eggSkipPreference = value; break; case SettingKeys.Battle_Style: - scene.battleStyle = value; + globalScene.battleStyle = value; break; case SettingKeys.Show_BGM_Bar: - scene.showBgmBar = Setting[index].options[value].value === "On"; + globalScene.showBgmBar = Setting[index].options[value].value === "On"; break; case SettingKeys.Candy_Upgrade_Notification: - if (scene.candyUpgradeNotification === value) { + if (globalScene.candyUpgradeNotification === value) { break; } - scene.candyUpgradeNotification = value; - scene.eventTarget.dispatchEvent(new CandyUpgradeNotificationChangedEvent(value)); + globalScene.candyUpgradeNotification = value; + globalScene.eventTarget.dispatchEvent(new CandyUpgradeNotificationChangedEvent(value)); break; case SettingKeys.Candy_Upgrade_Display: - scene.candyUpgradeDisplay = value; + globalScene.candyUpgradeDisplay = value; case SettingKeys.Money_Format: switch (Setting[index].options[value].value) { case "Normal": - scene.moneyFormat = MoneyFormat.NORMAL; + globalScene.moneyFormat = MoneyFormat.NORMAL; break; case "Abbreviated": - scene.moneyFormat = MoneyFormat.ABBREVIATED; + globalScene.moneyFormat = MoneyFormat.ABBREVIATED; break; } - scene.updateMoneyText(false); + globalScene.updateMoneyText(false); break; case SettingKeys.Sprite_Set: - scene.experimentalSprites = !!value; + globalScene.experimentalSprites = !!value; if (value) { - scene.initExpSprites(); + globalScene.initExpSprites(); } break; case SettingKeys.Move_Animations: - scene.moveAnimations = Setting[index].options[value].value === "On"; + globalScene.moveAnimations = Setting[index].options[value].value === "On"; break; case SettingKeys.Show_Moveset_Flyout: - scene.showMovesetFlyout = Setting[index].options[value].value === "On"; + globalScene.showMovesetFlyout = Setting[index].options[value].value === "On"; break; case SettingKeys.Show_Arena_Flyout: - scene.showArenaFlyout = Setting[index].options[value].value === "On"; + globalScene.showArenaFlyout = Setting[index].options[value].value === "On"; break; case SettingKeys.Show_Time_Of_Day_Widget: - scene.showTimeOfDayWidget = Setting[index].options[value].value === "On"; + globalScene.showTimeOfDayWidget = Setting[index].options[value].value === "On"; break; case SettingKeys.Time_Of_Day_Animation: - scene.timeOfDayAnimation = Setting[index].options[value].value === "Bounce" ? EaseType.BOUNCE : EaseType.BACK; + globalScene.timeOfDayAnimation = Setting[index].options[value].value === "Bounce" ? EaseType.BOUNCE : EaseType.BACK; break; case SettingKeys.Show_Stats_on_Level_Up: - scene.showLevelUpStats = Setting[index].options[value].value === "On"; + globalScene.showLevelUpStats = Setting[index].options[value].value === "On"; break; case SettingKeys.Shop_Cursor_Target: const selectedValue = shopCursorTargetIndexMap[value]; - scene.shopCursorTarget = selectedValue; + globalScene.shopCursorTarget = selectedValue; + break; + case SettingKeys.Command_Cursor_Memory: + globalScene.commandCursorMemory = Setting[index].options[value].value === "On"; + break; + case SettingKeys.Dex_For_Devs: + globalScene.dexForDevs = Setting[index].options[value].value === "On"; break; case SettingKeys.EXP_Gains_Speed: - scene.expGainsSpeed = value; + globalScene.expGainsSpeed = value; break; case SettingKeys.EXP_Party_Display: - scene.expParty = value; + globalScene.expParty = value; break; case SettingKeys.HP_Bar_Speed: - scene.hpBarSpeed = value; + globalScene.hpBarSpeed = value; break; case SettingKeys.Fusion_Palette_Swaps: - scene.fusionPaletteSwaps = !!value; + globalScene.fusionPaletteSwaps = !!value; break; case SettingKeys.Player_Gender: - if (scene.gameData) { + if (globalScene.gameData) { const female = Setting[index].options[value].value === "Girl"; - scene.gameData.gender = female ? PlayerGender.FEMALE : PlayerGender.MALE; - scene.trainer.setTexture(scene.trainer.texture.key.replace(female ? "m" : "f", female ? "f" : "m")); + globalScene.gameData.gender = female ? PlayerGender.FEMALE : PlayerGender.MALE; + globalScene.trainer.setTexture(globalScene.trainer.texture.key.replace(female ? "m" : "f", female ? "f" : "m")); } else { return false; } break; case SettingKeys.Touch_Controls: - scene.enableTouchControls = Setting[index].options[value].value !== "Disabled" && hasTouchscreen(); + globalScene.enableTouchControls = Setting[index].options[value].value !== "Disabled" && hasTouchscreen(); const touchControls = document.getElementById("touchControls"); if (touchControls) { - touchControls.classList.toggle("visible", scene.enableTouchControls); + touchControls.classList.toggle("visible", globalScene.enableTouchControls); } break; case SettingKeys.Vibration: - scene.enableVibration = Setting[index].options[value].value !== "Disabled" && hasTouchscreen(); + globalScene.enableVibration = Setting[index].options[value].value !== "Disabled" && hasTouchscreen(); break; case SettingKeys.Type_Hints: - scene.typeHints = Setting[index].options[value].value === "On"; + globalScene.typeHints = Setting[index].options[value].value === "On"; break; case SettingKeys.Language: if (value) { - if (scene.ui) { + if (globalScene.ui) { const cancelHandler = () => { - scene.ui.revertMode(); - (scene.ui.getHandler() as SettingsUiHandler).setOptionCursor(-1, 0, true); + globalScene.ui.revertMode(); + (globalScene.ui.getHandler() as SettingsUiHandler).setOptionCursor(-1, 0, true); }; const changeLocaleHandler = (locale: string): boolean => { try { @@ -881,7 +897,7 @@ export function setSetting(scene: BattleScene, setting: string, value: integer): return false; } }; - scene.ui.setOverlayMode(Mode.OPTION_SELECT, { + globalScene.ui.setOverlayMode(Mode.OPTION_SELECT, { options: [ { label: "English", @@ -939,7 +955,7 @@ export function setSetting(scene: BattleScene, setting: string, value: integer): } break; case SettingKeys.Shop_Overlay_Opacity: - scene.updateShopOverlayOpacity(parseInt(Setting[index].options[value].value) * .01); + globalScene.updateShopOverlayOpacity(parseInt(Setting[index].options[value].value) * .01); break; } diff --git a/src/system/trainer-data.ts b/src/system/trainer-data.ts index fc8a14488cc..134d16e25ef 100644 --- a/src/system/trainer-data.ts +++ b/src/system/trainer-data.ts @@ -1,11 +1,10 @@ -import BattleScene from "../battle-scene"; -import { TrainerType } from "#enums/trainer-type"; +import type { TrainerType } from "#enums/trainer-type"; import Trainer, { TrainerVariant } from "../field/trainer"; export default class TrainerData { public trainerType: TrainerType; public variant: TrainerVariant; - public partyTemplateIndex: integer; + public partyTemplateIndex: number; public name: string; public partnerName: string; @@ -18,7 +17,7 @@ export default class TrainerData { this.partnerName = source.partnerName; } - toTrainer(scene: BattleScene): Trainer { - return new Trainer(scene, this.trainerType, this.variant, this.partyTemplateIndex, this.name, this.partnerName); + toTrainer(): Trainer { + return new Trainer(this.trainerType, this.variant, this.partyTemplateIndex, this.name, this.partnerName); } } diff --git a/src/system/version_migration/version_converter.ts b/src/system/version_migration/version_converter.ts index d0c69dc3213..98d340d03aa 100644 --- a/src/system/version_migration/version_converter.ts +++ b/src/system/version_migration/version_converter.ts @@ -1,4 +1,4 @@ -import { SessionSaveData, SystemSaveData } from "../game-data"; +import type { SessionSaveData, SystemSaveData } from "../game-data"; import { version } from "../../../package.json"; // --- v1.0.4 (and below) PATCHES --- // @@ -7,6 +7,9 @@ import * as v1_0_4 from "./versions/v1_0_4"; // --- v1.1.0 PATCHES --- // import * as v1_1_0 from "./versions/v1_1_0"; +// --- v1.7.0 PATCHES --- // +import * as v1_7_0 from "./versions/v1_7_0"; + const LATEST_VERSION = version.split(".").map(value => parseInt(value)); /** @@ -138,6 +141,10 @@ class SessionVersionConverter extends VersionConverter { console.log("Applying v1.1.0 session data migration!"); this.callMigrators(data, v1_1_0.sessionMigrators); } + if (curMinor < 7) { + console.log("Applying v1.7.0 session data migration!"); + this.callMigrators(data, v1_7_0.sessionMigrators); + } } console.log(`Session data successfully migrated to v${version}!`); @@ -164,6 +171,10 @@ class SystemVersionConverter extends VersionConverter { console.log("Applying v1.1.0 system data migraton!"); this.callMigrators(data, v1_1_0.systemMigrators); } + if (curMinor < 7) { + console.log("Applying v1.7.0 system data migration!"); + this.callMigrators(data, v1_7_0.systemMigrators); + } } console.log(`System data successfully migrated to v${version}!`); @@ -190,8 +201,12 @@ class SettingsVersionConverter extends VersionConverter { console.log("Applying v1.1.0 settings data migraton!"); this.callMigrators(data, v1_1_0.settingsMigrators); } + if (curMinor < 7) { + console.log("Applying v1.7.0 settings data migration!"); + this.callMigrators(data, v1_7_0.settingsMigrators); + } } - console.log(`System data successfully migrated to v${version}!`); + console.log(`Settings data successfully migrated to v${version}!`); } } diff --git a/src/system/version_migration/versions/v1_0_4.ts b/src/system/version_migration/versions/v1_0_4.ts index 95f0337ecdd..2795e940866 100644 --- a/src/system/version_migration/versions/v1_0_4.ts +++ b/src/system/version_migration/versions/v1_0_4.ts @@ -1,5 +1,6 @@ import { SettingKeys } from "#app/system/settings/settings"; -import { AbilityAttr, defaultStarterSpecies, DexAttr, SystemSaveData, SessionSaveData } from "#app/system/game-data"; +import type { SystemSaveData, SessionSaveData } from "#app/system/game-data"; +import { AbilityAttr, defaultStarterSpecies, DexAttr } from "#app/system/game-data"; import { allSpecies } from "#app/data/pokemon-species"; import { CustomPokemonData } from "#app/data/custom-pokemon-data"; import { isNullOrUndefined } from "#app/utils"; diff --git a/src/system/version_migration/versions/v1_7_0.ts b/src/system/version_migration/versions/v1_7_0.ts new file mode 100644 index 00000000000..bdb9e6aab9f --- /dev/null +++ b/src/system/version_migration/versions/v1_7_0.ts @@ -0,0 +1,70 @@ +import { getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species"; +import { globalScene } from "#app/global-scene"; +import { DexAttr, type SessionSaveData, type SystemSaveData } from "#app/system/game-data"; +import * as Utils from "#app/utils"; + +export const systemMigrators = [ + /** + * If a starter is caught, but the only forms registered as caught are not starterSelectable, + * unlock the default form. + * @param data {@linkcode SystemSaveData} + */ + function migrateUnselectableForms(data: SystemSaveData) { + if (data.starterData && data.dexData) { + Object.keys(data.starterData).forEach(sd => { + const caughtAttr = data.dexData[sd]?.caughtAttr; + const species = getPokemonSpecies(Number(sd)); + if (caughtAttr && species.forms?.length > 1) { + const selectableForms = species.forms.filter((form, formIndex) => form.isStarterSelectable && (caughtAttr & globalScene.gameData.getFormAttr(formIndex))); + if (selectableForms.length === 0) { + data.dexData[sd].caughtAttr += DexAttr.DEFAULT_FORM; + } + } + }); + } + }, +] as const; + +export const settingsMigrators = [] as const; + +export const sessionMigrators = [ + function migrateTera(data: SessionSaveData) { + for (let i = 0; i < data.modifiers.length;) { + if (data.modifiers[i].className === "TerastallizeModifier") { + data.party.forEach((p) => { + if (p.id === data.modifiers[i].args[0]) { + p.teraType = data.modifiers[i].args[1]; + } + }); + data.modifiers.splice(i, 1); + } else { + i++; + } + } + + for (let i = 0; i < data.enemyModifiers.length;) { + if (data.enemyModifiers[i].className === "TerastallizeModifier") { + data.enemyParty.forEach((p) => { + if (p.id === data.enemyModifiers[i].args[0]) { + p.teraType = data.enemyModifiers[i].args[1]; + } + }); + data.enemyModifiers.splice(i, 1); + } else { + i++; + } + } + + data.party.forEach(p => { + if (Utils.isNullOrUndefined(p.teraType)) { + p.teraType = getPokemonSpeciesForm(p.species, p.formIndex).type1; + } + }); + + data.enemyParty.forEach(p => { + if (Utils.isNullOrUndefined(p.teraType)) { + p.teraType = getPokemonSpeciesForm(p.species, p.formIndex).type1; + } + }); + } +] as const; diff --git a/src/system/voucher.ts b/src/system/voucher.ts index b38fd528c9f..e6bee131797 100644 --- a/src/system/voucher.ts +++ b/src/system/voucher.ts @@ -1,9 +1,8 @@ -import BattleScene from "../battle-scene"; import i18next from "i18next"; import { AchvTier, achvs, getAchievementDescription } from "./achv"; -import { PlayerGender } from "#enums/player-gender"; +import type { PlayerGender } from "#enums/player-gender"; import { TrainerType } from "#enums/trainer-type"; -import { ConditionFn } from "#app/@types/common"; +import type { ConditionFn } from "#app/@types/common"; import { trainerConfigs } from "#app/data/trainer-config"; export enum VoucherType { @@ -26,8 +25,8 @@ export class Voucher { this.conditionFunc = conditionFunc; } - validate(scene: BattleScene, args?: any[]): boolean { - return !this.conditionFunc || this.conditionFunc(scene, args); + validate(args?: any[]): boolean { + return !this.conditionFunc || this.conditionFunc(args); } /** diff --git a/src/test/abilities/dancer.test.ts b/src/test/abilities/dancer.test.ts deleted file mode 100644 index 8fa3d444f37..00000000000 --- a/src/test/abilities/dancer.test.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { BattlerIndex } from "#app/battle"; -import { MovePhase } from "#app/phases/move-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; -import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; - - -describe("Abilities - Dancer", () => { - 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 - .battleType("double") - .moveset([ Moves.SWORDS_DANCE, Moves.SPLASH ]) - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.DANCER) - .enemyMoveset([ Moves.VICTORY_DANCE ]); - }); - - // Reference Link: https://bulbapedia.bulbagarden.net/wiki/Dancer_(Ability) - - it("triggers when dance moves are used, doesn't consume extra PP", async () => { - await game.classicMode.startBattle([ Species.ORICORIO, Species.FEEBAS ]); - - const [ oricorio ] = game.scene.getPlayerField(); - - game.move.select(Moves.SPLASH); - game.move.select(Moves.SWORDS_DANCE, 1); - await game.setTurnOrder([ BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2 ]); - await game.phaseInterceptor.to("MovePhase"); - // immediately copies ally move - await game.phaseInterceptor.to("MovePhase", false); - let currentPhase = game.scene.getCurrentPhase() as MovePhase; - expect(currentPhase.pokemon).toBe(oricorio); - expect(currentPhase.move.moveId).toBe(Moves.SWORDS_DANCE); - await game.phaseInterceptor.to("MoveEndPhase"); - await game.phaseInterceptor.to("MovePhase"); - // immediately copies enemy move - await game.phaseInterceptor.to("MovePhase", false); - currentPhase = game.scene.getCurrentPhase() as MovePhase; - expect(currentPhase.pokemon).toBe(oricorio); - expect(currentPhase.move.moveId).toBe(Moves.VICTORY_DANCE); - await game.phaseInterceptor.to("BerryPhase"); - - // doesn't use PP if copied move is also in moveset - expect(oricorio.moveset[0]?.ppUsed).toBe(0); - }); -}); diff --git a/src/test/abilities/shields_down.test.ts b/src/test/abilities/shields_down.test.ts deleted file mode 100644 index 6100d3e04d9..00000000000 --- a/src/test/abilities/shields_down.test.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { Status } from "#app/data/status-effect"; -import { QuietFormChangePhase } from "#app/phases/quiet-form-change-phase"; -import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; -import { StatusEffect } from "#enums/status-effect"; -import GameManager from "#test/utils/gameManager"; -import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; - - -describe("Abilities - SHIELDS DOWN", () => { - let phaserGame: Phaser.Game; - let game: GameManager; - - beforeAll(() => { - phaserGame = new Phaser.Game({ - type: Phaser.HEADLESS, - }); - }); - - afterEach(() => { - game.phaseInterceptor.restoreOg(); - }); - - beforeEach(() => { - game = new GameManager(phaserGame); - const moveToUse = Moves.SPLASH; - game.override.battleType("single"); - game.override.ability(Abilities.SHIELDS_DOWN); - game.override.moveset([ moveToUse ]); - game.override.enemyMoveset([ Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE ]); - }); - - test( - "check if fainted pokemon switched to base form on arena reset", - async () => { - const meteorForm = 0, - coreForm = 7; - game.override.startingWave(4); - game.override.starterForms({ - [Species.MINIOR]: coreForm, - }); - - await game.startBattle([ Species.MAGIKARP, Species.MINIOR ]); - - const minior = game.scene.getPlayerParty().find((p) => p.species.speciesId === Species.MINIOR)!; - expect(minior).not.toBe(undefined); - expect(minior.formIndex).toBe(coreForm); - - minior.hp = 0; - minior.status = new Status(StatusEffect.FAINT); - expect(minior.isFainted()).toBe(true); - - game.move.select(Moves.SPLASH); - await game.doKillOpponents(); - await game.phaseInterceptor.to(TurnEndPhase); - game.doSelectModifier(); - await game.phaseInterceptor.to(QuietFormChangePhase); - - expect(minior.formIndex).toBe(meteorForm); - }, - ); -}); diff --git a/src/test/battle/error-handling.test.ts b/src/test/battle/error-handling.test.ts deleted file mode 100644 index 208463e7064..00000000000 --- a/src/test/battle/error-handling.test.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; -import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; - -describe("Error Handling", () => { - let phaserGame: Phaser.Game; - let game: GameManager; - const moveToUse = Moves.SPLASH; - - beforeAll(() => { - phaserGame = new Phaser.Game({ - type: Phaser.HEADLESS, - }); - }); - - afterEach(() => { - game.phaseInterceptor.restoreOg(); - }); - - beforeEach(() => { - game = new GameManager(phaserGame); - game.override - .battleType("single") - .startingWave(3); - game.override.starterSpecies(Species.MEWTWO); - game.override.enemySpecies(Species.RATTATA); - game.override.enemyAbility(Abilities.HYDRATION); - game.override.ability(Abilities.ZEN_MODE); - game.override.startingLevel(2000); - game.override.moveset([ moveToUse ]); - game.override.enemyMoveset([ Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE ]); - }); - - it.skip("to next turn", async () => { - await game.startBattle(); - const turn = game.scene.currentBattle.turn; - game.move.select(moveToUse); - await game.toNextTurn(); - expect(game.scene.currentBattle.turn).toBeGreaterThan(turn); - }, 20000); -}); - diff --git a/src/test/field/pokemon.test.ts b/src/test/field/pokemon.test.ts deleted file mode 100644 index 0bfbd03e9d9..00000000000 --- a/src/test/field/pokemon.test.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { Species } from "#app/enums/species"; -import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; -import GameManager from "../utils/gameManager"; -import { PokeballType } from "#enums/pokeball"; -import BattleScene from "#app/battle-scene"; -import { Moves } from "#app/enums/moves"; - -describe("Spec - Pokemon", () => { - let phaserGame: Phaser.Game; - let game: GameManager; - - beforeAll(() => { - phaserGame = new Phaser.Game({ - type: Phaser.HEADLESS, - }); - }); - - afterEach(() => { - game.phaseInterceptor.restoreOg(); - }); - - beforeEach(() => { - game = new GameManager(phaserGame); - }); - - it("should not crash when trying to set status of undefined", async () => { - await game.classicMode.runToSummon([ Species.ABRA ]); - - const pkm = game.scene.getPlayerPokemon()!; - expect(pkm).toBeDefined(); - - expect(pkm.trySetStatus(undefined)).toBe(true); - }); - - describe("Add To Party", () => { - let scene: BattleScene; - - beforeEach(async () => { - game.override.enemySpecies(Species.ZUBAT); - await game.classicMode.runToSummon([ Species.ABRA, Species.ABRA, Species.ABRA, Species.ABRA, Species.ABRA ]); // 5 Abra, only 1 slot left - scene = game.scene; - }); - - it("should append a new pokemon by default", async () => { - const zubat = scene.getEnemyPokemon()!; - zubat.addToParty(PokeballType.LUXURY_BALL); - - const party = scene.getPlayerParty(); - expect(party).toHaveLength(6); - party.forEach((pkm, index) =>{ - expect(pkm.species.speciesId).toBe(index === 5 ? Species.ZUBAT : Species.ABRA); - }); - }); - - it("should put a new pokemon into the passed slotIndex", async () => { - const slotIndex = 1; - const zubat = scene.getEnemyPokemon()!; - zubat.addToParty(PokeballType.LUXURY_BALL, slotIndex); - - const party = scene.getPlayerParty(); - expect(party).toHaveLength(6); - party.forEach((pkm, index) =>{ - expect(pkm.species.speciesId).toBe(index === slotIndex ? Species.ZUBAT : Species.ABRA); - }); - }); - }); - - it("should not share tms between different forms", async () => { - game.override.starterForms({ [Species.ROTOM]: 4 }); - - await game.classicMode.startBattle([ Species.ROTOM ]); - - const fanRotom = game.scene.getPlayerPokemon()!; - - expect(fanRotom.compatibleTms).not.toContain(Moves.BLIZZARD); - expect(fanRotom.compatibleTms).toContain(Moves.AIR_SLASH); - }); -}); diff --git a/src/test/moves/instruct.test.ts b/src/test/moves/instruct.test.ts deleted file mode 100644 index 0e227ef6a3f..00000000000 --- a/src/test/moves/instruct.test.ts +++ /dev/null @@ -1,315 +0,0 @@ -import { BattlerIndex } from "#app/battle"; -import type Pokemon from "#app/field/pokemon"; -import { MoveResult } from "#app/field/pokemon"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; -import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; - -describe("Moves - Instruct", () => { - let phaserGame: Phaser.Game; - let game: GameManager; - - function instructSuccess(pokemon: Pokemon, move: Moves): void { - expect(pokemon.getLastXMoves(-1)[0].move).toBe(move); - expect(pokemon.getLastXMoves(-1)[1].move).toBe(pokemon.getLastXMoves()[0].move); - expect(pokemon.getMoveset().find(m => m?.moveId === move)?.ppUsed).toBe(2); - } - - beforeAll(() => { - phaserGame = new Phaser.Game({ - type: Phaser.HEADLESS, - }); - }); - - afterEach(() => { - game.phaseInterceptor.restoreOg(); - }); - - beforeEach(() => { - game = new GameManager(phaserGame); - game.override - .battleType("single") - .enemySpecies(Species.SHUCKLE) - .enemyAbility(Abilities.NO_GUARD) - .enemyLevel(100) - .startingLevel(100) - .ability(Abilities.BALL_FETCH) - .moveset([ Moves.INSTRUCT, Moves.SONIC_BOOM, Moves.SPLASH, Moves.TORMENT ]) - .disableCrits(); - }); - - it("should repeat enemy's attack move when moving last", async () => { - await game.classicMode.startBattle([ Species.AMOONGUSS ]); - - const enemy = game.scene.getEnemyPokemon()!; - game.move.changeMoveset(enemy, Moves.SONIC_BOOM); - - game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - await game.forceEnemyMove(Moves.SONIC_BOOM, BattlerIndex.PLAYER); - await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); - await game.phaseInterceptor.to("TurnEndPhase", false); - - expect(game.scene.getPlayerPokemon()?.getInverseHp()).toBe(40); - instructSuccess(enemy, Moves.SONIC_BOOM); - }); - - it("should repeat enemy's move through substitute", async () => { - await game.classicMode.startBattle([ Species.AMOONGUSS ]); - - const enemy = game.scene.getEnemyPokemon()!; - game.move.changeMoveset(enemy, [ Moves.SONIC_BOOM, Moves.SUBSTITUTE ]); - - game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.SUBSTITUTE); - await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); - await game.toNextTurn(); - - game.move.select(Moves.INSTRUCT); - await game.forceEnemyMove(Moves.SONIC_BOOM); - await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); - await game.phaseInterceptor.to("TurnEndPhase", false); - - expect(game.scene.getPlayerPokemon()?.getInverseHp()).toBe(40); - instructSuccess(game.scene.getEnemyPokemon()!, Moves.SONIC_BOOM); - }); - - it("should repeat ally's attack on enemy", async () => { - game.override - .battleType("double") - .moveset([]); - await game.classicMode.startBattle([ Species.AMOONGUSS, Species.SHUCKLE ]); - - const [ amoonguss, shuckle ] = game.scene.getPlayerField(); - game.move.changeMoveset(amoonguss, Moves.INSTRUCT); - game.move.changeMoveset(shuckle, Moves.SONIC_BOOM); - - game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2); - game.move.select(Moves.SONIC_BOOM, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); - await game.forceEnemyMove(Moves.SPLASH); - await game.forceEnemyMove(Moves.SPLASH); - await game.setTurnOrder([ BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); - await game.phaseInterceptor.to("TurnEndPhase", false); - - expect(game.scene.getEnemyField()[0].getInverseHp()).toBe(40); - instructSuccess(shuckle, Moves.SONIC_BOOM); - }); - - // TODO: Enable test case once gigaton hammer (and blood moon) is fixed - it.todo("should repeat enemy's Gigaton Hammer", async () => { - game.override - .enemyLevel(5); - await game.classicMode.startBattle([ Species.AMOONGUSS ]); - - const enemy = game.scene.getEnemyPokemon()!; - game.move.changeMoveset(enemy, Moves.GIGATON_HAMMER); - - game.move.select(Moves.INSTRUCT); - await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); - await game.phaseInterceptor.to("TurnEndPhase", false); - - instructSuccess(enemy, Moves.GIGATON_HAMMER); - }); - - it("should respect enemy's status condition", async () => { - game.override - .moveset([ Moves.THUNDER_WAVE, Moves.INSTRUCT ]) - .enemyMoveset([ Moves.SPLASH, Moves.SONIC_BOOM ]); - await game.classicMode.startBattle([ Species.AMOONGUSS ]); - - game.move.select(Moves.THUNDER_WAVE); - await game.forceEnemyMove(Moves.SONIC_BOOM); - await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); - await game.toNextTurn(); - - game.move.select(Moves.INSTRUCT); - await game.forceEnemyMove(Moves.SPLASH); - await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); - await game.move.forceStatusActivation(true); - await game.phaseInterceptor.to("MovePhase"); - await game.move.forceStatusActivation(false); - await game.phaseInterceptor.to("TurnEndPhase", false); - - const moveHistory = game.scene.getEnemyPokemon()!.getMoveHistory(); - expect(moveHistory.length).toBe(3); - expect(moveHistory[0].move).toBe(Moves.SONIC_BOOM); - expect(moveHistory[1].move).toBe(Moves.NONE); - expect(moveHistory[2].move).toBe(Moves.SONIC_BOOM); - }); - - it("should not repeat enemy's out of pp move", async () => { - game.override.enemySpecies(Species.UNOWN); - await game.classicMode.startBattle([ Species.AMOONGUSS ]); - - const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.changeMoveset(enemyPokemon, Moves.HIDDEN_POWER); - const moveUsed = enemyPokemon.moveset.find(m => m?.moveId === Moves.HIDDEN_POWER)!; - moveUsed.ppUsed = moveUsed.getMovePp() - 1; - - game.move.select(Moves.INSTRUCT); - await game.forceEnemyMove(Moves.HIDDEN_POWER); - await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); - await game.phaseInterceptor.to("TurnEndPhase", false); - - const playerMove = game.scene.getPlayerPokemon()!.getLastXMoves()!; - expect(playerMove[0].result).toBe(MoveResult.FAIL); - expect(enemyPokemon.getMoveHistory().length).toBe(1); - }); - - it("should fail if no move has yet been used by target", async () => { - game.override.enemyMoveset(Moves.SPLASH); - await game.classicMode.startBattle([ Species.AMOONGUSS ]); - - game.move.select(Moves.INSTRUCT); - await game.forceEnemyMove(Moves.SPLASH); - await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); - await game.phaseInterceptor.to("TurnEndPhase", false); - - expect(game.scene.getPlayerPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); - }); - - it("should attempt to call enemy's disabled move, but move use itself should fail", async () => { - game.override - .moveset([ Moves.INSTRUCT, Moves.DISABLE ]) - .battleType("double"); - await game.classicMode.startBattle([ Species.AMOONGUSS, Species.DROWZEE ]); - - const [ enemy1, enemy2 ] = game.scene.getEnemyField(); - game.move.changeMoveset(enemy1, Moves.SONIC_BOOM); - game.move.changeMoveset(enemy2, Moves.SPLASH); - - game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(Moves.DISABLE, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); - await game.forceEnemyMove(Moves.SONIC_BOOM, BattlerIndex.PLAYER); - await game.forceEnemyMove(Moves.SPLASH); - await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2 ]); - await game.phaseInterceptor.to("TurnEndPhase", false); - - expect(game.scene.getPlayerField()[0].getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); - const enemyMove = game.scene.getEnemyPokemon()!.getLastXMoves()[0]; - expect(enemyMove.result).toBe(MoveResult.FAIL); - expect(game.scene.getEnemyPokemon()!.getMoveset().find(m => m?.moveId === Moves.SONIC_BOOM)?.ppUsed).toBe(1); - - }); - - it("should not repeat enemy's move through protect", async () => { - await game.classicMode.startBattle([ Species.AMOONGUSS ]); - - const MoveToUse = Moves.PROTECT; - const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.changeMoveset(enemyPokemon, MoveToUse); - game.move.select(Moves.INSTRUCT); - await game.forceEnemyMove(Moves.PROTECT); - await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); - await game.phaseInterceptor.to("TurnEndPhase", false); - - expect(enemyPokemon.getLastXMoves(-1)[0].move).toBe(Moves.PROTECT); - expect(enemyPokemon.getLastXMoves(-1)[1]).toBeUndefined(); // undefined because protect failed - expect(enemyPokemon.getMoveset().find(m => m?.moveId === Moves.PROTECT)?.ppUsed).toBe(1); - }); - - it("should not repeat enemy's charging move", async () => { - game.override - .enemyMoveset([ Moves.SONIC_BOOM, Moves.HYPER_BEAM ]) - .enemyLevel(5); - await game.classicMode.startBattle([ Species.SHUCKLE ]); - - const player = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; - enemyPokemon.battleSummonData.moveHistory = [{ move: Moves.SONIC_BOOM, targets: [ BattlerIndex.PLAYER ], result: MoveResult.SUCCESS, virtual: false }]; - - game.move.select(Moves.INSTRUCT); - await game.forceEnemyMove(Moves.HYPER_BEAM); - await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); - await game.toNextTurn(); - - expect(player.getLastXMoves()[0].result).toBe(MoveResult.FAIL); - - game.move.select(Moves.INSTRUCT); - await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); - await game.phaseInterceptor.to("TurnEndPhase", false); - - expect(player.getLastXMoves()[0].result).toBe(MoveResult.FAIL); - }); - - it("should not repeat dance move not known by target", async () => { - game.override - .battleType("double") - .moveset([ Moves.INSTRUCT, Moves.FIERY_DANCE ]) - .enemyMoveset(Moves.SPLASH) - .enemyAbility(Abilities.DANCER); - await game.classicMode.startBattle([ Species.SHUCKLE, Species.SHUCKLE ]); - - game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(Moves.FIERY_DANCE, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); - await game.forceEnemyMove(Moves.SPLASH); - await game.forceEnemyMove(Moves.SPLASH); - await game.setTurnOrder([ BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); - await game.phaseInterceptor.to("TurnEndPhase", false); - - expect(game.scene.getPlayerField()[0].getLastXMoves()[0].result).toBe(MoveResult.FAIL); - }); - - it("should cause multi-hit moves to hit the appropriate number of times in singles", async () => { - game.override - .enemyAbility(Abilities.SKILL_LINK) - .enemyMoveset(Moves.BULLET_SEED); - await game.classicMode.startBattle([ Species.BULBASAUR ]); - - const player = game.scene.getPlayerPokemon()!; - - game.move.select(Moves.SPLASH); - await game.toNextTurn(); - - game.move.select(Moves.INSTRUCT); - await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); - await game.phaseInterceptor.to("BerryPhase"); - - expect(player.turnData.attacksReceived.length).toBe(10); - - await game.toNextTurn(); - game.move.select(Moves.INSTRUCT); - await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); - await game.phaseInterceptor.to("BerryPhase"); - - expect(player.turnData.attacksReceived.length).toBe(10); - }); - - it("should cause multi-hit moves to hit the appropriate number of times in doubles", async () => { - game.override - .battleType("double") - .enemyAbility(Abilities.SKILL_LINK) - .enemyMoveset([ Moves.BULLET_SEED, Moves.SPLASH ]) - .enemyLevel(5); - await game.classicMode.startBattle([ Species.BULBASAUR, Species.IVYSAUR ]); - - const [ , ivysaur ] = game.scene.getPlayerField(); - - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.BULLET_SEED, BattlerIndex.PLAYER_2); - await game.forceEnemyMove(Moves.SPLASH); - await game.toNextTurn(); - - game.move.select(Moves.INSTRUCT, 0, BattlerIndex.ENEMY); - game.move.select(Moves.INSTRUCT, 1, BattlerIndex.ENEMY); - await game.forceEnemyMove(Moves.BULLET_SEED, BattlerIndex.PLAYER_2); - await game.forceEnemyMove(Moves.SPLASH); - await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); - await game.phaseInterceptor.to("BerryPhase"); - - expect(ivysaur.turnData.attacksReceived.length).toBe(15); - - await game.toNextTurn(); - game.move.select(Moves.INSTRUCT, 0, BattlerIndex.ENEMY); - game.move.select(Moves.INSTRUCT, 1, BattlerIndex.ENEMY); - await game.forceEnemyMove(Moves.BULLET_SEED, BattlerIndex.PLAYER_2); - await game.forceEnemyMove(Moves.SPLASH); - await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2 ]); - await game.phaseInterceptor.to("BerryPhase"); - - expect(ivysaur.turnData.attacksReceived.length).toBe(15); - }); -}); diff --git a/src/test/moves/tera_blast.test.ts b/src/test/moves/tera_blast.test.ts deleted file mode 100644 index 311ac0f0d0e..00000000000 --- a/src/test/moves/tera_blast.test.ts +++ /dev/null @@ -1,116 +0,0 @@ -import { BattlerIndex } from "#app/battle"; -import { Stat } from "#enums/stat"; -import { allMoves } from "#app/data/move"; -import { Type } from "#enums/type"; -import { Abilities } from "#app/enums/abilities"; -import { HitResult } from "#app/field/pokemon"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; -import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; - -describe("Moves - Tera Blast", () => { - let phaserGame: Phaser.Game; - let game: GameManager; - const moveToCheck = allMoves[Moves.TERA_BLAST]; - - beforeAll(() => { - phaserGame = new Phaser.Game({ - type: Phaser.HEADLESS, - }); - }); - - afterEach(() => { - game.phaseInterceptor.restoreOg(); - }); - - beforeEach(() => { - game = new GameManager(phaserGame); - - game.override - .battleType("single") - .disableCrits() - .starterSpecies(Species.FEEBAS) - .moveset([ Moves.TERA_BLAST ]) - .ability(Abilities.BALL_FETCH) - .startingHeldItems([{ name: "TERA_SHARD", type: Type.FIRE }]) - .enemySpecies(Species.MAGIKARP) - .enemyMoveset(Moves.SPLASH) - .enemyAbility(Abilities.BALL_FETCH) - .enemyLevel(20); - - vi.spyOn(moveToCheck, "calculateBattlePower"); - }); - - it("changes type to match user's tera type", async () => { - game.override - .enemySpecies(Species.FURRET) - .startingHeldItems([{ name: "TERA_SHARD", type: Type.FIGHTING }]); - await game.startBattle(); - const enemyPokemon = game.scene.getEnemyPokemon()!; - vi.spyOn(enemyPokemon, "apply"); - - game.move.select(Moves.TERA_BLAST); - await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); - await game.phaseInterceptor.to("MoveEffectPhase"); - - expect(enemyPokemon.apply).toHaveReturnedWith(HitResult.SUPER_EFFECTIVE); - }, 20000); - - it("increases power if user is Stellar tera type", async () => { - game.override.startingHeldItems([{ name: "TERA_SHARD", type: Type.STELLAR }]); - - await game.startBattle(); - - game.move.select(Moves.TERA_BLAST); - await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); - await game.phaseInterceptor.to("MoveEffectPhase"); - - expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(100); - }, 20000); - - it("is super effective against terastallized targets if user is Stellar tera type", async () => { - game.override.startingHeldItems([{ name: "TERA_SHARD", type: Type.STELLAR }]); - - await game.startBattle(); - - const enemyPokemon = game.scene.getEnemyPokemon()!; - vi.spyOn(enemyPokemon, "apply"); - vi.spyOn(enemyPokemon, "isTerastallized").mockReturnValue(true); - - game.move.select(Moves.TERA_BLAST); - await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); - await game.phaseInterceptor.to("MoveEffectPhase"); - - expect(enemyPokemon.apply).toHaveReturnedWith(HitResult.SUPER_EFFECTIVE); - }); - - // Currently abilities are bugged and can't see when a move's category is changed - it.skip("uses the higher stat of the user's Atk and SpAtk for damage calculation", async () => { - game.override.enemyAbility(Abilities.TOXIC_DEBRIS); - await game.startBattle(); - - const playerPokemon = game.scene.getPlayerPokemon()!; - playerPokemon.stats[Stat.ATK] = 100; - playerPokemon.stats[Stat.SPATK] = 1; - - game.move.select(Moves.TERA_BLAST); - await game.phaseInterceptor.to("TurnEndPhase"); - expect(game.scene.getEnemyPokemon()!.battleData.abilityRevealed).toBe(true); - }, 20000); - - it("causes stat drops if user is Stellar tera type", async () => { - game.override.startingHeldItems([{ name: "TERA_SHARD", type: Type.STELLAR }]); - await game.startBattle(); - - const playerPokemon = game.scene.getPlayerPokemon()!; - - game.move.select(Moves.TERA_BLAST); - await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); - await game.phaseInterceptor.to("MoveEndPhase"); - - expect(playerPokemon.getStatStage(Stat.SPATK)).toBe(-1); - expect(playerPokemon.getStatStage(Stat.ATK)).toBe(-1); - }, 20000); -}); diff --git a/src/test/phases/learn-move-phase.test.ts b/src/test/phases/learn-move-phase.test.ts deleted file mode 100644 index c4fa0e8bf45..00000000000 --- a/src/test/phases/learn-move-phase.test.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; -import Phaser from "phaser"; -import GameManager from "#test/utils/gameManager"; -import { Species } from "#enums/species"; -import { Moves } from "#enums/moves"; -import { LearnMovePhase } from "#app/phases/learn-move-phase"; - -describe("Learn Move Phase", () => { - 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.xpMultiplier(50); - }); - - it("If Pokemon has less than 4 moves, its newest move will be added to the lowest empty index", async () => { - game.override.moveset([ Moves.SPLASH ]); - await game.startBattle([ Species.BULBASAUR ]); - const pokemon = game.scene.getPlayerPokemon()!; - const newMovePos = pokemon?.getMoveset().length; - game.move.select(Moves.SPLASH); - await game.doKillOpponents(); - await game.phaseInterceptor.to(LearnMovePhase); - const levelMove = pokemon.getLevelMoves(5)[0]; - const levelReq = levelMove[0]; - const levelMoveId = levelMove[1]; - expect(pokemon.level).toBeGreaterThanOrEqual(levelReq); - expect(pokemon?.getMoveset()[newMovePos]?.moveId).toBe(levelMoveId); - }); - - /** - * Future Tests: - * If a Pokemon has four moves, the user can specify an old move to be forgotten and a new move will take its place. - * If a Pokemon has four moves, the user can reject the new move, keeping the moveset the same. - */ -}); diff --git a/src/timed-event-manager.ts b/src/timed-event-manager.ts index 9515be7b49e..c12f9d569c0 100644 --- a/src/timed-event-manager.ts +++ b/src/timed-event-manager.ts @@ -1,11 +1,19 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { TextStyle, addTextObject } from "#app/ui/text"; -import { nil } from "#app/utils"; +import type { nil } from "#app/utils"; +import { isNullOrUndefined } from "#app/utils"; import i18next from "i18next"; +import { Species } from "#enums/species"; +import type { WeatherPoolEntry } from "#app/data/weather"; +import { WeatherType } from "#enums/weather-type"; +import { CLASSIC_CANDY_FRIENDSHIP_MULTIPLIER } from "./data/balance/starters"; +import { MysteryEncounterType } from "./enums/mystery-encounter-type"; +import { MysteryEncounterTier } from "./enums/mystery-encounter-tier"; export enum EventType { SHINY, - NO_TIMER_DISPLAY + NO_TIMER_DISPLAY, + LUCK } interface EventBanner { @@ -16,26 +24,189 @@ interface EventBanner { availableLangs?: string[]; } +interface EventEncounter { + species: Species; + blockEvolution?: boolean; + formIndex?: number; +} + +interface EventMysteryEncounterTier { + mysteryEncounter: MysteryEncounterType; + tier?: MysteryEncounterTier; + disable?: boolean; +} + interface TimedEvent extends EventBanner { name: string; eventType: EventType; shinyMultiplier?: number; - friendshipMultiplier?: number; + classicFriendshipMultiplier?: number; + luckBoost?: number; + upgradeUnlockedVouchers?: boolean; startDate: Date; endDate: Date; + eventEncounters?: EventEncounter[]; + delibirdyBuff?: string[]; + weather?: WeatherPoolEntry[]; + mysteryEncounterTierChanges?: EventMysteryEncounterTier[]; + luckBoostedSpecies?: Species[]; + boostFusions?: boolean; //MODIFIER REWORK PLEASE } const timedEvents: TimedEvent[] = [ { - name: "Halloween Update", + name: "Winter Holiday Update", eventType: EventType.SHINY, shinyMultiplier: 2, - friendshipMultiplier: 2, - startDate: new Date(Date.UTC(2024, 9, 27, 0)), - endDate: new Date(Date.UTC(2024, 10, 4, 0)), - bannerKey: "halloween2024-event-", + upgradeUnlockedVouchers: true, + startDate: new Date(Date.UTC(2024, 11, 21, 0)), + endDate: new Date(Date.UTC(2025, 0, 4, 0)), + bannerKey: "winter_holidays2024-event-", scale: 0.21, - availableLangs: [ "en", "de", "it", "fr", "ja", "ko", "es-ES", "pt-BR", "zh-CN" ] + availableLangs: [ "en", "de", "it", "fr", "ja", "ko", "es-ES", "pt-BR", "zh-CN" ], + eventEncounters: [ + { species: Species.GIMMIGHOUL, blockEvolution: true }, + { species: Species.DELIBIRD }, + { species: Species.STANTLER }, + { species: Species.CYNDAQUIL }, + { species: Species.PIPLUP }, + { species: Species.CHESPIN }, + { species: Species.BALTOY }, + { species: Species.SNOVER }, + { species: Species.CHINGLING }, + { species: Species.LITWICK }, + { species: Species.CUBCHOO }, + { species: Species.SWIRLIX }, + { species: Species.AMAURA }, + { species: Species.MUDBRAY }, + { species: Species.ROLYCOLY }, + { species: Species.MILCERY }, + { species: Species.SMOLIV }, + { species: Species.ALOLA_VULPIX }, + { species: Species.GALAR_DARUMAKA }, + { species: Species.IRON_BUNDLE } + ], + delibirdyBuff: [ "CATCHING_CHARM", "SHINY_CHARM", "ABILITY_CHARM", "EXP_CHARM", "SUPER_EXP_CHARM", "HEALING_CHARM" ], + weather: [{ weatherType: WeatherType.SNOW, weight: 1 }], + mysteryEncounterTierChanges: [ + { mysteryEncounter: MysteryEncounterType.DELIBIRDY, tier: MysteryEncounterTier.COMMON }, + { mysteryEncounter: MysteryEncounterType.PART_TIMER, disable: true }, + { mysteryEncounter: MysteryEncounterType.AN_OFFER_YOU_CANT_REFUSE, disable: true }, + { mysteryEncounter: MysteryEncounterType.FIELD_TRIP, disable: true }, + { mysteryEncounter: MysteryEncounterType.DEPARTMENT_STORE_SALE, disable: true } + ] + }, + { + name: "Year of the Snake", + eventType: EventType.LUCK, + luckBoost: 1, + startDate: new Date(Date.UTC(2025, 0, 29, 0)), + endDate: new Date(Date.UTC(2025, 1, 3, 0)), + bannerKey: "yearofthesnakeevent-", + scale: 0.21, + availableLangs: [ "en", "de", "it", "fr", "ja", "ko", "es-ES", "pt-BR", "zh-CN" ], + eventEncounters: [ + { species: Species.EKANS }, + { species: Species.ONIX }, + { species: Species.DRATINI }, + { species: Species.CLEFFA }, + { species: Species.UMBREON }, + { species: Species.DUNSPARCE }, + { species: Species.TEDDIURSA }, + { species: Species.SEVIPER }, + { species: Species.LUNATONE }, + { species: Species.CHINGLING }, + { species: Species.SNIVY }, + { species: Species.DARUMAKA }, + { species: Species.DRAMPA }, + { species: Species.SILICOBRA }, + { species: Species.BLOODMOON_URSALUNA } + ], + luckBoostedSpecies: [ + Species.EKANS, Species.ARBOK, + Species.ONIX, Species.STEELIX, + Species.DRATINI, Species.DRAGONAIR, Species.DRAGONITE, + Species.CLEFFA, Species.CLEFAIRY, Species.CLEFABLE, + Species.UMBREON, + Species.DUNSPARCE, Species.DUDUNSPARCE, + Species.TEDDIURSA, Species.URSARING, Species.URSALUNA, + Species.SEVIPER, + Species.LUNATONE, + Species.RAYQUAZA, + Species.CHINGLING, Species.CHIMECHO, + Species.CRESSELIA, + Species.DARKRAI, + Species.SNIVY, Species.SERVINE, Species.SERPERIOR, + Species.DARUMAKA, Species.DARMANITAN, + Species.ZYGARDE, + Species.DRAMPA, + Species.LUNALA, + Species.BLACEPHALON, + Species.SILICOBRA, Species.SANDACONDA, + Species.ROARING_MOON, + Species.BLOODMOON_URSALUNA + ] + }, + { + name: "Valentine", + eventType: EventType.SHINY, + startDate: new Date(Date.UTC(2025, 1, 10)), + endDate: new Date(Date.UTC(2025, 1, 21)), + boostFusions: true, + shinyMultiplier: 2, + bannerKey: "valentines2025event-", + scale: 0.21, + availableLangs: [ "en", "de", "it", "fr", "ja", "ko", "es-ES", "pt-BR", "zh-CN" ], + eventEncounters: [ + { species: Species.NIDORAN_F }, + { species: Species.NIDORAN_M }, + { species: Species.IGGLYBUFF }, + { species: Species.SMOOCHUM }, + { species: Species.VOLBEAT }, + { species: Species.ILLUMISE }, + { species: Species.ROSELIA }, + { species: Species.LUVDISC }, + { species: Species.WOOBAT }, + { species: Species.FRILLISH }, + { species: Species.ALOMOMOLA }, + { species: Species.FURFROU, formIndex: 1 }, // Heart Trim + { species: Species.ESPURR }, + { species: Species.SPRITZEE }, + { species: Species.SWIRLIX }, + { species: Species.APPLIN }, + { species: Species.MILCERY }, + { species: Species.INDEEDEE }, + { species: Species.TANDEMAUS }, + { species: Species.ENAMORUS } + ], + luckBoostedSpecies: [ Species.LUVDISC ] + }, + { + name: "PKMNDAY2025", + eventType: EventType.LUCK, + startDate: new Date(Date.UTC(2025, 1, 27)), + endDate: new Date(Date.UTC(2025, 2, 4)), + classicFriendshipMultiplier: 4, + bannerKey: "pkmnday2025event-", + scale: 0.21, + availableLangs: [ "en", "de", "it", "fr", "ja", "ko", "es-ES", "pt-BR", "zh-CN" ], + eventEncounters: [ + { species: Species.PIKACHU, formIndex: 1, blockEvolution: true }, // Partner Form + { species: Species.EEVEE, formIndex: 1, blockEvolution: true }, // Partner Form + { species: Species.CHIKORITA }, + { species: Species.TOTODILE }, + { species: Species.TEPIG } + ], + luckBoostedSpecies: [ + Species.PICHU, Species.PIKACHU, Species.RAICHU, Species.ALOLA_RAICHU, + Species.PSYDUCK, Species.GOLDUCK, + Species.EEVEE, Species.FLAREON, Species.JOLTEON, Species.VAPOREON, Species.ESPEON, Species.UMBREON, Species.LEAFEON, Species.GLACEON, Species.SYLVEON, + Species.CHIKORITA, Species.BAYLEEF, Species.MEGANIUM, + Species.TOTODILE, Species.CROCONAW, Species.FERALIGATR, + Species.TEPIG, Species.PIGNITE, Species.EMBOAR, + Species.ZYGARDE, + Species.ETERNAL_FLOETTE + ] } ]; @@ -62,16 +233,6 @@ export class TimedEventManager { return activeEvents.length > 0; } - getFriendshipMultiplier(): number { - let multiplier = 1; - const friendshipEvents = timedEvents.filter((te) => this.isActive(te)); - friendshipEvents.forEach((fe) => { - multiplier *= fe.friendshipMultiplier ?? 1; - }); - - return multiplier; - } - getShinyMultiplier(): number { let multiplier = 1; const shinyEvents = timedEvents.filter((te) => te.eventType === EventType.SHINY && this.isActive(te)); @@ -85,6 +246,124 @@ export class TimedEventManager { getEventBannerFilename(): string { return timedEvents.find((te: TimedEvent) => this.isActive(te))?.bannerKey ?? ""; } + + getEventEncounters(): EventEncounter[] { + const ret: EventEncounter[] = []; + timedEvents.filter((te) => this.isActive(te)).map((te) => { + if (!isNullOrUndefined(te.eventEncounters)) { + ret.push(...te.eventEncounters); + } + }); + return ret; + } + + /** + * For events that change the classic candy friendship multiplier + * @returns The highest classic friendship multiplier among the active events, or the default CLASSIC_CANDY_FRIENDSHIP_MULTIPLIER + */ + getClassicFriendshipMultiplier(): number { + let multiplier = CLASSIC_CANDY_FRIENDSHIP_MULTIPLIER; + const classicFriendshipEvents = timedEvents.filter((te) => this.isActive(te)); + classicFriendshipEvents.forEach((fe) => { + if (!isNullOrUndefined(fe.classicFriendshipMultiplier) && fe.classicFriendshipMultiplier > multiplier) { + multiplier = fe.classicFriendshipMultiplier; + } + }); + return multiplier; + } + + /** + * For events where defeated bosses (Gym Leaders, E4 etc) give out Voucher Plus even if they were defeated before + * @returns Whether vouchers should be upgraded + */ + getUpgradeUnlockedVouchers(): boolean { + return timedEvents.some((te) => this.isActive(te) && (te.upgradeUnlockedVouchers ?? false)); + } + + /** + * For events where Delibirdy gives extra items + * @returns list of ids of {@linkcode ModifierType}s that Delibirdy hands out as a bonus + */ + getDelibirdyBuff(): string[] { + const ret: string[] = []; + timedEvents.filter((te) => this.isActive(te)).map((te) => { + if (!isNullOrUndefined(te.delibirdyBuff)) { + ret.push(...te.delibirdyBuff); + } + }); + return ret; + } + + /** + * For events where there's a set weather for town biome (other biomes are hard) + * @returns Event weathers for town + */ + getWeather(): WeatherPoolEntry[] { + const ret: WeatherPoolEntry[] = []; + timedEvents.filter((te) => this.isActive(te)).map((te) => { + if (!isNullOrUndefined(te.weather)) { + ret.push(...te.weather); + } + }); + return ret; + } + + getAllMysteryEncounterChanges(): EventMysteryEncounterTier[] { + const ret: EventMysteryEncounterTier[] = []; + timedEvents.filter((te) => this.isActive(te)).map((te) => { + if (!isNullOrUndefined(te.mysteryEncounterTierChanges)) { + ret.push(...te.mysteryEncounterTierChanges); + } + }); + return ret; + } + + getEventMysteryEncountersDisabled(): MysteryEncounterType[] { + const ret: MysteryEncounterType[] = []; + timedEvents.filter((te) => this.isActive(te) && !isNullOrUndefined(te.mysteryEncounterTierChanges)).map((te) => { + te.mysteryEncounterTierChanges?.map((metc) => { + if (metc.disable) { + ret.push(metc.mysteryEncounter); + } + }); + }); + return ret; + } + + getMysteryEncounterTierForEvent(encounterType: MysteryEncounterType, normal: MysteryEncounterTier): MysteryEncounterTier { + let ret = normal; + timedEvents.filter((te) => this.isActive(te) && !isNullOrUndefined(te.mysteryEncounterTierChanges)).map((te) => { + te.mysteryEncounterTierChanges?.map((metc) => { + if (metc.mysteryEncounter === encounterType) { + ret = metc.tier ?? normal; + } + }); + }); + return ret; + } + + getEventLuckBoost(): number { + let ret = 0; + const luckEvents = timedEvents.filter((te) => this.isActive(te) && !isNullOrUndefined(te.luckBoost)); + luckEvents.forEach((le) => { + ret += le.luckBoost!; + }); + return ret; + } + + getEventLuckBoostedSpecies(): Species[] { + const ret: Species[] = []; + timedEvents.filter((te) => this.isActive(te)).map((te) => { + if (!isNullOrUndefined(te.luckBoostedSpecies)) { + ret.push(...te.luckBoostedSpecies.filter(s => !ret.includes(s))); + } + }); + return ret; + } + + areFusionsBoosted(): boolean { + return timedEvents.some((te) => this.isActive(te) && te.boostFusions); + } } export class TimedEventDisplay extends Phaser.GameObjects.Container { @@ -94,9 +373,9 @@ export class TimedEventDisplay extends Phaser.GameObjects.Container { private availableWidth: number; private eventTimer: NodeJS.Timeout | null; - constructor(scene: BattleScene, x: number, y: number, event?: TimedEvent) { - super(scene, x, y); - this.availableWidth = scene.scaledCanvas.width; + constructor(x: number, y: number, event?: TimedEvent) { + super(globalScene, x, y); + this.availableWidth = globalScene.scaledCanvas.width; this.event = event; this.setVisible(false); } @@ -132,14 +411,13 @@ 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 = this.scene.game.canvas.height / 6 - padding - (showTimer ? 10 : 0) - (this.event.yOffset ?? 0); - this.banner = new Phaser.GameObjects.Image(this.scene, this.availableWidth / 2, yPosition - padding, key); + const yPosition = globalScene.game.canvas.height / 6 - 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); this.banner.setScale(this.event.scale ?? 0.18); if (showTimer) { this.eventTimerText = addTextObject( - this.scene, this.banner.x, this.banner.y + 2, this.timeToGo(this.event.endDate), diff --git a/src/touch-controls.ts b/src/touch-controls.ts index 93032ce59fe..db2ae223d3f 100644 --- a/src/touch-controls.ts +++ b/src/touch-controls.ts @@ -1,6 +1,6 @@ +import { globalScene } from "#app/global-scene"; import { Button } from "#enums/buttons"; import EventEmitter = Phaser.Events.EventEmitter; -import BattleScene from "./battle-scene"; const repeatInputDelayMillis = 250; @@ -13,8 +13,8 @@ export default class TouchControl { /** Whether the last touch event has finished before disabling */ private finishedLastTouch: boolean = false; - constructor(scene: BattleScene) { - this.events = scene.game.events; + constructor() { + this.events = globalScene.game.events; this.init(); } diff --git a/src/tutorial.ts b/src/tutorial.ts index 3934ffee57f..6890075a642 100644 --- a/src/tutorial.ts +++ b/src/tutorial.ts @@ -1,6 +1,6 @@ -import BattleScene from "./battle-scene"; +import { globalScene } from "#app/global-scene"; import AwaitableUiHandler from "./ui/awaitable-ui-handler"; -import UiHandler from "./ui/ui-handler"; +import type UiHandler from "./ui/ui-handler"; import { Mode } from "./ui/ui"; import i18next from "i18next"; import Overrides from "#app/overrides"; @@ -10,6 +10,7 @@ export enum Tutorial { Access_Menu = "ACCESS_MENU", Menu = "MENU", Starter_Select = "STARTER_SELECT", + Pokedex = "POKEDEX", Pokerus = "POKERUS", Stat_Change = "STAT_CHANGE", Select_Item = "SELECT_ITEM", @@ -17,50 +18,50 @@ export enum Tutorial { } const tutorialHandlers = { - [Tutorial.Intro]: (scene: BattleScene) => { + [Tutorial.Intro]: () => { return new Promise(resolve => { - scene.ui.showText(i18next.t("tutorial:intro"), null, () => resolve(), null, true); + globalScene.ui.showText(i18next.t("tutorial:intro"), null, () => resolve(), null, true); }); }, - [Tutorial.Access_Menu]: (scene: BattleScene) => { + [Tutorial.Access_Menu]: () => { return new Promise(resolve => { - if (scene.enableTouchControls) { + if (globalScene.enableTouchControls) { return resolve(); } - scene.showFieldOverlay(1000).then(() => scene.ui.showText(i18next.t("tutorial:accessMenu"), null, () => scene.hideFieldOverlay(1000).then(() => resolve()), null, true)); + globalScene.showFieldOverlay(1000).then(() => globalScene.ui.showText(i18next.t("tutorial:accessMenu"), null, () => globalScene.hideFieldOverlay(1000).then(() => resolve()), null, true)); }); }, - [Tutorial.Menu]: (scene: BattleScene) => { + [Tutorial.Menu]: () => { return new Promise(resolve => { - scene.gameData.saveTutorialFlag(Tutorial.Access_Menu, true); - scene.ui.showText(i18next.t("tutorial:menu"), null, () => scene.ui.showText("", null, () => resolve()), null, true); + globalScene.gameData.saveTutorialFlag(Tutorial.Access_Menu, true); + globalScene.ui.showText(i18next.t("tutorial:menu"), null, () => globalScene.ui.showText("", null, () => resolve()), null, true); }); }, - [Tutorial.Starter_Select]: (scene: BattleScene) => { + [Tutorial.Starter_Select]: () => { return new Promise(resolve => { - scene.ui.showText(i18next.t("tutorial:starterSelect"), null, () => scene.ui.showText("", null, () => resolve()), null, true); + globalScene.ui.showText(i18next.t("tutorial:starterSelect"), null, () => globalScene.ui.showText("", null, () => resolve()), null, true); }); }, - [Tutorial.Pokerus]: (scene: BattleScene) => { + [Tutorial.Pokerus]: () => { return new Promise(resolve => { - scene.ui.showText(i18next.t("tutorial:pokerus"), null, () => scene.ui.showText("", null, () => resolve()), null, true); + globalScene.ui.showText(i18next.t("tutorial:pokerus"), null, () => globalScene.ui.showText("", null, () => resolve()), null, true); }); }, - [Tutorial.Stat_Change]: (scene: BattleScene) => { + [Tutorial.Stat_Change]: () => { return new Promise(resolve => { - scene.showFieldOverlay(1000).then(() => scene.ui.showText(i18next.t("tutorial:statChange"), null, () => scene.ui.showText("", null, () => scene.hideFieldOverlay(1000).then(() => resolve())), null, true)); + globalScene.showFieldOverlay(1000).then(() => globalScene.ui.showText(i18next.t("tutorial:statChange"), null, () => globalScene.ui.showText("", null, () => globalScene.hideFieldOverlay(1000).then(() => resolve())), null, true)); }); }, - [Tutorial.Select_Item]: (scene: BattleScene) => { + [Tutorial.Select_Item]: () => { return new Promise(resolve => { - scene.ui.setModeWithoutClear(Mode.MESSAGE).then(() => { - scene.ui.showText(i18next.t("tutorial:selectItem"), null, () => scene.ui.showText("", null, () => scene.ui.setModeWithoutClear(Mode.MODIFIER_SELECT).then(() => resolve())), null, true); + globalScene.ui.setModeWithoutClear(Mode.MESSAGE).then(() => { + globalScene.ui.showText(i18next.t("tutorial:selectItem"), null, () => globalScene.ui.showText("", null, () => globalScene.ui.setModeWithoutClear(Mode.MODIFIER_SELECT).then(() => resolve())), null, true); }); }); }, - [Tutorial.Egg_Gacha]: (scene: BattleScene) => { + [Tutorial.Egg_Gacha]: () => { return new Promise(resolve => { - scene.ui.showText(i18next.t("tutorial:eggGacha"), null, () => scene.ui.showText("", null, () => resolve()), null, true); + globalScene.ui.showText(i18next.t("tutorial:eggGacha"), null, () => globalScene.ui.showText("", null, () => resolve()), null, true); }); }, }; @@ -69,35 +70,34 @@ const tutorialHandlers = { * Run through the specified tutorial if it hasn't been seen before and mark it as seen once done * This will show a tutorial overlay if defined in the current {@linkcode AwaitableUiHandler} * The main menu will also get disabled while the tutorial is running - * @param scene the current {@linkcode BattleScene} * @param tutorial the {@linkcode Tutorial} to play * @returns a promise with result `true` if the tutorial was run and finished, `false` otherwise */ -export async function handleTutorial(scene: BattleScene, tutorial: Tutorial): Promise { - if (!scene.enableTutorials && !Overrides.BYPASS_TUTORIAL_SKIP_OVERRIDE) { +export async function handleTutorial(tutorial: Tutorial): Promise { + if (!globalScene.enableTutorials && !Overrides.BYPASS_TUTORIAL_SKIP_OVERRIDE) { return false; } - if (scene.gameData.getTutorialFlags()[tutorial] && !Overrides.BYPASS_TUTORIAL_SKIP_OVERRIDE) { + if (globalScene.gameData.getTutorialFlags()[tutorial] && !Overrides.BYPASS_TUTORIAL_SKIP_OVERRIDE) { return false; } - const handler = scene.ui.getHandler(); - const isMenuDisabled = scene.disableMenu; + const handler = globalScene.ui.getHandler(); + const isMenuDisabled = globalScene.disableMenu; // starting tutorial, disable menu - scene.disableMenu = true; + globalScene.disableMenu = true; if (handler instanceof AwaitableUiHandler) { handler.tutorialActive = true; } - await showTutorialOverlay(scene, handler); - await tutorialHandlers[tutorial](scene); - await hideTutorialOverlay(scene, handler); + await showTutorialOverlay(handler); + await tutorialHandlers[tutorial](); + await hideTutorialOverlay(handler); // tutorial finished and overlay gone, re-enable menu, save tutorial as seen - scene.disableMenu = isMenuDisabled; - scene.gameData.saveTutorialFlag(tutorial, true); + globalScene.disableMenu = isMenuDisabled; + globalScene.gameData.saveTutorialFlag(tutorial, true); if (handler instanceof AwaitableUiHandler) { handler.tutorialActive = false; } @@ -107,13 +107,12 @@ export async function handleTutorial(scene: BattleScene, tutorial: Tutorial): Pr /** * Show the tutorial overlay if there is one - * @param scene the current BattleScene * @param handler the current UiHandler * @returns `true` once the overlay has finished appearing, or if there is no overlay */ -async function showTutorialOverlay(scene: BattleScene, handler: UiHandler) { +async function showTutorialOverlay(handler: UiHandler) { if (handler instanceof AwaitableUiHandler && handler.tutorialOverlay) { - scene.tweens.add({ + globalScene.tweens.add({ targets: handler.tutorialOverlay, alpha: 0.5, duration: 750, @@ -129,13 +128,12 @@ async function showTutorialOverlay(scene: BattleScene, handler: UiHandler) { /** * Hide the tutorial overlay if there is one - * @param scene the current BattleScene * @param handler the current UiHandler * @returns `true` once the overlay has finished disappearing, or if there is no overlay */ -async function hideTutorialOverlay(scene: BattleScene, handler: UiHandler) { +async function hideTutorialOverlay(handler: UiHandler) { if (handler instanceof AwaitableUiHandler && handler.tutorialOverlay) { - scene.tweens.add({ + globalScene.tweens.add({ targets: handler.tutorialOverlay, alpha: 0, duration: 500, diff --git a/src/ui-inputs.ts b/src/ui-inputs.ts index 92b1653df3d..d5c4529470b 100644 --- a/src/ui-inputs.ts +++ b/src/ui-inputs.ts @@ -1,27 +1,27 @@ -import Phaser from "phaser"; +import type Phaser from "phaser"; import { Mode } from "./ui/ui"; -import { InputsController } from "./inputs-controller"; -import MessageUiHandler from "./ui/message-ui-handler"; +import type { InputsController } from "./inputs-controller"; +import type MessageUiHandler from "./ui/message-ui-handler"; import StarterSelectUiHandler from "./ui/starter-select-ui-handler"; import { Setting, SettingKeys, settingIndex } from "./system/settings/settings"; import SettingsUiHandler from "./ui/settings/settings-ui-handler"; import { Button } from "#enums/buttons"; import SettingsGamepadUiHandler from "./ui/settings/settings-gamepad-ui-handler"; import SettingsKeyboardUiHandler from "#app/ui/settings/settings-keyboard-ui-handler"; -import BattleScene from "./battle-scene"; +import { globalScene } from "#app/global-scene"; import SettingsDisplayUiHandler from "./ui/settings/settings-display-ui-handler"; import SettingsAudioUiHandler from "./ui/settings/settings-audio-ui-handler"; import RunInfoUiHandler from "./ui/run-info-ui-handler"; +import PokedexUiHandler from "./ui/pokedex-ui-handler"; +import PokedexPageUiHandler from "./ui/pokedex-page-ui-handler"; type ActionKeys = Record void>; export class UiInputs { - private scene: BattleScene; private events: Phaser.Events.EventEmitter; private inputsController: InputsController; - constructor(scene: BattleScene, inputsController: InputsController) { - this.scene = scene; + constructor(inputsController: InputsController) { this.inputsController = inputsController; this.init(); } @@ -35,12 +35,12 @@ export class UiInputs { if (evt.controller_type === "keyboard") { //if the touch property is present and defined, then this is a simulated keyboard event from the touch screen if (evt.hasOwnProperty("isTouch") && evt.isTouch) { - this.scene.inputMethod = "touch"; + globalScene.inputMethod = "touch"; } else { - this.scene.inputMethod = "keyboard"; + globalScene.inputMethod = "keyboard"; } } else if (evt.controller_type === "gamepad") { - this.scene.inputMethod = "gamepad"; + globalScene.inputMethod = "gamepad"; } } @@ -65,7 +65,7 @@ export class UiInputs { } doVibration(inputSuccess: boolean, vibrationLength: number): void { - if (inputSuccess && this.scene.enableVibration && typeof navigator.vibrate !== "undefined") { + if (inputSuccess && globalScene.enableVibration && typeof navigator.vibrate !== "undefined") { navigator.vibrate(vibrationLength); } } @@ -86,7 +86,7 @@ export class UiInputs { [Button.CYCLE_GENDER]: () => this.buttonCycleOption(Button.CYCLE_GENDER), [Button.CYCLE_ABILITY]: () => this.buttonCycleOption(Button.CYCLE_ABILITY), [Button.CYCLE_NATURE]: () => this.buttonCycleOption(Button.CYCLE_NATURE), - [Button.V]: () => this.buttonCycleOption(Button.V), + [Button.CYCLE_TERA]: () => this.buttonCycleOption(Button.CYCLE_TERA), [Button.SPEED_UP]: () => this.buttonSpeedChange(), [Button.SLOW_DOWN]: () => this.buttonSpeedChange(false), }; @@ -109,7 +109,7 @@ export class UiInputs { [Button.CYCLE_GENDER]: () => undefined, [Button.CYCLE_ABILITY]: () => undefined, [Button.CYCLE_NATURE]: () => undefined, - [Button.V]: () => this.buttonInfo(false), + [Button.CYCLE_TERA]: () => this.buttonInfo(false), [Button.SPEED_UP]: () => undefined, [Button.SLOW_DOWN]: () => undefined, }; @@ -117,59 +117,59 @@ export class UiInputs { } buttonDirection(direction: Button): void { - const inputSuccess = this.scene.ui.processInput(direction); + const inputSuccess = globalScene.ui.processInput(direction); const vibrationLength = 5; this.doVibration(inputSuccess, vibrationLength); } buttonAb(button: Button): void { - this.scene.ui.processInput(button); + globalScene.ui.processInput(button); } buttonTouch(): void { - this.scene.ui.processInput(Button.SUBMIT) || this.scene.ui.processInput(Button.ACTION); + globalScene.ui.processInput(Button.SUBMIT) || globalScene.ui.processInput(Button.ACTION); } buttonStats(pressed: boolean = true): void { // allow access to Button.STATS as a toggle for other elements - for (const t of this.scene.getInfoToggles(true)) { + for (const t of globalScene.getInfoToggles(true)) { t.toggleInfo(pressed); } // handle normal pokemon battle ui - for (const p of this.scene.getField().filter(p => p?.isActive(true))) { + for (const p of globalScene.getField().filter(p => p?.isActive(true))) { p.toggleStats(pressed); } } buttonGoToFilter(button: Button): void { - const whitelist = [ StarterSelectUiHandler ]; - const uiHandler = this.scene.ui?.getHandler(); + const whitelist = [ StarterSelectUiHandler, PokedexUiHandler, PokedexPageUiHandler ]; + const uiHandler = globalScene.ui?.getHandler(); if (whitelist.some(handler => uiHandler instanceof handler)) { - this.scene.ui.processInput(button); + globalScene.ui.processInput(button); } else { this.buttonStats(true); } } buttonInfo(pressed: boolean = true): void { - if (this.scene.showMovesetFlyout ) { - for (const p of this.scene.getField().filter(p => p?.isActive(true))) { + if (globalScene.showMovesetFlyout ) { + for (const p of globalScene.getField().filter(p => p?.isActive(true))) { p.toggleFlyout(pressed); } } - if (this.scene.showArenaFlyout) { - this.scene.ui.processInfoButton(pressed); + if (globalScene.showArenaFlyout) { + globalScene.ui.processInfoButton(pressed); } } buttonMenu(): void { - if (this.scene.disableMenu) { + if (globalScene.disableMenu) { return; } - switch (this.scene.ui?.getMode()) { + switch (globalScene.ui?.getMode()) { case Mode.MESSAGE: - const messageHandler = this.scene.ui.getHandler(); + const messageHandler = globalScene.ui.getHandler(); if (!messageHandler.pendingPrompt || messageHandler.isTextAnimationInProgress()) { return; } @@ -177,14 +177,15 @@ export class UiInputs { case Mode.COMMAND: case Mode.MODIFIER_SELECT: case Mode.MYSTERY_ENCOUNTER: - this.scene.ui.setOverlayMode(Mode.MENU); + globalScene.ui.setOverlayMode(Mode.MENU); break; case Mode.STARTER_SELECT: + case Mode.POKEDEX_PAGE: this.buttonTouch(); break; case Mode.MENU: - this.scene.ui.revertMode(); - this.scene.playSound("ui/select"); + globalScene.ui.revertMode(); + globalScene.playSound("ui/select"); break; default: return; @@ -192,26 +193,26 @@ export class UiInputs { } buttonCycleOption(button: Button): void { - const whitelist = [ StarterSelectUiHandler, SettingsUiHandler, RunInfoUiHandler, SettingsDisplayUiHandler, SettingsAudioUiHandler, SettingsGamepadUiHandler, SettingsKeyboardUiHandler ]; - const uiHandler = this.scene.ui?.getHandler(); + const whitelist = [ StarterSelectUiHandler, PokedexUiHandler, PokedexPageUiHandler, SettingsUiHandler, RunInfoUiHandler, SettingsDisplayUiHandler, SettingsAudioUiHandler, SettingsGamepadUiHandler, SettingsKeyboardUiHandler ]; + const uiHandler = globalScene.ui?.getHandler(); if (whitelist.some(handler => uiHandler instanceof handler)) { - this.scene.ui.processInput(button); - } else if (button === Button.V) { + globalScene.ui.processInput(button); + } else if (button === Button.CYCLE_TERA) { this.buttonInfo(true); } } buttonSpeedChange(up = true): void { const settingGameSpeed = settingIndex(SettingKeys.Game_Speed); - if (up && this.scene.gameSpeed < 5) { - this.scene.gameData.saveSetting(SettingKeys.Game_Speed, Setting[settingGameSpeed].options.findIndex((item) => item.label === `${this.scene.gameSpeed}x`) + 1); - if (this.scene.ui?.getMode() === Mode.SETTINGS) { - (this.scene.ui.getHandler() as SettingsUiHandler).show([]); + if (up && globalScene.gameSpeed < 5) { + globalScene.gameData.saveSetting(SettingKeys.Game_Speed, Setting[settingGameSpeed].options.findIndex((item) => item.label === `${globalScene.gameSpeed}x`) + 1); + if (globalScene.ui?.getMode() === Mode.SETTINGS) { + (globalScene.ui.getHandler() as SettingsUiHandler).show([]); } - } else if (!up && this.scene.gameSpeed > 1) { - this.scene.gameData.saveSetting(SettingKeys.Game_Speed, Math.max(Setting[settingGameSpeed].options.findIndex((item) => item.label === `${this.scene.gameSpeed}x`) - 1, 0)); - if (this.scene.ui?.getMode() === Mode.SETTINGS) { - (this.scene.ui.getHandler() as SettingsUiHandler).show([]); + } else if (!up && globalScene.gameSpeed > 1) { + globalScene.gameData.saveSetting(SettingKeys.Game_Speed, Math.max(Setting[settingGameSpeed].options.findIndex((item) => item.label === `${globalScene.gameSpeed}x`) - 1, 0)); + if (globalScene.ui?.getMode() === Mode.SETTINGS) { + (globalScene.ui.getHandler() as SettingsUiHandler).show([]); } } } diff --git a/src/ui/ability-bar.ts b/src/ui/ability-bar.ts index a924d545852..8335f7b517c 100644 --- a/src/ui/ability-bar.ts +++ b/src/ui/ability-bar.ts @@ -1,6 +1,6 @@ import { getPokemonNameWithAffix } from "#app/messages"; -import BattleScene from "../battle-scene"; -import Pokemon from "../field/pokemon"; +import { globalScene } from "#app/global-scene"; +import type Pokemon from "../field/pokemon"; import { TextStyle, addTextObject } from "./text"; import i18next from "i18next"; @@ -17,17 +17,17 @@ export default class AbilityBar extends Phaser.GameObjects.Container { public shown: boolean; - constructor(scene: BattleScene) { - super(scene, hiddenX, baseY); + constructor() { + super(globalScene, hiddenX, baseY); } setup(): void { - this.bg = this.scene.add.image(0, 0, "ability_bar_left"); + this.bg = globalScene.add.image(0, 0, "ability_bar_left"); this.bg.setOrigin(0, 0); this.add(this.bg); - this.abilityBarText = addTextObject(this.scene, 15, 3, "", TextStyle.MESSAGE, { fontSize: "72px" }); + this.abilityBarText = addTextObject(15, 3, "", TextStyle.MESSAGE, { fontSize: "72px" }); this.abilityBarText.setOrigin(0, 0); this.abilityBarText.setWordWrapWidth(600, true); this.add(this.abilityBarText); @@ -43,11 +43,11 @@ export default class AbilityBar extends Phaser.GameObjects.Container { return; } - (this.scene as BattleScene).fieldUI.bringToTop(this); + globalScene.fieldUI.bringToTop(this); - this.y = baseY + ((this.scene as BattleScene).currentBattle.double ? 14 : 0); - this.tween = this.scene.tweens.add({ + this.y = baseY + (globalScene.currentBattle.double ? 14 : 0); + this.tween = globalScene.tweens.add({ targets: this, x: shownX, duration: 500, @@ -75,7 +75,7 @@ export default class AbilityBar extends Phaser.GameObjects.Container { this.tween.stop(); } - this.tween = this.scene.tweens.add({ + this.tween = globalScene.tweens.add({ targets: this, x: -91, duration: 500, diff --git a/src/ui/abstact-option-select-ui-handler.ts b/src/ui/abstact-option-select-ui-handler.ts index 01fc5b00014..a462ed158cb 100644 --- a/src/ui/abstact-option-select-ui-handler.ts +++ b/src/ui/abstact-option-select-ui-handler.ts @@ -1,18 +1,19 @@ -import BattleScene from "../battle-scene"; -import { TextStyle, addTextObject, getTextStyleOptions } from "./text"; +import { globalScene } from "#app/global-scene"; +import { TextStyle, addBBCodeTextObject, getTextColor, getTextStyleOptions } from "./text"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import { addWindow } from "./ui-theme"; import * as Utils from "../utils"; import { argbFromRgba } from "@material/material-color-utilities"; import { Button } from "#enums/buttons"; +import BBCodeText from "phaser3-rex-plugins/plugins/gameobjects/tagtext/bbcodetext/BBCodeText"; export interface OptionSelectConfig { xOffset?: number; yOffset?: number; options: OptionSelectItem[]; - maxOptions?: integer; - delay?: integer; + maxOptions?: number; + delay?: number; noCancel?: boolean; supportHover?: boolean; } @@ -21,8 +22,10 @@ export interface OptionSelectItem { label: string; handler: () => boolean; onHover?: () => void; + skip?: boolean; keepOpen?: boolean; overrideSound?: boolean; + style?: TextStyle; item?: string; itemArgs?: any[]; } @@ -32,46 +35,57 @@ const scrollDownLabel = "↓"; export default abstract class AbstractOptionSelectUiHandler extends UiHandler { protected optionSelectContainer: Phaser.GameObjects.Container; + protected optionSelectTextContainer: Phaser.GameObjects.Container; protected optionSelectBg: Phaser.GameObjects.NineSlice; - protected optionSelectText: Phaser.GameObjects.Text; + protected optionSelectText: BBCodeText; protected optionSelectIcons: Phaser.GameObjects.Sprite[]; protected config: OptionSelectConfig | null; protected blockInput: boolean; - protected scrollCursor: integer = 0; + protected scrollCursor: number = 0; + protected fullCursor: number = 0; protected scale: number = 0.1666666667; private cursorObj: Phaser.GameObjects.Image | null; - constructor(scene: BattleScene, mode: Mode | null) { - super(scene, mode); + protected unskippedIndices: number[] = []; + + protected defaultTextStyle: TextStyle = TextStyle.WINDOW; + protected textContent: string; + + + constructor(mode: Mode | null) { + super(mode); } - abstract getWindowWidth(): integer; + abstract getWindowWidth(): number; - getWindowHeight(): integer { + getWindowHeight(): number { return (Math.min((this.config?.options || []).length, this.config?.maxOptions || 99) + 1) * 96 * this.scale; } setup() { const ui = this.getUi(); - this.optionSelectContainer = this.scene.add.container((this.scene.game.canvas.width / 6) - 1, -48); + this.optionSelectContainer = globalScene.add.container((globalScene.game.canvas.width / 6) - 1, -48); this.optionSelectContainer.setName(`option-select-${this.mode ? Mode[this.mode] : "UNKNOWN"}`); this.optionSelectContainer.setVisible(false); ui.add(this.optionSelectContainer); - this.optionSelectBg = addWindow(this.scene, 0, 0, this.getWindowWidth(), this.getWindowHeight()); + this.optionSelectBg = addWindow(0, 0, this.getWindowWidth(), this.getWindowHeight()); this.optionSelectBg.setName("option-select-bg"); this.optionSelectBg.setOrigin(1, 1); this.optionSelectContainer.add(this.optionSelectBg); + this.optionSelectTextContainer = globalScene.add.container(0, 0); + this.optionSelectContainer.add(this.optionSelectTextContainer); + this.optionSelectIcons = []; - this.scale = getTextStyleOptions(TextStyle.WINDOW, (this.scene as BattleScene).uiTheme).scale; + this.scale = getTextStyleOptions(TextStyle.WINDOW, globalScene.uiTheme).scale; this.setCursor(0); } @@ -79,61 +93,70 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler { protected setupOptions() { const configOptions = this.config?.options ?? []; - let options: OptionSelectItem[]; + const options: OptionSelectItem[] = configOptions; - // for performance reasons, this limits how many options we can see at once. Without this, it would try to make text options for every single options - // which makes the performance take a hit. If there's not enough options to do this (set to 10 at the moment) and the ui mode !== Mode.AUTO_COMPLETE, - // this is ignored and the original code is untouched, with the options array being all the options from the config - if (configOptions.length >= 10 && this.scene.ui.getMode() === Mode.AUTO_COMPLETE) { - const optionsScrollTotal = configOptions.length; - const optionStartIndex = this.scrollCursor; - const optionEndIndex = Math.min(optionsScrollTotal, optionStartIndex + (!optionStartIndex || this.scrollCursor + (this.config?.maxOptions! - 1) >= optionsScrollTotal ? this.config?.maxOptions! - 1 : this.config?.maxOptions! - 2)); - options = configOptions.slice(optionStartIndex, optionEndIndex + 2); - } else { - options = configOptions; - } + this.unskippedIndices = this.getUnskippedIndices(configOptions); if (this.optionSelectText) { - this.optionSelectText.destroy(); + if (this.optionSelectText instanceof BBCodeText) { + try { + this.optionSelectText.destroy(); + } catch (error) { + console.error("Error while destroying optionSelectText:", error); + } + } else { + console.warn("optionSelectText is not an instance of BBCodeText."); + } } + if (this.optionSelectIcons?.length) { this.optionSelectIcons.map(i => i.destroy()); this.optionSelectIcons.splice(0, this.optionSelectIcons.length); } - this.optionSelectText = addTextObject(this.scene, 0, 0, options.map(o => o.item ? ` ${o.label}` : o.label).join("\n"), TextStyle.WINDOW, { maxLines: options.length }); - this.optionSelectText.setLineSpacing(this.scale * 72); + const optionsWithScroll = (this.config?.options && this.config?.options.length > (this.config?.maxOptions!)) ? this.getOptionsWithScroll() : options; + + // Setting the initial text to establish the width of the select object. We consider all options, even ones that are not displayed, + // Except in the case of autocomplete, where we don't want to set up a text element with potentially hundreds of lines. + const optionsForWidth = globalScene.ui.getMode() === Mode.AUTO_COMPLETE ? optionsWithScroll : options; + this.optionSelectText = addBBCodeTextObject( + 0, 0, optionsForWidth.map(o => o.item + ? `[shadow=${getTextColor(o.style ?? this.defaultTextStyle, true, globalScene.uiTheme)}][color=${getTextColor(o.style ?? TextStyle.WINDOW, false, globalScene.uiTheme)}] ${o.label}[/color][/shadow]` + : `[shadow=${getTextColor(o.style ?? this.defaultTextStyle, true, globalScene.uiTheme)}][color=${getTextColor(o.style ?? TextStyle.WINDOW, false, globalScene.uiTheme)}]${o.label}[/color][/shadow]` + ).join("\n"), + TextStyle.WINDOW, { maxLines: options.length, lineSpacing: 12 } + ); + this.optionSelectText.setOrigin(0, 0); this.optionSelectText.setName("text-option-select"); - this.optionSelectText.setLineSpacing(12); - this.optionSelectContainer.add(this.optionSelectText); - this.optionSelectContainer.setPosition((this.scene.game.canvas.width / 6) - 1 - (this.config?.xOffset || 0), -48 + (this.config?.yOffset || 0)); - + this.optionSelectTextContainer.add(this.optionSelectText); + this.optionSelectContainer.setPosition((globalScene.game.canvas.width / 6) - 1 - (this.config?.xOffset || 0), -48 + (this.config?.yOffset || 0)); this.optionSelectBg.width = Math.max(this.optionSelectText.displayWidth + 24, this.getWindowWidth()); - - if (this.config?.options && this.config?.options.length > (this.config?.maxOptions!)) { // TODO: is this bang correct? - this.optionSelectText.setText(this.getOptionsWithScroll().map(o => o.label).join("\n")); - } - this.optionSelectBg.height = this.getWindowHeight(); + this.optionSelectTextContainer.setPosition(this.optionSelectBg.x - this.optionSelectBg.width + 12 + 24 * this.scale, this.optionSelectBg.y - this.optionSelectBg.height + 2 + 42 * this.scale); - this.optionSelectText.setPositionRelative(this.optionSelectBg, 12 + 24 * this.scale, 2 + 42 * this.scale); + // Now that the container and background widths are established, we can set up the proper text restricted to visible options + this.textContent = optionsWithScroll.map(o => o.item + ? `[shadow=${getTextColor(o.style ?? this.defaultTextStyle, true, globalScene.uiTheme)}][color=${getTextColor(o.style ?? TextStyle.WINDOW, false, globalScene.uiTheme)}] ${o.label}[/color][/shadow]` + : `[shadow=${getTextColor(o.style ?? this.defaultTextStyle, true, globalScene.uiTheme)}][color=${getTextColor(o.style ?? TextStyle.WINDOW, false, globalScene.uiTheme)}]${o.label}[/color][/shadow]` + ).join("\n"); + this.optionSelectText.setText(this.textContent); - options.forEach((option: OptionSelectItem, i: integer) => { + options.forEach((option: OptionSelectItem, i: number) => { if (option.item) { - const itemIcon = this.scene.add.sprite(0, 0, "items", option.item); + const itemIcon = globalScene.add.sprite(0, 0, "items", option.item); itemIcon.setScale(3 * this.scale); this.optionSelectIcons.push(itemIcon); - this.optionSelectContainer.add(itemIcon); + this.optionSelectTextContainer.add(itemIcon); itemIcon.setPositionRelative(this.optionSelectText, 36 * this.scale, 7 + i * (114 * this.scale - 3)); if (option.item === "candy") { - const itemOverlayIcon = this.scene.add.sprite(0, 0, "items", "candy_overlay"); + const itemOverlayIcon = globalScene.add.sprite(0, 0, "items", "candy_overlay"); itemOverlayIcon.setScale(3 * this.scale); this.optionSelectIcons.push(itemOverlayIcon); - this.optionSelectContainer.add(itemOverlayIcon); + this.optionSelectTextContainer.add(itemOverlayIcon); itemOverlayIcon.setPositionRelative(this.optionSelectText, 36 * this.scale, 7 + i * (114 * this.scale - 3)); @@ -156,17 +179,23 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler { this.config = args[0] as OptionSelectConfig; this.setupOptions(); - this.scene.ui.bringToTop(this.optionSelectContainer); + globalScene.ui.bringToTop(this.optionSelectContainer); this.optionSelectContainer.setVisible(true); this.scrollCursor = 0; + this.fullCursor = 0; this.setCursor(0); if (this.config.delay) { this.blockInput = true; - this.optionSelectText.setAlpha(0.5); + this.optionSelectTextContainer.setAlpha(0.5); this.cursorObj?.setAlpha(0.8); - this.scene.time.delayedCall(Utils.fixedInt(this.config.delay), () => this.unblockInput()); + globalScene.time.delayedCall(Utils.fixedInt(this.config.delay), () => this.unblockInput()); + } + + if (this.config?.supportHover) { + // handle hover code if the element supports hover-handlers and the option has the optional hover-handler set. + this.config?.options[this.unskippedIndices[this.fullCursor]]?.onHover?.(); } return true; @@ -177,8 +206,6 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler { let success = false; - const options = this.getOptionsWithScroll(); - let playSound = true; if (button === Button.ACTION || button === Button.CANCEL) { @@ -190,15 +217,14 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler { success = true; if (button === Button.CANCEL) { if (this.config?.maxOptions && this.config.options.length > this.config.maxOptions) { - this.scrollCursor = (this.config.options.length - this.config.maxOptions) + 1; - this.cursor = options.length - 1; + this.setCursor(this.unskippedIndices.length - 1); } else if (!this.config?.noCancel) { - this.setCursor(options.length - 1); + this.setCursor(this.unskippedIndices.length - 1); } else { return false; } } - const option = this.config?.options[this.cursor + (this.scrollCursor - (this.scrollCursor ? 1 : 0))]; + const option = this.config?.options[this.unskippedIndices[this.fullCursor]]; if (option?.handler()) { if (!option.keepOpen) { this.clear(); @@ -211,7 +237,7 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler { // this is here to differentiate between a Button.SUBMIT vs Button.ACTION within the autocomplete handler // this is here because Button.ACTION is picked up as z on the keyboard, meaning if you're typing and hit z, it'll select the option you've chosen success = true; - const option = this.config?.options[this.cursor + (this.scrollCursor - (this.scrollCursor ? 1 : 0))]; + const option = this.config?.options[this.unskippedIndices[this.fullCursor]]; if (option?.handler()) { if (!option.keepOpen) { this.clear(); @@ -223,15 +249,15 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler { } else { switch (button) { case Button.UP: - if (this.cursor) { - success = this.setCursor(this.cursor - 1); - } else if (this.cursor === 0) { - success = this.setCursor(options.length - 1); + if (this.fullCursor === 0) { + success = this.setCursor(this.unskippedIndices.length - 1); + } else if (this.fullCursor) { + success = this.setCursor(this.fullCursor - 1); } break; case Button.DOWN: - if (this.cursor < options.length - 1) { - success = this.setCursor(this.cursor + 1); + if (this.fullCursor < this.unskippedIndices.length - 1) { + success = this.setCursor(this.fullCursor + 1); } else { success = this.setCursor(0); } @@ -239,7 +265,7 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler { } if (this.config?.supportHover) { // handle hover code if the element supports hover-handlers and the option has the optional hover-handler set. - this.config?.options[this.cursor + (this.scrollCursor - (this.scrollCursor ? 1 : 0))]?.onHover?.(); + this.config?.options[this.unskippedIndices[this.fullCursor]]?.onHover?.(); } } @@ -256,7 +282,7 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler { } this.blockInput = false; - this.optionSelectText.setAlpha(1); + this.optionSelectTextContainer.setAlpha(1); this.cursorObj?.setAlpha(1); } @@ -273,7 +299,9 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler { const optionsScrollTotal = options.length; const optionStartIndex = this.scrollCursor; - const optionEndIndex = Math.min(optionsScrollTotal, optionStartIndex + (!optionStartIndex || this.scrollCursor + (this.config.maxOptions - 1) >= optionsScrollTotal ? this.config.maxOptions - 1 : this.config.maxOptions - 2)); + const optionEndIndex = Math.min(optionsScrollTotal, optionStartIndex + + (!optionStartIndex || this.scrollCursor + (this.config.maxOptions - 1) >= optionsScrollTotal ? this.config.maxOptions - 1 : this.config.maxOptions - 2) + ); if (this.config?.maxOptions && options.length > this.config.maxOptions) { options.splice(optionEndIndex, optionsScrollTotal); @@ -281,13 +309,15 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler { if (optionStartIndex) { options.unshift({ label: scrollUpLabel, - handler: () => true + handler: () => true, + style: this.defaultTextStyle }); } if (optionEndIndex < optionsScrollTotal) { options.push({ label: scrollDownLabel, - handler: () => true + handler: () => true, + style: this.defaultTextStyle }); } } @@ -295,44 +325,66 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler { return options; } - setCursor(cursor: integer): boolean { - const changed = this.cursor !== cursor; + getUnskippedIndices(options: OptionSelectItem[]) { + const unskippedIndices = options + .map((option, index) => (option.skip ? null : index)) // Map to index or null if skipped + .filter(index => index !== null) as number[]; + return unskippedIndices; + } + + setCursor(fullCursor: number): boolean { + const changed = this.fullCursor !== fullCursor; - let isScroll = false; - const options = this.getOptionsWithScroll(); if (changed && this.config?.maxOptions && this.config.options.length > this.config.maxOptions) { - if (Math.abs(cursor - this.cursor) === options.length - 1) { - // Wrap around the list - const optionsScrollTotal = this.config.options.length; - this.scrollCursor = cursor ? optionsScrollTotal - (this.config.maxOptions - 1) : 0; - this.setupOptions(); + + // If the fullCursor is the last possible value, we go to the bottom + if (fullCursor === this.unskippedIndices.length - 1) { + this.fullCursor = fullCursor; + this.cursor = this.config.maxOptions - (this.config.options.length - this.unskippedIndices[fullCursor]); + this.scrollCursor = this.config.options.length - this.config.maxOptions + 1; + // If the fullCursor is the first possible value, we go to the top + } else if (fullCursor === 0) { + this.fullCursor = fullCursor; + this.cursor = this.unskippedIndices[fullCursor]; + this.scrollCursor = 0; } else { - // Move the cursor up or down by 1 - const isDown = cursor && cursor > this.cursor; + const isDown = fullCursor && fullCursor > this.fullCursor; + if (isDown) { - if (options[cursor].label === scrollDownLabel) { - isScroll = true; - this.scrollCursor++; + // If there are skipped options under the next selection, we show them + const jumpFromCurrent = this.unskippedIndices[fullCursor] - this.unskippedIndices[this.fullCursor]; + const skipsFromNext = this.unskippedIndices[fullCursor + 1] - this.unskippedIndices[fullCursor] - 1; + + if (this.cursor + jumpFromCurrent + skipsFromNext >= this.config.maxOptions - 1) { + this.fullCursor = fullCursor; + this.cursor = this.config.maxOptions - 2 - skipsFromNext; + this.scrollCursor = this.unskippedIndices[this.fullCursor] - this.cursor + 1; + } else { + this.fullCursor = fullCursor; + this.cursor = this.unskippedIndices[fullCursor] - this.scrollCursor + (this.scrollCursor ? 1 : 0); } } else { - if (!cursor && this.scrollCursor) { - isScroll = true; - this.scrollCursor--; + const jumpFromPrevious = this.unskippedIndices[fullCursor] - this.unskippedIndices[fullCursor - 1]; + + if (this.cursor - jumpFromPrevious < 1) { + this.fullCursor = fullCursor; + this.cursor = 1; + this.scrollCursor = this.unskippedIndices[this.fullCursor] - this.cursor + 1; + } else { + this.fullCursor = fullCursor; + this.cursor = this.unskippedIndices[fullCursor] - this.scrollCursor + (this.scrollCursor ? 1 : 0); } } - if (isScroll && this.scrollCursor === 1) { - this.scrollCursor += isDown ? 1 : -1; - } } - } - if (isScroll) { - this.setupOptions(); } else { - this.cursor = cursor; + this.fullCursor = fullCursor; + this.cursor = this.unskippedIndices[fullCursor]; } + this.setupOptions(); + if (!this.cursorObj) { - this.cursorObj = this.scene.add.image(0, 0, "cursor"); + this.cursorObj = globalScene.add.image(0, 0, "cursor"); this.optionSelectContainer.add(this.cursorObj); } @@ -346,6 +398,7 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler { super.clear(); this.config = null; this.optionSelectContainer.setVisible(false); + this.fullCursor = 0; this.scrollCursor = 0; this.eraseCursor(); } diff --git a/src/ui/achv-bar.ts b/src/ui/achv-bar.ts index 6e7b3185024..9196399f40f 100644 --- a/src/ui/achv-bar.ts +++ b/src/ui/achv-bar.ts @@ -1,8 +1,8 @@ -import BattleScene from "../battle-scene"; +import { globalScene } from "#app/global-scene"; import { Achv, getAchievementDescription } from "../system/achv"; import { Voucher } from "../system/voucher"; import { TextStyle, addTextObject } from "./text"; -import { PlayerGender } from "#enums/player-gender"; +import type { PlayerGender } from "#enums/player-gender"; export default class AchvBar extends Phaser.GameObjects.Container { private defaultWidth: number; @@ -19,33 +19,33 @@ export default class AchvBar extends Phaser.GameObjects.Container { public shown: boolean; - constructor(scene: BattleScene) { - super(scene, scene.game.canvas.width / 6, 0); - this.playerGender = scene.gameData.gender; + constructor() { + super(globalScene, globalScene.game.canvas.width / 6, 0); + this.playerGender = globalScene.gameData.gender; } setup(): void { this.defaultWidth = 200; this.defaultHeight = 40; - this.bg = this.scene.add.nineslice(0, 0, "achv_bar", undefined, this.defaultWidth, this.defaultHeight, 41, 6, 16, 4); + this.bg = globalScene.add.nineslice(0, 0, "achv_bar", undefined, this.defaultWidth, this.defaultHeight, 41, 6, 16, 4); this.bg.setOrigin(0, 0); this.add(this.bg); - this.icon = this.scene.add.sprite(4, 4, "items"); + this.icon = globalScene.add.sprite(4, 4, "items"); this.icon.setOrigin(0, 0); this.add(this.icon); - this.titleText = addTextObject(this.scene, 40, 3, "", TextStyle.MESSAGE, { fontSize: "72px" }); + this.titleText = addTextObject(40, 3, "", TextStyle.MESSAGE, { fontSize: "72px" }); this.titleText.setOrigin(0, 0); this.add(this.titleText); - this.scoreText = addTextObject(this.scene, 150, 3, "", TextStyle.MESSAGE, { fontSize: "72px" }); + this.scoreText = addTextObject(150, 3, "", TextStyle.MESSAGE, { fontSize: "72px" }); this.scoreText.setOrigin(1, 0); this.add(this.scoreText); - this.descriptionText = addTextObject(this.scene, 43, 16, "", TextStyle.WINDOW_ALT, { fontSize: "72px" }); + this.descriptionText = addTextObject(43, 16, "", TextStyle.WINDOW_ALT, { fontSize: "72px" }); this.descriptionText.setOrigin(0, 0); this.add(this.descriptionText); @@ -90,16 +90,16 @@ export default class AchvBar extends Phaser.GameObjects.Container { this.bg.height = Math.max(this.defaultHeight, this.titleText.displayHeight + this.descriptionText.displayHeight + 8); this.icon.y = (this.bg.height / 2) - (this.icon.height / 2); - (this.scene as BattleScene).playSound("se/achv"); + globalScene.playSound("se/achv"); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this, - x: (this.scene.game.canvas.width / 6) - (this.bg.width / 2), + x: (globalScene.game.canvas.width / 6) - (this.bg.width / 2), duration: 500, ease: "Sine.easeOut" }); - this.scene.time.delayedCall(10000, () => this.hide(this.playerGender)); + globalScene.time.delayedCall(10000, () => this.hide(this.playerGender)); this.setVisible(true); this.shown = true; @@ -110,9 +110,9 @@ export default class AchvBar extends Phaser.GameObjects.Container { return; } - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this, - x: (this.scene.game.canvas.width / 6), + x: (globalScene.game.canvas.width / 6), duration: 500, ease: "Sine.easeIn", onComplete: () => { diff --git a/src/ui/achvs-ui-handler.ts b/src/ui/achvs-ui-handler.ts index a1ced6145eb..74a121c231b 100644 --- a/src/ui/achvs-ui-handler.ts +++ b/src/ui/achvs-ui-handler.ts @@ -1,14 +1,16 @@ -import BattleScene from "#app/battle-scene"; import { Button } from "#enums/buttons"; import i18next from "i18next"; -import { Achv, achvs, getAchievementDescription } from "#app/system/achv"; -import { Voucher, getVoucherTypeIcon, getVoucherTypeName, vouchers } from "#app/system/voucher"; +import type { Achv } from "#app/system/achv"; +import { achvs, getAchievementDescription } from "#app/system/achv"; +import type { Voucher } from "#app/system/voucher"; +import { getVoucherTypeIcon, getVoucherTypeName, vouchers } from "#app/system/voucher"; import MessageUiHandler from "#app/ui/message-ui-handler"; import { addTextObject, TextStyle } from "#app/ui/text"; -import { Mode } from "#app/ui/ui"; +import type { Mode } from "#app/ui/ui"; import { addWindow } from "#app/ui/ui-theme"; import { ScrollBar } from "#app/ui/scroll-bar"; import { PlayerGender } from "#enums/player-gender"; +import { globalScene } from "#app/global-scene"; enum Page { ACHIEVEMENTS, @@ -57,8 +59,8 @@ export default class AchvsUiHandler extends MessageUiHandler { private cursorObj: Phaser.GameObjects.NineSlice | null; private currentPage: Page; - constructor(scene: BattleScene, mode: Mode | null = null) { - super(scene, mode); + constructor(mode: Mode | null = null) { + super(mode); this.achvsTotal = Object.keys(achvs).length; this.vouchersTotal = Object.keys(vouchers).length; @@ -68,37 +70,37 @@ export default class AchvsUiHandler extends MessageUiHandler { setup() { const ui = this.getUi(); - this.mainContainer = this.scene.add.container(1, -(this.scene.game.canvas.height / 6) + 1); + this.mainContainer = globalScene.add.container(1, -(globalScene.game.canvas.height / 6) + 1); - this.mainContainer.setInteractive(new Phaser.Geom.Rectangle(0, 0, this.scene.game.canvas.width / 6, this.scene.game.canvas.height / 6), Phaser.Geom.Rectangle.Contains); + this.mainContainer.setInteractive(new Phaser.Geom.Rectangle(0, 0, globalScene.game.canvas.width / 6, globalScene.game.canvas.height / 6), Phaser.Geom.Rectangle.Contains); - this.headerBg = addWindow(this.scene, 0, 0, (this.scene.game.canvas.width / 6) - 2, 24); + this.headerBg = addWindow(0, 0, (globalScene.game.canvas.width / 6) - 2, 24); this.headerBg.setOrigin(0, 0); - this.headerText = addTextObject(this.scene, 0, 0, "", TextStyle.SETTINGS_LABEL); + this.headerText = addTextObject(0, 0, "", TextStyle.SETTINGS_LABEL); this.headerText.setOrigin(0, 0); this.headerText.setPositionRelative(this.headerBg, 8, 4); - this.headerActionButton = new Phaser.GameObjects.Sprite(this.scene, 0, 0, "keyboard", "ACTION.png"); + this.headerActionButton = new Phaser.GameObjects.Sprite(globalScene, 0, 0, "keyboard", "ACTION.png"); this.headerActionButton.setOrigin(0, 0); this.headerActionButton.setPositionRelative(this.headerBg, 236, 6); - this.headerActionText = addTextObject(this.scene, 0, 0, "", TextStyle.WINDOW, { fontSize:"60px" }); + this.headerActionText = addTextObject(0, 0, "", TextStyle.WINDOW, { fontSize:"60px" }); this.headerActionText.setOrigin(0, 0); this.headerActionText.setPositionRelative(this.headerBg, 264, 8); // We need to get the player gender from the game data to add the correct prefix to the achievement name - const genderIndex = this.scene.gameData.gender ?? PlayerGender.MALE; + const genderIndex = globalScene.gameData.gender ?? PlayerGender.MALE; const genderStr = PlayerGender[genderIndex].toLowerCase(); this.achvsName = i18next.t("achv:Achievements.name", { context: genderStr }); this.vouchersName = i18next.t("voucher:vouchers"); - this.iconsBg = addWindow(this.scene, 0, this.headerBg.height, (this.scene.game.canvas.width / 6) - 2, (this.scene.game.canvas.height / 6) - this.headerBg.height - 68); + this.iconsBg = addWindow(0, this.headerBg.height, (globalScene.game.canvas.width / 6) - 2, (globalScene.game.canvas.height / 6) - this.headerBg.height - 68); this.iconsBg.setOrigin(0, 0); const yOffset = 6; - this.scrollBar = new ScrollBar(this.scene, this.iconsBg.width - 9, this.iconsBg.y + yOffset, 4, this.iconsBg.height - yOffset * 2, this.ROWS); + this.scrollBar = new ScrollBar(this.iconsBg.width - 9, this.iconsBg.y + yOffset, 4, this.iconsBg.height - yOffset * 2, this.ROWS); - this.iconsContainer = this.scene.add.container(5, this.headerBg.height + 8); + this.iconsContainer = globalScene.add.container(5, this.headerBg.height + 8); this.icons = []; @@ -106,7 +108,7 @@ export default class AchvsUiHandler extends MessageUiHandler { const x = (a % this.COLS) * 18; const y = Math.floor(a / this.COLS) * 18; - const icon = this.scene.add.sprite(x, y, "items", "unknown"); + const icon = globalScene.add.sprite(x, y, "items", "unknown"); icon.setOrigin(0, 0); icon.setScale(0.5); @@ -114,11 +116,11 @@ export default class AchvsUiHandler extends MessageUiHandler { this.iconsContainer.add(icon); } - const titleBg = addWindow(this.scene, 0, this.headerBg.height + this.iconsBg.height, 174, 24); + const titleBg = addWindow(0, this.headerBg.height + this.iconsBg.height, 174, 24); titleBg.setOrigin(0, 0); this.titleBg = titleBg; - this.titleText = addTextObject(this.scene, 0, 0, "", TextStyle.WINDOW); + this.titleText = addTextObject(0, 0, "", TextStyle.WINDOW); const textSize = languageSettings[i18next.language]?.TextSize ?? this.titleText.style.fontSize; this.titleText.setFontSize(textSize); const titleBgCenterX = titleBg.x + titleBg.width / 2; @@ -126,26 +128,26 @@ export default class AchvsUiHandler extends MessageUiHandler { this.titleText.setOrigin(0.5, 0.5); this.titleText.setPosition(titleBgCenterX, titleBgCenterY); - this.scoreContainer = this.scene.add.container(titleBg.x + titleBg.width, titleBg.y); - const scoreBg = addWindow(this.scene, 0, 0, 46, 24); + this.scoreContainer = globalScene.add.container(titleBg.x + titleBg.width, titleBg.y); + const scoreBg = addWindow(0, 0, 46, 24); scoreBg.setOrigin(0, 0); this.scoreContainer.add(scoreBg); - this.scoreText = addTextObject(this.scene, scoreBg.width / 2, scoreBg.height / 2, "", TextStyle.WINDOW); + this.scoreText = addTextObject(scoreBg.width / 2, scoreBg.height / 2, "", TextStyle.WINDOW); this.scoreText.setOrigin(0.5, 0.5); this.scoreContainer.add(this.scoreText); - const unlockBg = addWindow(this.scene, this.scoreContainer.x + scoreBg.width, titleBg.y, 98, 24); + const unlockBg = addWindow(this.scoreContainer.x + scoreBg.width, titleBg.y, 98, 24); unlockBg.setOrigin(0, 0); - this.unlockText = addTextObject(this.scene, 0, 0, "", TextStyle.WINDOW); + this.unlockText = addTextObject(0, 0, "", TextStyle.WINDOW); this.unlockText.setOrigin(0.5, 0.5); this.unlockText.setPositionRelative(unlockBg, unlockBg.width / 2, unlockBg.height / 2); - const descriptionBg = addWindow(this.scene, 0, titleBg.y + titleBg.height, (this.scene.game.canvas.width / 6) - 2, 42); + const descriptionBg = addWindow(0, titleBg.y + titleBg.height, (globalScene.game.canvas.width / 6) - 2, 42); descriptionBg.setOrigin(0, 0); - const descriptionText = addTextObject(this.scene, 0, 0, "", TextStyle.WINDOW, { maxLines: 2 }); + const descriptionText = addTextObject(0, 0, "", TextStyle.WINDOW, { maxLines: 2 }); descriptionText.setWordWrapWidth(1870); descriptionText.setOrigin(0, 0); descriptionText.setPositionRelative(descriptionBg, 8, 4); @@ -195,12 +197,12 @@ export default class AchvsUiHandler extends MessageUiHandler { protected showAchv(achv: Achv) { // We need to get the player gender from the game data to add the correct prefix to the achievement name - const genderIndex = this.scene.gameData.gender ?? PlayerGender.MALE; + const genderIndex = globalScene.gameData.gender ?? PlayerGender.MALE; const genderStr = PlayerGender[genderIndex].toLowerCase(); achv.name = i18next.t(`achv:${achv.localizationKey}.name`, { context: genderStr }); achv.description = getAchievementDescription(achv.localizationKey); - const achvUnlocks = this.scene.gameData.achvUnlocks; + const achvUnlocks = globalScene.gameData.achvUnlocks; const unlocked = achvUnlocks.hasOwnProperty(achv.id); const hidden = !unlocked && achv.secret && (!achv.parentId || !achvUnlocks.hasOwnProperty(achv.parentId)); this.titleText.setText(unlocked ? achv.name : "???"); @@ -210,7 +212,7 @@ export default class AchvsUiHandler extends MessageUiHandler { } protected showVoucher(voucher: Voucher) { - const voucherUnlocks = this.scene.gameData.voucherUnlocks; + const voucherUnlocks = globalScene.gameData.voucherUnlocks; const unlocked = voucherUnlocks.hasOwnProperty(voucher.id); this.titleText.setText(getVoucherTypeName(voucher.voucherType)); @@ -240,7 +242,7 @@ export default class AchvsUiHandler extends MessageUiHandler { } if (button === Button.CANCEL) { success = true; - this.scene.ui.revertMode(); + globalScene.ui.revertMode(); } else { const rowIndex = Math.floor(this.cursor / this.COLS); const itemOffset = (this.scrollCursor * this.COLS); @@ -300,13 +302,13 @@ export default class AchvsUiHandler extends MessageUiHandler { return success; } - setCursor(cursor: integer, pageChange?: boolean): boolean { + setCursor(cursor: number, pageChange?: boolean): boolean { const ret = super.setCursor(cursor); let update = ret; if (!this.cursorObj) { - this.cursorObj = this.scene.add.nineslice(0, 0, "select_cursor_highlight", undefined, 16, 16, 1, 1, 1, 1); + this.cursorObj = globalScene.add.nineslice(0, 0, "select_cursor_highlight", undefined, 16, 16, 1, 1, 1, 1); this.cursorObj.setOrigin(0, 0); this.iconsContainer.add(this.cursorObj); update = true; @@ -338,12 +340,12 @@ export default class AchvsUiHandler extends MessageUiHandler { } /** - * setScrollCursor(scrollCursor: integer) : boolean + * setScrollCursor(scrollCursor: number) : boolean * scrollCursor refers to the page's position within the entire sum of the data, unlike cursor, which refers to a user's position within displayed data - * @param takes a scrollCursor that has been updated based on user behavior + * @param scrollCursor takes a value that has been updated based on user behavior * @returns returns a boolean that indicates whether the updated scrollCursor led to an update in the data displayed. */ - setScrollCursor(scrollCursor: integer): boolean { + setScrollCursor(scrollCursor: number): boolean { if (scrollCursor === this.scrollCursor) { return false; } @@ -382,14 +384,14 @@ export default class AchvsUiHandler extends MessageUiHandler { this.headerActionText.setX(textPosition); this.headerActionButton.setX(textPosition - this.headerActionButton.displayWidth - 4); - const achvUnlocks = this.scene.gameData.achvUnlocks; + const achvUnlocks = globalScene.gameData.achvUnlocks; const itemOffset = this.scrollCursor * this.COLS; const itemLimit = this.ROWS * this.COLS; const achvRange = Object.values(achvs).slice(itemOffset, itemLimit + itemOffset); - achvRange.forEach((achv: Achv, i: integer) => { + achvRange.forEach((achv: Achv, i: number) => { const icon = this.icons[i]; const unlocked = achvUnlocks.hasOwnProperty(achv.id); const hidden = !unlocked && achv.secret && (!achv.parentId || !achvUnlocks.hasOwnProperty(achv.parentId)); @@ -422,14 +424,14 @@ export default class AchvsUiHandler extends MessageUiHandler { this.headerActionText.setX(textPosition); this.headerActionButton.setX(textPosition - this.headerActionButton.displayWidth - 4); - const voucherUnlocks = this.scene.gameData.voucherUnlocks; + const voucherUnlocks = globalScene.gameData.voucherUnlocks; const itemOffset = this.scrollCursor * this.COLS; const itemLimit = this.ROWS * this.COLS; const voucherRange = Object.values(vouchers).slice(itemOffset, itemLimit + itemOffset); - voucherRange.forEach((voucher: Voucher, i: integer) => { + voucherRange.forEach((voucher: Voucher, i: number) => { const icon = this.icons[i]; const unlocked = voucherUnlocks.hasOwnProperty(voucher.id); diff --git a/src/ui/admin-ui-handler.ts b/src/ui/admin-ui-handler.ts index 269b5ac5096..e31acda6fa2 100644 --- a/src/ui/admin-ui-handler.ts +++ b/src/ui/admin-ui-handler.ts @@ -1,11 +1,12 @@ -import BattleScene from "#app/battle-scene"; import { Button } from "#app/enums/buttons"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; import { formatText } from "#app/utils"; -import { FormModalUiHandler, InputFieldConfig } from "./form-modal-ui-handler"; -import { ModalConfig } from "./modal-ui-handler"; +import type { InputFieldConfig } from "./form-modal-ui-handler"; +import { FormModalUiHandler } from "./form-modal-ui-handler"; +import type { ModalConfig } from "./modal-ui-handler"; import { TextStyle } from "./text"; import { Mode } from "./ui"; +import { globalScene } from "#app/global-scene"; type AdminUiHandlerService = "discord" | "google"; type AdminUiHandlerServiceMode = "Link" | "Unlink"; @@ -31,8 +32,8 @@ export default class AdminUiHandler extends FormModalUiHandler { return `Username and ${service} successfully ${mode.toLowerCase()}ed`; }; - constructor(scene: BattleScene, mode: Mode | null = null) { - super(scene, mode); + constructor(mode: Mode | null = null) { + super(mode); } override getModalTitle(): string { @@ -126,10 +127,10 @@ export default class AdminUiHandler extends FormModalUiHandler { const adminSearchResult: AdminSearchInfo = this.convertInputsToAdmin(); // this converts the input texts into a single object for use later const validFields = this.areFieldsValid(this.adminMode); if (validFields.error) { - this.scene.ui.setMode(Mode.LOADING, { buttonActions: []}); // this is here to force a loading screen to allow the admin tool to reopen again if there's an error + globalScene.ui.setMode(Mode.LOADING, { buttonActions: []}); // this is here to force a loading screen to allow the admin tool to reopen again if there's an error return this.showMessage(validFields.errorMessage ?? "", adminSearchResult, true); } - this.scene.ui.setMode(Mode.LOADING, { buttonActions: []}); + globalScene.ui.setMode(Mode.LOADING, { buttonActions: []}); if (this.adminMode === AdminMode.LINK) { this.adminLinkUnlink(adminSearchResult, "discord", "Link") // calls server to link discord .then(response => { @@ -157,11 +158,11 @@ export default class AdminUiHandler extends FormModalUiHandler { } showMessage(message: string, adminResult: AdminSearchInfo, isError: boolean) { - this.scene.ui.setMode(Mode.ADMIN, Object.assign(this.config, { errorMessage: message?.trim() }), this.adminMode, adminResult, isError); + globalScene.ui.setMode(Mode.ADMIN, Object.assign(this.config, { errorMessage: message?.trim() }), this.adminMode, adminResult, isError); if (isError) { - this.scene.ui.playError(); + globalScene.ui.playError(); } else { - this.scene.ui.playSelect(); + globalScene.ui.playSelect(); } } @@ -185,7 +186,7 @@ export default class AdminUiHandler extends FormModalUiHandler { this.inputs[i].setText(adminResult[aR]); if (aR === "discordId" || aR === "googleId") { // this is here to add the icons for linking/unlinking of google/discord IDs const nineSlice = this.inputContainers[i].list.find(iC => iC.type === "NineSlice"); - const img = this.scene.add.image(this.inputContainers[i].x + nineSlice!.width + this.buttonGap, this.inputContainers[i].y + (Math.floor(nineSlice!.height / 2)), adminResult[aR] === "" ? "link_icon" : "unlink_icon"); + const img = globalScene.add.image(this.inputContainers[i].x + nineSlice!.width + this.buttonGap, this.inputContainers[i].y + (Math.floor(nineSlice!.height / 2)), adminResult[aR] === "" ? "link_icon" : "unlink_icon"); img.setName(`adminBtn_${aR}`); img.setOrigin(0.5, 0.5); img.setInteractive(); @@ -194,15 +195,15 @@ export default class AdminUiHandler extends FormModalUiHandler { const mode = adminResult[aR] === "" ? "Link" : "Unlink"; // this figures out if we're linking or unlinking a service const validFields = this.areFieldsValid(this.adminMode, service); if (validFields.error) { - this.scene.ui.setMode(Mode.LOADING, { buttonActions: []}); // this is here to force a loading screen to allow the admin tool to reopen again if there's an error + globalScene.ui.setMode(Mode.LOADING, { buttonActions: []}); // this is here to force a loading screen to allow the admin tool to reopen again if there's an error return this.showMessage(validFields.errorMessage ?? "", adminResult, true); } this.adminLinkUnlink(this.convertInputsToAdmin(), service as AdminUiHandlerService, mode).then(response => { // attempts to link/unlink depending on the service if (response.error) { - this.scene.ui.setMode(Mode.LOADING, { buttonActions: []}); + globalScene.ui.setMode(Mode.LOADING, { buttonActions: []}); return this.showMessage(response.errorType, adminResult, true); // fail } else { // success, reload panel with new results - this.scene.ui.setMode(Mode.LOADING, { buttonActions: []}); + globalScene.ui.setMode(Mode.LOADING, { buttonActions: []}); this.adminSearch(adminResult) .then(response => { if (response.error) { @@ -340,16 +341,16 @@ export default class AdminUiHandler extends FormModalUiHandler { private updateAdminPanelInfo(adminSearchResult: AdminSearchInfo, mode?: AdminMode) { mode = mode ?? AdminMode.ADMIN; - this.scene.ui.setMode(Mode.ADMIN, { + globalScene.ui.setMode(Mode.ADMIN, { buttonActions: [ // we double revert here and below to go back 2 layers of menus () => { - this.scene.ui.revertMode(); - this.scene.ui.revertMode(); + globalScene.ui.revertMode(); + globalScene.ui.revertMode(); }, () => { - this.scene.ui.revertMode(); - this.scene.ui.revertMode(); + globalScene.ui.revertMode(); + globalScene.ui.revertMode(); } ] }, mode, adminSearchResult); diff --git a/src/ui/arena-flyout.ts b/src/ui/arena-flyout.ts index 573cb85db70..7e9b24d1d97 100644 --- a/src/ui/arena-flyout.ts +++ b/src/ui/arena-flyout.ts @@ -1,15 +1,18 @@ import { addTextObject, TextStyle } from "./text"; -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { ArenaTagSide, ArenaTrapTag } from "#app/data/arena-tag"; import { WeatherType } from "#enums/weather-type"; import { TerrainType } from "#app/data/terrain"; import { addWindow, WindowVariant } from "./ui-theme"; -import { ArenaEvent, ArenaEventType, TagAddedEvent, TagRemovedEvent, TerrainChangedEvent, WeatherChangedEvent } from "#app/events/arena"; -import { BattleSceneEventType, TurnEndEvent } from "../events/battle-scene"; +import type { ArenaEvent } from "#app/events/arena"; +import { ArenaEventType, TagAddedEvent, TagRemovedEvent, TerrainChangedEvent, WeatherChangedEvent } from "#app/events/arena"; +import type { TurnEndEvent } from "../events/battle-scene"; +import { BattleSceneEventType } from "../events/battle-scene"; import { ArenaTagType } from "#enums/arena-tag-type"; import TimeOfDayWidget from "./time-of-day-widget"; import * as Utils from "../utils"; -import i18next, { ParseKeys } from "i18next"; +import type { ParseKeys } from "i18next"; +import i18next from "i18next"; /** Enum used to differentiate {@linkcode Arena} effects */ enum ArenaEffectType { @@ -45,9 +48,6 @@ export function getFieldEffectText(arenaTagType: string): string { } export class ArenaFlyout extends Phaser.GameObjects.Container { - /** An alias for the scene typecast to a {@linkcode BattleScene} */ - private battleScene: BattleScene; - /** The restricted width of the flyout which should be drawn to */ private flyoutWidth = 170; /** The restricted height of the flyout which should be drawn to */ @@ -98,62 +98,61 @@ export class ArenaFlyout extends Phaser.GameObjects.Container { private readonly onFieldEffectChangedEvent = (event: Event) => this.onFieldEffectChanged(event); - constructor(scene: Phaser.Scene) { - super(scene, 0, 0); + constructor() { + super(globalScene, 0, 0); this.setName("arena-flyout"); - this.battleScene = this.scene as BattleScene; this.translationX = this.flyoutWidth; this.anchorX = 0; this.anchorY = -98; - this.flyoutParent = this.scene.add.container(this.anchorX - this.translationX, this.anchorY); + this.flyoutParent = globalScene.add.container(this.anchorX - this.translationX, this.anchorY); this.flyoutParent.setAlpha(0); this.add(this.flyoutParent); - this.flyoutContainer = this.scene.add.container(0, 0); + this.flyoutContainer = globalScene.add.container(0, 0); this.flyoutParent.add(this.flyoutContainer); - this.flyoutWindow = addWindow(this.scene as BattleScene, 0, 0, this.flyoutWidth, this.flyoutHeight, false, false, 0, 0, WindowVariant.THIN); + this.flyoutWindow = addWindow(0, 0, this.flyoutWidth, this.flyoutHeight, false, false, 0, 0, WindowVariant.THIN); this.flyoutContainer.add(this.flyoutWindow); - this.flyoutWindowHeader = addWindow(this.scene as BattleScene, this.flyoutWidth / 2, 0, this.flyoutWidth / 2, 14, false, false, 0, 0, WindowVariant.XTHIN); + this.flyoutWindowHeader = addWindow(this.flyoutWidth / 2, 0, this.flyoutWidth / 2, 14, false, false, 0, 0, WindowVariant.XTHIN); this.flyoutWindowHeader.setOrigin(); this.flyoutContainer.add(this.flyoutWindowHeader); - this.flyoutTextHeader = addTextObject(this.scene, this.flyoutWidth / 2, 0, i18next.t("arenaFlyout:activeBattleEffects"), TextStyle.BATTLE_INFO); + this.flyoutTextHeader = addTextObject(this.flyoutWidth / 2, 0, i18next.t("arenaFlyout:activeBattleEffects"), TextStyle.BATTLE_INFO); this.flyoutTextHeader.setFontSize(54); this.flyoutTextHeader.setAlign("center"); this.flyoutTextHeader.setOrigin(); this.flyoutContainer.add(this.flyoutTextHeader); - this.timeOfDayWidget = new TimeOfDayWidget(this.scene, (this.flyoutWidth / 2) + (this.flyoutWindowHeader.displayWidth / 2)); + this.timeOfDayWidget = new TimeOfDayWidget((this.flyoutWidth / 2) + (this.flyoutWindowHeader.displayWidth / 2)); this.flyoutContainer.add(this.timeOfDayWidget); - this.flyoutTextHeaderPlayer = addTextObject(this.scene, 6, 5, i18next.t("arenaFlyout:player"), TextStyle.SUMMARY_BLUE); + this.flyoutTextHeaderPlayer = addTextObject(6, 5, i18next.t("arenaFlyout:player"), TextStyle.SUMMARY_BLUE); this.flyoutTextHeaderPlayer.setFontSize(54); this.flyoutTextHeaderPlayer.setAlign("left"); this.flyoutTextHeaderPlayer.setOrigin(0, 0); this.flyoutContainer.add(this.flyoutTextHeaderPlayer); - this.flyoutTextHeaderField = addTextObject(this.scene, this.flyoutWidth / 2, 5, i18next.t("arenaFlyout:neutral"), TextStyle.SUMMARY_GREEN); + this.flyoutTextHeaderField = addTextObject(this.flyoutWidth / 2, 5, i18next.t("arenaFlyout:neutral"), TextStyle.SUMMARY_GREEN); this.flyoutTextHeaderField.setFontSize(54); this.flyoutTextHeaderField.setAlign("center"); this.flyoutTextHeaderField.setOrigin(0.5, 0); this.flyoutContainer.add(this.flyoutTextHeaderField); - this.flyoutTextHeaderEnemy = addTextObject(this.scene, this.flyoutWidth - 6, 5, i18next.t("arenaFlyout:enemy"), TextStyle.SUMMARY_RED); + this.flyoutTextHeaderEnemy = addTextObject(this.flyoutWidth - 6, 5, i18next.t("arenaFlyout:enemy"), TextStyle.SUMMARY_RED); this.flyoutTextHeaderEnemy.setFontSize(54); this.flyoutTextHeaderEnemy.setAlign("right"); this.flyoutTextHeaderEnemy.setOrigin(1, 0); this.flyoutContainer.add(this.flyoutTextHeaderEnemy); - this.flyoutTextPlayer = addTextObject(this.scene, 6, 13, "", TextStyle.BATTLE_INFO); + this.flyoutTextPlayer = addTextObject(6, 13, "", TextStyle.BATTLE_INFO); this.flyoutTextPlayer.setLineSpacing(-1); this.flyoutTextPlayer.setFontSize(48); this.flyoutTextPlayer.setAlign("left"); @@ -161,7 +160,7 @@ export class ArenaFlyout extends Phaser.GameObjects.Container { this.flyoutContainer.add(this.flyoutTextPlayer); - this.flyoutTextField = addTextObject(this.scene, this.flyoutWidth / 2, 13, "", TextStyle.BATTLE_INFO); + this.flyoutTextField = addTextObject(this.flyoutWidth / 2, 13, "", TextStyle.BATTLE_INFO); this.flyoutTextField.setLineSpacing(-1); this.flyoutTextField.setFontSize(48); this.flyoutTextField.setAlign("center"); @@ -169,7 +168,7 @@ export class ArenaFlyout extends Phaser.GameObjects.Container { this.flyoutContainer.add(this.flyoutTextField); - this.flyoutTextEnemy = addTextObject(this.scene, this.flyoutWidth - 6, 13, "", TextStyle.BATTLE_INFO); + this.flyoutTextEnemy = addTextObject(this.flyoutWidth - 6, 13, "", TextStyle.BATTLE_INFO); this.flyoutTextEnemy.setLineSpacing(-1); this.flyoutTextEnemy.setFontSize(48); this.flyoutTextEnemy.setAlign("right"); @@ -181,18 +180,18 @@ export class ArenaFlyout extends Phaser.GameObjects.Container { this.flyoutParent.name = "Fight Flyout Parent"; // Subscribes to required events available on game start - this.battleScene.eventTarget.addEventListener(BattleSceneEventType.NEW_ARENA, this.onNewArenaEvent); - this.battleScene.eventTarget.addEventListener(BattleSceneEventType.TURN_END, this.onTurnEndEvent); + globalScene.eventTarget.addEventListener(BattleSceneEventType.NEW_ARENA, this.onNewArenaEvent); + globalScene.eventTarget.addEventListener(BattleSceneEventType.TURN_END, this.onTurnEndEvent); } private onNewArena(event: Event) { this.fieldEffectInfo.length = 0; // Subscribes to required events available on battle start - this.battleScene.arena.eventTarget.addEventListener(ArenaEventType.WEATHER_CHANGED, this.onFieldEffectChangedEvent); - this.battleScene.arena.eventTarget.addEventListener(ArenaEventType.TERRAIN_CHANGED, this.onFieldEffectChangedEvent); - this.battleScene.arena.eventTarget.addEventListener(ArenaEventType.TAG_ADDED, this.onFieldEffectChangedEvent); - this.battleScene.arena.eventTarget.addEventListener(ArenaEventType.TAG_REMOVED, this.onFieldEffectChangedEvent); + globalScene.arena.eventTarget.addEventListener(ArenaEventType.WEATHER_CHANGED, this.onFieldEffectChangedEvent); + globalScene.arena.eventTarget.addEventListener(ArenaEventType.TERRAIN_CHANGED, this.onFieldEffectChangedEvent); + globalScene.arena.eventTarget.addEventListener(ArenaEventType.TAG_ADDED, this.onFieldEffectChangedEvent); + globalScene.arena.eventTarget.addEventListener(ArenaEventType.TAG_REMOVED, this.onFieldEffectChangedEvent); } @@ -255,7 +254,7 @@ export class ArenaFlyout extends Phaser.GameObjects.Container { switch (arenaEffectChangedEvent.constructor) { case TagAddedEvent: const tagAddedEvent = arenaEffectChangedEvent as TagAddedEvent; - const isArenaTrapTag = this.battleScene.arena.getTag(tagAddedEvent.arenaTagType) instanceof ArenaTrapTag; + const isArenaTrapTag = globalScene.arena.getTag(tagAddedEvent.arenaTagType) instanceof ArenaTrapTag; let arenaEffectType: ArenaEffectType; if (tagAddedEvent.arenaTagSide === ArenaTagSide.BOTH) { @@ -367,7 +366,7 @@ export class ArenaFlyout extends Phaser.GameObjects.Container { * @param visible Should the flyout be shown? */ public toggleFlyout(visible: boolean): void { - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.flyoutParent, x: visible ? this.anchorX : this.anchorX - this.translationX, duration: Utils.fixedInt(125), @@ -378,13 +377,13 @@ export class ArenaFlyout extends Phaser.GameObjects.Container { } public destroy(fromScene?: boolean): void { - this.battleScene.eventTarget.removeEventListener(BattleSceneEventType.NEW_ARENA, this.onNewArenaEvent); - this.battleScene.eventTarget.removeEventListener(BattleSceneEventType.TURN_END, this.onTurnEndEvent); + globalScene.eventTarget.removeEventListener(BattleSceneEventType.NEW_ARENA, this.onNewArenaEvent); + globalScene.eventTarget.removeEventListener(BattleSceneEventType.TURN_END, this.onTurnEndEvent); - this.battleScene.arena.eventTarget.removeEventListener(ArenaEventType.WEATHER_CHANGED, this.onFieldEffectChangedEvent); - this.battleScene.arena.eventTarget.removeEventListener(ArenaEventType.TERRAIN_CHANGED, this.onFieldEffectChangedEvent); - this.battleScene.arena.eventTarget.removeEventListener(ArenaEventType.TAG_ADDED, this.onFieldEffectChangedEvent); - this.battleScene.arena.eventTarget.removeEventListener(ArenaEventType.TAG_REMOVED, this.onFieldEffectChangedEvent); + globalScene.arena.eventTarget.removeEventListener(ArenaEventType.WEATHER_CHANGED, this.onFieldEffectChangedEvent); + globalScene.arena.eventTarget.removeEventListener(ArenaEventType.TERRAIN_CHANGED, this.onFieldEffectChangedEvent); + globalScene.arena.eventTarget.removeEventListener(ArenaEventType.TAG_ADDED, this.onFieldEffectChangedEvent); + globalScene.arena.eventTarget.removeEventListener(ArenaEventType.TAG_REMOVED, this.onFieldEffectChangedEvent); super.destroy(fromScene); } diff --git a/src/ui/autocomplete-ui-handler.ts b/src/ui/autocomplete-ui-handler.ts index 480a3cf72d0..23abdb85772 100644 --- a/src/ui/autocomplete-ui-handler.ts +++ b/src/ui/autocomplete-ui-handler.ts @@ -1,15 +1,14 @@ import { Button } from "#enums/buttons"; -import BattleScene from "../battle-scene"; import AbstractOptionSelectUiHandler from "./abstact-option-select-ui-handler"; import { Mode } from "./ui"; export default class AutoCompleteUiHandler extends AbstractOptionSelectUiHandler { modalContainer: Phaser.GameObjects.Container; - constructor(scene: BattleScene, mode: Mode = Mode.OPTION_SELECT) { - super(scene, mode); + constructor(mode: Mode = Mode.OPTION_SELECT) { + super(mode); } - getWindowWidth(): integer { + getWindowWidth(): number { return 64; } diff --git a/src/ui/awaitable-ui-handler.ts b/src/ui/awaitable-ui-handler.ts index 8256f938106..cc970358cb2 100644 --- a/src/ui/awaitable-ui-handler.ts +++ b/src/ui/awaitable-ui-handler.ts @@ -1,7 +1,7 @@ -import BattleScene from "../battle-scene"; -import { Mode } from "./ui"; +import type { Mode } from "./ui"; import UiHandler from "./ui-handler"; import { Button } from "#enums/buttons"; +import { globalScene } from "#app/global-scene"; export default abstract class AwaitableUiHandler extends UiHandler { protected awaitingActionInput: boolean; @@ -9,8 +9,8 @@ export default abstract class AwaitableUiHandler extends UiHandler { public tutorialActive: boolean = false; public tutorialOverlay: Phaser.GameObjects.Rectangle; - constructor(scene: BattleScene, mode: Mode | null = null) { - super(scene, mode); + constructor(mode: Mode | null = null) { + super(mode); } processTutorialInput(button: Button): boolean { @@ -32,7 +32,7 @@ export default abstract class AwaitableUiHandler extends UiHandler { */ initTutorialOverlay(container: Phaser.GameObjects.Container) { if (!this.tutorialOverlay) { - this.tutorialOverlay = new Phaser.GameObjects.Rectangle(this.scene, -1, -1, this.scene.scaledCanvas.width, this.scene.scaledCanvas.height, 0x070707); + this.tutorialOverlay = new Phaser.GameObjects.Rectangle(globalScene, -1, -1, globalScene.scaledCanvas.width, globalScene.scaledCanvas.height, 0x070707); this.tutorialOverlay.setName("tutorial-overlay"); this.tutorialOverlay.setOrigin(0, 0); this.tutorialOverlay.setAlpha(0); diff --git a/src/ui/ball-ui-handler.ts b/src/ui/ball-ui-handler.ts index 9df6da36055..a402d11ef1d 100644 --- a/src/ui/ball-ui-handler.ts +++ b/src/ui/ball-ui-handler.ts @@ -1,4 +1,3 @@ -import BattleScene from "../battle-scene"; import { getPokeballName } from "../data/pokeball"; import { addTextObject, getTextStyleOptions, TextStyle } from "./text"; import { Command } from "./command-ui-handler"; @@ -6,7 +5,8 @@ import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import { addWindow } from "./ui-theme"; import { Button } from "#enums/buttons"; -import { CommandPhase } from "#app/phases/command-phase"; +import type { CommandPhase } from "#app/phases/command-phase"; +import { globalScene } from "#app/global-scene"; export default class BallUiHandler extends UiHandler { private pokeballSelectContainer: Phaser.GameObjects.Container; @@ -17,28 +17,28 @@ export default class BallUiHandler extends UiHandler { private scale: number = 0.1666666667; - constructor(scene: BattleScene) { - super(scene, Mode.BALL); + constructor() { + super(Mode.BALL); } setup() { const ui = this.getUi(); - this.scale = getTextStyleOptions(TextStyle.WINDOW, this.scene.uiTheme).scale; + this.scale = getTextStyleOptions(TextStyle.WINDOW, globalScene.uiTheme).scale; let optionsTextContent = ""; - for (let pb = 0; pb < Object.keys(this.scene.pokeballCounts).length; pb++) { + for (let pb = 0; pb < Object.keys(globalScene.pokeballCounts).length; pb++) { optionsTextContent += `${getPokeballName(pb)}\n`; } optionsTextContent += "Cancel"; - const optionsText = addTextObject(this.scene, 0, 0, optionsTextContent, TextStyle.WINDOW, { align: "right", maxLines: 6 }); + const optionsText = addTextObject(0, 0, optionsTextContent, TextStyle.WINDOW, { align: "right", maxLines: 6 }); const optionsTextWidth = optionsText.displayWidth; - this.pokeballSelectContainer = this.scene.add.container((this.scene.game.canvas.width / 6) - 51 - Math.max(64, optionsTextWidth), -49); + this.pokeballSelectContainer = globalScene.add.container((globalScene.game.canvas.width / 6) - 51 - Math.max(64, optionsTextWidth), -49); this.pokeballSelectContainer.setVisible(false); ui.add(this.pokeballSelectContainer); - this.pokeballSelectBg = addWindow(this.scene, 0, 0, 50 + Math.max(64, optionsTextWidth), 32 + 480 * this.scale); + this.pokeballSelectBg = addWindow(0, 0, 50 + Math.max(64, optionsTextWidth), 32 + 480 * this.scale); this.pokeballSelectBg.setOrigin(0, 1); this.pokeballSelectContainer.add(this.pokeballSelectBg); this.pokeballSelectContainer.add(optionsText); @@ -46,7 +46,7 @@ export default class BallUiHandler extends UiHandler { optionsText.setPositionRelative(this.pokeballSelectBg, 42, 9); optionsText.setLineSpacing(this.scale * 72); - this.countsText = addTextObject(this.scene, 0, 0, "", TextStyle.WINDOW, { maxLines: 5 }); + this.countsText = addTextObject(0, 0, "", TextStyle.WINDOW, { maxLines: 5 }); this.countsText.setPositionRelative(this.pokeballSelectBg, 18, 9); this.countsText.setLineSpacing(this.scale * 72); this.pokeballSelectContainer.add(this.countsText); @@ -69,16 +69,16 @@ export default class BallUiHandler extends UiHandler { let success = false; - const pokeballTypeCount = Object.keys(this.scene.pokeballCounts).length; + const pokeballTypeCount = Object.keys(globalScene.pokeballCounts).length; if (button === Button.ACTION || button === Button.CANCEL) { - const commandPhase = this.scene.getCurrentPhase() as CommandPhase; + const commandPhase = globalScene.getCurrentPhase() as CommandPhase; success = true; if (button === Button.ACTION && this.cursor < pokeballTypeCount) { - if (this.scene.pokeballCounts[this.cursor]) { + if (globalScene.pokeballCounts[this.cursor]) { if (commandPhase.handleCommand(Command.BALL, this.cursor)) { - this.scene.ui.setMode(Mode.COMMAND, commandPhase.getFieldIndex()); - this.scene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(Mode.COMMAND, commandPhase.getFieldIndex()); + globalScene.ui.setMode(Mode.MESSAGE); success = true; } } else { @@ -107,14 +107,14 @@ export default class BallUiHandler extends UiHandler { } updateCounts() { - this.countsText.setText(Object.values(this.scene.pokeballCounts).map(c => `x${c}`).join("\n")); + this.countsText.setText(Object.values(globalScene.pokeballCounts).map(c => `x${c}`).join("\n")); } - setCursor(cursor: integer): boolean { + setCursor(cursor: number): boolean { const ret = super.setCursor(cursor); if (!this.cursorObj) { - this.cursorObj = this.scene.add.image(0, 0, "cursor"); + this.cursorObj = globalScene.add.image(0, 0, "cursor"); this.pokeballSelectContainer.add(this.cursorObj); } diff --git a/src/ui/base-stats-overlay.ts b/src/ui/base-stats-overlay.ts new file mode 100644 index 00000000000..f2e94fa24a4 --- /dev/null +++ b/src/ui/base-stats-overlay.ts @@ -0,0 +1,121 @@ +import type { InfoToggle } from "../battle-scene"; +import { TextStyle, addTextObject } from "./text"; +import { addWindow } from "./ui-theme"; +import * as Utils from "../utils"; +import i18next from "i18next"; +import { globalScene } from "#app/global-scene"; + +interface BaseStatsOverlaySettings { + scale?:number; // scale the box? A scale of 0.5 is recommended + x?: number; + y?: number; + /** Default is always half the screen, regardless of scale */ + width?: number; +} + +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 { + + public active: boolean = false; + + private statsLabels: Phaser.GameObjects.Text[] = []; + private statsRectangles: Phaser.GameObjects.Rectangle[] = []; + private statsShadows: Phaser.GameObjects.Rectangle[] = []; + private statsTotalLabel: Phaser.GameObjects.Text; + + private statsBg: Phaser.GameObjects.NineSlice; + + public scale: number; + public width: number; + + constructor(options?: BaseStatsOverlaySettings) { + super(globalScene, options?.x, options?.y); + this.scale = options?.scale || 1; // set up the scale + this.setScale(this.scale); + + // prepare the description box + this.width = (options?.width || BaseStatsOverlay.getWidth(this.scale)) / this.scale; // divide by scale as we always want this to be half a window wide + this.statsBg = addWindow(0, 0, this.width, HEIGHT); + this.statsBg.setOrigin(0, 0); + this.add(this.statsBg); + + for (let i = 0; i < 6; i++) { + const shadow = globalScene.add.rectangle(this.width - BORDER + 1, BORDER + 3 + i * 15, 100, 5, 0x006860); + shadow.setOrigin(1, 0); + this.statsShadows.push(shadow); + this.add(shadow); + + const rectangle = globalScene.add.rectangle(this.width - BORDER, BORDER + 2 + i * 15, 100, 5, 0x66aa99); + rectangle.setOrigin(1, 0); + this.statsRectangles.push(rectangle); + this.add(rectangle); + + const label = addTextObject(BORDER, BORDER - 2 + i * 15, "A", TextStyle.BATTLE_INFO); + this.statsLabels.push(label); + this.add(label); + } + + this.statsTotalLabel = addTextObject(BORDER, BORDER + 6 * 15, "A", TextStyle.MONEY_WINDOW); + this.add(this.statsTotalLabel); + + // hide this component for now + this.setVisible(false); + } + + // show this component with infos for the specific move + show(values: number[], total: number):boolean { + + for (let i = 0; i < 6; i++) { + this.statsLabels[i].setText(i18next.t(`pokemonInfo:Stat.${shortStats[i]}shortened`) + ": " + `${values[i]}`); + // This accounts for base stats up to 200, might not be enough. + // TODO: change color based on value. + this.statsShadows[i].setSize(values[i] / 2, 5); + this.statsRectangles[i].setSize(values[i] / 2, 5); + } + + this.statsTotalLabel.setText(i18next.t("pokedexUiHandler:baseTotal") + ": " + `${total}`); + + + this.setVisible(true); + this.active = true; + return true; + } + + clear() { + this.setVisible(false); + this.active = false; + } + + toggleInfo(visible: boolean): void { + if (visible) { + this.setVisible(true); + } + globalScene.tweens.add({ + targets: this.statsLabels, + duration: Utils.fixedInt(125), + ease: "Sine.easeInOut", + alpha: visible ? 1 : 0 + }); + if (!visible) { + this.setVisible(false); + } + } + + isActive(): boolean { + return this.active; + } + + // width of this element + static getWidth(scale:number):number { + return globalScene.game.canvas.width / GLOBAL_SCALE / 2; + } + + // height of this element + static getHeight(scale:number, onSide?: boolean):number { + return HEIGHT * scale; + } +} diff --git a/src/ui/battle-flyout.ts b/src/ui/battle-flyout.ts index 4541a2bfefa..c716705452c 100644 --- a/src/ui/battle-flyout.ts +++ b/src/ui/battle-flyout.ts @@ -1,9 +1,10 @@ -import { default as Pokemon } from "../field/pokemon"; +import type { default as Pokemon } from "../field/pokemon"; import { addTextObject, TextStyle } from "./text"; import * as Utils from "../utils"; -import BattleScene from "#app/battle-scene"; -import Move from "#app/data/move"; -import { BattleSceneEventType, BerryUsedEvent, MoveUsedEvent } from "../events/battle-scene"; +import { globalScene } from "#app/global-scene"; +import type Move from "#app/data/move"; +import type { BerryUsedEvent, MoveUsedEvent } from "../events/battle-scene"; +import { BattleSceneEventType } from "../events/battle-scene"; import { BerryType } from "#enums/berry-type"; import { Moves } from "#enums/moves"; import { UiTheme } from "#enums/ui-theme"; @@ -22,9 +23,6 @@ interface MoveInfo { /** A Flyout Menu attached to each {@linkcode BattleInfo} object on the field UI */ export default class BattleFlyout extends Phaser.GameObjects.Container { - /** An alias for the scene typecast to a {@linkcode BattleScene} */ - private battleScene: BattleScene; - /** Is this object linked to a player's Pokemon? */ private player: boolean; @@ -63,9 +61,8 @@ export default class BattleFlyout extends Phaser.GameObjects.Container { private readonly onMoveUsedEvent = (event: Event) => this.onMoveUsed(event); private readonly onBerryUsedEvent = (event: Event) => this.onBerryUsed(event); - constructor(scene: Phaser.Scene, player: boolean) { - super(scene, 0, 0); - this.battleScene = scene as BattleScene; + constructor(player: boolean) { + super(globalScene, 0, 0); // Note that all player based flyouts are disabled. This is included in case of future development this.player = player; @@ -74,23 +71,22 @@ export default class BattleFlyout extends Phaser.GameObjects.Container { this.anchorX = (this.player ? -130 : -40); this.anchorY = -2.5 + (this.player ? -18.5 : -13); - this.flyoutParent = this.scene.add.container(this.anchorX - this.translationX, this.anchorY); + this.flyoutParent = globalScene.add.container(this.anchorX - this.translationX, this.anchorY); this.flyoutParent.setAlpha(0); this.add(this.flyoutParent); // Load the background image - this.flyoutBackground = this.scene.add.sprite(0, 0, "pbinfo_enemy_boss_stats"); + this.flyoutBackground = globalScene.add.sprite(0, 0, "pbinfo_enemy_boss_stats"); this.flyoutBackground.setOrigin(0, 0); this.flyoutParent.add(this.flyoutBackground); - this.flyoutContainer = this.scene.add.container(44 + (this.player ? -this.flyoutWidth : 0), 2); + this.flyoutContainer = globalScene.add.container(44 + (this.player ? -this.flyoutWidth : 0), 2); this.flyoutParent.add(this.flyoutContainer); // Loops through and sets the position of each text object according to the width and height of the flyout for (let i = 0; i < 4; i++) { this.flyoutText[i] = addTextObject( - this.scene, (this.flyoutWidth / 4) + (this.flyoutWidth / 2) * (i % 2), (this.flyoutHeight / 4) + (this.flyoutHeight / 2) * (i < 2 ? 0 : 1), "???", TextStyle.BATTLE_INFO); this.flyoutText[i].setFontSize(45); @@ -102,9 +98,9 @@ export default class BattleFlyout extends Phaser.GameObjects.Container { this.flyoutContainer.add(this.flyoutText); this.flyoutContainer.add( - new Phaser.GameObjects.Rectangle(this.scene, this.flyoutWidth / 2, 0, 1, this.flyoutHeight + (this.battleScene.uiTheme === UiTheme.LEGACY ? 1 : 0), 0x212121).setOrigin(0.5, 0)); + new Phaser.GameObjects.Rectangle(globalScene, this.flyoutWidth / 2, 0, 1, this.flyoutHeight + (globalScene.uiTheme === UiTheme.LEGACY ? 1 : 0), 0x212121).setOrigin(0.5, 0)); this.flyoutContainer.add( - new Phaser.GameObjects.Rectangle(this.scene, 0, this.flyoutHeight / 2, this.flyoutWidth + 6, 1, 0x212121).setOrigin(0, 0.5)); + new Phaser.GameObjects.Rectangle(globalScene, 0, this.flyoutHeight / 2, this.flyoutWidth + 6, 1, 0x212121).setOrigin(0, 0.5)); } /** @@ -117,8 +113,8 @@ export default class BattleFlyout extends Phaser.GameObjects.Container { this.name = `Flyout ${getPokemonNameWithAffix(this.pokemon)}`; this.flyoutParent.name = `Flyout Parent ${getPokemonNameWithAffix(this.pokemon)}`; - this.battleScene.eventTarget.addEventListener(BattleSceneEventType.MOVE_USED, this.onMoveUsedEvent); - this.battleScene.eventTarget.addEventListener(BattleSceneEventType.BERRY_USED, this.onBerryUsedEvent); + globalScene.eventTarget.addEventListener(BattleSceneEventType.MOVE_USED, this.onMoveUsedEvent); + globalScene.eventTarget.addEventListener(BattleSceneEventType.BERRY_USED, this.onBerryUsedEvent); } /** Sets and formats the text property for all {@linkcode Phaser.GameObjects.Text} in the flyoutText array */ @@ -176,7 +172,7 @@ export default class BattleFlyout extends Phaser.GameObjects.Container { toggleFlyout(visible: boolean): void { this.flyoutVisible = visible; - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.flyoutParent, x: visible ? this.anchorX : this.anchorX - this.translationX, duration: Utils.fixedInt(125), @@ -186,8 +182,8 @@ export default class BattleFlyout extends Phaser.GameObjects.Container { } destroy(fromScene?: boolean): void { - this.battleScene.eventTarget.removeEventListener(BattleSceneEventType.MOVE_USED, this.onMoveUsedEvent); - this.battleScene.eventTarget.removeEventListener(BattleSceneEventType.BERRY_USED, this.onBerryUsedEvent); + globalScene.eventTarget.removeEventListener(BattleSceneEventType.MOVE_USED, this.onMoveUsedEvent); + globalScene.eventTarget.removeEventListener(BattleSceneEventType.BERRY_USED, this.onBerryUsedEvent); super.destroy(fromScene); } diff --git a/src/ui/battle-info.ts b/src/ui/battle-info.ts index 72447988bdd..ab7f76daf0b 100644 --- a/src/ui/battle-info.ts +++ b/src/ui/battle-info.ts @@ -1,10 +1,10 @@ -import { EnemyPokemon, default as Pokemon } from "../field/pokemon"; +import type { EnemyPokemon, default as Pokemon } from "../field/pokemon"; import { getLevelTotalExp, getLevelRelExp } from "../data/exp"; import * as Utils from "../utils"; import { addTextObject, TextStyle } from "./text"; import { getGenderSymbol, getGenderColor, Gender } from "../data/gender"; import { StatusEffect } from "#enums/status-effect"; -import BattleScene from "../battle-scene"; +import { globalScene } from "#app/global-scene"; import { getTypeRgb } from "#app/data/type"; import { Type } from "#enums/type"; import { getVariantTint } from "#app/data/variant"; @@ -22,17 +22,17 @@ export default class BattleInfo extends Phaser.GameObjects.Container { private player: boolean; private mini: boolean; private boss: boolean; - private bossSegments: integer; + private bossSegments: number; private offset: boolean; private lastName: string | null; private lastTeraType: Type; private lastStatus: StatusEffect; - private lastHp: integer; - private lastMaxHp: integer; + private lastHp: number; + private lastMaxHp: number; private lastHpFrame: string | null; - private lastExp: integer; - private lastLevelExp: integer; - private lastLevel: integer; + private lastExp: number; + private lastLevelExp: number; + private lastLevel: number; private lastLevelCapped: boolean; private lastStats: string; @@ -76,8 +76,8 @@ export default class BattleInfo extends Phaser.GameObjects.Container { private readonly statOrderPlayer = [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.ACC, Stat.EVA, Stat.SPD ]; private readonly statOrderEnemy = [ Stat.HP, Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.ACC, Stat.EVA, Stat.SPD ]; - constructor(scene: Phaser.Scene, x: number, y: number, player: boolean) { - super(scene, x, y); + constructor(x: number, y: number, player: boolean) { + super(globalScene, x, y); this.baseY = y; this.player = player; this.mini = !player; @@ -96,31 +96,31 @@ export default class BattleInfo extends Phaser.GameObjects.Container { // Initially invisible and shown via Pokemon.showInfo this.setVisible(false); - this.box = this.scene.add.sprite(0, 0, this.getTextureName()); + this.box = globalScene.add.sprite(0, 0, this.getTextureName()); this.box.setName("box"); this.box.setOrigin(1, 0.5); this.add(this.box); - this.nameText = addTextObject(this.scene, player ? -115 : -124, player ? -15.2 : -11.2, "", TextStyle.BATTLE_INFO); + this.nameText = addTextObject(player ? -115 : -124, player ? -15.2 : -11.2, "", TextStyle.BATTLE_INFO); this.nameText.setName("text_name"); this.nameText.setOrigin(0, 0); this.add(this.nameText); - this.genderText = addTextObject(this.scene, 0, 0, "", TextStyle.BATTLE_INFO); + this.genderText = addTextObject(0, 0, "", TextStyle.BATTLE_INFO); this.genderText.setName("text_gender"); this.genderText.setOrigin(0, 0); this.genderText.setPositionRelative(this.nameText, 0, 2); this.add(this.genderText); if (!this.player) { - this.ownedIcon = this.scene.add.sprite(0, 0, "icon_owned"); + this.ownedIcon = globalScene.add.sprite(0, 0, "icon_owned"); this.ownedIcon.setName("icon_owned"); this.ownedIcon.setVisible(false); this.ownedIcon.setOrigin(0, 0); this.ownedIcon.setPositionRelative(this.nameText, 0, 11.75); this.add(this.ownedIcon); - this.championRibbon = this.scene.add.sprite(0, 0, "champion_ribbon"); + this.championRibbon = globalScene.add.sprite(0, 0, "champion_ribbon"); this.championRibbon.setName("icon_champion_ribbon"); this.championRibbon.setVisible(false); this.championRibbon.setOrigin(0, 0); @@ -128,7 +128,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.add(this.championRibbon); } - this.teraIcon = this.scene.add.sprite(0, 0, "icon_tera"); + this.teraIcon = globalScene.add.sprite(0, 0, "icon_tera"); this.teraIcon.setName("icon_tera"); this.teraIcon.setVisible(false); this.teraIcon.setOrigin(0, 0); @@ -137,7 +137,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.teraIcon.setInteractive(new Phaser.Geom.Rectangle(0, 0, 12, 15), Phaser.Geom.Rectangle.Contains); this.add(this.teraIcon); - this.shinyIcon = this.scene.add.sprite(0, 0, "shiny_star"); + this.shinyIcon = globalScene.add.sprite(0, 0, "shiny_star"); this.shinyIcon.setName("icon_shiny"); this.shinyIcon.setVisible(false); this.shinyIcon.setOrigin(0, 0); @@ -146,7 +146,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.shinyIcon.setInteractive(new Phaser.Geom.Rectangle(0, 0, 12, 15), Phaser.Geom.Rectangle.Contains); this.add(this.shinyIcon); - this.fusionShinyIcon = this.scene.add.sprite(0, 0, "shiny_star_2"); + this.fusionShinyIcon = globalScene.add.sprite(0, 0, "shiny_star_2"); this.fusionShinyIcon.setName("icon_fusion_shiny"); this.fusionShinyIcon.setVisible(false); this.fusionShinyIcon.setOrigin(0, 0); @@ -154,7 +154,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.fusionShinyIcon.setPosition(this.shinyIcon.x, this.shinyIcon.y); this.add(this.fusionShinyIcon); - this.splicedIcon = this.scene.add.sprite(0, 0, "icon_spliced"); + this.splicedIcon = globalScene.add.sprite(0, 0, "icon_spliced"); this.splicedIcon.setName("icon_spliced"); this.splicedIcon.setVisible(false); this.splicedIcon.setOrigin(0, 0); @@ -163,42 +163,42 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.splicedIcon.setInteractive(new Phaser.Geom.Rectangle(0, 0, 12, 15), Phaser.Geom.Rectangle.Contains); this.add(this.splicedIcon); - this.statusIndicator = this.scene.add.sprite(0, 0, Utils.getLocalizedSpriteKey("statuses")); + this.statusIndicator = globalScene.add.sprite(0, 0, Utils.getLocalizedSpriteKey("statuses")); this.statusIndicator.setName("icon_status"); this.statusIndicator.setVisible(false); this.statusIndicator.setOrigin(0, 0); this.statusIndicator.setPositionRelative(this.nameText, 0, 11.5); this.add(this.statusIndicator); - this.levelContainer = this.scene.add.container(player ? -41 : -50, player ? -10 : -5); + this.levelContainer = globalScene.add.container(player ? -41 : -50, player ? -10 : -5); this.levelContainer.setName("container_level"); this.add(this.levelContainer); - const levelOverlay = this.scene.add.image(0, 0, "overlay_lv"); + const levelOverlay = globalScene.add.image(0, 0, "overlay_lv"); this.levelContainer.add(levelOverlay); - this.hpBar = this.scene.add.image(player ? -61 : -71, player ? -1 : 4.5, "overlay_hp"); + this.hpBar = globalScene.add.image(player ? -61 : -71, player ? -1 : 4.5, "overlay_hp"); this.hpBar.setName("hp_bar"); this.hpBar.setOrigin(0); this.add(this.hpBar); this.hpBarSegmentDividers = []; - this.levelNumbersContainer = this.scene.add.container(9.5, (this.scene as BattleScene).uiTheme ? 0 : -0.5); + this.levelNumbersContainer = globalScene.add.container(9.5, globalScene.uiTheme ? 0 : -0.5); this.levelNumbersContainer.setName("container_level"); this.levelContainer.add(this.levelNumbersContainer); if (this.player) { - this.hpNumbersContainer = this.scene.add.container(-15, 10); + this.hpNumbersContainer = globalScene.add.container(-15, 10); this.hpNumbersContainer.setName("container_hp"); this.add(this.hpNumbersContainer); - const expBar = this.scene.add.image(-98, 18, "overlay_exp"); + const expBar = globalScene.add.image(-98, 18, "overlay_exp"); expBar.setName("overlay_exp"); expBar.setOrigin(0); this.add(expBar); - const expMaskRect = this.scene.make.graphics({}); + const expMaskRect = globalScene.make.graphics({}); expMaskRect.setScale(6); expMaskRect.fillStyle(0xFFFFFF); expMaskRect.beginPath(); @@ -212,12 +212,12 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.expMaskRect = expMaskRect; } - this.statsContainer = this.scene.add.container(0, 0); + this.statsContainer = globalScene.add.container(0, 0); this.statsContainer.setName("container_stats"); this.statsContainer.setAlpha(0); this.add(this.statsContainer); - this.statsBox = this.scene.add.sprite(0, 0, `${this.getTextureName()}_stats`); + this.statsBox = globalScene.add.sprite(0, 0, `${this.getTextureName()}_stats`); this.statsBox.setName("box_stats"); this.statsBox.setOrigin(1, 0.5); this.statsContainer.add(this.statsBox); @@ -225,7 +225,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { const statLabels: Phaser.GameObjects.Sprite[] = []; this.statNumbers = []; - this.statValuesContainer = this.scene.add.container(0, 0); + this.statValuesContainer = globalScene.add.container(0, 0); this.statsContainer.add(this.statValuesContainer); // this gives us a different starting location from the left of the label and padding between stats for a player vs enemy @@ -249,13 +249,13 @@ export default class BattleInfo extends Phaser.GameObjects.Container { statY = baseY + (!!(i % 2) === this.player ? 10 : 0); // we compare i % 2 against this.player to tell us where to place the label; because this.battleStatOrder for enemies has HP, this.battleStatOrder[1]=ATK, but for players this.battleStatOrder[0]=ATK, so this comparing i % 2 to this.player fixes this issue for us } - const statLabel = this.scene.add.sprite(statX, statY, "pbinfo_stat", Stat[s]); + const statLabel = globalScene.add.sprite(statX, statY, "pbinfo_stat", Stat[s]); statLabel.setName("icon_stat_label_" + i.toString()); statLabel.setOrigin(0, 0); statLabels.push(statLabel); this.statValuesContainer.add(statLabel); - const statNumber = this.scene.add.sprite(statX + statLabel.width, statY, "pbinfo_stat_numbers", this.statOrder[i] !== Stat.HP ? "3" : "empty"); + const statNumber = globalScene.add.sprite(statX + statLabel.width, statY, "pbinfo_stat_numbers", this.statOrder[i] !== Stat.HP ? "3" : "empty"); statNumber.setName("icon_stat_number_" + i.toString()); statNumber.setOrigin(0, 0); this.statNumbers.push(statNumber); @@ -269,35 +269,35 @@ export default class BattleInfo extends Phaser.GameObjects.Container { }); if (!this.player) { - this.flyoutMenu = new BattleFlyout(this.scene, this.player); + this.flyoutMenu = new BattleFlyout(this.player); this.add(this.flyoutMenu); this.moveBelow(this.flyoutMenu, this.box); } - this.type1Icon = this.scene.add.sprite(player ? -139 : -15, player ? -17 : -15.5, `pbinfo_${player ? "player" : "enemy"}_type1`); + this.type1Icon = globalScene.add.sprite(player ? -139 : -15, player ? -17 : -15.5, `pbinfo_${player ? "player" : "enemy"}_type1`); this.type1Icon.setName("icon_type_1"); this.type1Icon.setOrigin(0, 0); this.add(this.type1Icon); - this.type2Icon = this.scene.add.sprite(player ? -139 : -15, player ? -1 : -2.5, `pbinfo_${player ? "player" : "enemy"}_type2`); + this.type2Icon = globalScene.add.sprite(player ? -139 : -15, player ? -1 : -2.5, `pbinfo_${player ? "player" : "enemy"}_type2`); this.type2Icon.setName("icon_type_2"); this.type2Icon.setOrigin(0, 0); this.add(this.type2Icon); - this.type3Icon = this.scene.add.sprite(player ? -154 : 0, player ? -17 : -15.5, `pbinfo_${player ? "player" : "enemy"}_type`); + this.type3Icon = globalScene.add.sprite(player ? -154 : 0, player ? -17 : -15.5, `pbinfo_${player ? "player" : "enemy"}_type`); this.type3Icon.setName("icon_type_3"); this.type3Icon.setOrigin(0, 0); this.add(this.type3Icon); if (!this.player) { - this.effectivenessContainer = this.scene.add.container(0, 0); + this.effectivenessContainer = globalScene.add.container(0, 0); this.effectivenessContainer.setPositionRelative(this.type1Icon, 22, 4); this.effectivenessContainer.setVisible(false); this.add(this.effectivenessContainer); - this.effectivenessText = addTextObject(this.scene, 5, 4.5, "", TextStyle.BATTLE_INFO); - this.effectivenessWindow = addWindow((this.scene as BattleScene), 0, 0, 0, 20, undefined, false, undefined, undefined, WindowVariant.XTHIN); + this.effectivenessText = addTextObject(5, 4.5, "", TextStyle.BATTLE_INFO); + this.effectivenessWindow = addWindow(0, 0, 0, 20, undefined, false, undefined, undefined, WindowVariant.XTHIN); this.effectivenessContainer.add(this.effectivenessWindow); this.effectivenessContainer.add(this.effectivenessText); @@ -324,21 +324,21 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.lastTeraType = pokemon.getTeraType(); this.teraIcon.setPositionRelative(this.nameText, nameTextWidth + this.genderText.displayWidth + 1, 2); - this.teraIcon.setVisible(this.lastTeraType !== Type.UNKNOWN); + this.teraIcon.setVisible(pokemon.isTerastallized); this.teraIcon.on("pointerover", () => { - if (this.lastTeraType !== Type.UNKNOWN) { - (this.scene as BattleScene).ui.showTooltip("", i18next.t("fightUiHandler:teraHover", { type: i18next.t(`pokemonInfo:Type.${Type[this.lastTeraType]}`) })); + if (pokemon.isTerastallized) { + globalScene.ui.showTooltip("", i18next.t("fightUiHandler:teraHover", { type: i18next.t(`pokemonInfo:Type.${Type[this.lastTeraType]}`) })); } }); - this.teraIcon.on("pointerout", () => (this.scene as BattleScene).ui.hideTooltip()); + this.teraIcon.on("pointerout", () => globalScene.ui.hideTooltip()); const isFusion = pokemon.isFusion(); this.splicedIcon.setPositionRelative(this.nameText, nameTextWidth + this.genderText.displayWidth + 1 + (this.teraIcon.visible ? this.teraIcon.displayWidth + 1 : 0), 2.5); this.splicedIcon.setVisible(isFusion); if (this.splicedIcon.visible) { - this.splicedIcon.on("pointerover", () => (this.scene as BattleScene).ui.showTooltip("", `${pokemon.species.getName(pokemon.formIndex)}/${pokemon.fusionSpecies?.getName(pokemon.fusionFormIndex)}`)); - this.splicedIcon.on("pointerout", () => (this.scene as BattleScene).ui.hideTooltip()); + this.splicedIcon.on("pointerover", () => globalScene.ui.showTooltip("", `${pokemon.species.getName(pokemon.formIndex)}/${pokemon.fusionSpecies?.getName(pokemon.fusionFormIndex)}`)); + this.splicedIcon.on("pointerout", () => globalScene.ui.hideTooltip()); } const doubleShiny = isFusion && pokemon.shiny && pokemon.fusionShiny; @@ -352,8 +352,8 @@ export default class BattleInfo extends Phaser.GameObjects.Container { const shinyDescriptor = doubleShiny || baseVariant ? `${baseVariant === 2 ? i18next.t("common:epicShiny") : baseVariant === 1 ? i18next.t("common:rareShiny") : i18next.t("common:commonShiny")}${doubleShiny ? `/${pokemon.fusionVariant === 2 ? i18next.t("common:epicShiny") : pokemon.fusionVariant === 1 ? i18next.t("common:rareShiny") : i18next.t("common:commonShiny")}` : ""}` : ""; - this.shinyIcon.on("pointerover", () => (this.scene as BattleScene).ui.showTooltip("", `${i18next.t("common:shinyOnHover")}${shinyDescriptor ? ` (${shinyDescriptor})` : ""}`)); - this.shinyIcon.on("pointerout", () => (this.scene as BattleScene).ui.hideTooltip()); + this.shinyIcon.on("pointerover", () => globalScene.ui.showTooltip("", `${i18next.t("common:shinyOnHover")}${shinyDescriptor ? ` (${shinyDescriptor})` : ""}`)); + this.shinyIcon.on("pointerout", () => globalScene.ui.hideTooltip()); } this.fusionShinyIcon.setPosition(this.shinyIcon.x, this.shinyIcon.y); @@ -364,15 +364,15 @@ export default class BattleInfo extends Phaser.GameObjects.Container { if (!this.player) { if (this.nameText.visible) { - this.nameText.on("pointerover", () => (this.scene as BattleScene).ui.showTooltip("", i18next.t("battleInfo:generation", { generation: i18next.t(`starterSelectUiHandler:gen${pokemon.species.generation}`) }))); - this.nameText.on("pointerout", () => (this.scene as BattleScene).ui.hideTooltip()); + this.nameText.on("pointerover", () => globalScene.ui.showTooltip("", i18next.t("battleInfo:generation", { generation: i18next.t(`starterSelectUiHandler:gen${pokemon.species.generation}`) }))); + this.nameText.on("pointerout", () => globalScene.ui.hideTooltip()); } - const dexEntry = pokemon.scene.gameData.dexData[pokemon.species.speciesId]; + const dexEntry = globalScene.gameData.dexData[pokemon.species.speciesId]; this.ownedIcon.setVisible(!!dexEntry.caughtAttr); const opponentPokemonDexAttr = pokemon.getDexAttr(); - if (pokemon.scene.gameMode.isClassic) { - if (pokemon.scene.gameData.starterData[pokemon.species.getRootSpeciesId()].classicWinCount > 0 && pokemon.scene.gameData.starterData[pokemon.species.getRootSpeciesId(true)].classicWinCount > 0) { + if (globalScene.gameMode.isClassic) { + if (globalScene.gameData.starterData[pokemon.species.getRootSpeciesId()].classicWinCount > 0 && globalScene.gameData.starterData[pokemon.species.getRootSpeciesId(true)].classicWinCount > 0) { this.championRibbon.setVisible(true); } } @@ -380,7 +380,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { // Check if Player owns all genders and forms of the Pokemon const missingDexAttrs = ((dexEntry.caughtAttr & opponentPokemonDexAttr) < opponentPokemonDexAttr); - const ownedAbilityAttrs = pokemon.scene.gameData.starterData[pokemon.species.getRootSpeciesId()].abilityAttr; + const ownedAbilityAttrs = globalScene.gameData.starterData[pokemon.species.getRootSpeciesId()].abilityAttr; // Check if the player owns ability for the root form const playerOwnsThisAbility = pokemon.checkIfPlayerHasAbilityOfStarter(ownedAbilityAttrs); @@ -469,7 +469,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { } toggleStats(visible: boolean): void { - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.statsContainer, duration: Utils.fixedInt(125), ease: "Sine.easeInOut", @@ -501,11 +501,11 @@ export default class BattleInfo extends Phaser.GameObjects.Container { } if (this.boss && this.bossSegments > 1) { - const uiTheme = (this.scene as BattleScene).uiTheme; + const uiTheme = globalScene.uiTheme; const maxHp = pokemon.getMaxHp(); for (let s = 1; s < this.bossSegments; s++) { const dividerX = (Math.round((maxHp / this.bossSegments) * s) / maxHp) * this.hpBar.width; - const divider = this.scene.add.rectangle(0, 0, 1, this.hpBar.height - (uiTheme ? 0 : 1), pokemon.bossSegmentIndex >= s ? 0xFFFFFF : 0x404040); + const divider = globalScene.add.rectangle(0, 0, 1, this.hpBar.height - (uiTheme ? 0 : 1), pokemon.bossSegmentIndex >= s ? 0xFFFFFF : 0x404040); divider.setOrigin(0.5, 0); divider.setName("hpBar_divider_" + s.toString()); this.add(divider); @@ -531,7 +531,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { updateInfo(pokemon: Pokemon, instant?: boolean): Promise { return new Promise(resolve => { - if (!this.scene) { + if (!globalScene) { return resolve(); } @@ -542,7 +542,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.genderText.setPositionRelative(this.nameText, this.nameText.displayWidth, 0); } - const teraType = pokemon.getTeraType(); + const teraType = pokemon.isTerastallized ? pokemon.getTeraType() : Type.UNKNOWN; const teraTypeUpdated = this.lastTeraType !== teraType; if (teraTypeUpdated) { @@ -595,11 +595,11 @@ export default class BattleInfo extends Phaser.GameObjects.Container { const updatePokemonHp = () => { let duration = !instant ? Phaser.Math.Clamp(Math.abs((this.lastHp) - pokemon.hp) * 5, 250, 5000) : 0; - const speed = (this.scene as BattleScene).hpBarSpeed; + const speed = globalScene.hpBarSpeed; if (speed) { duration = speed >= 3 ? 0 : duration / Math.pow(2, speed); } - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.hpBar, ease: "Sine.easeOut", scaleX: pokemon.getHpRatio(true), @@ -625,7 +625,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { }; if (this.player) { - const isLevelCapped = pokemon.level >= (this.scene as BattleScene).getMaxExpLevel(); + const isLevelCapped = pokemon.level >= globalScene.getMaxExpLevel(); if ((this.lastExp !== pokemon.exp || this.lastLevel !== pokemon.level)) { const originalResolve = resolve; @@ -663,7 +663,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { let displayName = pokemon.getNameToRender().replace(/[♂♀]/g, ""); let nameTextWidth: number; - const nameSizeTest = addTextObject(this.scene, 0, 0, displayName, TextStyle.BATTLE_INFO); + const nameSizeTest = addTextObject(0, 0, displayName, TextStyle.BATTLE_INFO); nameTextWidth = nameSizeTest.displayWidth; while (nameTextWidth > (this.player || !this.boss ? 60 : 98) - ((pokemon.gender !== Gender.GENDERLESS ? 6 : 0) + (pokemon.fusionSpecies ? 8 : 0) + (pokemon.isShiny() ? 8 : 0) + (Math.min(pokemon.level.toString().length, 3) - 3) * 8)) { @@ -688,7 +688,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { const relLevelExp = getLevelRelExp(this.lastLevel + 1, pokemon.species.growthRate); const levelExp = levelUp ? relLevelExp : pokemon.levelExp; let ratio = relLevelExp ? levelExp / relLevelExp : 0; - if (this.lastLevel >= (this.scene as BattleScene).getMaxExpLevel(true)) { + if (this.lastLevel >= globalScene.getMaxExpLevel(true)) { if (levelUp) { ratio = 1; } else { @@ -698,7 +698,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { } const durationMultiplier = Phaser.Tweens.Builders.GetEaseFunction("Sine.easeIn")(1 - (Math.max(this.lastLevel - 100, 0) / 150)); let duration = this.visible && !instant ? (((levelExp - this.lastLevelExp) / relLevelExp) * BattleInfo.EXP_GAINS_DURATION_BASE) * durationMultiplier * levelDurationMultiplier : 0; - const speed = (this.scene as BattleScene).expGainsSpeed; + const speed = globalScene.expGainsSpeed; if (speed && speed >= ExpGainsSpeed.DEFAULT) { duration = speed >= ExpGainsSpeed.SKIP ? ExpGainsSpeed.DEFAULT : duration / Math.pow(2, speed); } @@ -710,24 +710,24 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.lastLevelExp = pokemon.levelExp; } if (duration) { - (this.scene as BattleScene).playSound("se/exp"); + globalScene.playSound("se/exp"); } - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.expMaskRect, ease: "Sine.easeIn", x: ratio * 510, duration: duration, onComplete: () => { - if (!this.scene) { + if (!globalScene) { return resolve(); } if (duration) { - this.scene.sound.stopByKey("se/exp"); + globalScene.sound.stopByKey("se/exp"); } if (ratio === 1) { - (this.scene as BattleScene).playSound("se/level_up"); + globalScene.playSound("se/level_up"); this.setLevel(this.lastLevel); - this.scene.time.delayedCall(500 * levelDurationMultiplier, () => { + globalScene.time.delayedCall(500 * levelDurationMultiplier, () => { this.expMaskRect.x = 0; this.updateInfo(pokemon, instant).then(() => resolve()); }); @@ -739,18 +739,18 @@ export default class BattleInfo extends Phaser.GameObjects.Container { }); } - setLevel(level: integer): void { - const isCapped = level >= (this.scene as BattleScene).getMaxExpLevel(); + setLevel(level: number): void { + const isCapped = level >= globalScene.getMaxExpLevel(); this.levelNumbersContainer.removeAll(true); const levelStr = level.toString(); for (let i = 0; i < levelStr.length; i++) { - this.levelNumbersContainer.add(this.scene.add.image(i * 8, 0, `numbers${isCapped && this.player ? "_red" : ""}`, levelStr[i])); + this.levelNumbersContainer.add(globalScene.add.image(i * 8, 0, `numbers${isCapped && this.player ? "_red" : ""}`, levelStr[i])); } this.levelContainer.setX((this.player ? -41 : -50) - 8 * Math.max(levelStr.length - 3, 0)); } - setHpNumbers(hp: integer, maxHp: integer): void { - if (!this.player || !this.scene) { + setHpNumbers(hp: number, maxHp: number): void { + if (!this.player || !globalScene) { return; } this.hpNumbersContainer.removeAll(true); @@ -758,15 +758,15 @@ export default class BattleInfo extends Phaser.GameObjects.Container { const maxHpStr = maxHp.toString(); let offset = 0; for (let i = maxHpStr.length - 1; i >= 0; i--) { - this.hpNumbersContainer.add(this.scene.add.image(offset++ * -8, 0, "numbers", maxHpStr[i])); + this.hpNumbersContainer.add(globalScene.add.image(offset++ * -8, 0, "numbers", maxHpStr[i])); } - this.hpNumbersContainer.add(this.scene.add.image(offset++ * -8, 0, "numbers", "/")); + this.hpNumbersContainer.add(globalScene.add.image(offset++ * -8, 0, "numbers", "/")); for (let i = hpStr.length - 1; i >= 0; i--) { - this.hpNumbersContainer.add(this.scene.add.image(offset++ * -8, 0, "numbers", hpStr[i])); + this.hpNumbersContainer.add(globalScene.add.image(offset++ * -8, 0, "numbers", hpStr[i])); } } - updateStats(stats: integer[]): void { + updateStats(stats: number[]): void { this.statOrder.map((s, i) => { if (s !== Stat.HP) { this.statNumbers[i].setFrame(stats[s - 1].toString()); @@ -797,7 +797,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { } this.currentEffectiveness = effectiveness; - if (!(this.scene as BattleScene).typeHints || effectiveness === undefined || this.flyoutMenu?.flyoutVisible) { + if (!globalScene.typeHints || effectiveness === undefined || this.flyoutMenu?.flyoutVisible) { this.effectivenessContainer.setVisible(false); return; } @@ -817,14 +817,14 @@ export default class BattleInfo extends Phaser.GameObjects.Container { } export class PlayerBattleInfo extends BattleInfo { - constructor(scene: Phaser.Scene) { - super(scene, Math.floor(scene.game.canvas.width / 6) - 10, -72, true); + constructor() { + super(Math.floor(globalScene.game.canvas.width / 6) - 10, -72, true); } } export class EnemyBattleInfo extends BattleInfo { - constructor(scene: Phaser.Scene) { - super(scene, 140, -141, false); + constructor() { + super(140, -141, false); } setMini(mini: boolean): void { } // Always mini diff --git a/src/ui/battle-message-ui-handler.ts b/src/ui/battle-message-ui-handler.ts index 180fc66ed9b..c87ac18c65d 100644 --- a/src/ui/battle-message-ui-handler.ts +++ b/src/ui/battle-message-ui-handler.ts @@ -1,12 +1,12 @@ -import BattleScene from "../battle-scene"; +import { globalScene } from "#app/global-scene"; import { addBBCodeTextObject, addTextObject, getTextColor, TextStyle } from "./text"; import { Mode } from "./ui"; import MessageUiHandler from "./message-ui-handler"; import { addWindow } from "./ui-theme"; -import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; +import type BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; import { Button } from "#enums/buttons"; import i18next from "i18next"; -import { Stat, PERMANENT_STATS, getStatKey } from "#app/enums/stat"; +import { PERMANENT_STATS, getStatKey } from "#app/enums/stat"; export default class BattleMessageUiHandler extends MessageUiHandler { private levelUpStatsContainer: Phaser.GameObjects.Container; @@ -22,8 +22,8 @@ export default class BattleMessageUiHandler extends MessageUiHandler { public readonly wordWrapWidth: number = 1780; - constructor(scene: BattleScene) { - super(scene, Mode.MESSAGE); + constructor() { + super(Mode.MESSAGE); } setup(): void { @@ -32,36 +32,36 @@ export default class BattleMessageUiHandler extends MessageUiHandler { this.textTimer = null; this.textCallbackTimer = null; - this.bg = this.scene.add.sprite(0, 0, "bg", this.scene.windowType); + this.bg = globalScene.add.sprite(0, 0, "bg", globalScene.windowType); this.bg.setName("sprite-battle-msg-bg"); this.bg.setOrigin(0, 1); ui.add(this.bg); - this.commandWindow = addWindow(this.scene, 202, 0, 118, 48); + this.commandWindow = addWindow(202, 0, 118, 48); this.commandWindow.setName("window-command"); this.commandWindow.setOrigin(0, 1); this.commandWindow.setVisible(false); ui.add(this.commandWindow); - this.movesWindowContainer = this.scene.add.container(0, 0); + this.movesWindowContainer = globalScene.add.container(0, 0); this.movesWindowContainer.setName("moves-bg"); this.movesWindowContainer.setVisible(false); - const movesWindow = addWindow(this.scene, 0, 0, 243, 48); + const movesWindow = addWindow(0, 0, 243, 48); movesWindow.setName("moves-window"); movesWindow.setOrigin(0, 1); - const moveDetailsWindow = addWindow(this.scene, 240, 0, 80, 48, false, false, -1, 132); + const moveDetailsWindow = addWindow(240, 0, 80, 48, false, false, -1, 132); moveDetailsWindow.setName("move-details-window"); moveDetailsWindow.setOrigin(0, 1); this.movesWindowContainer.add([ movesWindow, moveDetailsWindow ]); ui.add(this.movesWindowContainer); - const messageContainer = this.scene.add.container(12, -39); + const messageContainer = globalScene.add.container(12, -39); ui.add(messageContainer); - const message = addTextObject(this.scene, 0, 0, "", TextStyle.MESSAGE, { + const message = addTextObject(0, 0, "", TextStyle.MESSAGE, { maxLines: 2, wordWrap: { width: this.wordWrapWidth @@ -71,13 +71,13 @@ export default class BattleMessageUiHandler extends MessageUiHandler { this.message = message; - this.nameBoxContainer = this.scene.add.container(0, -16); + this.nameBoxContainer = globalScene.add.container(0, -16); this.nameBoxContainer.setVisible(false); - this.nameBox = this.scene.add.nineslice(0, 0, "namebox", this.scene.windowType, 72, 16, 8, 8, 5, 5); + this.nameBox = globalScene.add.nineslice(0, 0, "namebox", globalScene.windowType, 72, 16, 8, 8, 5, 5); this.nameBox.setOrigin(0, 0); - this.nameText = addTextObject(this.scene, 8, 0, "Rival", TextStyle.MESSAGE, { maxLines: 1 }); + this.nameText = addTextObject(8, 0, "Rival", TextStyle.MESSAGE, { maxLines: 1 }); this.nameBoxContainer.add(this.nameBox); this.nameBoxContainer.add(this.nameText); @@ -85,13 +85,13 @@ export default class BattleMessageUiHandler extends MessageUiHandler { this.initPromptSprite(messageContainer); - const levelUpStatsContainer = this.scene.add.container(0, 0); + const levelUpStatsContainer = globalScene.add.container(0, 0); levelUpStatsContainer.setVisible(false); ui.add(levelUpStatsContainer); this.levelUpStatsContainer = levelUpStatsContainer; - const levelUpStatsLabelsContent = addTextObject(this.scene, (this.scene.game.canvas.width / 6) - 73, -94, "", TextStyle.WINDOW, { maxLines: 6 }); + const levelUpStatsLabelsContent = addTextObject((globalScene.game.canvas.width / 6) - 73, -94, "", TextStyle.WINDOW, { maxLines: 6 }); levelUpStatsLabelsContent.setLineSpacing(i18next.resolvedLanguage === "ja" ? 25 : 5); let levelUpStatsLabelText = ""; @@ -101,19 +101,19 @@ export default class BattleMessageUiHandler extends MessageUiHandler { levelUpStatsLabelsContent.text = levelUpStatsLabelText; levelUpStatsLabelsContent.x -= levelUpStatsLabelsContent.displayWidth; - const levelUpStatsBg = addWindow(this.scene, (this.scene.game.canvas.width / 6), -100, 80 + levelUpStatsLabelsContent.displayWidth, 100); + const levelUpStatsBg = addWindow((globalScene.game.canvas.width / 6), -100, 80 + levelUpStatsLabelsContent.displayWidth, 100); levelUpStatsBg.setOrigin(1, 0); levelUpStatsContainer.add(levelUpStatsBg); levelUpStatsContainer.add(levelUpStatsLabelsContent); - const levelUpStatsIncrContent = addTextObject(this.scene, (this.scene.game.canvas.width / 6) - 50, -94, "+\n+\n+\n+\n+\n+", TextStyle.WINDOW, { maxLines: 6 }); + const levelUpStatsIncrContent = addTextObject((globalScene.game.canvas.width / 6) - 50, -94, "+\n+\n+\n+\n+\n+", TextStyle.WINDOW, { maxLines: 6 }); levelUpStatsIncrContent.setLineSpacing(i18next.resolvedLanguage === "ja" ? 25 : 5); levelUpStatsContainer.add(levelUpStatsIncrContent); this.levelUpStatsIncrContent = levelUpStatsIncrContent; - const levelUpStatsValuesContent = addBBCodeTextObject(this.scene, (this.scene.game.canvas.width / 6) - 7, -94, "", TextStyle.WINDOW, { maxLines: 6, lineSpacing: 5 }); + const levelUpStatsValuesContent = addBBCodeTextObject((globalScene.game.canvas.width / 6) - 7, -94, "", TextStyle.WINDOW, { maxLines: 6, lineSpacing: 5 }); levelUpStatsValuesContent.setLineSpacing(i18next.resolvedLanguage === "ja" ? 25 : 5); levelUpStatsValuesContent.setOrigin(1, 0); levelUpStatsValuesContent.setAlign("right"); @@ -153,24 +153,24 @@ export default class BattleMessageUiHandler extends MessageUiHandler { super.clear(); } - showText(text: string, delay?: integer | null, callback?: Function | null, callbackDelay?: integer | null, prompt?: boolean | null, promptDelay?: integer | null) { + showText(text: string, delay?: number | null, callback?: Function | null, callbackDelay?: number | null, prompt?: boolean | null, promptDelay?: number | null) { this.hideNameText(); super.showText(text, delay, callback, callbackDelay, prompt, promptDelay); } - showDialogue(text: string, name?: string, delay?: integer | null, callback?: Function, callbackDelay?: integer, prompt?: boolean, promptDelay?: integer) { + showDialogue(text: string, name?: string, delay?: number | null, callback?: Function, callbackDelay?: number, prompt?: boolean, promptDelay?: number) { if (name) { this.showNameText(name); } super.showDialogue(text, name, delay, callback, callbackDelay, prompt, promptDelay); } - promptLevelUpStats(partyMemberIndex: integer, prevStats: integer[], showTotals: boolean): Promise { + promptLevelUpStats(partyMemberIndex: number, prevStats: number[], showTotals: boolean): Promise { return new Promise(resolve => { - if (!this.scene.showLevelUpStats) { + if (!globalScene.showLevelUpStats) { return resolve(); } - const newStats = (this.scene as BattleScene).getPlayerParty()[partyMemberIndex].stats; + const newStats = globalScene.getPlayerParty()[partyMemberIndex].stats; let levelUpStatsValuesText = ""; for (const s of PERMANENT_STATS) { levelUpStatsValuesText += `${showTotals ? newStats[s] : newStats[s] - prevStats[s]}\n`; @@ -190,13 +190,12 @@ export default class BattleMessageUiHandler extends MessageUiHandler { }); } - promptIvs(pokemonId: integer, ivs: integer[], shownIvsCount: integer): Promise { + promptIvs(pokemonId: number, ivs: number[]): Promise { return new Promise(resolve => { - this.scene.executeWithSeedOffset(() => { + globalScene.executeWithSeedOffset(() => { let levelUpStatsValuesText = ""; - const shownStats = this.getTopIvs(ivs, shownIvsCount); for (const s of PERMANENT_STATS) { - levelUpStatsValuesText += `${shownStats.includes(s) ? this.getIvDescriptor(ivs[s], s, pokemonId) : "???"}\n`; + levelUpStatsValuesText += `${this.getIvDescriptor(ivs[s], s, pokemonId)}\n`; } this.levelUpStatsValuesContent.text = levelUpStatsValuesText; this.levelUpStatsIncrContent.setVisible(false); @@ -210,25 +209,10 @@ export default class BattleMessageUiHandler extends MessageUiHandler { }); } - getTopIvs(ivs: integer[], shownIvsCount: integer): Stat[] { - let shownStats: Stat[] = []; - if (shownIvsCount < 6) { - const statsPool = PERMANENT_STATS.slice(); - // Sort the stats from highest to lowest iv - statsPool.sort((s1, s2) => ivs[s2] - ivs[s1]); - for (let i = 0; i < shownIvsCount; i++) { - shownStats.push(statsPool[i]); - } - } else { - shownStats = PERMANENT_STATS.slice(); - } - return shownStats; - } - - getIvDescriptor(value: integer, typeIv: integer, pokemonId: integer): string { - const starterSpecies = this.scene.getPokemonById(pokemonId)!.species.getRootSpeciesId(); // we are using getRootSpeciesId() here because we want to check against the baby form, not the mid form if it exists - const starterIvs: number[] = this.scene.gameData.dexData[starterSpecies].ivs; - const uiTheme = (this.scene as BattleScene).uiTheme; // Assuming uiTheme is accessible + getIvDescriptor(value: number, typeIv: number, pokemonId: number): string { + const starterSpecies = globalScene.getPokemonById(pokemonId)!.species.getRootSpeciesId(); // we are using getRootSpeciesId() here because we want to check against the baby form, not the mid form if it exists + const starterIvs: number[] = globalScene.gameData.dexData[starterSpecies].ivs; + const uiTheme = globalScene.uiTheme; // Assuming uiTheme is accessible // Function to wrap text in color based on comparison const coloredText = (text: string, isBetter: boolean, ivValue) => { diff --git a/src/ui/bgm-bar.ts b/src/ui/bgm-bar.ts index 616b3ff87cf..0cd3da71248 100644 --- a/src/ui/bgm-bar.ts +++ b/src/ui/bgm-bar.ts @@ -1,7 +1,7 @@ -import BattleScene from "../battle-scene"; import { addTextObject, TextStyle } from "./text"; import i18next from "i18next"; import * as Utils from "#app/utils"; +import { globalScene } from "#app/global-scene"; const hiddenX = -150; const shownX = 0; @@ -16,20 +16,20 @@ export default class BgmBar extends Phaser.GameObjects.Container { public shown: boolean; - constructor(scene: BattleScene) { - super(scene, hiddenX, baseY); + constructor() { + super(globalScene, hiddenX, baseY); } setup(): void { this.defaultWidth = 230; this.defaultHeight = 100; - this.bg = this.scene.add.nineslice(-5, -5, "bgm_bar", undefined, this.defaultWidth, this.defaultHeight, 0, 0, 10, 10); + this.bg = globalScene.add.nineslice(-5, -5, "bgm_bar", undefined, this.defaultWidth, this.defaultHeight, 0, 0, 10, 10); this.bg.setOrigin(0, 0); this.add(this.bg); - this.musicText = addTextObject(this.scene, 5, 5, "", TextStyle.BGM_BAR); + this.musicText = addTextObject(5, 5, "", TextStyle.BGM_BAR); this.musicText.setOrigin(0, 0); this.musicText.setWordWrapWidth(650, true); @@ -52,7 +52,7 @@ export default class BgmBar extends Phaser.GameObjects.Container { this.bg.width = Math.min(this.defaultWidth, this.musicText.displayWidth + 23); this.bg.height = Math.min(this.defaultHeight, this.musicText.displayHeight + 20); - (this.scene as BattleScene).fieldUI.bringToTop(this); + globalScene.fieldUI.bringToTop(this); this.y = baseY; } @@ -72,11 +72,11 @@ export default class BgmBar extends Phaser.GameObjects.Container { return; } - if (!(this.scene as BattleScene).showBgmBar) { + if (!globalScene.showBgmBar) { this.setVisible(false); return; } - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this, x: visible ? shownX : hiddenX, duration: 500, diff --git a/src/ui/candy-bar.ts b/src/ui/candy-bar.ts index 14015f02259..d58fd040a7c 100644 --- a/src/ui/candy-bar.ts +++ b/src/ui/candy-bar.ts @@ -1,8 +1,9 @@ -import BattleScene, { starterColors } from "../battle-scene"; +import { starterColors } from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { TextStyle, addTextObject } from "./text"; import { argbFromRgba } from "@material/material-color-utilities"; import * as Utils from "../utils"; -import { Species } from "#enums/species"; +import type { Species } from "#enums/species"; export default class CandyBar extends Phaser.GameObjects.Container { private bg: Phaser.GameObjects.NineSlice; @@ -16,29 +17,29 @@ export default class CandyBar extends Phaser.GameObjects.Container { public shown: boolean; - constructor(scene: BattleScene) { - super(scene, (scene.game.canvas.width / 6), -((scene.game.canvas.height) / 6) + 15); + constructor() { + super(globalScene, (globalScene.game.canvas.width / 6), -((globalScene.game.canvas.height) / 6) + 15); } setup(): void { - this.bg = this.scene.add.nineslice(0, 0, "party_exp_bar", undefined, 8, 18, 21, 5, 6, 4); + this.bg = globalScene.add.nineslice(0, 0, "party_exp_bar", undefined, 8, 18, 21, 5, 6, 4); this.bg.setOrigin(0, 0); this.add(this.bg); - this.candyIcon = this.scene.add.sprite(14, 0, "items", "candy"); + this.candyIcon = globalScene.add.sprite(14, 0, "items", "candy"); this.candyIcon.setOrigin(0.5, 0); this.candyIcon.setScale(0.5); this.add(this.candyIcon); - this.candyOverlayIcon = this.scene.add.sprite(14, 0, "items", "candy_overlay"); + this.candyOverlayIcon = globalScene.add.sprite(14, 0, "items", "candy_overlay"); this.candyOverlayIcon.setOrigin(0.5, 0); this.candyOverlayIcon.setScale(0.5); this.add(this.candyOverlayIcon); - this.countText = addTextObject(this.scene, 22, 4, "", TextStyle.BATTLE_INFO); + this.countText = addTextObject(22, 4, "", TextStyle.BATTLE_INFO); this.countText.setOrigin(0, 0); this.add(this.countText); @@ -46,7 +47,7 @@ export default class CandyBar extends Phaser.GameObjects.Container { this.shown = false; } - showStarterSpeciesCandy(starterSpeciesId: Species, count: integer): Promise { + showStarterSpeciesCandy(starterSpeciesId: Species, count: number): Promise { return new Promise(resolve => { if (this.shown) { if (this.speciesId === starterSpeciesId) { @@ -61,21 +62,21 @@ export default class CandyBar extends Phaser.GameObjects.Container { this.candyIcon.setTint(argbFromRgba(Utils.rgbHexToRgba(colorScheme[0]))); this.candyOverlayIcon.setTint(argbFromRgba(Utils.rgbHexToRgba(colorScheme[1]))); - this.countText.setText(`${(this.scene as BattleScene).gameData.starterData[starterSpeciesId].candyCount + count} (+${count.toString()})`); + this.countText.setText(`${globalScene.gameData.starterData[starterSpeciesId].candyCount + count} (+${count.toString()})`); this.bg.width = this.countText.displayWidth + 28; - (this.scene as BattleScene).fieldUI.bringToTop(this); + globalScene.fieldUI.bringToTop(this); if (this.tween) { this.tween.stop(); } - (this.scene as BattleScene).playSound("se/shing"); + globalScene.playSound("se/shing"); - this.tween = this.scene.tweens.add({ + this.tween = globalScene.tweens.add({ targets: this, - x: (this.scene.game.canvas.width / 6) - (this.bg.width - 5), + x: (globalScene.game.canvas.width / 6) - (this.bg.width - 5), duration: 500, ease: "Sine.easeOut", onComplete: () => { @@ -104,9 +105,9 @@ export default class CandyBar extends Phaser.GameObjects.Container { this.tween.stop(); } - this.tween = this.scene.tweens.add({ + this.tween = globalScene.tweens.add({ targets: this, - x: (this.scene.game.canvas.width / 6), + x: (globalScene.game.canvas.width / 6), 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 e2547a626de..31ee91388fc 100644 --- a/src/ui/challenges-select-ui-handler.ts +++ b/src/ui/challenges-select-ui-handler.ts @@ -1,17 +1,17 @@ -import BattleScene from "../battle-scene"; import { TextStyle, addTextObject } from "./text"; -import { Mode } from "./ui"; +import type { Mode } from "./ui"; import UiHandler from "./ui-handler"; import { addWindow } from "./ui-theme"; import { Button } from "#enums/buttons"; import i18next from "i18next"; -import { Challenge } from "#app/data/challenge"; +import type { Challenge } from "#app/data/challenge"; import * as Utils from "../utils"; import { Challenges } from "#app/enums/challenges"; import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; import { Color, ShadowColor } from "#app/enums/color"; import { SelectStarterPhase } from "#app/phases/select-starter-phase"; import { TitlePhase } from "#app/phases/title-phase"; +import { globalScene } from "#app/global-scene"; /** * Handles all the UI for choosing optional challenges. @@ -20,7 +20,7 @@ export default class GameChallengesUiHandler extends UiHandler { private challengesContainer: Phaser.GameObjects.Container; private valuesContainer: Phaser.GameObjects.Container; - private scrollCursor: integer; + private scrollCursor: number; private optionsBg: Phaser.GameObjects.NineSlice; @@ -45,8 +45,8 @@ export default class GameChallengesUiHandler extends UiHandler { private readonly leftArrowGap: number = 90; // distance from the label to the left arrow private readonly arrowSpacing: number = 3; // distance between the arrows and the value area - constructor(scene: BattleScene, mode: Mode | null = null) { - super(scene, mode); + constructor(mode: Mode | null = null) { + super(mode); } setup() { @@ -54,49 +54,37 @@ export default class GameChallengesUiHandler extends UiHandler { this.widestTextBox = 0; - this.challengesContainer = this.scene.add.container(1, -(this.scene.game.canvas.height / 6) + 1); + this.challengesContainer = globalScene.add.container(1, -(globalScene.game.canvas.height / 6) + 1); this.challengesContainer.setName("challenges"); - this.challengesContainer.setInteractive(new Phaser.Geom.Rectangle(0, 0, this.scene.game.canvas.width / 6, this.scene.game.canvas.height / 6), Phaser.Geom.Rectangle.Contains); + this.challengesContainer.setInteractive(new Phaser.Geom.Rectangle(0, 0, globalScene.game.canvas.width / 6, globalScene.game.canvas.height / 6), Phaser.Geom.Rectangle.Contains); - const bgOverlay = this.scene.add.rectangle(-1, -1, this.scene.scaledCanvas.width, this.scene.scaledCanvas.height, 0x424242, 0.8); + const bgOverlay = globalScene.add.rectangle(-1, -1, globalScene.scaledCanvas.width, globalScene.scaledCanvas.height, 0x424242, 0.8); bgOverlay.setName("rect-challenge-overlay"); bgOverlay.setOrigin(0, 0); this.challengesContainer.add(bgOverlay); // TODO: Change this back to /9 when adding in difficulty - const headerBg = addWindow(this.scene, 0, 0, (this.scene.game.canvas.width / 6), 24); + const headerBg = addWindow(0, 0, (globalScene.game.canvas.width / 6), 24); headerBg.setName("window-header-bg"); headerBg.setOrigin(0, 0); - const headerText = addTextObject(this.scene, 0, 0, i18next.t("challenges:title"), TextStyle.SETTINGS_LABEL); + const headerText = addTextObject(0, 0, i18next.t("challenges:title"), TextStyle.SETTINGS_LABEL); headerText.setName("text-header"); headerText.setOrigin(0, 0); headerText.setPositionRelative(headerBg, 8, 4); - // const difficultyBg = addWindow(this.scene, 0, 0, (this.scene.game.canvas.width / 18) - 2, 24); - // difficultyBg.setOrigin(0, 0); - // difficultyBg.setPositionRelative(headerBg, headerBg.width, 0); - - // this.difficultyText = addTextObject(this.scene, 0, 0, "0", TextStyle.SETTINGS_LABEL); - // this.difficultyText.setOrigin(0, 0); - // this.difficultyText.setPositionRelative(difficultyBg, 8, 4); - - // const difficultyName = addTextObject(this.scene, 0, 0, i18next.t("challenges:points"), TextStyle.SETTINGS_LABEL); - // difficultyName.setOrigin(0, 0); - // difficultyName.setPositionRelative(difficultyBg, difficultyBg.width - difficultyName.displayWidth - 8, 4); - - this.optionsWidth = this.scene.scaledCanvas.width * 0.6; - this.optionsBg = addWindow(this.scene, 0, headerBg.height, this.optionsWidth, this.scene.scaledCanvas.height - headerBg.height - 2); + this.optionsWidth = globalScene.scaledCanvas.width * 0.6; + this.optionsBg = addWindow(0, headerBg.height, this.optionsWidth, globalScene.scaledCanvas.height - headerBg.height - 2); this.optionsBg.setName("window-options-bg"); this.optionsBg.setOrigin(0, 0); - const descriptionBg = addWindow(this.scene, 0, headerBg.height, this.scene.scaledCanvas.width - this.optionsWidth, this.scene.scaledCanvas.height - headerBg.height - 26); + const descriptionBg = addWindow(0, headerBg.height, globalScene.scaledCanvas.width - this.optionsWidth, globalScene.scaledCanvas.height - headerBg.height - 26); descriptionBg.setName("window-desc-bg"); descriptionBg.setOrigin(0, 0); descriptionBg.setPositionRelative(this.optionsBg, this.optionsBg.width, 0); - this.descriptionText = new BBCodeText(this.scene, descriptionBg.x + 6, descriptionBg.y + 4, "", { + this.descriptionText = new BBCodeText(globalScene, descriptionBg.x + 6, descriptionBg.y + 4, "", { fontFamily: "emerald", fontSize: 84, color: Color.ORANGE, @@ -109,54 +97,54 @@ export default class GameChallengesUiHandler extends UiHandler { } }); this.descriptionText.setName("text-desc"); - this.scene.add.existing(this.descriptionText); + globalScene.add.existing(this.descriptionText); this.descriptionText.setScale(1 / 6); this.descriptionText.setShadow(4, 5, ShadowColor.ORANGE); this.descriptionText.setOrigin(0, 0); - this.startBg = addWindow(this.scene, 0, 0, descriptionBg.width, 24); + this.startBg = addWindow(0, 0, descriptionBg.width, 24); this.startBg.setName("window-start-bg"); this.startBg.setOrigin(0, 0); this.startBg.setPositionRelative(descriptionBg, 0, descriptionBg.height); - this.startText = addTextObject(this.scene, 0, 0, i18next.t("challenges:noneSelected"), TextStyle.SETTINGS_LABEL); + this.startText = addTextObject(0, 0, i18next.t("challenges:noneSelected"), TextStyle.SETTINGS_LABEL); this.startText.setName("text-start"); this.startText.setOrigin(0, 0); this.startText.setPositionRelative(this.startBg, (this.startBg.width - this.startText.displayWidth) / 2, 4); - this.startCursor = this.scene.add.nineslice(0, 0, "summary_moves_cursor", undefined, descriptionBg.width - 8, 16, 1, 1, 1, 1); + this.startCursor = globalScene.add.nineslice(0, 0, "summary_moves_cursor", undefined, descriptionBg.width - 8, 16, 1, 1, 1, 1); this.startCursor.setName("9s-start-cursor"); this.startCursor.setOrigin(0, 0); this.startCursor.setPositionRelative(this.startBg, 4, 3); this.startCursor.setVisible(false); - this.valuesContainer = this.scene.add.container(0, 0); + this.valuesContainer = globalScene.add.container(0, 0); this.valuesContainer.setName("values"); this.challengeLabels = []; for (let i = 0; i < 9; i++) { - const label = addTextObject(this.scene, 8, 28 + i * 16, "", TextStyle.SETTINGS_LABEL); + const label = addTextObject(8, 28 + i * 16, "", TextStyle.SETTINGS_LABEL); label.setName(`text-challenge-label-${i}`); label.setOrigin(0, 0); this.valuesContainer.add(label); - const leftArrow = this.scene.add.image(0, 0, "cursor_reverse"); + const leftArrow = globalScene.add.image(0, 0, "cursor_reverse"); leftArrow.setName(`challenge-left-arrow-${i}`); leftArrow.setOrigin(0, 0); leftArrow.setVisible(false); leftArrow.setScale(0.75); this.valuesContainer.add(leftArrow); - const rightArrow = this.scene.add.image(0, 0, "cursor"); + const rightArrow = globalScene.add.image(0, 0, "cursor"); rightArrow.setName(`challenge-right-arrow-${i}`); rightArrow.setOrigin(0, 0); rightArrow.setScale(0.75); rightArrow.setVisible(false); this.valuesContainer.add(rightArrow); - const value = addTextObject(this.scene, 0, 28 + i * 16, "", TextStyle.SETTINGS_LABEL); + const value = addTextObject(0, 28 + i * 16, "", TextStyle.SETTINGS_LABEL); value.setName(`challenge-value-text-${i}`); value.setPositionRelative(label, 100, 0); this.valuesContainer.add(value); @@ -169,7 +157,7 @@ export default class GameChallengesUiHandler extends UiHandler { }; } - this.monoTypeValue = this.scene.add.sprite(8, 98, Utils.getLocalizedSpriteKey("types")); + this.monoTypeValue = globalScene.add.sprite(8, 98, Utils.getLocalizedSpriteKey("types")); this.monoTypeValue.setName("challenge-value-monotype-sprite"); this.monoTypeValue.setScale(0.86); this.monoTypeValue.setVisible(false); @@ -209,20 +197,20 @@ export default class GameChallengesUiHandler extends UiHandler { * init all challenge labels */ initLabels(): void { - this.setDescription(this.scene.gameMode.challenges[0].getDescription()); + this.setDescription(globalScene.gameMode.challenges[0].getDescription()); this.widestTextBox = 0; for (let i = 0; i < 9; i++) { - if (i < this.scene.gameMode.challenges.length) { + if (i < globalScene.gameMode.challenges.length) { this.challengeLabels[i].label.setVisible(true); this.challengeLabels[i].value.setVisible(true); this.challengeLabels[i].leftArrow.setVisible(true); this.challengeLabels[i].rightArrow.setVisible(true); - const tempText = addTextObject(this.scene, 0, 0, "", TextStyle.SETTINGS_LABEL); // this is added here to get the widest text object for this language, which will be used for the arrow placement + const tempText = addTextObject(0, 0, "", TextStyle.SETTINGS_LABEL); // this is added here to get the widest text object for this language, which will be used for the arrow placement - for (let j = 0; j <= this.scene.gameMode.challenges[i].maxValue; j++) { // this goes through each challenge's value to find out what the max width will be - if (this.scene.gameMode.challenges[i].id !== Challenges.SINGLE_TYPE) { - tempText.setText(this.scene.gameMode.challenges[i].getValue(j)); + for (let j = 0; j <= globalScene.gameMode.challenges[i].maxValue; j++) { // this goes through each challenge's value to find out what the max width will be + if (globalScene.gameMode.challenges[i].id !== Challenges.SINGLE_TYPE) { + tempText.setText(globalScene.gameMode.challenges[i].getValue(j)); if (tempText.displayWidth > this.widestTextBox) { this.widestTextBox = tempText.displayWidth; } @@ -240,8 +228,8 @@ export default class GameChallengesUiHandler extends UiHandler { updateText(): void { this.setDescription(this.getActiveChallenge().getDescription()); let monoTypeVisible = false; - for (let i = 0; i < Math.min(9, this.scene.gameMode.challenges.length); i++) { - const challenge = this.scene.gameMode.challenges[this.scrollCursor + i]; + for (let i = 0; i < Math.min(9, globalScene.gameMode.challenges.length); i++) { + const challenge = globalScene.gameMode.challenges[this.scrollCursor + i]; const challengeLabel = this.challengeLabels[i]; challengeLabel.label.setText(challenge.getName()); challengeLabel.leftArrow.setPositionRelative(challengeLabel.label, this.leftArrowGap, 4.5); @@ -276,7 +264,7 @@ export default class GameChallengesUiHandler extends UiHandler { } // This checks if a challenge has been selected by the user and updates the text/its opacity accordingly. - this.hasSelectedChallenge = this.scene.gameMode.challenges.some(c => c.value !== 0); + this.hasSelectedChallenge = globalScene.gameMode.challenges.some(c => c.value !== 0); if (this.hasSelectedChallenge) { this.startText.setText(i18next.t("common:start")); @@ -289,11 +277,6 @@ export default class GameChallengesUiHandler extends UiHandler { this.startText.setPositionRelative(this.startBg, (this.startBg.width - this.startText.displayWidth) / 2, 4); } this.challengesContainer.update(); - - // const totalDifficulty = this.scene.gameMode.challenges.reduce((v, c) => v + c.getDifficulty(), 0); - // const totalMinDifficulty = this.scene.gameMode.challenges.reduce((v, c) => v + c.getMinDifficulty(), 0); - // this.difficultyText.text = `${totalDifficulty}` + (totalMinDifficulty ? `/${totalMinDifficulty}` : ""); - // this.difficultyText.updateText(); } show(args: any[]): boolean { @@ -303,7 +286,7 @@ export default class GameChallengesUiHandler extends UiHandler { this.updateChallengeArrows(false); this.challengesContainer.setVisible(true); // Should always be false at the start - this.hasSelectedChallenge = this.scene.gameMode.challenges.some(c => c.value !== 0); + this.hasSelectedChallenge = globalScene.gameMode.challenges.some(c => c.value !== 0); this.setCursor(0); this.initLabels(); @@ -319,7 +302,7 @@ export default class GameChallengesUiHandler extends UiHandler { /* This code updates the challenge starter arrows to be tinted/not tinted when the start button is selected to show they can't be changed */ updateChallengeArrows(tinted: boolean) { - for (let i = 0; i < Math.min(9, this.scene.gameMode.challenges.length); i++) { + for (let i = 0; i < Math.min(9, globalScene.gameMode.challenges.length); i++) { const challengeLabel = this.challengeLabels[i]; if (tinted) { challengeLabel.leftArrow.setTint(0x808080); @@ -354,16 +337,16 @@ export default class GameChallengesUiHandler extends UiHandler { this.cursorObj?.setVisible(true); this.updateChallengeArrows(this.startCursor.visible); } else { - this.scene.clearPhaseQueue(); - this.scene.pushPhase(new TitlePhase(this.scene)); - this.scene.getCurrentPhase()?.end(); + globalScene.clearPhaseQueue(); + globalScene.pushPhase(new TitlePhase()); + globalScene.getCurrentPhase()?.end(); } success = true; } else if (button === Button.SUBMIT || button === Button.ACTION) { if (this.hasSelectedChallenge) { if (this.startCursor.visible) { - this.scene.unshiftPhase(new SelectStarterPhase(this.scene)); - this.scene.getCurrentPhase()?.end(); + globalScene.unshiftPhase(new SelectStarterPhase()); + globalScene.getCurrentPhase()?.end(); } else { this.startCursor.setVisible(true); this.cursorObj?.setVisible(false); @@ -380,14 +363,14 @@ export default class GameChallengesUiHandler extends UiHandler { if (this.cursor === 0) { if (this.scrollCursor === 0) { // When at the top of the menu and pressing UP, move to the bottommost item. - if (this.scene.gameMode.challenges.length > rowsToDisplay) { // If there are more than 9 challenges, scroll to the bottom + if (globalScene.gameMode.challenges.length > rowsToDisplay) { // If there are more than 9 challenges, scroll to the bottom // First, set the cursor to the last visible element, preparing for the scroll to the end. const successA = this.setCursor(rowsToDisplay - 1); // Then, adjust the scroll to display the bottommost elements of the menu. - const successB = this.setScrollCursor(this.scene.gameMode.challenges.length - rowsToDisplay); + const successB = this.setScrollCursor(globalScene.gameMode.challenges.length - rowsToDisplay); success = successA && successB; // success is just there to play the little validation sound effect } else { // If there are 9 or less challenges, just move to the bottom one - success = this.setCursor(this.scene.gameMode.challenges.length - 1); + success = this.setCursor(globalScene.gameMode.challenges.length - 1); } } else { success = this.setScrollCursor(this.scrollCursor - 1); @@ -401,7 +384,7 @@ export default class GameChallengesUiHandler extends UiHandler { break; case Button.DOWN: if (this.cursor === rowsToDisplay - 1) { - if (this.scrollCursor < this.scene.gameMode.challenges.length - rowsToDisplay) { + if (this.scrollCursor < globalScene.gameMode.challenges.length - rowsToDisplay) { // When at the bottom and pressing DOWN, scroll if possible. success = this.setScrollCursor(this.scrollCursor + 1); } else { @@ -412,7 +395,7 @@ export default class GameChallengesUiHandler extends UiHandler { const successB = this.setScrollCursor(0); success = successA && successB; // success is just there to play the little validation sound effect } - } else if (this.scene.gameMode.challenges.length < rowsToDisplay && this.cursor === this.scene.gameMode.challenges.length - 1) { + } else if (globalScene.gameMode.challenges.length < rowsToDisplay && this.cursor === globalScene.gameMode.challenges.length - 1) { // When at the bottom of a non-scrolling menu and pressing DOWN, move to the topmost item. success = this.setCursor(0); } else { @@ -447,11 +430,11 @@ export default class GameChallengesUiHandler extends UiHandler { return success; } - setCursor(cursor: integer): boolean { + setCursor(cursor: number): boolean { let ret = super.setCursor(cursor); if (!this.cursorObj) { - this.cursorObj = this.scene.add.nineslice(0, 0, "summary_moves_cursor", undefined, this.optionsWidth - 8, 16, 1, 1, 1, 1); + this.cursorObj = globalScene.add.nineslice(0, 0, "summary_moves_cursor", undefined, this.optionsWidth - 8, 16, 1, 1, 1, 1); this.cursorObj.setOrigin(0, 0); this.valuesContainer.add(this.cursorObj); } @@ -464,7 +447,7 @@ export default class GameChallengesUiHandler extends UiHandler { return ret; } - setScrollCursor(scrollCursor: integer): boolean { + setScrollCursor(scrollCursor: number): boolean { if (scrollCursor === this.scrollCursor) { return false; } @@ -477,7 +460,7 @@ export default class GameChallengesUiHandler extends UiHandler { } getActiveChallenge(): Challenge { - return this.scene.gameMode.challenges[this.cursor + this.scrollCursor]; + return globalScene.gameMode.challenges[this.cursor + this.scrollCursor]; } clear() { diff --git a/src/ui/char-sprite.ts b/src/ui/char-sprite.ts index d76c7ec59d0..ccd97e2c8e4 100644 --- a/src/ui/char-sprite.ts +++ b/src/ui/char-sprite.ts @@ -1,4 +1,4 @@ -import BattleScene from "../battle-scene"; +import { globalScene } from "#app/global-scene"; import * as Utils from "../utils"; export default class CharSprite extends Phaser.GameObjects.Container { @@ -9,13 +9,13 @@ export default class CharSprite extends Phaser.GameObjects.Container { public variant: string; public shown: boolean; - constructor(scene: BattleScene) { - super(scene, (scene.game.canvas.width / 6) + 32, -42); + constructor() { + super(globalScene, (globalScene.game.canvas.width / 6) + 32, -42); } setup(): void { [ this.sprite, this.transitionSprite ] = new Array(2).fill(null).map(() => { - const ret = this.scene.add.sprite(0, 0, "", ""); + const ret = globalScene.add.sprite(0, 0, "", ""); ret.setOrigin(0.5, 1); this.add(ret); return ret; @@ -45,11 +45,11 @@ export default class CharSprite extends Phaser.GameObjects.Container { this.sprite.setTexture(key, variant); - (this.scene as BattleScene).fieldUI.bringToTop(this); + globalScene.fieldUI.bringToTop(this); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this, - x: (this.scene.game.canvas.width / 6) - 102, + x: (globalScene.game.canvas.width / 6) - 102, duration: 750, ease: "Cubic.easeOut", onComplete: () => { @@ -57,7 +57,7 @@ export default class CharSprite extends Phaser.GameObjects.Container { } }); - this.setVisible(this.scene.textures.get(key).key !== Utils.MissingTextureKey); + this.setVisible(globalScene.textures.get(key).key !== Utils.MissingTextureKey); this.shown = true; this.key = key; @@ -67,12 +67,12 @@ export default class CharSprite extends Phaser.GameObjects.Container { setVariant(variant: string): Promise { return new Promise(resolve => { - (this.scene as BattleScene).fieldUI.bringToTop(this); + globalScene.fieldUI.bringToTop(this); this.transitionSprite.setTexture(this.key, variant); this.transitionSprite.setAlpha(0); this.transitionSprite.setVisible(true); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.transitionSprite, alpha: 1, duration: 250, @@ -93,9 +93,9 @@ export default class CharSprite extends Phaser.GameObjects.Container { return resolve(); } - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this, - x: (this.scene.game.canvas.width / 6) + 32, + x: (globalScene.game.canvas.width / 6) + 32, duration: 750, ease: "Cubic.easeIn", onComplete: () => { diff --git a/src/ui/command-ui-handler.ts b/src/ui/command-ui-handler.ts index 0dacacc7b70..20cffbbe30a 100644 --- a/src/ui/command-ui-handler.ts +++ b/src/ui/command-ui-handler.ts @@ -1,4 +1,3 @@ -import BattleScene from "../battle-scene"; import { addTextObject, TextStyle } from "./text"; import PartyUiHandler, { PartyUiMode } from "./party-ui-handler"; import { Mode } from "./ui"; @@ -7,23 +6,31 @@ import i18next from "i18next"; import { Button } from "#enums/buttons"; import { getPokemonNameWithAffix } from "#app/messages"; import { CommandPhase } from "#app/phases/command-phase"; +import { globalScene } from "#app/global-scene"; +import { TerastallizeAccessModifier } from "#app/modifier/modifier"; +import { Type } from "#app/enums/type"; +import { getTypeRgb } from "#app/data/type"; +import { Species } from "#enums/species"; export enum Command { FIGHT = 0, BALL, POKEMON, - RUN + RUN, + TERA } export default class CommandUiHandler extends UiHandler { private commandsContainer: Phaser.GameObjects.Container; private cursorObj: Phaser.GameObjects.Image | null; - protected fieldIndex: integer = 0; - protected cursor2: integer = 0; + private teraButton: Phaser.GameObjects.Sprite; - constructor(scene: BattleScene) { - super(scene, Mode.COMMAND); + protected fieldIndex: number = 0; + protected cursor2: number = 0; + + constructor() { + super(Mode.COMMAND); } setup() { @@ -35,13 +42,20 @@ export default class CommandUiHandler extends UiHandler { i18next.t("commandUiHandler:run") ]; - this.commandsContainer = this.scene.add.container(217, -38.7); + this.commandsContainer = globalScene.add.container(217, -38.7); this.commandsContainer.setName("commands"); this.commandsContainer.setVisible(false); ui.add(this.commandsContainer); + this.teraButton = globalScene.add.sprite(-32, 15, "button_tera"); + this.teraButton.setName("terrastallize-button"); + this.teraButton.setScale(1.3); + this.teraButton.setFrame("fire"); + this.teraButton.setPipeline(globalScene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], ignoreTimeTint: true, teraColor: getTypeRgb(Type.FIRE), isTerastallized: false }); + this.commandsContainer.add(this.teraButton); + for (let c = 0; c < commands.length; c++) { - const commandText = addTextObject(this.scene, c % 2 === 0 ? 0 : 55.8, c < 2 ? 0 : 16, commands[c], TextStyle.WINDOW); + const commandText = addTextObject(c % 2 === 0 ? 0 : 55.8, c < 2 ? 0 : 16, commands[c], TextStyle.WINDOW); commandText.setName(commands[c]); this.commandsContainer.add(commandText); } @@ -50,23 +64,34 @@ export default class CommandUiHandler extends UiHandler { show(args: any[]): boolean { super.show(args); - this.fieldIndex = args.length ? args[0] as integer : 0; + this.fieldIndex = args.length ? args[0] as number : 0; this.commandsContainer.setVisible(true); let commandPhase: CommandPhase; - const currentPhase = this.scene.getCurrentPhase(); + const currentPhase = globalScene.getCurrentPhase(); if (currentPhase instanceof CommandPhase) { commandPhase = currentPhase; } else { - commandPhase = this.scene.getStandbyPhase() as CommandPhase; + commandPhase = globalScene.getStandbyPhase() as CommandPhase; } + if (this.canTera()) { + this.teraButton.setVisible(true); + this.teraButton.setFrame(Type[globalScene.getField()[this.fieldIndex].getTeraType()].toLowerCase()); + } else { + this.teraButton.setVisible(false); + if (this.cursor === Command.TERA) { + this.setCursor(Command.FIGHT); + } + } + this.toggleTeraButton(); + const messageHandler = this.getUi().getMessageHandler(); messageHandler.bg.setVisible(true); messageHandler.commandWindow.setVisible(true); messageHandler.movesWindowContainer.setVisible(false); - messageHandler.message.setWordWrapWidth(1110); + messageHandler.message.setWordWrapWidth(this.canTera() ? 910 : 1110); messageHandler.showText(i18next.t("commandUiHandler:actionMessage", { pokemonName: getPokemonNameWithAffix(commandPhase.getPokemon()) }), 0); if (this.getCursor() === Command.POKEMON) { this.setCursor(Command.FIGHT); @@ -90,7 +115,7 @@ export default class CommandUiHandler extends UiHandler { switch (cursor) { // Fight case Command.FIGHT: - ui.setMode(Mode.FIGHT, (this.scene.getCurrentPhase() as CommandPhase).getFieldIndex()); + ui.setMode(Mode.FIGHT, (globalScene.getCurrentPhase() as CommandPhase).getFieldIndex()); success = true; break; // Ball @@ -100,38 +125,48 @@ export default class CommandUiHandler extends UiHandler { break; // Pokemon case Command.POKEMON: - ui.setMode(Mode.PARTY, PartyUiMode.SWITCH, (this.scene.getCurrentPhase() as CommandPhase).getPokemon().getFieldIndex(), null, PartyUiHandler.FilterNonFainted); + ui.setMode(Mode.PARTY, PartyUiMode.SWITCH, (globalScene.getCurrentPhase() as CommandPhase).getPokemon().getFieldIndex(), null, PartyUiHandler.FilterNonFainted); success = true; break; // Run case Command.RUN: - (this.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.RUN, 0); + (globalScene.getCurrentPhase() as CommandPhase).handleCommand(Command.RUN, 0); + success = true; + break; + case Command.TERA: + ui.setMode(Mode.FIGHT, (globalScene.getCurrentPhase() as CommandPhase).getFieldIndex(), Command.TERA); success = true; break; } } else { - (this.scene.getCurrentPhase() as CommandPhase).cancel(); + (globalScene.getCurrentPhase() as CommandPhase).cancel(); } } else { switch (button) { case Button.UP: - if (cursor >= 2) { + if (cursor === Command.POKEMON || cursor === Command.RUN) { success = this.setCursor(cursor - 2); } break; case Button.DOWN: - if (cursor < 2) { + if (cursor === Command.FIGHT || cursor === Command.BALL) { success = this.setCursor(cursor + 2); } break; case Button.LEFT: - if (cursor % 2 === 1) { + if (cursor === Command.BALL || cursor === Command.RUN) { success = this.setCursor(cursor - 1); + } else if ((cursor === Command.FIGHT || cursor === Command.POKEMON) && this.canTera()) { + success = this.setCursor(Command.TERA); + this.toggleTeraButton(); } break; case Button.RIGHT: - if (cursor % 2 === 0) { + if (cursor === Command.FIGHT || cursor === Command.POKEMON) { success = this.setCursor(cursor + 1); + } else if (cursor === Command.TERA) { + success = this.setCursor(Command.FIGHT); + this.toggleTeraButton(); } break; } @@ -144,11 +179,24 @@ export default class CommandUiHandler extends UiHandler { return success; } - getCursor(): integer { + canTera(): boolean { + const hasTeraMod = !!globalScene.getModifiers(TerastallizeAccessModifier).length; + const activePokemon = globalScene.getField()[this.fieldIndex]; + const isBlockedForm = activePokemon.isMega() || activePokemon.isMax() || activePokemon.hasSpecies(Species.NECROZMA, "ultra"); + const currentTeras = globalScene.arena.playerTerasUsed; + const plannedTera = globalScene.currentBattle.preTurnCommands[0]?.command === Command.TERA && this.fieldIndex > 0 ? 1 : 0; + return hasTeraMod && !isBlockedForm && (currentTeras + plannedTera) < 1; + } + + toggleTeraButton() { + this.teraButton.setPipeline(globalScene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], ignoreTimeTint: true, teraColor: getTypeRgb(globalScene.getField()[this.fieldIndex].getTeraType()), isTerastallized: this.getCursor() === Command.TERA }); + } + + getCursor(): number { return !this.fieldIndex ? this.cursor : this.cursor2; } - setCursor(cursor: integer): boolean { + setCursor(cursor: number): boolean { const changed = this.getCursor() !== cursor; if (changed) { if (!this.fieldIndex) { @@ -159,11 +207,16 @@ export default class CommandUiHandler extends UiHandler { } if (!this.cursorObj) { - this.cursorObj = this.scene.add.image(0, 0, "cursor"); + this.cursorObj = globalScene.add.image(0, 0, "cursor"); this.commandsContainer.add(this.cursorObj); } - this.cursorObj.setPosition(-5 + (cursor % 2 === 1 ? 56 : 0), 8 + (cursor >= 2 ? 16 : 0)); + if (cursor === Command.TERA) { + this.cursorObj.setVisible(false); + } else { + this.cursorObj.setPosition(-5 + (cursor % 2 === 1 ? 56 : 0), 8 + (cursor >= 2 ? 16 : 0)); + this.cursorObj.setVisible(true); + } return changed; } diff --git a/src/ui/confirm-ui-handler.ts b/src/ui/confirm-ui-handler.ts index 2022508fc0d..3a3a5dfbfe7 100644 --- a/src/ui/confirm-ui-handler.ts +++ b/src/ui/confirm-ui-handler.ts @@ -1,22 +1,23 @@ -import BattleScene from "../battle-scene"; -import AbstractOptionSelectUiHandler, { OptionSelectConfig } from "./abstact-option-select-ui-handler"; +import type { OptionSelectConfig } from "./abstact-option-select-ui-handler"; +import AbstractOptionSelectUiHandler from "./abstact-option-select-ui-handler"; import { Mode } from "./ui"; import i18next from "i18next"; import { Button } from "#enums/buttons"; +import { globalScene } from "#app/global-scene"; export default class ConfirmUiHandler extends AbstractOptionSelectUiHandler { - public static readonly windowWidth: integer = 48; + public static readonly windowWidth: number = 48; private switchCheck: boolean; - private switchCheckCursor: integer; + private switchCheckCursor: number; - constructor(scene: BattleScene) { - super(scene, Mode.CONFIRM); + constructor() { + super(Mode.CONFIRM); } - getWindowWidth(): integer { + getWindowWidth(): number { return ConfirmUiHandler.windowWidth; } @@ -44,7 +45,7 @@ export default class ConfirmUiHandler extends AbstractOptionSelectUiHandler { } } ], - delay: args.length >= 8 && args[7] !== null ? args[7] as integer : 0 + delay: args.length >= 8 && args[7] !== null ? args[7] as number : 0 }; super.show([ config ]); @@ -54,7 +55,7 @@ export default class ConfirmUiHandler extends AbstractOptionSelectUiHandler { const xOffset = (args.length >= 6 && args[5] !== null ? args[5] as number : 0); const yOffset = (args.length >= 7 && args[6] !== null ? args[6] as number : 0); - this.optionSelectContainer.setPosition((this.scene.game.canvas.width / 6) - 1 + xOffset, -48 + yOffset); + this.optionSelectContainer.setPosition((globalScene.game.canvas.width / 6) - 1 + xOffset, -48 + yOffset); this.setCursor(this.switchCheck ? this.switchCheckCursor : 0); return true; @@ -87,7 +88,7 @@ export default 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((this.scene.game.canvas.width / 6) - 1 + xOffset, -48 + yOffset); + this.optionSelectContainer.setPosition((globalScene.game.canvas.width / 6) - 1 + xOffset, -48 + yOffset); this.setCursor(this.switchCheck ? this.switchCheckCursor : 0); @@ -104,7 +105,7 @@ export default class ConfirmUiHandler extends AbstractOptionSelectUiHandler { return super.processInput(button); } - setCursor(cursor: integer): boolean { + setCursor(cursor: number): boolean { const ret = super.setCursor(cursor); if (ret && this.switchCheck) { diff --git a/src/ui/daily-run-scoreboard.ts b/src/ui/daily-run-scoreboard.ts index bb93b1fb1f5..d9131150262 100644 --- a/src/ui/daily-run-scoreboard.ts +++ b/src/ui/daily-run-scoreboard.ts @@ -1,15 +1,15 @@ import i18next from "i18next"; -import BattleScene from "../battle-scene"; +import { globalScene } from "#app/global-scene"; import * as Utils from "../utils"; import { TextStyle, addTextObject } from "./text"; import { WindowVariant, addWindow } from "./ui-theme"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; export interface RankingEntry { - rank: integer, + rank: number, username: string, - score: integer, - wave: integer + score: number, + wave: number } // Don't forget to update translations when adding a new category @@ -28,14 +28,14 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container { private pageNumberLabel: Phaser.GameObjects.Text; private nextPageButton: Phaser.GameObjects.Sprite; - private pageCount: integer; - private page: integer; + private pageCount: number; + private page: number; private category: ScoreboardCategory; private _isUpdating: boolean; - constructor(scene: BattleScene, x: number, y: number) { - super(scene, x, y); + constructor(x: number, y: number) { + super(globalScene, x, y); this._isUpdating = false; this.setup(); @@ -60,24 +60,24 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container { } setup() { - const titleWindow = addWindow(this.scene, 0, 0, 114, 18, false, false, undefined, undefined, WindowVariant.THIN); + const titleWindow = addWindow(0, 0, 114, 18, false, false, undefined, undefined, WindowVariant.THIN); this.add(titleWindow); - this.titleLabel = addTextObject(this.scene, titleWindow.displayWidth / 2, titleWindow.displayHeight / 2, i18next.t("menu:loading"), TextStyle.WINDOW, { fontSize: "64px" }); + this.titleLabel = addTextObject(titleWindow.displayWidth / 2, titleWindow.displayHeight / 2, i18next.t("menu:loading"), TextStyle.WINDOW, { fontSize: "64px" }); this.titleLabel.setOrigin(0.5, 0.5); this.add(this.titleLabel); - const window = addWindow(this.scene, 0, 17, 114, 118, false, false, undefined, undefined, WindowVariant.THIN); + const window = addWindow(0, 17, 114, 118, false, false, undefined, undefined, WindowVariant.THIN); this.add(window); - this.rankingsContainer = this.scene.add.container(6, 21); + this.rankingsContainer = globalScene.add.container(6, 21); this.add(this.rankingsContainer); - this.loadingLabel = addTextObject(this.scene, window.displayWidth / 2, window.displayHeight / 2 + 16, "", TextStyle.WINDOW); + this.loadingLabel = addTextObject(window.displayWidth / 2, window.displayHeight / 2 + 16, "", TextStyle.WINDOW); this.loadingLabel.setOrigin(0.5, 0.5); this.loadingLabel.setVisible(false); - this.prevCategoryButton = this.scene.add.sprite(4, 4, "cursor_reverse"); + this.prevCategoryButton = globalScene.add.sprite(4, 4, "cursor_reverse"); this.prevCategoryButton.setOrigin(0, 0); this.add(this.prevCategoryButton); @@ -86,7 +86,7 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container { this.update(this.category ? this.category - 1 : Utils.getEnumKeys(ScoreboardCategory).length - 1); }); - this.nextCategoryButton = this.scene.add.sprite(window.displayWidth - 4, 4, "cursor"); + this.nextCategoryButton = globalScene.add.sprite(window.displayWidth - 4, 4, "cursor"); this.nextCategoryButton.setOrigin(1, 0); this.add(this.nextCategoryButton); @@ -95,7 +95,7 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container { this.update(this.category < Utils.getEnumKeys(ScoreboardCategory).length - 1 ? this.category + 1 : 0); }); - this.prevPageButton = this.scene.add.sprite(window.displayWidth / 2 - 16, titleWindow.displayHeight + window.displayHeight - 15, "cursor_reverse"); + this.prevPageButton = globalScene.add.sprite(window.displayWidth / 2 - 16, titleWindow.displayHeight + window.displayHeight - 15, "cursor_reverse"); this.prevPageButton.setOrigin(0, 0); this.prevPageButton.setAlpha(0.5); this.add(this.prevPageButton); @@ -107,11 +107,11 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container { } }); - this.pageNumberLabel = addTextObject(this.scene, window.displayWidth / 2, titleWindow.displayHeight + window.displayHeight - 16, "1", TextStyle.WINDOW, { fontSize: "64px" }); + this.pageNumberLabel = addTextObject(window.displayWidth / 2, titleWindow.displayHeight + window.displayHeight - 16, "1", TextStyle.WINDOW, { fontSize: "64px" }); this.pageNumberLabel.setOrigin(0.5, 0); this.add(this.pageNumberLabel); - this.nextPageButton = this.scene.add.sprite(window.displayWidth / 2 + 16, titleWindow.displayHeight + window.displayHeight - 15, "cursor"); + this.nextPageButton = globalScene.add.sprite(window.displayWidth / 2 + 16, titleWindow.displayHeight + window.displayHeight - 15, "cursor"); this.nextPageButton.setOrigin(1, 0); this.nextPageButton.setAlpha(0.5); this.add(this.nextPageButton); @@ -131,20 +131,20 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container { updateRankings(rankings: RankingEntry[]) { const getEntry = (rank: string, username: string, score: string, wave: string) => { - const entryContainer = this.scene.add.container(0, 0); + const entryContainer = globalScene.add.container(0, 0); - const rankLabel = addTextObject(this.scene, 0, 0, rank, TextStyle.WINDOW, { fontSize: "54px" }); + const rankLabel = addTextObject(0, 0, rank, TextStyle.WINDOW, { fontSize: "54px" }); entryContainer.add(rankLabel); - const usernameLabel = addTextObject(this.scene, 12, 0, username, TextStyle.WINDOW, { fontSize: "54px" }); + const usernameLabel = addTextObject(12, 0, username, TextStyle.WINDOW, { fontSize: "54px" }); entryContainer.add(usernameLabel); - const scoreLabel = addTextObject(this.scene, 84, 0, score, TextStyle.WINDOW, { fontSize: "54px" }); + const scoreLabel = addTextObject(84, 0, score, TextStyle.WINDOW, { fontSize: "54px" }); entryContainer.add(scoreLabel); switch (this.category) { case ScoreboardCategory.DAILY: - const waveLabel = addTextObject(this.scene, 68, 0, wave, TextStyle.WINDOW, { fontSize: "54px" }); + const waveLabel = addTextObject(68, 0, wave, TextStyle.WINDOW, { fontSize: "54px" }); entryContainer.add(waveLabel); break; case ScoreboardCategory.WEEKLY: @@ -157,7 +157,7 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container { this.rankingsContainer.add(getEntry(i18next.t("menu:positionIcon"), i18next.t("menu:usernameScoreboard"), i18next.t("menu:score"), i18next.t("menu:wave"))); - rankings.forEach((r: RankingEntry, i: integer) => { + rankings.forEach((r: RankingEntry, i: number) => { const entryContainer = getEntry(r.rank.toString(), r.username, r.score.toString(), r.wave.toString()); entryContainer.setY((i + 1) * 9); this.rankingsContainer.add(entryContainer); @@ -176,7 +176,7 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container { * @param {ScoreboardCategory} [category=this.category] - The category to fetch rankings for. Defaults to the current category. * @param {number} [page=this.page] - The page number to fetch. Defaults to the current page. */ - update(category: ScoreboardCategory = this.category, page: integer = this.page) { + update(category: ScoreboardCategory = this.category, page: number = this.page) { if (this.isUpdating) { return; } @@ -236,7 +236,3 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container { }); } } - -export interface DailyRunScoreboard { - scene: BattleScene -} diff --git a/src/ui/dropdown.ts b/src/ui/dropdown.ts index e16efe17036..ec433a35733 100644 --- a/src/ui/dropdown.ts +++ b/src/ui/dropdown.ts @@ -1,14 +1,16 @@ -import BattleScene from "#app/battle-scene"; -import { SceneBase } from "#app/scene-base"; +import { globalScene } from "#app/global-scene"; import { addTextObject, TextStyle } from "./text"; import { addWindow, WindowVariant } from "./ui-theme"; +import { ScrollBar } from "#app/ui/scroll-bar"; import i18next from "i18next"; export enum DropDownState { ON = 0, OFF = 1, EXCLUDE = 2, - UNLOCKABLE = 3 + UNLOCKABLE = 3, + ONE = 4, + TWO = 5 } export enum DropDownType { @@ -28,7 +30,9 @@ export enum SortCriteria { COST = 1, CANDY = 2, IV = 3, - NAME = 4 + NAME = 4, + CAUGHT = 5, + HATCHED = 6 } export class DropDownLabel { @@ -56,9 +60,11 @@ export class DropDownOption extends Phaser.GameObjects.Container { private offColor = 0x272727; private excludeColor = 0xff5555; private unlockableColor = 0xffff00; + private oneColor = 0x33bbff; + private twoColor = 0x33bbff; - constructor(scene: SceneBase, val: any, labels: DropDownLabel | DropDownLabel[]) { - super(scene); + constructor(val: any, labels: DropDownLabel | DropDownLabel[]) { + super(globalScene); this.val = val; if (Array.isArray(labels)) { @@ -70,7 +76,7 @@ export class DropDownOption extends Phaser.GameObjects.Container { const currentLabel = this.labels[this.currentLabelIndex]; this.state = currentLabel.state; - this.text = addTextObject(scene, 0, 0, currentLabel.text || "", TextStyle.TOOLTIP_CONTENT); + this.text = addTextObject(0, 0, currentLabel.text || "", TextStyle.TOOLTIP_CONTENT); this.text.setOrigin(0, 0.5); this.add(this.text); @@ -96,12 +102,12 @@ export class DropDownOption extends Phaser.GameObjects.Container { */ setupToggleIcon(type: DropDownType, visible: boolean): void { if (type === DropDownType.SINGLE) { - this.toggle = this.scene.add.sprite(0, 0, "cursor"); + this.toggle = globalScene.add.sprite(0, 0, "cursor"); this.toggle.setScale(0.5); this.toggle.setOrigin(0, 0.5); this.toggle.setRotation(Math.PI / 180 * -90); } else { - this.toggle = this.scene.add.sprite(0, 0, "candy"); + this.toggle = globalScene.add.sprite(0, 0, "candy"); this.toggle.setScale(0.3); this.toggle.setOrigin(0, 0.5); } @@ -127,6 +133,12 @@ export class DropDownOption extends Phaser.GameObjects.Container { case DropDownState.UNLOCKABLE: this.toggle.setTint(this.unlockableColor); break; + case DropDownState.ONE: + this.toggle.setTint(this.oneColor); + break; + case DropDownState.TWO: + this.toggle.setTint(this.twoColor); + break; } } @@ -282,55 +294,91 @@ export class DropDown extends Phaser.GameObjects.Container { private onChange: () => void; private lastDir: SortDirection = SortDirection.ASC; private defaultSettings: any[]; + private dropDownScrollBar: ScrollBar; + private totalOptions: number = 0; + private maxOptions: number = 0; + private shownOptions: number = 0; + private tooManyOptions: Boolean = false; + private firstShown: number = 0; + private optionHeight: number = 0; + private optionSpacing: number = 0; + private optionPaddingX: number = 4; + private optionPaddingY: number = 6; + private optionWidth: number = 100; + private cursorOffset: number = 0; - constructor(scene: BattleScene, x: number, y: number, options: DropDownOption[], onChange: () => void, type: DropDownType = DropDownType.MULTI, optionSpacing: number = 2) { + constructor(x: number, y: number, options: DropDownOption[], onChange: () => void, type: DropDownType = DropDownType.MULTI, optionSpacing: number = 2) { const windowPadding = 5; - const optionHeight = 7; - const optionPaddingX = 4; - const optionPaddingY = 6; const cursorOffset = 7; - const optionWidth = 100; - super(scene, x - cursorOffset - windowPadding, y); + super(globalScene, x - cursorOffset - windowPadding, y); + + this.optionWidth = 100; + this.optionHeight = 7; + this.optionSpacing = optionSpacing; + this.optionPaddingX = 4; + this.optionPaddingY = 6; + this.cursorOffset = cursorOffset; + this.options = options; this.dropDownType = type; this.onChange = onChange; - this.cursorObj = scene.add.image(optionPaddingX + 3, 0, "cursor"); + this.cursorObj = globalScene.add.image(this.optionPaddingX + 3, 0, "cursor"); this.cursorObj.setScale(0.5); this.cursorObj.setOrigin(0, 0.5); this.cursorObj.setVisible(false); // For MULTI and HYBRID filter, add an ALL option at the top if (this.dropDownType === DropDownType.MULTI || this.dropDownType === DropDownType.HYBRID) { - this.options.unshift(new DropDownOption(scene, "ALL", new DropDownLabel(i18next.t("filterBar:all"), undefined, this.checkForAllOn() ? DropDownState.ON : DropDownState.OFF))); + this.options.unshift(new DropDownOption("ALL", new DropDownLabel(i18next.t("filterBar:all"), undefined, this.checkForAllOn() ? DropDownState.ON : DropDownState.OFF))); } + this.maxOptions = 19; + this.totalOptions = this.options.length; + this.tooManyOptions = this.totalOptions > this.maxOptions; + this.shownOptions = this.tooManyOptions ? this.maxOptions : this.totalOptions; + this.defaultSettings = this.getSettings(); // Place ui elements in the correct spot options.forEach((option, index) => { + const toggleVisibility = type !== DropDownType.SINGLE || option.state === DropDownState.ON; option.setupToggleIcon(type, toggleVisibility); - option.width = optionWidth; - option.y = index * optionHeight + index * optionSpacing + optionPaddingY; + option.width = this.optionWidth; + option.y = index * this.optionHeight + index * optionSpacing + this.optionPaddingY; - const baseX = cursorOffset + optionPaddingX + 3; - const baseY = optionHeight / 2; + const baseX = cursorOffset + this.optionPaddingX + 3; + const baseY = this.optionHeight / 2; option.setLabelPosition(baseX + 8, baseY); if (type === DropDownType.SINGLE) { option.setTogglePosition(baseX + 3, baseY + 1); } else { option.setTogglePosition(baseX, baseY); } + + if (index >= this.shownOptions) { + option.visible = false; + } + + this.firstShown = 0; }); - this.window = addWindow(scene, 0, 0, optionWidth, options[options.length - 1].y + optionHeight + optionPaddingY, false, false, undefined, undefined, WindowVariant.XTHIN); + this.window = addWindow(0, 0, this.optionWidth, options[this.shownOptions - 1].y + this.optionHeight + this.optionPaddingY, false, false, undefined, undefined, WindowVariant.XTHIN); this.add(this.window); this.add(options); this.add(this.cursorObj); this.setVisible(false); + + if (this.tooManyOptions) { + // Setting the last parameter to 1 turns out to be optimal in all cases. + this.dropDownScrollBar = new ScrollBar(this.window.width - 3, 5, 5, this.window.height - 10, 1); + this.add(this.dropDownScrollBar); + this.dropDownScrollBar.setTotalRows(this.totalOptions); + this.dropDownScrollBar.setScrollCursor(0); + } } getWidth(): number { @@ -359,7 +407,12 @@ export class DropDown extends Phaser.GameObjects.Container { return this.setCursor(this.defaultCursor); } - setCursor(cursor: integer): boolean { + setCursor(cursor: number): boolean { + + if (this.tooManyOptions) { + this.setLabels(cursor); + } + this.cursor = cursor; if (cursor < 0) { cursor = 0; @@ -382,6 +435,41 @@ export class DropDown extends Phaser.GameObjects.Container { return true; } + setLabels(cursor: number) { + + if ((cursor === 0) && (this.lastCursor === this.totalOptions - 1)) { + this.firstShown = 0; + } else if ((cursor === this.totalOptions - 1) && (this.lastCursor === 0)) { + this.firstShown = this.totalOptions - this.shownOptions; + } else if ((cursor - this.firstShown >= this.shownOptions) && (cursor > this.lastCursor)) { + this.firstShown += 1; + } else if ((cursor < this.firstShown) && (cursor < this.lastCursor)) { + this.firstShown -= 1; + } + + this.options.forEach((option, index) => { + + option.y = (index - this.firstShown) * (this.optionHeight + this.optionSpacing) + this.optionPaddingY; + + const baseX = this.cursorOffset + this.optionPaddingX + 3; + const baseY = this.optionHeight / 2; + option.setLabelPosition(baseX + 8, baseY); + if (this.dropDownType === DropDownType.SINGLE) { + option.setTogglePosition(baseX + 3, baseY + 1); + } else { + option.setTogglePosition(baseX, baseY); + } + + if ((index < this.firstShown) || ( index >= this.firstShown + this.shownOptions)) { + option.visible = false; + } else { + option.visible = true; + } + }); + + this.dropDownScrollBar.setScrollCursor(cursor); + } + /** * Switch the option at the provided index to its next state and update visuals * Update accordingly the other options if needed: @@ -541,6 +629,8 @@ export class DropDown extends Phaser.GameObjects.Container { } } } + + this.onChange(); } } @@ -586,7 +676,12 @@ export class DropDown extends Phaser.GameObjects.Container { x = this.options[i].getCurrentLabelX() ?? 0; } } - this.window.width = maxWidth + x - this.window.x + 6; + this.window.width = maxWidth + x - this.window.x + 9; + + if (this.tooManyOptions) { + this.window.width += 6; + this.dropDownScrollBar.x = this.window.width - 9; + } if (this.x + this.window.width > this.parentContainer.width) { this.x = this.parentContainer.width - this.window.width; diff --git a/src/ui/egg-counter-container.ts b/src/ui/egg-counter-container.ts index 21cebf5d97e..7bec7c97480 100644 --- a/src/ui/egg-counter-container.ts +++ b/src/ui/egg-counter-container.ts @@ -1,12 +1,13 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { addWindow } from "./ui-theme"; import { addTextObject, TextStyle } from "./text"; -import { EggCountChangedEvent, EggEventType } from "#app/events/egg"; -import EggHatchSceneHandler from "./egg-hatch-scene-handler"; +import type { EggCountChangedEvent } from "#app/events/egg"; +import { EggEventType } from "#app/events/egg"; +import type EggHatchSceneHandler from "./egg-hatch-scene-handler"; /** * A container that displays the count of hatching eggs. - * Extends Phaser.GameObjects.Container. + * @extends Phaser.GameObjects.Container */ export default class EggCounterContainer extends Phaser.GameObjects.Container { private readonly WINDOW_DEFAULT_WIDTH = 37; @@ -14,21 +15,18 @@ export default class EggCounterContainer extends Phaser.GameObjects.Container { private readonly WINDOW_HEIGHT = 26; private readonly onEggCountChangedEvent = (event: Event) => this.onEggCountChanged(event); - private battleScene: BattleScene; - private eggCount: integer; + private eggCount: number; private eggCountWindow: Phaser.GameObjects.NineSlice; public eggCountText: Phaser.GameObjects.Text; /** - * @param {BattleScene} scene - The scene to which this container belongs. - * @param {number} eggCount - The number of eggs to hatch. + * @param eggCount - The number of eggs to hatch. */ - constructor(scene: BattleScene, eggCount: integer) { - super(scene, 0, 0); + constructor(eggCount: number) { + super(globalScene, 0, 0); this.eggCount = eggCount; - this.battleScene = scene; - const uiHandler = this.battleScene.ui.getHandler() as EggHatchSceneHandler; + const uiHandler = globalScene.ui.getHandler() as EggHatchSceneHandler; uiHandler.eventTarget.addEventListener(EggEventType.EGG_COUNT_CHANGED, this.onEggCountChangedEvent); this.setup(); @@ -40,15 +38,15 @@ export default class EggCounterContainer extends Phaser.GameObjects.Container { private setup(): void { const windowWidth = this.eggCount > 9 ? this.WINDOW_MEDIUM_WIDTH : this.WINDOW_DEFAULT_WIDTH; - this.eggCountWindow = addWindow(this.battleScene, 5, 5, windowWidth, this.WINDOW_HEIGHT); + this.eggCountWindow = addWindow(5, 5, windowWidth, this.WINDOW_HEIGHT); this.setVisible(this.eggCount > 1); this.add(this.eggCountWindow); - const eggSprite = this.battleScene.add.sprite(19, 18, "egg", "egg_0"); + const eggSprite = globalScene.add.sprite(19, 18, "egg", "egg_0"); eggSprite.setScale(0.32); - this.eggCountText = addTextObject(this.battleScene, 28, 13, `${this.eggCount}`, TextStyle.MESSAGE, { fontSize: "66px" }); + this.eggCountText = addTextObject(28, 13, `${this.eggCount}`, TextStyle.MESSAGE, { fontSize: "66px" }); this.eggCountText.setName("text-egg-count"); this.add(eggSprite); @@ -66,7 +64,6 @@ export default class EggCounterContainer extends Phaser.GameObjects.Container { * Handles window size, the egg count to show, and whether it should be displayed. * * @param event {@linkcode Event} being sent - * @returns void */ private onEggCountChanged(event: Event): void { const eggCountChangedEvent = event as EggCountChangedEvent; diff --git a/src/ui/egg-gacha-ui-handler.ts b/src/ui/egg-gacha-ui-handler.ts index b14f5381a84..3cd8a7e8dc9 100644 --- a/src/ui/egg-gacha-ui-handler.ts +++ b/src/ui/egg-gacha-ui-handler.ts @@ -1,9 +1,9 @@ -import BattleScene from "../battle-scene"; import { Mode } from "./ui"; import { TextStyle, addTextObject, getEggTierTextTint, getTextStyleOptions } from "./text"; import MessageUiHandler from "./message-ui-handler"; import * as Utils from "../utils"; -import { Egg, getLegendaryGachaSpeciesForTimestamp, IEggOptions } from "../data/egg"; +import type { IEggOptions } from "../data/egg"; +import { Egg, getLegendaryGachaSpeciesForTimestamp } from "../data/egg"; import { VoucherType, getVoucherTypeIcon } from "../system/voucher"; import { getPokemonSpecies } from "../data/pokemon-species"; import { addWindow } from "./ui-theme"; @@ -13,6 +13,7 @@ import Overrides from "#app/overrides"; import { GachaType } from "#app/enums/gacha-types"; import i18next from "i18next"; import { EggTier } from "#enums/egg-type"; +import { globalScene } from "#app/global-scene"; export default class EggGachaUiHandler extends MessageUiHandler { private eggGachaContainer: Phaser.GameObjects.Container; @@ -29,7 +30,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { private voucherCountLabels: Phaser.GameObjects.Text[]; - private gachaCursor: integer; + private gachaCursor: number; private cursorObj: Phaser.GameObjects.Image; private transitioning: boolean; @@ -39,8 +40,8 @@ export default class EggGachaUiHandler extends MessageUiHandler { private scale: number = 0.1666666667; - constructor(scene: BattleScene) { - super(scene, Mode.EGG_GACHA); + constructor() { + super(Mode.EGG_GACHA); this.gachaContainers = []; this.gachaKnobs = []; @@ -53,29 +54,29 @@ export default class EggGachaUiHandler extends MessageUiHandler { setup() { this.gachaCursor = 0; - this.scale = getTextStyleOptions(TextStyle.WINDOW, this.scene.uiTheme).scale; + this.scale = getTextStyleOptions(TextStyle.WINDOW, globalScene.uiTheme).scale; const ui = this.getUi(); - this.eggGachaContainer = this.scene.add.container(0, -this.scene.game.canvas.height / 6); + this.eggGachaContainer = globalScene.add.container(0, -globalScene.game.canvas.height / 6); this.eggGachaContainer.setVisible(false); ui.add(this.eggGachaContainer); - const bg = this.scene.add.nineslice(0, 0, "default_bg", undefined, 320, 180, 0, 0, 16, 0); + const bg = globalScene.add.nineslice(0, 0, "default_bg", undefined, 320, 180, 0, 0, 16, 0); bg.setOrigin(0, 0); this.eggGachaContainer.add(bg); - const hatchFrameNames = this.scene.anims.generateFrameNames("gacha_hatch", { suffix: ".png", start: 1, end: 4 }); - if (!(this.scene.anims.exists("open"))) { - this.scene.anims.create({ + const hatchFrameNames = globalScene.anims.generateFrameNames("gacha_hatch", { suffix: ".png", start: 1, end: 4 }); + if (!(globalScene.anims.exists("open"))) { + globalScene.anims.create({ key: "open", frames: hatchFrameNames, frameRate: 12 }); } - if (!(this.scene.anims.exists("close"))) { - this.scene.anims.create({ + if (!(globalScene.anims.exists("close"))) { + globalScene.anims.create({ key: "close", frames: hatchFrameNames.reverse(), frameRate: 12 @@ -84,21 +85,21 @@ export default class EggGachaUiHandler extends MessageUiHandler { Utils.getEnumValues(GachaType).forEach((gachaType, g) => { const gachaTypeKey = GachaType[gachaType].toString().toLowerCase(); - const gachaContainer = this.scene.add.container(180 * g, 18); + const gachaContainer = globalScene.add.container(180 * g, 18); - const gacha = this.scene.add.sprite(0, 0, `gacha_${gachaTypeKey}`); + const gacha = globalScene.add.sprite(0, 0, `gacha_${gachaTypeKey}`); gacha.setOrigin(0, 0); - const gachaUnderlay = this.scene.add.sprite(115, 80, `gacha_underlay_${gachaTypeKey}`); + const gachaUnderlay = globalScene.add.sprite(115, 80, `gacha_underlay_${gachaTypeKey}`); gachaUnderlay.setOrigin(0, 0); - const gachaEggs = this.scene.add.sprite(0, 0, "gacha_eggs"); + const gachaEggs = globalScene.add.sprite(0, 0, "gacha_eggs"); gachaEggs.setOrigin(0, 0); - const gachaGlass = this.scene.add.sprite(0, 0, "gacha_glass"); + const gachaGlass = globalScene.add.sprite(0, 0, "gacha_glass"); gachaGlass.setOrigin(0, 0); - const gachaInfoContainer = this.scene.add.container(160, 46); + const gachaInfoContainer = globalScene.add.container(160, 46); const currentLanguage = i18next.resolvedLanguage ?? "en"; let gachaTextStyle = TextStyle.WINDOW_ALT; @@ -122,7 +123,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { legendaryLabelY = 0; } - const gachaUpLabel = addTextObject(this.scene, gachaX, gachaY, i18next.t("egg:legendaryUPGacha"), gachaTextStyle); + const gachaUpLabel = addTextObject(gachaX, gachaY, i18next.t("egg:legendaryUPGacha"), gachaTextStyle); gachaUpLabel.setOrigin(0, 0); gachaInfoContainer.add(gachaUpLabel); @@ -139,7 +140,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { } gachaUpLabel.setY(legendaryLabelY); - const pokemonIcon = this.scene.add.sprite(pokemonIconX, pokemonIconY, "pokemon_icons_0"); + const pokemonIcon = globalScene.add.sprite(pokemonIconX, pokemonIconY, "pokemon_icons_0"); if ([ "pt-BR" ].includes(currentLanguage)) { pokemonIcon.setX(pokemonIconX - 2); } @@ -170,9 +171,9 @@ export default class EggGachaUiHandler extends MessageUiHandler { break; } - const gachaKnob = this.scene.add.sprite(191, 89, "gacha_knob"); + const gachaKnob = globalScene.add.sprite(191, 89, "gacha_knob"); - const gachaHatch = this.scene.add.sprite(115, 73, "gacha_hatch"); + const gachaHatch = globalScene.add.sprite(115, 73, "gacha_hatch"); gachaHatch.setOrigin(0, 0); gachaContainer.add(gachaEggs); @@ -198,13 +199,13 @@ export default class EggGachaUiHandler extends MessageUiHandler { this.updateGachaInfo(g); }); - this.eggGachaOptionsContainer = this.scene.add.container(); + this.eggGachaOptionsContainer = globalScene.add.container(); - this.eggGachaOptionsContainer = this.scene.add.container((this.scene.game.canvas.width / 6), 148); + this.eggGachaOptionsContainer = globalScene.add.container((globalScene.game.canvas.width / 6), 148); this.eggGachaContainer.add(this.eggGachaOptionsContainer); - this.eggGachaOptionSelectBg = addWindow(this.scene, 0, 0, 96, 16 + 576 * this.scale); + this.eggGachaOptionSelectBg = addWindow(0, 0, 96, 16 + 576 * this.scale); this.eggGachaOptionSelectBg.setOrigin(1, 1); this.eggGachaOptionsContainer.add(this.eggGachaOptionSelectBg); @@ -231,7 +232,6 @@ export default class EggGachaUiHandler extends MessageUiHandler { }).join("\n"); const optionText = addTextObject( - this.scene, 0, 0, `${pullOptionsText}\n${i18next.t("menu:cancel")}`, @@ -246,7 +246,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { optionText.setPositionRelative(this.eggGachaOptionSelectBg, 16, 9); pullOptions.forEach((option, i) => { - const icon = this.scene.add.sprite(0, 0, "items", option.icon); + const icon = globalScene.add.sprite(0, 0, "items", option.icon); icon.setScale(3 * this.scale); icon.setPositionRelative(this.eggGachaOptionSelectBg, 20, 9 + (48 + i * 96) * this.scale); this.eggGachaOptionsContainer.add(icon); @@ -255,13 +255,13 @@ export default class EggGachaUiHandler extends MessageUiHandler { this.eggGachaContainer.add(this.eggGachaOptionsContainer); new Array(Utils.getEnumKeys(VoucherType).length).fill(null).map((_, i) => { - const container = this.scene.add.container((this.scene.game.canvas.width / 6) - 56 * i, 0); + const container = globalScene.add.container((globalScene.game.canvas.width / 6) - 56 * i, 0); - const bg = addWindow(this.scene, 0, 0, 56, 22); + const bg = addWindow(0, 0, 56, 22); bg.setOrigin(1, 0); container.add(bg); - const countLabel = addTextObject(this.scene, -48, 3, "0", TextStyle.WINDOW); + const countLabel = addTextObject(-48, 3, "0", TextStyle.WINDOW); countLabel.setOrigin(0, 0); container.add(countLabel); @@ -269,7 +269,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { const iconImage = getVoucherTypeIcon(i as VoucherType); - const icon = this.scene.add.sprite(-19, 2, "items", iconImage); + const icon = globalScene.add.sprite(-19, 2, "items", iconImage); icon.setOrigin(0, 0); icon.setScale(0.5); container.add(icon); @@ -277,25 +277,25 @@ export default class EggGachaUiHandler extends MessageUiHandler { this.eggGachaContainer.add(container); }); - this.eggGachaOverlay = this.scene.add.rectangle(0, 0, bg.displayWidth, bg.displayHeight, 0x000000); + this.eggGachaOverlay = globalScene.add.rectangle(0, 0, bg.displayWidth, bg.displayHeight, 0x000000); this.eggGachaOverlay.setOrigin(0, 0); this.eggGachaOverlay.setAlpha(0); this.eggGachaContainer.add(this.eggGachaOverlay); - this.eggGachaSummaryContainer = this.scene.add.container(0, 0); + this.eggGachaSummaryContainer = globalScene.add.container(0, 0); this.eggGachaSummaryContainer.setVisible(false); this.eggGachaContainer.add(this.eggGachaSummaryContainer); - const gachaMessageBoxContainer = this.scene.add.container(0, 148); + const gachaMessageBoxContainer = globalScene.add.container(0, 148); - const gachaMessageBox = addWindow(this.scene, 0, 0, 320, 32); + const gachaMessageBox = addWindow(0, 0, 320, 32); gachaMessageBox.setOrigin(0, 0); gachaMessageBoxContainer.add(gachaMessageBox); this.eggGachaMessageBox = gachaMessageBox; - const gachaMessageText = addTextObject(this.scene, 8, 8, "", TextStyle.WINDOW, { maxLines: 2 }); + const gachaMessageText = addTextObject(8, 8, "", TextStyle.WINDOW, { maxLines: 2 }); gachaMessageText.setOrigin(0, 0); gachaMessageBoxContainer.add(gachaMessageText); @@ -326,19 +326,19 @@ export default class EggGachaUiHandler extends MessageUiHandler { this.eggGachaContainer.setVisible(true); - handleTutorial(this.scene, Tutorial.Egg_Gacha); + handleTutorial(Tutorial.Egg_Gacha); return true; } - getDelayValue(delay: integer) { + getDelayValue(delay: number) { if (this.transitioning && this.transitionCancelled) { delay = Math.ceil(delay / 5); } return Utils.fixedInt(delay); } - pull(pullCount: integer = 0, count: integer = 0, eggs?: Egg[]): void { + pull(pullCount: number = 0, count: number = 0, eggs?: Egg[]): void { if (Overrides.EGG_GACHA_PULL_COUNT_OVERRIDE && !count) { pullCount = Overrides.EGG_GACHA_PULL_COUNT_OVERRIDE; } @@ -351,41 +351,41 @@ export default class EggGachaUiHandler extends MessageUiHandler { return this.showSummary(eggs!); } - const egg = this.scene.add.sprite(127, 75, "egg", `egg_${eggs![count].getKey()}`); + const egg = globalScene.add.sprite(127, 75, "egg", `egg_${eggs![count].getKey()}`); egg.setScale(0.5); this.gachaContainers[this.gachaCursor].add(egg); this.gachaContainers[this.gachaCursor].moveTo(egg, 2); const doPullAnim = () => { - this.scene.playSound("se/gacha_running", { loop: true }); - this.scene.time.delayedCall(this.getDelayValue(count ? 500 : 1250), () => { - this.scene.playSound("se/gacha_dispense"); - this.scene.time.delayedCall(this.getDelayValue(750), () => { - this.scene.sound.stopByKey("se/gacha_running"); - this.scene.tweens.add({ + globalScene.playSound("se/gacha_running", { loop: true }); + globalScene.time.delayedCall(this.getDelayValue(count ? 500 : 1250), () => { + globalScene.playSound("se/gacha_dispense"); + globalScene.time.delayedCall(this.getDelayValue(750), () => { + globalScene.sound.stopByKey("se/gacha_running"); + globalScene.tweens.add({ targets: egg, duration: this.getDelayValue(350), y: 95, ease: "Bounce.easeOut", onComplete: () => { - this.scene.time.delayedCall(this.getDelayValue(125), () => { - this.scene.playSound("se/pb_catch"); + globalScene.time.delayedCall(this.getDelayValue(125), () => { + globalScene.playSound("se/pb_catch"); this.gachaHatches[this.gachaCursor].play("open"); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: egg, duration: this.getDelayValue(350), scale: 0.75, ease: "Sine.easeIn" }); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: egg, y: 110, duration: this.getDelayValue(350), ease: "Back.easeOut", onComplete: () => { this.gachaHatches[this.gachaCursor].play("close"); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: egg, y: 200, duration: this.getDelayValue(350), @@ -408,20 +408,20 @@ export default class EggGachaUiHandler extends MessageUiHandler { }; if (!count) { - this.scene.playSound("se/gacha_dial"); - this.scene.tweens.add({ + globalScene.playSound("se/gacha_dial"); + globalScene.tweens.add({ targets: this.gachaKnobs[this.gachaCursor], duration: this.getDelayValue(350), angle: 90, ease: "Cubic.easeInOut", onComplete: () => { - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.gachaKnobs[this.gachaCursor], duration: this.getDelayValue(350), angle: 0, ease: "Sine.easeInOut" }); - this.scene.time.delayedCall(this.getDelayValue(350), doPullAnim); + globalScene.time.delayedCall(this.getDelayValue(350), doPullAnim); } }); } else { @@ -438,7 +438,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { if (!eggs) { eggs = []; for (let i = 1; i <= pullCount; i++) { - const eggOptions: IEggOptions = { scene: this.scene, pulled: true, sourceType: this.gachaCursor }; + const eggOptions: IEggOptions = { pulled: true, sourceType: this.gachaCursor }; // Before creating the last egg, check if the guaranteed egg tier was already generated // if not, override the egg tier @@ -456,9 +456,9 @@ export default class EggGachaUiHandler extends MessageUiHandler { eggs = Utils.randSeedShuffle(eggs); - (this.scene.currentBattle ? this.scene.gameData.saveAll(this.scene, true, true, true) : this.scene.gameData.saveSystem()).then(success => { + (globalScene.currentBattle ? globalScene.gameData.saveAll(true, true, true) : globalScene.gameData.saveSystem()).then(success => { if (!success) { - return this.scene.reset(true); + return globalScene.reset(true); } doPull(); }); @@ -490,7 +490,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { const eggScale = eggs.length < 20 ? 1 : 0.5; - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.eggGachaOverlay, alpha: 0.5, ease: "Sine.easeOut", @@ -508,13 +508,13 @@ export default class EggGachaUiHandler extends MessageUiHandler { const sliceWidth = this.eggGachaOverlay.displayWidth / (cols + 2); const sliceHeight = height / (rows + 2); const yOffset = (sliceHeight / 2 * (row / Math.max(rows - 1, 1))) + sliceHeight / 4; - const ret = this.scene.add.container(sliceWidth * (col + 1) + (sliceWidth * 0.5), sliceHeight * (row + 1) + yOffset); + const ret = globalScene.add.container(sliceWidth * (col + 1) + (sliceWidth * 0.5), sliceHeight * (row + 1) + yOffset); ret.setScale(0.0001); - const eggSprite = this.scene.add.sprite(0, 0, "egg", `egg_${egg.getKey()}`); + const eggSprite = globalScene.add.sprite(0, 0, "egg", `egg_${egg.getKey()}`); ret.add(eggSprite); - const eggText = addTextObject(this.scene, 0, 14, egg.getEggDescriptor(), TextStyle.PARTY, { align: "center" }); + const eggText = addTextObject(0, 14, egg.getEggDescriptor(), TextStyle.PARTY, { align: "center" }); eggText.setOrigin(0.5, 0); eggText.setTint(getEggTierTextTint(!egg.isManaphyEgg() ? egg.tier : EggTier.EPIC)); ret.add(eggText); @@ -527,8 +527,8 @@ export default class EggGachaUiHandler extends MessageUiHandler { // Otherwise show the eggs one by one with a small delay between each eggContainers.forEach((eggContainer, index) => { const delay = !this.transitionCancelled ? this.getDelayValue(index * 100) : 0; - this.scene.time.delayedCall(delay, () => - this.scene.tweens.add({ + globalScene.time.delayedCall(delay, () => + globalScene.tweens.add({ targets: eggContainer, duration: this.getDelayValue(350), scale: eggScale, @@ -548,7 +548,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { hideSummary() { this.setTransitioning(true); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: [ this.eggGachaOverlay, this.eggGachaSummaryContainer ], alpha: 0, duration: this.getDelayValue(250), @@ -568,21 +568,21 @@ export default class EggGachaUiHandler extends MessageUiHandler { const infoContainer = this.gachaInfoContainers[gachaType]; switch (gachaType as GachaType) { case GachaType.LEGENDARY: - const species = getPokemonSpecies(getLegendaryGachaSpeciesForTimestamp(this.scene, new Date().getTime())); + const species = getPokemonSpecies(getLegendaryGachaSpeciesForTimestamp(new Date().getTime())); const pokemonIcon = infoContainer.getAt(1) as Phaser.GameObjects.Sprite; pokemonIcon.setTexture(species.getIconAtlasKey(), species.getIconId(false)); break; } } - consumeVouchers(voucherType: VoucherType, count: integer): void { - this.scene.gameData.voucherCounts[voucherType] = Math.max(this.scene.gameData.voucherCounts[voucherType] - count, 0); + consumeVouchers(voucherType: VoucherType, count: number): void { + globalScene.gameData.voucherCounts[voucherType] = Math.max(globalScene.gameData.voucherCounts[voucherType] - count, 0); this.updateVoucherCounts(); } updateVoucherCounts(): void { this.voucherCountLabels.forEach((label, type) => { - label.setText(this.scene.gameData.voucherCounts[type].toString()); + label.setText(globalScene.gameData.voucherCounts[type].toString()); }); } @@ -641,10 +641,10 @@ export default class EggGachaUiHandler extends MessageUiHandler { case Button.ACTION: switch (this.cursor) { case 0: - if (!this.scene.gameData.voucherCounts[VoucherType.REGULAR] && !Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) { + if (!globalScene.gameData.voucherCounts[VoucherType.REGULAR] && !Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) { error = true; this.showError(i18next.t("egg:notEnoughVouchers")); - } else if (this.scene.gameData.eggs.length < 99 || Overrides.UNLIMITED_EGG_COUNT_OVERRIDE) { + } else if (globalScene.gameData.eggs.length < 99 || Overrides.UNLIMITED_EGG_COUNT_OVERRIDE) { if (!Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) { this.consumeVouchers(VoucherType.REGULAR, 1); } @@ -656,10 +656,10 @@ export default class EggGachaUiHandler extends MessageUiHandler { } break; case 2: - if (!this.scene.gameData.voucherCounts[VoucherType.PLUS] && !Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) { + if (!globalScene.gameData.voucherCounts[VoucherType.PLUS] && !Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) { error = true; this.showError(i18next.t("egg:notEnoughVouchers")); - } else if (this.scene.gameData.eggs.length < 95 || Overrides.UNLIMITED_EGG_COUNT_OVERRIDE) { + } else if (globalScene.gameData.eggs.length < 95 || Overrides.UNLIMITED_EGG_COUNT_OVERRIDE) { if (!Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) { this.consumeVouchers(VoucherType.PLUS, 1); } @@ -672,11 +672,11 @@ export default class EggGachaUiHandler extends MessageUiHandler { break; case 1: case 3: - if ((this.cursor === 1 && this.scene.gameData.voucherCounts[VoucherType.REGULAR] < 10 && !Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) - || (this.cursor === 3 && !this.scene.gameData.voucherCounts[VoucherType.PREMIUM] && !Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE)) { + if ((this.cursor === 1 && globalScene.gameData.voucherCounts[VoucherType.REGULAR] < 10 && !Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) + || (this.cursor === 3 && !globalScene.gameData.voucherCounts[VoucherType.PREMIUM] && !Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE)) { error = true; this.showError(i18next.t("egg:notEnoughVouchers")); - } else if (this.scene.gameData.eggs.length < 90 || Overrides.UNLIMITED_EGG_COUNT_OVERRIDE) { + } else if (globalScene.gameData.eggs.length < 90 || Overrides.UNLIMITED_EGG_COUNT_OVERRIDE) { if (this.cursor === 3) { if (!Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) { this.consumeVouchers(VoucherType.PREMIUM, 1); @@ -694,10 +694,10 @@ export default class EggGachaUiHandler extends MessageUiHandler { } break; case 4: - if (!this.scene.gameData.voucherCounts[VoucherType.GOLDEN] && !Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) { + if (!globalScene.gameData.voucherCounts[VoucherType.GOLDEN] && !Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) { error = true; this.showError(i18next.t("egg:notEnoughVouchers")); - } else if (this.scene.gameData.eggs.length < 75 || Overrides.UNLIMITED_EGG_COUNT_OVERRIDE) { + } else if (globalScene.gameData.eggs.length < 75 || Overrides.UNLIMITED_EGG_COUNT_OVERRIDE) { if (!Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) { this.consumeVouchers(VoucherType.GOLDEN, 1); } @@ -751,11 +751,11 @@ export default class EggGachaUiHandler extends MessageUiHandler { return success || error; } - setCursor(cursor: integer): boolean { + setCursor(cursor: number): boolean { const ret = super.setCursor(cursor); if (!this.cursorObj) { - this.cursorObj = this.scene.add.image(0, 0, "cursor"); + this.cursorObj = globalScene.add.image(0, 0, "cursor"); this.eggGachaOptionsContainer.add(this.cursorObj); } @@ -765,7 +765,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { return ret; } - setGachaCursor(cursor: integer): boolean { + setGachaCursor(cursor: number): boolean { const oldCursor = this.gachaCursor; const changed = oldCursor !== cursor; @@ -775,7 +775,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { this.setTransitioning(true); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.gachaContainers, duration: this.eggGachaContainer.visible ? 500 : 0, x: (_target, _key, _value, index) => 180 * (index - cursor), diff --git a/src/ui/egg-hatch-scene-handler.ts b/src/ui/egg-hatch-scene-handler.ts index 1bf58a786e1..791c488c91a 100644 --- a/src/ui/egg-hatch-scene-handler.ts +++ b/src/ui/egg-hatch-scene-handler.ts @@ -1,8 +1,8 @@ -import BattleScene from "../battle-scene"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import { Button } from "#enums/buttons"; import { EggHatchPhase } from "#app/phases/egg-hatch-phase"; +import { globalScene } from "#app/global-scene"; export default class EggHatchSceneHandler extends UiHandler { public eggHatchContainer: Phaser.GameObjects.Container; @@ -15,17 +15,17 @@ export default class EggHatchSceneHandler extends UiHandler { */ public readonly eventTarget: EventTarget = new EventTarget(); - constructor(scene: BattleScene) { - super(scene, Mode.EGG_HATCH_SCENE); + constructor() { + super(Mode.EGG_HATCH_SCENE); } setup() { - this.eggHatchContainer = this.scene.add.container(0, -this.scene.game.canvas.height / 6); - this.scene.fieldUI.add(this.eggHatchContainer); + this.eggHatchContainer = globalScene.add.container(0, -globalScene.game.canvas.height / 6); + globalScene.fieldUI.add(this.eggHatchContainer); - const eggLightraysAnimFrames = this.scene.anims.generateFrameNames("egg_lightrays", { start: 0, end: 3 }); - if (!(this.scene.anims.exists("egg_lightrays"))) { - this.scene.anims.create({ + const eggLightraysAnimFrames = globalScene.anims.generateFrameNames("egg_lightrays", { start: 0, end: 3 }); + if (!(globalScene.anims.exists("egg_lightrays"))) { + globalScene.anims.create({ key: "egg_lightrays", frames: eggLightraysAnimFrames, frameRate: 32 @@ -38,23 +38,23 @@ export default class EggHatchSceneHandler extends UiHandler { this.getUi().showText("", 0); - this.scene.setModifiersVisible(false); + globalScene.setModifiersVisible(false); return true; } processInput(button: Button): boolean { if (button === Button.ACTION || button === Button.CANCEL) { - const phase = this.scene.getCurrentPhase(); + const phase = globalScene.getCurrentPhase(); if (phase instanceof EggHatchPhase && phase.trySkip()) { return true; } } - return this.scene.ui.getMessageHandler().processInput(button); + return globalScene.ui.getMessageHandler().processInput(button); } - setCursor(_cursor: integer): boolean { + setCursor(_cursor: number): boolean { return false; } diff --git a/src/ui/egg-list-ui-handler.ts b/src/ui/egg-list-ui-handler.ts index 939f95fabe6..1b25d55d96d 100644 --- a/src/ui/egg-list-ui-handler.ts +++ b/src/ui/egg-list-ui-handler.ts @@ -1,4 +1,3 @@ -import BattleScene from "#app/battle-scene"; import { Mode } from "#app/ui/ui"; import PokemonIconAnimHandler, { PokemonIconAnimMode } from "#app/ui/pokemon-icon-anim-handler"; import { TextStyle, addTextObject } from "#app/ui/text"; @@ -8,6 +7,7 @@ import { Button } from "#enums/buttons"; import i18next from "i18next"; import ScrollableGridUiHandler from "#app/ui/scrollable-grid-handler"; import { ScrollBar } from "#app/ui/scroll-bar"; +import { globalScene } from "#app/global-scene"; export default class EggListUiHandler extends MessageUiHandler { private readonly ROWS = 9; @@ -28,59 +28,59 @@ export default class EggListUiHandler extends MessageUiHandler { private iconAnimHandler: PokemonIconAnimHandler; - constructor(scene: BattleScene) { - super(scene, Mode.EGG_LIST); + constructor() { + super(Mode.EGG_LIST); } setup() { const ui = this.getUi(); - this.eggListContainer = this.scene.add.container(0, -this.scene.game.canvas.height / 6); + this.eggListContainer = globalScene.add.container(0, -globalScene.game.canvas.height / 6); this.eggListContainer.setVisible(false); ui.add(this.eggListContainer); - const bgColor = this.scene.add.rectangle(0, 0, this.scene.game.canvas.width / 6, this.scene.game.canvas.height / 6, 0x006860); + const bgColor = globalScene.add.rectangle(0, 0, globalScene.game.canvas.width / 6, globalScene.game.canvas.height / 6, 0x006860); bgColor.setOrigin(0, 0); this.eggListContainer.add(bgColor); - const eggListBg = this.scene.add.image(0, 0, "egg_list_bg"); + const eggListBg = globalScene.add.image(0, 0, "egg_list_bg"); eggListBg.setOrigin(0, 0); this.eggListContainer.add(eggListBg); - this.eggListContainer.add(addWindow(this.scene, 1, 85, 106, 22)); - this.eggListContainer.add(addWindow(this.scene, 1, 102, 106, 50, true)); - this.eggListContainer.add(addWindow(this.scene, 1, 147, 106, 32, true)); - this.eggListContainer.add(addWindow(this.scene, 107, 1, 212, 178)); + this.eggListContainer.add(addWindow(1, 85, 106, 22)); + this.eggListContainer.add(addWindow(1, 102, 106, 50, true)); + this.eggListContainer.add(addWindow(1, 147, 106, 32, true)); + this.eggListContainer.add(addWindow(107, 1, 212, 178)); this.iconAnimHandler = new PokemonIconAnimHandler(); - this.iconAnimHandler.setup(this.scene); + this.iconAnimHandler.setup(); - this.eggNameText = addTextObject(this.scene, 8, 68, "", TextStyle.SUMMARY); + this.eggNameText = addTextObject(8, 68, "", TextStyle.SUMMARY); this.eggNameText.setOrigin(0, 0); this.eggListContainer.add(this.eggNameText); - this.eggDateText = addTextObject(this.scene, 8, 91, "", TextStyle.TOOLTIP_CONTENT); + this.eggDateText = addTextObject(8, 91, "", TextStyle.TOOLTIP_CONTENT); this.eggListContainer.add(this.eggDateText); - this.eggHatchWavesText = addTextObject(this.scene, 8, 108, "", TextStyle.TOOLTIP_CONTENT); + this.eggHatchWavesText = addTextObject(8, 108, "", TextStyle.TOOLTIP_CONTENT); this.eggHatchWavesText.setWordWrapWidth(540); this.eggListContainer.add(this.eggHatchWavesText); - this.eggGachaInfoText = addTextObject(this.scene, 8, 152, "", TextStyle.TOOLTIP_CONTENT); + this.eggGachaInfoText = addTextObject(8, 152, "", TextStyle.TOOLTIP_CONTENT); this.eggGachaInfoText.setWordWrapWidth(540); this.eggListContainer.add(this.eggGachaInfoText); - this.eggListIconContainer = this.scene.add.container(113, 5); + this.eggListIconContainer = globalScene.add.container(113, 5); this.eggListContainer.add(this.eggListIconContainer); - this.cursorObj = this.scene.add.image(0, 0, "select_cursor"); + this.cursorObj = globalScene.add.image(0, 0, "select_cursor"); this.cursorObj.setOrigin(0, 0); this.eggListContainer.add(this.cursorObj); - this.eggSprite = this.scene.add.sprite(54, 37, "egg"); + this.eggSprite = globalScene.add.sprite(54, 37, "egg"); this.eggListContainer.add(this.eggSprite); - const scrollBar = new ScrollBar(this.scene, 310, 5, 4, 170, this.ROWS); + const scrollBar = new ScrollBar(310, 5, 4, 170, this.ROWS); this.eggListContainer.add(scrollBar); this.scrollGridHandler = new ScrollableGridUiHandler(this, this.ROWS, this.COLUMNS) @@ -88,15 +88,15 @@ export default class EggListUiHandler extends MessageUiHandler { .withUpdateGridCallBack(() => this.updateEggIcons()) .withUpdateSingleElementCallback((i:number) => this.setEggDetails(i)); - this.eggListMessageBoxContainer = this.scene.add.container(0, this.scene.game.canvas.height / 6); + this.eggListMessageBoxContainer = globalScene.add.container(0, globalScene.game.canvas.height / 6); this.eggListMessageBoxContainer.setVisible(false); this.eggListContainer.add(this.eggListMessageBoxContainer); - const eggListMessageBox = addWindow(this.scene, 1, -1, 318, 28); + const eggListMessageBox = addWindow(1, -1, 318, 28); eggListMessageBox.setOrigin(0, 1); this.eggListMessageBoxContainer.add(eggListMessageBox); - this.message = addTextObject(this.scene, 8, -8, "", TextStyle.WINDOW, { maxLines: 1 }); + this.message = addTextObject(8, -8, "", TextStyle.WINDOW, { maxLines: 1 }); this.message.setOrigin(0, 1); this.eggListMessageBoxContainer.add(this.message); @@ -112,7 +112,7 @@ export default class EggListUiHandler extends MessageUiHandler { this.eggListContainer.setVisible(true); - this.scrollGridHandler.setTotalElements(this.scene.gameData.eggs.length); + this.scrollGridHandler.setTotalElements(globalScene.gameData.eggs.length); this.updateEggIcons(); this.setCursor(0); @@ -125,10 +125,10 @@ export default class EggListUiHandler extends MessageUiHandler { */ private initEggIcons() { this.eggIcons = []; - for (let i = 0; i < Math.min(this.ROWS * this.COLUMNS, this.scene.gameData.eggs.length); i++) { + for (let i = 0; i < Math.min(this.ROWS * this.COLUMNS, globalScene.gameData.eggs.length); i++) { const x = (i % this.COLUMNS) * 18; const y = Math.floor(i / this.COLUMNS) * 18; - const icon = this.scene.add.sprite(x - 2, y + 2, "egg_icons"); + const icon = globalScene.add.sprite(x - 2, y + 2, "egg_icons"); icon.setScale(0.5); icon.setOrigin(0, 0); this.eggListIconContainer.add(icon); @@ -141,14 +141,14 @@ export default class EggListUiHandler extends MessageUiHandler { */ private updateEggIcons() { const indexOffset = this.scrollGridHandler.getItemOffset(); - const eggsToShow = Math.min(this.eggIcons.length, this.scene.gameData.eggs.length - indexOffset); + const eggsToShow = Math.min(this.eggIcons.length, globalScene.gameData.eggs.length - indexOffset); this.eggIcons.forEach((icon, i) => { if (i !== this.cursor) { this.iconAnimHandler.addOrUpdate(icon, PokemonIconAnimMode.NONE); } if (i < eggsToShow) { - const egg = this.scene.gameData.eggs[i + indexOffset]; + const egg = globalScene.gameData.eggs[i + indexOffset]; icon.setFrame(egg.getKey()); icon.setVisible(true); } else { @@ -162,7 +162,7 @@ export default class EggListUiHandler extends MessageUiHandler { * @param index which egg in the list to display the info for */ private setEggDetails(index: number): void { - const egg = this.scene.gameData.eggs[index]; + const egg = globalScene.gameData.eggs[index]; this.eggSprite.setFrame(`egg_${egg.getKey()}`); this.eggNameText.setText(`${i18next.t("egg:egg")} (${egg.getEggDescriptor()})`); this.eggDateText.setText( @@ -174,7 +174,7 @@ export default class EggListUiHandler extends MessageUiHandler { }) ); this.eggHatchWavesText.setText(egg.getEggHatchWavesMessage()); - this.eggGachaInfoText.setText(egg.getEggTypeDescriptor(this.scene)); + this.eggGachaInfoText.setText(egg.getEggTypeDescriptor()); } processInput(button: Button): boolean { diff --git a/src/ui/egg-summary-ui-handler.ts b/src/ui/egg-summary-ui-handler.ts index da93168926e..04b31ab9ca8 100644 --- a/src/ui/egg-summary-ui-handler.ts +++ b/src/ui/egg-summary-ui-handler.ts @@ -1,4 +1,3 @@ -import BattleScene from "../battle-scene"; import { Mode } from "./ui"; import PokemonIconAnimHandler, { PokemonIconAnimMode } from "./pokemon-icon-anim-handler"; import MessageUiHandler from "./message-ui-handler"; @@ -6,10 +5,11 @@ import { getEggTierForSpecies } from "../data/egg"; import { Button } from "#enums/buttons"; import PokemonHatchInfoContainer from "./pokemon-hatch-info-container"; import { EggSummaryPhase } from "#app/phases/egg-summary-phase"; -import { EggHatchData } from "#app/data/egg-hatch-data"; +import type { EggHatchData } from "#app/data/egg-hatch-data"; import ScrollableGridUiHandler from "./scrollable-grid-handler"; import { HatchedPokemonContainer } from "./hatched-pokemon-container"; import { ScrollBar } from "#app/ui/scroll-bar"; +import { globalScene } from "#app/global-scene"; const iconContainerX = 112; const iconContainerY = 9; @@ -53,43 +53,43 @@ export default class EggSummaryUiHandler extends MessageUiHandler { */ public readonly eventTarget: EventTarget = new EventTarget(); - constructor(scene: BattleScene) { - super(scene, Mode.EGG_HATCH_SUMMARY); + constructor() { + super(Mode.EGG_HATCH_SUMMARY); } setup() { const ui = this.getUi(); - this.summaryContainer = this.scene.add.container(0, -this.scene.game.canvas.height / 6); + this.summaryContainer = globalScene.add.container(0, -globalScene.game.canvas.height / 6); this.summaryContainer.setVisible(false); ui.add(this.summaryContainer); - this.eggHatchContainer = this.scene.add.container(0, -this.scene.game.canvas.height / 6); + this.eggHatchContainer = globalScene.add.container(0, -globalScene.game.canvas.height / 6); this.eggHatchContainer.setVisible(false); ui.add(this.eggHatchContainer); this.iconAnimHandler = new PokemonIconAnimHandler(); - this.iconAnimHandler.setup(this.scene); + this.iconAnimHandler.setup(); - this.eggHatchBg = this.scene.add.image(0, 0, "egg_summary_bg"); + this.eggHatchBg = globalScene.add.image(0, 0, "egg_summary_bg"); this.eggHatchBg.setOrigin(0, 0); this.eggHatchContainer.add(this.eggHatchBg); - this.cursorObj = this.scene.add.image(0, 0, "select_cursor"); + this.cursorObj = globalScene.add.image(0, 0, "select_cursor"); this.cursorObj.setOrigin(0, 0); this.summaryContainer.add(this.cursorObj); this.pokemonContainers = []; - this.pokemonIconsContainer = this.scene.add.container(iconContainerX, iconContainerY); + this.pokemonIconsContainer = globalScene.add.container(iconContainerX, iconContainerY); this.summaryContainer.add(this.pokemonIconsContainer); - this.infoContainer = new PokemonHatchInfoContainer(this.scene, this.summaryContainer); + this.infoContainer = new PokemonHatchInfoContainer(this.summaryContainer); this.infoContainer.setup(); this.infoContainer.changeToEggSummaryLayout(); this.infoContainer.setVisible(true); this.summaryContainer.add(this.infoContainer); - const scrollBar = new ScrollBar(this.scene, iconContainerX + numCols * iconSize, iconContainerY + 3, 4, this.scene.game.canvas.height / 6 - 20, numRows); + const scrollBar = new ScrollBar(iconContainerX + numCols * iconSize, iconContainerY + 3, 4, globalScene.game.canvas.height / 6 - 20, numRows); this.summaryContainer.add(scrollBar); this.scrollGridHandler = new ScrollableGridUiHandler(this, numRows, numCols) @@ -112,19 +112,19 @@ export default class EggSummaryUiHandler extends MessageUiHandler { this.getUi().hideTooltip(); // Note: Questions on garbage collection go to @frutescens - const activeKeys = this.scene.getActiveKeys(); + const activeKeys = globalScene.getActiveKeys(); // Removing unnecessary sprites from animation manager - const animKeys = Object.keys(this.scene.anims["anims"]["entries"]); + const animKeys = Object.keys(globalScene.anims["anims"]["entries"]); animKeys.forEach(key => { if (key.startsWith("pkmn__") && !activeKeys.includes(key)) { - this.scene.anims.remove(key); + globalScene.anims.remove(key); } }); // Removing unnecessary cries from audio cache - const audioKeys = Object.keys(this.scene.cache.audio.entries.entries); + const audioKeys = Object.keys(globalScene.cache.audio.entries.entries); audioKeys.forEach(key => { if (key.startsWith("cry/") && !activeKeys.includes(key)) { - delete this.scene.cache.audio.entries.entries[key]; + delete globalScene.cache.audio.entries.entries[key]; } }); // Clears eggHatchData in EggSummaryUiHandler @@ -170,13 +170,13 @@ export default class EggSummaryUiHandler extends MessageUiHandler { this.updatePokemonIcons(); this.setCursor(0); - this.scene.playSoundWithoutBgm("evolution_fanfare"); + globalScene.playSoundWithoutBgm("evolution_fanfare"); // Prevent exiting the egg summary for 2 seconds if the egg hatching // was skipped automatically and for 1 second otherwise - const exitBlockingDuration = (this.scene.eggSkipPreference === 2) ? 2000 : 1000; + const exitBlockingDuration = (globalScene.eggSkipPreference === 2) ? 2000 : 1000; this.blockExit = true; - this.scene.time.delayedCall(exitBlockingDuration, () => this.blockExit = false); + globalScene.time.delayedCall(exitBlockingDuration, () => this.blockExit = false); return true; } @@ -196,7 +196,7 @@ export default class EggSummaryUiHandler extends MessageUiHandler { if (!hatchContainer) { const x = (i % numCols) * iconSize; const y = Math.floor(i / numCols) * iconSize; - hatchContainer = new HatchedPokemonContainer(this.scene, x, y, hatchData).setVisible(false); + hatchContainer = new HatchedPokemonContainer(x, y, hatchData).setVisible(false); this.pokemonContainers.push(hatchContainer); this.pokemonIconsContainer.add(hatchContainer); } @@ -216,7 +216,7 @@ export default class EggSummaryUiHandler extends MessageUiHandler { let error = false; if (button === Button.CANCEL) { if (!this.blockExit) { - const phase = this.scene.getCurrentPhase(); + const phase = globalScene.getCurrentPhase(); if (phase instanceof EggSummaryPhase) { phase.end(); } diff --git a/src/ui/evolution-scene-handler.ts b/src/ui/evolution-scene-handler.ts index a116a33f373..b35aa8f6cc0 100644 --- a/src/ui/evolution-scene-handler.ts +++ b/src/ui/evolution-scene-handler.ts @@ -1,8 +1,8 @@ -import BattleScene from "../battle-scene"; import MessageUiHandler from "./message-ui-handler"; import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; import { Button } from "#enums/buttons"; +import { globalScene } from "#app/global-scene"; export default class EvolutionSceneHandler extends MessageUiHandler { public evolutionContainer: Phaser.GameObjects.Container; @@ -11,8 +11,8 @@ export default class EvolutionSceneHandler extends MessageUiHandler { public canCancel: boolean; public cancelled: boolean; - constructor(scene: BattleScene) { - super(scene, Mode.EVOLUTION_SCENE); + constructor() { + super(Mode.EVOLUTION_SCENE); } setup() { @@ -21,21 +21,21 @@ export default class EvolutionSceneHandler extends MessageUiHandler { const ui = this.getUi(); - this.evolutionContainer = this.scene.add.container(0, -this.scene.game.canvas.height / 6); + this.evolutionContainer = globalScene.add.container(0, -globalScene.game.canvas.height / 6); ui.add(this.evolutionContainer); - const messageBg = this.scene.add.sprite(0, 0, "bg", this.scene.windowType); + const messageBg = globalScene.add.sprite(0, 0, "bg", globalScene.windowType); messageBg.setOrigin(0, 1); messageBg.setVisible(false); ui.add(messageBg); this.messageBg = messageBg; - this.messageContainer = this.scene.add.container(12, -39); + this.messageContainer = globalScene.add.container(12, -39); this.messageContainer.setVisible(false); ui.add(this.messageContainer); - const message = addTextObject(this.scene, 0, 0, "", TextStyle.MESSAGE, { + const message = addTextObject(0, 0, "", TextStyle.MESSAGE, { maxLines: 2, wordWrap: { width: 1780 @@ -51,9 +51,9 @@ export default class EvolutionSceneHandler extends MessageUiHandler { show(_args: any[]): boolean { super.show(_args); - this.scene.ui.bringToTop(this.evolutionContainer); - this.scene.ui.bringToTop(this.messageBg); - this.scene.ui.bringToTop(this.messageContainer); + globalScene.ui.bringToTop(this.evolutionContainer); + globalScene.ui.bringToTop(this.messageBg); + globalScene.ui.bringToTop(this.messageContainer); this.messageBg.setVisible(true); this.messageContainer.setVisible(true); @@ -82,7 +82,7 @@ export default class EvolutionSceneHandler extends MessageUiHandler { return false; } - setCursor(_cursor: integer): boolean { + setCursor(_cursor: number): boolean { return false; } diff --git a/src/ui/fight-ui-handler.ts b/src/ui/fight-ui-handler.ts index eaf504495d5..8e8b197117c 100644 --- a/src/ui/fight-ui-handler.ts +++ b/src/ui/fight-ui-handler.ts @@ -1,4 +1,5 @@ -import BattleScene, { InfoToggle } from "../battle-scene"; +import type { InfoToggle } from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { addTextObject, TextStyle } from "./text"; import { getTypeDamageMultiplierColor } from "#app/data/type"; import { Type } from "#enums/type"; @@ -9,8 +10,9 @@ import * as Utils from "../utils"; import { MoveCategory } from "#app/data/move"; import i18next from "i18next"; import { Button } from "#enums/buttons"; -import Pokemon, { PokemonMove } from "#app/field/pokemon"; -import { CommandPhase } from "#app/phases/command-phase"; +import type { PokemonMove } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; +import type { CommandPhase } from "#app/phases/command-phase"; import MoveInfoOverlay from "./move-info-overlay"; import { BattleType } from "#app/battle"; @@ -30,94 +32,96 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { private moveCategoryIcon: Phaser.GameObjects.Sprite; private moveInfoOverlay : MoveInfoOverlay; - protected fieldIndex: integer = 0; - protected cursor2: integer = 0; + protected fieldIndex: number = 0; + protected fromCommand: Command = Command.FIGHT; + protected cursor2: number = 0; - constructor(scene: BattleScene) { - super(scene, Mode.FIGHT); + constructor() { + super(Mode.FIGHT); } setup() { const ui = this.getUi(); - this.movesContainer = this.scene.add.container(18, -38.7); + this.movesContainer = globalScene.add.container(18, -38.7); this.movesContainer.setName(FightUiHandler.MOVES_CONTAINER_NAME); ui.add(this.movesContainer); - this.moveInfoContainer = this.scene.add.container(1, 0); + this.moveInfoContainer = globalScene.add.container(1, 0); this.moveInfoContainer.setName("move-info"); ui.add(this.moveInfoContainer); - this.typeIcon = this.scene.add.sprite(this.scene.scaledCanvas.width - 57, -36, Utils.getLocalizedSpriteKey("types"), "unknown"); + this.typeIcon = globalScene.add.sprite(globalScene.scaledCanvas.width - 57, -36, Utils.getLocalizedSpriteKey("types"), "unknown"); this.typeIcon.setVisible(false); this.moveInfoContainer.add(this.typeIcon); - this.moveCategoryIcon = this.scene.add.sprite(this.scene.scaledCanvas.width - 25, -36, "categories", "physical"); + this.moveCategoryIcon = globalScene.add.sprite(globalScene.scaledCanvas.width - 25, -36, "categories", "physical"); this.moveCategoryIcon.setVisible(false); this.moveInfoContainer.add(this.moveCategoryIcon); - this.ppLabel = addTextObject(this.scene, this.scene.scaledCanvas.width - 70, -26, "PP", TextStyle.MOVE_INFO_CONTENT); + this.ppLabel = addTextObject(globalScene.scaledCanvas.width - 70, -26, "PP", TextStyle.MOVE_INFO_CONTENT); this.ppLabel.setOrigin(0.0, 0.5); this.ppLabel.setVisible(false); this.ppLabel.setText(i18next.t("fightUiHandler:pp")); this.moveInfoContainer.add(this.ppLabel); - this.ppText = addTextObject(this.scene, this.scene.scaledCanvas.width - 12, -26, "--/--", TextStyle.MOVE_INFO_CONTENT); + this.ppText = addTextObject(globalScene.scaledCanvas.width - 12, -26, "--/--", TextStyle.MOVE_INFO_CONTENT); this.ppText.setOrigin(1, 0.5); this.ppText.setVisible(false); this.moveInfoContainer.add(this.ppText); - this.powerLabel = addTextObject(this.scene, this.scene.scaledCanvas.width - 70, -18, "POWER", TextStyle.MOVE_INFO_CONTENT); + this.powerLabel = addTextObject(globalScene.scaledCanvas.width - 70, -18, "POWER", TextStyle.MOVE_INFO_CONTENT); this.powerLabel.setOrigin(0.0, 0.5); this.powerLabel.setVisible(false); this.powerLabel.setText(i18next.t("fightUiHandler:power")); this.moveInfoContainer.add(this.powerLabel); - this.powerText = addTextObject(this.scene, this.scene.scaledCanvas.width - 12, -18, "---", TextStyle.MOVE_INFO_CONTENT); + this.powerText = addTextObject(globalScene.scaledCanvas.width - 12, -18, "---", TextStyle.MOVE_INFO_CONTENT); this.powerText.setOrigin(1, 0.5); this.powerText.setVisible(false); this.moveInfoContainer.add(this.powerText); - this.accuracyLabel = addTextObject(this.scene, this.scene.scaledCanvas.width - 70, -10, "ACC", TextStyle.MOVE_INFO_CONTENT); + this.accuracyLabel = addTextObject(globalScene.scaledCanvas.width - 70, -10, "ACC", TextStyle.MOVE_INFO_CONTENT); this.accuracyLabel.setOrigin(0.0, 0.5); this.accuracyLabel.setVisible(false); this.accuracyLabel.setText(i18next.t("fightUiHandler:accuracy")); this.moveInfoContainer.add(this.accuracyLabel); - this.accuracyText = addTextObject(this.scene, this.scene.scaledCanvas.width - 12, -10, "---", TextStyle.MOVE_INFO_CONTENT); + this.accuracyText = addTextObject(globalScene.scaledCanvas.width - 12, -10, "---", TextStyle.MOVE_INFO_CONTENT); this.accuracyText.setOrigin(1, 0.5); this.accuracyText.setVisible(false); this.moveInfoContainer.add(this.accuracyText); // prepare move overlay const overlayScale = 1; - this.moveInfoOverlay = new MoveInfoOverlay(this.scene, { + this.moveInfoOverlay = new MoveInfoOverlay({ delayVisibility: true, scale: overlayScale, onSide: true, right: true, x: 0, y: -MoveInfoOverlay.getHeight(overlayScale, true), - width: (this.scene.game.canvas.width / 6) + 4, + width: (globalScene.game.canvas.width / 6) + 4, hideEffectBox: true, hideBg: true }); ui.add(this.moveInfoOverlay); // register the overlay to receive toggle events - this.scene.addInfoToggle(this.moveInfoOverlay); - this.scene.addInfoToggle(this); + globalScene.addInfoToggle(this.moveInfoOverlay); + globalScene.addInfoToggle(this); } show(args: any[]): boolean { super.show(args); - this.fieldIndex = args.length ? args[0] as integer : 0; + this.fieldIndex = args.length ? args[0] as number : 0; + this.fromCommand = args.length > 1 ? args[1] as Command : Command.FIGHT; const messageHandler = this.getUi().getMessageHandler(); messageHandler.bg.setVisible(false); messageHandler.commandWindow.setVisible(false); messageHandler.movesWindowContainer.setVisible(true); - const pokemon = (this.scene.getCurrentPhase() as CommandPhase).getPokemon(); + const pokemon = (globalScene.getCurrentPhase() as CommandPhase).getPokemon(); if (pokemon.battleSummonData.turnCount <= 1) { this.setCursor(0); } else { @@ -138,14 +142,14 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { if (button === Button.CANCEL || button === Button.ACTION) { if (button === Button.ACTION) { - if ((this.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, cursor, false)) { + if ((globalScene.getCurrentPhase() as CommandPhase).handleCommand(this.fromCommand, cursor, false)) { success = true; } else { ui.playError(); } } else { // Cannot back out of fight menu if skipToFightInput is enabled - const { battleType, mysteryEncounter } = this.scene.currentBattle; + const { battleType, mysteryEncounter } = globalScene.currentBattle; if (battleType !== BattleType.MYSTERY_ENCOUNTER || !mysteryEncounter?.skipToFightInput) { ui.setMode(Mode.COMMAND, this.fieldIndex); success = true; @@ -188,7 +192,7 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { this.movesContainer.setVisible(false); this.cursorObj?.setVisible(false); } - this.scene.tweens.add({ + globalScene.tweens.add({ targets: [ this.movesContainer, this.cursorObj ], duration: Utils.fixedInt(125), ease: "Sine.easeInOut", @@ -204,11 +208,11 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { return this.active; } - getCursor(): integer { + getCursor(): number { return !this.fieldIndex ? this.cursor : this.cursor2; } - setCursor(cursor: integer): boolean { + setCursor(cursor: number): boolean { const ui = this.getUi(); this.moveInfoOverlay.clear(); @@ -222,11 +226,13 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { } if (!this.cursorObj) { - this.cursorObj = this.scene.add.image(0, 0, "cursor"); + const isTera = this.fromCommand === Command.TERA; + this.cursorObj = globalScene.add.image(0, 0, isTera ? "cursor_tera" : "cursor"); + this.cursorObj.setScale(isTera ? 0.7 : 1); ui.add(this.cursorObj); } - const pokemon = (this.scene.getCurrentPhase() as CommandPhase).getPokemon(); + const pokemon = (globalScene.getCurrentPhase() as CommandPhase).getPokemon(); const moveset = pokemon.getMoveset(); const hasMove = cursor < moveset.length; @@ -300,11 +306,11 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { } displayMoves() { - const pokemon = (this.scene.getCurrentPhase() as CommandPhase).getPokemon(); + const pokemon = (globalScene.getCurrentPhase() as CommandPhase).getPokemon(); const moveset = pokemon.getMoveset(); for (let moveIndex = 0; moveIndex < 4; moveIndex++) { - const moveText = addTextObject(this.scene, moveIndex % 2 === 0 ? 0 : 100, moveIndex < 2 ? 0 : 16, "-", TextStyle.WINDOW); + const moveText = addTextObject(moveIndex % 2 === 0 ? 0 : 100, moveIndex < 2 ? 0 : 16, "-", TextStyle.WINDOW); moveText.setName("text-empty-move"); if (moveIndex < moveset.length) { @@ -324,7 +330,7 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { * @returns A color or undefined if the default color should be used */ private getMoveColor(pokemon: Pokemon, pokemonMove: PokemonMove): string | undefined { - if (!this.scene.typeHints) { + if (!globalScene.typeHints) { return undefined; } @@ -362,7 +368,7 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { clearMoves() { this.movesContainer.removeAll(true); - const opponents = (this.scene.getCurrentPhase() as CommandPhase).getPokemon().getOpponents(); + const opponents = (globalScene.getCurrentPhase() as CommandPhase).getPokemon().getOpponents(); opponents.forEach((opponent) => { opponent.updateEffectiveness(undefined); }); diff --git a/src/ui/filter-bar.ts b/src/ui/filter-bar.ts index bcf7409fce0..8ef910f954a 100644 --- a/src/ui/filter-bar.ts +++ b/src/ui/filter-bar.ts @@ -1,13 +1,15 @@ -import BattleScene from "#app/battle-scene"; -import { DropDown, DropDownType } from "./dropdown"; -import { StarterContainer } from "./starter-container"; +import type { DropDown } from "./dropdown"; +import { DropDownType } from "./dropdown"; +import type { StarterContainer } from "./starter-container"; import { addTextObject, getTextColor, TextStyle } from "./text"; -import { UiTheme } from "#enums/ui-theme"; +import type { UiTheme } from "#enums/ui-theme"; import { addWindow, WindowVariant } from "./ui-theme"; +import { globalScene } from "#app/global-scene"; export enum DropDownColumn { GEN, TYPES, + BIOME, CAUGHT, UNLOCKS, MISC, @@ -24,23 +26,28 @@ export class FilterBar extends Phaser.GameObjects.Container { public openDropDown: boolean = false; private lastCursor: number = -1; private uiTheme: UiTheme; + private leftPaddingX: number; + private rightPaddingX: number; + private cursorOffset: number; - constructor(scene: BattleScene, x: number, y: number, width: number, height: number) { - super(scene, x, y); + constructor(x: number, y: number, width: number, height: number, leftPaddingX: number = 6, rightPaddingX: number = 6, cursorOffset: number = 8) { + super(globalScene, x, y); this.width = width; this.height = height; - this.window = addWindow(scene, 0, 0, width, height, false, false, undefined, undefined, WindowVariant.THIN); + this.leftPaddingX = leftPaddingX; + this.rightPaddingX = rightPaddingX; + this.cursorOffset = cursorOffset; + + this.window = addWindow(0, 0, width, height, false, false, undefined, undefined, WindowVariant.THIN); this.add(this.window); - this.cursorObj = this.scene.add.image(1, 1, "cursor"); + this.cursorObj = globalScene.add.image(1, 1, "cursor"); this.cursorObj.setScale(0.5); this.cursorObj.setVisible(false); this.cursorObj.setOrigin(0, 0); this.add(this.cursorObj); - - this.uiTheme = scene.uiTheme; } /** @@ -58,7 +65,7 @@ export class FilterBar extends Phaser.GameObjects.Container { this.columns.push(column); - const filterTypesLabel = addTextObject(this.scene, 0, 3, title, TextStyle.TOOLTIP_CONTENT); + const filterTypesLabel = addTextObject(0, 3, title, TextStyle.TOOLTIP_CONTENT); this.labels.push(filterTypesLabel); this.add(filterTypesLabel); this.dropDowns.push(dropDown); @@ -79,15 +86,24 @@ export class FilterBar extends Phaser.GameObjects.Container { return this.dropDowns[this.columns.indexOf(col)]; } + /** + * Get the DropDownColumn associated to a given index + * @param index the index of the column to retrieve + * @returns the associated DropDownColumn if it exists, undefined otherwise + */ + public getColumn(index: number): DropDownColumn { + return this.columns[index]; + } + /** * Highlight the labels of the FilterBar if the filters are different from their default values */ updateFilterLabels(): void { for (let i = 0; i < this.numFilters; i++) { if (this.dropDowns[i].hasDefaultValues()) { - this.labels[i].setColor(getTextColor(TextStyle.TOOLTIP_CONTENT, false, this.uiTheme)); + this.labels[i].setColor(getTextColor(TextStyle.TOOLTIP_CONTENT, false, globalScene.uiTheme)); } else { - this.labels[i].setColor(getTextColor(TextStyle.STATS_LABEL, false, this.uiTheme)); + this.labels[i].setColor(getTextColor(TextStyle.STATS_LABEL, false, globalScene.uiTheme)); } } } @@ -96,23 +112,21 @@ export class FilterBar extends Phaser.GameObjects.Container { * Position the filter dropdowns evenly across the width of the container */ private calcFilterPositions(): void { - const paddingX = 6; - const cursorOffset = 8; - let totalWidth = paddingX * 2 + cursorOffset; + let totalWidth = this.leftPaddingX + this.rightPaddingX + this.cursorOffset; this.labels.forEach(label => { - totalWidth += label.displayWidth + cursorOffset; + totalWidth += label.displayWidth + this.cursorOffset; }); const spacing = (this.width - totalWidth) / (this.labels.length - 1); for (let i = 0; i < this.labels.length; i++) { if (i === 0) { - this.labels[i].x = paddingX + cursorOffset; + this.labels[i].x = this.leftPaddingX + this.cursorOffset; } else { const lastRight = this.labels[i - 1].x + this.labels[i - 1].displayWidth; - this.labels[i].x = lastRight + spacing + cursorOffset; + this.labels[i].x = lastRight + spacing + this.cursorOffset; } - this.dropDowns[i].x = this.labels[i].x - cursorOffset - paddingX; + this.dropDowns[i].x = this.labels[i].x - this.cursorOffset - this.leftPaddingX; this.dropDowns[i].y = this.height; } } @@ -139,8 +153,7 @@ export class FilterBar extends Phaser.GameObjects.Container { } } - const cursorOffset = 8; - this.cursorObj.setPosition(this.labels[cursor].x - cursorOffset + 2, 6); + this.cursorObj.setPosition(this.labels[cursor].x - this.cursorOffset + 2, 6); this.lastCursor = cursor; } @@ -181,6 +194,11 @@ export class FilterBar extends Phaser.GameObjects.Container { return this.getFilter(col).getVals(); } + public resetSelection(col: DropDownColumn): void { + this.dropDowns[col].resetToDefault(); + this.updateFilterLabels(); + } + setValsToDefault(): void { for (const dropDown of this.dropDowns) { dropDown.resetToDefault(); diff --git a/src/ui/filter-text.ts b/src/ui/filter-text.ts new file mode 100644 index 00000000000..f69cf113f05 --- /dev/null +++ b/src/ui/filter-text.ts @@ -0,0 +1,218 @@ +import type { StarterContainer } from "./starter-container"; +import { addTextObject, getTextColor, TextStyle } from "./text"; +import type { UiTheme } from "#enums/ui-theme"; +import { addWindow, WindowVariant } from "./ui-theme"; +import i18next from "i18next"; +import type AwaitableUiHandler from "./awaitable-ui-handler"; +import type UI from "./ui"; +import { Mode } from "./ui"; +import { globalScene } from "#app/global-scene"; + +export enum FilterTextRow{ + NAME, + MOVE_1, + MOVE_2, + ABILITY_1, + ABILITY_2, +} + +export class FilterText extends Phaser.GameObjects.Container { + private window: Phaser.GameObjects.NineSlice; + private labels: Phaser.GameObjects.Text[] = []; + private selections: Phaser.GameObjects.Text[] = []; + private selectionStrings: string[] = []; + private rows: FilterTextRow[] = []; + public cursorObj: Phaser.GameObjects.Image; + public numFilters: number = 0; + private lastCursor: number = -1; + private uiTheme: UiTheme; + + private menuMessageBoxContainer: Phaser.GameObjects.Container; + private dialogueMessageBox: Phaser.GameObjects.NineSlice; + message: any; + private readonly textPadding = 8; + private readonly defaultWordWrapWidth = 1224; + + private onChange: () => void; + + public defaultText: string = "---"; + + constructor(x: number, y: number, width: number, height: number, onChange: () => void,) { + super(globalScene, x, y); + + this.onChange = onChange; + + this.width = width; + this.height = height; + + this.window = addWindow(0, 0, width, height, false, false, undefined, undefined, WindowVariant.THIN); + this.add(this.window); + + this.cursorObj = globalScene.add.image(1, 1, "cursor"); + this.cursorObj.setScale(0.5); + this.cursorObj.setVisible(false); + this.cursorObj.setOrigin(0, 0); + this.add(this.cursorObj); + + this.menuMessageBoxContainer = globalScene.add.container(0, 130); + this.menuMessageBoxContainer.setName("menu-message-box"); + this.menuMessageBoxContainer.setVisible(false); + + // Full-width window used for testing dialog messages in debug mode + this.dialogueMessageBox = addWindow(-this.textPadding, 0, globalScene.game.canvas.width / 6 + this.textPadding * 2, 49, false, false, 0, 0, WindowVariant.THIN); + this.dialogueMessageBox.setOrigin(0, 0); + this.menuMessageBoxContainer.add(this.dialogueMessageBox); + + const menuMessageText = addTextObject(this.textPadding, this.textPadding, "", TextStyle.WINDOW, { maxLines: 2 }); + menuMessageText.setName("menu-message"); + menuMessageText.setOrigin(0, 0); + this.menuMessageBoxContainer.add(menuMessageText); + + this.message = menuMessageText; + + } + + /** + * Add a new filter to the FilterBar, as long that a unique DropDownColumn is provided + * @param column the DropDownColumn that will be used to access the filter values + * @param title the string that will get displayed in the filter bar + * @param dropDown the DropDown with all options for this filter + * @returns true if successful, false if the provided column was already in use for another filter + */ + addFilter(row: FilterTextRow, title: string): boolean { + + const paddingX = 6; + const cursorOffset = 8; + const extraSpaceX = 40; + + if (this.rows.includes(row)) { + return false; + } + + this.rows.push(row); + + const filterTypesLabel = addTextObject(paddingX + cursorOffset, 3, title, TextStyle.TOOLTIP_CONTENT); + this.labels.push(filterTypesLabel); + this.add(filterTypesLabel); + + const filterTypesSelection = addTextObject(paddingX + cursorOffset + extraSpaceX, 3, this.defaultText, TextStyle.TOOLTIP_CONTENT); + this.selections.push(filterTypesSelection); + this.add(filterTypesSelection); + + this.selectionStrings.push(""); + + this.calcFilterPositions(); + this.numFilters++; + + return true; + } + + resetSelection(index: number): void { + this.selections[index].setText(this.defaultText); + this.selectionStrings[index] = ""; + this.onChange(); + } + + setValsToDefault(): void { + for (let i = 0; i < this.numFilters; i++) { + this.resetSelection(i); + } + } + + startSearch(index: number, ui: UI): void { + + ui.playSelect(); + const prefilledText = ""; + const buttonAction: any = {}; + buttonAction["buttonActions"] = [ + (sanitizedName: string) => { + ui.playSelect(); + const dialogueTestName = sanitizedName; + //TODO: Is it really necessary to encode and decode? + const dialogueName = decodeURIComponent(escape(atob(dialogueTestName))); + const handler = ui.getHandler() as AwaitableUiHandler; + handler.tutorialActive = true; + // Switch to the dialog test window + this.selections[index].setText( dialogueName === "" ? this.defaultText : String(i18next.t(dialogueName))); + ui.revertMode(); + this.onChange(); + }, + () => { + ui.revertMode(); + this.onChange; + } + ]; + ui.setOverlayMode(Mode.POKEDEX_SCAN, buttonAction, prefilledText, index); + } + + + setCursor(cursor: number): void { + const cursorOffset = 8; + + this.cursorObj.setPosition(cursorOffset, this.labels[cursor].y + 3); + this.lastCursor = cursor; + } + + /** + * Highlight the labels of the FilterBar if the filters are different from their default values + */ + updateFilterLabels(): void { + for (let i = 0; i < this.numFilters; i++) { + if (this.selections[i].text === this.defaultText) { + this.labels[i].setColor(getTextColor(TextStyle.TOOLTIP_CONTENT, false, globalScene.uiTheme)); + } else { + this.labels[i].setColor(getTextColor(TextStyle.STATS_LABEL, false, globalScene.uiTheme)); + } + } + } + + /** + * Position the filter dropdowns evenly across the width of the container + */ + private calcFilterPositions(): void { + const paddingY = 8; + + let totalHeight = paddingY * 2; + this.labels.forEach(label => { + totalHeight += label.displayHeight; + }); + const spacing = (this.height - totalHeight) / (this.labels.length - 1); + for (let i = 0; i < this.labels.length; i++) { + if (i === 0) { + this.labels[i].y = paddingY; + this.selections[i].y = paddingY; + } else { + const lastBottom = this.labels[i - 1].y + this.labels[i - 1].displayHeight; + this.labels[i].y = lastBottom + spacing; + this.selections[i].y = lastBottom + spacing; + } + } + } + + getValue(row: number): string { + return this.selections[row].getWrappedText()[0]; + } + + /** + * Find the nearest filter to the provided container on the y-axis + * @param container the StarterContainer to compare position against + * @returns the index of the closest filter + */ + getNearestFilter(container: StarterContainer): number { + + const midy = container.y + container.icon.displayHeight / 2; + let nearest = 0; + let nearestDist = 1000; + for (let i = 0; i < this.labels.length; i++) { + const dist = Math.abs(midy - (this.labels[i].y + this.labels[i].displayHeight / 3)); + if (dist < nearestDist) { + nearest = i; + nearestDist = dist; + } + } + + return nearest; + } + + +} diff --git a/src/ui/form-modal-ui-handler.ts b/src/ui/form-modal-ui-handler.ts index 65ee9f2db10..86a1cc2238b 100644 --- a/src/ui/form-modal-ui-handler.ts +++ b/src/ui/form-modal-ui-handler.ts @@ -1,11 +1,12 @@ -import BattleScene from "../battle-scene"; -import { ModalConfig, ModalUiHandler } from "./modal-ui-handler"; -import { Mode } from "./ui"; +import type { ModalConfig } from "./modal-ui-handler"; +import { ModalUiHandler } from "./modal-ui-handler"; +import type { Mode } from "./ui"; import { TextStyle, addTextInputObject, addTextObject } from "./text"; import { WindowVariant, addWindow } from "./ui-theme"; -import InputText from "phaser3-rex-plugins/plugins/inputtext"; +import type InputText from "phaser3-rex-plugins/plugins/inputtext"; import * as Utils from "../utils"; import { Button } from "#enums/buttons"; +import { globalScene } from "#app/global-scene"; export interface FormModalConfig extends ModalConfig { errorMessage?: string; @@ -20,8 +21,8 @@ export abstract class FormModalUiHandler extends ModalUiHandler { protected tween: Phaser.Tweens.Tween; protected formLabels: Phaser.GameObjects.Text[]; - constructor(scene: BattleScene, mode: Mode | null = null) { - super(scene, mode); + constructor(mode: Mode | null = null) { + super(mode); this.editing = false; this.inputContainers = []; @@ -59,7 +60,7 @@ export abstract class FormModalUiHandler extends ModalUiHandler { this.updateFields(config, hasTitle); } - this.errorMessage = addTextObject(this.scene, 10, (hasTitle ? 31 : 5) + 20 * (config.length - 1) + 16 + this.getButtonTopMargin(), "", TextStyle.TOOLTIP_CONTENT); + this.errorMessage = addTextObject(10, (hasTitle ? 31 : 5) + 20 * (config.length - 1) + 16 + this.getButtonTopMargin(), "", TextStyle.TOOLTIP_CONTENT); this.errorMessage.setColor(this.getTextColor(TextStyle.SUMMARY_PINK)); this.errorMessage.setShadowColor(this.getTextColor(TextStyle.SUMMARY_PINK, true)); this.errorMessage.setVisible(false); @@ -71,20 +72,20 @@ export abstract class FormModalUiHandler extends ModalUiHandler { this.inputs = []; this.formLabels = []; fieldsConfig.forEach((config, f) => { - const label = addTextObject(this.scene, 10, (hasTitle ? 31 : 5) + 20 * f, config.label, TextStyle.TOOLTIP_CONTENT); + const label = addTextObject(10, (hasTitle ? 31 : 5) + 20 * f, config.label, TextStyle.TOOLTIP_CONTENT); label.name = "formLabel" + f; this.formLabels.push(label); this.modalContainer.add(this.formLabels[this.formLabels.length - 1]); - const inputContainer = this.scene.add.container(70, (hasTitle ? 28 : 2) + 20 * f); + const inputContainer = globalScene.add.container(70, (hasTitle ? 28 : 2) + 20 * f); inputContainer.setVisible(false); - const inputBg = addWindow(this.scene, 0, 0, 80, 16, false, false, 0, 0, WindowVariant.XTHIN); + const inputBg = addWindow(0, 0, 80, 16, false, false, 0, 0, WindowVariant.XTHIN); const isPassword = config?.isPassword; const isReadOnly = config?.isReadOnly; - const input = addTextInputObject(this.scene, 4, -2, 440, 116, TextStyle.TOOLTIP_CONTENT, { type: isPassword ? "password" : "text", maxLength: isPassword ? 64 : 20, readOnly: isReadOnly }); + const input = addTextInputObject(4, -2, 440, 116, TextStyle.TOOLTIP_CONTENT, { type: isPassword ? "password" : "text", maxLength: isPassword ? 64 : 20, readOnly: isReadOnly }); input.setOrigin(0, 0); inputContainer.add(inputBg); @@ -119,7 +120,7 @@ export abstract class FormModalUiHandler extends ModalUiHandler { this.modalContainer.y += 24; this.modalContainer.setAlpha(0); - this.tween = this.scene.tweens.add({ + this.tween = globalScene.tweens.add({ targets: this.modalContainer, duration: Utils.fixedInt(1000), ease: "Sine.easeInOut", diff --git a/src/ui/game-stats-ui-handler.ts b/src/ui/game-stats-ui-handler.ts index 671bed29036..09fd178e101 100644 --- a/src/ui/game-stats-ui-handler.ts +++ b/src/ui/game-stats-ui-handler.ts @@ -1,15 +1,16 @@ import Phaser from "phaser"; -import BattleScene from "#app/battle-scene"; import { TextStyle, addTextObject } from "#app/ui/text"; -import { Mode } from "#app/ui/ui"; +import type { Mode } from "#app/ui/ui"; import UiHandler from "#app/ui/ui-handler"; import { addWindow } from "#app/ui/ui-theme"; import * as Utils from "#app/utils"; -import { DexAttr, GameData } from "#app/system/game-data"; +import type { GameData } from "#app/system/game-data"; +import { DexAttr } from "#app/system/game-data"; import { speciesStarterCosts } from "#app/data/balance/starters"; import { Button } from "#enums/buttons"; import i18next from "i18next"; import { UiTheme } from "#enums/ui-theme"; +import { globalScene } from "#app/global-scene"; interface DisplayStat { label_key?: string; @@ -222,8 +223,8 @@ export default class GameStatsUiHandler extends UiHandler { private arrowUp: Phaser.GameObjects.Sprite; private arrowDown: Phaser.GameObjects.Sprite; - constructor(scene: BattleScene, mode: Mode | null = null) { - super(scene, mode); + constructor(mode: Mode | null = null) { + super(mode); this.statLabels = []; this.statValues = []; @@ -232,37 +233,37 @@ export default class GameStatsUiHandler extends UiHandler { setup() { const ui = this.getUi(); - this.gameStatsContainer = this.scene.add.container(1, -(this.scene.game.canvas.height / 6) + 1); + this.gameStatsContainer = globalScene.add.container(1, -(globalScene.game.canvas.height / 6) + 1); - this.gameStatsContainer.setInteractive(new Phaser.Geom.Rectangle(0, 0, this.scene.game.canvas.width / 6, this.scene.game.canvas.height / 6), Phaser.Geom.Rectangle.Contains); + this.gameStatsContainer.setInteractive(new Phaser.Geom.Rectangle(0, 0, globalScene.game.canvas.width / 6, globalScene.game.canvas.height / 6), Phaser.Geom.Rectangle.Contains); - const headerBg = addWindow(this.scene, 0, 0, (this.scene.game.canvas.width / 6) - 2, 24); + const headerBg = addWindow(0, 0, (globalScene.game.canvas.width / 6) - 2, 24); headerBg.setOrigin(0, 0); - const headerText = addTextObject(this.scene, 0, 0, i18next.t("gameStatsUiHandler:stats"), TextStyle.SETTINGS_LABEL); + const headerText = addTextObject(0, 0, i18next.t("gameStatsUiHandler:stats"), TextStyle.SETTINGS_LABEL); headerText.setOrigin(0, 0); headerText.setPositionRelative(headerBg, 8, 4); - const statsBgWidth = ((this.scene.game.canvas.width / 6) - 2) / 2; + const statsBgWidth = ((globalScene.game.canvas.width / 6) - 2) / 2; const [ statsBgLeft, statsBgRight ] = new Array(2).fill(null).map((_, i) => { const width = statsBgWidth + 2; - const height = Math.floor((this.scene.game.canvas.height / 6) - headerBg.height - 2); - const statsBg = addWindow(this.scene, (statsBgWidth - 2) * i, headerBg.height, width, height, false, false, i > 0 ? -3 : 0, 1); + const height = Math.floor((globalScene.game.canvas.height / 6) - headerBg.height - 2); + const statsBg = addWindow((statsBgWidth - 2) * i, headerBg.height, width, height, false, false, i > 0 ? -3 : 0, 1); statsBg.setOrigin(0, 0); return statsBg; }); - this.statsContainer = this.scene.add.container(0, 0); + this.statsContainer = globalScene.add.container(0, 0); new Array(18).fill(null).map((_, s) => { - const statLabel = addTextObject(this.scene, 8 + (s % 2 === 1 ? statsBgWidth : 0), 28 + Math.floor(s / 2) * 16, "", TextStyle.STATS_LABEL); + const statLabel = addTextObject(8 + (s % 2 === 1 ? statsBgWidth : 0), 28 + Math.floor(s / 2) * 16, "", TextStyle.STATS_LABEL); statLabel.setOrigin(0, 0); this.statsContainer.add(statLabel); this.statLabels.push(statLabel); - const statValue = addTextObject(this.scene, (statsBgWidth * ((s % 2) + 1)) - 8, statLabel.y, "", TextStyle.STATS_VALUE); + const statValue = addTextObject((statsBgWidth * ((s % 2) + 1)) - 8, statLabel.y, "", TextStyle.STATS_VALUE); statValue.setOrigin(1, 0); this.statsContainer.add(statValue); this.statValues.push(statValue); @@ -275,10 +276,10 @@ export default class GameStatsUiHandler extends UiHandler { this.gameStatsContainer.add(this.statsContainer); // arrows to show that we can scroll through the stats - const isLegacyTheme = this.scene.uiTheme === UiTheme.LEGACY; - this.arrowDown = this.scene.add.sprite(statsBgWidth, this.scene.game.canvas.height / 6 - (isLegacyTheme ? 9 : 5), "prompt"); + const isLegacyTheme = globalScene.uiTheme === UiTheme.LEGACY; + this.arrowDown = globalScene.add.sprite(statsBgWidth, globalScene.game.canvas.height / 6 - (isLegacyTheme ? 9 : 5), "prompt"); this.gameStatsContainer.add(this.arrowDown); - this.arrowUp = this.scene.add.sprite(statsBgWidth, headerBg.height + (isLegacyTheme ? 7 : 3), "prompt"); + this.arrowUp = globalScene.add.sprite(statsBgWidth, headerBg.height + (isLegacyTheme ? 7 : 3), "prompt"); this.arrowUp.flipY = true; this.gameStatsContainer.add(this.arrowUp); @@ -298,7 +299,7 @@ export default class GameStatsUiHandler extends UiHandler { this.arrowUp.play("prompt"); this.arrowDown.play("prompt"); - if (this.scene.uiTheme === UiTheme.LEGACY) { + if (globalScene.uiTheme === UiTheme.LEGACY) { this.arrowUp.setTint(0x484848); this.arrowDown.setTint(0x484848); } @@ -318,7 +319,7 @@ export default class GameStatsUiHandler extends UiHandler { const statKeys = Object.keys(displayStats).slice(this.cursor * 2, this.cursor * 2 + 18); statKeys.forEach((key, s) => { const stat = displayStats[key] as DisplayStat; - const value = stat.sourceFunc!(this.scene.gameData); // TODO: is this bang correct? + const value = stat.sourceFunc!(globalScene.gameData); // TODO: is this bang correct? this.statLabels[s].setText(!stat.hidden || isNaN(parseInt(value)) || parseInt(value) ? i18next.t(`gameStatsUiHandler:${stat.label_key}`) : "???"); this.statValues[s].setText(value); }); @@ -348,7 +349,7 @@ export default class GameStatsUiHandler extends UiHandler { if (button === Button.CANCEL) { success = true; - this.scene.ui.revertMode(); + globalScene.ui.revertMode(); } else { switch (button) { case Button.UP: @@ -371,7 +372,7 @@ export default class GameStatsUiHandler extends UiHandler { return success; } - setCursor(cursor: integer): boolean { + setCursor(cursor: number): boolean { const ret = super.setCursor(cursor); if (ret) { diff --git a/src/ui/hatched-pokemon-container.ts b/src/ui/hatched-pokemon-container.ts index 9fb1fd26b30..f006002617a 100644 --- a/src/ui/hatched-pokemon-container.ts +++ b/src/ui/hatched-pokemon-container.ts @@ -1,10 +1,11 @@ -import { EggHatchData } from "#app/data/egg-hatch-data"; +import type { EggHatchData } from "#app/data/egg-hatch-data"; import { Gender } from "#app/data/gender"; import { getVariantTint } from "#app/data/variant"; import { DexAttr } from "#app/system/game-data"; -import BattleScene from "#app/battle-scene"; -import PokemonSpecies from "#app/data/pokemon-species"; -import PokemonIconAnimHandler, { PokemonIconAnimMode } from "./pokemon-icon-anim-handler"; +import { globalScene } from "#app/global-scene"; +import type PokemonSpecies from "#app/data/pokemon-species"; +import type PokemonIconAnimHandler from "./pokemon-icon-anim-handler"; +import { PokemonIconAnimMode } from "./pokemon-icon-anim-handler"; /** * A container for a Pokemon's sprite and icons to get displayed in the egg summary screen @@ -12,7 +13,6 @@ import PokemonIconAnimHandler, { PokemonIconAnimMode } from "./pokemon-icon-anim * shiny variant, hidden ability, new egg move, new catch */ export class HatchedPokemonContainer extends Phaser.GameObjects.Container { - public scene: BattleScene; public species: PokemonSpecies; public icon: Phaser.GameObjects.Sprite; public shinyIcon: Phaser.GameObjects.Image; @@ -21,13 +21,12 @@ export class HatchedPokemonContainer extends Phaser.GameObjects.Container { public eggMoveIcon: Phaser.GameObjects.Image; /** - * @param scene the current {@linkcode BattleScene} * @param x x position * @param y y position * @param hatchData the {@linkcode EggHatchData} to load the icons and sprites for */ - constructor(scene: BattleScene, x: number, y: number, hatchData: EggHatchData) { - super(scene, x, y); + constructor(x: number, y: number, hatchData: EggHatchData) { + super(globalScene, x, y); const displayPokemon = hatchData.pokemon; this.species = displayPokemon.species; @@ -41,7 +40,7 @@ export class HatchedPokemonContainer extends Phaser.GameObjects.Container { const isShiny = displayPokemon.shiny; // Pokemon sprite - const pokemonIcon = this.scene.add.sprite(-offset, offset, species.getIconAtlasKey(formIndex, isShiny, variant)); + const pokemonIcon = globalScene.add.sprite(-offset, offset, species.getIconAtlasKey(formIndex, isShiny, variant)); pokemonIcon.setScale(0.5); pokemonIcon.setOrigin(0, 0); pokemonIcon.setFrame(species.getIconId(female, formIndex, isShiny, variant)); @@ -50,27 +49,27 @@ export class HatchedPokemonContainer extends Phaser.GameObjects.Container { this.add(this.icon); // Shiny icon - this.shinyIcon = this.scene.add.image(rightSideX, offset, "shiny_star_small"); + this.shinyIcon = globalScene.add.image(rightSideX, offset, "shiny_star_small"); this.shinyIcon.setOrigin(0, 0); this.shinyIcon.setScale(0.5); this.add(this.shinyIcon); // Hidden ability icon - const haIcon = this.scene.add.image(rightSideX, offset * 4, "ha_capsule"); + const haIcon = globalScene.add.image(rightSideX, offset * 4, "ha_capsule"); haIcon.setOrigin(0, 0); haIcon.setScale(0.5); this.hiddenAbilityIcon = haIcon; this.add(this.hiddenAbilityIcon); // Pokeball icon - const pokeballIcon = this.scene.add.image(rightSideX, offset * 7, "icon_owned"); + const pokeballIcon = globalScene.add.image(rightSideX, offset * 7, "icon_owned"); pokeballIcon.setOrigin(0, 0); pokeballIcon.setScale(0.5); this.pokeballIcon = pokeballIcon; this.add(this.pokeballIcon); // Egg move icon - const eggMoveIcon = this.scene.add.image(0, offset, "icon_egg_move"); + const eggMoveIcon = globalScene.add.image(0, offset, "icon_egg_move"); eggMoveIcon.setOrigin(0, 0); eggMoveIcon.setScale(0.5); this.eggMoveIcon = eggMoveIcon; diff --git a/src/ui/loading-modal-ui-handler.ts b/src/ui/loading-modal-ui-handler.ts index d86f7afd3b6..7ee0949c71e 100644 --- a/src/ui/loading-modal-ui-handler.ts +++ b/src/ui/loading-modal-ui-handler.ts @@ -1,12 +1,11 @@ import i18next from "i18next"; -import BattleScene from "../battle-scene"; import { ModalUiHandler } from "./modal-ui-handler"; import { addTextObject, TextStyle } from "./text"; -import { Mode } from "./ui"; +import type { Mode } from "./ui"; export default class LoadingModalUiHandler extends ModalUiHandler { - constructor(scene: BattleScene, mode: Mode | null = null) { - super(scene, mode); + constructor(mode: Mode | null = null) { + super(mode); } getModalTitle(): string { @@ -32,7 +31,7 @@ export default class LoadingModalUiHandler extends ModalUiHandler { setup(): void { super.setup(); - const label = addTextObject(this.scene, this.getWidth() / 2, this.getHeight() / 2, i18next.t("menu:loading"), TextStyle.WINDOW); + const label = addTextObject(this.getWidth() / 2, this.getHeight() / 2, i18next.t("menu:loading"), TextStyle.WINDOW); label.setOrigin(0.5, 0.5); this.modalContainer.add(label); diff --git a/src/ui/login-form-ui-handler.ts b/src/ui/login-form-ui-handler.ts index 78755423604..55909b63e58 100644 --- a/src/ui/login-form-ui-handler.ts +++ b/src/ui/login-form-ui-handler.ts @@ -1,13 +1,14 @@ -import { FormModalUiHandler, InputFieldConfig } from "./form-modal-ui-handler"; -import { ModalConfig } from "./modal-ui-handler"; +import type { InputFieldConfig } from "./form-modal-ui-handler"; +import { FormModalUiHandler } from "./form-modal-ui-handler"; +import type { ModalConfig } from "./modal-ui-handler"; import * as Utils from "../utils"; import { Mode } from "./ui"; import i18next from "i18next"; -import BattleScene from "#app/battle-scene"; import { addTextObject, TextStyle } from "./text"; import { addWindow } from "./ui-theme"; -import { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; +import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; +import { globalScene } from "#app/global-scene"; import JSZip from "jszip"; interface BuildInteractableImageOpts { @@ -33,15 +34,15 @@ export default class LoginFormUiHandler extends FormModalUiHandler { private infoContainer: Phaser.GameObjects.Container; private externalPartyBg: Phaser.GameObjects.NineSlice; private externalPartyTitle: Phaser.GameObjects.Text; - constructor(scene: BattleScene, mode: Mode | null = null) { - super(scene, mode); + constructor(mode: Mode | null = null) { + super(mode); } setup(): void { super.setup(); this.buildExternalPartyContainer(); - this.infoContainer = this.scene.add.container(0, 0); + this.infoContainer = globalScene.add.container(0, 0); this.usernameInfoImage = this.buildInteractableImage("settings_icon", "username-info-icon", { x: 20, @@ -61,11 +62,11 @@ export default class LoginFormUiHandler extends FormModalUiHandler { } private buildExternalPartyContainer() { - this.externalPartyContainer = this.scene.add.container(0, 0); - this.externalPartyContainer.setInteractive(new Phaser.Geom.Rectangle(0, 0, this.scene.game.canvas.width / 12, this.scene.game.canvas.height / 12), Phaser.Geom.Rectangle.Contains); - this.externalPartyTitle = addTextObject(this.scene, 0, 4, "", TextStyle.SETTINGS_LABEL); + 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), Phaser.Geom.Rectangle.Contains); + this.externalPartyTitle = addTextObject(0, 4, "", TextStyle.SETTINGS_LABEL); this.externalPartyTitle.setOrigin(0.5, 0); - this.externalPartyBg = addWindow(this.scene, 0, 0, 0, 0); + this.externalPartyBg = addWindow(0, 0, 0, 0); this.externalPartyContainer.add(this.externalPartyBg); this.externalPartyContainer.add(this.externalPartyTitle); @@ -140,10 +141,10 @@ export default class LoginFormUiHandler extends FormModalUiHandler { // Prevent overlapping overrides on action modification this.submitAction = originalLoginAction; this.sanitizeInputs(); - this.scene.ui.setMode(Mode.LOADING, { buttonActions: []}); + globalScene.ui.setMode(Mode.LOADING, { buttonActions: []}); const onFail = error => { - this.scene.ui.setMode(Mode.LOGIN_FORM, Object.assign(config, { errorMessage: error?.trim() })); - this.scene.ui.playError(); + globalScene.ui.setMode(Mode.LOGIN_FORM, Object.assign(config, { errorMessage: error?.trim() })); + globalScene.ui.playError(); }; if (!this.inputs[0].text) { return onFail(i18next.t("menu:emptyUsername")); @@ -207,9 +208,9 @@ export default class LoginFormUiHandler extends FormModalUiHandler { }); const onFail = error => { - this.scene.ui.setMode(Mode.LOADING, { buttonActions: []}); - this.scene.ui.setModeForceTransition(Mode.LOGIN_FORM, Object.assign(config, { errorMessage: error?.trim() })); - this.scene.ui.playError(); + globalScene.ui.setMode(Mode.LOADING, { buttonActions: []}); + globalScene.ui.setModeForceTransition(Mode.LOGIN_FORM, Object.assign(config, { errorMessage: error?.trim() })); + globalScene.ui.playError(); }; this.usernameInfoImage.on("pointerdown", () => { @@ -222,17 +223,17 @@ export default class LoginFormUiHandler extends FormModalUiHandler { options.push({ label: dataKeys[i].replace(keyToFind, ""), handler: () => { - this.scene.ui.revertMode(); + globalScene.ui.revertMode(); this.infoContainer.disableInteractive(); return true; } }); } - this.scene.ui.setOverlayMode(Mode.OPTION_SELECT, { + globalScene.ui.setOverlayMode(Mode.OPTION_SELECT, { options: options, delay: 1000 }); - this.infoContainer.setInteractive(new Phaser.Geom.Rectangle(0, 0, this.scene.game.canvas.width, this.scene.game.canvas.height), Phaser.Geom.Rectangle.Contains); + this.infoContainer.setInteractive(new Phaser.Geom.Rectangle(0, 0, globalScene.game.canvas.width, globalScene.game.canvas.height), Phaser.Geom.Rectangle.Contains); } else { if (dataKeys.length > 2) { return onFail(this.ERR_TOO_MANY_SAVES); @@ -271,7 +272,7 @@ export default class LoginFormUiHandler extends FormModalUiHandler { }); this.externalPartyContainer.setAlpha(0); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.externalPartyContainer, duration: Utils.fixedInt(1000), ease: "Sine.easeInOut", @@ -280,7 +281,7 @@ export default class LoginFormUiHandler extends FormModalUiHandler { }); this.infoContainer.setAlpha(0); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.infoContainer, duration: Utils.fixedInt(1000), ease: "Sine.easeInOut", @@ -296,7 +297,7 @@ export default class LoginFormUiHandler extends FormModalUiHandler { y = 0, origin = { x: 0, y: 0 } } = opts; - const img = this.scene.add.image(x, y, texture); + const img = globalScene.add.image(x, y, texture); img.setName(name); img.setOrigin(origin.x, origin.y); img.setScale(scale); diff --git a/src/ui/menu-ui-handler.ts b/src/ui/menu-ui-handler.ts index 3ce3f3b7cf0..3965eb38cc4 100644 --- a/src/ui/menu-ui-handler.ts +++ b/src/ui/menu-ui-handler.ts @@ -1,17 +1,18 @@ -import BattleScene, { bypassLogin } from "../battle-scene"; +import { bypassLogin } from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { TextStyle, addTextObject, getTextStyleOptions } from "./text"; import { Mode } from "./ui"; import * as Utils from "../utils"; import { addWindow, WindowVariant } from "./ui-theme"; import MessageUiHandler from "./message-ui-handler"; -import { OptionSelectConfig, OptionSelectItem } from "./abstact-option-select-ui-handler"; +import type { OptionSelectConfig, OptionSelectItem } from "./abstact-option-select-ui-handler"; import { Tutorial, handleTutorial } from "../tutorial"; import { loggedInUser, updateUserInfo } from "../account"; import i18next from "i18next"; import { Button } from "#enums/buttons"; import { GameDataType } from "#enums/game-data-type"; import BgmBar from "#app/ui/bgm-bar"; -import AwaitableUiHandler from "./awaitable-ui-handler"; +import type AwaitableUiHandler from "./awaitable-ui-handler"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import { AdminMode, getAdminModeName } from "./admin-ui-handler"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; @@ -20,9 +21,9 @@ enum MenuOptions { GAME_SETTINGS, ACHIEVEMENTS, STATS, - RUN_HISTORY, EGG_LIST, EGG_GACHA, + POKEDEX, MANAGE_DATA, COMMUNITY, SAVE_AND_QUIT, @@ -63,8 +64,8 @@ export default class MenuUiHandler extends MessageUiHandler { public bgmBar: BgmBar; - constructor(scene: BattleScene, mode: Mode | null = null) { - super(scene, mode); + constructor(mode: Mode | null = null) { + super(mode); this.excludedMenus = () => [ { condition: [ Mode.COMMAND, Mode.TITLE ].includes(mode ?? Mode.TITLE), options: [ MenuOptions.EGG_GACHA, MenuOptions.EGG_LIST ]}, @@ -86,16 +87,16 @@ export default class MenuUiHandler extends MessageUiHandler { wikiUrl = `https://wiki.pokerogue.net/${lang}:start`; } - this.bgmBar = new BgmBar(this.scene); + this.bgmBar = new BgmBar(); this.bgmBar.setup(); ui.bgmBar = this.bgmBar; - this.menuContainer = this.scene.add.container(1, -(this.scene.game.canvas.height / 6) + 1); + this.menuContainer = globalScene.add.container(1, -(globalScene.game.canvas.height / 6) + 1); this.menuContainer.setName("menu"); - this.menuContainer.setInteractive(new Phaser.Geom.Rectangle(0, 0, this.scene.game.canvas.width / 6, this.scene.game.canvas.height / 6), Phaser.Geom.Rectangle.Contains); + this.menuContainer.setInteractive(new Phaser.Geom.Rectangle(0, 0, globalScene.game.canvas.width / 6, globalScene.game.canvas.height / 6), Phaser.Geom.Rectangle.Contains); - this.menuOverlay = new Phaser.GameObjects.Rectangle(this.scene, -1, -1, this.scene.scaledCanvas.width, this.scene.scaledCanvas.height, 0xffffff, 0.3); + this.menuOverlay = new Phaser.GameObjects.Rectangle(globalScene, -1, -1, globalScene.scaledCanvas.width, globalScene.scaledCanvas.height, 0xffffff, 0.3); this.menuOverlay.setName("menu-overlay"); this.menuOverlay.setOrigin(0, 0); this.menuContainer.add(this.menuOverlay); @@ -110,7 +111,7 @@ export default class MenuUiHandler extends MessageUiHandler { render() { const ui = this.getUi(); this.excludedMenus = () => [ - { condition: this.scene.getCurrentPhase() instanceof SelectModifierPhase, options: [ MenuOptions.EGG_GACHA, MenuOptions.EGG_LIST ]}, + { condition: globalScene.getCurrentPhase() instanceof SelectModifierPhase, options: [ MenuOptions.EGG_GACHA ]}, { condition: bypassLogin, options: [ MenuOptions.LOG_OUT ]} ]; @@ -120,15 +121,15 @@ export default class MenuUiHandler extends MessageUiHandler { return !this.excludedMenus().some(exclusion => exclusion.condition && exclusion.options.includes(m)); }); - this.optionSelectText = addTextObject(this.scene, 0, 0, this.menuOptions.map(o => `${i18next.t(`menuUiHandler:${MenuOptions[o]}`)}`).join("\n"), TextStyle.WINDOW, { maxLines: this.menuOptions.length }); + this.optionSelectText = addTextObject(0, 0, this.menuOptions.map(o => `${i18next.t(`menuUiHandler:${MenuOptions[o]}`)}`).join("\n"), TextStyle.WINDOW, { maxLines: this.menuOptions.length }); this.optionSelectText.setLineSpacing(12); - this.scale = getTextStyleOptions(TextStyle.WINDOW, (this.scene as BattleScene).uiTheme).scale; - this.menuBg = addWindow(this.scene, - (this.scene.game.canvas.width / 6) - (this.optionSelectText.displayWidth + 25), + this.scale = getTextStyleOptions(TextStyle.WINDOW, globalScene.uiTheme).scale; + this.menuBg = addWindow( + (globalScene.game.canvas.width / 6) - (this.optionSelectText.displayWidth + 25), 0, this.optionSelectText.displayWidth + 19 + 24 * this.scale, - (this.scene.game.canvas.height / 6) - 2 + (globalScene.game.canvas.height / 6) - 2 ); this.menuBg.setOrigin(0, 0); @@ -140,21 +141,21 @@ export default class MenuUiHandler extends MessageUiHandler { ui.add(this.menuContainer); - this.menuMessageBoxContainer = this.scene.add.container(0, 130); + this.menuMessageBoxContainer = globalScene.add.container(0, 130); this.menuMessageBoxContainer.setName("menu-message-box"); this.menuMessageBoxContainer.setVisible(false); // Window for general messages - this.menuMessageBox = addWindow(this.scene, 0, 0, this.defaultMessageBoxWidth, 48); + this.menuMessageBox = addWindow(0, 0, this.defaultMessageBoxWidth, 48); this.menuMessageBox.setOrigin(0, 0); this.menuMessageBoxContainer.add(this.menuMessageBox); // Full-width window used for testing dialog messages in debug mode - this.dialogueMessageBox = addWindow(this.scene, -this.textPadding, 0, this.scene.game.canvas.width / 6 + this.textPadding * 2, 49, false, false, 0, 0, WindowVariant.THIN); + this.dialogueMessageBox = addWindow(-this.textPadding, 0, globalScene.game.canvas.width / 6 + this.textPadding * 2, 49, false, false, 0, 0, WindowVariant.THIN); this.dialogueMessageBox.setOrigin(0, 0); this.menuMessageBoxContainer.add(this.dialogueMessageBox); - const menuMessageText = addTextObject(this.scene, this.textPadding, this.textPadding, "", TextStyle.WINDOW, { maxLines: 2 }); + const menuMessageText = addTextObject(this.textPadding, this.textPadding, "", TextStyle.WINDOW, { maxLines: 2 }); menuMessageText.setName("menu-message"); menuMessageText.setOrigin(0, 0); this.menuMessageBoxContainer.add(menuMessageText); @@ -171,7 +172,7 @@ export default class MenuUiHandler extends MessageUiHandler { const manageDataOptions: any[] = []; // TODO: proper type - const confirmSlot = (message: string, slotFilter: (i: integer) => boolean, callback: (i: integer) => void) => { + const confirmSlot = (message: string, slotFilter: (i: number) => boolean, callback: (i: number) => void) => { ui.revertMode(); ui.showText(message, null, () => { const config: OptionSelectConfig = { @@ -203,7 +204,7 @@ export default class MenuUiHandler extends MessageUiHandler { manageDataOptions.push({ label: i18next.t("menuUiHandler:importSession"), handler: () => { - confirmSlot(i18next.t("menuUiHandler:importSlotSelect"), () => true, slotId => this.scene.gameData.importData(GameDataType.SESSION, slotId)); + confirmSlot(i18next.t("menuUiHandler:importSlotSelect"), () => true, slotId => globalScene.gameData.importData(GameDataType.SESSION, slotId)); return true; }, keepOpen: true @@ -212,11 +213,11 @@ export default class MenuUiHandler extends MessageUiHandler { manageDataOptions.push({ label: i18next.t("menuUiHandler:exportSession"), handler: () => { - const dataSlots: integer[] = []; + const dataSlots: number[] = []; Promise.all( new Array(5).fill(null).map((_, i) => { const slotId = i; - return this.scene.gameData.getSession(slotId).then(data => { + return globalScene.gameData.getSession(slotId).then(data => { if (data) { dataSlots.push(slotId); } @@ -224,7 +225,7 @@ export default class MenuUiHandler extends MessageUiHandler { })).then(() => { confirmSlot(i18next.t("menuUiHandler:exportSlotSelect"), i => dataSlots.indexOf(i) > -1, - slotId => this.scene.gameData.tryExportData(GameDataType.SESSION, slotId)); + slotId => globalScene.gameData.tryExportData(GameDataType.SESSION, slotId)); }); return true; }, @@ -233,7 +234,7 @@ export default class MenuUiHandler extends MessageUiHandler { manageDataOptions.push({ label: i18next.t("menuUiHandler:importRunHistory"), handler: () => { - this.scene.gameData.importData(GameDataType.RUN_HISTORY); + globalScene.gameData.importData(GameDataType.RUN_HISTORY); return true; }, keepOpen: true @@ -241,7 +242,7 @@ export default class MenuUiHandler extends MessageUiHandler { manageDataOptions.push({ label: i18next.t("menuUiHandler:exportRunHistory"), handler: () => { - this.scene.gameData.tryExportData(GameDataType.RUN_HISTORY); + globalScene.gameData.tryExportData(GameDataType.RUN_HISTORY); return true; }, keepOpen: true @@ -251,7 +252,7 @@ export default class MenuUiHandler extends MessageUiHandler { label: i18next.t("menuUiHandler:importData"), handler: () => { ui.revertMode(); - this.scene.gameData.importData(GameDataType.SYSTEM); + globalScene.gameData.importData(GameDataType.SYSTEM); return true; }, keepOpen: true @@ -260,7 +261,7 @@ export default class MenuUiHandler extends MessageUiHandler { manageDataOptions.push({ label: i18next.t("menuUiHandler:exportData"), handler: () => { - this.scene.gameData.tryExportData(GameDataType.SYSTEM); + globalScene.gameData.tryExportData(GameDataType.SYSTEM); return true; }, keepOpen: true @@ -311,7 +312,7 @@ export default class MenuUiHandler extends MessageUiHandler { } // Switch to the dialog test window this.setDialogTestMode(true); - ui.showText(String(i18next.t(translatedString, interpolatorOptions)), null, () => this.scene.ui.showText("", 0, () => { + ui.showText(String(i18next.t(translatedString, interpolatorOptions)), null, () => globalScene.ui.showText("", 0, () => { handler.tutorialActive = false; // Go back to the default message window this.setDialogTestMode(false); @@ -330,7 +331,7 @@ export default class MenuUiHandler extends MessageUiHandler { manageDataOptions.push({ label: i18next.t("menuUiHandler:cancel"), handler: () => { - this.scene.ui.revertMode(); + globalScene.ui.revertMode(); return true; }, keepOpen: true @@ -421,7 +422,7 @@ export default class MenuUiHandler extends MessageUiHandler { return true; } }); - this.scene.ui.setOverlayMode(Mode.OPTION_SELECT, { + globalScene.ui.setOverlayMode(Mode.OPTION_SELECT, { options: options, delay: 0 }); @@ -433,7 +434,7 @@ export default class MenuUiHandler extends MessageUiHandler { communityOptions.push({ label: i18next.t("menuUiHandler:cancel"), handler: () => { - this.scene.ui.revertMode(); + globalScene.ui.revertMode(); return true; } }); @@ -461,12 +462,12 @@ export default class MenuUiHandler extends MessageUiHandler { this.getUi().hideTooltip(); - this.scene.playSound("ui/menu_open"); + globalScene.playSound("ui/menu_open"); // Make sure the tutorial overlay sits above everything, but below the message box this.menuContainer.bringToTop(this.tutorialOverlay); this.menuContainer.bringToTop(this.menuMessageBoxContainer); - handleTutorial(this.scene, Tutorial.Menu); + handleTutorial(Tutorial.Menu); this.bgmBar.toggleBgmBar(true); @@ -507,12 +508,8 @@ export default class MenuUiHandler extends MessageUiHandler { ui.setOverlayMode(Mode.GAME_STATS); success = true; break; - case MenuOptions.RUN_HISTORY: - ui.setOverlayMode(Mode.RUN_HISTORY); - success = true; - break; case MenuOptions.EGG_LIST: - if (this.scene.gameData.eggs.length) { + if (globalScene.gameData.eggs.length) { ui.revertMode(); ui.setOverlayMode(Mode.EGG_LIST); success = true; @@ -526,6 +523,11 @@ export default class MenuUiHandler extends MessageUiHandler { ui.setOverlayMode(Mode.EGG_GACHA); success = true; break; + case MenuOptions.POKEDEX: + ui.revertMode(); + ui.setOverlayMode(Mode.POKEDEX); + success = true; + break; case MenuOptions.MANAGE_DATA: if (!bypassLogin && !this.manageDataConfig.options.some(o => o.label === i18next.t("menuUiHandler:linkDiscord") || o.label === i18next.t("menuUiHandler:unlinkDiscord"))) { this.manageDataConfig.options.splice(this.manageDataConfig.options.length - 1, 0, @@ -541,7 +543,7 @@ export default class MenuUiHandler extends MessageUiHandler { return true; } else { pokerogueApi.unlinkDiscord().then(_isSuccess => { - updateUserInfo().then(() => this.scene.reset(true, true)); + updateUserInfo().then(() => globalScene.reset(true, true)); }); return true; } @@ -559,7 +561,7 @@ export default class MenuUiHandler extends MessageUiHandler { return true; } else { pokerogueApi.unlinkGoogle().then(_isSuccess => { - updateUserInfo().then(() => this.scene.reset(true, true)); + updateUserInfo().then(() => globalScene.reset(true, true)); }); return true; } @@ -574,18 +576,18 @@ export default class MenuUiHandler extends MessageUiHandler { success = true; break; case MenuOptions.SAVE_AND_QUIT: - if (this.scene.currentBattle) { + if (globalScene.currentBattle) { success = true; const doSaveQuit = () => { ui.setMode(Mode.LOADING, { buttonActions: [], fadeOut: () => - this.scene.gameData.saveAll(this.scene, true, true, true, true).then(() => { + globalScene.gameData.saveAll(true, true, true, true).then(() => { - this.scene.reset(true); + globalScene.reset(true); }) }); }; - if (this.scene.currentBattle.turn > 1) { + if (globalScene.currentBattle.turn > 1) { ui.showText(i18next.t("menuUiHandler:losingProgressionWarning"), null, () => { if (!this.active) { this.showText("", 0); @@ -608,11 +610,11 @@ export default class MenuUiHandler extends MessageUiHandler { const doLogout = () => { ui.setMode(Mode.LOADING, { buttonActions: [], fadeOut: () => pokerogueApi.account.logout().then(() => { - updateUserInfo().then(() => this.scene.reset(true, true)); + updateUserInfo().then(() => globalScene.reset(true, true)); }) }); }; - if (this.scene.currentBattle) { + if (globalScene.currentBattle) { ui.showText(i18next.t("menuUiHandler:losingProgressionWarning"), null, () => { if (!this.active) { this.showText("", 0); @@ -673,7 +675,7 @@ export default class MenuUiHandler extends MessageUiHandler { this.menuMessageBox.setVisible(!isDialogMode); this.dialogueMessageBox.setVisible(isDialogMode); // If we're testing dialog, we use the same word wrapping as the battle message handler - this.message.setWordWrapWidth(isDialogMode ? this.scene.ui.getMessageHandler().wordWrapWidth : this.defaultWordWrapWidth); + this.message.setWordWrapWidth(isDialogMode ? globalScene.ui.getMessageHandler().wordWrapWidth : this.defaultWordWrapWidth); this.message.setX(isDialogMode ? this.textPadding + 1 : this.textPadding); this.message.setY(isDialogMode ? this.textPadding + 0.4 : this.textPadding); } @@ -684,11 +686,11 @@ export default class MenuUiHandler extends MessageUiHandler { super.showText(text, delay, callback, callbackDelay, prompt, promptDelay); } - setCursor(cursor: integer): boolean { + setCursor(cursor: number): boolean { const ret = super.setCursor(cursor); if (!this.cursorObj) { - this.cursorObj = this.scene.add.image(0, 0, "cursor"); + this.cursorObj = globalScene.add.image(0, 0, "cursor"); this.cursorObj.setOrigin(0, 0); this.menuContainer.add(this.cursorObj); } diff --git a/src/ui/message-ui-handler.ts b/src/ui/message-ui-handler.ts index 5ae4707e329..18e1dfb1aff 100644 --- a/src/ui/message-ui-handler.ts +++ b/src/ui/message-ui-handler.ts @@ -1,7 +1,7 @@ -import BattleScene from "../battle-scene"; import AwaitableUiHandler from "./awaitable-ui-handler"; -import { Mode } from "./ui"; +import type { Mode } from "./ui"; import * as Utils from "../utils"; +import { globalScene } from "#app/global-scene"; export default abstract class MessageUiHandler extends AwaitableUiHandler { protected textTimer: Phaser.Time.TimerEvent | null; @@ -11,8 +11,8 @@ export default abstract class MessageUiHandler extends AwaitableUiHandler { public message: Phaser.GameObjects.Text; public prompt: Phaser.GameObjects.Sprite; - constructor(scene: BattleScene, mode: Mode | null = null) { - super(scene, mode); + constructor(mode: Mode | null = null) { + super(mode); this.pendingPrompt = false; } @@ -23,7 +23,7 @@ export default abstract class MessageUiHandler extends AwaitableUiHandler { */ initPromptSprite(container: Phaser.GameObjects.Container) { if (!this.prompt) { - const promptSprite = this.scene.add.sprite(0, 0, "prompt"); + const promptSprite = globalScene.add.sprite(0, 0, "prompt"); promptSprite.setVisible(false); promptSprite.setOrigin(0, 0); this.prompt = promptSprite; @@ -34,24 +34,24 @@ export default abstract class MessageUiHandler extends AwaitableUiHandler { } } - showText(text: string, delay?: integer | null, callback?: Function | null, callbackDelay?: integer | null, prompt?: boolean | null, promptDelay?: integer | null) { + showText(text: string, delay?: number | null, callback?: Function | null, callbackDelay?: number | null, prompt?: boolean | null, promptDelay?: number | null) { this.showTextInternal(text, delay, callback, callbackDelay, prompt, promptDelay); } - showDialogue(text: string, name?: string, delay?: integer | null, callback?: Function | null, callbackDelay?: integer | null, prompt?: boolean | null, promptDelay?: integer | null) { + showDialogue(text: string, name?: string, delay?: number | null, callback?: Function | null, callbackDelay?: number | null, prompt?: boolean | null, promptDelay?: number | null) { this.showTextInternal(text, delay, callback, callbackDelay, prompt, promptDelay); } - private showTextInternal(text: string, delay?: integer | null, callback?: Function | null, callbackDelay?: integer | null, prompt?: boolean | null, promptDelay?: integer | null) { + private showTextInternal(text: string, delay?: number | null, callback?: Function | null, callbackDelay?: number | null, prompt?: boolean | null, promptDelay?: number | null) { if (delay === null || delay === undefined) { delay = 20; } // Pattern matching regex that checks for @c{}, @f{}, @s{}, and @f{} patterns within message text and parses them to their respective behaviors. - const charVarMap = new Map(); - const delayMap = new Map(); - const soundMap = new Map(); - const fadeMap = new Map(); + const charVarMap = new Map(); + const delayMap = new Map(); + const soundMap = new Map(); + const fadeMap = new Map(); const actionPattern = /@(c|d|s|f)\{(.*?)\}/; let actionMatch: RegExpExecArray | null; while ((actionMatch = actionPattern.exec(text))) { @@ -108,7 +108,7 @@ export default abstract class MessageUiHandler extends AwaitableUiHandler { callback = () => { const showPrompt = () => this.showPrompt(originalCallback, callbackDelay); if (promptDelay) { - this.scene.time.delayedCall(promptDelay, showPrompt); + globalScene.time.delayedCall(promptDelay, showPrompt); } else { showPrompt(); } @@ -119,7 +119,7 @@ export default abstract class MessageUiHandler extends AwaitableUiHandler { if (prompt) { this.pendingPrompt = true; } - this.textTimer = this.scene.time.addEvent({ + this.textTimer = globalScene.time.addEvent({ delay: delay, callback: () => { const charIndex = text.length - (this.textTimer?.repeatCount!); // TODO: is this bang correct? @@ -130,14 +130,14 @@ export default abstract class MessageUiHandler extends AwaitableUiHandler { this.message.setText(text.slice(0, charIndex)); const advance = () => { if (charVar) { - this.scene.charSprite.setVariant(charVar); + globalScene.charSprite.setVariant(charVar); } if (charSound) { - this.scene.playSound(charSound); + globalScene.playSound(charSound); } if (callback && !this.textTimer?.repeatCount) { if (callbackDelay && !prompt) { - this.textCallbackTimer = this.scene.time.delayedCall(callbackDelay, () => { + this.textCallbackTimer = globalScene.time.delayedCall(callbackDelay, () => { if (this.textCallbackTimer) { this.textCallbackTimer.destroy(); this.textCallbackTimer = null; @@ -151,7 +151,7 @@ export default abstract class MessageUiHandler extends AwaitableUiHandler { }; if (charDelay) { this.textTimer!.paused = true; // TODO: is the bang correct? - this.scene.tweens.addCounter({ + globalScene.tweens.addCounter({ duration: Utils.getFrameMs(charDelay), onComplete: () => { this.textTimer!.paused = false; // TODO: is the bang correct? @@ -160,11 +160,11 @@ export default abstract class MessageUiHandler extends AwaitableUiHandler { }); } else if (charFade) { this.textTimer!.paused = true; - this.scene.time.delayedCall(150, () => { - this.scene.ui.fadeOut(750).then(() => { + globalScene.time.delayedCall(150, () => { + globalScene.ui.fadeOut(750).then(() => { const delay = Utils.getFrameMs(charFade); - this.scene.time.delayedCall(delay, () => { - this.scene.ui.fadeIn(500).then(() => { + globalScene.time.delayedCall(delay, () => { + globalScene.ui.fadeIn(500).then(() => { this.textTimer!.paused = false; advance(); }); @@ -188,11 +188,11 @@ export default abstract class MessageUiHandler extends AwaitableUiHandler { } } - showPrompt(callback?: Function | null, callbackDelay?: integer | null) { + showPrompt(callback?: Function | null, callbackDelay?: number | null) { const wrappedTextLines = this.message.runWordWrap(this.message.text).split(/\n/g); const textLinesCount = wrappedTextLines.length; const lastTextLine = wrappedTextLines[wrappedTextLines.length - 1]; - const lastLineTest = this.scene.add.text(0, 0, lastTextLine, { font: "96px emerald" }); + const lastLineTest = globalScene.add.text(0, 0, lastTextLine, { font: "96px emerald" }); lastLineTest.setScale(this.message.scale); const lastLineWidth = lastLineTest.displayWidth; lastLineTest.destroy(); @@ -209,7 +209,7 @@ export default abstract class MessageUiHandler extends AwaitableUiHandler { } if (callback) { if (callbackDelay) { - this.textCallbackTimer = this.scene.time.delayedCall(callbackDelay, () => { + this.textCallbackTimer = globalScene.time.delayedCall(callbackDelay, () => { if (this.textCallbackTimer) { this.textCallbackTimer.destroy(); this.textCallbackTimer = null; diff --git a/src/ui/modal-ui-handler.ts b/src/ui/modal-ui-handler.ts index 79f1e8afeed..909010e3566 100644 --- a/src/ui/modal-ui-handler.ts +++ b/src/ui/modal-ui-handler.ts @@ -1,9 +1,9 @@ -import BattleScene from "../battle-scene"; import { TextStyle, addTextObject } from "./text"; -import { Mode } from "./ui"; +import type { Mode } from "./ui"; import UiHandler from "./ui-handler"; import { WindowVariant, addWindow } from "./ui-theme"; -import { Button } from "#enums/buttons"; +import type { Button } from "#enums/buttons"; +import { globalScene } from "#app/global-scene"; export interface ModalConfig { buttonActions: Function[]; @@ -17,8 +17,8 @@ export abstract class ModalUiHandler extends UiHandler { protected buttonBgs: Phaser.GameObjects.NineSlice[]; protected buttonLabels: Phaser.GameObjects.Text[]; - constructor(scene: BattleScene, mode: Mode | null = null) { - super(scene, mode); + constructor(mode: Mode | null = null) { + super(mode); this.buttonContainers = []; this.buttonBgs = []; @@ -42,15 +42,15 @@ export abstract class ModalUiHandler extends UiHandler { setup() { const ui = this.getUi(); - this.modalContainer = this.scene.add.container(0, 0); + this.modalContainer = globalScene.add.container(0, 0); - this.modalContainer.setInteractive(new Phaser.Geom.Rectangle(0, 0, this.scene.game.canvas.width / 6, this.scene.game.canvas.height / 6), Phaser.Geom.Rectangle.Contains); + this.modalContainer.setInteractive(new Phaser.Geom.Rectangle(0, 0, globalScene.game.canvas.width / 6, globalScene.game.canvas.height / 6), Phaser.Geom.Rectangle.Contains); - this.modalBg = addWindow(this.scene, 0, 0, 0, 0); + this.modalBg = addWindow(0, 0, 0, 0); this.modalContainer.add(this.modalBg); - this.titleText = addTextObject(this.scene, 0, 4, "", TextStyle.SETTINGS_LABEL); + this.titleText = addTextObject(0, 4, "", TextStyle.SETTINGS_LABEL); this.titleText.setOrigin(0.5, 0); this.modalContainer.add(this.titleText); @@ -68,14 +68,14 @@ export abstract class ModalUiHandler extends UiHandler { private addButton(label: string) { const buttonTopMargin = this.getButtonTopMargin(); - const buttonLabel = addTextObject(this.scene, 0, 8, label, TextStyle.TOOLTIP_CONTENT); + const buttonLabel = addTextObject(0, 8, label, TextStyle.TOOLTIP_CONTENT); buttonLabel.setOrigin(0.5, 0.5); - const buttonBg = addWindow(this.scene, 0, 0, buttonLabel.getBounds().width + 8, 16, false, false, 0, 0, WindowVariant.THIN); + const buttonBg = addWindow(0, 0, buttonLabel.getBounds().width + 8, 16, false, false, 0, 0, WindowVariant.THIN); buttonBg.setOrigin(0.5, 0); buttonBg.setInteractive(new Phaser.Geom.Rectangle(0, 0, buttonBg.width, buttonBg.height), Phaser.Geom.Rectangle.Contains); - const buttonContainer = this.scene.add.container(0, buttonTopMargin); + const buttonContainer = globalScene.add.container(0, buttonTopMargin); this.buttonLabels.push(buttonLabel); this.buttonBgs.push(buttonBg); @@ -95,7 +95,7 @@ export abstract class ModalUiHandler extends UiHandler { if (args[0].hasOwnProperty("fadeOut") && typeof args[0].fadeOut === "function") { const [ marginTop, marginRight, marginBottom, marginLeft ] = this.getMargin(); - const overlay = this.scene.add.rectangle(( this.getWidth() + marginLeft + marginRight) / 2, (this.getHeight() + marginTop + marginBottom) / 2, this.scene.game.canvas.width / 6, this.scene.game.canvas.height / 6, 0); + 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, 0); overlay.setOrigin(0.5, 0.5); overlay.setName("rect-ui-overlay-modal"); overlay.setAlpha(0); @@ -103,7 +103,7 @@ export abstract class ModalUiHandler extends UiHandler { this.modalContainer.add(overlay); this.modalContainer.moveTo(overlay, 0); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: overlay, alpha: 1, duration: 250, @@ -136,7 +136,7 @@ export abstract class ModalUiHandler extends UiHandler { const [ marginTop, marginRight, marginBottom, marginLeft ] = this.getMargin(config); const [ width, height ] = [ this.getWidth(config), this.getHeight(config) ]; - this.modalContainer.setPosition((((this.scene.game.canvas.width / 6) - (width + (marginRight - marginLeft))) / 2), (((-this.scene.game.canvas.height / 6) - (height + (marginBottom - marginTop))) / 2)); + this.modalContainer.setPosition((((globalScene.game.canvas.width / 6) - (width + (marginRight - marginLeft))) / 2), (((-globalScene.game.canvas.height / 6) - (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 a0358b5ca8c..76d02c191bb 100644 --- a/src/ui/modifier-select-ui-handler.ts +++ b/src/ui/modifier-select-ui-handler.ts @@ -1,5 +1,6 @@ -import BattleScene from "../battle-scene"; -import { getPlayerShopModifierTypeOptionsForWave, ModifierTypeOption, TmModifierType } from "../modifier/modifier-type"; +import { globalScene } from "#app/global-scene"; +import type { ModifierTypeOption } from "../modifier/modifier-type"; +import { getPlayerShopModifierTypeOptionsForWave, TmModifierType } from "../modifier/modifier-type"; import { getPokeballAtlasKey } from "#app/data/pokeball"; import { addTextObject, getTextStyleOptions, getModifierTierTextTint, getTextColor, TextStyle } from "./text"; import AwaitableUiHandler from "./awaitable-ui-handler"; @@ -13,7 +14,7 @@ import * as Utils from "./../utils"; import Overrides from "#app/overrides"; import i18next from "i18next"; import { ShopCursorTarget } from "#app/enums/shop-cursor-target"; -import { IntegerHolder } from "./../utils"; +import { NumberHolder } from "./../utils"; import Phaser from "phaser"; import type { PokeballType } from "#enums/pokeball"; @@ -34,23 +35,23 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { private moveInfoOverlay: MoveInfoOverlay; private moveInfoOverlayActive: boolean = false; - private rowCursor: integer = 0; + private rowCursor: number = 0; private player: boolean; /** * If reroll cost is negative, it is assumed there are 0 items in the shop. * It will cause reroll button to be disabled, and a "Continue" button to show in the place of shop items */ - private rerollCost: integer; - private transferButtonWidth: integer; - private checkButtonWidth: integer; + private rerollCost: number; + private transferButtonWidth: number; + private checkButtonWidth: number; public options: ModifierOption[]; public shopOptionsRows: ModifierOption[][]; private cursorObj: Phaser.GameObjects.Image | null; - constructor(scene: BattleScene) { - super(scene, Mode.CONFIRM); + constructor() { + super(Mode.CONFIRM); this.options = []; this.shopOptionsRows = []; @@ -59,12 +60,12 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { setup() { const ui = this.getUi(); - this.modifierContainer = this.scene.add.container(0, 0); + this.modifierContainer = globalScene.add.container(0, 0); ui.add(this.modifierContainer); const canvas = document.createElement("canvas"); const context = canvas.getContext("2d"); - const styleOptions = getTextStyleOptions(TextStyle.PARTY, (this.scene as BattleScene).uiTheme).styleOptions; + const styleOptions = getTextStyleOptions(TextStyle.PARTY, globalScene.uiTheme).styleOptions; if (context) { context.font = styleOptions.fontSize + "px " + styleOptions.fontFamily; @@ -72,78 +73,78 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { this.checkButtonWidth = context.measureText(i18next.t("modifierSelectUiHandler:checkTeam")).width; } - this.transferButtonContainer = this.scene.add.container((this.scene.game.canvas.width - this.checkButtonWidth) / 6 - 21, OPTION_BUTTON_YPOSITION); + this.transferButtonContainer = globalScene.add.container((globalScene.game.canvas.width - this.checkButtonWidth) / 6 - 21, OPTION_BUTTON_YPOSITION); this.transferButtonContainer.setName("transfer-btn"); this.transferButtonContainer.setVisible(false); ui.add(this.transferButtonContainer); - const transferButtonText = addTextObject(this.scene, -4, -2, i18next.t("modifierSelectUiHandler:transfer"), TextStyle.PARTY); + const transferButtonText = addTextObject(-4, -2, i18next.t("modifierSelectUiHandler:transfer"), TextStyle.PARTY); transferButtonText.setName("text-transfer-btn"); transferButtonText.setOrigin(1, 0); this.transferButtonContainer.add(transferButtonText); - this.checkButtonContainer = this.scene.add.container((this.scene.game.canvas.width) / 6 - 1, OPTION_BUTTON_YPOSITION); + this.checkButtonContainer = globalScene.add.container((globalScene.game.canvas.width) / 6 - 1, OPTION_BUTTON_YPOSITION); this.checkButtonContainer.setName("use-btn"); this.checkButtonContainer.setVisible(false); ui.add(this.checkButtonContainer); - const checkButtonText = addTextObject(this.scene, -4, -2, i18next.t("modifierSelectUiHandler:checkTeam"), TextStyle.PARTY); + const checkButtonText = addTextObject(-4, -2, i18next.t("modifierSelectUiHandler:checkTeam"), TextStyle.PARTY); checkButtonText.setName("text-use-btn"); checkButtonText.setOrigin(1, 0); this.checkButtonContainer.add(checkButtonText); - this.rerollButtonContainer = this.scene.add.container(16, OPTION_BUTTON_YPOSITION); + this.rerollButtonContainer = globalScene.add.container(16, OPTION_BUTTON_YPOSITION); this.rerollButtonContainer.setName("reroll-brn"); this.rerollButtonContainer.setVisible(false); ui.add(this.rerollButtonContainer); - const rerollButtonText = addTextObject(this.scene, -4, -2, i18next.t("modifierSelectUiHandler:reroll"), TextStyle.PARTY); + const rerollButtonText = addTextObject(-4, -2, i18next.t("modifierSelectUiHandler:reroll"), TextStyle.PARTY); rerollButtonText.setName("text-reroll-btn"); rerollButtonText.setOrigin(0, 0); this.rerollButtonContainer.add(rerollButtonText); - this.rerollCostText = addTextObject(this.scene, 0, 0, "", TextStyle.MONEY); + this.rerollCostText = addTextObject(0, 0, "", TextStyle.MONEY); this.rerollCostText.setName("text-reroll-cost"); this.rerollCostText.setOrigin(0, 0); this.rerollCostText.setPositionRelative(rerollButtonText, rerollButtonText.displayWidth + 5, 1); this.rerollButtonContainer.add(this.rerollCostText); - this.lockRarityButtonContainer = this.scene.add.container(16, OPTION_BUTTON_YPOSITION); + this.lockRarityButtonContainer = globalScene.add.container(16, OPTION_BUTTON_YPOSITION); this.lockRarityButtonContainer.setVisible(false); ui.add(this.lockRarityButtonContainer); - this.lockRarityButtonText = addTextObject(this.scene, -4, -2, i18next.t("modifierSelectUiHandler:lockRarities"), TextStyle.PARTY); + this.lockRarityButtonText = addTextObject(-4, -2, i18next.t("modifierSelectUiHandler:lockRarities"), TextStyle.PARTY); this.lockRarityButtonText.setOrigin(0, 0); this.lockRarityButtonContainer.add(this.lockRarityButtonText); - this.continueButtonContainer = this.scene.add.container((this.scene.game.canvas.width / 12), -(this.scene.game.canvas.height / 12)); + this.continueButtonContainer = globalScene.add.container((globalScene.game.canvas.width / 12), -(globalScene.game.canvas.height / 12)); this.continueButtonContainer.setVisible(false); ui.add(this.continueButtonContainer); // Create continue button - const continueButtonText = addTextObject(this.scene, -24, 5, i18next.t("modifierSelectUiHandler:continueNextWaveButton"), TextStyle.MESSAGE); + const continueButtonText = addTextObject(-24, 5, i18next.t("modifierSelectUiHandler:continueNextWaveButton"), TextStyle.MESSAGE); continueButtonText.setName("text-continue-btn"); this.continueButtonContainer.add(continueButtonText); // prepare move overlay const overlayScale = 1; - this.moveInfoOverlay = new MoveInfoOverlay(this.scene, { + this.moveInfoOverlay = new MoveInfoOverlay({ delayVisibility: true, scale: overlayScale, onSide: true, right: true, x: 1, y: -MoveInfoOverlay.getHeight(overlayScale, true) - 1, - width: (this.scene.game.canvas.width / 6) - 2, + width: (globalScene.game.canvas.width / 6) - 2, }); ui.add(this.moveInfoOverlay); // register the overlay to receive toggle events - this.scene.addInfoToggle(this.moveInfoOverlay); + globalScene.addInfoToggle(this.moveInfoOverlay); } show(args: any[]): boolean { - this.scene.disableMenu = false; + globalScene.disableMenu = false; if (this.active) { if (args.length >= 3) { @@ -164,8 +165,8 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { this.player = args[0]; - const partyHasHeldItem = this.player && !!this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier && m.isTransferable).length; - const canLockRarities = !!this.scene.findModifier(m => m instanceof LockModifierTiersModifier); + const partyHasHeldItem = this.player && !!globalScene.findModifiers(m => m instanceof PokemonHeldItemModifier && m.isTransferable).length; + const canLockRarities = !!globalScene.findModifier(m => m instanceof LockModifierTiersModifier); this.transferButtonContainer.setVisible(false); this.transferButtonContainer.setAlpha(0); @@ -184,24 +185,24 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { this.rerollButtonContainer.setPositionRelative(this.lockRarityButtonContainer, 0, canLockRarities ? -12 : 0); - this.rerollCost = args[3] as integer; + this.rerollCost = args[3] as number; this.updateRerollCostText(); const typeOptions = args[1] as ModifierTypeOption[]; - const removeHealShop = this.scene.gameMode.hasNoShop; - const baseShopCost = new IntegerHolder(this.scene.getWaveMoneyAmount(1)); - this.scene.applyModifier(HealShopCostModifier, true, baseShopCost); + const removeHealShop = globalScene.gameMode.hasNoShop; + const baseShopCost = new NumberHolder(globalScene.getWaveMoneyAmount(1)); + globalScene.applyModifier(HealShopCostModifier, true, baseShopCost); const shopTypeOptions = !removeHealShop - ? getPlayerShopModifierTypeOptionsForWave(this.scene.currentBattle.waveIndex, baseShopCost.value) + ? 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 = (this.scene.game.canvas.width / 6) / (typeOptions.length + 2); - const option = new ModifierOption(this.scene, sliceWidth * (m + 1) + (sliceWidth * 0.5), -this.scene.game.canvas.height / 12 + optionsYOffset, typeOptions[m]); + const sliceWidth = (globalScene.game.canvas.width / 6) / (typeOptions.length + 2); + const option = new ModifierOption(sliceWidth * (m + 1) + (sliceWidth * 0.5), -globalScene.game.canvas.height / 12 + optionsYOffset, typeOptions[m]); option.setScale(0.5); - this.scene.add.existing(option); + globalScene.add.existing(option); this.modifierContainer.add(option); this.options.push(option); } @@ -215,10 +216,10 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { const row = m < SHOP_OPTIONS_ROW_LIMIT ? 0 : 1; const col = m < SHOP_OPTIONS_ROW_LIMIT ? m : m - SHOP_OPTIONS_ROW_LIMIT; const rowOptions = shopTypeOptions.slice(row ? SHOP_OPTIONS_ROW_LIMIT : 0, row ? undefined : SHOP_OPTIONS_ROW_LIMIT); - const sliceWidth = (this.scene.game.canvas.width / 6) / (rowOptions.length + 2); - const option = new ModifierOption(this.scene, sliceWidth * (col + 1) + (sliceWidth * 0.5), ((-this.scene.game.canvas.height / 12) - (this.scene.game.canvas.height / 32) - (42 - (28 * row - 1))), shopTypeOptions[m]); + const sliceWidth = (globalScene.game.canvas.width / 6) / (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))), shopTypeOptions[m]); option.setScale(0.375); - this.scene.add.existing(option); + globalScene.add.existing(option); this.modifierContainer.add(option); if (row >= this.shopOptionsRows.length) { @@ -230,17 +231,17 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { const maxUpgradeCount = typeOptions.map(to => to.upgradeCount).reduce((max, current) => Math.max(current, max), 0); /* Force updateModifiers without pokemonSpecificModifiers */ - this.scene.getModifierBar().updateModifiers(this.scene.modifiers, true); + globalScene.getModifierBar().updateModifiers(globalScene.modifiers, true); /* Multiplies the appearance duration by the speed parameter so that it is always constant, and avoids "flashbangs" at game speed x5 */ - this.scene.showShopOverlay(750 * this.scene.gameSpeed); - this.scene.updateAndShowText(750); - this.scene.updateBiomeWaveText(); - this.scene.updateMoneyText(); + globalScene.showShopOverlay(750 * globalScene.gameSpeed); + globalScene.updateAndShowText(750); + globalScene.updateBiomeWaveText(); + globalScene.updateMoneyText(); let i = 0; - this.scene.tweens.addCounter({ + globalScene.tweens.addCounter({ ease: "Sine.easeIn", duration: 1250, onUpdate: t => { @@ -254,17 +255,17 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { } }); - this.scene.time.delayedCall(1000 + maxUpgradeCount * 2000, () => { + globalScene.time.delayedCall(1000 + maxUpgradeCount * 2000, () => { for (const shopOption of this.shopOptionsRows.flat()) { shopOption.show(0, 0); } }); - this.scene.time.delayedCall(4000 + maxUpgradeCount * 2000, () => { + globalScene.time.delayedCall(4000 + maxUpgradeCount * 2000, () => { if (partyHasHeldItem) { this.transferButtonContainer.setAlpha(0); this.transferButtonContainer.setVisible(true); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.transferButtonContainer, alpha: 1, duration: 250 @@ -280,34 +281,34 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { this.continueButtonContainer.setVisible(this.rerollCost < 0); this.lockRarityButtonContainer.setVisible(canLockRarities); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: [ this.checkButtonContainer, this.continueButtonContainer ], alpha: 1, duration: 250 }); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: [ this.rerollButtonContainer, this.lockRarityButtonContainer ], alpha: this.rerollCost < 0 ? 0.5 : 1, duration: 250 }); const updateCursorTarget = () => { - if (this.scene.shopCursorTarget === ShopCursorTarget.CHECK_TEAM) { + if (globalScene.shopCursorTarget === ShopCursorTarget.CHECK_TEAM) { this.setRowCursor(0); this.setCursor(2); - } else if ((this.scene.shopCursorTarget === ShopCursorTarget.SHOP) && this.scene.gameMode.hasNoShop) { + } else if ((globalScene.shopCursorTarget === ShopCursorTarget.SHOP) && globalScene.gameMode.hasNoShop) { this.setRowCursor(ShopCursorTarget.REWARDS); this.setCursor(0); } else { - this.setRowCursor(this.scene.shopCursorTarget); + this.setRowCursor(globalScene.shopCursorTarget); this.setCursor(0); } }; updateCursorTarget(); - handleTutorial(this.scene, Tutorial.Select_Item).then((res) => { + handleTutorial(Tutorial.Select_Item).then((res) => { if (res) { updateCursorTarget(); } @@ -363,6 +364,8 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { success = this.setCursor(0); } else if (this.rowCursor < this.shopOptionsRows.length + 1) { success = this.setRowCursor(this.rowCursor + 1); + } else { + success = this.setRowCursor(0); } break; case Button.DOWN: @@ -370,13 +373,15 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { success = this.setRowCursor(this.rowCursor - 1); } else if (this.lockRarityButtonContainer.visible && this.cursor === 0) { success = this.setCursor(3); + } else { + success = this.setRowCursor(this.shopOptionsRows.length + 1); } break; case Button.LEFT: if (!this.rowCursor) { switch (this.cursor) { case 0: - success = false; + success = this.setCursor(2); break; case 1: if (this.lockRarityButtonContainer.visible) { @@ -394,11 +399,21 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { success = false; } break; + case 3: + if (this.lockRarityButtonContainer.visible) { + success = this.setCursor(2); + } else { + success = false; + } } } else if (this.cursor) { success = this.setCursor(this.cursor - 1); - } else if (this.rowCursor === 1 && this.rerollButtonContainer.visible) { - success = this.setRowCursor(0); + } else { + if (this.rowCursor === 1 && this.options.length === 0) { + success = false; + } else { + success = this.setCursor(this.getRowItems(this.rowCursor) - 1); + } } break; case Button.RIGHT: @@ -415,7 +430,7 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { success = this.setCursor(2); break; case 2: - success = false; + success = this.setCursor(0); break; case 3: if (this.transferButtonContainer.visible) { @@ -427,8 +442,12 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { } } else if (this.cursor < this.getRowItems(this.rowCursor) - 1) { success = this.setCursor(this.cursor + 1); - } else if (this.rowCursor === 1 && this.transferButtonContainer.visible) { - success = this.setRowCursor(0); + } else { + if (this.rowCursor === 1 && this.options.length === 0) { + success = this.setRowCursor(0); + } else { + success = this.setCursor(0); + } } break; } @@ -441,12 +460,12 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { return success; } - setCursor(cursor: integer): boolean { + setCursor(cursor: number): boolean { const ui = this.getUi(); const ret = super.setCursor(cursor); if (!this.cursorObj) { - this.cursorObj = this.scene.add.image(0, 0, "cursor"); + this.cursorObj = globalScene.add.image(0, 0, "cursor"); this.modifierContainer.add(this.cursorObj); } @@ -460,22 +479,22 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { if (this.rowCursor === 1 && options.length === 0) { // Continue button when no shop items this.cursorObj.setScale(1.25); - this.cursorObj.setPosition((this.scene.game.canvas.width / 18) + 23, (-this.scene.game.canvas.height / 12) - (this.shopOptionsRows.length > 1 ? SINGLE_SHOP_ROW_YOFFSET - 2 : DOUBLE_SHOP_ROW_YOFFSET - 2)); + this.cursorObj.setPosition((globalScene.game.canvas.width / 18) + 23, (-globalScene.game.canvas.height / 12) - (this.shopOptionsRows.length > 1 ? SINGLE_SHOP_ROW_YOFFSET - 2 : DOUBLE_SHOP_ROW_YOFFSET - 2)); ui.showText(i18next.t("modifierSelectUiHandler:continueNextWaveDescription")); return ret; } - const sliceWidth = (this.scene.game.canvas.width / 6) / (options.length + 2); + const sliceWidth = (globalScene.game.canvas.width / 6) / (options.length + 2); if (this.rowCursor < 2) { // Cursor on free items - this.cursorObj.setPosition(sliceWidth * (cursor + 1) + (sliceWidth * 0.5) - 20, (-this.scene.game.canvas.height / 12) - (this.shopOptionsRows.length > 1 ? SINGLE_SHOP_ROW_YOFFSET - 2 : DOUBLE_SHOP_ROW_YOFFSET - 2)); + this.cursorObj.setPosition(sliceWidth * (cursor + 1) + (sliceWidth * 0.5) - 20, (-globalScene.game.canvas.height / 12) - (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, (-this.scene.game.canvas.height / 12 - this.scene.game.canvas.height / 32) - (-14 + 28 * (this.rowCursor - (this.shopOptionsRows.length - 1)))); + this.cursorObj.setPosition(sliceWidth * (cursor + 1) + (sliceWidth * 0.5) - 16, (-globalScene.game.canvas.height / 12 - globalScene.game.canvas.height / 32) - (-14 + 28 * (this.rowCursor - (this.shopOptionsRows.length - 1)))); } const type = options[this.cursor].modifierTypeOption.type; - type && ui.showText(type.getDescription(this.scene)); + type && ui.showText(type.getDescription()); if (type instanceof TmModifierType) { // prepare the move overlay to be shown with the toggle this.moveInfoOverlay.show(allMoves[type.moveId]); @@ -484,10 +503,10 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { this.cursorObj.setPosition(6, this.lockRarityButtonContainer.visible ? OPTION_BUTTON_YPOSITION - 8 : OPTION_BUTTON_YPOSITION + 4); ui.showText(i18next.t("modifierSelectUiHandler:rerollDesc")); } else if (cursor === 1) { - this.cursorObj.setPosition((this.scene.game.canvas.width - this.transferButtonWidth - this.checkButtonWidth) / 6 - 30, OPTION_BUTTON_YPOSITION + 4); + this.cursorObj.setPosition((globalScene.game.canvas.width - this.transferButtonWidth - this.checkButtonWidth) / 6 - 30, OPTION_BUTTON_YPOSITION + 4); ui.showText(i18next.t("modifierSelectUiHandler:transferDesc")); } else if (cursor === 2) { - this.cursorObj.setPosition((this.scene.game.canvas.width - this.checkButtonWidth) / 6 - 10, OPTION_BUTTON_YPOSITION + 4); + this.cursorObj.setPosition((globalScene.game.canvas.width - this.checkButtonWidth) / 6 - 10, OPTION_BUTTON_YPOSITION + 4); ui.showText(i18next.t("modifierSelectUiHandler:checkTeamDesc")); } else { this.cursorObj.setPosition(6, OPTION_BUTTON_YPOSITION + 4); @@ -497,7 +516,7 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { return ret; } - setRowCursor(rowCursor: integer): boolean { + setRowCursor(rowCursor: number): boolean { const lastRowCursor = this.rowCursor; if (rowCursor !== lastRowCursor) { @@ -518,6 +537,14 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { newCursor = 2; } } + // Allows to find lock rarity button when looping from the top + if (rowCursor === 0 && lastRowCursor > 1 && newCursor === 0 && this.lockRarityButtonContainer.visible) { + newCursor = 3; + } + // Allows to loop to top when lock rarity button is shown + if (rowCursor === this.shopOptionsRows.length + 1 && lastRowCursor === 0 && this.cursor === 3) { + newCursor = 0; + } this.cursor = -1; this.setCursor(newCursor); return true; @@ -526,7 +553,7 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { return false; } - private getRowItems(rowCursor: integer): integer { + private getRowItems(rowCursor: number): number { switch (rowCursor) { case 0: return 3; @@ -537,7 +564,7 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { } } - setRerollCost(rerollCost: integer): void { + setRerollCost(rerollCost: number): void { this.rerollCost = rerollCost; } @@ -558,9 +585,9 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { } else { this.rerollCostText.setVisible(true); } - const canReroll = this.scene.money >= this.rerollCost; + const canReroll = globalScene.money >= this.rerollCost; - const formattedMoney = Utils.formatMoney(this.scene.moneyFormat, this.rerollCost); + const formattedMoney = Utils.formatMoney(globalScene.moneyFormat, this.rerollCost); this.rerollCostText.setText(i18next.t("modifierSelectUiHandler:rerollCost", { formattedMoney })); this.rerollCostText.setColor(this.getTextColor(canReroll ? TextStyle.MONEY : TextStyle.PARTY_RED)); @@ -568,7 +595,7 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { } updateLockRaritiesText(): void { - const textStyle = this.scene.lockModifierTiers ? TextStyle.SUMMARY_BLUE : TextStyle.PARTY; + const textStyle = globalScene.lockModifierTiers ? TextStyle.SUMMARY_BLUE : TextStyle.PARTY; this.lockRarityButtonText.setColor(this.getTextColor(textStyle)); this.lockRarityButtonText.setShadowColor(this.getTextColor(textStyle, true)); } @@ -588,17 +615,17 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { this.rowCursor = 0; /* Multiplies the fade time duration by the speed parameter so that it is always constant, and avoids "flashbangs" at game speed x5 */ - this.scene.hideShopOverlay(750 * this.scene.gameSpeed); - this.scene.hideLuckText(250); + globalScene.hideShopOverlay(750 * globalScene.gameSpeed); + globalScene.hideLuckText(250); /* Normally already called just after the shop, but not sure if it happens in 100% of cases */ - this.scene.getModifierBar().updateModifiers(this.scene.modifiers); + globalScene.getModifierBar().updateModifiers(globalScene.modifiers); const options = this.options.concat(this.shopOptionsRows.flat()); this.options.splice(0, this.options.length); this.shopOptionsRows.splice(0, this.shopOptionsRows.length); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: options, scale: 0.01, duration: 250, @@ -608,7 +635,7 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { [ this.rerollButtonContainer, this.checkButtonContainer, this.transferButtonContainer, this.lockRarityButtonContainer, this.continueButtonContainer ].forEach(container => { if (container.visible) { - this.scene.tweens.add({ + globalScene.tweens.add({ targets: container, alpha: 0, duration: 250, @@ -643,8 +670,8 @@ class ModifierOption extends Phaser.GameObjects.Container { private itemText: Phaser.GameObjects.Text; private itemCostText: Phaser.GameObjects.Text; - constructor(scene: BattleScene, x: number, y: number, modifierTypeOption: ModifierTypeOption) { - super(scene, x, y); + constructor(x: number, y: number, modifierTypeOption: ModifierTypeOption) { + super(globalScene, x, y); this.modifierTypeOption = modifierTypeOption; @@ -654,7 +681,7 @@ class ModifierOption extends Phaser.GameObjects.Container { setup() { if (!this.modifierTypeOption.cost) { const getPb = (): Phaser.GameObjects.Sprite => { - const pb = this.scene.add.sprite(0, -182, "pb", this.getPbAtlasKey(-this.modifierTypeOption.upgradeCount)); + const pb = globalScene.add.sprite(0, -182, "pb", this.getPbAtlasKey(-this.modifierTypeOption.upgradeCount)); pb.setScale(2); return pb; }; @@ -667,13 +694,13 @@ class ModifierOption extends Phaser.GameObjects.Container { this.add(this.pbTint); } - this.itemContainer = this.scene.add.container(0, 0); + this.itemContainer = globalScene.add.container(0, 0); this.itemContainer.setScale(0.5); this.itemContainer.setAlpha(0); this.add(this.itemContainer); const getItem = () => { - const item = this.scene.add.sprite(0, 0, "items", this.modifierTypeOption.type?.iconImage); + const item = globalScene.add.sprite(0, 0, "items", this.modifierTypeOption.type?.iconImage); return item; }; @@ -686,14 +713,14 @@ class ModifierOption extends Phaser.GameObjects.Container { this.itemContainer.add(this.itemTint); } - this.itemText = addTextObject(this.scene, 0, 35, this.modifierTypeOption.type?.name!, TextStyle.PARTY, { align: "center" }); // TODO: is this bang correct? + this.itemText = addTextObject(0, 35, this.modifierTypeOption.type?.name!, TextStyle.PARTY, { align: "center" }); // TODO: is this bang correct? this.itemText.setOrigin(0.5, 0); this.itemText.setAlpha(0); this.itemText.setTint(this.modifierTypeOption.type?.tier ? getModifierTierTextTint(this.modifierTypeOption.type?.tier) : undefined); this.add(this.itemText); if (this.modifierTypeOption.cost) { - this.itemCostText = addTextObject(this.scene, 0, 45, "", TextStyle.MONEY, { align: "center" }); + this.itemCostText = addTextObject(0, 45, "", TextStyle.MONEY, { align: "center" }); this.itemCostText.setOrigin(0.5, 0); this.itemCostText.setAlpha(0); @@ -703,9 +730,9 @@ class ModifierOption extends Phaser.GameObjects.Container { } } - show(remainingDuration: integer, upgradeCountOffset: integer) { + show(remainingDuration: number, upgradeCountOffset: number) { if (!this.modifierTypeOption.cost) { - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.pb, y: 0, duration: 1250, @@ -716,18 +743,18 @@ class ModifierOption extends Phaser.GameObjects.Container { let bounceCount = 0; let bounce = false; - this.scene.tweens.addCounter({ + globalScene.tweens.addCounter({ from: 1, to: 0, duration: 1250, ease: "Bounce.Out", onUpdate: t => { - if (!this.scene) { + if (!globalScene) { return; } const value = t.getValue(); if (!bounce && value > lastValue) { - (this.scene as BattleScene).playSound("se/pb_bounce_1", { volume: 1 / ++bounceCount }); + globalScene.playSound("se/pb_bounce_1", { volume: 1 / ++bounceCount }); bounce = true; } else if (bounce && value < lastValue) { bounce = false; @@ -738,20 +765,20 @@ class ModifierOption extends Phaser.GameObjects.Container { for (let u = 0; u < this.modifierTypeOption.upgradeCount; u++) { const upgradeIndex = u; - this.scene.time.delayedCall(remainingDuration - 2000 * (this.modifierTypeOption.upgradeCount - (upgradeIndex + 1 + upgradeCountOffset)), () => { - (this.scene as BattleScene).playSound("se/upgrade", { rate: 1 + 0.25 * upgradeIndex }); + globalScene.time.delayedCall(remainingDuration - 2000 * (this.modifierTypeOption.upgradeCount - (upgradeIndex + 1 + upgradeCountOffset)), () => { + globalScene.playSound("se/upgrade", { rate: 1 + 0.25 * upgradeIndex }); this.pbTint.setPosition(this.pb.x, this.pb.y); this.pbTint.setTintFill(0xFFFFFF); this.pbTint.setAlpha(0); this.pbTint.setVisible(true); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.pbTint, alpha: 1, duration: 1000, ease: "Sine.easeIn", onComplete: () => { this.pb.setTexture("pb", this.getPbAtlasKey(-this.modifierTypeOption.upgradeCount + (upgradeIndex + 1))); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.pbTint, alpha: 0, duration: 750, @@ -766,16 +793,16 @@ class ModifierOption extends Phaser.GameObjects.Container { } } - this.scene.time.delayedCall(remainingDuration + 2000, () => { - if (!this.scene) { + globalScene.time.delayedCall(remainingDuration + 2000, () => { + if (!globalScene) { return; } if (!this.modifierTypeOption.cost) { this.pb.setTexture("pb", `${this.getPbAtlasKey(0)}_open`); - (this.scene as BattleScene).playSound("se/pb_rel"); + globalScene.playSound("se/pb_rel"); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.pb, duration: 500, delay: 250, @@ -785,7 +812,7 @@ class ModifierOption extends Phaser.GameObjects.Container { }); } - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.itemContainer, duration: 500, ease: "Elastic.Out", @@ -793,7 +820,7 @@ class ModifierOption extends Phaser.GameObjects.Container { alpha: 1 }); if (!this.modifierTypeOption.cost) { - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.itemTint, alpha: 0, duration: 500, @@ -801,7 +828,7 @@ class ModifierOption extends Phaser.GameObjects.Container { onComplete: () => this.itemTint.destroy() }); } - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.itemText, duration: 500, alpha: 1, @@ -809,7 +836,7 @@ class ModifierOption extends Phaser.GameObjects.Container { ease: "Cubic.easeInOut" }); if (this.itemCostText) { - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.itemCostText, duration: 500, alpha: 1, @@ -820,19 +847,18 @@ class ModifierOption extends Phaser.GameObjects.Container { }); } - getPbAtlasKey(tierOffset: integer = 0) { - return getPokeballAtlasKey((this.modifierTypeOption.type?.tier! + tierOffset) as integer as PokeballType); // TODO: is this bang correct? + getPbAtlasKey(tierOffset: number = 0) { + return getPokeballAtlasKey((this.modifierTypeOption.type?.tier! + tierOffset) as number as PokeballType); // TODO: is this bang correct? } updateCostText(): void { - const scene = this.scene as BattleScene; const cost = Overrides.WAIVE_ROLL_FEE_OVERRIDE ? 0 : this.modifierTypeOption.cost; - const textStyle = cost <= scene.money ? TextStyle.MONEY : TextStyle.PARTY_RED; + const textStyle = cost <= globalScene.money ? TextStyle.MONEY : TextStyle.PARTY_RED; - const formattedMoney = Utils.formatMoney(scene.moneyFormat, cost); + const formattedMoney = Utils.formatMoney(globalScene.moneyFormat, cost); this.itemCostText.setText(i18next.t("modifierSelectUiHandler:itemCost", { formattedMoney })); - this.itemCostText.setColor(getTextColor(textStyle, false, scene.uiTheme)); - this.itemCostText.setShadowColor(getTextColor(textStyle, true, scene.uiTheme)); + this.itemCostText.setColor(getTextColor(textStyle, false, globalScene.uiTheme)); + this.itemCostText.setShadowColor(getTextColor(textStyle, true, globalScene.uiTheme)); } } diff --git a/src/ui/move-info-overlay.ts b/src/ui/move-info-overlay.ts index d9c4200ea9b..5b3b30b14dd 100644 --- a/src/ui/move-info-overlay.ts +++ b/src/ui/move-info-overlay.ts @@ -1,8 +1,10 @@ -import BattleScene, { InfoToggle } from "../battle-scene"; +import type { InfoToggle } from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { TextStyle, addTextObject } from "./text"; import { addWindow } from "./ui-theme"; import * as Utils from "../utils"; -import Move, { MoveCategory } from "../data/move"; +import type Move from "../data/move"; +import { MoveCategory } from "../data/move"; import { Type } from "#enums/type"; import i18next from "i18next"; @@ -46,23 +48,23 @@ export default class MoveInfoOverlay extends Phaser.GameObjects.Container implem private options : MoveInfoOverlaySettings; - constructor(scene: BattleScene, options?: MoveInfoOverlaySettings) { + constructor(options?: MoveInfoOverlaySettings) { if (options?.onSide) { options.top = false; } - super(scene, options?.x, options?.y); + super(globalScene, options?.x, options?.y); const scale = options?.scale || 1; // set up the scale this.setScale(scale); this.options = options || {}; // prepare the description box - const width = (options?.width || MoveInfoOverlay.getWidth(scale, scene)) / scale; // divide by scale as we always want this to be half a window wide - this.descBg = addWindow(scene, (options?.onSide && !options?.right ? EFF_WIDTH : 0), options?.top ? EFF_HEIGHT : 0, width - (options?.onSide ? EFF_WIDTH : 0), DESC_HEIGHT); + const width = (options?.width || MoveInfoOverlay.getWidth(scale)) / scale; // divide by scale as 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, width - (options?.onSide ? EFF_WIDTH : 0), DESC_HEIGHT); this.descBg.setOrigin(0, 0); this.add(this.descBg); // set up the description; wordWrap uses true pixels, unaffected by any scaling, while other values are affected - this.desc = addTextObject(scene, (options?.onSide && !options?.right ? EFF_WIDTH : 0) + BORDER, (options?.top ? EFF_HEIGHT : 0) + BORDER - 2, "", TextStyle.BATTLE_INFO, { wordWrap: { width: (width - (BORDER - 2) * 2 - (options?.onSide ? EFF_WIDTH : 0)) * GLOBAL_SCALE }}); + this.desc = addTextObject((options?.onSide && !options?.right ? EFF_WIDTH : 0) + BORDER, (options?.top ? EFF_HEIGHT : 0) + BORDER - 2, "", TextStyle.BATTLE_INFO, { wordWrap: { width: (width - (BORDER - 2) * 2 - (options?.onSide ? EFF_WIDTH : 0)) * GLOBAL_SCALE }}); this.desc.setLineSpacing(i18next.resolvedLanguage === "ja" ? 25 : 5); // limit the text rendering, required for scrolling later on @@ -71,13 +73,13 @@ export default class MoveInfoOverlay extends Phaser.GameObjects.Container implem y: (options?.y || 0), }; if (maskPointOrigin.x < 0) { - maskPointOrigin.x += this.scene.game.canvas.width / GLOBAL_SCALE; + maskPointOrigin.x += globalScene.game.canvas.width / GLOBAL_SCALE; } if (maskPointOrigin.y < 0) { - maskPointOrigin.y += this.scene.game.canvas.height / GLOBAL_SCALE; + maskPointOrigin.y += globalScene.game.canvas.height / GLOBAL_SCALE; } - const moveDescriptionTextMaskRect = this.scene.make.graphics(); + 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, @@ -89,44 +91,44 @@ export default class MoveInfoOverlay extends Phaser.GameObjects.Container implem this.desc.setMask(moveDescriptionTextMask); // prepare the effect box - this.val = new Phaser.GameObjects.Container(scene, options?.right ? width - EFF_WIDTH : 0, options?.top || options?.onSide ? 0 : DESC_HEIGHT); + this.val = new Phaser.GameObjects.Container(globalScene, options?.right ? width - EFF_WIDTH : 0, options?.top || options?.onSide ? 0 : DESC_HEIGHT); this.add(this.val); - const valuesBg = addWindow(scene, 0, 0, EFF_WIDTH, EFF_HEIGHT); + const valuesBg = addWindow(0, 0, EFF_WIDTH, EFF_HEIGHT); valuesBg.setOrigin(0, 0); this.val.add(valuesBg); - this.typ = this.scene.add.sprite(25, EFF_HEIGHT - 35, Utils.getLocalizedSpriteKey("types"), "unknown"); + this.typ = globalScene.add.sprite(25, EFF_HEIGHT - 35, Utils.getLocalizedSpriteKey("types"), "unknown"); this.typ.setScale(0.8); this.val.add(this.typ); - this.cat = this.scene.add.sprite(57, EFF_HEIGHT - 35, "categories", "physical"); + this.cat = globalScene.add.sprite(57, EFF_HEIGHT - 35, "categories", "physical"); this.val.add(this.cat); - const ppTxt = addTextObject(scene, 12, EFF_HEIGHT - 25, "PP", TextStyle.MOVE_INFO_CONTENT); + const ppTxt = addTextObject(12, EFF_HEIGHT - 25, "PP", TextStyle.MOVE_INFO_CONTENT); ppTxt.setOrigin(0.0, 0.5); ppTxt.setText(i18next.t("fightUiHandler:pp")); this.val.add(ppTxt); - this.pp = addTextObject(scene, 70, EFF_HEIGHT - 25, "--", TextStyle.MOVE_INFO_CONTENT); + this.pp = addTextObject(70, EFF_HEIGHT - 25, "--", TextStyle.MOVE_INFO_CONTENT); this.pp.setOrigin(1, 0.5); this.val.add(this.pp); - const powTxt = addTextObject(scene, 12, EFF_HEIGHT - 17, "POWER", TextStyle.MOVE_INFO_CONTENT); + const powTxt = addTextObject(12, EFF_HEIGHT - 17, "POWER", TextStyle.MOVE_INFO_CONTENT); powTxt.setOrigin(0.0, 0.5); powTxt.setText(i18next.t("fightUiHandler:power")); this.val.add(powTxt); - this.pow = addTextObject(scene, 70, EFF_HEIGHT - 17, "---", TextStyle.MOVE_INFO_CONTENT); + this.pow = addTextObject(70, EFF_HEIGHT - 17, "---", TextStyle.MOVE_INFO_CONTENT); this.pow.setOrigin(1, 0.5); this.val.add(this.pow); - const accTxt = addTextObject(scene, 12, EFF_HEIGHT - 9, "ACC", TextStyle.MOVE_INFO_CONTENT); + const accTxt = addTextObject(12, EFF_HEIGHT - 9, "ACC", TextStyle.MOVE_INFO_CONTENT); accTxt.setOrigin(0.0, 0.5); accTxt.setText(i18next.t("fightUiHandler:accuracy")); this.val.add(accTxt); - this.acc = addTextObject(scene, 70, EFF_HEIGHT - 9, "---", TextStyle.MOVE_INFO_CONTENT); + this.acc = addTextObject(70, EFF_HEIGHT - 9, "---", TextStyle.MOVE_INFO_CONTENT); this.acc.setOrigin(1, 0.5); this.val.add(this.acc); @@ -144,7 +146,7 @@ export default class MoveInfoOverlay extends Phaser.GameObjects.Container implem // show this component with infos for the specific move show(move : Move):boolean { - if (!(this.scene as BattleScene).enableMoveInfo) { + if (!globalScene.enableMoveInfo) { return false; // move infos have been disabled // TODO:: is `false` correct? i used to be `undeefined` } this.move = move; @@ -167,7 +169,7 @@ export default class MoveInfoOverlay extends Phaser.GameObjects.Container implem const moveDescriptionLineCount = Math.floor(this.desc.displayHeight * (96 / 72) / 14.83); if (moveDescriptionLineCount > 3) { // generate scrolling effects - this.descScroll = this.scene.tweens.add({ + this.descScroll = globalScene.tweens.add({ targets: this.desc, delay: Utils.fixedInt(2000), loop: -1, @@ -193,7 +195,7 @@ export default class MoveInfoOverlay extends Phaser.GameObjects.Container implem if (visible) { this.setVisible(true); } - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.desc, duration: Utils.fixedInt(125), ease: "Sine.easeInOut", @@ -209,8 +211,8 @@ export default class MoveInfoOverlay extends Phaser.GameObjects.Container implem } // width of this element - static getWidth(scale:number, scene: BattleScene):number { - return scene.game.canvas.width / GLOBAL_SCALE / 2; + static getWidth(scale:number):number { + return globalScene.game.canvas.width / GLOBAL_SCALE / 2; } // height of this element diff --git a/src/ui/mystery-encounter-ui-handler.ts b/src/ui/mystery-encounter-ui-handler.ts index cdb1c9024c5..383f4ab73d3 100644 --- a/src/ui/mystery-encounter-ui-handler.ts +++ b/src/ui/mystery-encounter-ui-handler.ts @@ -1,21 +1,21 @@ -import BattleScene from "../battle-scene"; import { addBBCodeTextObject, getBBCodeFrag, TextStyle } from "./text"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import { Button } from "#enums/buttons"; import { addWindow, WindowVariant } from "./ui-theme"; -import { MysteryEncounterPhase } from "../phases/mystery-encounter-phases"; +import type { MysteryEncounterPhase } from "../phases/mystery-encounter-phases"; import { PartyUiMode } from "./party-ui-handler"; -import MysteryEncounterOption from "#app/data/mystery-encounters/mystery-encounter-option"; +import type MysteryEncounterOption from "#app/data/mystery-encounters/mystery-encounter-option"; import * as Utils from "../utils"; import { isNullOrUndefined } from "../utils"; import { getPokeballAtlasKey } from "../data/pokeball"; -import { OptionSelectSettings } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import type { OptionSelectSettings } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { getEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import i18next from "i18next"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; -import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; +import type BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; +import { globalScene } from "#app/global-scene"; export default class MysteryEncounterUiHandler extends UiHandler { private cursorContainer: Phaser.GameObjects.Container; @@ -47,45 +47,45 @@ export default class MysteryEncounterUiHandler extends UiHandler { protected blockInput: boolean = true; - constructor(scene: BattleScene) { - super(scene, Mode.MYSTERY_ENCOUNTER); + constructor() { + super(Mode.MYSTERY_ENCOUNTER); } override setup() { const ui = this.getUi(); - this.cursorContainer = this.scene.add.container(18, -38.7); + this.cursorContainer = globalScene.add.container(18, -38.7); this.cursorContainer.setVisible(false); ui.add(this.cursorContainer); - this.optionsContainer = this.scene.add.container(12, -38.7); + this.optionsContainer = globalScene.add.container(12, -38.7); this.optionsContainer.setVisible(false); ui.add(this.optionsContainer); - this.dexProgressContainer = this.scene.add.container(214, -43); + this.dexProgressContainer = globalScene.add.container(214, -43); this.dexProgressContainer.setVisible(false); ui.add(this.dexProgressContainer); - this.descriptionContainer = this.scene.add.container(0, -152); + this.descriptionContainer = globalScene.add.container(0, -152); this.descriptionContainer.setVisible(false); ui.add(this.descriptionContainer); - this.tooltipContainer = this.scene.add.container(210, -48); + this.tooltipContainer = globalScene.add.container(210, -48); this.tooltipContainer.setVisible(false); ui.add(this.tooltipContainer); this.setCursor(this.getCursor()); - this.descriptionWindow = addWindow(this.scene, 0, 0, 150, 105, false, false, 0, 0, WindowVariant.THIN); + this.descriptionWindow = addWindow(0, 0, 150, 105, false, false, 0, 0, WindowVariant.THIN); this.descriptionContainer.add(this.descriptionWindow); - this.tooltipWindow = addWindow(this.scene, 0, 0, 110, 48, false, false, 0, 0, WindowVariant.THIN); + this.tooltipWindow = addWindow(0, 0, 110, 48, false, false, 0, 0, WindowVariant.THIN); this.tooltipContainer.add(this.tooltipWindow); - this.dexProgressWindow = addWindow(this.scene, 0, 0, 24, 28, false, false, 0, 0, WindowVariant.THIN); + this.dexProgressWindow = addWindow(0, 0, 24, 28, false, false, 0, 0, WindowVariant.THIN); this.dexProgressContainer.add(this.dexProgressWindow); - this.rarityBall = this.scene.add.sprite(141, 9, "pb"); + this.rarityBall = globalScene.add.sprite(141, 9, "pb"); this.rarityBall.setScale(0.75); this.descriptionContainer.add(this.rarityBall); - const dexProgressIndicator = this.scene.add.sprite(12, 10, "encounter_radar"); + const dexProgressIndicator = globalScene.add.sprite(12, 10, "encounter_radar"); dexProgressIndicator.setScale(0.80); this.dexProgressContainer.add(dexProgressIndicator); this.dexProgressContainer.setInteractive(new Phaser.Geom.Rectangle(0, 0, 24, 28), Phaser.Geom.Rectangle.Contains); @@ -138,8 +138,8 @@ export default class MysteryEncounterUiHandler extends UiHandler { ...this.overrideSettings, slideInDescription: false }; - this.scene.ui.setMode(Mode.PARTY, PartyUiMode.CHECK, -1, () => { - this.scene.ui.setMode(Mode.MYSTERY_ENCOUNTER, overrideSettings); + globalScene.ui.setMode(Mode.PARTY, PartyUiMode.CHECK, -1, () => { + globalScene.ui.setMode(Mode.MYSTERY_ENCOUNTER, overrideSettings); setTimeout(() => { this.setCursor(this.viewPartyIndex); this.unblockInput(); @@ -148,7 +148,7 @@ export default class MysteryEncounterUiHandler extends UiHandler { } else if (this.blockInput || (!this.optionsMeetsReqs[cursor] && (selected.optionMode === MysteryEncounterOptionMode.DISABLED_OR_DEFAULT || selected.optionMode === MysteryEncounterOptionMode.DISABLED_OR_SPECIAL))) { success = false; } else { - if ((this.scene.getCurrentPhase() as MysteryEncounterPhase).handleOptionSelect(selected, cursor)) { + if ((globalScene.getCurrentPhase() as MysteryEncounterPhase).handleOptionSelect(selected, cursor)) { success = true; } else { ui.playError(); @@ -315,7 +315,7 @@ export default class MysteryEncounterUiHandler extends UiHandler { this.viewPartyIndex = this.optionsContainer.getAll()?.length - 1; if (!this.cursorObj) { - this.cursorObj = this.scene.add.image(0, 0, "cursor"); + this.cursorObj = globalScene.add.image(0, 0, "cursor"); this.cursorContainer.add(this.cursorObj); } @@ -334,13 +334,13 @@ export default class MysteryEncounterUiHandler extends UiHandler { displayEncounterOptions(slideInDescription: boolean = true): void { this.getUi().clearText(); - const mysteryEncounter = this.scene.currentBattle.mysteryEncounter!; + const mysteryEncounter = globalScene.currentBattle.mysteryEncounter!; this.encounterOptions = this.overrideSettings?.overrideOptions ?? mysteryEncounter.options; this.optionsMeetsReqs = []; - const titleText: string | null = getEncounterText(this.scene, mysteryEncounter.dialogue.encounterOptionsDialogue?.title, TextStyle.TOOLTIP_TITLE); - const descriptionText: string | null = getEncounterText(this.scene, mysteryEncounter.dialogue.encounterOptionsDialogue?.description, TextStyle.TOOLTIP_CONTENT); - const queryText: string | null = getEncounterText(this.scene, mysteryEncounter.dialogue.encounterOptionsDialogue?.query, TextStyle.TOOLTIP_CONTENT); + const titleText: string | null = getEncounterText(mysteryEncounter.dialogue.encounterOptionsDialogue?.title, TextStyle.TOOLTIP_TITLE); + const descriptionText: string | null = getEncounterText(mysteryEncounter.dialogue.encounterOptionsDialogue?.description, TextStyle.TOOLTIP_CONTENT); + const queryText: string | null = getEncounterText(mysteryEncounter.dialogue.encounterOptionsDialogue?.query, TextStyle.TOOLTIP_CONTENT); // Clear options container (except cursor) this.optionsContainer.removeAll(true); @@ -353,25 +353,25 @@ export default class MysteryEncounterUiHandler extends UiHandler { switch (this.encounterOptions.length) { default: case 2: - optionText = addBBCodeTextObject(this.scene, i % 2 === 0 ? 0 : 100, 8, "-", TextStyle.WINDOW, { fontSize: "80px", lineSpacing: -8 }); + optionText = addBBCodeTextObject(i % 2 === 0 ? 0 : 100, 8, "-", TextStyle.WINDOW, { fontSize: "80px", lineSpacing: -8 }); break; case 3: - optionText = addBBCodeTextObject(this.scene, i % 2 === 0 ? 0 : 100, i < 2 ? 0 : 16, "-", TextStyle.WINDOW, { fontSize: "80px", lineSpacing: -8 }); + optionText = addBBCodeTextObject(i % 2 === 0 ? 0 : 100, i < 2 ? 0 : 16, "-", TextStyle.WINDOW, { fontSize: "80px", lineSpacing: -8 }); break; case 4: - optionText = addBBCodeTextObject(this.scene, i % 2 === 0 ? 0 : 100, i < 2 ? 0 : 16, "-", TextStyle.WINDOW, { fontSize: "80px", lineSpacing: -8 }); + optionText = addBBCodeTextObject(i % 2 === 0 ? 0 : 100, i < 2 ? 0 : 16, "-", TextStyle.WINDOW, { fontSize: "80px", lineSpacing: -8 }); break; } - this.optionsMeetsReqs.push(option.meetsRequirements(this.scene)); + this.optionsMeetsReqs.push(option.meetsRequirements()); const optionDialogue = option.dialogue!; const label = !this.optionsMeetsReqs[i] && optionDialogue.disabledButtonLabel ? optionDialogue.disabledButtonLabel : optionDialogue.buttonLabel; let text: string | null; if (option.hasRequirements() && this.optionsMeetsReqs[i] && (option.optionMode === MysteryEncounterOptionMode.DEFAULT_OR_SPECIAL || option.optionMode === MysteryEncounterOptionMode.DISABLED_OR_SPECIAL)) { // Options with special requirements that are met are automatically colored green - text = getEncounterText(this.scene, label, TextStyle.ME_OPTION_SPECIAL); + text = getEncounterText(label, TextStyle.ME_OPTION_SPECIAL); } else { - text = getEncounterText(this.scene, label, optionDialogue.style ? optionDialogue.style : TextStyle.ME_OPTION_DEFAULT); + text = getEncounterText(label, optionDialogue.style ? optionDialogue.style : TextStyle.ME_OPTION_DEFAULT); } if (text) { @@ -387,7 +387,7 @@ export default class MysteryEncounterUiHandler extends UiHandler { // Sets up the mask that hides the option text to give an illusion of scrolling const nonScrollWidth = 90; - const optionTextMaskRect = this.scene.make.graphics({}); + const optionTextMaskRect = globalScene.make.graphics({}); optionTextMaskRect.setScale(6); optionTextMaskRect.fillStyle(0xFFFFFF); optionTextMaskRect.beginPath(); @@ -406,7 +406,7 @@ export default class MysteryEncounterUiHandler extends UiHandler { // Animates the option text scrolling sideways if (optionTextWidth > nonScrollWidth) { - this.optionScrollTweens[i] = this.scene.tweens.add({ + this.optionScrollTweens[i] = globalScene.tweens.add({ targets: optionText, delay: Utils.fixedInt(2000), loop: -1, @@ -420,13 +420,13 @@ export default class MysteryEncounterUiHandler extends UiHandler { } // View Party Button - const viewPartyText = addBBCodeTextObject(this.scene, (this.scene.game.canvas.width) / 6, -24, getBBCodeFrag(i18next.t("mysteryEncounterMessages:view_party_button"), TextStyle.PARTY), TextStyle.PARTY); + const viewPartyText = addBBCodeTextObject((globalScene.game.canvas.width) / 6, -24, getBBCodeFrag(i18next.t("mysteryEncounterMessages:view_party_button"), TextStyle.PARTY), TextStyle.PARTY); this.optionsContainer.add(viewPartyText); viewPartyText.x -= (viewPartyText.displayWidth + 16); this.viewPartyXPosition = viewPartyText.x - 10; // Description Window - const titleTextObject = addBBCodeTextObject(this.scene, 0, 0, titleText ?? "", TextStyle.TOOLTIP_TITLE, { wordWrap: { width: 750 }, align: "center", lineSpacing: -8 }); + const titleTextObject = addBBCodeTextObject(0, 0, titleText ?? "", TextStyle.TOOLTIP_TITLE, { wordWrap: { width: 750 }, align: "center", lineSpacing: -8 }); this.descriptionContainer.add(titleTextObject); titleTextObject.setPosition(72 - titleTextObject.displayWidth / 2, 5.5); @@ -438,10 +438,10 @@ export default class MysteryEncounterUiHandler extends UiHandler { const ballType = getPokeballAtlasKey(index); this.rarityBall.setTexture("pb", ballType); - const descriptionTextObject = addBBCodeTextObject(this.scene, 6, 25, descriptionText ?? "", TextStyle.TOOLTIP_CONTENT, { wordWrap: { width: 830 }}); + const descriptionTextObject = addBBCodeTextObject(6, 25, descriptionText ?? "", TextStyle.TOOLTIP_CONTENT, { wordWrap: { width: 830 }}); // Sets up the mask that hides the description text to give an illusion of scrolling - const descriptionTextMaskRect = this.scene.make.graphics({}); + const descriptionTextMaskRect = globalScene.make.graphics({}); descriptionTextMaskRect.setScale(6); descriptionTextMaskRect.fillStyle(0xFFFFFF); descriptionTextMaskRect.beginPath(); @@ -460,7 +460,7 @@ export default class MysteryEncounterUiHandler extends UiHandler { // Animates the description text moving upwards if (descriptionLineCount > 6) { - this.descriptionScrollTween = this.scene.tweens.add({ + this.descriptionScrollTween = globalScene.tweens.add({ targets: descriptionTextObject, delay: Utils.fixedInt(2000), loop: -1, @@ -472,14 +472,14 @@ export default class MysteryEncounterUiHandler extends UiHandler { this.descriptionContainer.add(descriptionTextObject); - const queryTextObject = addBBCodeTextObject(this.scene, 0, 0, queryText ?? "", TextStyle.TOOLTIP_CONTENT, { wordWrap: { width: 830 }}); + const queryTextObject = addBBCodeTextObject(0, 0, queryText ?? "", TextStyle.TOOLTIP_CONTENT, { wordWrap: { width: 830 }}); this.descriptionContainer.add(queryTextObject); queryTextObject.setPosition(75 - queryTextObject.displayWidth / 2, 90); // Slide in description container if (slideInDescription) { this.descriptionContainer.x -= 150; - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.descriptionContainer, x: "+=150", ease: "Sine.easeInOut", @@ -511,9 +511,9 @@ export default class MysteryEncounterUiHandler extends UiHandler { const cursorOption = this.encounterOptions[cursor]; const optionDialogue = cursorOption.dialogue!; if (!this.optionsMeetsReqs[cursor] && (cursorOption.optionMode === MysteryEncounterOptionMode.DISABLED_OR_DEFAULT || cursorOption.optionMode === MysteryEncounterOptionMode.DISABLED_OR_SPECIAL) && optionDialogue.disabledButtonTooltip) { - text = getEncounterText(this.scene, optionDialogue.disabledButtonTooltip, TextStyle.TOOLTIP_CONTENT); + text = getEncounterText(optionDialogue.disabledButtonTooltip, TextStyle.TOOLTIP_CONTENT); } else { - text = getEncounterText(this.scene, optionDialogue.buttonTooltip, TextStyle.TOOLTIP_CONTENT); + text = getEncounterText(optionDialogue.buttonTooltip, TextStyle.TOOLTIP_CONTENT); } // Auto-color options green/blue for good/bad by looking for (+)/(-) @@ -524,11 +524,11 @@ export default class MysteryEncounterUiHandler extends UiHandler { } if (text) { - const tooltipTextObject = addBBCodeTextObject(this.scene, 6, 7, text, TextStyle.TOOLTIP_CONTENT, { wordWrap: { width: 600 }, fontSize: "72px" }); + const tooltipTextObject = addBBCodeTextObject(6, 7, text, TextStyle.TOOLTIP_CONTENT, { wordWrap: { width: 600 }, fontSize: "72px" }); this.tooltipContainer.add(tooltipTextObject); // Sets up the mask that hides the description text to give an illusion of scrolling - const tooltipTextMaskRect = this.scene.make.graphics({}); + const tooltipTextMaskRect = globalScene.make.graphics({}); tooltipTextMaskRect.setScale(6); tooltipTextMaskRect.fillStyle(0xFFFFFF); tooltipTextMaskRect.beginPath(); @@ -546,7 +546,7 @@ export default class MysteryEncounterUiHandler extends UiHandler { // Animates the tooltip text moving upwards if (tooltipLineCount > 3) { - this.tooltipScrollTween = this.scene.tweens.add({ + this.tooltipScrollTween = globalScene.tweens.add({ targets: tooltipTextObject, delay: Utils.fixedInt(1200), loop: -1, @@ -593,25 +593,25 @@ export default class MysteryEncounterUiHandler extends UiHandler { private showHideDexProgress(show: boolean) { if (show && !this.showDexProgress) { this.showDexProgress = true; - this.scene.tweens.killTweensOf(this.dexProgressContainer); - this.scene.tweens.add({ + globalScene.tweens.killTweensOf(this.dexProgressContainer); + globalScene.tweens.add({ targets: this.dexProgressContainer, y: -63, ease: "Sine.easeInOut", duration: 750, onComplete: () => { this.dexProgressContainer.on("pointerover", () => { - (this.scene as BattleScene).ui.showTooltip("", i18next.t("mysteryEncounterMessages:affects_pokedex"), true); + globalScene.ui.showTooltip("", i18next.t("mysteryEncounterMessages:affects_pokedex"), true); }); this.dexProgressContainer.on("pointerout", () => { - (this.scene as BattleScene).ui.hideTooltip(); + globalScene.ui.hideTooltip(); }); } }); } else if (!show && this.showDexProgress) { this.showDexProgress = false; - this.scene.tweens.killTweensOf(this.dexProgressContainer); - this.scene.tweens.add({ + globalScene.tweens.killTweensOf(this.dexProgressContainer); + globalScene.tweens.add({ targets: this.dexProgressContainer, y: -43, ease: "Sine.easeInOut", diff --git a/src/ui/party-exp-bar.ts b/src/ui/party-exp-bar.ts index d2521225375..b9da9320fcb 100644 --- a/src/ui/party-exp-bar.ts +++ b/src/ui/party-exp-bar.ts @@ -1,6 +1,7 @@ -import BattleScene from "../battle-scene"; -import Pokemon from "../field/pokemon"; +import { globalScene } from "#app/global-scene"; +import type Pokemon from "../field/pokemon"; import { TextStyle, addTextObject } from "./text"; +import i18next from "i18next"; export default class PartyExpBar extends Phaser.GameObjects.Container { private bg: Phaser.GameObjects.NineSlice; @@ -11,17 +12,17 @@ export default class PartyExpBar extends Phaser.GameObjects.Container { public shown: boolean; - constructor(scene: BattleScene) { - super(scene, (scene.game.canvas.width / 6), -((scene.game.canvas.height) / 6) + 15); + constructor() { + super(globalScene, (globalScene.game.canvas.width / 6), -((globalScene.game.canvas.height) / 6) + 15); } setup(): void { - this.bg = this.scene.add.nineslice(0, 0, "party_exp_bar", undefined, 8, 18, 21, 5, 6, 4); + this.bg = globalScene.add.nineslice(0, 0, "party_exp_bar", undefined, 8, 18, 21, 5, 6, 4); this.bg.setOrigin(0, 0); this.add(this.bg); - this.expText = addTextObject(this.scene, 22, 4, "", TextStyle.BATTLE_INFO); + this.expText = addTextObject(22, 4, "", TextStyle.BATTLE_INFO); this.expText.setOrigin(0, 0); this.add(this.expText); @@ -29,13 +30,13 @@ export default class PartyExpBar extends Phaser.GameObjects.Container { this.shown = false; } - showPokemonExp(pokemon: Pokemon, expValue: integer, showOnlyLevelUp: boolean, newLevel: number): Promise { + showPokemonExp(pokemon: Pokemon, expValue: number, showOnlyLevelUp: boolean, newLevel: number): Promise { return new Promise(resolve => { if (this.shown) { return resolve(); } - this.pokemonIcon = (this.scene as BattleScene).addPokemonIcon(pokemon, -8, 15, 0, 0.5); + this.pokemonIcon = globalScene.addPokemonIcon(pokemon, -8, 15, 0, 0.5); this.pokemonIcon.setScale(0.5); this.add(this.pokemonIcon); @@ -43,9 +44,9 @@ export default class PartyExpBar extends Phaser.GameObjects.Container { // if we want to only display the level in the small frame if (showOnlyLevelUp) { if (newLevel > 200) { // if the level is greater than 200, we only display Lv. UP - this.expText.setText("Lv. UP"); + this.expText.setText(i18next.t("battleScene:levelUp")); } else { // otherwise we display Lv. Up and the new level - this.expText.setText(`Lv. UP: ${newLevel.toString()}`); + this.expText.setText(i18next.t("battleScene:levelUpWithLevel", { level: newLevel })); } } else { // if we want to display the exp @@ -54,16 +55,16 @@ export default class PartyExpBar extends Phaser.GameObjects.Container { this.bg.width = this.expText.displayWidth + 28; - (this.scene as BattleScene).fieldUI.bringToTop(this); + globalScene.fieldUI.bringToTop(this); if (this.tween) { this.tween.stop(); } - this.tween = this.scene.tweens.add({ + this.tween = globalScene.tweens.add({ targets: this, - x: (this.scene.game.canvas.width / 6) - (this.bg.width - 5), - duration: 500 / Math.pow(2, pokemon.scene.expGainsSpeed), + x: (globalScene.game.canvas.width / 6) - (this.bg.width - 5), + duration: 500 / Math.pow(2, globalScene.expGainsSpeed), ease: "Sine.easeOut", onComplete: () => { this.tween = null; @@ -86,9 +87,9 @@ export default class PartyExpBar extends Phaser.GameObjects.Container { this.tween.stop(); } - this.tween = this.scene.tweens.add({ + this.tween = globalScene.tweens.add({ targets: this, - x: (this.scene.game.canvas.width / 6), + x: (globalScene.game.canvas.width / 6), duration: 500, ease: "Sine.easeIn", onComplete: () => { diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index bd3561dd0b4..0af94053ceb 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -1,5 +1,6 @@ -import BattleScene from "#app/battle-scene"; -import Pokemon, { MoveResult, PlayerPokemon, PokemonMove } from "#app/field/pokemon"; +import type { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; +import { MoveResult } from "#app/field/pokemon"; import { addBBCodeTextObject, addTextObject, getTextColor, TextStyle } from "#app/ui/text"; import { Command } from "#app/ui/command-ui-handler"; import MessageUiHandler from "#app/ui/message-ui-handler"; @@ -7,7 +8,7 @@ import { Mode } from "#app/ui/ui"; import * as Utils from "#app/utils"; import { PokemonFormChangeItemModifier, PokemonHeldItemModifier, SwitchEffectTransferModifier } from "#app/modifier/modifier"; import { allMoves, ForceSwitchOutAttr } from "#app/data/move"; -import { getGenderColor, getGenderSymbol } from "#app/data/gender"; +import { Gender, getGenderColor, getGenderSymbol } from "#app/data/gender"; import { StatusEffect } from "#enums/status-effect"; import PokemonIconAnimHandler, { PokemonIconAnimMode } from "#app/ui/pokemon-icon-anim-handler"; import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; @@ -18,12 +19,13 @@ import { Button } from "#enums/buttons"; import { applyChallenges, ChallengeType } from "#app/data/challenge"; import MoveInfoOverlay from "#app/ui/move-info-overlay"; import i18next from "i18next"; -import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; +import type BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { getPokemonNameWithAffix } from "#app/messages"; -import { CommandPhase } from "#app/phases/command-phase"; +import type { CommandPhase } from "#app/phases/command-phase"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; +import { globalScene } from "#app/global-scene"; const defaultMessage = i18next.t("partyUiHandler:choosePokemon"); @@ -107,6 +109,7 @@ export enum PartyOption { TEACH, TRANSFER, SUMMARY, + POKEDEX, UNPAUSE_EVOLUTION, SPLICE, UNSPLICE, @@ -123,16 +126,16 @@ export enum PartyOption { ALL = 4000, } -export type PartySelectCallback = (cursor: integer, option: PartyOption) => void; -export type PartyModifierTransferSelectCallback = (fromCursor: integer, index: integer, itemQuantity?: integer, toCursor?: integer) => void; -export type PartyModifierSpliceSelectCallback = (fromCursor: integer, toCursor?: integer) => void; +export type PartySelectCallback = (cursor: number, option: PartyOption) => void; +export type PartyModifierTransferSelectCallback = (fromCursor: number, index: number, itemQuantity?: number, toCursor?: number) => void; +export type PartyModifierSpliceSelectCallback = (fromCursor: number, toCursor?: number) => void; export type PokemonSelectFilter = (pokemon: PlayerPokemon) => string | null; export type PokemonModifierTransferSelectFilter = (pokemon: PlayerPokemon, modifier: PokemonHeldItemModifier) => string | null; export type PokemonMoveSelectFilter = (pokemonMove: PokemonMove) => string | null; export default class PartyUiHandler extends MessageUiHandler { private partyUiMode: PartyUiMode; - private fieldIndex: integer; + private fieldIndex: number; private partyBg: Phaser.GameObjects.Image; private partyContainer: Phaser.GameObjects.Container; @@ -144,26 +147,26 @@ export default class PartyUiHandler extends MessageUiHandler { private optionsMode: boolean; private optionsScroll: boolean; - private optionsCursor: integer = 0; - private optionsScrollCursor: integer = 0; - private optionsScrollTotal: integer = 0; + private optionsCursor: number = 0; + private optionsScrollCursor: number = 0; + private optionsScrollTotal: number = 0; /** This is only public for test/ui/transfer-item.test.ts */ public optionsContainer: Phaser.GameObjects.Container; private optionsBg: Phaser.GameObjects.NineSlice; private optionsCursorObj: Phaser.GameObjects.Image | null; - private options: integer[]; + private options: number[]; private transferMode: boolean; - private transferOptionCursor: integer; - private transferCursor: integer; + private transferOptionCursor: number; + private transferCursor: number; /** Current quantity selection for every item held by the pokemon selected for the transfer */ - private transferQuantities: integer[]; + private transferQuantities: number[]; /** Stack size of every item that the selected pokemon is holding */ - private transferQuantitiesMax: integer[]; + private transferQuantitiesMax: number[]; /** Whether to transfer all items */ private transferAll: boolean; - private lastCursor: integer = 0; + private lastCursor: number = 0; private selectCallback: PartySelectCallback | PartyModifierTransferSelectCallback | null; private selectFilter: PokemonSelectFilter | PokemonModifierTransferSelectFilter; private moveSelectFilter: PokemonMoveSelectFilter; @@ -197,7 +200,7 @@ export default class PartyUiHandler extends MessageUiHandler { */ private FilterChallengeLegal = (pokemon: PlayerPokemon) => { const challengeAllowed = new Utils.BooleanHolder(true); - applyChallenges(this.scene.gameMode, ChallengeType.POKEMON_IN_BATTLE, pokemon, challengeAllowed); + applyChallenges(globalScene.gameMode, ChallengeType.POKEMON_IN_BATTLE, pokemon, challengeAllowed); if (!challengeAllowed.value) { return i18next.t("partyUiHandler:cantBeUsed", { pokemonName: getPokemonNameWithAffix(pokemon) }); } @@ -207,8 +210,8 @@ export default class PartyUiHandler extends MessageUiHandler { private static FilterAllMoves = (_pokemonMove: PokemonMove) => null; public static FilterItemMaxStacks = (pokemon: PlayerPokemon, modifier: PokemonHeldItemModifier) => { - const matchingModifier = pokemon.scene.findModifier(m => m instanceof PokemonHeldItemModifier && m.pokemonId === pokemon.id && m.matchType(modifier)) as PokemonHeldItemModifier; - if (matchingModifier && matchingModifier.stackCount === matchingModifier.getMaxStackCount(pokemon.scene)) { + const matchingModifier = globalScene.findModifier(m => m instanceof PokemonHeldItemModifier && m.pokemonId === pokemon.id && m.matchType(modifier)) as PokemonHeldItemModifier; + if (matchingModifier && matchingModifier.stackCount === matchingModifier.getMaxStackCount()) { return i18next.t("partyUiHandler:tooManyItems", { pokemonName: getPokemonNameWithAffix(pokemon) }); } return null; @@ -216,46 +219,46 @@ export default class PartyUiHandler extends MessageUiHandler { public static NoEffectMessage = i18next.t("partyUiHandler:anyEffect"); - private localizedOptions = [ PartyOption.SEND_OUT, PartyOption.SUMMARY, PartyOption.CANCEL, PartyOption.APPLY, PartyOption.RELEASE, PartyOption.TEACH, PartyOption.SPLICE, PartyOption.UNSPLICE, PartyOption.REVIVE, PartyOption.TRANSFER, PartyOption.UNPAUSE_EVOLUTION, PartyOption.PASS_BATON, PartyOption.RENAME, PartyOption.SELECT ]; + private localizedOptions = [ PartyOption.SEND_OUT, PartyOption.SUMMARY, PartyOption.POKEDEX, PartyOption.CANCEL, PartyOption.APPLY, PartyOption.RELEASE, PartyOption.TEACH, PartyOption.SPLICE, PartyOption.UNSPLICE, PartyOption.REVIVE, PartyOption.TRANSFER, PartyOption.UNPAUSE_EVOLUTION, PartyOption.PASS_BATON, PartyOption.RENAME, PartyOption.SELECT ]; - constructor(scene: BattleScene) { - super(scene, Mode.PARTY); + constructor() { + super(Mode.PARTY); } setup() { const ui = this.getUi(); - const partyContainer = this.scene.add.container(0, 0); + const partyContainer = globalScene.add.container(0, 0); partyContainer.setName("party"); partyContainer.setVisible(false); ui.add(partyContainer); this.partyContainer = partyContainer; - this.partyBg = this.scene.add.image(0, 0, "party_bg"); + this.partyBg = globalScene.add.image(0, 0, "party_bg"); this.partyBg.setName("img-party-bg"); partyContainer.add(this.partyBg); this.partyBg.setOrigin(0, 1); - const partySlotsContainer = this.scene.add.container(0, 0); + const partySlotsContainer = globalScene.add.container(0, 0); partySlotsContainer.setName("party-slots"); partyContainer.add(partySlotsContainer); this.partySlotsContainer = partySlotsContainer; - const partyMessageBoxContainer = this.scene.add.container(0, -32); + const partyMessageBoxContainer = globalScene.add.container(0, -32); partyMessageBoxContainer.setName("party-msg-box"); partyContainer.add(partyMessageBoxContainer); - const partyMessageBox = addWindow(this.scene, 1, 31, 262, 30); + const partyMessageBox = addWindow(1, 31, 262, 30); partyMessageBox.setName("window-party-msg-box"); partyMessageBox.setOrigin(0, 1); partyMessageBoxContainer.add(partyMessageBox); this.partyMessageBox = partyMessageBox; - const partyMessageText = addTextObject(this.scene, 10, 8, defaultMessage, TextStyle.WINDOW, { maxLines: 2 }); + const partyMessageText = addTextObject(10, 8, defaultMessage, TextStyle.WINDOW, { maxLines: 2 }); partyMessageText.setName("text-party-msg"); partyMessageText.setOrigin(0, 0); @@ -263,25 +266,25 @@ export default class PartyUiHandler extends MessageUiHandler { this.message = partyMessageText; - const partyCancelButton = new PartyCancelButton(this.scene, 291, -16); + const partyCancelButton = new PartyCancelButton(291, -16); partyContainer.add(partyCancelButton); this.partyCancelButton = partyCancelButton; - this.optionsContainer = this.scene.add.container((this.scene.game.canvas.width / 6) - 1, -1); + this.optionsContainer = globalScene.add.container((globalScene.game.canvas.width / 6) - 1, -1); partyContainer.add(this.optionsContainer); this.iconAnimHandler = new PokemonIconAnimHandler(); - this.iconAnimHandler.setup(this.scene); + this.iconAnimHandler.setup(); // prepare move overlay. in case it appears to be too big, set the overlayScale to .5 const overlayScale = 1; - this.moveInfoOverlay = new MoveInfoOverlay(this.scene, { + this.moveInfoOverlay = new MoveInfoOverlay({ scale: overlayScale, top: true, x: 1, - y: -MoveInfoOverlay.getHeight(overlayScale) - 1, //this.scene.game.canvas.height / 6 - MoveInfoOverlay.getHeight(overlayScale) - 29, - width: this.scene.game.canvas.width / 12 - 30, + y: -MoveInfoOverlay.getHeight(overlayScale) - 1, + width: globalScene.game.canvas.width / 12 - 30, }); ui.add(this.moveInfoOverlay); @@ -302,7 +305,7 @@ export default class PartyUiHandler extends MessageUiHandler { this.partyUiMode = args[0] as PartyUiMode; - this.fieldIndex = args.length > 1 ? args[1] as integer : -1; + this.fieldIndex = args.length > 1 ? args[1] as number : -1; this.selectCallback = args.length > 2 && args[2] instanceof Function ? args[2] : undefined; this.selectFilter = args.length > 3 && args[3] instanceof Function @@ -315,7 +318,7 @@ export default class PartyUiHandler extends MessageUiHandler { this.showMovePp = args.length > 6 && args[6]; this.partyContainer.setVisible(true); - this.partyBg.setTexture(`party_bg${this.scene.currentBattle.double ? "_double" : ""}`); + this.partyBg.setTexture(`party_bg${globalScene.currentBattle.double ? "_double" : ""}`); this.populatePartySlots(); this.setCursor(0); @@ -346,28 +349,28 @@ export default class PartyUiHandler extends MessageUiHandler { if (this.optionsMode) { const option = this.options[this.optionsCursor]; if (button === Button.ACTION) { - const pokemon = this.scene.getPlayerParty()[this.cursor]; + const pokemon = globalScene.getPlayerParty()[this.cursor]; if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER && !this.transferMode && option !== PartyOption.CANCEL) { this.startTransfer(); let ableToTransfer: string; - for (let p = 0; p < this.scene.getPlayerParty().length; p++) { // this fore look goes through each of the party pokemon - const newPokemon = this.scene.getPlayerParty()[p]; + for (let p = 0; p < globalScene.getPlayerParty().length; p++) { // this for look goes through each of the party pokemon + const newPokemon = globalScene.getPlayerParty()[p]; // this next line gets all of the transferable items from pokemon [p]; it does this by getting all the held modifiers that are transferable and checking to see if they belong to pokemon [p] const getTransferrableItemsFromPokemon = (newPokemon: PlayerPokemon) => - this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier && (m as PokemonHeldItemModifier).isTransferable && (m as PokemonHeldItemModifier).pokemonId === newPokemon.id) as PokemonHeldItemModifier[]; + globalScene.findModifiers(m => m instanceof PokemonHeldItemModifier && (m as PokemonHeldItemModifier).isTransferable && (m as PokemonHeldItemModifier).pokemonId === newPokemon.id) as PokemonHeldItemModifier[]; // this next bit checks to see if the the selected item from the original transfer pokemon exists on the new pokemon [p]; this returns undefined if the new pokemon doesn't have the item at all, otherwise it returns the pokemonHeldItemModifier for that item - const matchingModifier = newPokemon.scene.findModifier(m => m instanceof PokemonHeldItemModifier && m.pokemonId === newPokemon.id && m.matchType(getTransferrableItemsFromPokemon(pokemon)[this.transferOptionCursor])) as PokemonHeldItemModifier; + const matchingModifier = globalScene.findModifier(m => m instanceof PokemonHeldItemModifier && m.pokemonId === newPokemon.id && m.matchType(getTransferrableItemsFromPokemon(pokemon)[this.transferOptionCursor])) as PokemonHeldItemModifier; const partySlot = this.partySlots.filter(m => m.getPokemon() === newPokemon)[0]; // this gets pokemon [p] for us if (p !== this.transferCursor) { // this skips adding the able/not able labels on the pokemon doing the transfer if (matchingModifier) { // if matchingModifier exists then the item exists on the new pokemon - if (matchingModifier.getMaxStackCount(this.scene) === matchingModifier.stackCount) { // checks to see if the stack of items is at max stack; if so, set the description label to "Not able" - ableToTransfer = "Not able"; + if (matchingModifier.getMaxStackCount() === matchingModifier.stackCount) { // checks to see if the stack of items is at max stack; if so, set the description label to "Not able" + ableToTransfer = i18next.t("partyUiHandler:notAble"); } else { // if the pokemon isn't at max stack, make the label "Able" - ableToTransfer = "Able"; + ableToTransfer = i18next.t("partyUiHandler:able"); } } else { // if matchingModifier doesn't exist, that means the pokemon doesn't have any of the item, and we need to show "Able" - ableToTransfer = "Able"; + ableToTransfer = i18next.t("partyUiHandler:able"); } } else { // this else relates to the transfer pokemon. We set the text to be blank so there's no "Able"/"Not able" text ableToTransfer = ""; @@ -395,11 +398,11 @@ export default class PartyUiHandler extends MessageUiHandler { } ui.playSelect(); return true; - } else if ((option !== PartyOption.SUMMARY && option !== PartyOption.UNPAUSE_EVOLUTION && option !== PartyOption.UNSPLICE && option !== PartyOption.RELEASE && option !== PartyOption.CANCEL && option !== PartyOption.RENAME) + } else if ((![ PartyOption.SUMMARY, PartyOption.POKEDEX, PartyOption.UNPAUSE_EVOLUTION, PartyOption.UNSPLICE, PartyOption.RELEASE, PartyOption.CANCEL, PartyOption.RENAME ].includes(option)) || (option === PartyOption.RELEASE && this.partyUiMode === PartyUiMode.RELEASE)) { let filterResult: string | null; const getTransferrableItemsFromPokemon = (pokemon: PlayerPokemon) => - this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier && m.isTransferable && m.pokemonId === pokemon.id) as PokemonHeldItemModifier[]; + globalScene.findModifiers(m => m instanceof PokemonHeldItemModifier && m.isTransferable && m.pokemonId === pokemon.id) as PokemonHeldItemModifier[]; if (option !== PartyOption.TRANSFER && option !== PartyOption.SPLICE) { filterResult = (this.selectFilter as PokemonSelectFilter)(pokemon); if (filterResult === null && (option === PartyOption.SEND_OUT || option === PartyOption.PASS_BATON)) { @@ -409,7 +412,7 @@ export default class PartyUiHandler extends MessageUiHandler { filterResult = this.moveSelectFilter(pokemon.moveset[this.optionsCursor]!); // TODO: is this bang correct? } } else { - filterResult = (this.selectFilter as PokemonModifierTransferSelectFilter)(pokemon, getTransferrableItemsFromPokemon(this.scene.getPlayerParty()[this.transferCursor])[this.transferOptionCursor]); + filterResult = (this.selectFilter as PokemonModifierTransferSelectFilter)(pokemon, getTransferrableItemsFromPokemon(globalScene.getPlayerParty()[this.transferCursor])[this.transferOptionCursor]); } if (filterResult === null) { if (this.partyUiMode !== PartyUiMode.SPLICE) { @@ -419,7 +422,10 @@ export default class PartyUiHandler extends MessageUiHandler { if (option === PartyOption.TRANSFER) { if (this.transferCursor !== this.cursor) { if (this.transferAll) { - getTransferrableItemsFromPokemon(this.scene.getPlayerParty()[this.transferCursor]).forEach((_, i) => (this.selectCallback as PartyModifierTransferSelectCallback)(this.transferCursor, i, this.transferQuantitiesMax[i], this.cursor)); + getTransferrableItemsFromPokemon(globalScene.getPlayerParty()[this.transferCursor]).forEach((_, i, array) => { + const invertedIndex = array.length - 1 - i; + (this.selectCallback as PartyModifierTransferSelectCallback)(this.transferCursor, invertedIndex, this.transferQuantitiesMax[invertedIndex], this.cursor); + }); } else { (this.selectCallback as PartyModifierTransferSelectCallback)(this.transferCursor, this.transferOptionCursor, this.transferQuantities[this.transferOptionCursor], this.cursor); } @@ -441,15 +447,15 @@ export default class PartyUiHandler extends MessageUiHandler { selectCallback(this.cursor, option); } } else { - if (option >= PartyOption.FORM_CHANGE_ITEM && this.scene.getCurrentPhase() instanceof SelectModifierPhase) { + if (option >= PartyOption.FORM_CHANGE_ITEM && globalScene.getCurrentPhase() instanceof SelectModifierPhase) { if (this.partyUiMode === PartyUiMode.CHECK) { const formChangeItemModifiers = this.getFormChangeItemsModifiers(pokemon); const modifier = formChangeItemModifiers[option - PartyOption.FORM_CHANGE_ITEM]; modifier.active = !modifier.active; - this.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeItemTrigger, false, true); + globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeItemTrigger, false, true); } } else if (this.cursor) { - (this.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.POKEMON, this.cursor, option === PartyOption.PASS_BATON); + (globalScene.getCurrentPhase() as CommandPhase).handleCommand(Command.POKEMON, this.cursor, option === PartyOption.PASS_BATON); } } if (this.partyUiMode !== PartyUiMode.MODIFIER && this.partyUiMode !== PartyUiMode.TM_MODIFIER && this.partyUiMode !== PartyUiMode.MOVE_MODIFIER) { @@ -464,6 +470,16 @@ export default class PartyUiHandler extends MessageUiHandler { ui.playSelect(); ui.setModeWithoutClear(Mode.SUMMARY, pokemon).then(() => this.clearOptions()); return true; + } else if (option === PartyOption.POKEDEX) { + ui.playSelect(); + const attributes = { + shiny: pokemon.shiny, + variant: pokemon.variant, + form: pokemon.formIndex, + female: pokemon.gender === Gender.FEMALE ? true : false + }; + ui.setOverlayMode(Mode.POKEDEX_PAGE, pokemon.species, pokemon.formIndex, attributes).then(() => this.clearOptions()); + return true; } else if (option === PartyOption.UNPAUSE_EVOLUTION) { this.clearOptions(); ui.playSelect(); @@ -492,7 +508,7 @@ export default class PartyUiHandler extends MessageUiHandler { } else if (option === PartyOption.RELEASE) { this.clearOptions(); ui.playSelect(); - if (this.cursor >= this.scene.currentBattle.getBattlerCount() || !pokemon.isAllowedInBattle()) { + if (this.cursor >= globalScene.currentBattle.getBattlerCount() || !pokemon.isAllowedInBattle()) { this.blockInput = true; this.showText(i18next.t("partyUiHandler:releaseConfirmation", { pokemonName: getPokemonNameWithAffix(pokemon) }), null, () => { this.blockInput = false; @@ -580,7 +596,7 @@ export default class PartyUiHandler extends MessageUiHandler { // show move description if (this.partyUiMode === PartyUiMode.REMEMBER_MOVE_MODIFIER) { const option = this.options[this.optionsCursor]; - const pokemon = this.scene.getPlayerParty()[this.cursor]; + const pokemon = globalScene.getPlayerParty()[this.cursor]; const move = allMoves[pokemon.getLearnableLevelMoves()[option]]; if (move) { this.moveInfoOverlay.show(move); @@ -595,8 +611,8 @@ export default class PartyUiHandler extends MessageUiHandler { if (this.cursor < 6) { if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER && !this.transferMode) { /** Initialize item quantities for the selected Pokemon */ - const itemModifiers = this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier - && m.isTransferable && m.pokemonId === this.scene.getPlayerParty()[this.cursor].id) as PokemonHeldItemModifier[]; + const itemModifiers = globalScene.findModifiers(m => m instanceof PokemonHeldItemModifier + && m.isTransferable && m.pokemonId === globalScene.getPlayerParty()[this.cursor].id) as PokemonHeldItemModifier[]; this.transferQuantities = itemModifiers.map(item => item.getStackCount()); this.transferQuantitiesMax = itemModifiers.map(item => item.getStackCount()); } @@ -628,7 +644,7 @@ export default class PartyUiHandler extends MessageUiHandler { } const slotCount = this.partySlots.length; - const battlerCount = this.scene.currentBattle.getBattlerCount(); + const battlerCount = globalScene.currentBattle.getBattlerCount(); switch (button) { case Button.UP: @@ -664,7 +680,7 @@ export default class PartyUiHandler extends MessageUiHandler { } populatePartySlots() { - const party = this.scene.getPlayerParty(); + const party = globalScene.getPlayerParty(); if (this.cursor < 6 && this.cursor >= party.length) { this.cursor = party.length - 1; @@ -677,8 +693,8 @@ export default class PartyUiHandler extends MessageUiHandler { for (const p in party) { const slotIndex = parseInt(p); - const partySlot = new PartySlot(this.scene, slotIndex, party[p], this.iconAnimHandler, this.partyUiMode, this.tmMoveId); - this.scene.add.existing(partySlot); + const partySlot = new PartySlot(slotIndex, party[p], this.iconAnimHandler, this.partyUiMode, this.tmMoveId); + globalScene.add.existing(partySlot); this.partySlotsContainer.add(partySlot); this.partySlots.push(partySlot); if (this.cursor === slotIndex) { @@ -687,7 +703,7 @@ export default class PartyUiHandler extends MessageUiHandler { } } - setCursor(cursor: integer): boolean { + setCursor(cursor: number): boolean { let changed: boolean; if (this.optionsMode) { @@ -721,7 +737,7 @@ export default class PartyUiHandler extends MessageUiHandler { this.optionsCursor = cursor; } if (!this.optionsCursorObj) { - this.optionsCursorObj = this.scene.add.image(0, 0, "cursor"); + this.optionsCursorObj = globalScene.add.image(0, 0, "cursor"); this.optionsCursorObj.setOrigin(0, 0); this.optionsContainer.add(this.optionsCursorObj); } @@ -747,7 +763,7 @@ export default class PartyUiHandler extends MessageUiHandler { return changed; } - showText(text: string, delay?: integer | null, callback?: Function | null, callbackDelay?: integer | null, prompt?: boolean | null, promptDelay?: integer | null) { + showText(text: string, delay?: number | null, callback?: Function | null, callbackDelay?: number | null, prompt?: boolean | null, promptDelay?: number | null) { if (text.length === 0) { text = defaultMessage; } @@ -803,7 +819,7 @@ export default class PartyUiHandler extends MessageUiHandler { } updateOptions(): void { - const pokemon = this.scene.getPlayerParty()[this.cursor]; + const pokemon = globalScene.getPlayerParty()[this.cursor]; const learnableLevelMoves = this.partyUiMode === PartyUiMode.REMEMBER_MOVE_MODIFIER ? pokemon.getLearnableLevelMoves() @@ -815,7 +831,7 @@ export default class PartyUiHandler extends MessageUiHandler { } const itemModifiers = this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER - ? this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier + ? globalScene.findModifiers(m => m instanceof PokemonHeldItemModifier && m.isTransferable && m.pokemonId === pokemon.id) as PokemonHeldItemModifier[] : []; @@ -832,13 +848,13 @@ export default class PartyUiHandler extends MessageUiHandler { case PartyUiMode.SWITCH: case PartyUiMode.FAINT_SWITCH: case PartyUiMode.POST_BATTLE_SWITCH: - if (this.cursor >= this.scene.currentBattle.getBattlerCount()) { + if (this.cursor >= globalScene.currentBattle.getBattlerCount()) { const allowBatonModifierSwitch = this.partyUiMode !== PartyUiMode.FAINT_SWITCH - && this.scene.findModifier(m => m instanceof SwitchEffectTransferModifier - && (m as SwitchEffectTransferModifier).pokemonId === this.scene.getPlayerField()[this.fieldIndex].id); + && globalScene.findModifier(m => m instanceof SwitchEffectTransferModifier + && (m as SwitchEffectTransferModifier).pokemonId === globalScene.getPlayerField()[this.fieldIndex].id); - const moveHistory = this.scene.getPlayerField()[this.fieldIndex].getMoveHistory(); + const moveHistory = globalScene.getPlayerField()[this.fieldIndex].getMoveHistory(); const isBatonPassMove = this.partyUiMode === PartyUiMode.FAINT_SWITCH && moveHistory.length && allMoves[moveHistory[moveHistory.length - 1].move].getAttrs(ForceSwitchOutAttr)[0]?.isBatonPass() && moveHistory[moveHistory.length - 1].result === MoveResult.SUCCESS; // isBatonPassMove and allowBatonModifierSwitch shouldn't ever be true @@ -877,7 +893,7 @@ export default class PartyUiHandler extends MessageUiHandler { this.options.push(PartyOption.RELEASE); break; case PartyUiMode.CHECK: - if (this.scene.getCurrentPhase() instanceof SelectModifierPhase) { + if (globalScene.getCurrentPhase() instanceof SelectModifierPhase) { formChangeItemModifiers = this.getFormChangeItemsModifiers(pokemon); for (let i = 0; i < formChangeItemModifiers.length; i++) { this.options.push(PartyOption.FORM_CHANGE_ITEM + i); @@ -890,6 +906,7 @@ export default class PartyUiHandler extends MessageUiHandler { } this.options.push(PartyOption.SUMMARY); + this.options.push(PartyOption.POKEDEX); this.options.push(PartyOption.RENAME); if ((pokemonEvolutions.hasOwnProperty(pokemon.species.speciesId) || (pokemon.isFusion() && pokemon.fusionSpecies && pokemonEvolutions.hasOwnProperty(pokemon.fusionSpecies.speciesId)))) { @@ -941,7 +958,7 @@ export default class PartyUiHandler extends MessageUiHandler { this.options.push(PartyOption.CANCEL); - this.optionsBg = addWindow(this.scene, 0, 0, 0, 16 * this.options.length + 13); + this.optionsBg = addWindow(0, 0, 0, 16 * this.options.length + 13); this.optionsBg.setOrigin(1, 1); this.optionsContainer.add(this.optionsBg); @@ -1002,7 +1019,7 @@ export default class PartyUiHandler extends MessageUiHandler { } const yCoord = -6 - 16 * o; - const optionText = addBBCodeTextObject(this.scene, 0, yCoord - 16, optionName, TextStyle.WINDOW, { maxLines: 1 }); + const optionText = addBBCodeTextObject(0, yCoord - 16, optionName, TextStyle.WINDOW, { maxLines: 1 }); if (altText) { optionText.setColor("#40c8f8"); optionText.setShadowColor("#006090"); @@ -1058,14 +1075,14 @@ export default class PartyUiHandler extends MessageUiHandler { } } - doRelease(slotIndex: integer): void { - this.showText(this.getReleaseMessage(getPokemonNameWithAffix(this.scene.getPlayerParty()[slotIndex])), null, () => { + doRelease(slotIndex: number): void { + this.showText(this.getReleaseMessage(getPokemonNameWithAffix(globalScene.getPlayerParty()[slotIndex])), null, () => { this.clearPartySlots(); - this.scene.removePartyMemberModifiers(slotIndex); - const releasedPokemon = this.scene.getPlayerParty().splice(slotIndex, 1)[0]; + globalScene.removePartyMemberModifiers(slotIndex); + const releasedPokemon = globalScene.getPlayerParty().splice(slotIndex, 1)[0]; releasedPokemon.destroy(); this.populatePartySlots(); - if (this.cursor >= this.scene.getPlayerParty().length) { + if (this.cursor >= globalScene.getPlayerParty().length) { this.setCursor(this.cursor - 1); } if (this.partyUiMode === PartyUiMode.RELEASE) { @@ -1103,7 +1120,7 @@ export default class PartyUiHandler extends MessageUiHandler { } getFormChangeItemsModifiers(pokemon: Pokemon) { - let formChangeItemModifiers = this.scene.findModifiers(m => m instanceof PokemonFormChangeItemModifier && m.pokemonId === pokemon.id) as PokemonFormChangeItemModifier[]; + let formChangeItemModifiers = globalScene.findModifiers(m => m instanceof PokemonFormChangeItemModifier && m.pokemonId === pokemon.id) as PokemonFormChangeItemModifier[]; const ultraNecrozmaModifiers = formChangeItemModifiers.filter(m => m.active && m.formChangeItem === FormChangeItem.ULTRANECROZIUM_Z); if (ultraNecrozmaModifiers.length > 0) { // ULTRANECROZIUM_Z is active and deactivating it should be the only option @@ -1119,7 +1136,7 @@ export default class PartyUiHandler extends MessageUiHandler { return formChangeItemModifiers; } - getOptionsCursorWithScroll(): integer { + getOptionsCursorWithScroll(): number { return this.optionsCursor + this.optionsScrollCursor + (this.options && this.options[0] === PartyOption.SCROLL_UP ? -1 : 0); } @@ -1162,7 +1179,7 @@ export default class PartyUiHandler extends MessageUiHandler { class PartySlot extends Phaser.GameObjects.Container { private selected: boolean; private transfer: boolean; - private slotIndex: integer; + private slotIndex: number; private pokemon: PlayerPokemon; private slotBg: Phaser.GameObjects.Image; @@ -1173,14 +1190,13 @@ 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 pokemonIcon: Phaser.GameObjects.Container; private iconAnimHandler: PokemonIconAnimHandler; - constructor(scene: BattleScene, slotIndex: integer, pokemon: PlayerPokemon, iconAnimHandler: PokemonIconAnimHandler, partyUiMode: PartyUiMode, tmMoveId: Moves) { - super(scene, slotIndex >= scene.currentBattle.getBattlerCount() ? 230.5 : 64, - slotIndex >= scene.currentBattle.getBattlerCount() ? -184 + (scene.currentBattle.double ? -40 : 0) - + (28 + (scene.currentBattle.double ? 8 : 0)) * slotIndex : -124 + (scene.currentBattle.double ? -8 : 0) + slotIndex * 64); + constructor(slotIndex: number, pokemon: PlayerPokemon, iconAnimHandler: PokemonIconAnimHandler, partyUiMode: PartyUiMode, tmMoveId: Moves) { + 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 : -124 + (globalScene.currentBattle.double ? -8 : 0) + slotIndex * 64); this.slotIndex = slotIndex; this.pokemon = pokemon; @@ -1194,33 +1210,37 @@ class PartySlot extends Phaser.GameObjects.Container { } setup(partyUiMode: PartyUiMode, tmMoveId: Moves) { - const battlerCount = (this.scene as BattleScene).currentBattle.getBattlerCount(); + + const currentLanguage = i18next.resolvedLanguage ?? "en"; + const offsetJa = currentLanguage === "ja"; + + const battlerCount = globalScene.currentBattle.getBattlerCount(); const slotKey = `party_slot${this.slotIndex >= battlerCount ? "" : "_main"}`; - const slotBg = this.scene.add.sprite(0, 0, slotKey, `${slotKey}${this.pokemon.hp ? "" : "_fnt"}`); + const slotBg = globalScene.add.sprite(0, 0, slotKey, `${slotKey}${this.pokemon.hp ? "" : "_fnt"}`); this.slotBg = slotBg; this.add(slotBg); - const slotPb = this.scene.add.sprite(this.slotIndex >= battlerCount ? -85.5 : -51, this.slotIndex >= battlerCount ? 0 : -20.5, "party_pb"); + const slotPb = globalScene.add.sprite(this.slotIndex >= battlerCount ? -85.5 : -51, this.slotIndex >= battlerCount ? 0 : -20.5, "party_pb"); this.slotPb = slotPb; this.add(slotPb); - this.pokemonIcon = (this.scene as BattleScene).addPokemonIcon(this.pokemon, slotPb.x, slotPb.y, 0.5, 0.5, true); + this.pokemonIcon = globalScene.addPokemonIcon(this.pokemon, slotPb.x, slotPb.y, 0.5, 0.5, true); this.add(this.pokemonIcon); this.iconAnimHandler.addOrUpdate(this.pokemonIcon, PokemonIconAnimMode.PASSIVE); - const slotInfoContainer = this.scene.add.container(0, 0); + const slotInfoContainer = globalScene.add.container(0, 0); this.add(slotInfoContainer); let displayName = this.pokemon.getNameToRender(); let nameTextWidth: number; - const nameSizeTest = addTextObject(this.scene, 0, 0, displayName, TextStyle.PARTY); + const nameSizeTest = addTextObject(0, 0, displayName, TextStyle.PARTY); nameTextWidth = nameSizeTest.displayWidth; while (nameTextWidth > (this.slotIndex >= battlerCount ? 52 : (76 - (this.pokemon.fusionSpecies ? 8 : 0)))) { @@ -1231,16 +1251,16 @@ class PartySlot extends Phaser.GameObjects.Container { nameSizeTest.destroy(); - this.slotName = addTextObject(this.scene, 0, 0, displayName, TextStyle.PARTY); - this.slotName.setPositionRelative(slotBg, this.slotIndex >= battlerCount ? 21 : 24, this.slotIndex >= battlerCount ? 2 : 10); + 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); - const slotLevelLabel = this.scene.add.image(0, 0, "party_slot_overlay_lv"); - slotLevelLabel.setPositionRelative(this.slotName, 8, 12); + 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 slotLevelText = addTextObject(this.scene, 0, 0, this.pokemon.level.toString(), this.pokemon.level < (this.scene as BattleScene).getMaxExpLevel() ? TextStyle.PARTY : TextStyle.PARTY_RED); - slotLevelText.setPositionRelative(slotLevelLabel, 9, 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); slotInfoContainer.add([ this.slotName, slotLevelLabel, slotLevelText ]); @@ -1248,7 +1268,7 @@ class PartySlot extends Phaser.GameObjects.Container { const genderSymbol = getGenderSymbol(this.pokemon.getGender(true)); if (genderSymbol) { - const slotGenderText = addTextObject(this.scene, 0, 0, genderSymbol, TextStyle.PARTY); + 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) { @@ -1262,7 +1282,7 @@ class PartySlot extends Phaser.GameObjects.Container { } if (this.pokemon.fusionSpecies) { - const splicedIcon = this.scene.add.image(0, 0, "icon_spliced"); + const splicedIcon = globalScene.add.image(0, 0, "icon_spliced"); splicedIcon.setScale(0.5); splicedIcon.setOrigin(0, 0); if (this.slotIndex >= battlerCount) { @@ -1275,7 +1295,7 @@ class PartySlot extends Phaser.GameObjects.Container { } if (this.pokemon.status) { - const statusIndicator = this.scene.add.sprite(0, 0, Utils.getLocalizedSpriteKey("statuses")); + const statusIndicator = globalScene.add.sprite(0, 0, Utils.getLocalizedSpriteKey("statuses")); statusIndicator.setFrame(StatusEffect[this.pokemon.status?.effect].toLowerCase()); statusIndicator.setOrigin(0, 0); statusIndicator.setPositionRelative(slotLevelLabel, this.slotIndex >= battlerCount ? 43 : 55, 0); @@ -1286,7 +1306,7 @@ class PartySlot extends Phaser.GameObjects.Container { if (this.pokemon.isShiny()) { const doubleShiny = this.pokemon.isFusion() && this.pokemon.shiny && this.pokemon.fusionShiny; - const shinyStar = this.scene.add.image(0, 0, `shiny_star_small${doubleShiny ? "_1" : ""}`); + 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(!doubleShiny ? this.pokemon.getVariant() : this.pokemon.variant)); @@ -1294,7 +1314,7 @@ class PartySlot extends Phaser.GameObjects.Container { slotInfoContainer.add(shinyStar); if (doubleShiny) { - const fusionShinyStar = this.scene.add.image(0, 0, "shiny_star_small_2"); + const fusionShinyStar = globalScene.add.image(0, 0, "shiny_star_small_2"); fusionShinyStar.setOrigin(0, 0); fusionShinyStar.setPosition(shinyStar.x, shinyStar.y); fusionShinyStar.setTint(getVariantTint(this.pokemon.fusionVariant)); @@ -1303,25 +1323,25 @@ class PartySlot extends Phaser.GameObjects.Container { } } - this.slotHpBar = this.scene.add.image(0, 0, "party_slot_hp_bar"); + 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); const hpRatio = this.pokemon.getHpRatio(); - this.slotHpOverlay = this.scene.add.sprite(0, 0, "party_slot_hp_overlay", hpRatio > 0.5 ? "high" : hpRatio > 0.25 ? "medium" : "low"); + 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.slotHpText = addTextObject(this.scene, 0, 0, `${this.pokemon.hp}/${this.pokemon.getMaxHp()}`, TextStyle.PARTY); - this.slotHpText.setPositionRelative(this.slotHpBar, this.slotHpBar.width - 3, this.slotHpBar.height - 2); + 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.slotDescriptionLabel = addTextObject(this.scene, 0, 0, "", TextStyle.MESSAGE); + 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); @@ -1387,7 +1407,7 @@ class PartySlot extends Phaser.GameObjects.Container { } private updateSlotTexture(): void { - const battlerCount = (this.scene as BattleScene).currentBattle.getBattlerCount(); + 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" : ""}`); } @@ -1399,24 +1419,24 @@ class PartyCancelButton extends Phaser.GameObjects.Container { private partyCancelBg: Phaser.GameObjects.Sprite; private partyCancelPb: Phaser.GameObjects.Sprite; - constructor(scene: BattleScene, x: number, y: number) { - super(scene, x, y); + constructor(x: number, y: number) { + super(globalScene, x, y); this.setup(); } setup() { - const partyCancelBg = this.scene.add.sprite(0, 0, "party_cancel"); + const partyCancelBg = globalScene.add.sprite(0, 0, "party_cancel"); this.add(partyCancelBg); this.partyCancelBg = partyCancelBg; - const partyCancelPb = this.scene.add.sprite(-17, 0, "party_pb"); + const partyCancelPb = globalScene.add.sprite(-17, 0, "party_pb"); this.add(partyCancelPb); this.partyCancelPb = partyCancelPb; - const partyCancelText = addTextObject(this.scene, -8, -7, i18next.t("partyUiHandler:cancel"), TextStyle.PARTY); + const partyCancelText = addTextObject(-8, -7, i18next.t("partyUiHandler:cancel"), TextStyle.PARTY); this.add(partyCancelText); } diff --git a/src/ui/pokeball-tray.ts b/src/ui/pokeball-tray.ts index 0313812ef79..0c913d195a9 100644 --- a/src/ui/pokeball-tray.ts +++ b/src/ui/pokeball-tray.ts @@ -1,5 +1,5 @@ -import BattleScene from "../battle-scene"; -import Pokemon from "../field/pokemon"; +import { globalScene } from "#app/global-scene"; +import type Pokemon from "../field/pokemon"; export default class PokeballTray extends Phaser.GameObjects.Container { private player: boolean; @@ -9,18 +9,18 @@ export default class PokeballTray extends Phaser.GameObjects.Container { public shown: boolean; - constructor(scene: BattleScene, player: boolean) { - super(scene, player ? (scene.game.canvas.width / 6) : 0, player ? -72 : -144); + constructor(player: boolean) { + super(globalScene, player ? (globalScene.game.canvas.width / 6) : 0, player ? -72 : -144); this.player = player; } setup(): void { - this.bg = this.scene.add.nineslice(0, 0, `pb_tray_overlay_${this.player ? "player" : "enemy"}`, undefined, 104, 4, 48, 8, 0, 0); + this.bg = globalScene.add.nineslice(0, 0, `pb_tray_overlay_${this.player ? "player" : "enemy"}`, undefined, 104, 4, 48, 8, 0, 0); this.bg.setOrigin(this.player ? 1 : 0, 0); this.add(this.bg); - this.balls = new Array(6).fill(null).map((_, i) => this.scene.add.sprite((this.player ? -83 : 76) + (this.scene.game.canvas.width / 6) * (this.player ? -1 : 1) + 10 * i * (this.player ? 1 : -1), -8, "pb_tray_ball", "empty")); + this.balls = new Array(6).fill(null).map((_, i) => globalScene.add.sprite((this.player ? -83 : 76) + (globalScene.game.canvas.width / 6) * (this.player ? -1 : 1) + 10 * i * (this.player ? 1 : -1), -8, "pb_tray_ball", "empty")); for (const ball of this.balls) { ball.setOrigin(0, 0); @@ -37,7 +37,7 @@ export default class PokeballTray extends Phaser.GameObjects.Container { return resolve(); } - (this.scene as BattleScene).fieldUI.bringToTop(this); + globalScene.fieldUI.bringToTop(this); this.x += 104 * (this.player ? 1 : -1); @@ -45,7 +45,7 @@ export default class PokeballTray extends Phaser.GameObjects.Container { this.bg.alpha = 1; this.balls.forEach((ball, b) => { - ball.x += (this.scene.game.canvas.width / 6 + 104) * (this.player ? 1 : -1); + ball.x += (globalScene.game.canvas.width / 6 + 104) * (this.player ? 1 : -1); let ballFrame = "ball"; if (b >= party.length) { ballFrame = "empty"; @@ -57,21 +57,21 @@ export default class PokeballTray extends Phaser.GameObjects.Container { ball.setFrame(ballFrame); }); - (this.scene as BattleScene).playSound("se/pb_tray_enter"); + globalScene.playSound("se/pb_tray_enter"); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this, x: `${this.player ? "-" : "+"}=104`, duration: 500, ease: "Sine.easeIn", onComplete: () => { this.balls.forEach((ball, b) => { - this.scene.tweens.add({ + globalScene.tweens.add({ targets: ball, x: `${this.player ? "-" : "+"}=104`, duration: b * 100, ease: "Sine.easeIn", - onComplete: () => (this.scene as BattleScene).playSound(`se/${(b < party.length ? "pb_tray_ball" : "pb_tray_empty")}`) + onComplete: () => globalScene.playSound(`se/${(b < party.length ? "pb_tray_ball" : "pb_tray_empty")}`) }); }); } @@ -80,7 +80,7 @@ export default class PokeballTray extends Phaser.GameObjects.Container { this.setVisible(true); this.shown = true; - this.scene.time.delayedCall(1100, () => resolve()); + globalScene.time.delayedCall(1100, () => resolve()); }); } @@ -91,16 +91,16 @@ export default class PokeballTray extends Phaser.GameObjects.Container { } this.balls.forEach((ball, b) => { - this.scene.tweens.add({ + globalScene.tweens.add({ targets: ball, - x: `${this.player ? "-" : "+"}=${this.scene.game.canvas.width / 6}`, + x: `${this.player ? "-" : "+"}=${globalScene.game.canvas.width / 6}`, duration: 250, delay: b * 100, ease: "Sine.easeIn" }); }); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.bg, width: 144, alpha: 0, @@ -108,7 +108,7 @@ export default class PokeballTray extends Phaser.GameObjects.Container { ease: "Sine.easeIn" }); - this.scene.time.delayedCall(850, () => { + globalScene.time.delayedCall(850, () => { this.setVisible(false); resolve(); }); diff --git a/src/ui/pokedex-info-overlay.ts b/src/ui/pokedex-info-overlay.ts new file mode 100644 index 00000000000..fe0b47b57e0 --- /dev/null +++ b/src/ui/pokedex-info-overlay.ts @@ -0,0 +1,174 @@ +import type { InfoToggle } from "../battle-scene"; +import { TextStyle, addTextObject } from "./text"; +import { addWindow } from "./ui-theme"; +import * as Utils from "../utils"; +import i18next from "i18next"; +import { globalScene } from "#app/global-scene"; + +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; + /** Default is always half the screen, regardless of scale */ + width?: number; + /** Determines whether to display the small secondary box */ + hideEffectBox?: boolean; + hideBg?: boolean; +} + +const DESC_HEIGHT = 48; +const BORDER = 8; +const GLOBAL_SCALE = 6; + +export default class PokedexInfoOverlay extends Phaser.GameObjects.Container implements InfoToggle { + public active: boolean = false; + + private desc: Phaser.GameObjects.Text; + private descScroll : Phaser.Tweens.Tween | null = null; + + private descBg: Phaser.GameObjects.NineSlice; + + private options: PokedexInfoOverlaySettings; + + private textMaskRect: Phaser.GameObjects.Graphics; + + 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.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.descBg = addWindow(0, 0, this.width, DESC_HEIGHT); + this.descBg.setOrigin(0, 0); + this.add(this.descBg); + + // set up the description; wordWrap uses true pixels, unaffected by any scaling, while other values are affected + this.desc = addTextObject(BORDER, BORDER - 2, "", TextStyle.BATTLE_INFO, { wordWrap: { width: (this.width - (BORDER - 2) * 2) * GLOBAL_SCALE }}); + this.desc.setLineSpacing(i18next.resolvedLanguage === "ja" ? 25 : 5); + + // limit the text rendering, required for scrolling later on + this.maskPointOriginX = options?.x || 0; + this.maskPointOriginY = options?.y || 0; + + if (this.maskPointOriginX < 0) { + this.maskPointOriginX += globalScene.game.canvas.width / GLOBAL_SCALE; + } + if (this.maskPointOriginY < 0) { + this.maskPointOriginY += globalScene.game.canvas.height / GLOBAL_SCALE; + } + + 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.textMaskRect.setScale(6); + const textMask = this.createGeometryMask(this.textMaskRect); + + this.add(this.desc); + this.desc.setMask(textMask); + + if (options?.hideBg) { + this.descBg.setVisible(false); + } + + // hide this component for now + this.setVisible(false); + } + + // show this component with infos for the specific move + show(text: string):boolean { + if (!globalScene.enableMoveInfo) { + return false; // move infos have been disabled // TODO:: is `false` correct? i used to be `undeefined` + } + + this.desc.setText(text ?? ""); + + // stop previous scrolling effects and reset y position + if (this.descScroll) { + this.descScroll.remove(); + this.descScroll = null; + this.desc.y = BORDER - 2; + } + + // determine if we need to add new scrolling effects + const lineCount = Math.floor(this.desc.displayHeight * (96 / 72) / 14.83); + + const newHeight = lineCount >= 3 ? 48 : (lineCount === 2 ? 36 : 24); + 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 + ); + const updatedMask = this.createGeometryMask(this.textMaskRect); + this.desc.setMask(updatedMask); + + this.descBg.setSize(this.descBg.width, newHeight); + this.descBg.setY(48 - newHeight); + this.desc.setY(BORDER - 2 + (48 - newHeight)); + + if (lineCount > 3) { + // generate scrolling effects + this.descScroll = globalScene.tweens.add({ + targets: this.desc, + delay: Utils.fixedInt(2000), + loop: -1, + hold: Utils.fixedInt(2000), + duration: Utils.fixedInt((lineCount - 3) * 2000), + y: `-=${14.83 * (72 / 96) * (lineCount - 3)}` + }); + } + + if (!this.options.delayVisibility) { + this.setVisible(true); + } + this.active = true; + return true; + } + + clear() { + this.setVisible(false); + this.active = false; + } + + toggleInfo(visible: boolean): void { + if (visible) { + this.setVisible(true); + } + globalScene.tweens.add({ + targets: this.desc, + duration: Utils.fixedInt(125), + ease: "Sine.easeInOut", + alpha: visible ? 1 : 0 + }); + if (!visible) { + this.setVisible(false); + } + } + + isActive(): boolean { + return this.active; + } + + // width of this element + static getWidth(scale:number):number { + return globalScene.game.canvas.width / GLOBAL_SCALE / 2; + } + + // height of this element + static getHeight(scale:number, onSide?: boolean):number { + return DESC_HEIGHT * scale; + } +} diff --git a/src/ui/pokedex-mon-container.ts b/src/ui/pokedex-mon-container.ts new file mode 100644 index 00000000000..1bcfafc0766 --- /dev/null +++ b/src/ui/pokedex-mon-container.ts @@ -0,0 +1,214 @@ +import type { Variant } from "#app/data/variant"; +import { globalScene } from "#app/global-scene"; +import { isNullOrUndefined } from "#app/utils"; +import type PokemonSpecies from "../data/pokemon-species"; +import { addTextObject, TextStyle } from "./text"; + + +interface SpeciesDetails { + shiny?: boolean, + formIndex?: number + female?: boolean, + variant?: Variant +} + +export class PokedexMonContainer extends Phaser.GameObjects.Container { + public species: PokemonSpecies; + public icon: Phaser.GameObjects.Sprite; + public shinyIcons: Phaser.GameObjects.Image[] = []; + public label: Phaser.GameObjects.Text; + public starterPassiveBgs: Phaser.GameObjects.Image; + public hiddenAbilityIcon: Phaser.GameObjects.Image; + public favoriteIcon: Phaser.GameObjects.Image; + public classicWinIcon: Phaser.GameObjects.Image; + public candyUpgradeIcon: Phaser.GameObjects.Image; + public candyUpgradeOverlayIcon: Phaser.GameObjects.Image; + public eggMove1Icon: Phaser.GameObjects.Image; + public tmMove1Icon: Phaser.GameObjects.Image; + public eggMove2Icon: Phaser.GameObjects.Image; + public tmMove2Icon: Phaser.GameObjects.Image; + public passive1Icon: Phaser.GameObjects.Image; + public passive2Icon: Phaser.GameObjects.Image; + public passive1OverlayIcon: Phaser.GameObjects.Image; + public passive2OverlayIcon: Phaser.GameObjects.Image; + public cost: number = 0; + + constructor(species: PokemonSpecies, options: SpeciesDetails = {}) { + super(globalScene, 0, 0); + + this.setSpecies(species, options); + + // starter passive bg + const starterPassiveBg = globalScene.add.image(2, 5, "passive_bg"); + starterPassiveBg.setOrigin(0, 0); + starterPassiveBg.setScale(0.75); + starterPassiveBg.setVisible(false); + this.add(starterPassiveBg); + this.starterPassiveBgs = starterPassiveBg; + + // shiny icons + for (let i = 0; i < 3; i++) { + const shinyIcon = globalScene.add.image(i * -3 + 12, 2, "shiny_star_small"); + shinyIcon.setScale(0.5); + shinyIcon.setOrigin(0, 0); + shinyIcon.setVisible(false); + this.shinyIcons.push(shinyIcon); + } + this.add(this.shinyIcons); + + // value label + const label = addTextObject(1, 2, "0", TextStyle.WINDOW, { fontSize: "32px" }); + label.setShadowOffset(2, 2); + label.setOrigin(0, 0); + label.setVisible(false); + this.add(label); + this.label = label; + + // hidden ability icon + const abilityIcon = globalScene.add.image(12, 7, "ha_capsule"); + abilityIcon.setOrigin(0, 0); + abilityIcon.setScale(0.5); + abilityIcon.setVisible(false); + this.add(abilityIcon); + this.hiddenAbilityIcon = abilityIcon; + + // favorite icon + const favoriteIcon = globalScene.add.image(0, 7, "favorite"); + favoriteIcon.setOrigin(0, 0); + favoriteIcon.setScale(0.5); + favoriteIcon.setVisible(false); + this.add(favoriteIcon); + this.favoriteIcon = favoriteIcon; + + // classic win icon + const classicWinIcon = globalScene.add.image(0, 12, "champion_ribbon"); + classicWinIcon.setOrigin(0, 0); + classicWinIcon.setScale(0.5); + classicWinIcon.setVisible(false); + this.add(classicWinIcon); + this.classicWinIcon = classicWinIcon; + + // candy upgrade icon + const candyUpgradeIcon = globalScene.add.image(12, 12, "candy"); + candyUpgradeIcon.setOrigin(0, 0); + candyUpgradeIcon.setScale(0.25); + candyUpgradeIcon.setVisible(false); + this.add(candyUpgradeIcon); + this.candyUpgradeIcon = candyUpgradeIcon; + + // candy upgrade overlay icon + const candyUpgradeOverlayIcon = globalScene.add.image(12, 12, "candy_overlay"); + candyUpgradeOverlayIcon.setOrigin(0, 0); + candyUpgradeOverlayIcon.setScale(0.25); + candyUpgradeOverlayIcon.setVisible(false); + this.add(candyUpgradeOverlayIcon); + this.candyUpgradeOverlayIcon = candyUpgradeOverlayIcon; + + // move icons + const eggMove1Icon = globalScene.add.image(0, 12, "mystery_egg"); + eggMove1Icon.setOrigin(0, 0); + eggMove1Icon.setScale(0.25); + eggMove1Icon.setVisible(false); + this.add(eggMove1Icon); + this.eggMove1Icon = eggMove1Icon; + + // move icons + const tmMove1Icon = globalScene.add.image(0, 12, "normal_memory"); + tmMove1Icon.setOrigin(0, 0); + tmMove1Icon.setScale(0.25); + tmMove1Icon.setVisible(false); + this.add(tmMove1Icon); + this.tmMove1Icon = tmMove1Icon; + + // move icons + const eggMove2Icon = globalScene.add.image(7, 12, "mystery_egg"); + eggMove2Icon.setOrigin(0, 0); + eggMove2Icon.setScale(0.25); + eggMove2Icon.setVisible(false); + this.add(eggMove2Icon); + this.eggMove2Icon = eggMove2Icon; + + // move icons + const tmMove2Icon = globalScene.add.image(7, 12, "normal_memory"); + tmMove2Icon.setOrigin(0, 0); + tmMove2Icon.setScale(0.25); + tmMove2Icon.setVisible(false); + this.add(tmMove2Icon); + this.tmMove2Icon = tmMove2Icon; + + + // passive icons + const passive1Icon = globalScene.add.image(3, 3, "candy"); + passive1Icon.setOrigin(0, 0); + passive1Icon.setScale(0.25); + passive1Icon.setVisible(false); + this.add(passive1Icon); + this.passive1Icon = passive1Icon; + + const passive1OverlayIcon = globalScene.add.image(12, 12, "candy_overlay"); + passive1OverlayIcon.setOrigin(0, 0); + passive1OverlayIcon.setScale(0.25); + passive1OverlayIcon.setVisible(false); + this.add(passive1OverlayIcon); + this.passive1OverlayIcon = passive1OverlayIcon; + + // passive icons + const passive2Icon = globalScene.add.image(12, 3, "candy"); + passive2Icon.setOrigin(0, 0); + passive2Icon.setScale(0.25); + passive2Icon.setVisible(false); + this.add(passive2Icon); + this.passive2Icon = passive2Icon; + + const passive2OverlayIcon = globalScene.add.image(12, 12, "candy_overlay"); + passive2OverlayIcon.setOrigin(0, 0); + passive2OverlayIcon.setScale(0.25); + passive2OverlayIcon.setVisible(false); + this.add(passive2OverlayIcon); + this.passive2OverlayIcon = passive2OverlayIcon; + } + + setSpecies(species: PokemonSpecies, options: SpeciesDetails = {}) { + + this.species = species; + + const { shiny, formIndex, female, variant } = options; + + const defaultDexAttr = globalScene.gameData.getSpeciesDefaultDexAttr(species, false, true); + const defaultProps = globalScene.gameData.getSpeciesDexAttrProps(species, defaultDexAttr); + + if (!isNullOrUndefined(formIndex)) { + defaultProps.formIndex = formIndex; + } + if (!isNullOrUndefined(shiny)) { + defaultProps.shiny = shiny; + } + if (!isNullOrUndefined(variant)) { + defaultProps.variant = variant; + } + if (!isNullOrUndefined(female)) { + defaultProps.female = female; + } + + if (this.icon) { + this.remove(this.icon); + this.icon.destroy(); // Properly removes the sprite from memory + } + + // icon + this.icon = globalScene.add.sprite(-2, 2, species.getIconAtlasKey(defaultProps.formIndex, defaultProps.shiny, defaultProps.variant)); + this.icon.setScale(0.5); + this.icon.setOrigin(0, 0); + this.icon.setFrame(species.getIconId(defaultProps.female, defaultProps.formIndex, defaultProps.shiny, defaultProps.variant)); + this.checkIconId(defaultProps.female, defaultProps.formIndex, defaultProps.shiny, defaultProps.variant); + this.add(this.icon); + } + + checkIconId(female, formIndex, shiny, variant) { + if (this.icon.frame.name !== this.species.getIconId(female, formIndex, shiny, variant)) { + console.log(`${this.species.name}'s variant icon does not exist. Replacing with default.`); + this.icon.setTexture(this.species.getIconAtlasKey(formIndex, false, variant)); + this.icon.setFrame(this.species.getIconId(female, formIndex, false, variant)); + } + } +} diff --git a/src/ui/pokedex-page-ui-handler.ts b/src/ui/pokedex-page-ui-handler.ts new file mode 100644 index 00000000000..eee900d411e --- /dev/null +++ b/src/ui/pokedex-page-ui-handler.ts @@ -0,0 +1,2519 @@ +import type { SpeciesFormEvolution } from "#app/data/balance/pokemon-evolutions"; +import { pokemonEvolutions, pokemonPrevolutions, pokemonStarters } from "#app/data/balance/pokemon-evolutions"; +import type { Variant } from "#app/data/variant"; +import { getVariantTint, getVariantIcon } from "#app/data/variant"; +import { argbFromRgba } from "@material/material-color-utilities"; +import i18next from "i18next"; +import { starterColors } from "#app/battle-scene"; +import { allAbilities } from "#app/data/ability"; +import { speciesEggMoves } from "#app/data/balance/egg-moves"; +import { GrowthRate, getGrowthRateColor } from "#app/data/exp"; +import { Gender, getGenderColor, getGenderSymbol } from "#app/data/gender"; +import { allMoves } from "#app/data/move"; +import { getNatureName } from "#app/data/nature"; +import type { SpeciesFormChange } from "#app/data/pokemon-forms"; +import { pokemonFormChanges } from "#app/data/pokemon-forms"; +import type { LevelMoves } from "#app/data/balance/pokemon-level-moves"; +import { pokemonFormLevelMoves, pokemonSpeciesLevelMoves } from "#app/data/balance/pokemon-level-moves"; +import type PokemonSpecies from "#app/data/pokemon-species"; +import { allSpecies, getPokemonSpecies, getPokemonSpeciesForm, normalForm } from "#app/data/pokemon-species"; +import { getStarterValueFriendshipCap, speciesStarterCosts } from "#app/data/balance/starters"; +import { starterPassiveAbilities } from "#app/data/balance/passives"; +import { Type } from "#enums/type"; +import { GameModes } from "#app/game-mode"; +import type { DexEntry, StarterAttributes } from "#app/system/game-data"; +import { AbilityAttr, DexAttr } from "#app/system/game-data"; +import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; +import MessageUiHandler from "#app/ui/message-ui-handler"; +import { StatsContainer } from "#app/ui/stats-container"; +import { TextStyle, addTextObject, getTextStyleOptions } from "#app/ui/text"; +import { Mode } from "#app/ui/ui"; +import { addWindow } from "#app/ui/ui-theme"; +import { Egg } from "#app/data/egg"; +import Overrides from "#app/overrides"; +import { SettingKeyboard } from "#app/system/settings/settings-keyboard"; +import { Passive as PassiveAttr } from "#enums/passive"; +import * as Challenge from "#app/data/challenge"; +import MoveInfoOverlay from "#app/ui/move-info-overlay"; +import PokedexInfoOverlay from "#app/ui/pokedex-info-overlay"; +import { getEggTierForSpecies } from "#app/data/egg"; +import { Device } from "#enums/devices"; +import type { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { Button } from "#enums/buttons"; +import { EggSourceType } from "#enums/egg-source-types"; +import { getPassiveCandyCount, getValueReductionCandyCounts, getSameSpeciesEggCandyCounts } from "#app/data/balance/starters"; +import { BooleanHolder, getLocalizedSpriteKey, isNullOrUndefined, NumberHolder, padInt, rgbHexToRgba, toReadableString } from "#app/utils"; +import type { Nature } from "#enums/nature"; +import * as Utils from "../utils"; +import { speciesTmMoves } from "#app/data/balance/tms"; +import type { BiomeTierTod } from "#app/data/balance/biomes"; +import { BiomePoolTier, catchableSpecies } from "#app/data/balance/biomes"; +import { Biome } from "#app/enums/biome"; +import { TimeOfDay } from "#app/enums/time-of-day"; +import type { Abilities } from "#app/enums/abilities"; +import { BaseStatsOverlay } from "#app/ui/base-stats-overlay"; +import { globalScene } from "#app/global-scene"; + + +interface LanguageSetting { + starterInfoTextSize: string, + instructionTextSize: string, + starterInfoXPos?: number, + starterInfoYOffset?: number +} + +const languageSettings: { [key: string]: LanguageSetting } = { + "en":{ + starterInfoTextSize: "56px", + instructionTextSize: "38px", + }, + "de":{ + starterInfoTextSize: "48px", + instructionTextSize: "35px", + starterInfoXPos: 33, + }, + "es-ES":{ + starterInfoTextSize: "56px", + instructionTextSize: "35px", + }, + "fr":{ + starterInfoTextSize: "54px", + instructionTextSize: "38px", + }, + "it":{ + starterInfoTextSize: "56px", + instructionTextSize: "38px", + }, + "pt_BR":{ + starterInfoTextSize: "47px", + instructionTextSize: "38px", + starterInfoXPos: 33, + }, + "zh":{ + starterInfoTextSize: "47px", + instructionTextSize: "38px", + starterInfoYOffset: 1, + starterInfoXPos: 24, + }, + "pt":{ + starterInfoTextSize: "48px", + instructionTextSize: "42px", + starterInfoXPos: 33, + }, + "ko":{ + starterInfoTextSize: "52px", + instructionTextSize: "38px", + }, + "ja":{ + starterInfoTextSize: "51px", + instructionTextSize: "38px", + }, + "ca-ES":{ + starterInfoTextSize: "56px", + instructionTextSize: "38px", + }, +}; + +const valueReductionMax = 2; + +// Position of UI elements +const speciesContainerX = 109; + +interface SpeciesDetails { + shiny?: boolean, + formIndex?: number + female?: boolean, + variant?: number, +} + +enum MenuOptions { + BASE_STATS, + ABILITIES, + LEVEL_MOVES, + EGG_MOVES, + TM_MOVES, + BIOMES, + NATURES, + TOGGLE_IVS, + EVOLUTIONS +} + + +export default class PokedexPageUiHandler extends MessageUiHandler { + private starterSelectContainer: Phaser.GameObjects.Container; + private shinyOverlay: Phaser.GameObjects.Image; + private pokemonNumberText: Phaser.GameObjects.Text; + private pokemonSprite: Phaser.GameObjects.Sprite; + private pokemonNameText: Phaser.GameObjects.Text; + private pokemonGrowthRateLabelText: Phaser.GameObjects.Text; + private pokemonGrowthRateText: Phaser.GameObjects.Text; + private type1Icon: Phaser.GameObjects.Sprite; + private type2Icon: Phaser.GameObjects.Sprite; + private pokemonLuckLabelText: Phaser.GameObjects.Text; + private pokemonLuckText: Phaser.GameObjects.Text; + private pokemonGenderText: Phaser.GameObjects.Text; + private pokemonUncaughtText: Phaser.GameObjects.Text; + private pokemonCandyContainer: Phaser.GameObjects.Container; + private pokemonCandyIcon: Phaser.GameObjects.Sprite; + private pokemonCandyDarknessOverlay: Phaser.GameObjects.Sprite; + private pokemonCandyOverlayIcon: Phaser.GameObjects.Sprite; + private pokemonCandyCountText: Phaser.GameObjects.Text; + private pokemonCaughtHatchedContainer: Phaser.GameObjects.Container; + private pokemonCaughtCountText: Phaser.GameObjects.Text; + private pokemonFormText: Phaser.GameObjects.Text; + private pokemonHatchedIcon : Phaser.GameObjects.Sprite; + private pokemonHatchedCountText: Phaser.GameObjects.Text; + private pokemonShinyIcons: Phaser.GameObjects.Sprite[]; + + private activeTooltip: "ABILITY" | "PASSIVE" | "CANDY" | undefined; + private instructionsContainer: Phaser.GameObjects.Container; + private filterInstructionsContainer: Phaser.GameObjects.Container; + private shinyIconElement: Phaser.GameObjects.Sprite; + private formIconElement: Phaser.GameObjects.Sprite; + private genderIconElement: Phaser.GameObjects.Sprite; + private variantIconElement: Phaser.GameObjects.Sprite; + private shinyLabel: Phaser.GameObjects.Text; + private formLabel: Phaser.GameObjects.Text; + private genderLabel: Phaser.GameObjects.Text; + private variantLabel: Phaser.GameObjects.Text; + private candyUpgradeIconElement: Phaser.GameObjects.Sprite; + private candyUpgradeLabel: Phaser.GameObjects.Text; + private showBackSpriteIconElement: Phaser.GameObjects.Sprite; + private showBackSpriteLabel: Phaser.GameObjects.Text; + + private starterSelectMessageBox: Phaser.GameObjects.NineSlice; + private starterSelectMessageBoxContainer: Phaser.GameObjects.Container; + private statsContainer: StatsContainer; + private moveInfoOverlay: MoveInfoOverlay; + private infoOverlay: PokedexInfoOverlay; + private baseStatsOverlay: BaseStatsOverlay; + + private statsMode: boolean; + + private allSpecies: PokemonSpecies[] = []; + private species: PokemonSpecies; + private starterId: number; + private formIndex: number; + private speciesLoaded: Map = new Map(); + private levelMoves: LevelMoves; + private eggMoves: Moves[] = []; + private hasEggMoves: boolean[] = []; + private tmMoves: Moves[] = []; + private ability1: Abilities; + private ability2: Abilities | undefined; + private abilityHidden: Abilities | undefined; + private passive: Abilities; + private hasPassive: boolean; + private hasAbilities: number[]; + private biomes: BiomeTierTod[]; + private preBiomes: BiomeTierTod[]; + private baseStats: number[]; + private baseTotal: number; + private evolutions: SpeciesFormEvolution[]; + private battleForms: SpeciesFormChange[]; + private prevolutions: SpeciesFormEvolution[]; + + private speciesStarterDexEntry: DexEntry | null; + private canCycleShiny: boolean; + private canCycleForm: boolean; + private canCycleGender: boolean; + + private assetLoadCancelled: BooleanHolder | null; + public cursorObj: Phaser.GameObjects.Image; + + // variables to keep track of the dynamically rendered list of instruction prompts for starter select + private instructionRowX = 0; + private instructionRowY = 0; + private instructionRowTextOffset = 9; + private filterInstructionRowX = 0; + private filterInstructionRowY = 0; + + private starterAttributes: StarterAttributes; + private savedStarterAttributes: StarterAttributes; + + protected blockInput: boolean = false; + protected blockInputOverlay: boolean = false; + + private showBackSprite: boolean = false; + + // Menu + private menuContainer: Phaser.GameObjects.Container; + private menuBg: Phaser.GameObjects.NineSlice; + protected optionSelectText: Phaser.GameObjects.Text; + private menuOptions: MenuOptions[]; + protected scale: number = 0.1666666667; + private menuDescriptions: string[]; + private isFormGender: boolean; + private filteredIndices: Species[] | null = null; + + private availableVariants: number; + private unlockedVariants: boolean[]; + + private canUseCandies: boolean; + + constructor() { + super(Mode.POKEDEX_PAGE); + } + + setup() { + const ui = this.getUi(); + const currentLanguage = i18next.resolvedLanguage ?? "en"; + 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.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 starterSelectBg = globalScene.add.image(0, 0, "pokedex_summary_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); + + this.pokemonNumberText = addTextObject(17, 1, "0000", TextStyle.SUMMARY); + this.pokemonNumberText.setOrigin(0, 0); + this.starterSelectContainer.add(this.pokemonNumberText); + + this.pokemonNameText = addTextObject(6, 112, "", TextStyle.SUMMARY); + this.pokemonNameText.setOrigin(0, 0); + this.starterSelectContainer.add(this.pokemonNameText); + + this.pokemonGrowthRateLabelText = addTextObject(8, 106, i18next.t("pokedexUiHandler:growthRate"), TextStyle.SUMMARY_ALT, { fontSize: "36px" }); + this.pokemonGrowthRateLabelText.setOrigin(0, 0); + this.pokemonGrowthRateLabelText.setVisible(false); + this.starterSelectContainer.add(this.pokemonGrowthRateLabelText); + + this.pokemonGrowthRateText = addTextObject(34, 106, "", TextStyle.SUMMARY_PINK, { 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.pokemonUncaughtText = addTextObject(6, 127, i18next.t("pokedexUiHandler:uncaught"), TextStyle.WINDOW, { fontSize: "56px" }); + this.pokemonUncaughtText.setOrigin(0, 0); + this.starterSelectContainer.add(this.pokemonUncaughtText); + + const starterBoxContainer = globalScene.add.container(speciesContainerX + 6, 9); //115 + + for (const species of allSpecies) { + if (!speciesStarterCosts.hasOwnProperty(species.speciesId) || !species.isObtainable()) { + continue; + } + + this.speciesLoaded.set(species.speciesId, false); + this.allSpecies.push(species); + } + + this.starterSelectContainer.add(starterBoxContainer); + + this.pokemonSprite = globalScene.add.sprite(53, 63, "pkmn__sub"); + this.pokemonSprite.setPipeline(globalScene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], ignoreTimeTint: true }); + this.starterSelectContainer.add(this.pokemonSprite); + + 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.type2Icon = globalScene.add.sprite(26, 98, getLocalizedSpriteKey("types")); + this.type2Icon.setScale(0.5); + this.type2Icon.setOrigin(0, 0); + this.starterSelectContainer.add(this.type2Icon); + + this.pokemonLuckLabelText = addTextObject(8, 89, i18next.t("common:luckIndicator"), TextStyle.WINDOW_ALT, { fontSize: "56px" }); + this.pokemonLuckLabelText.setOrigin(0, 0); + this.starterSelectContainer.add(this.pokemonLuckLabelText); + + this.pokemonLuckText = addTextObject(8 + this.pokemonLuckLabelText.displayWidth + 2, 89, "0", TextStyle.WINDOW, { fontSize: "56px" }); + this.pokemonLuckText.setOrigin(0, 0); + this.starterSelectContainer.add(this.pokemonLuckText); + + // Candy icon and count + this.pokemonCandyContainer = globalScene.add.container(4.5, 18); + + 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.50); + 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.pokemonFormText = addTextObject(6, 42, "Form", TextStyle.WINDOW_ALT, { fontSize: "42px" }); + this.pokemonFormText.setOrigin(0, 0); + this.starterSelectContainer.add(this.pokemonFormText); + + this.pokemonCaughtHatchedContainer = globalScene.add.container(2, 25); + this.pokemonCaughtHatchedContainer.setScale(0.5); + this.starterSelectContainer.add(this.pokemonCaughtHatchedContainer); + + const pokemonCaughtIcon = globalScene.add.sprite(1, 0, "items", "pb"); + pokemonCaughtIcon.setOrigin(0, 0); + pokemonCaughtIcon.setScale(0.75); + this.pokemonCaughtHatchedContainer.add(pokemonCaughtIcon); + + 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.pokemonShinyIcons = []; + for (let i = 0; i < 3; i++) { + const pokemonShinyIcon = globalScene.add.sprite(153 + i * 13, 160, "shiny_icons"); + pokemonShinyIcon.setOrigin(0.15, 0.2); + pokemonShinyIcon.setScale(1); + pokemonShinyIcon.setFrame(getVariantIcon(i as Variant)); + pokemonShinyIcon.setVisible(false); + this.pokemonCaughtHatchedContainer.add(pokemonShinyIcon); + this.pokemonShinyIcons.push(pokemonShinyIcon); + } + + this.pokemonHatchedCountText = addTextObject(24, 19, "0", TextStyle.SUMMARY_ALT); + this.pokemonHatchedCountText.setOrigin(0, 0); + this.pokemonCaughtHatchedContainer.add(this.pokemonHatchedCountText); + + // The font size should be set per language + const instructionTextSize = textSettings.instructionTextSize; + + this.instructionsContainer = globalScene.add.container(4, 128); + this.instructionsContainer.setVisible(true); + this.starterSelectContainer.add(this.instructionsContainer); + + this.candyUpgradeIconElement = new Phaser.GameObjects.Sprite(globalScene, this.instructionRowX, this.instructionRowY, "keyboard", "C.png"); + this.candyUpgradeIconElement.setName("sprite-candyUpgrade-icon-element"); + this.candyUpgradeIconElement.setScale(0.675); + this.candyUpgradeIconElement.setOrigin(0.0, 0.0); + this.candyUpgradeLabel = addTextObject(this.instructionRowX + this.instructionRowTextOffset, this.instructionRowY, i18next.t("pokedexUiHandler:candyUpgrade"), TextStyle.PARTY, { fontSize: instructionTextSize }); + this.candyUpgradeLabel.setName("text-candyUpgrade-label"); + + // 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.shinyLabel = addTextObject(this.instructionRowX + this.instructionRowTextOffset, this.instructionRowY, i18next.t("pokedexUiHandler:cycleShiny"), TextStyle.PARTY, { fontSize: instructionTextSize }); + this.shinyLabel.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.formLabel = addTextObject(this.instructionRowX + this.instructionRowTextOffset, this.instructionRowY, i18next.t("pokedexUiHandler:cycleForm"), TextStyle.PARTY, { fontSize: instructionTextSize }); + this.formLabel.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.genderLabel = addTextObject(this.instructionRowX + this.instructionRowTextOffset, this.instructionRowY, i18next.t("pokedexUiHandler:cycleGender"), TextStyle.PARTY, { fontSize: instructionTextSize }); + this.genderLabel.setName("text-gender-label"); + + this.variantIconElement = new Phaser.GameObjects.Sprite(globalScene, this.instructionRowX, this.instructionRowY, "keyboard", "V.png"); + this.variantIconElement.setName("sprite-variant-icon-element"); + this.variantIconElement.setScale(0.675); + this.variantIconElement.setOrigin(0.0, 0.0); + this.variantLabel = addTextObject(this.instructionRowX + this.instructionRowTextOffset, this.instructionRowY, i18next.t("pokedexUiHandler:cycleVariant"), TextStyle.PARTY, { fontSize: instructionTextSize }); + this.variantLabel.setName("text-variant-label"); + + this.showBackSpriteIconElement = new Phaser.GameObjects.Sprite(globalScene, 50, 7, "keyboard", "E.png"); + this.showBackSpriteIconElement.setName("show-backSprite-icon-element"); + this.showBackSpriteIconElement.setScale(0.675); + this.showBackSpriteIconElement.setOrigin(0.0, 0.0); + this.showBackSpriteLabel = addTextObject(60, 7, i18next.t("pokedexUiHandler:showBackSprite"), TextStyle.PARTY, { fontSize: instructionTextSize }); + this.showBackSpriteLabel.setName("show-backSprite-label"); + this.starterSelectContainer.add(this.showBackSpriteIconElement); + this.starterSelectContainer.add(this.showBackSpriteLabel); + + this.hideInstructions(); + + this.filterInstructionsContainer = globalScene.add.container(50, 5); + this.filterInstructionsContainer.setVisible(true); + this.starterSelectContainer.add(this.filterInstructionsContainer); + + this.starterSelectMessageBoxContainer = globalScene.add.container(0, globalScene.game.canvas.height / 6); + this.starterSelectMessageBoxContainer.setVisible(false); + this.starterSelectContainer.add(this.starterSelectMessageBoxContainer); + + this.starterSelectMessageBox = addWindow(1, -1, 318, 28); + this.starterSelectMessageBox.setOrigin(0, 1); + this.starterSelectMessageBoxContainer.add(this.starterSelectMessageBox); + + this.message = addTextObject(8, 8, "", TextStyle.WINDOW, { maxLines: 2 }); + this.message.setOrigin(0, 0); + this.starterSelectMessageBoxContainer.add(this.message); + + // arrow icon for the message box + this.initPromptSprite(this.starterSelectMessageBoxContainer); + + this.statsContainer = new StatsContainer(6, 16); + + globalScene.add.existing(this.statsContainer); + + this.statsContainer.setVisible(false); + + this.starterSelectContainer.add(this.statsContainer); + + + // Adding menu container + 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), Phaser.Geom.Rectangle.Contains); + + this.menuContainer.setVisible(false); + + this.menuOptions = Utils.getEnumKeys(MenuOptions).map(m => parseInt(MenuOptions[m]) as MenuOptions); + + this.optionSelectText = addTextObject(0, 0, this.menuOptions.map(o => `${i18next.t(`pokedexUiHandler:${MenuOptions[o]}`)}`).join("\n"), TextStyle.WINDOW, { maxLines: this.menuOptions.length }); + this.optionSelectText.setLineSpacing(12); + + this.menuDescriptions = [ + i18next.t("pokedexUiHandler:showBaseStats"), + i18next.t("pokedexUiHandler:showAbilities"), + i18next.t("pokedexUiHandler:showLevelMoves"), + i18next.t("pokedexUiHandler:showEggMoves"), + i18next.t("pokedexUiHandler:showTmMoves"), + i18next.t("pokedexUiHandler:showBiomes"), + i18next.t("pokedexUiHandler:showNatures"), + i18next.t("pokedexUiHandler:toggleIVs"), + i18next.t("pokedexUiHandler:showEvolutions") + ]; + + this.scale = getTextStyleOptions(TextStyle.WINDOW, globalScene.uiTheme).scale; + this.menuBg = addWindow( + (globalScene.game.canvas.width / 6 - 83), + 0, + this.optionSelectText.displayWidth + 19 + 24 * this.scale, + (globalScene.game.canvas.height / 6) - 2 + ); + this.menuBg.setOrigin(0, 0); + + this.optionSelectText.setPositionRelative(this.menuBg, 10 + 24 * this.scale, 6); + + this.menuContainer.add(this.menuBg); + + this.menuContainer.add(this.optionSelectText); + + ui.add(this.menuContainer); + + this.starterSelectContainer.add(this.menuContainer); + + + // adding base stats + this.baseStatsOverlay = new BaseStatsOverlay({ x: 317, y: 0, width:133 }); + this.menuContainer.add(this.baseStatsOverlay); + 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, + }); + this.starterSelectContainer.add(this.moveInfoOverlay); + + this.infoOverlay = new PokedexInfoOverlay({ + scale: overlayScale, + x: 1, + y: globalScene.game.canvas.height / 6 - PokedexInfoOverlay.getHeight(overlayScale) - 29, + }); + this.starterSelectContainer.add(this.infoOverlay); + + // Filter bar sits above everything, except the message box + this.starterSelectContainer.bringToTop(this.starterSelectMessageBoxContainer); + } + + show(args: any[]): boolean { + + // Allow the use of candies if we are in one of the whitelisted phases + this.canUseCandies = [ "TitlePhase", "SelectStarterPhase", "CommandPhase" ].includes(globalScene.getCurrentPhase()?.constructor.name ?? ""); + + if (args.length >= 1 && args[0] === "refresh") { + return false; + } else { + this.species = args[0]; + this.formIndex = args[1] ?? 0; + this.savedStarterAttributes = args[2] ?? { shiny:false, female:true, variant:0, form:0 }; + this.filteredIndices = args[3] ?? null; + this.starterSetup(); + } + + this.moveInfoOverlay.clear(); // clear this when removing a menu; the cancel button doesn't seem to trigger this automatically on controllers + this.infoOverlay.clear(); + + super.show(args); + + this.starterSelectContainer.setVisible(true); + this.getUi().bringToTop(this.starterSelectContainer); + + this.starterAttributes = this.initStarterPrefs(); + + this.menuOptions = Utils.getEnumKeys(MenuOptions).map(m => parseInt(MenuOptions[m]) as MenuOptions); + + this.menuContainer.setVisible(true); + + this.speciesStarterDexEntry = this.species ? globalScene.gameData.dexData[this.species.speciesId] : null; + this.setSpecies(); + this.updateInstructions(); + + this.setCursor(0); + + return true; + + } + + starterSetup(): void { + + this.evolutions = []; + this.prevolutions = []; + this.battleForms = []; + + const species = this.species; + + let formKey = this.species?.forms.length > 0 ? this.species.forms[this.formIndex].formKey : ""; + this.isFormGender = formKey === "male" || formKey === "female"; + if (this.isFormGender && ((this.savedStarterAttributes.female === true && formKey === "male") || (this.savedStarterAttributes.female === false && formKey === "female"))) { + this.formIndex = (this.formIndex + 1) % 2; + formKey = this.species.forms[this.formIndex].formKey; + } + + const formIndex = this.formIndex ?? 0; + + this.starterId = this.getStarterSpeciesId(this.species.speciesId); + + const allEvolutions = pokemonEvolutions.hasOwnProperty(species.speciesId) ? pokemonEvolutions[species.speciesId] : []; + + if (species.forms.length > 0) { + const form = species.forms[formIndex]; + + // If this form has a specific set of moves, we get them. + this.levelMoves = (formIndex > 0 && pokemonFormLevelMoves.hasOwnProperty(species.speciesId) && pokemonFormLevelMoves[species.speciesId].hasOwnProperty(formIndex)) ? pokemonFormLevelMoves[species.speciesId][formIndex] : pokemonSpeciesLevelMoves[species.speciesId]; + this.ability1 = form.ability1; + this.ability2 = (form.ability2 === form.ability1) ? undefined : form.ability2; + this.abilityHidden = (form.abilityHidden === form.ability1) ? undefined : form.abilityHidden; + + this.evolutions = allEvolutions.filter(e => (e.preFormKey === form.formKey || e.preFormKey === null)); + this.baseStats = form.baseStats; + this.baseTotal = form.baseTotal; + + } else { + this.levelMoves = pokemonSpeciesLevelMoves[species.speciesId]; + this.ability1 = species.ability1; + this.ability2 = (species.ability2 === species.ability1) ? undefined : species.ability2; + this.abilityHidden = (species.abilityHidden === species.ability1) ? undefined : species.abilityHidden; + + this.evolutions = allEvolutions; + this.baseStats = species.baseStats; + this.baseTotal = species.baseTotal; + } + + this.eggMoves = speciesEggMoves[this.starterId] ?? []; + this.hasEggMoves = Array.from({ length: 4 }, (_, em) => (globalScene.gameData.starterData[this.starterId].eggMoves & (1 << em)) !== 0); + + this.tmMoves = speciesTmMoves[species.speciesId]?.filter(m => Array.isArray(m) ? (m[0] === formKey ? true : false ) : true) + .map(m => Array.isArray(m) ? m[1] : m).sort((a, b) => allMoves[a].name > allMoves[b].name ? 1 : -1) ?? []; + + const passiveId = starterPassiveAbilities.hasOwnProperty(species.speciesId) ? species.speciesId : + starterPassiveAbilities.hasOwnProperty(this.starterId) ? this.starterId : pokemonPrevolutions[this.starterId]; + const passives = starterPassiveAbilities[passiveId]; + this.passive = (this.formIndex in passives) ? passives[formIndex] : passives[0]; + + const starterData = globalScene.gameData.starterData[this.starterId]; + const abilityAttr = starterData.abilityAttr; + this.hasPassive = starterData.passiveAttr > 0; + + const hasAbility1 = abilityAttr & AbilityAttr.ABILITY_1; + const hasAbility2 = abilityAttr & AbilityAttr.ABILITY_2; + const hasHiddenAbility = abilityAttr & AbilityAttr.ABILITY_HIDDEN; + + this.hasAbilities = [ + hasAbility1, + hasAbility2, + hasHiddenAbility + ]; + + const allBiomes = catchableSpecies[species.speciesId] ?? []; + this.preBiomes = this.sanitizeBiomes( + (catchableSpecies[this.starterId] ?? []) + .filter(b => !allBiomes.some(bm => (b.biome === bm.biome && b.tier === bm.tier)) && !(b.biome === Biome.TOWN)), + this.starterId); + this.biomes = this.sanitizeBiomes(allBiomes, species.speciesId); + + const allFormChanges = pokemonFormChanges.hasOwnProperty(species.speciesId) ? pokemonFormChanges[species.speciesId] : []; + this.battleForms = allFormChanges.filter(f => (f.preFormKey === this.species.forms[this.formIndex].formKey)); + + const preSpecies = pokemonPrevolutions.hasOwnProperty(this.species.speciesId) ? allSpecies.find(sp => sp.speciesId === pokemonPrevolutions[this.species.speciesId]) : null; + if (preSpecies) { + const preEvolutions = pokemonEvolutions.hasOwnProperty(preSpecies.speciesId) ? pokemonEvolutions[preSpecies.speciesId] : []; + this.prevolutions = preEvolutions.filter( + e => e.speciesId === species.speciesId && ( + ( + (e.evoFormKey === "" || e.evoFormKey === null) && + ( + // This takes care of Cosplay Pikachu (Pichu is not shown) + (preSpecies.forms.some(form => form.formKey === species.forms[formIndex]?.formKey)) || + // This takes care of Gholdengo + (preSpecies.forms.length > 0 && species.forms.length === 0) || + // This takes care of everything else + (preSpecies.forms.length === 0 && (species.forms.length === 0 || species.forms[formIndex]?.formKey === "")) + ) + ) + // This takes care of Burmy, Shellos etc + || e.evoFormKey === species.forms[formIndex]?.formKey + ) + ); + } + + this.availableVariants = species.getFullUnlocksData() & DexAttr.VARIANT_3 ? 3 : 1; + } + + // Function to ensure that forms appear in the appropriate biome and tod + sanitizeBiomes(biomes: BiomeTierTod[], speciesId: number): BiomeTierTod[] { + + if (speciesId === Species.BURMY || speciesId === Species.WORMADAM) { + return biomes.filter(b => { + const formIndex = (() => { + switch (b.biome) { + case Biome.BEACH: + return 1; + case Biome.SLUM: + return 2; + default: + return 0; + } + })(); + return this.formIndex === formIndex; + }); + + } else if (speciesId === Species.ROTOM) { + return biomes.filter(b => { + const formIndex = (() => { + switch (b.biome) { + case Biome.VOLCANO: + return 1; + case Biome.SEA: + return 2; + case Biome.ICE_CAVE: + return 3; + case Biome.MOUNTAIN: + return 4; + case Biome.TALL_GRASS: + return 5; + default: + return 0; + } + })(); + return this.formIndex === formIndex; + }); + + } else if (speciesId === Species.LYCANROC) { + return biomes.filter(b => { + const formIndex = (() => { + switch (b.tod[0]) { + case TimeOfDay.DAY: + case TimeOfDay.DAWN: + return 0; + case TimeOfDay.DUSK: + return 2; + case TimeOfDay.NIGHT: + return 1; + default: + return 0; + } + })(); + return this.formIndex === formIndex; + }); + } + + return biomes; + } + + isCaught(otherSpecies?: PokemonSpecies): bigint { + if (globalScene.dexForDevs) { + return 255n; + } + + const species = otherSpecies ? otherSpecies : this.species; + const dexEntry = globalScene.gameData.dexData[species.speciesId]; + const starterDexEntry = globalScene.gameData.dexData[this.getStarterSpeciesId(species.speciesId)]; + + return (dexEntry?.caughtAttr ?? 0n) & (starterDexEntry?.caughtAttr ?? 0n) & species.getFullUnlocksData(); + } + /** + * Check whether a given form is caught for a given species. + * All forms that can be reached through a form change during battle are considered caught and show up in the dex as such. + * + * @param otherSpecies The species to check; defaults to current species + * @param otherFormIndex The form index of the form to check; defaults to current form + * @returns StarterAttributes for the species + */ + isFormCaught(otherSpecies?: PokemonSpecies, otherFormIndex?: number | undefined): boolean { + + if (globalScene.dexForDevs) { + return true; + } + const species = otherSpecies ? otherSpecies : this.species; + const formIndex = otherFormIndex !== undefined ? otherFormIndex : this.formIndex; + const caughtAttr = this.isCaught(species); + + if (caughtAttr && (!species.forms.length || species.forms.length === 1)) { + return true; + } + + const isFormCaught = (caughtAttr & globalScene.gameData.getFormAttr(formIndex ?? 0)) > 0n; + return isFormCaught; + } + + /** + * Get the starter attributes for the given PokemonSpecies, after sanitizing them. + * If somehow a preference is set for a form, variant, gender, ability or nature + * that wasn't actually unlocked or is invalid it will be cleared here + * + * @param species The species to get Starter Preferences for + * @returns StarterAttributes for the species + */ + initStarterPrefs(): StarterAttributes { + const starterAttributes : StarterAttributes | null = this.species ? { ...this.savedStarterAttributes } : null; + const caughtAttr = this.isCaught(); + + // no preferences or Pokemon wasn't caught, return empty attribute + if (!starterAttributes || !caughtAttr) { + return {}; + } + + const hasShiny = caughtAttr & DexAttr.SHINY; + const hasNonShiny = caughtAttr & DexAttr.NON_SHINY; + if (!hasShiny || (starterAttributes.shiny === undefined && hasNonShiny)) { + // shiny form wasn't unlocked, purging shiny and variant setting + starterAttributes.shiny = false; + starterAttributes.variant = 0; + } else if (!hasNonShiny || (starterAttributes.shiny === undefined && hasShiny)) { + starterAttributes.shiny = true; + starterAttributes.variant = 0; + } + + this.unlockedVariants = [ + !!(hasShiny && caughtAttr & DexAttr.DEFAULT_VARIANT), + !!(hasShiny && caughtAttr & DexAttr.VARIANT_2), + !!(hasShiny && caughtAttr & DexAttr.VARIANT_3) + ]; + if (starterAttributes.variant === undefined || isNaN(starterAttributes.variant) || starterAttributes.variant < 0) { + starterAttributes.variant = 0; + } else if (!this.unlockedVariants[starterAttributes.variant]) { + let highestValidIndex = -1; + for (let i = 0; i <= starterAttributes.variant && i < this.unlockedVariants.length; i++) { + if (this.unlockedVariants[i]) { + highestValidIndex = i; + } + } + // Set to the highest valid index found or default to 0 + starterAttributes.variant = highestValidIndex !== -1 ? highestValidIndex : 0; + } + + if (starterAttributes.female !== undefined) { + if ((starterAttributes.female && !(caughtAttr & DexAttr.FEMALE)) || (!starterAttributes.female && !(caughtAttr & DexAttr.MALE))) { + starterAttributes.female = !starterAttributes.female; + } + } else { + if (caughtAttr & DexAttr.FEMALE) { + starterAttributes.female = true; + } else if (caughtAttr & DexAttr.MALE) { + starterAttributes.female = false; + } + } + + return starterAttributes; + } + + showText(text: string, delay?: number, callback?: Function, callbackDelay?: number, prompt?: boolean, promptDelay?: number, moveToTop?: boolean) { + super.showText(text, delay, callback, callbackDelay, prompt, promptDelay); + + const singleLine = text?.indexOf("\n") === -1; + + this.starterSelectMessageBox.setSize(318, singleLine ? 28 : 42); + + if (moveToTop) { + this.starterSelectMessageBox.setOrigin(0, 0); + this.starterSelectMessageBoxContainer.setY(0); + this.message.setY(4); + } else { + this.starterSelectMessageBoxContainer.setY(globalScene.game.canvas.height / 6); + this.starterSelectMessageBox.setOrigin(0, 1); + this.message.setY(singleLine ? -22 : -37); + } + + this.starterSelectMessageBoxContainer.setVisible(!!text?.length); + } + + /** + * Determines if 'Icon' based upgrade notifications should be shown + * @returns true if upgrade notifications are enabled and set to display an 'Icon' + */ + isUpgradeIconEnabled(): boolean { + return globalScene.candyUpgradeNotification !== 0 && globalScene.candyUpgradeDisplay === 0; + } + /** + * Determines if 'Animation' based upgrade notifications should be shown + * @returns true if upgrade notifications are enabled and set to display an 'Animation' + */ + isUpgradeAnimationEnabled(): boolean { + return globalScene.candyUpgradeNotification !== 0 && globalScene.candyUpgradeDisplay === 1; + } + + /** + * If the pokemon is an evolution, find speciesId of its starter. + * @param speciesId the id of the species to check + * @returns the id of the corresponding starter + */ + getStarterSpeciesId(speciesId): number { + if (speciesId === Species.PIKACHU) { + if ([ 0, 1, 8 ].includes(this.formIndex)) { + return Species.PICHU; + } else { + return Species.PIKACHU; + } + } + if (speciesStarterCosts.hasOwnProperty(speciesId)) { + return speciesId; + } else { + return pokemonStarters[speciesId]; + } + } + + getStarterSpecies(species): PokemonSpecies { + if (speciesStarterCosts.hasOwnProperty(species.speciesId)) { + return species; + } else { + return allSpecies.find(sp => sp.speciesId === pokemonStarters[species.speciesId]) ?? species; + } + } + + processInput(button: Button): boolean { + if (this.blockInput) { + return false; + } + + const ui = this.getUi(); + + let success = false; + let error = false; + + const isCaught = this.isCaught(); + const isFormCaught = this.isFormCaught(); + + if (this.blockInputOverlay) { + if (button === Button.CANCEL || button === Button.ACTION) { + this.blockInputOverlay = false; + this.baseStatsOverlay.clear(); + ui.showText(""); + return true; + } else if (button === Button.UP || button === Button.DOWN) { + this.blockInputOverlay = false; + this.baseStatsOverlay.clear(); + ui.showText(""); + } else { + return false; + } + } + + if (button === Button.SUBMIT) { + success = true; + } else if (button === Button.CANCEL) { + if (this.statsMode) { + this.toggleStatsMode(false); + success = true; + } else { + this.getUi().revertMode(); + success = true; + } + } else { + + const starterData = globalScene.gameData.starterData[this.starterId]; + // prepare persistent starter data to store changes + const starterAttributes = this.starterAttributes; + + if (button === Button.ACTION) { + + switch (this.cursor) { + + case MenuOptions.BASE_STATS: + + if (!isCaught || !isFormCaught) { + error = true; + } else { + + this.blockInput = true; + + ui.setMode(Mode.POKEDEX_PAGE, "refresh").then(() => { + ui.showText(i18next.t("pokedexUiHandler:showBaseStats"), null, () => { + + this.baseStatsOverlay.show(this.baseStats, this.baseTotal); + + this.blockInput = false; + this.blockInputOverlay = true; + + return true; + }); + success = true; + }); + } + break; + + case MenuOptions.LEVEL_MOVES: + + if (!isCaught || !isFormCaught) { + error = true; + } else { + + this.blockInput = true; + + ui.setMode(Mode.POKEDEX_PAGE, "refresh").then(() => { + ui.showText(i18next.t("pokedexUiHandler:showLevelMoves"), null, () => { + + this.moveInfoOverlay.show(allMoves[this.levelMoves[0][1]]); + + ui.setModeWithoutClear(Mode.OPTION_SELECT, { + options: this.levelMoves.map(m => { + const levelNumber = m[0] > 0 ? String(m[0]) : ""; + const option: OptionSelectItem = { + label: levelNumber.padEnd(4, " ") + allMoves[m[1]].name, + handler: () => { + return false; + }, + onHover: () => { + this.moveInfoOverlay.show(allMoves[m[1]]); + if (m[0] === 0) { + this.showText(i18next.t("pokedexUiHandler:onlyEvolutionMove")); + } else if (m[0] === -1) { + this.showText(i18next.t("pokedexUiHandler:onlyRecallMove")); + } else if (m[0] <= 5) { + this.showText(i18next.t("pokedexUiHandler:onStarterSelectMove")); + } else { + this.showText(i18next.t("pokedexUiHandler:byLevelUpMove")); + } + }, + }; + return option; + }).concat({ + label: i18next.t("menu:cancel"), + handler: () => { + this.moveInfoOverlay.clear(); + this.clearText(); + ui.setMode(Mode.POKEDEX_PAGE, "refresh"); + return true; + }, + onHover: () => { + this.moveInfoOverlay.clear(); + }, + }), + supportHover: true, + maxOptions: 8, + yOffset: 19 + }); + + this.blockInput = false; + }); + }); + success = true; + } + break; + + case MenuOptions.EGG_MOVES: + + + if (!isCaught || !isFormCaught) { + error = true; + } else { + + this.blockInput = true; + + ui.setMode(Mode.POKEDEX_PAGE, "refresh").then(() => { + + if (this.eggMoves.length === 0) { + ui.showText(i18next.t("pokedexUiHandler:noEggMoves")); + this.blockInput = false; + return true; + } + + ui.showText(i18next.t("pokedexUiHandler:showEggMoves"), null, () => { + + this.moveInfoOverlay.show(allMoves[this.eggMoves[0]]); + + ui.setModeWithoutClear(Mode.OPTION_SELECT, { + options: [ + { + label: i18next.t("pokedexUiHandler:common"), + skip: true, + style: TextStyle.MONEY_WINDOW, + handler: () => false, // Non-selectable, but handler is required + onHover: () => this.moveInfoOverlay.clear() // No hover behavior for titles + }, + ...this.eggMoves.slice(0, 3).map((m, i) => ({ + label: allMoves[m].name, + style: this.hasEggMoves[i] ? TextStyle.SETTINGS_VALUE : TextStyle.SHADOW_TEXT, + handler: () => false, + onHover: () => this.moveInfoOverlay.show(allMoves[m]) + })), + { + label: i18next.t("pokedexUiHandler:rare"), + skip: true, + style: TextStyle.MONEY_WINDOW, + handler: () => false, + onHover: () => this.moveInfoOverlay.clear() + }, + { + label: allMoves[this.eggMoves[3]].name, + style: this.hasEggMoves[3] ? TextStyle.SETTINGS_VALUE : TextStyle.SHADOW_TEXT, + handler: () => false, + onHover: () => this.moveInfoOverlay.show(allMoves[this.eggMoves[3]]) + }, + { + label: i18next.t("menu:cancel"), + handler: () => { + this.moveInfoOverlay.clear(); + this.clearText(); + ui.setMode(Mode.POKEDEX_PAGE, "refresh"); + return true; + }, + onHover: () => this.moveInfoOverlay.clear() + } + ], + supportHover: true, + maxOptions: 8, + yOffset: 19 + }); + + this.blockInput = false; + }); + }); + success = true; + } + break; + + case MenuOptions.TM_MOVES: + + if (!isCaught || !isFormCaught) { + error = true; + } else if (this.tmMoves.length < 1) { + ui.showText(i18next.t("pokedexUiHandler:noTmMoves")); + error = true; + } else { + this.blockInput = true; + + ui.setMode(Mode.POKEDEX_PAGE, "refresh").then(() => { + ui.showText(i18next.t("pokedexUiHandler:showTmMoves"), null, () => { + + this.moveInfoOverlay.show(allMoves[this.tmMoves[0]]); + + ui.setModeWithoutClear(Mode.OPTION_SELECT, { + options: this.tmMoves.map(m => { + const option: OptionSelectItem = { + label: allMoves[m].name, + handler: () => { + return false; + }, + onHover: () => { + this.moveInfoOverlay.show(allMoves[m]); + }, + }; + return option; + }).concat({ + label: i18next.t("menu:cancel"), + handler: () => { + this.moveInfoOverlay.clear(); + this.clearText(); + ui.setMode(Mode.POKEDEX_PAGE, "refresh"); + return true; + }, + onHover: () => { + this.moveInfoOverlay.clear(); + }, + }), + supportHover: true, + maxOptions: 8, + yOffset: 19 + }); + + this.blockInput = false; + }); + }); + success = true; + } + break; + + case MenuOptions.ABILITIES: + + if (!isCaught || !isFormCaught) { + error = true; + } else { + + this.blockInput = true; + + ui.setMode(Mode.POKEDEX_PAGE, "refresh").then(() => { + + ui.showText(i18next.t("pokedexUiHandler:showAbilities"), null, () => { + + this.infoOverlay.show(allAbilities[this.ability1].description); + + const options: any[] = []; + + if (this.ability1) { + options.push({ + label: allAbilities[this.ability1].name, + style: this.hasAbilities[0] > 0 ? TextStyle.SETTINGS_VALUE : TextStyle.SHADOW_TEXT, + handler: () => false, + onHover: () => this.infoOverlay.show(allAbilities[this.ability1].description) + }); + } + if (this.ability2) { + const ability = allAbilities[this.ability2]; + options.push({ + label: ability?.name, + style: this.hasAbilities[1] > 0 ? TextStyle.SETTINGS_VALUE : TextStyle.SHADOW_TEXT, + handler: () => false, + onHover: () => this.infoOverlay.show(ability?.description) + }); + } + + if (this.abilityHidden) { + options.push({ + label: i18next.t("pokedexUiHandler:hidden"), + skip: true, + style: TextStyle.MONEY_WINDOW, + handler: () => false, + onHover: () => this.infoOverlay.clear() + }); + const ability = allAbilities[this.abilityHidden]; + options.push({ + label: allAbilities[this.abilityHidden].name, + style: this.hasAbilities[2] > 0 ? TextStyle.SETTINGS_VALUE : TextStyle.SHADOW_TEXT, + handler: () => false, + onHover: () => this.infoOverlay.show(ability?.description) + }); + } + + if (this.passive) { + options.push({ + label: i18next.t("pokedexUiHandler:passive"), + skip: true, + style: TextStyle.MONEY_WINDOW, + handler: () => false, + onHover: () => this.infoOverlay.clear() + }); + options.push({ + label: allAbilities[this.passive].name, + style: this.hasPassive ? TextStyle.SETTINGS_VALUE : TextStyle.SHADOW_TEXT, + handler: () => false, + onHover: () => this.infoOverlay.show(allAbilities[this.passive].description) + }); + } + + options.push({ + label: i18next.t("menu:cancel"), + handler: () => { + this.infoOverlay.clear(); + this.clearText(); + ui.setMode(Mode.POKEDEX_PAGE, "refresh"); + return true; + }, + onHover: () => this.infoOverlay.clear() + }); + + ui.setModeWithoutClear(Mode.OPTION_SELECT, { + options: options, + supportHover: true, + maxOptions: 8, + yOffset: 19 + }); + + this.blockInput = false; + }); + }); + success = true; + } + break; + + case MenuOptions.BIOMES: + + if (!(isCaught || this.speciesStarterDexEntry?.seenAttr)) { + error = true; + } else { + this.blockInput = true; + + ui.setMode(Mode.POKEDEX_PAGE, "refresh").then(() => { + + if ((!this.biomes || this.biomes?.length === 0) && + (!this.preBiomes || this.preBiomes?.length === 0)) { + ui.showText(i18next.t("pokedexUiHandler:noBiomes")); + ui.playError(); + this.blockInput = false; + return true; + } + + const options: any[] = []; + + ui.showText(i18next.t("pokedexUiHandler:showBiomes"), null, () => { + + this.biomes.map(b => { + options.push({ + label: i18next.t(`biome:${Biome[b.biome].toUpperCase()}`) + " - " + + i18next.t(`biome:${BiomePoolTier[b.tier].toUpperCase()}`) + + ( b.tod.length === 1 && b.tod[0] === -1 ? "" : " (" + b.tod.map(tod => i18next.t(`biome:${TimeOfDay[tod].toUpperCase()}`)).join(", ") + ")"), + handler: () => false + }); + }); + + + if (this.preBiomes.length > 0) { + options.push({ + label: i18next.t("pokedexUiHandler:preBiomes"), + skip: true, + handler: () => false + }); + this.preBiomes.map(b => { + options.push({ + label: i18next.t(`biome:${Biome[b.biome].toUpperCase()}`) + " - " + + i18next.t(`biome:${BiomePoolTier[b.tier].toUpperCase()}`) + + ( b.tod.length === 1 && b.tod[0] === -1 ? "" : " (" + b.tod.map(tod => i18next.t(`biome:${TimeOfDay[tod].toUpperCase()}`)).join(", ") + ")"), + handler: () => false + }); + }); + } + + options.push({ + label: i18next.t("menu:cancel"), + handler: () => { + this.moveInfoOverlay.clear(); + this.clearText(); + ui.setMode(Mode.POKEDEX_PAGE, "refresh"); + return true; + }, + onHover: () => this.moveInfoOverlay.clear() + }); + + ui.setModeWithoutClear(Mode.OPTION_SELECT, { + options: options, + supportHover: true, + maxOptions: 8, + yOffset: 19 + }); + + this.blockInput = false; + }); + }); + success = true; + } + break; + + case MenuOptions.EVOLUTIONS: + + if (!isCaught || !isFormCaught) { + error = true; + } else { + + this.blockInput = true; + + ui.setMode(Mode.POKEDEX_PAGE, "refresh").then(() => { + + const options: any[] = []; + + if ((!this.prevolutions || this.prevolutions?.length === 0) && + (!this.evolutions || this.evolutions?.length === 0) && + (!this.battleForms || this.battleForms?.length === 0)) { + ui.showText(i18next.t("pokedexUiHandler:noEvolutions")); + ui.playError(); + this.blockInput = false; + return true; + } + + ui.showText(i18next.t("pokedexUiHandler:showEvolutions"), null, () => { + + if (this.prevolutions?.length > 0) { + options.push({ + label: i18next.t("pokedexUiHandler:prevolutions"), + style: TextStyle.MONEY_WINDOW, + skip: true, + handler: () => false + }); + this.prevolutions.map(pre => { + const preSpecies = allSpecies.find(species => species.speciesId === pokemonPrevolutions[this.species.speciesId]); + const preFormIndex: number = preSpecies?.forms.find(f => f.formKey === pre.preFormKey)?.formIndex ?? 0; + + const conditionText: string = pre.description; + + options.push({ + label: pre.preFormKey ? + (preSpecies ?? this.species).getFormNameToDisplay(preFormIndex, true) : + (preSpecies ?? this.species).getExpandedSpeciesName(), + handler: () => { + const newSpecies = allSpecies.find(species => species.speciesId === pokemonPrevolutions[pre.speciesId]); + // Attempts to find the formIndex of the prevolved species + const newFormKey = pre.preFormKey ? pre.preFormKey : (this.species.forms.length > 0 ? this.species.forms[this.formIndex].formKey : ""); + const matchingForm = newSpecies?.forms.find(form => form.formKey === newFormKey); + const newFormIndex = matchingForm ? matchingForm.formIndex : 0; + this.starterAttributes.form = newFormIndex; + this.savedStarterAttributes.form = newFormIndex; + this.moveInfoOverlay.clear(); + this.clearText(); + ui.setMode(Mode.POKEDEX_PAGE, newSpecies, newFormIndex, this.savedStarterAttributes); + return true; + }, + onHover: () => this.showText(conditionText) + }); + }); + } + + if (this.evolutions.length > 0) { + options.push({ + label: i18next.t("pokedexUiHandler:evolutions"), + style: TextStyle.MONEY_WINDOW, + skip: true, + handler: () => false + }); + this.evolutions.map(evo => { + const evoSpecies = allSpecies.find(species => species.speciesId === evo.speciesId); + const isCaughtEvo = this.isCaught(evoSpecies) ? true : false; + // Attempts to find the formIndex of the evolved species + const newFormKey = evo.evoFormKey ? evo.evoFormKey : (this.species.forms.length > 0 ? this.species.forms[this.formIndex].formKey : ""); + const matchingForm = evoSpecies?.forms.find(form => form.formKey === newFormKey); + const newFormIndex = matchingForm ? matchingForm.formIndex : 0; + const isFormCaughtEvo = this.isFormCaught(evoSpecies, newFormIndex); + + const conditionText: string = evo.description; + + options.push({ + label: evo.evoFormKey ? + (evoSpecies ?? this.species).getFormNameToDisplay(newFormIndex, true) : + (evoSpecies ?? this.species).getExpandedSpeciesName(), + style: isCaughtEvo && isFormCaughtEvo ? TextStyle.WINDOW : TextStyle.SHADOW_TEXT, + handler: () => { + this.starterAttributes.form = newFormIndex; + this.savedStarterAttributes.form = newFormIndex; + this.moveInfoOverlay.clear(); + this.clearText(); + ui.setMode(Mode.POKEDEX_PAGE, evoSpecies, newFormIndex, this.savedStarterAttributes); + return true; + }, + onHover: () => this.showText(conditionText) + }); + }); + } + + if (this.battleForms.length > 0) { + options.push({ + label: i18next.t("pokedexUiHandler:forms"), + style: TextStyle.MONEY_WINDOW, + skip: true, + handler: () => false + }); + this.battleForms.map(bf => { + const matchingForm = this.species?.forms.find(form => form.formKey === bf.formKey); + const newFormIndex = matchingForm ? matchingForm.formIndex : 0; + + let conditionText:string = ""; + if (bf.trigger) { + conditionText = bf.trigger.description; + } else { + conditionText = ""; + } + let label: string = this.species.getFormNameToDisplay(newFormIndex); + if (label === "") { + label = this.species.name; + } + const isFormCaught = this.isFormCaught(this.species, newFormIndex); + + if (conditionText) { + options.push({ + label: label, + style: isFormCaught ? TextStyle.WINDOW : TextStyle.SHADOW_TEXT, + handler: () => { + const newSpecies = this.species; + const newFormIndex = this.species.forms.find(f => f.formKey === bf.formKey)?.formIndex; + this.starterAttributes.form = newFormIndex; + this.savedStarterAttributes.form = newFormIndex; + this.moveInfoOverlay.clear(); + this.clearText(); + ui.setMode(Mode.POKEDEX_PAGE, newSpecies, newFormIndex, this.savedStarterAttributes, this.filteredIndices); + return true; + }, + onHover: () => this.showText(conditionText) + }); + } + }); + } + + options.push({ + label: i18next.t("menu:cancel"), + handler: () => { + this.moveInfoOverlay.clear(); + this.clearText(); + ui.setMode(Mode.POKEDEX_PAGE, "refresh"); + return true; + }, + onHover: () => this.moveInfoOverlay.clear() + }); + + ui.setModeWithoutClear(Mode.OPTION_SELECT, { + options: options, + supportHover: true, + maxOptions: 8, + yOffset: 19 + }); + + this.blockInput = false; + }); + }); + success = true; + } + break; + + case MenuOptions.TOGGLE_IVS: + + if (!isCaught || !isFormCaught) { + error = true; + } else { + this.toggleStatsMode(); + ui.setMode(Mode.POKEDEX_PAGE, "refresh"); + success = true; + } + break; + + case MenuOptions.NATURES: + + if (!isCaught || !isFormCaught) { + error = true; + } else { + this.blockInput = true; + ui.setMode(Mode.POKEDEX_PAGE, "refresh").then(() => { + ui.showText(i18next.t("pokedexUiHandler:showNature"), null, () => { + const natures = globalScene.gameData.getNaturesForAttr(this.speciesStarterDexEntry?.natureAttr); + ui.setModeWithoutClear(Mode.OPTION_SELECT, { + options: natures.map((n: Nature, i: number) => { + const option: OptionSelectItem = { + label: getNatureName(n, true, true, true, globalScene.uiTheme), + handler: () => { + return false; + } + }; + return option; + }).concat({ + label: i18next.t("menu:cancel"), + handler: () => { + this.clearText(); + ui.setMode(Mode.POKEDEX_PAGE, "refresh"); + this.blockInput = false; + return true; + } + }), + maxOptions: 8, + yOffset: 19 + }); + }); + }); + success = true; + } + break; + } + + } else { + const props = globalScene.gameData.getSpeciesDexAttrProps(this.species, this.getCurrentDexProps(this.species.speciesId)); + switch (button) { + case Button.CYCLE_SHINY: + if (this.canCycleShiny) { + + if (!starterAttributes.shiny) { + // Change to shiny, we need to get the proper default variant + const newVariant = starterAttributes.variant ? starterAttributes.variant as Variant : 0; + this.setSpeciesDetails(this.species, { shiny: true, variant: newVariant }); + + globalScene.playSound("se/sparkle"); + + starterAttributes.shiny = true; + this.savedStarterAttributes.shiny = starterAttributes.shiny; + } else { + let newVariant = props.variant; + do { + newVariant = (newVariant + 1) % 3; + if (newVariant === 0) { + if (this.isCaught() & DexAttr.DEFAULT_VARIANT) { + break; + } + } else if (newVariant === 1) { + if (this.isCaught() & DexAttr.VARIANT_2) { + break; + } + } else { + if (this.isCaught() & DexAttr.VARIANT_3) { + break; + } + } + } while (newVariant !== props.variant); + + starterAttributes.variant = newVariant; // store the selected variant + this.savedStarterAttributes.variant = starterAttributes.variant; + if ((this.isCaught() & DexAttr.NON_SHINY) && (newVariant <= props.variant)) { + this.setSpeciesDetails(this.species, { shiny: false, variant: 0 }); + success = true; + starterAttributes.shiny = false; + this.savedStarterAttributes.shiny = starterAttributes.shiny; + } else { + this.setSpeciesDetails(this.species, { variant: newVariant as Variant }); + success = true; + } + } + } + break; + case Button.CYCLE_FORM: + if (this.canCycleForm) { + const formCount = this.species.forms.length; + let newFormIndex = this.formIndex; + do { + newFormIndex = (newFormIndex + 1) % formCount; + if (this.species.forms[newFormIndex].isStarterSelectable || globalScene.dexForDevs) { // TODO: are those bangs correct? + break; + } + } while (newFormIndex !== props.formIndex || this.species.forms[newFormIndex].isUnobtainable); + starterAttributes.form = newFormIndex; // store the selected form + this.savedStarterAttributes.form = starterAttributes.form; + this.formIndex = newFormIndex; + // Some forms are tied to the gender and should change accordingly + let newFemale = props.female; + if (this.isFormGender) { + newFemale = !props.female; + } + starterAttributes.female = newFemale; + this.savedStarterAttributes.female = starterAttributes.female; + this.starterSetup(); + this.setSpeciesDetails(this.species, { formIndex: newFormIndex, female: newFemale }); + success = this.setCursor(this.cursor); + } + break; + case Button.CYCLE_GENDER: + if (this.canCycleGender) { + starterAttributes.female = !props.female; + this.savedStarterAttributes.female = starterAttributes.female; + let newFormIndex = this.formIndex; + // Some forms are tied to the gender and should change accordingly + if (this.isFormGender) { + newFormIndex = this.formIndex === 0 ? 1 : 0; + } + starterAttributes.form = newFormIndex; // store the selected form + this.savedStarterAttributes.form = starterAttributes.form; + this.formIndex = newFormIndex; + this.starterSetup(); + this.setSpeciesDetails(this.species, { female: !props.female, formIndex: newFormIndex }); + success = true; + } + break; + case Button.STATS: + if (!isCaught || !isFormCaught || !this.canUseCandies) { + error = true; + } else { + const ui = this.getUi(); + ui.showText(""); + const options: any[] = []; // TODO: add proper type + + const passiveAttr = starterData.passiveAttr; + const candyCount = starterData.candyCount; + + if (!(passiveAttr & PassiveAttr.UNLOCKED)) { + const passiveCost = getPassiveCandyCount(speciesStarterCosts[this.starterId]); + options.push({ + label: `x${passiveCost} ${i18next.t("pokedexUiHandler:unlockPassive")} (${allAbilities[this.passive].name})`, + handler: () => { + if (Overrides.FREE_CANDY_UPGRADE_OVERRIDE || candyCount >= passiveCost) { + starterData.passiveAttr |= PassiveAttr.UNLOCKED | PassiveAttr.ENABLED; + if (!Overrides.FREE_CANDY_UPGRADE_OVERRIDE) { + starterData.candyCount -= passiveCost; + } + this.pokemonCandyCountText.setText(`x${starterData.candyCount}`); + globalScene.gameData.saveSystem().then(success => { + if (!success) { + return globalScene.reset(true); + } + }); + this.setSpeciesDetails(this.species); + globalScene.playSound("se/buy"); + ui.setMode(Mode.POKEDEX_PAGE, "refresh"); + + return true; + } + return false; + }, + style: this.isPassiveAvailable() ? TextStyle.WINDOW : TextStyle.SHADOW_TEXT, + item: "candy", + itemArgs: this.isPassiveAvailable() ? starterColors[this.starterId] : [ "808080", "808080" ] + }); + } + + // Reduce cost option + const valueReduction = starterData.valueReduction; + if (valueReduction < valueReductionMax) { + const reductionCost = getValueReductionCandyCounts(speciesStarterCosts[this.starterId])[valueReduction]; + options.push({ + label: `x${reductionCost} ${i18next.t("pokedexUiHandler:reduceCost")}`, + handler: () => { + if (Overrides.FREE_CANDY_UPGRADE_OVERRIDE || candyCount >= reductionCost) { + starterData.valueReduction++; + if (!Overrides.FREE_CANDY_UPGRADE_OVERRIDE) { + starterData.candyCount -= reductionCost; + } + this.pokemonCandyCountText.setText(`x${starterData.candyCount}`); + globalScene.gameData.saveSystem().then(success => { + if (!success) { + return globalScene.reset(true); + } + }); + ui.setMode(Mode.POKEDEX_PAGE, "refresh"); + globalScene.playSound("se/buy"); + + return true; + } + return false; + }, + style: this.isValueReductionAvailable() ? TextStyle.WINDOW : TextStyle.SHADOW_TEXT, + item: "candy", + itemArgs: this.isValueReductionAvailable() ? starterColors[this.starterId] : [ "808080", "808080" ] + }); + } + + // Same species egg menu option. + const sameSpeciesEggCost = getSameSpeciesEggCandyCounts(speciesStarterCosts[this.starterId]); + options.push({ + label: `x${sameSpeciesEggCost} ${i18next.t("pokedexUiHandler:sameSpeciesEgg")}`, + handler: () => { + if (Overrides.FREE_CANDY_UPGRADE_OVERRIDE || candyCount >= sameSpeciesEggCost) { + if (globalScene.gameData.eggs.length >= 99 && !Overrides.UNLIMITED_EGG_COUNT_OVERRIDE) { + // Egg list full, show error message at the top of the screen and abort + this.showText(i18next.t("egg:tooManyEggs"), undefined, () => this.showText("", 0, () => this.tutorialActive = false), 2000, false, undefined, true); + return false; + } + if (!Overrides.FREE_CANDY_UPGRADE_OVERRIDE) { + starterData.candyCount -= sameSpeciesEggCost; + } + this.pokemonCandyCountText.setText(`x${starterData.candyCount}`); + + const egg = new Egg({ scene: globalScene, species: this.starterId, sourceType: EggSourceType.SAME_SPECIES_EGG }); + egg.addEggToGameData(); + + globalScene.gameData.saveSystem().then(success => { + if (!success) { + return globalScene.reset(true); + } + }); + ui.setMode(Mode.POKEDEX_PAGE, "refresh"); + globalScene.playSound("se/buy"); + + return true; + } + return false; + }, + style: this.isSameSpeciesEggAvailable() ? TextStyle.WINDOW : TextStyle.SHADOW_TEXT, + item: "candy", + itemArgs: this.isSameSpeciesEggAvailable() ? starterColors[this.starterId] : [ "808080", "808080" ] + }); + options.push({ + label: i18next.t("menu:cancel"), + handler: () => { + ui.setMode(Mode.POKEDEX_PAGE, "refresh"); + return true; + } + }); + ui.setModeWithoutClear(Mode.OPTION_SELECT, { + options: options, + yOffset: 47 + }); + success = true; + } + break; + case Button.CYCLE_ABILITY: + this.showBackSprite = !this.showBackSprite; + if (this.showBackSprite) { + this.showBackSpriteLabel.setText(i18next.t("pokedexUiHandler:showFrontSprite")); + } else { + this.showBackSpriteLabel.setText(i18next.t("pokedexUiHandler:showBackSprite")); + } + this.setSpeciesDetails(this.species, {}, true); + success = true; + break; + case Button.UP: + if (this.cursor) { + success = this.setCursor(this.cursor - 1); + } else { + success = this.setCursor(this.menuOptions.length - 1); + } + break; + case Button.DOWN: + if (this.cursor + 1 < this.menuOptions.length) { + success = this.setCursor(this.cursor + 1); + } else { + success = this.setCursor(0); + } + break; + case Button.LEFT: + this.blockInput = true; + ui.setModeWithoutClear(Mode.OPTION_SELECT).then(() => { + let newSpecies: PokemonSpecies; + if (this.filteredIndices) { + const index = this.filteredIndices.findIndex(id => id === this.species.speciesId); + const newIndex = index <= 0 ? this.filteredIndices.length - 1 : index - 1; + newSpecies = getPokemonSpecies(this.filteredIndices[newIndex]); + } else { + const index = allSpecies.findIndex(species => species.speciesId === this.species.speciesId); + const newIndex = index <= 0 ? allSpecies.length - 1 : index - 1; + newSpecies = allSpecies[newIndex]; + } + const matchingForm = newSpecies?.forms.find(form => form.formKey === this.species?.forms[this.formIndex]?.formKey); + const newFormIndex = matchingForm ? matchingForm.formIndex : 0; + this.starterAttributes.form = newFormIndex; + this.savedStarterAttributes.form = newFormIndex; + this.moveInfoOverlay.clear(); + this.clearText(); + ui.setModeForceTransition(Mode.POKEDEX_PAGE, newSpecies, newFormIndex, this.savedStarterAttributes, this.filteredIndices); + }); + this.blockInput = false; + break; + case Button.RIGHT: + ui.setModeWithoutClear(Mode.OPTION_SELECT).then(() => { + let newSpecies: PokemonSpecies; + if (this.filteredIndices) { + const index = this.filteredIndices.findIndex(id => id === this.species.speciesId); + const newIndex = index >= this.filteredIndices.length - 1 ? 0 : index + 1; + newSpecies = getPokemonSpecies(this.filteredIndices[newIndex]); + } else { + const index = allSpecies.findIndex(species => species.speciesId === this.species.speciesId); + const newIndex = index >= allSpecies.length - 1 ? 0 : index + 1; + newSpecies = allSpecies[newIndex]; + } + const matchingForm = newSpecies?.forms.find(form => form.formKey === this.species?.forms[this.formIndex]?.formKey); + const newFormIndex = matchingForm ? matchingForm.formIndex : 0; + this.starterAttributes.form = newFormIndex; + this.savedStarterAttributes.form = newFormIndex; + this.moveInfoOverlay.clear(); + this.clearText(); + ui.setModeForceTransition(Mode.POKEDEX_PAGE, newSpecies, newFormIndex, this.savedStarterAttributes, this.filteredIndices); + }); + break; + } + } + } + + if (success) { + ui.playSelect(); + } else if (error) { + ui.playError(); + } + + return success || error; + } + + updateButtonIcon(iconSetting, gamepadType, iconElement, controlLabel): void { + let iconPath; + // touch controls cannot be rebound as is, and are just emulating a keyboard event. + // Additionally, since keyboard controls can be rebound (and will be displayed when they are), we need to have special handling for the touch controls + if (gamepadType === "touch") { + gamepadType = "keyboard"; + switch (iconSetting) { + case SettingKeyboard.Button_Cycle_Shiny: + iconPath = "R.png"; + break; + case SettingKeyboard.Button_Cycle_Form: + iconPath = "F.png"; + break; + case SettingKeyboard.Button_Cycle_Gender: + iconPath = "G.png"; + break; + case SettingKeyboard.Button_Cycle_Ability: + iconPath = "E.png"; + break; + default: + break; + } + } else { + iconPath = globalScene.inputController?.getIconForLatestInputRecorded(iconSetting); + } + iconElement.setTexture(gamepadType, iconPath); + iconElement.setPosition(this.instructionRowX, this.instructionRowY); + controlLabel.setPosition(this.instructionRowX + this.instructionRowTextOffset, this.instructionRowY); + iconElement.setVisible(true); + controlLabel.setVisible(true); + this.instructionsContainer.add([ iconElement, controlLabel ]); + this.instructionRowY += 8; + if (this.instructionRowY >= 24) { + this.instructionRowY = 8; + this.instructionRowX += 50; + } + } + + updateInstructions(): void { + this.instructionRowX = 0; + this.instructionRowY = 0; + this.filterInstructionRowX = 0; + this.filterInstructionRowY = 0; + this.hideInstructions(); + this.instructionsContainer.removeAll(); + this.filterInstructionsContainer.removeAll(); + let gamepadType; + if (globalScene.inputMethod === "gamepad") { + gamepadType = globalScene.inputController.getConfig(globalScene.inputController.selectedDevice[Device.GAMEPAD]).padType; + } else { + gamepadType = globalScene.inputMethod; + } + + if (!gamepadType) { + return; + } + + const isFormCaught = this.isFormCaught(); + + if (this.isCaught()) { + if (isFormCaught) { + if (this.canUseCandies) { + this.updateButtonIcon(SettingKeyboard.Button_Stats, gamepadType, this.candyUpgradeIconElement, this.candyUpgradeLabel); + } + if (this.canCycleShiny) { + this.updateButtonIcon(SettingKeyboard.Button_Cycle_Shiny, gamepadType, this.shinyIconElement, this.shinyLabel); + } + if (this.canCycleGender) { + this.updateButtonIcon(SettingKeyboard.Button_Cycle_Gender, gamepadType, this.genderIconElement, this.genderLabel); + } + } else { + // Making space for "Uncaught" text + this.instructionRowY += 8; + } + if (this.canCycleForm) { + this.updateButtonIcon(SettingKeyboard.Button_Cycle_Form, gamepadType, this.formIconElement, this.formLabel); + } + } + } + + getValueLimit(): number { + const valueLimit = new NumberHolder(0); + switch (globalScene.gameMode.modeId) { + case GameModes.ENDLESS: + case GameModes.SPLICED_ENDLESS: + valueLimit.value = 15; + break; + default: + valueLimit.value = 10; + } + + Challenge.applyChallenges(globalScene.gameMode, Challenge.ChallengeType.STARTER_POINTS, valueLimit); + + return valueLimit.value; + } + + + setCursor(cursor: number): boolean { + const ret = super.setCursor(cursor); + + if (!this.cursorObj) { + this.cursorObj = globalScene.add.image(0, 0, "cursor"); + this.cursorObj.setOrigin(0, 0); + this.menuContainer.add(this.cursorObj); + } + + this.cursorObj.setScale(this.scale * 6); + this.cursorObj.setPositionRelative(this.menuBg, 7, 6 + (18 + this.cursor * 96) * this.scale); + + const ui = this.getUi(); + + const isFormCaught = this.isFormCaught(); + + if ((this.isCaught() && isFormCaught) || (this.speciesStarterDexEntry?.seenAttr && cursor === 5)) { + ui.showText(this.menuDescriptions[cursor]); + } else { + ui.showText(""); + } + + return ret; + } + + getFriendship(speciesId: number) { + let currentFriendship = globalScene.gameData.starterData[this.starterId].friendship; + if (!currentFriendship || currentFriendship === undefined) { + currentFriendship = 0; + } + + const friendshipCap = getStarterValueFriendshipCap(speciesStarterCosts[this.starterId]); + + return { currentFriendship, friendshipCap }; + } + + /** + * Determines if a passive upgrade is available for the current species + * @returns true if the user has enough candies and a passive has not been unlocked already + */ + isPassiveAvailable(): boolean { + // Get this species ID's starter data + const starterData = globalScene.gameData.starterData[this.starterId]; + + return starterData.candyCount >= getPassiveCandyCount(speciesStarterCosts[this.starterId]) + && !(starterData.passiveAttr & PassiveAttr.UNLOCKED); + } + + /** + * Determines if a value reduction upgrade is available for the current species + * @returns true if the user has enough candies and all value reductions have not been unlocked already + */ + isValueReductionAvailable(): boolean { + // Get this species ID's starter data + const starterData = globalScene.gameData.starterData[this.starterId]; + + return starterData.candyCount >= getValueReductionCandyCounts(speciesStarterCosts[this.starterId])[starterData.valueReduction] + && starterData.valueReduction < valueReductionMax; + } + + /** + * Determines if an same species egg can be bought for the current species + * @returns true if the user has enough candies + */ + isSameSpeciesEggAvailable(): boolean { + // Get this species ID's starter data + const starterData = globalScene.gameData.starterData[this.starterId]; + + return starterData.candyCount >= getSameSpeciesEggCandyCounts(speciesStarterCosts[this.starterId]); + } + + setSpecies() { + const species = this.species; + const starterAttributes : StarterAttributes | null = species ? { ...this.starterAttributes } : null; + + if (!species && globalScene.ui.getTooltip().visible) { + globalScene.ui.hideTooltip(); + } + + if (this.statsMode) { + if (this.isCaught()) { + this.statsContainer.setVisible(true); + this.showStats(); + } else { + this.statsContainer.setVisible(false); + //@ts-ignore + this.statsContainer.updateIvs(null); // TODO: resolve ts-ignore. what. how? huh? + } + } + + if (species && (this.speciesStarterDexEntry?.seenAttr || this.isCaught())) { + this.pokemonNumberText.setText(padInt(species.speciesId, 4)); + + if (this.isCaught()) { + + const defaultDexAttr = this.getCurrentDexProps(species.speciesId); + // Set default attributes if for some reason starterAttributes does not exist or attributes missing + const props: StarterAttributes = globalScene.gameData.getSpeciesDexAttrProps(species, defaultDexAttr); + if (starterAttributes?.variant && !isNaN(starterAttributes.variant)) { + if (props.shiny) { + props.variant = starterAttributes.variant as Variant; + } + } + props.form = starterAttributes?.form ?? props.form; + props.female = starterAttributes?.female ?? props.female; + + this.setSpeciesDetails(species, { + shiny: props.shiny, + formIndex: props.form, + female: props.female, + variant: props.variant ?? 0, + }); + } else { + this.pokemonGrowthRateText.setText(""); + this.pokemonGrowthRateLabelText.setVisible(false); + this.type1Icon.setVisible(true); + this.type2Icon.setVisible(true); + this.pokemonLuckLabelText.setVisible(false); + this.pokemonLuckText.setVisible(false); + for (const icon of this.pokemonShinyIcons) { + icon.setVisible(false); + } + this.pokemonUncaughtText.setVisible(true); + this.pokemonCaughtHatchedContainer.setVisible(true); + this.pokemonCandyContainer.setVisible(false); + this.pokemonFormText.setVisible(false); + + const defaultDexAttr = globalScene.gameData.getSpeciesDefaultDexAttr(species, true, true); + const props = globalScene.gameData.getSpeciesDexAttrProps(species, defaultDexAttr); + + this.setSpeciesDetails(species, { + shiny: props.shiny, + formIndex: props.formIndex, + female: props.female, + variant: props.variant, + }); + this.pokemonSprite.setTint(0x808080); + } + } else { + this.pokemonNumberText.setText(species ? padInt(species.speciesId, 4) : ""); + this.pokemonNameText.setText(species ? "???" : ""); + this.pokemonGrowthRateText.setText(""); + this.pokemonGrowthRateLabelText.setVisible(false); + this.type1Icon.setVisible(false); + this.type2Icon.setVisible(false); + this.pokemonLuckLabelText.setVisible(false); + this.pokemonLuckText.setVisible(false); + for (const icon of this.pokemonShinyIcons) { + icon.setVisible(false); + } + this.pokemonUncaughtText.setVisible(!!species); + this.pokemonCaughtHatchedContainer.setVisible(false); + this.pokemonCandyContainer.setVisible(false); + this.pokemonFormText.setVisible(false); + + this.setSpeciesDetails(species!, { // TODO: is this bang correct? + shiny: false, + formIndex: 0, + female: false, + variant: 0, + }); + this.pokemonSprite.setTint(0x000000); + } + } + + setSpeciesDetails(species: PokemonSpecies, options: SpeciesDetails = {}, forceUpdate?: boolean): void { + let { shiny, formIndex, female, variant } = options; + const oldProps = species ? this.starterAttributes : null; + + // We will only update the sprite if there is a change to form, shiny/variant + // or gender for species with gender sprite differences + const shouldUpdateSprite = (species?.genderDiffs && !isNullOrUndefined(female)) + || !isNullOrUndefined(formIndex) || !isNullOrUndefined(shiny) || !isNullOrUndefined(variant) || forceUpdate; + + if (this.activeTooltip === "CANDY") { + if (this.species && this.pokemonCandyContainer.visible) { + const { currentFriendship, friendshipCap } = this.getFriendship(this.species.speciesId); + globalScene.ui.editTooltip("", `${currentFriendship}/${friendshipCap}`); + } else { + globalScene.ui.hideTooltip(); + } + } + + if (species?.forms?.find(f => f.formKey === "female")) { + if (female !== undefined) { + formIndex = female ? 1 : 0; + } else if (formIndex !== undefined) { + female = formIndex === 1; + } + } + + if (species) { + // Only assign shiny, female, and variant if they are undefined + if (shiny === undefined) { + shiny = oldProps?.shiny ?? false; + } + if (female === undefined) { + female = oldProps?.female ?? false; + } + if (variant === undefined) { + variant = oldProps?.variant ?? 0; + } + if (formIndex === undefined) { + formIndex = oldProps?.form ?? 0; + } + } + + this.pokemonSprite.setVisible(false); + + if (this.assetLoadCancelled) { + this.assetLoadCancelled.value = true; + this.assetLoadCancelled = null; + } + + if (species) { + const dexEntry = globalScene.gameData.dexData[species.speciesId]; + + const caughtAttr = this.isCaught(species); + + if (!caughtAttr) { + const props = this.starterAttributes; + + if (shiny === undefined || shiny !== props.shiny) { + shiny = props.shiny; + } + if (formIndex === undefined || formIndex !== props.form) { + formIndex = props.form; + } + if (female === undefined || female !== props.female) { + female = props.female; + } + if (variant === undefined || variant !== props.variant) { + variant = props.variant; + } + } + + const isFormCaught = this.isFormCaught(); + const isFormSeen = dexEntry ? (dexEntry.seenAttr & globalScene.gameData.getFormAttr(formIndex ?? 0)) > 0n : false; + + this.shinyOverlay.setVisible(shiny ?? false); // TODO: is false the correct default? + this.pokemonNumberText.setColor(this.getTextColor(shiny ? TextStyle.SUMMARY_GOLD : TextStyle.SUMMARY, false)); + this.pokemonNumberText.setShadowColor(this.getTextColor(shiny ? TextStyle.SUMMARY_GOLD : TextStyle.SUMMARY, true)); + + const assetLoadCancelled = new BooleanHolder(false); + this.assetLoadCancelled = assetLoadCancelled; + + if (shouldUpdateSprite) { + const back = this.showBackSprite ? true : false; + species.loadAssets(female!, formIndex, shiny, variant as Variant, true, back).then(() => { // TODO: is this bang correct? + if (assetLoadCancelled.value) { + return; + } + this.assetLoadCancelled = null; + this.speciesLoaded.set(species.speciesId, true); + this.pokemonSprite.play(species.getSpriteKey(female!, formIndex, shiny, variant, back)); // 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, back)); // TODO: is this bang correct? + this.pokemonSprite.setVisible(!this.statsMode); + }); + } else { + this.pokemonSprite.setVisible(!this.statsMode); + } + + const isNonShinyCaught = !!(caughtAttr & DexAttr.NON_SHINY); + const isShinyCaught = !!(caughtAttr & DexAttr.SHINY); + + const caughtVariants = [ DexAttr.DEFAULT_VARIANT, DexAttr.VARIANT_2, DexAttr.VARIANT_3 ].filter(v => caughtAttr & v); + this.canCycleShiny = (isNonShinyCaught && isShinyCaught) || (isShinyCaught && caughtVariants.length > 1); + + const isMaleCaught = !!(caughtAttr & DexAttr.MALE); + const isFemaleCaught = !!(caughtAttr & DexAttr.FEMALE); + this.canCycleGender = isMaleCaught && isFemaleCaught; + + // If the dev option for the dex is selected, all forms can be cycled through + this.canCycleForm = globalScene.dexForDevs ? species.forms.length > 1 : + species.forms.filter(f => f.isStarterSelectable).filter(f => f).length > 1; + + if (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)); + } else { + this.pokemonGenderText.setText(""); + } + + // Setting the name + if (isFormCaught || isFormSeen) { + this.pokemonNameText.setText(species.name); + } else { + this.pokemonNameText.setText(species ? "???" : ""); + } + + // Setting tint of the sprite + if (isFormCaught) { + this.species.loadAssets(female!, formIndex, shiny, variant as Variant, true).then(() => { + const crier = (this.species.forms && this.species.forms.length > 0) ? this.species.forms[formIndex ?? this.formIndex] : this.species; + crier.cry(); + }); + this.pokemonSprite.clearTint(); + } else if (isFormSeen) { + this.pokemonSprite.setTint(0x808080); + } else { + this.pokemonSprite.setTint(0); + } + + // Setting luck text and sparks + if (isFormCaught) { + const luck = globalScene.gameData.getDexAttrLuck(this.isCaught()); + this.pokemonLuckText.setVisible(!!luck); + this.pokemonLuckText.setText(luck.toString()); + this.pokemonLuckText.setTint(getVariantTint(Math.min(luck - 1, 2) as Variant)); + this.pokemonLuckLabelText.setVisible(this.pokemonLuckText.visible); + } else { + this.pokemonLuckText.setVisible(false); + this.pokemonLuckLabelText.setVisible(false); + } + + // Setting growth rate text + if (isFormCaught) { + let growthReadable = toReadableString(GrowthRate[species.growthRate]); + const growthAux = growthReadable.replace(" ", "_"); + 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.pokemonGrowthRateLabelText.setVisible(true); + } else { + this.pokemonGrowthRateText.setText(""); + this.pokemonGrowthRateLabelText.setVisible(false); + } + + // Caught and hatched + if (isFormCaught) { + const colorScheme = starterColors[this.starterId]; + + this.pokemonUncaughtText.setVisible(false); + this.pokemonCaughtCountText.setText(`${this.speciesStarterDexEntry?.caughtCount}`); + if (species.speciesId === Species.MANAPHY || species.speciesId === Species.PHIONE) { + this.pokemonHatchedIcon.setFrame("manaphy"); + } else { + this.pokemonHatchedIcon.setFrame(getEggTierForSpecies(species)); + } + this.pokemonHatchedCountText.setText(`${this.speciesStarterDexEntry?.hatchedCount}`); + + const defaultDexAttr = this.getCurrentDexProps(species.speciesId); + const defaultProps = globalScene.gameData.getSpeciesDexAttrProps(species, defaultDexAttr); + + const variant = defaultProps.variant; + for (let v = 0; v < 3; v++) { + const icon = this.pokemonShinyIcons[v]; + if (v < this.availableVariants) { + if (!this.unlockedVariants[v]) { + icon.setTint(0x000000); + } else if (shiny && v === variant) { + const tint = getVariantTint(v as Variant); + icon.setTint(tint); + } else { + icon.setTint(0x808080); + } + icon.setVisible(true); + } else { + icon.setVisible(false); + } + } + + this.pokemonCaughtHatchedContainer.setVisible(true); + this.pokemonCaughtHatchedContainer.setY(25); + this.pokemonCandyIcon.setTint(argbFromRgba(rgbHexToRgba(colorScheme[0]))); + this.pokemonCandyOverlayIcon.setTint(argbFromRgba(rgbHexToRgba(colorScheme[1]))); + this.pokemonCandyCountText.setText(`x${species.speciesId === Species.PIKACHU ? 0 : globalScene.gameData.starterData[this.starterId].candyCount}`); + this.pokemonCandyContainer.setVisible(true); + + if (pokemonPrevolutions.hasOwnProperty(species.speciesId)) { + this.pokemonHatchedIcon.setVisible(false); + this.pokemonHatchedCountText.setVisible(false); + this.pokemonFormText.setY(36); + } else { + this.pokemonHatchedIcon.setVisible(true); + this.pokemonHatchedCountText.setVisible(true); + this.pokemonFormText.setY(42); + + const { currentFriendship, friendshipCap } = this.getFriendship(this.species.speciesId); + 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; + }); + + } + } else { + this.pokemonUncaughtText.setVisible(true); + this.pokemonCaughtHatchedContainer.setVisible(false); + this.pokemonCandyContainer.setVisible(false); + for (const icon of this.pokemonShinyIcons) { + icon.setVisible(false); + } + } + + // Setting type icons and form text + if (isFormCaught || isFormSeen) { + const speciesForm = getPokemonSpeciesForm(species.speciesId, formIndex!); // TODO: is the bang correct? + this.setTypeIcons(speciesForm.type1, speciesForm.type2); + // TODO: change this once forms are refactored + if (normalForm.includes(species.speciesId) && !formIndex) { + this.pokemonFormText.setText(""); + } else { + this.pokemonFormText.setText(species.getFormNameToDisplay(formIndex)); + } + this.pokemonFormText.setVisible(true); + if (!isFormCaught) { + this.pokemonFormText.setY(18); + } + } else { + this.setTypeIcons(null, null); + this.pokemonFormText.setText(""); + this.pokemonFormText.setVisible(false); + } + } else { + this.shinyOverlay.setVisible(false); + this.pokemonNumberText.setColor(this.getTextColor(TextStyle.SUMMARY)); + this.pokemonNumberText.setShadowColor(this.getTextColor(TextStyle.SUMMARY, true)); + this.pokemonGenderText.setText(""); + this.setTypeIcons(null, null); + } + + this.updateInstructions(); + } + + setTypeIcons(type1: Type | null, type2: Type | null): void { + if (type1 !== null) { + this.type1Icon.setVisible(true); + this.type1Icon.setFrame(Type[type1].toLowerCase()); + } else { + this.type1Icon.setVisible(false); + } + if (type2 !== null) { + this.type2Icon.setVisible(true); + this.type2Icon.setFrame(Type[type2].toLowerCase()); + } else { + this.type2Icon.setVisible(false); + } + } + + + /** + * Creates a temporary dex attr props that will be used to display the correct shiny, variant, and form based on this.starterAttributes + * + * @param speciesId the id of the species to get props for + * @returns the dex props + */ + getCurrentDexProps(speciesId: number): bigint { + let props = 0n; + const species = allSpecies.find(sp => sp.speciesId === speciesId); + const caughtAttr = globalScene.gameData.dexData[speciesId].caughtAttr & globalScene.gameData.dexData[this.getStarterSpeciesId(speciesId)].caughtAttr & (species?.getFullUnlocksData() ?? 0n); + + /* this checks the gender of the pokemon; this works by checking a) that the starter preferences for the species exist, and if so, is it female. If so, it'll add DexAttr.FEMALE to our temp props + * It then checks b) if the caughtAttr for the pokemon is female and NOT male - this means that the ONLY gender we've gotten is female, and we need to add DexAttr.FEMALE to our temp props + * If neither of these pass, we add DexAttr.MALE to our temp props + */ + if (this.starterAttributes?.female || ((caughtAttr & DexAttr.FEMALE) > 0n && (caughtAttr & DexAttr.MALE) === 0n)) { + props += DexAttr.FEMALE; + } else { + props += DexAttr.MALE; + } + /* This part is very similar to above, but instead of for gender, it checks for shiny within starter preferences. + * If they're not there, it enables shiny state by default if any shiny was caught + */ + if (this.starterAttributes?.shiny || ((caughtAttr & DexAttr.SHINY) > 0n && this.starterAttributes?.shiny !== false)) { + props += DexAttr.SHINY; + if (this.starterAttributes?.variant !== undefined) { + props += BigInt(Math.pow(2, this.starterAttributes?.variant)) * DexAttr.DEFAULT_VARIANT; + } else { + /* This calculates the correct variant if there's no starter preferences for it. + * This gets the highest tier variant that you've caught and adds it to the temp props + */ + if ((caughtAttr & DexAttr.VARIANT_3) > 0) { + props += DexAttr.VARIANT_3; + } else if ((caughtAttr & DexAttr.VARIANT_2) > 0) { + props += DexAttr.VARIANT_2; + } else { + props += DexAttr.DEFAULT_VARIANT; + } + } + } else { + props += DexAttr.NON_SHINY; + props += DexAttr.DEFAULT_VARIANT; // we add the default variant here because non shiny versions are listed as default variant + } + if (this.starterAttributes?.form) { // this checks for the form of the pokemon + props += BigInt(Math.pow(2, this.starterAttributes?.form)) * DexAttr.DEFAULT_FORM; + } else { + // Get the first unlocked form + props += globalScene.gameData.getFormAttr(globalScene.gameData.getFormIndex(caughtAttr)); + } + + return props; + } + + toggleStatsMode(on?: boolean): void { + if (on === undefined) { + on = !this.statsMode; + } + if (on) { + this.showStats(); + this.statsMode = true; + this.pokemonSprite.setVisible(false); + } else { + this.statsMode = false; + this.statsContainer.setVisible(false); + this.pokemonSprite.setVisible(true); + //@ts-ignore + this.statsContainer.updateIvs(null); // TODO: resolve ts-ignore. !?!? + } + } + + showStats(): void { + if (!this.speciesStarterDexEntry) { + return; + } + + this.statsContainer.setVisible(true); + + this.statsContainer.updateIvs(this.speciesStarterDexEntry.ivs); + } + + clearText() { + this.starterSelectMessageBoxContainer.setVisible(false); + super.clearText(); + } + + hideInstructions(): void { + this.candyUpgradeIconElement.setVisible(false); + this.candyUpgradeLabel.setVisible(false); + this.shinyIconElement.setVisible(false); + this.shinyLabel.setVisible(false); + this.formIconElement.setVisible(false); + this.formLabel.setVisible(false); + this.genderIconElement.setVisible(false); + this.genderLabel.setVisible(false); + this.variantIconElement.setVisible(false); + this.variantLabel.setVisible(false); + } + + clear(): void { + super.clear(); + + this.cursor = -1; + this.hideInstructions(); + this.activeTooltip = undefined; + globalScene.ui.hideTooltip(); + + this.starterSelectContainer.setVisible(false); + this.blockInput = false; + + this.showBackSprite = false; + this.showBackSpriteLabel.setText(i18next.t("pokedexUiHandler:showBackSprite")); + + if (this.statsMode) { + this.toggleStatsMode(false); + } + } + + checkIconId(icon: Phaser.GameObjects.Sprite, species: PokemonSpecies, female: boolean, formIndex: number, shiny: boolean, variant: number) { + if (icon.frame.name !== species.getIconId(female, formIndex, shiny, variant)) { + 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)); + } + } +} diff --git a/src/ui/pokedex-scan-ui-handler.ts b/src/ui/pokedex-scan-ui-handler.ts new file mode 100644 index 00000000000..3920c866486 --- /dev/null +++ b/src/ui/pokedex-scan-ui-handler.ts @@ -0,0 +1,196 @@ +import type { InputFieldConfig } from "./form-modal-ui-handler"; +import { FormModalUiHandler } from "./form-modal-ui-handler"; +import type { ModalConfig } from "./modal-ui-handler"; +import type { PlayerPokemon } from "#app/field/pokemon"; +import type { OptionSelectItem } from "./abstact-option-select-ui-handler"; +import { isNullOrUndefined } from "#app/utils"; +import { Mode } from "./ui"; +import { FilterTextRow } from "./filter-text"; +import { allAbilities } from "#app/data/ability"; +import { allMoves } from "#app/data/move"; +import { allSpecies } from "#app/data/pokemon-species"; +import i18next from "i18next"; + +export default class PokedexScanUiHandler extends FormModalUiHandler { + + keys: string[]; + reducedKeys: string[]; + parallelKeys: string[]; + nameKeys: string[]; + moveKeys: string[]; + abilityKeys: string[]; + row: number; + + constructor(mode) { + super(mode); + } + + setup() { + super.setup(); + + this.nameKeys = allSpecies.map(a => a.name).filter((value, index, self) => self.indexOf(value) === index); + this.moveKeys = allMoves.map(a => a.name); + this.abilityKeys = allAbilities.map(a => a.name); + } + + getModalTitle(config?: ModalConfig): string { + return i18next.t("pokedexUiHandler:scanChooseOption"); + } + + getWidth(config?: ModalConfig): number { + return 300; + } + + getMargin(config?: ModalConfig): [number, number, number, number] { + return [ 0, 0, 48, 0 ]; + } + + getButtonLabels(config?: ModalConfig): string[] { + return [ i18next.t("pokedexUiHandler:scanSelect"), i18next.t("pokedexUiHandler:scanCancel") ]; + } + + getReadableErrorMessage(error: string): string { + const colonIndex = error?.indexOf(":"); + if (colonIndex > 0) { + error = error.slice(0, colonIndex); + } + + return super.getReadableErrorMessage(error); + } + + override getInputFieldConfigs(): InputFieldConfig[] { + switch (this.row) { + case FilterTextRow.NAME: { + return [{ label: i18next.t("pokedexUiHandler:scanLabelName") }]; + } + case FilterTextRow.MOVE_1: + case FilterTextRow.MOVE_2: { + return [{ label: i18next.t("pokedexUiHandler:scanLabelMove") }]; + } + case FilterTextRow.ABILITY_1:{ + return [{ label: i18next.t("pokedexUiHandler:scanLabelAbility") }]; + } + case FilterTextRow.ABILITY_2: { + return [{ label: i18next.t("pokedexUiHandler:scanLabelPassive") }]; + } + default: { + return [{ label: "" }]; + } + } + + } + + reduceKeys(): void { + switch (this.row) { + case FilterTextRow.NAME: { + this.reducedKeys = this.nameKeys; + break; + } + case FilterTextRow.MOVE_1: + case FilterTextRow.MOVE_2: { + this.reducedKeys = this.moveKeys; + break; + } + case FilterTextRow.ABILITY_1: + case FilterTextRow.ABILITY_2: { + this.reducedKeys = this.abilityKeys; + break; + } + default: { + this.reducedKeys = this.keys; + } + } + } + + + // args[2] is an index of FilterTextRow + show(args: any[]): boolean { + this.row = args[2]; + const ui = this.getUi(); + const hasTitle = !!this.getModalTitle(); + this.updateFields(this.getInputFieldConfigs(), hasTitle); + this.updateContainer(args[0] as ModalConfig); + const input = this.inputs[0]; + input.setMaxLength(255); + + this.reduceKeys(); + + setTimeout(() => { + input.setFocus(); // Focus after a short delay to avoid unwanted input + }, 50); + + input.on("keydown", (inputObject, evt: KeyboardEvent) => { + if ([ "escape", "space" ].some((v) => v === evt.key.toLowerCase() || v === evt.code.toLowerCase()) && ui.getMode() === Mode.AUTO_COMPLETE) { + // Delete autocomplete list and recovery focus. + inputObject.on("blur", () => inputObject.node.focus(), { once: true }); + ui.revertMode(); + } + }); + + input.on("textchange", (inputObject, evt: InputEvent) => { + // Delete autocomplete. + if (ui.getMode() === Mode.AUTO_COMPLETE) { + ui.revertMode(); + } + + let options: OptionSelectItem[] = []; + const filteredKeys = this.reducedKeys.filter((command) => command.toLowerCase().includes(inputObject.text.toLowerCase())); + if (inputObject.text !== "" && filteredKeys.length > 0) { + options = filteredKeys.slice(0).map((value) => { + return { + label: value, + handler: () => { + if (!isNullOrUndefined(evt.data) || evt.inputType?.toLowerCase() === "deletecontentbackward") { + inputObject.setText(value); + } + ui.revertMode(); + return true; + } + }; + }); + } + + if (options.length > 0) { + const modalOpts = { + options: options, + maxOptions: 5, + modalContainer: this.modalContainer + }; + ui.setOverlayMode(Mode.AUTO_COMPLETE, modalOpts); + } + + }); + + if (super.show(args)) { + const config = args[0] as ModalConfig; + this.inputs[0].resize(1150, 116); + this.inputContainers[0].list[0].width = 200; + if (args[1] && typeof (args[1] as PlayerPokemon).getNameToRender === "function") { + this.inputs[0].text = (args[1] as PlayerPokemon).getNameToRender(); + } else { + this.inputs[0].text = args[1]; + } + this.submitAction = (_) => { + if (ui.getMode() === Mode.POKEDEX_SCAN) { + this.sanitizeInputs(); + const outputName = this.reducedKeys.includes(this.inputs[0].text) ? this.inputs[0].text : ""; + const sanitizedName = btoa(unescape(encodeURIComponent(outputName))); + config.buttonActions[0](sanitizedName); + return true; + } + return false; + }; + return true; + } + return false; + } + + clear(): void { + super.clear(); + + // Clearing the labels so they don't appear again and overlap + this.formLabels.forEach(label => { + label.destroy(); + }); + } +} diff --git a/src/ui/pokedex-ui-handler.ts b/src/ui/pokedex-ui-handler.ts new file mode 100644 index 00000000000..83739ba26a8 --- /dev/null +++ b/src/ui/pokedex-ui-handler.ts @@ -0,0 +1,2183 @@ +import type { Variant } from "#app/data/variant"; +import { getVariantTint, getVariantIcon } from "#app/data/variant"; +import { argbFromRgba } from "@material/material-color-utilities"; +import i18next from "i18next"; +import { starterColors } from "#app/battle-scene"; +import { speciesEggMoves } from "#app/data/balance/egg-moves"; +import { pokemonFormLevelMoves, pokemonSpeciesLevelMoves } from "#app/data/balance/pokemon-level-moves"; +import type { PokemonForm } from "#app/data/pokemon-species"; +import type PokemonSpecies from "#app/data/pokemon-species"; +import { allSpecies, getPokemonSpeciesForm, getPokerusStarters, normalForm } from "#app/data/pokemon-species"; +import { getStarterValueFriendshipCap, speciesStarterCosts, POKERUS_STARTER_COUNT } from "#app/data/balance/starters"; +import { catchableSpecies } from "#app/data/balance/biomes"; +import { Type } from "#enums/type"; +import type { DexAttrProps, DexEntry, StarterAttributes, StarterPreferences } from "#app/system/game-data"; +import { AbilityAttr, DexAttr, StarterPrefs } from "#app/system/game-data"; +import MessageUiHandler from "#app/ui/message-ui-handler"; +import PokemonIconAnimHandler, { PokemonIconAnimMode } from "#app/ui/pokemon-icon-anim-handler"; +import { TextStyle, addTextObject } from "#app/ui/text"; +import { Mode } from "#app/ui/ui"; +import { SettingKeyboard } from "#app/system/settings/settings-keyboard"; +import { Passive as PassiveAttr } from "#enums/passive"; +import type { Species } from "#enums/species"; +import { Button } from "#enums/buttons"; +import { DropDown, DropDownLabel, DropDownOption, DropDownState, DropDownType, SortCriteria } from "#app/ui/dropdown"; +import { PokedexMonContainer } from "#app/ui/pokedex-mon-container"; +import { DropDownColumn, FilterBar } from "#app/ui/filter-bar"; +import { ScrollBar } from "#app/ui/scroll-bar"; +import { Abilities } from "#enums/abilities"; +import { getPassiveCandyCount, getValueReductionCandyCounts, getSameSpeciesEggCandyCounts } from "#app/data/balance/starters"; +import { BooleanHolder, fixedInt, getLocalizedSpriteKey, padInt, randIntRange, rgbHexToRgba } from "#app/utils"; +import type { Nature } from "#enums/nature"; +import { addWindow } from "./ui-theme"; +import type { OptionSelectConfig } from "./abstact-option-select-ui-handler"; +import { FilterText, FilterTextRow } from "./filter-text"; +import { allAbilities } from "#app/data/ability"; +import type { PassiveAbilities } from "#app/data/balance/passives"; +import { starterPassiveAbilities } from "#app/data/balance/passives"; +import { allMoves } from "#app/data/move"; +import { speciesTmMoves } from "#app/data/balance/tms"; +import { pokemonStarters } from "#app/data/balance/pokemon-evolutions"; +import { Biome } from "#enums/biome"; +import { globalScene } from "#app/global-scene"; + +interface LanguageSetting { + starterInfoTextSize: string, + instructionTextSize: string, + starterInfoXPos?: number, + starterInfoYOffset?: number +} + +const languageSettings: { [key: string]: LanguageSetting } = { + "en":{ + starterInfoTextSize: "56px", + instructionTextSize: "38px", + }, + "de":{ + starterInfoTextSize: "48px", + instructionTextSize: "35px", + starterInfoXPos: 33, + }, + "es-ES":{ + starterInfoTextSize: "56px", + instructionTextSize: "35px", + }, + "fr":{ + starterInfoTextSize: "54px", + instructionTextSize: "38px", + }, + "it":{ + starterInfoTextSize: "56px", + instructionTextSize: "38px", + }, + "pt_BR":{ + starterInfoTextSize: "47px", + instructionTextSize: "38px", + starterInfoXPos: 33, + }, + "zh":{ + starterInfoTextSize: "47px", + instructionTextSize: "38px", + starterInfoYOffset: 1, + starterInfoXPos: 24, + }, + "pt":{ + starterInfoTextSize: "48px", + instructionTextSize: "42px", + starterInfoXPos: 33, + }, + "ko":{ + starterInfoTextSize: "52px", + instructionTextSize: "38px", + }, + "ja":{ + starterInfoTextSize: "51px", + instructionTextSize: "38px", + }, + "ca-ES":{ + starterInfoTextSize: "56px", + instructionTextSize: "38px", + }, +}; + + +enum FilterTextOptions{ + NAME, + MOVE_1, + MOVE_2, + ABILITY_1, + ABILITY_2, +} + +interface ContainerData { + species: PokemonSpecies, + cost: number, + props: DexAttrProps, + eggMove1?: boolean, + eggMove2?: boolean, + tmMove1?: boolean, + tmMove2?: boolean, + passive1?: boolean, + passive2?: boolean, +} + +const valueReductionMax = 2; + +// Position of UI elements +const filterBarHeight = 17; +const speciesContainerX = 143; + +/** + * Calculates the starter position for a Pokemon of a given UI index + * @param index UI index to calculate the starter position of + * @returns An interface with an x and y property + */ +function calcStarterPosition(index: number): {x: number, y: number} { + const yOffset = 13; + const height = 17; + const x = (index % 9) * 18; + const y = yOffset + (Math.floor(index / 9)) * height; + + return { x: x, y: y }; +} + +interface SpeciesDetails { + shiny?: boolean, + formIndex?: number + female?: boolean, + variant?: Variant, + abilityIndex?: number, + natureIndex?: number, +} + +export default class PokedexUiHandler extends MessageUiHandler { + private starterSelectContainer: Phaser.GameObjects.Container; + private starterSelectScrollBar: ScrollBar; + private filterBarContainer: Phaser.GameObjects.Container; + private filterBar: FilterBar; + private pokemonContainers: PokedexMonContainer[] = []; + private filteredPokemonData: ContainerData[] = []; + private pokemonNumberText: Phaser.GameObjects.Text; + private pokemonSprite: Phaser.GameObjects.Sprite; + private pokemonNameText: Phaser.GameObjects.Text; + private pokemonFormText: Phaser.GameObjects.Text; + private type1Icon: Phaser.GameObjects.Sprite; + private type2Icon: Phaser.GameObjects.Sprite; + + private starterSelectMessageBox: Phaser.GameObjects.NineSlice; + private starterSelectMessageBoxContainer: Phaser.GameObjects.Container; + + private filterMode: boolean; + private filterBarCursor: number = 0; + private scrollCursor: number; + private oldCursor: number = -1; + + private allSpecies: PokemonSpecies[] = []; + private lastSpecies: PokemonSpecies; + private speciesLoaded: Map = new Map(); + private pokerusSpecies: PokemonSpecies[] = []; + private speciesStarterDexEntry: DexEntry | null; + + private assetLoadCancelled: BooleanHolder | null; + public cursorObj: Phaser.GameObjects.Image; + private pokerusCursorObjs: Phaser.GameObjects.Image[]; + + private iconAnimHandler: PokemonIconAnimHandler; + + private starterPreferences: StarterPreferences; + + protected blockInput: boolean = false; + + // for text filters + private readonly textPadding = 8; + private readonly defaultMessageBoxWidth = 220; + private readonly defaultWordWrapWidth = 1224; + private menuMessageBoxContainer: Phaser.GameObjects.Container; + private menuMessageBox: Phaser.GameObjects.NineSlice; + private dialogueMessageBox: Phaser.GameObjects.NineSlice; + protected manageDataConfig: OptionSelectConfig; + private filterTextOptions: FilterTextOptions[]; + protected optionSelectText: Phaser.GameObjects.Text; + protected scale: number = 0.1666666667; + private menuBg: Phaser.GameObjects.NineSlice; + + private filterTextContainer: Phaser.GameObjects.Container; + private filterText: FilterText; + private filterTextMode: boolean; + private filterTextCursor: number = 0; + + private showDecorations: boolean = false; + private goFilterIconElement1: Phaser.GameObjects.Sprite; + private goFilterIconElement2: Phaser.GameObjects.Sprite; + private goFilterLabel: Phaser.GameObjects.Text; + private toggleDecorationsIconElement: Phaser.GameObjects.Sprite; + private toggleDecorationsLabel: Phaser.GameObjects.Text; + + private formTrayContainer: Phaser.GameObjects.Container; + private trayBg: Phaser.GameObjects.NineSlice; + private trayForms: PokemonForm[]; + private trayContainers: PokedexMonContainer[] = []; + private trayNumIcons: number; + private trayRows: number; + private trayColumns: number; + private trayCursorObj: Phaser.GameObjects.Image; + private trayCursor: number = 0; + private showingTray: boolean = false; + private showFormTrayIconElement: Phaser.GameObjects.Sprite; + private showFormTrayLabel: Phaser.GameObjects.Text; + private canShowFormTray: boolean; + private filteredIndices: Species[]; + + constructor() { + super(Mode.POKEDEX); + } + + setup() { + const ui = this.getUi(); + const currentLanguage = i18next.resolvedLanguage ?? "en"; + 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.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 pokemonContainerWindow = addWindow(speciesContainerX, filterBarHeight + 1, 175, 161); + const pokemonContainerBg = globalScene.add.image(speciesContainerX + 1, filterBarHeight + 2, "starter_container_bg"); + pokemonContainerBg.setOrigin(0, 0); + this.starterSelectContainer.add(pokemonContainerBg); + this.starterSelectContainer.add(pokemonContainerWindow); + + + // Create and initialise filter text fields + this.filterTextContainer = globalScene.add.container(0, 0); + this.filterText = new FilterText(1, filterBarHeight + 2, 140, 100, this.updateStarters); + + this.filterText.addFilter(FilterTextRow.NAME, i18next.t("filterText:nameField")); + this.filterText.addFilter(FilterTextRow.MOVE_1, i18next.t("filterText:move1Field")); + this.filterText.addFilter(FilterTextRow.MOVE_2, i18next.t("filterText:move2Field")); + this.filterText.addFilter(FilterTextRow.ABILITY_1, i18next.t("filterText:ability1Field")); + this.filterText.addFilter(FilterTextRow.ABILITY_2, i18next.t("filterText:ability2Field")); + + this.filterTextContainer.add(this.filterText); + this.starterSelectContainer.add(this.filterTextContainer); + + + // Create and initialise filter bar + this.filterBarContainer = globalScene.add.container(0, 0); + this.filterBar = new FilterBar(speciesContainerX, 1, 175, filterBarHeight, 2, 0, 6); + + // gen filter + const genOptions: DropDownOption[] = [ + new DropDownOption(1, new DropDownLabel(i18next.t("pokedexUiHandler:gen1"))), + new DropDownOption(2, new DropDownLabel(i18next.t("pokedexUiHandler:gen2"))), + new DropDownOption(3, new DropDownLabel(i18next.t("pokedexUiHandler:gen3"))), + new DropDownOption(4, new DropDownLabel(i18next.t("pokedexUiHandler:gen4"))), + new DropDownOption(5, new DropDownLabel(i18next.t("pokedexUiHandler:gen5"))), + new DropDownOption(6, new DropDownLabel(i18next.t("pokedexUiHandler:gen6"))), + new DropDownOption(7, new DropDownLabel(i18next.t("pokedexUiHandler:gen7"))), + new DropDownOption(8, new DropDownLabel(i18next.t("pokedexUiHandler:gen8"))), + new DropDownOption(9, new DropDownLabel(i18next.t("pokedexUiHandler:gen9"))), + ]; + const genDropDown: DropDown = new DropDown(0, 0, genOptions, this.updateStarters, DropDownType.HYBRID); + this.filterBar.addFilter(DropDownColumn.GEN, i18next.t("filterBar:genFilter"), genDropDown); + + // type filter + const typeKeys = Object.keys(Type).filter(v => isNaN(Number(v))); + const typeOptions: DropDownOption[] = []; + typeKeys.forEach((type, index) => { + if (index === 0 || index === 19) { + return; + } + const typeSprite = globalScene.add.sprite(0, 0, getLocalizedSpriteKey("types")); + typeSprite.setScale(0.5); + typeSprite.setFrame(type.toLowerCase()); + typeOptions.push(new DropDownOption( index, new DropDownLabel("", typeSprite))); + }); + this.filterBar.addFilter(DropDownColumn.TYPES, i18next.t("filterBar:typeFilter"), new DropDown(0, 0, typeOptions, this.updateStarters, DropDownType.HYBRID, 0.5)); + + // biome filter, making an entry in the dropdown for each biome + const biomeOptions = Object.values(Biome) + .filter((value) => typeof value === "number") // Filter numeric values from the enum + .map((biomeValue, index) => + new DropDownOption( index, new DropDownLabel(i18next.t(`biome:${Biome[biomeValue].toUpperCase()}`))) + ); + biomeOptions.push(new DropDownOption( biomeOptions.length, new DropDownLabel(i18next.t("filterBar:uncatchable")))); + const biomeDropDown: DropDown = new DropDown(0, 0, biomeOptions, this.updateStarters, DropDownType.HYBRID); + this.filterBar.addFilter(DropDownColumn.BIOME, i18next.t("filterBar:biomeFilter"), biomeDropDown); + + // 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 caughtOptions = [ + new DropDownOption("SHINY3", new DropDownLabel("", shiny3Sprite)), + new DropDownOption("SHINY2", new DropDownLabel("", shiny2Sprite)), + new DropDownOption("SHINY", new DropDownLabel("", shiny1Sprite)), + new DropDownOption("NORMAL", new DropDownLabel(i18next.t("filterBar:normal"))), + new DropDownOption("UNCAUGHT", new DropDownLabel(i18next.t("filterBar:uncaught"))) + ]; + + this.filterBar.addFilter(DropDownColumn.CAUGHT, i18next.t("filterBar:caughtFilter"), new DropDown(0, 0, caughtOptions, this.updateStarters, DropDownType.HYBRID)); + + // unlocks filter + const passiveLabels = [ + new DropDownLabel(i18next.t("filterBar:passive"), undefined, DropDownState.OFF), + new DropDownLabel(i18next.t("filterBar:passiveUnlocked"), undefined, DropDownState.ON), + new DropDownLabel(i18next.t("filterBar:passiveUnlockable"), undefined, DropDownState.UNLOCKABLE), + new DropDownLabel(i18next.t("filterBar:passiveLocked"), undefined, DropDownState.EXCLUDE), + ]; + + const costReductionLabels = [ + new DropDownLabel(i18next.t("filterBar:costReduction"), undefined, DropDownState.OFF), + new DropDownLabel(i18next.t("filterBar:costReductionUnlocked"), undefined, DropDownState.ON), + new DropDownLabel(i18next.t("filterBar:costReductionUnlockedOne"), undefined, DropDownState.ONE), + new DropDownLabel(i18next.t("filterBar:costReductionUnlockedTwo"), undefined, DropDownState.TWO), + new DropDownLabel(i18next.t("filterBar:costReductionUnlockable"), undefined, DropDownState.UNLOCKABLE), + new DropDownLabel(i18next.t("filterBar:costReductionLocked"), undefined, DropDownState.EXCLUDE), + ]; + + const unlocksOptions = [ + new DropDownOption("PASSIVE", passiveLabels), + new DropDownOption("COST_REDUCTION", costReductionLabels), + ]; + + this.filterBar.addFilter(DropDownColumn.UNLOCKS, i18next.t("filterBar:unlocksFilter"), new DropDown(0, 0, unlocksOptions, this.updateStarters, DropDownType.RADIAL)); + + // misc filter + const starters = [ + new DropDownLabel(i18next.t("filterBar:starter"), undefined, DropDownState.OFF), + new DropDownLabel(i18next.t("filterBar:isStarter"), undefined, DropDownState.ON), + new DropDownLabel(i18next.t("filterBar:notStarter"), undefined, DropDownState.EXCLUDE), + ]; + const favoriteLabels = [ + new DropDownLabel(i18next.t("filterBar:favorite"), undefined, DropDownState.OFF), + new DropDownLabel(i18next.t("filterBar:isFavorite"), undefined, DropDownState.ON), + new DropDownLabel(i18next.t("filterBar:notFavorite"), undefined, DropDownState.EXCLUDE), + ]; + const winLabels = [ + new DropDownLabel(i18next.t("filterBar:ribbon"), undefined, DropDownState.OFF), + new DropDownLabel(i18next.t("filterBar:hasWon"), undefined, DropDownState.ON), + new DropDownLabel(i18next.t("filterBar:hasNotWon"), undefined, DropDownState.EXCLUDE), + ]; + const hiddenAbilityLabels = [ + new DropDownLabel(i18next.t("filterBar:hiddenAbility"), undefined, DropDownState.OFF), + new DropDownLabel(i18next.t("filterBar:hasHiddenAbility"), undefined, DropDownState.ON), + new DropDownLabel(i18next.t("filterBar:noHiddenAbility"), undefined, DropDownState.EXCLUDE), + ]; + const eggLabels = [ + new DropDownLabel(i18next.t("filterBar:egg"), undefined, DropDownState.OFF), + new DropDownLabel(i18next.t("filterBar:eggPurchasable"), undefined, DropDownState.ON), + ]; + const pokerusLabels = [ + new DropDownLabel(i18next.t("filterBar:pokerus"), undefined, DropDownState.OFF), + new DropDownLabel(i18next.t("filterBar:hasPokerus"), undefined, DropDownState.ON), + ]; + const miscOptions = [ + new DropDownOption("STARTER", starters), + new DropDownOption("FAVORITE", favoriteLabels), + new DropDownOption("WIN", winLabels), + new DropDownOption("HIDDEN_ABILITY", hiddenAbilityLabels), + new DropDownOption("EGG", eggLabels), + new DropDownOption("POKERUS", pokerusLabels), + ]; + this.filterBar.addFilter(DropDownColumn.MISC, i18next.t("filterBar:miscFilter"), new DropDown(0, 0, miscOptions, this.updateStarters, DropDownType.RADIAL)); + + // sort filter + const sortOptions = [ + new DropDownOption(SortCriteria.NUMBER, new DropDownLabel(i18next.t("filterBar:sortByNumber"), undefined, DropDownState.ON)), + new DropDownOption(SortCriteria.COST, new DropDownLabel(i18next.t("filterBar:sortByCost"))), + new DropDownOption(SortCriteria.CANDY, new DropDownLabel(i18next.t("filterBar:sortByCandies"))), + new DropDownOption(SortCriteria.IV, new DropDownLabel(i18next.t("filterBar:sortByIVs"))), + new DropDownOption(SortCriteria.NAME, new DropDownLabel(i18next.t("filterBar:sortByName"))), + new DropDownOption(SortCriteria.CAUGHT, new DropDownLabel(i18next.t("filterBar:sortByNumCaught"))), + new DropDownOption(SortCriteria.HATCHED, new DropDownLabel(i18next.t("filterBar:sortByNumHatched"))) + ]; + this.filterBar.addFilter(DropDownColumn.SORT, i18next.t("filterBar:sortFilter"), new DropDown(0, 0, sortOptions, this.updateStarters, DropDownType.SINGLE)); + this.filterBarContainer.add(this.filterBar); + + this.starterSelectContainer.add(this.filterBarContainer); + + // Offset the generation filter dropdown to avoid covering the filtered pokemon + this.filterBar.offsetHybridFilters(); + + if (!globalScene.uiTheme) { + pokemonContainerWindow.setVisible(false); + } + + this.iconAnimHandler = new PokemonIconAnimHandler(); + this.iconAnimHandler.setup(); + + this.pokemonNumberText = addTextObject(6, 141, "", TextStyle.SUMMARY); + this.pokemonNumberText.setOrigin(0, 0); + this.starterSelectContainer.add(this.pokemonNumberText); + + this.pokemonNameText = addTextObject(6, 128, "", TextStyle.SUMMARY); + this.pokemonNameText.setOrigin(0, 0); + this.starterSelectContainer.add(this.pokemonNameText); + + this.pokemonFormText = addTextObject(6, 121, "", TextStyle.PARTY, { fontSize: textSettings.instructionTextSize }); + this.pokemonFormText.setOrigin(0, 0); + this.starterSelectContainer.add(this.pokemonFormText); + + const starterBoxContainer = globalScene.add.container(speciesContainerX + 6, 9); //115 + + this.starterSelectScrollBar = new ScrollBar(161, 12, 5, pokemonContainerWindow.height - 6, 9); + + starterBoxContainer.add(this.starterSelectScrollBar); + + this.pokerusCursorObjs = new Array(POKERUS_STARTER_COUNT).fill(null).map(() => { + const cursorObj = globalScene.add.image(0, 0, "select_cursor_pokerus"); + cursorObj.setVisible(false); + cursorObj.setOrigin(0, 0); + starterBoxContainer.add(cursorObj); + return cursorObj; + }); + + this.cursorObj = globalScene.add.image(0, 0, "select_cursor"); + this.cursorObj.setOrigin(0, 0); + starterBoxContainer.add(this.cursorObj); + + for (const species of allSpecies) { + this.speciesLoaded.set(species.speciesId, false); + this.allSpecies.push(species); + } + + // Here code to declare 81 containers + for (let i = 0; i < 81; i++) { + const pokemonContainer = new PokedexMonContainer(this.allSpecies[i]).setVisible(false); + const pos = calcStarterPosition(i); + pokemonContainer.setPosition(pos.x, pos.y); + this.iconAnimHandler.addOrUpdate(pokemonContainer.icon, PokemonIconAnimMode.NONE); + this.pokemonContainers.push(pokemonContainer); + starterBoxContainer.add(pokemonContainer); + } + + // Tray to display forms + this.formTrayContainer = globalScene.add.container(0, 0); + + this.trayBg = addWindow(0, 0, 0, 0); + this.trayBg.setOrigin(0, 0); + this.formTrayContainer.add(this.trayBg); + + this.trayCursorObj = globalScene.add.image(0, 0, "select_cursor"); + this.trayCursorObj.setOrigin(0, 0); + this.formTrayContainer.add(this.trayCursorObj); + starterBoxContainer.add(this.formTrayContainer); + starterBoxContainer.bringToTop(this.formTrayContainer); + this.formTrayContainer.setVisible(false); + + this.starterSelectContainer.add(starterBoxContainer); + + this.pokemonSprite = globalScene.add.sprite(96, 143, "pkmn__sub"); + this.pokemonSprite.setPipeline(globalScene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], ignoreTimeTint: true }); + this.starterSelectContainer.add(this.pokemonSprite); + + this.type1Icon = globalScene.add.sprite(10, 158, getLocalizedSpriteKey("types")); + this.type1Icon.setScale(0.5); + this.type1Icon.setOrigin(0, 0); + this.starterSelectContainer.add(this.type1Icon); + + this.type2Icon = globalScene.add.sprite(28, 158, getLocalizedSpriteKey("types")); + this.type2Icon.setScale(0.5); + this.type2Icon.setOrigin(0, 0); + this.starterSelectContainer.add(this.type2Icon); + + this.starterSelectMessageBoxContainer = globalScene.add.container(0, globalScene.game.canvas.height / 6); + this.starterSelectMessageBoxContainer.setVisible(false); + this.starterSelectContainer.add(this.starterSelectMessageBoxContainer); + + this.starterSelectMessageBox = addWindow(1, -1, 318, 28); + this.starterSelectMessageBox.setOrigin(0, 1); + this.starterSelectMessageBoxContainer.add(this.starterSelectMessageBox); + + // Instruction for "C" button to toggle showDecorations + const instructionTextSize = textSettings.instructionTextSize; + + this.goFilterIconElement1 = new Phaser.GameObjects.Sprite(globalScene, 10, 2, "keyboard", "C.png"); + this.goFilterIconElement1.setName("sprite-goFilter1-icon-element"); + this.goFilterIconElement1.setScale(0.675); + this.goFilterIconElement1.setOrigin(0.0, 0.0); + this.goFilterIconElement2 = new Phaser.GameObjects.Sprite(globalScene, 20, 2, "keyboard", "V.png"); + this.goFilterIconElement2.setName("sprite-goFilter2-icon-element"); + this.goFilterIconElement2.setScale(0.675); + this.goFilterIconElement2.setOrigin(0.0, 0.0); + this.goFilterLabel = addTextObject(30, 2, i18next.t("pokedexUiHandler:goFilters"), TextStyle.PARTY, { fontSize: instructionTextSize }); + this.goFilterLabel.setName("text-goFilter-label"); + this.starterSelectContainer.add(this.goFilterIconElement1); + this.starterSelectContainer.add(this.goFilterIconElement2); + this.starterSelectContainer.add(this.goFilterLabel); + + this.toggleDecorationsIconElement = new Phaser.GameObjects.Sprite(globalScene, 10, 10, "keyboard", "R.png"); + this.toggleDecorationsIconElement.setName("sprite-toggleDecorations-icon-element"); + this.toggleDecorationsIconElement.setScale(0.675); + this.toggleDecorationsIconElement.setOrigin(0.0, 0.0); + this.toggleDecorationsLabel = addTextObject(20, 10, i18next.t("pokedexUiHandler:toggleDecorations"), TextStyle.PARTY, { fontSize: instructionTextSize }); + this.toggleDecorationsLabel.setName("text-toggleDecorations-label"); + this.starterSelectContainer.add(this.toggleDecorationsIconElement); + this.starterSelectContainer.add(this.toggleDecorationsLabel); + + this.showFormTrayIconElement = new Phaser.GameObjects.Sprite(globalScene, 6, 168, "keyboard", "F.png"); + this.showFormTrayIconElement.setName("sprite-showFormTray-icon-element"); + this.showFormTrayIconElement.setScale(0.675); + this.showFormTrayIconElement.setOrigin(0.0, 0.0); + this.showFormTrayLabel = addTextObject(16, 168, i18next.t("pokedexUiHandler:showForms"), TextStyle.PARTY, { fontSize: instructionTextSize }); + this.showFormTrayLabel.setName("text-showFormTray-label"); + this.showFormTrayIconElement.setVisible(false); + this.showFormTrayLabel.setVisible(false); + this.starterSelectContainer.add(this.showFormTrayIconElement); + this.starterSelectContainer.add(this.showFormTrayLabel); + + this.message = addTextObject(8, 8, "", TextStyle.WINDOW, { maxLines: 2 }); + this.message.setOrigin(0, 0); + this.starterSelectMessageBoxContainer.add(this.message); + + // arrow icon for the message box + this.initPromptSprite(this.starterSelectMessageBoxContainer); + + // Filter bar sits above everything, except the tutorial overlay and message box + this.starterSelectContainer.bringToTop(this.filterBarContainer); + this.initTutorialOverlay(this.starterSelectContainer); + this.starterSelectContainer.bringToTop(this.starterSelectMessageBoxContainer); + this.starterSelectContainer.bringToTop(this.pokemonNameText); + this.starterSelectContainer.bringToTop(this.pokemonFormText); + } + + show(args: any[]): boolean { + + if (!this.starterPreferences) { + this.starterPreferences = StarterPrefs.load(); + } + + this.pokerusSpecies = getPokerusStarters(); + + // When calling with "refresh", we do not reset the cursor and filters + if (args.length >= 1 && args[0] === "refresh") { + return false; + } + + super.show(args); + + this.starterSelectContainer.setVisible(true); + + this.getUi().bringToTop(this.starterSelectContainer); + + this.pokemonContainers.forEach(container => { + const icon = container.icon; + const species = container.species; + + this.starterPreferences[species.speciesId] = this.initStarterPrefs(species); + + this.setUpgradeAnimation(icon, species); + }); + + this.resetFilters(); + this.updateStarters(); + + this.setFilterMode(false); + this.filterBarCursor = 0; + this.setFilterTextMode(false); + this.filterTextCursor = 0; + this.setCursor(0); + + this.filterTextContainer.setVisible(true); + + return true; + } + + /** + * Get the starter attributes for the given PokemonSpecies, after sanitizing them. + * If somehow a preference is set for a form, variant, gender, ability or nature + * that wasn't actually unlocked or is invalid it will be cleared here + * + * @param species The species to get Starter Preferences for + * @returns StarterAttributes for the species + */ + initStarterPrefs(species: PokemonSpecies): StarterAttributes { + const starterAttributes = this.starterPreferences[species.speciesId]; + const dexEntry = globalScene.gameData.dexData[species.speciesId]; + const starterData = globalScene.gameData.starterData[species.speciesId]; + + // no preferences or Pokemon wasn't caught, return empty attribute + if (!starterAttributes || !dexEntry.caughtAttr) { + return {}; + } + + const caughtAttr = dexEntry.caughtAttr & species.getFullUnlocksData(); + + const hasShiny = caughtAttr & DexAttr.SHINY; + const hasNonShiny = caughtAttr & DexAttr.NON_SHINY; + if (starterAttributes.shiny && !hasShiny) { + // shiny form wasn't unlocked, purging shiny and variant setting + delete starterAttributes.shiny; + delete starterAttributes.variant; + } else if (starterAttributes.shiny === false && !hasNonShiny) { + // non shiny form wasn't unlocked, purging shiny setting + delete starterAttributes.shiny; + } + + if (starterAttributes.variant !== undefined) { + const unlockedVariants = [ + hasShiny && caughtAttr & DexAttr.DEFAULT_VARIANT, + hasShiny && caughtAttr & DexAttr.VARIANT_2, + hasShiny && caughtAttr & DexAttr.VARIANT_3 + ]; + if (isNaN(starterAttributes.variant) || starterAttributes.variant < 0 || !unlockedVariants[starterAttributes.variant]) { + // variant value is invalid or requested variant wasn't unlocked, purging setting + delete starterAttributes.variant; + } + } + + if (starterAttributes.female !== undefined) { + if (!(starterAttributes.female ? caughtAttr & DexAttr.FEMALE : caughtAttr & DexAttr.MALE)) { + // requested gender wasn't unlocked, purging setting + delete starterAttributes.female; + } + } + + if (starterAttributes.ability !== undefined) { + const speciesHasSingleAbility = species.ability2 === species.ability1; + const abilityAttr = starterData.abilityAttr; + const hasAbility1 = abilityAttr & AbilityAttr.ABILITY_1; + const hasAbility2 = abilityAttr & AbilityAttr.ABILITY_2; + const hasHiddenAbility = abilityAttr & AbilityAttr.ABILITY_HIDDEN; + // Due to a past bug it is possible that some Pokemon with a single ability have the ability2 flag + // In this case, we only count ability2 as valid if ability1 was not unlocked, otherwise we ignore it + const unlockedAbilities = [ + hasAbility1, + speciesHasSingleAbility ? hasAbility2 && !hasAbility1 : hasAbility2, + hasHiddenAbility + ]; + if (!unlockedAbilities[starterAttributes.ability]) { + // requested ability wasn't unlocked, purging setting + delete starterAttributes.ability; + } + } + + const selectedForm = starterAttributes.form; + if (selectedForm !== undefined && (!species.forms[selectedForm]?.isStarterSelectable || !(caughtAttr & globalScene.gameData.getFormAttr(selectedForm)))) { + // requested form wasn't unlocked/isn't a starter form, purging setting + delete starterAttributes.form; + } + + if (starterAttributes.nature !== undefined) { + const unlockedNatures = globalScene.gameData.getNaturesForAttr(dexEntry.natureAttr); + if (unlockedNatures.indexOf(starterAttributes.nature as unknown as Nature) < 0) { + // requested nature wasn't unlocked, purging setting + delete starterAttributes.nature; + } + } + + return starterAttributes; + } + + /** + * Set the selections for all filters to their default starting value + */ + resetFilters() : void { + this.filterBar.setValsToDefault(); + this.filterText.setValsToDefault(); + } + + showText(text: string, delay?: number, callback?: Function, callbackDelay?: number, prompt?: boolean, promptDelay?: number, moveToTop?: boolean) { + super.showText(text, delay, callback, callbackDelay, prompt, promptDelay); + + const singleLine = text?.indexOf("\n") === -1; + + this.starterSelectMessageBox.setSize(318, singleLine ? 28 : 42); + + if (moveToTop) { + this.starterSelectMessageBox.setOrigin(0, 0); + this.starterSelectMessageBoxContainer.setY(0); + this.message.setY(4); + } else { + this.starterSelectMessageBoxContainer.setY(globalScene.game.canvas.height / 6); + this.starterSelectMessageBox.setOrigin(0, 1); + this.message.setY(singleLine ? -22 : -37); + } + + this.starterSelectMessageBoxContainer.setVisible(!!text?.length); + } + + /** + * Determines if 'Icon' based upgrade notifications should be shown + * @returns true if upgrade notifications are enabled and set to display an 'Icon' + */ + isUpgradeIconEnabled(): boolean { + return globalScene.candyUpgradeNotification !== 0 && globalScene.candyUpgradeDisplay === 0; + } + /** + * Determines if 'Animation' based upgrade notifications should be shown + * @returns true if upgrade notifications are enabled and set to display an 'Animation' + */ + isUpgradeAnimationEnabled(): boolean { + return globalScene.candyUpgradeNotification !== 0 && globalScene.candyUpgradeDisplay === 1; + } + + getStarterSpeciesId(speciesId): number { + if (speciesStarterCosts.hasOwnProperty(speciesId)) { + return speciesId; + } else { + return pokemonStarters[speciesId]; + } + } + + /** + * Determines if a passive upgrade is available for the given species ID + * @param speciesId The ID of the species to check the passive of + * @returns true if the user has enough candies and a passive has not been unlocked already + */ + isPassiveAvailable(speciesId: number): boolean { + // Get this species ID's starter data + const starterData = globalScene.gameData.starterData[this.getStarterSpeciesId(speciesId)]; + + return starterData.candyCount >= getPassiveCandyCount(speciesStarterCosts[this.getStarterSpeciesId(speciesId)]) + && !(starterData.passiveAttr & PassiveAttr.UNLOCKED); + } + + /** + * Determines if a value reduction upgrade is available for the given species ID + * @param speciesId The ID of the species to check the value reduction of + * @returns true if the user has enough candies and all value reductions have not been unlocked already + */ + isValueReductionAvailable(speciesId: number): boolean { + // Get this species ID's starter data + const starterData = globalScene.gameData.starterData[this.getStarterSpeciesId(speciesId)]; + + return starterData.candyCount >= getValueReductionCandyCounts(speciesStarterCosts[this.getStarterSpeciesId(speciesId)])[starterData.valueReduction] + && starterData.valueReduction < valueReductionMax; + } + + /** + * Determines if an same species egg can be bought for the given species ID + * @param speciesId The ID of the species to check the value reduction of + * @returns true if the user has enough candies + */ + isSameSpeciesEggAvailable(speciesId: number): boolean { + // Get this species ID's starter data + const starterData = globalScene.gameData.starterData[this.getStarterSpeciesId(speciesId)]; + + return starterData.candyCount >= getSameSpeciesEggCandyCounts(speciesStarterCosts[this.getStarterSpeciesId(speciesId)]); + } + + /** + * Sets a bounce animation if enabled and the Pokemon has an upgrade + * @param icon {@linkcode Phaser.GameObjects.GameObject} to animate + * @param species {@linkcode PokemonSpecies} of the icon used to check for upgrades + * @param startPaused Should this animation be paused after it is added? + */ + setUpgradeAnimation(icon: Phaser.GameObjects.Sprite, species: PokemonSpecies, startPaused: boolean = false): void { + globalScene.tweens.killTweensOf(icon); + // Skip animations if they are disabled + if (globalScene.candyUpgradeDisplay === 0 || species.speciesId !== species.getRootSpeciesId(false)) { + return; + } + + icon.y = 2; + + const tweenChain: Phaser.Types.Tweens.TweenChainBuilderConfig = { + targets: icon, + loop: -1, + // Make the initial bounce a little randomly delayed + delay: randIntRange(0, 50) * 5, + loopDelay: 1000, + tweens: [ + { + targets: icon, + y: 2 - 5, + duration: fixedInt(125), + ease: "Cubic.easeOut", + yoyo: true + }, + { + targets: icon, + y: 2 - 3, + duration: fixedInt(150), + ease: "Cubic.easeOut", + yoyo: true + } + ], }; + + const isPassiveAvailable = this.isPassiveAvailable(species.speciesId); + const isValueReductionAvailable = this.isValueReductionAvailable(species.speciesId); + const isSameSpeciesEggAvailable = this.isSameSpeciesEggAvailable(species.speciesId); + + // 'Passives Only' mode + if (globalScene.candyUpgradeNotification === 1) { + if (isPassiveAvailable) { + globalScene.tweens.chain(tweenChain).paused = startPaused; + } + // 'On' mode + } else if (globalScene.candyUpgradeNotification === 2) { + if (isPassiveAvailable || isValueReductionAvailable || isSameSpeciesEggAvailable) { + globalScene.tweens.chain(tweenChain).paused = startPaused; + } + } + } + + /** + * Sets the visibility of a Candy Upgrade Icon + */ + setUpgradeIcon(starter: PokedexMonContainer): void { + const species = starter.species; + const slotVisible = !!species?.speciesId; + + if (!species || globalScene.candyUpgradeNotification === 0 || species.speciesId !== species.getRootSpeciesId(false)) { + starter.candyUpgradeIcon.setVisible(false); + starter.candyUpgradeOverlayIcon.setVisible(false); + return; + } + + const isPassiveAvailable = this.isPassiveAvailable(species.speciesId); + const isValueReductionAvailable = this.isValueReductionAvailable(species.speciesId); + const isSameSpeciesEggAvailable = this.isSameSpeciesEggAvailable(species.speciesId); + + // 'Passive Only' mode + if (globalScene.candyUpgradeNotification === 1) { + starter.candyUpgradeIcon.setVisible(slotVisible && isPassiveAvailable); + starter.candyUpgradeOverlayIcon.setVisible(slotVisible && starter.candyUpgradeIcon.visible); + + // 'On' mode + } else if (globalScene.candyUpgradeNotification === 2) { + starter.candyUpgradeIcon.setVisible( + slotVisible && ( isPassiveAvailable || isValueReductionAvailable || isSameSpeciesEggAvailable )); + starter.candyUpgradeOverlayIcon.setVisible(slotVisible && starter.candyUpgradeIcon.visible); + } + } + + /** + * Update the display of candy upgrade icons or animations for the given PokedexMonContainer + * @param pokemonContainer the container for the Pokemon to update + */ + updateCandyUpgradeDisplay(pokemonContainer: PokedexMonContainer) { + if (this.isUpgradeIconEnabled() ) { + this.setUpgradeIcon(pokemonContainer); + } + if (this.isUpgradeAnimationEnabled()) { + this.setUpgradeAnimation(pokemonContainer.icon, this.lastSpecies, true); + } + } + + processInput(button: Button): boolean { + if (this.blockInput) { + return false; + } + + const maxColumns = 9; + const numberOfStarters = this.filteredPokemonData.length; + const numOfRows = Math.ceil(numberOfStarters / maxColumns); + const onScreenFirstIndex = this.scrollCursor * maxColumns; // this is first index on the screen + // TODO: check if in some places we need to use one or the other + const currentRow = Math.floor((onScreenFirstIndex + this.cursor) / maxColumns); + + const ui = this.getUi(); + + let success = false; + let error = false; + + if (button === Button.SUBMIT) { + error = true; + } else if (button === Button.CANCEL) { + if (this.filterMode && this.filterBar.openDropDown) { + // CANCEL with a filter menu open > close it + this.filterBar.toggleDropDown(this.filterBarCursor); + success = true; + } else if (this.filterMode && !this.filterBar.getFilter(this.filterBarCursor).hasDefaultValues()) { + this.filterBar.resetSelection(this.filterBarCursor); + this.updateStarters(); + success = true; + } else if (this.filterTextMode && !(this.filterText.getValue(this.filterTextCursor) === this.filterText.defaultText)) { + this.filterText.resetSelection(this.filterTextCursor); + success = true; + } else if (this.showingTray) { + success = this.closeFormTray(); + } else { + this.tryExit(); + success = true; + } + } else if (button === Button.STATS) { + if (!this.filterMode && !this.showingTray) { + this.cursorObj.setVisible(false); + this.setSpecies(null); + this.filterText.cursorObj.setVisible(false); + this.filterTextMode = false; + this.filterBarCursor = 0; + this.setFilterMode(true); + } else { + error = true; + } + } else if (button === Button.CYCLE_TERA) { + if (!this.filterTextMode && !this.showingTray) { + this.cursorObj.setVisible(false); + this.setSpecies(null); + this.filterBar.cursorObj.setVisible(false); + this.filterMode = false; + this.filterTextCursor = 0; + this.setFilterTextMode(true); + } else { + error = true; + } + } else if (button === Button.CYCLE_SHINY) { + if (!this.showingTray) { + this.showDecorations = !this.showDecorations; + this.updateScroll(); + success = true; + } else { + error = true; + } + } else if (this.filterMode) { + switch (button) { + case Button.LEFT: + if (this.filterBarCursor > 0) { + success = this.setCursor(this.filterBarCursor - 1); + } else { + success = this.setCursor(this.filterBar.numFilters - 1); + } + break; + case Button.RIGHT: + if (this.filterBarCursor < this.filterBar.numFilters - 1) { + success = this.setCursor(this.filterBarCursor + 1); + } else { + success = this.setCursor(0); + } + break; + case Button.UP: + if (this.filterBar.openDropDown) { + success = this.filterBar.decDropDownCursor(); + } else if (numberOfStarters > 0) { + // UP from filter bar to bottom of Pokemon list + this.setFilterMode(false); + this.scrollCursor = Math.max(0, numOfRows - 9); + this.updateScroll(); + const proportion = this.filterBarCursor / Math.max(1, this.filterBar.numFilters - 1); + const targetCol = Math.min(8, proportion < 0.5 ? Math.floor(proportion * 8) : Math.ceil(proportion * 8)); + if (numberOfStarters % 9 > targetCol) { + this.setCursor(numberOfStarters - (numberOfStarters) % 9 + targetCol - this.scrollCursor * 9); + } else { + this.setCursor(Math.max(numberOfStarters - (numberOfStarters) % 9 + targetCol - 9 - this.scrollCursor * 9, 0)); + } + success = true; + } + break; + case Button.DOWN: + if (this.filterBar.openDropDown) { + success = this.filterBar.incDropDownCursor(); + } else if (numberOfStarters > 0) { + // DOWN from filter bar to top of Pokemon list + this.setFilterMode(false); + this.scrollCursor = 0; + this.updateScroll(); + const proportion = this.filterBarCursor / Math.max(1, this.filterBar.numFilters - 1); + const targetCol = Math.min(8, proportion < 0.5 ? Math.floor(proportion * 8) : Math.ceil(proportion * 8)); + this.setCursor(Math.min(targetCol, numberOfStarters - 1)); + success = true; + } + break; + case Button.ACTION: + if (!this.filterBar.openDropDown) { + this.filterBar.toggleDropDown(this.filterBarCursor); + } else { + this.filterBar.toggleOptionState(); + } + success = true; + break; + } + } else if (this.filterTextMode) { + switch (button) { + case Button.LEFT: + // LEFT from filter bar, move to right of Pokemon list + if (numberOfStarters > 0) { + this.setFilterTextMode(false); + const rowIndex = this.filterTextCursor; + this.setCursor(rowIndex < numOfRows - 1 ? (rowIndex + 1) * maxColumns - 1 : numberOfStarters - 1); + success = true; + } + break; + case Button.RIGHT: + // RIGHT from filter bar, move to left of Pokemon list + if (numberOfStarters > 0) { + this.setFilterTextMode(false); + const rowIndex = this.filterTextCursor; + this.setCursor(rowIndex < numOfRows ? rowIndex * maxColumns : (numOfRows - 1) * maxColumns); + success = true; + } + break; + case Button.UP: + if (this.filterTextCursor > 0) { + success = this.setCursor(this.filterTextCursor - 1); + } else { + success = this.setCursor(this.filterText.numFilters - 1); + } + break; + case Button.DOWN: + if (this.filterTextCursor < this.filterText.numFilters - 1) { + success = this.setCursor(this.filterTextCursor + 1); + } else { + success = this.setCursor(0); + } + break; + case Button.ACTION: + this.filterText.startSearch(this.filterTextCursor, this.getUi()); + success = true; + break; + } + } else if (this.showingTray) { + if (button === Button.ACTION) { + const formIndex = this.trayForms[this.trayCursor].formIndex; + ui.setOverlayMode(Mode.POKEDEX_PAGE, this.lastSpecies, formIndex, { form: formIndex }, this.filteredIndices); + success = true; + } else { + const numberOfForms = this.trayContainers.length; + const numOfRows = Math.ceil(numberOfForms / maxColumns); + const currentTrayRow = Math.floor(this.trayCursor / maxColumns); + switch (button) { + case Button.UP: + if (currentTrayRow > 0) { + success = this.setTrayCursor(this.trayCursor - 9); + } else { + const targetCol = this.trayCursor; + if (numberOfForms % 9 > targetCol) { + success = this.setTrayCursor(numberOfForms - (numberOfForms) % 9 + targetCol); + } else { + success = this.setTrayCursor(Math.max(numberOfForms - (numberOfForms) % 9 + targetCol - 9, 0)); + } + } + break; + case Button.DOWN: + if (currentTrayRow < numOfRows - 1) { + success = this.setTrayCursor(this.trayCursor + 9); + } else { + success = this.setTrayCursor(this.trayCursor % 9); + } + break; + case Button.LEFT: + if (this.trayCursor % 9 !== 0) { + success = this.setTrayCursor(this.trayCursor - 1); + } else { + success = this.setTrayCursor(currentTrayRow < numOfRows - 1 ? (currentTrayRow + 1) * maxColumns - 1 : numberOfForms - 1); + } + break; + case Button.RIGHT: + if (this.trayCursor % 9 < (currentTrayRow < numOfRows - 1 ? 8 : (numberOfForms - 1) % 9)) { + success = this.setTrayCursor(this.trayCursor + 1); + } else { + success = this.setTrayCursor(currentTrayRow * 9); + } + break; + case Button.CYCLE_FORM: + success = this.closeFormTray(); + break; + } + } + } else { + if (button === Button.ACTION) { + ui.setOverlayMode(Mode.POKEDEX_PAGE, this.lastSpecies, 0, null, this.filteredIndices); + success = true; + } else { + switch (button) { + case Button.UP: + if (currentRow > 0) { + if (this.scrollCursor > 0 && currentRow - this.scrollCursor === 0) { + this.scrollCursor--; + this.updateScroll(); + success = this.setCursor(this.cursor); + } else { + success = this.setCursor(this.cursor - 9); + } + } else { + this.filterBarCursor = this.filterBar.getNearestFilter(this.pokemonContainers[this.cursor]); + this.setFilterMode(true); + success = true; + } + break; + case Button.DOWN: + if ((currentRow < numOfRows - 1) && (this.cursor + 9 < this.filteredPokemonData.length)) { // not last row + if (currentRow - this.scrollCursor === 8) { // last row of visible pokemon + this.scrollCursor++; + this.updateScroll(); + success = this.setCursor(this.cursor); + } else { + success = this.setCursor(this.cursor + 9); + } + } else if (numOfRows > 1) { + // DOWN from last row of pokemon > Wrap around to first row + this.scrollCursor = 0; + this.updateScroll(); + success = this.setCursor(this.cursor % 9); + } else { + // DOWN from single row of pokemon > Go to filters + this.filterBarCursor = this.filterBar.getNearestFilter(this.pokemonContainers[this.cursor]); + this.setFilterMode(true); + success = true; + } + break; + case Button.LEFT: + if (this.cursor % 9 !== 0) { + success = this.setCursor(this.cursor - 1); + } else { + // LEFT from filtered pokemon, on the left edge + this.filterTextCursor = this.filterText.getNearestFilter(this.pokemonContainers[this.cursor]); + this.setFilterTextMode(true); + success = true; + } + break; + case Button.RIGHT: + // is not right edge + if (this.cursor % 9 < (currentRow < numOfRows - 1 ? 8 : (numberOfStarters - 1) % 9)) { + success = this.setCursor(this.cursor + 1); + } else { + // RIGHT from filtered pokemon, on the right edge + this.filterTextCursor = this.filterText.getNearestFilter(this.pokemonContainers[this.cursor]); + this.setFilterTextMode(true); + success = true; + } + break; + case Button.CYCLE_FORM: + const species = this.pokemonContainers[this.cursor].species; + if (this.canShowFormTray) { + success = this.openFormTray(species); + } + break; + } + } + } + + if (success) { + ui.playSelect(); + } else if (error) { + ui.playError(); + } + + return success || error; + } + + updateButtonIcon(iconSetting, gamepadType, iconElement, controlLabel): void { + let iconPath; + // touch controls cannot be rebound as is, and are just emulating a keyboard event. + // Additionally, since keyboard controls can be rebound (and will be displayed when they are), we need to have special handling for the touch controls + if (gamepadType === "touch") { + gamepadType = "keyboard"; + switch (iconSetting) { + case SettingKeyboard.Button_Cycle_Shiny: + iconPath = "R.png"; + break; + case SettingKeyboard.Button_Cycle_Form: + iconPath = "F.png"; + break; + case SettingKeyboard.Button_Stats: + iconPath = "C.png"; + break; + default: + break; + } + } else { + iconPath = globalScene.inputController?.getIconForLatestInputRecorded(iconSetting); + } + iconElement.setTexture(gamepadType, iconPath); + iconElement.setVisible(true); + controlLabel.setVisible(true); + } + + updateFilterButtonIcon(iconSetting, gamepadType, iconElement, controlLabel): void { + let iconPath; + // touch controls cannot be rebound as is, and are just emulating a keyboard event. + // Additionally, since keyboard controls can be rebound (and will be displayed when they are), we need to have special handling for the touch controls + if (gamepadType === "touch") { + gamepadType = "keyboard"; + iconPath = "C.png"; + } else { + iconPath = globalScene.inputController?.getIconForLatestInputRecorded(iconSetting); + } + iconElement.setTexture(gamepadType, iconPath); + iconElement.setVisible(true); + controlLabel.setVisible(true); + } + + getSanitizedProps(props: DexAttrProps): DexAttrProps { + const sanitizedProps: DexAttrProps = { + shiny: false, + female: props.female, + variant: 0, + formIndex: props.formIndex, + }; + return sanitizedProps; + } + + // Returns true if one of the forms has the requested move + hasFormLevelMove(form: PokemonForm, selectedMove: string): boolean { + if (!pokemonFormLevelMoves.hasOwnProperty(form.speciesId) || !pokemonFormLevelMoves[form.speciesId].hasOwnProperty(form.formIndex)) { + return false; + } else { + const levelMoves = pokemonFormLevelMoves[form.speciesId][form.formIndex].map(m => allMoves[m[1]].name); + return levelMoves.includes(selectedMove); + } + } + + updateStarters = () => { + this.scrollCursor = 0; + this.filteredPokemonData = []; + + this.pokerusCursorObjs.forEach(cursor => cursor.setVisible(false)); + + this.filterBar.updateFilterLabels(); + this.filterText.updateFilterLabels(); + + this.filteredPokemonData = []; + + this.allSpecies.forEach(species => { + + const starterId = this.getStarterSpeciesId(species.speciesId); + + const currentDexAttr = this.getCurrentDexProps(species.speciesId); + const props = this.getSanitizedProps(globalScene.gameData.getSpeciesDexAttrProps(species, currentDexAttr)); + + const data: ContainerData = { species: species, cost: globalScene.gameData.getSpeciesStarterValue(starterId), props: props }; + + // First, ensure you have the caught attributes for the species else default to bigint 0 + // TODO: This might be removed depending on how accessible we want the pokedex function to be + const caughtAttr = (globalScene.gameData.dexData[species.speciesId]?.caughtAttr || BigInt(0)) & + (globalScene.gameData.dexData[this.getStarterSpeciesId(species.speciesId)]?.caughtAttr || BigInt(0)) & + species.getFullUnlocksData(); + const starterData = globalScene.gameData.starterData[starterId]; + const isStarterProgressable = speciesEggMoves.hasOwnProperty(starterId); + + // Name filter + const selectedName = this.filterText.getValue(FilterTextRow.NAME); + const fitsName = species.name === selectedName || selectedName === this.filterText.defaultText; + + // Move filter + // TODO: There can be fringe cases where the two moves belong to mutually exclusive forms, these must be handled separately (Pikachu); + // On the other hand, in some cases it is possible to switch between different forms and combine (Deoxys) + const levelMoves = pokemonSpeciesLevelMoves[species.speciesId].map(m => allMoves[m[1]].name); + // This always gets egg moves from the starter + const eggMoves = speciesEggMoves[starterId]?.map(m => allMoves[m].name) ?? []; + const tmMoves = speciesTmMoves[starterId]?.map(m => allMoves[Array.isArray(m) ? m[1] : m].name) ?? []; + const selectedMove1 = this.filterText.getValue(FilterTextRow.MOVE_1); + const selectedMove2 = this.filterText.getValue(FilterTextRow.MOVE_2); + + const fitsFormMove1 = species.forms.some(form => this.hasFormLevelMove(form, selectedMove1)); + const fitsFormMove2 = species.forms.some(form => this.hasFormLevelMove(form, selectedMove2)); + const fitsLevelMove1 = levelMoves.includes(selectedMove1) || fitsFormMove1; + const fitsEggMove1 = eggMoves.includes(selectedMove1); + const fitsTmMove1 = tmMoves.includes(selectedMove1); + const fitsLevelMove2 = levelMoves.includes(selectedMove2) || fitsFormMove2; + const fitsEggMove2 = eggMoves.includes(selectedMove2); + const fitsTmMove2 = tmMoves.includes(selectedMove2); + const fitsMove1 = fitsLevelMove1 || fitsEggMove1 || fitsTmMove1 || selectedMove1 === this.filterText.defaultText; + const fitsMove2 = fitsLevelMove2 || fitsEggMove2 || fitsTmMove2 || selectedMove2 === this.filterText.defaultText; + const fitsMoves = fitsMove1 && fitsMove2; + + if (fitsEggMove1 && !fitsLevelMove1) { + const em1 = eggMoves.findIndex(name => name === selectedMove1); + if ((starterData.eggMoves & (1 << em1)) === 0) { + data.eggMove1 = false; + } else { + data.eggMove1 = true; + } + } else if (fitsTmMove1 && !fitsLevelMove1) { + data.tmMove1 = true; + } + if (fitsEggMove2 && !fitsLevelMove2) { + const em2 = eggMoves.findIndex(name => name === selectedMove2); + if ((starterData.eggMoves & (1 << em2)) === 0) { + data.eggMove2 = false; + } else { + data.eggMove2 = true; + } + } else if (fitsTmMove2 && !fitsLevelMove2) { + data.tmMove2 = true; + } + + // Ability filter + const abilities = [ species.ability1, species.ability2, species.abilityHidden ].map(a => allAbilities[a].name); + const passives = starterPassiveAbilities[starterId] ?? {} as PassiveAbilities; + + const selectedAbility1 = this.filterText.getValue(FilterTextRow.ABILITY_1); + const fitsFormAbility1 = species.forms.some(form => [ form.ability1, form.ability2, form.abilityHidden ].map(a => allAbilities[a].name).includes(selectedAbility1)); + const fitsAbility1 = abilities.includes(selectedAbility1) || fitsFormAbility1 || selectedAbility1 === this.filterText.defaultText; + const fitsPassive1 = Object.values(passives).some(p => allAbilities[p].name === selectedAbility1); + + const selectedAbility2 = this.filterText.getValue(FilterTextRow.ABILITY_2); + const fitsFormAbility2 = species.forms.some(form => [ form.ability1, form.ability2, form.abilityHidden ].map(a => allAbilities[a].name).includes(selectedAbility2)); + const fitsAbility2 = abilities.includes(selectedAbility2) || fitsFormAbility2 || selectedAbility2 === this.filterText.defaultText; + const fitsPassive2 = Object.values(passives).some(p => allAbilities[p].name === selectedAbility2); + + // If both fields have been set to the same ability, show both ability and passive + const fitsAbilities = (fitsAbility1 && (fitsPassive2 || selectedAbility2 === this.filterText.defaultText)) || + (fitsAbility2 && (fitsPassive1 || selectedAbility1 === this.filterText.defaultText)); + + if (fitsPassive1 || fitsPassive2) { + if (fitsPassive1) { + if (starterData.passiveAttr > 0) { + data.passive1 = true; + } else { + data.passive1 = false; + } + } else { + if (starterData.passiveAttr > 0) { + data.passive2 = true; + } else { + data.passive2 = false; + } + } + } + + // Gen filter + const fitsGen = this.filterBar.getVals(DropDownColumn.GEN).includes(species.generation); + + // Type filter + const fitsType = this.filterBar.getVals(DropDownColumn.TYPES).some(type => species.isOfType((type as number) - 1)); + + // Biome filter + const indexToBiome = new Map( + Object.values(Biome) + .map((value, index) => (typeof value === "string" ? [ index, value ] : undefined)) + .filter((entry): entry is [number, string] => entry !== undefined) + ); + indexToBiome.set(35, "Uncatchable"); + + // We get biomes for both the mon and its starters to ensure that evolutions get the correct filters. + // TODO: We might also need to do it the other way around. + const biomes = catchableSpecies[species.speciesId].concat(catchableSpecies[starterId]).map(b => Biome[b.biome]); + if (biomes.length === 0) { + biomes.push("Uncatchable"); + } + const showNoBiome = (biomes.length === 0 && this.filterBar.getVals(DropDownColumn.BIOME).length === 36) ? true : false; + const fitsBiome = this.filterBar.getVals(DropDownColumn.BIOME).some(item => biomes.includes(indexToBiome.get(item) ?? "")) || showNoBiome; + + + // Caught / Shiny filter + const isNonShinyCaught = !!(caughtAttr & DexAttr.NON_SHINY); + const isShinyCaught = !!(caughtAttr & DexAttr.SHINY); + const isVariant1Caught = isShinyCaught && !!(caughtAttr & DexAttr.DEFAULT_VARIANT); + const isVariant2Caught = isShinyCaught && !!(caughtAttr & DexAttr.VARIANT_2); + const isVariant3Caught = isShinyCaught && !!(caughtAttr & DexAttr.VARIANT_3); + const isUncaught = !isNonShinyCaught && !isVariant1Caught && !isVariant2Caught && !isVariant3Caught; + const fitsCaught = this.filterBar.getVals(DropDownColumn.CAUGHT).some(caught => { + if (caught === "SHINY3") { + return isVariant3Caught; + } else if (caught === "SHINY2") { + return isVariant2Caught && !isVariant3Caught; + } else if (caught === "SHINY") { + return isVariant1Caught && !isVariant2Caught && !isVariant3Caught; + } else if (caught === "NORMAL") { + return isNonShinyCaught && !isVariant1Caught && !isVariant2Caught && !isVariant3Caught; + } else if (caught === "UNCAUGHT") { + return isUncaught; + } + }); + + // Passive Filter + const isPassiveUnlocked = starterData.passiveAttr > 0; + const isPassiveUnlockable = this.isPassiveAvailable(species.speciesId) && !isPassiveUnlocked; + const fitsPassive = this.filterBar.getVals(DropDownColumn.UNLOCKS).some(unlocks => { + if (unlocks.val === "PASSIVE" && unlocks.state === DropDownState.ON) { + return isPassiveUnlocked; + } else if (unlocks.val === "PASSIVE" && unlocks.state === DropDownState.EXCLUDE) { + return isStarterProgressable && !isPassiveUnlocked; + } else if (unlocks.val === "PASSIVE" && unlocks.state === DropDownState.UNLOCKABLE) { + return isPassiveUnlockable; + } else if (unlocks.val === "PASSIVE" && unlocks.state === DropDownState.OFF) { + return true; + } + }); + + // Cost Reduction Filter + const isCostReducedByOne = starterData.valueReduction === 1; + const isCostReducedByTwo = starterData.valueReduction === 2; + const isCostReductionUnlockable = this.isValueReductionAvailable(species.speciesId); + const fitsCostReduction = this.filterBar.getVals(DropDownColumn.UNLOCKS).some(unlocks => { + if (unlocks.val === "COST_REDUCTION" && unlocks.state === DropDownState.ON) { + return isCostReducedByOne || isCostReducedByTwo; + } else if (unlocks.val === "COST_REDUCTION" && unlocks.state === DropDownState.ONE) { + return isCostReducedByOne; + } else if (unlocks.val === "COST_REDUCTION" && unlocks.state === DropDownState.TWO) { + return isCostReducedByTwo; + } else if (unlocks.val === "COST_REDUCTION" && unlocks.state === DropDownState.EXCLUDE) { + return isStarterProgressable && !(isCostReducedByOne || isCostReducedByTwo); + } else if (unlocks.val === "COST_REDUCTION" && unlocks.state === DropDownState.UNLOCKABLE) { + return isCostReductionUnlockable; + } else if (unlocks.val === "COST_REDUCTION" && unlocks.state === DropDownState.OFF) { + return true; + } + }); + + // Starter Filter + const isStarter = this.getStarterSpeciesId(species.speciesId) === species.speciesId; + const fitsStarter = this.filterBar.getVals(DropDownColumn.MISC).some(misc => { + if (misc.val === "STARTER" && misc.state === DropDownState.ON) { + return isStarter; + } + if (misc.val === "STARTER" && misc.state === DropDownState.EXCLUDE) { + return !isStarter; + } + if (misc.val === "STARTER" && misc.state === DropDownState.OFF) { + return true; + } + }); + + // Favorite Filter + const isFavorite = this.starterPreferences[species.speciesId]?.favorite ?? false; + const fitsFavorite = this.filterBar.getVals(DropDownColumn.MISC).some(misc => { + if (misc.val === "FAVORITE" && misc.state === DropDownState.ON) { + return isFavorite; + } + if (misc.val === "FAVORITE" && misc.state === DropDownState.EXCLUDE) { + return !isFavorite; + } + if (misc.val === "FAVORITE" && misc.state === DropDownState.OFF) { + return true; + } + }); + + // Ribbon / Classic Win Filter + const hasWon = starterData.classicWinCount > 0; + const hasNotWon = starterData.classicWinCount === 0; + const isUndefined = starterData.classicWinCount === undefined; + const fitsWin = this.filterBar.getVals(DropDownColumn.MISC).some(misc => { + if (misc.val === "WIN" && misc.state === DropDownState.ON) { + return hasWon; + } else if (misc.val === "WIN" && misc.state === DropDownState.EXCLUDE) { + return hasNotWon || isUndefined; + } else if (misc.val === "WIN" && misc.state === DropDownState.OFF) { + return true; + } + }); + + // HA Filter + const speciesHasHiddenAbility = species.abilityHidden !== species.ability1 && species.abilityHidden !== Abilities.NONE; + const hasHA = starterData.abilityAttr & AbilityAttr.ABILITY_HIDDEN; + const fitsHA = this.filterBar.getVals(DropDownColumn.MISC).some(misc => { + if (misc.val === "HIDDEN_ABILITY" && misc.state === DropDownState.ON) { + return hasHA; + } else if (misc.val === "HIDDEN_ABILITY" && misc.state === DropDownState.EXCLUDE) { + return speciesHasHiddenAbility && !hasHA; + } else if (misc.val === "HIDDEN_ABILITY" && misc.state === DropDownState.OFF) { + return true; + } + }); + + // Egg Purchasable Filter + const isEggPurchasable = this.isSameSpeciesEggAvailable(species.speciesId); + const fitsEgg = this.filterBar.getVals(DropDownColumn.MISC).some(misc => { + if (misc.val === "EGG" && misc.state === DropDownState.ON) { + return isEggPurchasable; + } else if (misc.val === "EGG" && misc.state === DropDownState.EXCLUDE) { + return isStarterProgressable && !isEggPurchasable; + } else if (misc.val === "EGG" && misc.state === DropDownState.OFF) { + return true; + } + }); + + // Pokerus Filter + const fitsPokerus = this.filterBar.getVals(DropDownColumn.MISC).some(misc => { + if (misc.val === "POKERUS" && misc.state === DropDownState.ON) { + return this.pokerusSpecies.includes(species); + } else if (misc.val === "POKERUS" && misc.state === DropDownState.EXCLUDE) { + return !this.pokerusSpecies.includes(species); + } else if (misc.val === "POKERUS" && misc.state === DropDownState.OFF) { + return true; + } + }); + + if (fitsName && fitsAbilities && fitsMoves && fitsGen && fitsBiome && fitsType && fitsCaught && fitsPassive && fitsCostReduction && fitsStarter && fitsFavorite && fitsWin && fitsHA && fitsEgg && fitsPokerus) { + this.filteredPokemonData.push(data); + } + }); + + this.starterSelectScrollBar.setTotalRows(Math.max(Math.ceil(this.filteredPokemonData.length / 9), 1)); + this.starterSelectScrollBar.setScrollCursor(0); + + // sort + const sort = this.filterBar.getVals(DropDownColumn.SORT)[0]; + this.filteredPokemonData.sort((a, b) => { + switch (sort.val) { + default: + break; + case SortCriteria.NUMBER: + return (a.species.speciesId - b.species.speciesId) * -sort.dir; + case SortCriteria.COST: + return (a.cost - b.cost) * -sort.dir; + case SortCriteria.CANDY: + const candyCountA = globalScene.gameData.starterData[this.getStarterSpeciesId(a.species.speciesId)].candyCount; + const candyCountB = globalScene.gameData.starterData[this.getStarterSpeciesId(b.species.speciesId)].candyCount; + return (candyCountA - candyCountB) * -sort.dir; + case SortCriteria.IV: + const avgIVsA = globalScene.gameData.dexData[a.species.speciesId].ivs.reduce((a, b) => a + b, 0) / globalScene.gameData.dexData[a.species.speciesId].ivs.length; + const avgIVsB = globalScene.gameData.dexData[b.species.speciesId].ivs.reduce((a, b) => a + b, 0) / globalScene.gameData.dexData[b.species.speciesId].ivs.length; + return (avgIVsA - avgIVsB) * -sort.dir; + case SortCriteria.NAME: + return a.species.name.localeCompare(b.species.name) * -sort.dir; + case SortCriteria.CAUGHT: + return (globalScene.gameData.dexData[a.species.speciesId].caughtCount - globalScene.gameData.dexData[b.species.speciesId].caughtCount) * -sort.dir; + case SortCriteria.HATCHED: + return (globalScene.gameData.dexData[this.getStarterSpeciesId(a.species.speciesId)].hatchedCount - globalScene.gameData.dexData[this.getStarterSpeciesId(b.species.speciesId)].hatchedCount) * -sort.dir; + } + return 0; + }); + + this.filteredIndices = this.filteredPokemonData.map(c => c.species.speciesId); + + this.updateScroll(); + }; + + updateScroll = () => { + const maxColumns = 9; + const onScreenFirstIndex = this.scrollCursor * maxColumns; + + this.starterSelectScrollBar.setScrollCursor(this.scrollCursor); + + this.pokerusCursorObjs.forEach(cursorObj => cursorObj.setVisible(false)); + + let pokerusCursorIndex = 0; + this.pokemonContainers.forEach((container, i) => { + + const i_data = i + onScreenFirstIndex; + + if (i_data >= this.filteredPokemonData.length) { + container.setVisible(false); + } else { + container.setVisible(true); + + const data = this.filteredPokemonData[i_data]; + const props = data.props; + + container.setSpecies(data.species, props); + + const starterSprite = container.icon as Phaser.GameObjects.Sprite; + starterSprite.setTexture(data.species.getIconAtlasKey(props.formIndex, props.shiny, props.variant), container.species.getIconId(props.female!, props.formIndex, props.shiny, props.variant)); + container.checkIconId(props.female, props.formIndex, props.shiny, props.variant); + + const speciesId = data.species.speciesId; + const dexEntry = globalScene.gameData.dexData[speciesId]; + const caughtAttr = dexEntry.caughtAttr & globalScene.gameData.dexData[this.getStarterSpeciesId(speciesId)].caughtAttr & data.species.getFullUnlocksData(); + + if ((caughtAttr & data.species.getFullUnlocksData()) || globalScene.dexForDevs) { + container.icon.clearTint(); + } else if (dexEntry.seenAttr) { + container.icon.setTint(0x808080); + } else { + container.icon.setTint(0); + } + + if (data.eggMove1) { + container.eggMove1Icon.setVisible(true); + } else { + container.eggMove1Icon.setVisible(false); + } + if (data.eggMove2) { + container.eggMove2Icon.setVisible(true); + } else { + container.eggMove2Icon.setVisible(false); + } + if (data.tmMove1) { + container.tmMove1Icon.setVisible(true); + } else { + container.tmMove1Icon.setVisible(false); + } + if (data.tmMove2) { + container.tmMove2Icon.setVisible(true); + } else { + container.tmMove2Icon.setVisible(false); + } + if (data.passive1) { + container.passive1Icon.setVisible(true); + } else { + container.passive1Icon.setVisible(false); + } + if (data.passive2) { + container.passive2Icon.setVisible(true); + } else { + container.passive2Icon.setVisible(false); + } + + if (this.showDecorations) { + + if (this.pokerusSpecies.includes(data.species)) { + this.pokerusCursorObjs[pokerusCursorIndex].setPosition(container.x - 1, container.y + 1); + this.pokerusCursorObjs[pokerusCursorIndex].setVisible(true); + pokerusCursorIndex++; + } + + this.updateStarterValueLabel(container); + + container.label.setVisible(true); + const speciesVariants = speciesId && caughtAttr & DexAttr.SHINY + ? [ DexAttr.DEFAULT_VARIANT, DexAttr.VARIANT_2, DexAttr.VARIANT_3 ].filter(v => !!(caughtAttr & v)) + : []; + for (let v = 0; v < 3; v++) { + const hasVariant = speciesVariants.length > v; + container.shinyIcons[v].setVisible(hasVariant); + if (hasVariant) { + container.shinyIcons[v].setTint(getVariantTint(speciesVariants[v] === DexAttr.DEFAULT_VARIANT ? 0 : speciesVariants[v] === DexAttr.VARIANT_2 ? 1 : 2)); + } + } + + container.starterPassiveBgs.setVisible(!!globalScene.gameData.starterData[this.getStarterSpeciesId(speciesId)].passiveAttr); + container.hiddenAbilityIcon.setVisible(!!caughtAttr && !!(globalScene.gameData.starterData[this.getStarterSpeciesId(speciesId)].abilityAttr & 4)); + container.classicWinIcon.setVisible(globalScene.gameData.starterData[this.getStarterSpeciesId(speciesId)].classicWinCount > 0); + container.favoriteIcon.setVisible(this.starterPreferences[speciesId]?.favorite ?? false); + + // 'Candy Icon' mode + if (globalScene.candyUpgradeDisplay === 0) { + + if (!starterColors[this.getStarterSpeciesId(speciesId)]) { + // Default to white if no colors are found + starterColors[this.getStarterSpeciesId(speciesId)] = [ "ffffff", "ffffff" ]; + } + + // Set the candy colors + container.candyUpgradeIcon.setTint(argbFromRgba(rgbHexToRgba(starterColors[this.getStarterSpeciesId(speciesId)][0]))); + container.candyUpgradeOverlayIcon.setTint(argbFromRgba(rgbHexToRgba(starterColors[this.getStarterSpeciesId(speciesId)][1]))); + + } else if (globalScene.candyUpgradeDisplay === 1) { + container.candyUpgradeIcon.setVisible(false); + container.candyUpgradeOverlayIcon.setVisible(false); + } + } else { + container.label.setVisible(false); + for (let v = 0; v < 3; v++) { + container.shinyIcons[v].setVisible(false); + } + container.starterPassiveBgs.setVisible(false); + container.hiddenAbilityIcon.setVisible(false); + container.classicWinIcon.setVisible(false); + container.favoriteIcon.setVisible(false); + + container.candyUpgradeIcon.setVisible(false); + container.candyUpgradeOverlayIcon.setVisible(false); + } + } + }); + }; + + setCursor(cursor: number): boolean { + let changed = false; + this.oldCursor = this.cursor; + + if (this.filterMode) { + changed = this.filterBarCursor !== cursor; + this.filterBarCursor = cursor; + this.filterBar.setCursor(cursor); + } else if (this.filterTextMode) { + changed = this.filterTextCursor !== cursor; + this.filterTextCursor = cursor; + this.filterText.setCursor(cursor); + } else { + cursor = Math.max(Math.min(this.pokemonContainers.length - 1, cursor), 0); + changed = super.setCursor(cursor); + + const pos = calcStarterPosition(cursor); + this.cursorObj.setPosition(pos.x - 1, pos.y + 1); + + const species = this.pokemonContainers[cursor]?.species; + + if (species) { + this.setSpecies(species); + return true; + } + } + + return changed; + } + + setFilterMode(filterMode: boolean): boolean { + this.cursorObj.setVisible(!filterMode); + this.filterBar.cursorObj.setVisible(filterMode); + this.pokemonSprite.setVisible(false); + this.showFormTrayIconElement.setVisible(false); + this.showFormTrayLabel.setVisible(false); + + if (filterMode !== this.filterMode) { + this.filterMode = filterMode; + this.setCursor(filterMode ? this.filterBarCursor : this.cursor); + if (filterMode) { + this.setSpecies(null); + } + return true; + } + return false; + } + + setFilterTextMode(filterTextMode: boolean): boolean { + this.cursorObj.setVisible(!filterTextMode); + this.filterText.cursorObj.setVisible(filterTextMode); + this.pokemonSprite.setVisible(false); + this.showFormTrayIconElement.setVisible(false); + this.showFormTrayLabel.setVisible(false); + + if (filterTextMode !== this.filterTextMode) { + this.filterTextMode = filterTextMode; + this.setCursor(filterTextMode ? this.filterTextCursor : this.cursor); + if (filterTextMode) { + this.setSpecies(null); + } + return true; + } + return false; + } + + openFormTray(species: PokemonSpecies): boolean { + + this.trayForms = species.forms.filter(f => !f.isUnobtainable); + + this.trayNumIcons = this.trayForms.length; + this.trayRows = Math.floor(this.trayNumIcons / 9) + (this.trayNumIcons % 9 === 0 ? 0 : 1); + this.trayColumns = Math.min(this.trayNumIcons, 9); + + const maxColumns = 9; + const boxCursor = this.cursor; + const boxCursorY = Math.floor(boxCursor / maxColumns); + const boxCursorX = boxCursor - boxCursorY * 9; + const spaceBelow = 9 - 1 - boxCursorY; + const spaceRight = 9 - boxCursorX; + const boxPos = calcStarterPosition(this.cursor); + const goUp = this.trayRows <= spaceBelow - 1 ? 0 : 1; + const goLeft = this.trayColumns <= spaceRight ? 0 : 1; + + this.trayBg.setSize(13 + this.trayColumns * 17, 8 + this.trayRows * 18); + this.formTrayContainer.setX( + (goLeft ? boxPos.x - 18 * (this.trayColumns - spaceRight) : boxPos.x) - 3 + ); + this.formTrayContainer.setY( + goUp ? boxPos.y - this.trayBg.height : boxPos.y + 17 + ); + + const dexEntry = globalScene.gameData.dexData[species.speciesId]; + const dexAttr = this.getCurrentDexProps(species.speciesId); + const props = this.getSanitizedProps(globalScene.gameData.getSpeciesDexAttrProps(this.lastSpecies, dexAttr)); + + this.trayContainers = []; + this.trayForms.map((f, index) => { + const isFormCaught = dexEntry ? (dexEntry.caughtAttr & species.getFullUnlocksData() & globalScene.gameData.getFormAttr(f.formIndex ?? 0)) > 0n : false; + const isFormSeen = dexEntry ? (dexEntry.seenAttr & globalScene.gameData.getFormAttr(f.formIndex ?? 0)) > 0n : false; + const formContainer = new PokedexMonContainer(species, { formIndex: f.formIndex, female: props.female, shiny: props.shiny, variant: props.variant }); + this.iconAnimHandler.addOrUpdate(formContainer.icon, PokemonIconAnimMode.NONE); + // Setting tint, for all saves some caught forms may only show up as seen + if (isFormCaught || globalScene.dexForDevs) { + formContainer.icon.clearTint(); + } else if (isFormSeen) { + formContainer.icon.setTint(0x808080); + } else { + formContainer.icon.setTint(0); + } + formContainer.setPosition(5 + (index % 9) * 18, 4 + Math.floor(index / 9) * 17); + this.formTrayContainer.add(formContainer); + this.trayContainers.push(formContainer); + }); + + this.showingTray = true; + + this.setTrayCursor(0); + + this.formTrayContainer.setVisible(true); + + this.showFormTrayIconElement.setVisible(false); + this.showFormTrayLabel.setVisible(false); + + return true; + } + + closeFormTray(): boolean { + + this.trayContainers.forEach(obj => { + this.formTrayContainer.remove(obj, true); // Removes from container and destroys it + }); + + this.trayContainers = []; + this.formTrayContainer.setVisible(false); + this.showingTray = false; + + this.setSpeciesDetails(this.lastSpecies); + return true; + } + + setTrayCursor(cursor: number): boolean { + if (!this.showingTray) { + return false; + } + + cursor = Phaser.Math.Clamp(this.trayContainers.length - 1, cursor, 0); + const changed = this.trayCursor !== cursor; + if (changed) { + this.trayCursor = cursor; + } + + this.trayCursorObj.setPosition(5 + (cursor % 9) * 18, 4 + Math.floor(cursor / 9) * 17); + + const species = this.lastSpecies; + const formIndex = this.trayForms[cursor].formIndex; + + this.setSpeciesDetails(species, { formIndex: formIndex }); + + return changed; + } + + getFriendship(speciesId: number) { + let currentFriendship = globalScene.gameData.starterData[this.getStarterSpeciesId(speciesId)].friendship; + if (!currentFriendship || currentFriendship === undefined) { + currentFriendship = 0; + } + + const friendshipCap = getStarterValueFriendshipCap(speciesStarterCosts[speciesId]); + + return { currentFriendship, friendshipCap }; + } + + startIconAnimation(cursor: number) { + const container = this.pokemonContainers[cursor]; + const icon = container.icon; + if (this.isUpgradeAnimationEnabled()) { + globalScene.tweens.getTweensOf(icon).forEach(tween => tween.pause()); + // Reset the position of the icon + icon.x = -2; + icon.y = 2; + } + // Initiates the small up and down idle animation + this.iconAnimHandler.addOrUpdate(icon, PokemonIconAnimMode.PASSIVE); + } + + stopIconAnimation(cursor: number) { + const container = this.pokemonContainers[cursor]; + if (container) { + const lastSpeciesIcon = container.icon; + const dexAttr = this.getCurrentDexProps(container.species.speciesId); + const props = this.getSanitizedProps(globalScene.gameData.getSpeciesDexAttrProps(container.species, dexAttr)); + this.checkIconId(lastSpeciesIcon, container.species, props.female, props.formIndex, props.shiny, props.variant); + this.iconAnimHandler.addOrUpdate(lastSpeciesIcon, PokemonIconAnimMode.NONE); + // Resume the animation for the previously selected species + globalScene.tweens.getTweensOf(lastSpeciesIcon).forEach(tween => tween.resume()); + } + } + + setSpecies(species: PokemonSpecies | null) { + + this.speciesStarterDexEntry = species ? globalScene.gameData.dexData[species.speciesId] : null; + + if (!species && globalScene.ui.getTooltip().visible) { + globalScene.ui.hideTooltip(); + } + + if (this.lastSpecies) { + this.stopIconAnimation(this.oldCursor); + } + + if (species) { + this.lastSpecies = species; + } + + if (species && (this.speciesStarterDexEntry?.seenAttr || this.speciesStarterDexEntry?.caughtAttr || globalScene.dexForDevs)) { + + this.pokemonNumberText.setText(i18next.t("pokedexUiHandler:pokemonNumber") + padInt(species.speciesId, 4)); + + this.pokemonNameText.setText(species.name); + + if (this.speciesStarterDexEntry?.caughtAttr || globalScene.dexForDevs) { + + this.startIconAnimation(this.cursor); + + const speciesForm = getPokemonSpeciesForm(species.speciesId, 0); + this.setTypeIcons(speciesForm.type1, speciesForm.type2); + + this.setSpeciesDetails(species, {}); + + this.pokemonSprite.clearTint(); + + this.type1Icon.clearTint(); + this.type2Icon.clearTint(); + } else { + this.type1Icon.setVisible(true); + this.type2Icon.setVisible(true); + + this.setSpeciesDetails(species); + this.pokemonSprite.setTint(0x808080); + } + } else { + this.pokemonNumberText.setText(species ? i18next.t("pokedexUiHandler:pokemonNumber") + padInt(species.speciesId, 4) : ""); + this.pokemonNameText.setText(species ? "???" : ""); + this.pokemonFormText.setText(""); + this.type1Icon.setVisible(false); + this.type2Icon.setVisible(false); + if (species) { + this.pokemonSprite.setTint(0x000000); + this.setSpeciesDetails(species, {}); + } + } + } + + setSpeciesDetails(species: PokemonSpecies, options: SpeciesDetails = {}): void { + let { shiny, formIndex, female, variant } = options; + + // We will only update the sprite if there is a change to form, shiny/variant + // or gender for species with gender sprite differences + const shouldUpdateSprite = true; + + if (species?.forms?.find(f => f.formKey === "female")) { + if (female !== undefined) { + formIndex = female ? 1 : 0; + } else if (formIndex !== undefined) { + female = formIndex === 1; + } + } + + this.pokemonSprite.setVisible(false); + + if (this.assetLoadCancelled) { + this.assetLoadCancelled.value = true; + this.assetLoadCancelled = null; + } + + if (species) { + const dexEntry = globalScene.gameData.dexData[species.speciesId]; + const caughtAttr = dexEntry.caughtAttr & globalScene.gameData.dexData[this.getStarterSpeciesId(species.speciesId)].caughtAttr & species.getFullUnlocksData(); + + if (caughtAttr) { + const props = this.getSanitizedProps(globalScene.gameData.getSpeciesDexAttrProps(species, this.getCurrentDexProps(species.speciesId))); + + if (shiny === undefined) { + shiny = props.shiny; + } + if (formIndex === undefined) { + formIndex = props.formIndex; + } + if (female === undefined) { + female = props.female; + } + if (variant === undefined) { + variant = props.variant; + } + } + + const isFormCaught = dexEntry ? (caughtAttr & globalScene.gameData.getFormAttr(formIndex ?? 0)) > 0n : false; + const isFormSeen = dexEntry ? (dexEntry.seenAttr & globalScene.gameData.getFormAttr(formIndex ?? 0)) > 0n : false; + + const assetLoadCancelled = new BooleanHolder(false); + this.assetLoadCancelled = assetLoadCancelled; + + if (shouldUpdateSprite) { + species.loadAssets(female!, formIndex, shiny, variant, true).then(() => { // TODO: is this bang correct? + 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(true); + }); + } else { + this.pokemonSprite.setVisible(!(this.filterMode || this.filterTextMode)); + } + + if (isFormCaught || globalScene.dexForDevs) { + this.pokemonSprite.clearTint(); + } else if (isFormSeen) { + this.pokemonSprite.setTint(0x808080); + } else { + this.pokemonSprite.setTint(0); + } + + if (isFormCaught || isFormSeen || globalScene.dexForDevs) { + // TODO: change this once forms are refactored + if (normalForm.includes(species.speciesId) && !formIndex) { + this.pokemonFormText.setText(""); + } else { + this.pokemonFormText.setText(species.getFormNameToDisplay(formIndex, false)); + } + } else { + this.pokemonFormText.setText(""); + } + + if (isFormCaught || isFormSeen || globalScene.dexForDevs) { + const speciesForm = getPokemonSpeciesForm(species.speciesId, formIndex ?? 0); // TODO: always selecting the first form + this.setTypeIcons(speciesForm.type1, speciesForm.type2); + } else { + this.setTypeIcons(null, null); + } + + if (species?.forms?.filter(f => !f.isUnobtainable).length > 1) { + if (!this.showingTray) { + this.showFormTrayIconElement.setVisible(true); + this.showFormTrayLabel.setVisible(true); + } + this.canShowFormTray = true; + } else { + this.showFormTrayIconElement.setVisible(false); + this.showFormTrayLabel.setVisible(false); + this.canShowFormTray = false; + } + + } else { + this.setTypeIcons(null, null); + } + + } + + setTypeIcons(type1: Type | null, type2: Type | null): void { + if (type1 !== null) { + this.type1Icon.setVisible(true); + this.type1Icon.setFrame(Type[type1].toLowerCase()); + } else { + this.type1Icon.setVisible(false); + } + if (type2 !== null) { + this.type2Icon.setVisible(true); + this.type2Icon.setFrame(Type[type2].toLowerCase()); + } else { + this.type2Icon.setVisible(false); + } + } + + updateStarterValueLabel(starter: PokedexMonContainer): void { + const speciesId = starter.species.speciesId; + const baseStarterValue = speciesStarterCosts[speciesId]; + const starterValue = globalScene.gameData.getSpeciesStarterValue(this.getStarterSpeciesId(speciesId)); + starter.cost = starterValue; + let valueStr = starterValue.toString(); + if (valueStr.startsWith("0.")) { + valueStr = valueStr.slice(1); + } + starter.label.setText(valueStr); + let textStyle: TextStyle; + switch (baseStarterValue - starterValue) { + case 0: + textStyle = TextStyle.WINDOW; + break; + case 1: + case 0.5: + textStyle = TextStyle.SUMMARY_BLUE; + break; + default: + textStyle = TextStyle.SUMMARY_GOLD; + break; + } + if (baseStarterValue - starterValue > 0) { + starter.label.setColor(this.getTextColor(textStyle)); + starter.label.setShadowColor(this.getTextColor(textStyle, true)); + } + } + + tryExit(): boolean { + this.blockInput = true; + const ui = this.getUi(); + + const cancel = () => { + ui.setMode(Mode.POKEDEX, "refresh"); + this.clearText(); + this.blockInput = false; + }; + ui.showText(i18next.t("pokedexUiHandler:confirmExit"), null, () => { + ui.setModeWithoutClear(Mode.CONFIRM, () => { + ui.setMode(Mode.POKEDEX, "refresh"); + this.clearText(); + this.clear(); + ui.revertMode(); + }, cancel, null, null, 19); + }); + + return true; + } + + + /** + * Creates a temporary dex attr props that will be used to + * display the correct shiny, variant, and form based on the StarterPreferences + * + * @param speciesId the id of the species to get props for + * @returns the dex props + */ + getCurrentDexProps(speciesId: number): bigint { + let props = 0n; + const species = allSpecies.find(sp => sp.speciesId === speciesId); + const caughtAttr = globalScene.gameData.dexData[speciesId].caughtAttr & globalScene.gameData.dexData[this.getStarterSpeciesId(speciesId)].caughtAttr & (species?.getFullUnlocksData() ?? 0n); + + /* this checks the gender of the pokemon; this works by checking a) that the starter preferences for the species exist, and if so, is it female. If so, it'll add DexAttr.FEMALE to our temp props + * It then checks b) if the caughtAttr for the pokemon is female and NOT male - this means that the ONLY gender we've gotten is female, and we need to add DexAttr.FEMALE to our temp props + * If neither of these pass, we add DexAttr.MALE to our temp props + */ + if (this.starterPreferences[speciesId]?.female || ((caughtAttr & DexAttr.FEMALE) > 0n && (caughtAttr & DexAttr.MALE) === 0n)) { + props += DexAttr.FEMALE; + } else { + props += DexAttr.MALE; + } + /* This part is very similar to above, but instead of for gender, it checks for shiny within starter preferences. + * If they're not there, it enables shiny state by default if any shiny was caught + */ + if (this.starterPreferences[speciesId]?.shiny || ((caughtAttr & DexAttr.SHINY) > 0n && this.starterPreferences[speciesId]?.shiny !== false)) { + props += DexAttr.SHINY; + if (this.starterPreferences[speciesId]?.variant !== undefined) { + props += BigInt(Math.pow(2, this.starterPreferences[speciesId]?.variant)) * DexAttr.DEFAULT_VARIANT; + } else { + /* This calculates the correct variant if there's no starter preferences for it. + * This gets the highest tier variant that you've caught and adds it to the temp props + */ + if ((caughtAttr & DexAttr.VARIANT_3) > 0) { + props += DexAttr.VARIANT_3; + } else if ((caughtAttr & DexAttr.VARIANT_2) > 0) { + props += DexAttr.VARIANT_2; + } else { + props += DexAttr.DEFAULT_VARIANT; + } + } + } else { + props += DexAttr.NON_SHINY; + props += DexAttr.DEFAULT_VARIANT; // we add the default variant here because non shiny versions are listed as default variant + } + if (this.starterPreferences[speciesId]?.form) { // this checks for the form of the pokemon + props += BigInt(Math.pow(2, this.starterPreferences[speciesId]?.form)) * DexAttr.DEFAULT_FORM; + } else { + // Get the first unlocked form + props += globalScene.gameData.getFormAttr(globalScene.gameData.getFormIndex(caughtAttr)); + } + + return props; + } + + override destroy(): void { + this.pokemonContainers = []; + this.filteredPokemonData = []; + } + + clearText() { + this.starterSelectMessageBoxContainer.setVisible(false); + super.clearText(); + } + + clear(): void { + super.clear(); + + this.cursor = -1; + this.oldCursor = -1; + globalScene.ui.hideTooltip(); + + this.starterSelectContainer.setVisible(false); + this.blockInput = false; + } + + checkIconId(icon: Phaser.GameObjects.Sprite, species: PokemonSpecies, female: boolean, formIndex: number, shiny: boolean, variant: number) { + if (icon.frame.name !== species.getIconId(female, formIndex, shiny, variant)) { + 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)); + } + } +} diff --git a/src/ui/pokemon-hatch-info-container.ts b/src/ui/pokemon-hatch-info-container.ts index 494855d20fa..a9b8e260b34 100644 --- a/src/ui/pokemon-hatch-info-container.ts +++ b/src/ui/pokemon-hatch-info-container.ts @@ -1,5 +1,4 @@ import PokemonInfoContainer from "#app/ui/pokemon-info-container"; -import BattleScene from "#app/battle-scene"; import { Gender } from "#app/data/gender"; import { Type } from "#enums/type"; import * as Utils from "#app/utils"; @@ -9,9 +8,10 @@ import { allMoves } from "#app/data/move"; import { Species } from "#enums/species"; import { getEggTierForSpecies } from "#app/data/egg"; import { starterColors } from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { argbFromRgba } from "@material/material-color-utilities"; -import { EggHatchData } from "#app/data/egg-hatch-data"; -import { PlayerPokemon } from "#app/field/pokemon"; +import type { EggHatchData } from "#app/data/egg-hatch-data"; +import type { PlayerPokemon } from "#app/field/pokemon"; import { getPokemonSpeciesForm } from "#app/data/pokemon-species"; /** @@ -32,8 +32,8 @@ export default class PokemonHatchInfoContainer extends PokemonInfoContainer { private pokemonCandyOverlayIcon: Phaser.GameObjects.Sprite; private pokemonCandyCountText: Phaser.GameObjects.Text; - constructor(scene: BattleScene, listContainer : Phaser.GameObjects.Container, x: number = 115, y: number = 9,) { - super(scene, x, y); + constructor(listContainer : Phaser.GameObjects.Container, x: number = 115, y: number = 9,) { + super(x, y); this.pokemonListContainer = listContainer; } @@ -41,37 +41,37 @@ export default class PokemonHatchInfoContainer extends PokemonInfoContainer { super.setup(); super.changeToEggSummaryLayout(); - this.currentPokemonSprite = this.scene.add.sprite(54, 80, "pkmn__sub"); + this.currentPokemonSprite = globalScene.add.sprite(54, 80, "pkmn__sub"); this.currentPokemonSprite.setScale(0.8); - this.currentPokemonSprite.setPipeline(this.scene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], ignoreTimeTint: true }); + this.currentPokemonSprite.setPipeline(globalScene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], ignoreTimeTint: true }); this.pokemonListContainer.add(this.currentPokemonSprite); // setup name and number - this.pokemonNumberText = addTextObject(this.scene, 80, 107.5, "0000", TextStyle.SUMMARY, { fontSize: 74 }); + this.pokemonNumberText = addTextObject(80, 107.5, "0000", TextStyle.SUMMARY, { fontSize: 74 }); this.pokemonNumberText.setOrigin(0, 0); this.pokemonListContainer.add(this.pokemonNumberText); - this.pokemonNameText = addTextObject(this.scene, 7, 107.5, "", TextStyle.SUMMARY, { fontSize: 74 }); + this.pokemonNameText = addTextObject(7, 107.5, "", TextStyle.SUMMARY, { fontSize: 74 }); this.pokemonNameText.setOrigin(0, 0); this.pokemonListContainer.add(this.pokemonNameText); // setup egg icon and candy count - this.pokemonHatchedIcon = this.scene.add.sprite(-5, 90, "egg_icons"); + this.pokemonHatchedIcon = globalScene.add.sprite(-5, 90, "egg_icons"); this.pokemonHatchedIcon.setOrigin(0, 0.2); this.pokemonHatchedIcon.setScale(0.8); this.pokemonListContainer.add(this.pokemonHatchedIcon); - this.pokemonCandyIcon = this.scene.add.sprite(4.5, 40, "candy"); + this.pokemonCandyIcon = globalScene.add.sprite(4.5, 40, "candy"); this.pokemonCandyIcon.setScale(0.5); this.pokemonCandyIcon.setOrigin(0, 0); this.pokemonListContainer.add(this.pokemonCandyIcon); - this.pokemonCandyOverlayIcon = this.scene.add.sprite(4.5, 40, "candy_overlay"); + this.pokemonCandyOverlayIcon = globalScene.add.sprite(4.5, 40, "candy_overlay"); this.pokemonCandyOverlayIcon.setScale(0.5); this.pokemonCandyOverlayIcon.setOrigin(0, 0); this.pokemonListContainer.add(this.pokemonCandyOverlayIcon); - this.pokemonCandyCountText = addTextObject(this.scene, 14, 40, "x0", TextStyle.SUMMARY, { fontSize: "56px" }); + this.pokemonCandyCountText = addTextObject(14, 40, "x0", TextStyle.SUMMARY, { fontSize: "56px" }); this.pokemonCandyCountText.setOrigin(0, 0); this.pokemonListContainer.add(this.pokemonCandyCountText); @@ -79,17 +79,17 @@ export default class PokemonHatchInfoContainer extends PokemonInfoContainer { this.pokemonEggMoveContainers = []; this.pokemonEggMoveBgs = []; this.pokemonEggMoveLabels = []; - this.pokemonEggMovesContainer = this.scene.add.container(0, 200); + this.pokemonEggMovesContainer = globalScene.add.container(0, 200); this.pokemonEggMovesContainer.setVisible(false); this.pokemonEggMovesContainer.setScale(0.5); for (let m = 0; m < 4; m++) { - const eggMoveContainer = this.scene.add.container(0, 0 + 6 * m); + const eggMoveContainer = globalScene.add.container(0, 0 + 6 * m); - const eggMoveBg = this.scene.add.nineslice(70, 0, "type_bgs", "unknown", 92, 14, 2, 2, 2, 2); + const eggMoveBg = globalScene.add.nineslice(70, 0, "type_bgs", "unknown", 92, 14, 2, 2, 2, 2); eggMoveBg.setOrigin(1, 0); - const eggMoveLabel = addTextObject(this.scene, 70 - eggMoveBg.width / 2, 0, "???", TextStyle.PARTY); + const eggMoveLabel = addTextObject(70 - eggMoveBg.width / 2, 0, "???", TextStyle.PARTY); eggMoveLabel.setOrigin(0.5, 0); this.pokemonEggMoveBgs.push(eggMoveBg); @@ -126,9 +126,9 @@ export default class PokemonHatchInfoContainer extends PokemonInfoContainer { const shiny = pokemon.shiny; const variant = pokemon.variant; this.currentPokemonSprite.setVisible(false); - species.loadAssets(this.scene, female, formIndex, shiny, variant, true).then(() => { + species.loadAssets(female, formIndex, shiny, variant, true).then(() => { - getPokemonSpeciesForm(species.speciesId, pokemon.formIndex).cry(this.scene); + getPokemonSpeciesForm(species.speciesId, pokemon.formIndex).cry(); this.currentPokemonSprite.play(species.getSpriteKey(female, formIndex, shiny, variant)); this.currentPokemonSprite.setPipelineData("shiny", shiny); this.currentPokemonSprite.setPipelineData("variant", variant); @@ -156,7 +156,7 @@ export default class PokemonHatchInfoContainer extends PokemonInfoContainer { this.pokemonCandyIcon.setVisible(true); this.pokemonCandyOverlayIcon.setTint(argbFromRgba(Utils.rgbHexToRgba(colorScheme[1]))); this.pokemonCandyOverlayIcon.setVisible(true); - this.pokemonCandyCountText.setText(`x${this.scene.gameData.starterData[species.speciesId].candyCount}`); + this.pokemonCandyCountText.setText(`x${globalScene.gameData.starterData[species.speciesId].candyCount}`); this.pokemonCandyCountText.setVisible(true); this.pokemonNumberText.setText(Utils.padInt(species.speciesId, 4)); @@ -166,7 +166,7 @@ export default class PokemonHatchInfoContainer extends PokemonInfoContainer { for (let em = 0; em < 4; em++) { const eggMove = hasEggMoves ? allMoves[speciesEggMoves[species.speciesId][em]] : null; - const eggMoveUnlocked = eggMove && this.scene.gameData.starterData[species.speciesId].eggMoves & Math.pow(2, em); + const eggMoveUnlocked = eggMove && globalScene.gameData.starterData[species.speciesId].eggMoves & Math.pow(2, em); this.pokemonEggMoveBgs[em].setFrame(Type[eggMove ? eggMove.type : Type.UNKNOWN].toString().toLowerCase()); this.pokemonEggMoveLabels[em].setText(eggMove && eggMoveUnlocked ? eggMove.name : "???"); diff --git a/src/ui/pokemon-icon-anim-handler.ts b/src/ui/pokemon-icon-anim-handler.ts index c7a24f69200..010d23315f2 100644 --- a/src/ui/pokemon-icon-anim-handler.ts +++ b/src/ui/pokemon-icon-anim-handler.ts @@ -1,4 +1,4 @@ -import BattleScene from "../battle-scene"; +import { globalScene } from "#app/global-scene"; import * as Utils from "../utils"; export enum PokemonIconAnimMode { @@ -13,7 +13,7 @@ export default class PokemonIconAnimHandler { private icons: Map; private toggled: boolean; - setup(scene: BattleScene): void { + setup(): void { this.icons = new Map(); this.toggled = false; @@ -26,7 +26,7 @@ export default class PokemonIconAnimHandler { i.y += delta * (this.toggled ? 1 : -1); } }; - scene.tweens.addCounter({ + globalScene.tweens.addCounter({ duration: Utils.fixedInt(200), from: 0, to: 1, diff --git a/src/ui/pokemon-info-container.ts b/src/ui/pokemon-info-container.ts index e0d432265a3..eda5ac3f580 100644 --- a/src/ui/pokemon-info-container.ts +++ b/src/ui/pokemon-info-container.ts @@ -1,23 +1,23 @@ import { getVariantTint } from "#app/data/variant"; -import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; -import BattleScene from "../battle-scene"; +import type BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; +import { globalScene } from "#app/global-scene"; import { Gender, getGenderColor, getGenderSymbol } from "../data/gender"; import { getNatureName } from "../data/nature"; import { Type } from "#enums/type"; -import Pokemon from "../field/pokemon"; +import type Pokemon from "../field/pokemon"; import i18next from "i18next"; -import { DexAttr, DexEntry, StarterDataEntry } from "../system/game-data"; +import type { DexEntry, StarterDataEntry } from "../system/game-data"; +import { DexAttr } from "../system/game-data"; import * as Utils from "../utils"; import ConfirmUiHandler from "./confirm-ui-handler"; import { StatsContainer } from "./stats-container"; import { TextStyle, addBBCodeTextObject, addTextObject, getTextColor } from "./text"; import { addWindow } from "./ui-theme"; -import { Species } from "#enums/species"; interface LanguageSetting { infoContainerTextSize: string; - infoContainerLabelXPos?: integer; - infoContainerTextXPos?: integer; + infoContainerLabelXPos?: number; + infoContainerTextXPos?: number; } const languageSettings: { [key: string]: LanguageSetting } = { @@ -57,8 +57,8 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { public shown: boolean; - constructor(scene: BattleScene, x: number = 372, y: number = 66) { - super(scene, x, y); + constructor(x: number = 372, y: number = 66) { + super(globalScene, x, y); this.initialX = x; } @@ -67,11 +67,11 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { const currentLanguage = i18next.resolvedLanguage!; // TODO: is this bang correct? const langSettingKey = Object.keys(languageSettings).find(lang => currentLanguage?.includes(lang))!; // TODO: is this bang correct? const textSettings = languageSettings[langSettingKey]; - this.infoBg = addWindow(this.scene, 0, 0, this.infoWindowWidth, 132); + this.infoBg = addWindow(0, 0, this.infoWindowWidth, 132); this.infoBg.setOrigin(0.5, 0.5); this.infoBg.setName("window-info-bg"); - this.pokemonMovesContainer = this.scene.add.container(6, 14); + this.pokemonMovesContainer = globalScene.add.container(6, 14); this.pokemonMovesContainer.setName("pkmn-moves"); this.movesContainerInitialX = this.pokemonMovesContainer.x; @@ -80,26 +80,26 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { this.pokemonMoveBgs = []; this.pokemonMoveLabels = []; - const movesBg = addWindow(this.scene, 0, 0, 58, 52); + const movesBg = addWindow(0, 0, 58, 52); movesBg.setOrigin(1, 0); movesBg.setName("window-moves-bg"); this.pokemonMovesContainer.add(movesBg); - const movesLabel = addTextObject(this.scene, -movesBg.width / 2, 6, i18next.t("pokemonInfoContainer:moveset"), TextStyle.WINDOW, { fontSize: "64px" }); + const movesLabel = addTextObject(-movesBg.width / 2, 6, i18next.t("pokemonInfoContainer:moveset"), TextStyle.WINDOW, { fontSize: "64px" }); movesLabel.setOrigin(0.5, 0); movesLabel.setName("text-moves"); this.pokemonMovesContainer.add(movesLabel); for (let m = 0; m < 4; m++) { - const moveContainer = this.scene.add.container(-6, 18 + 7 * m); + const moveContainer = globalScene.add.container(-6, 18 + 7 * m); moveContainer.setScale(0.5); moveContainer.setName("move"); - const moveBg = this.scene.add.nineslice(0, 0, "type_bgs", "unknown", 92, 14, 2, 2, 2, 2); + const moveBg = globalScene.add.nineslice(0, 0, "type_bgs", "unknown", 92, 14, 2, 2, 2, 2); moveBg.setOrigin(1, 0); moveBg.setName("nineslice-move-bg"); - const moveLabel = addTextObject(this.scene, -moveBg.width / 2, 0, "-", TextStyle.PARTY); + const moveLabel = addTextObject(-moveBg.width / 2, 0, "-", TextStyle.PARTY); moveLabel.setOrigin(0.5, 0); moveLabel.setName("text-move-label"); @@ -115,7 +115,7 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { this.add(this.pokemonMovesContainer); - this.statsContainer = new StatsContainer(this.scene, -48, -64, true); + this.statsContainer = new StatsContainer(-48, -64, true); this.add(this.infoBg); this.add(this.statsContainer); @@ -127,62 +127,62 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { // The font size should be set by language const infoContainerTextSize = textSettings?.infoContainerTextSize || "64px"; - this.pokemonFormLabelText = addTextObject(this.scene, infoContainerLabelXPos, 19, i18next.t("pokemonInfoContainer:form"), TextStyle.WINDOW, { fontSize: infoContainerTextSize }); + this.pokemonFormLabelText = addTextObject(infoContainerLabelXPos, 19, i18next.t("pokemonInfoContainer:form"), TextStyle.WINDOW, { fontSize: infoContainerTextSize }); this.pokemonFormLabelText.setOrigin(1, 0); this.pokemonFormLabelText.setVisible(false); this.add(this.pokemonFormLabelText); - this.pokemonFormText = addTextObject(this.scene, infoContainerTextXPos, 19, "", TextStyle.WINDOW, { fontSize: infoContainerTextSize }); + this.pokemonFormText = addTextObject(infoContainerTextXPos, 19, "", TextStyle.WINDOW, { fontSize: infoContainerTextSize }); this.pokemonFormText.setOrigin(0, 0); this.pokemonFormText.setVisible(false); this.add(this.pokemonFormText); - this.pokemonGenderText = addTextObject(this.scene, -42, -61, "", TextStyle.WINDOW, { fontSize: infoContainerTextSize }); + this.pokemonGenderText = addTextObject(-42, -61, "", TextStyle.WINDOW, { fontSize: infoContainerTextSize }); this.pokemonGenderText.setOrigin(0, 0); this.pokemonGenderText.setVisible(false); this.pokemonGenderText.setName("text-pkmn-gender"); this.add(this.pokemonGenderText); - this.pokemonGenderNewText = addTextObject(this.scene, -36, -61, "", TextStyle.WINDOW, { fontSize: "64px" }); + this.pokemonGenderNewText = addTextObject(-36, -61, "", TextStyle.WINDOW, { fontSize: "64px" }); this.pokemonGenderNewText.setOrigin(0, 0); this.pokemonGenderNewText.setVisible(false); this.pokemonGenderNewText.setName("text-pkmn-new-gender"); this.add(this.pokemonGenderNewText); - this.pokemonAbilityLabelText = addTextObject(this.scene, infoContainerLabelXPos, 29, i18next.t("pokemonInfoContainer:ability"), TextStyle.WINDOW, { fontSize: infoContainerTextSize }); + this.pokemonAbilityLabelText = addTextObject(infoContainerLabelXPos, 29, i18next.t("pokemonInfoContainer:ability"), TextStyle.WINDOW, { fontSize: infoContainerTextSize }); this.pokemonAbilityLabelText.setOrigin(1, 0); this.pokemonAbilityLabelText.setName("text-pkmn-ability-label"); this.add(this.pokemonAbilityLabelText); - this.pokemonAbilityText = addTextObject(this.scene, infoContainerTextXPos, 29, "", TextStyle.WINDOW, { fontSize: infoContainerTextSize }); + this.pokemonAbilityText = addTextObject(infoContainerTextXPos, 29, "", TextStyle.WINDOW, { fontSize: infoContainerTextSize }); this.pokemonAbilityText.setOrigin(0, 0); this.pokemonAbilityText.setName("text-pkmn-ability"); this.add(this.pokemonAbilityText); - this.pokemonNatureLabelText = addTextObject(this.scene, infoContainerLabelXPos, 39, i18next.t("pokemonInfoContainer:nature"), TextStyle.WINDOW, { fontSize: infoContainerTextSize }); + this.pokemonNatureLabelText = addTextObject(infoContainerLabelXPos, 39, i18next.t("pokemonInfoContainer:nature"), TextStyle.WINDOW, { fontSize: infoContainerTextSize }); this.pokemonNatureLabelText.setOrigin(1, 0); this.pokemonNatureLabelText.setName("text-pkmn-nature-label"); this.add(this.pokemonNatureLabelText); - this.pokemonNatureText = addBBCodeTextObject(this.scene, infoContainerTextXPos, 39, "", TextStyle.WINDOW, { fontSize: infoContainerTextSize, lineSpacing: 3, maxLines: 2 }); + this.pokemonNatureText = addBBCodeTextObject(infoContainerTextXPos, 39, "", TextStyle.WINDOW, { fontSize: infoContainerTextSize, lineSpacing: 3, maxLines: 2 }); this.pokemonNatureText.setOrigin(0, 0); this.pokemonNatureText.setName("text-pkmn-nature"); this.add(this.pokemonNatureText); - this.pokemonShinyIcon = this.scene.add.image(-43.5, 48.5, "shiny_star"); + this.pokemonShinyIcon = globalScene.add.image(-43.5, 48.5, "shiny_star"); this.pokemonShinyIcon.setOrigin(0, 0); this.pokemonShinyIcon.setScale(0.75); this.pokemonShinyIcon.setInteractive(new Phaser.Geom.Rectangle(0, 0, 12, 15), Phaser.Geom.Rectangle.Contains); this.pokemonShinyIcon.setName("img-pkmn-shiny-icon"); this.add(this.pokemonShinyIcon); - this.pokemonShinyNewIcon = addTextObject(this.scene, this.pokemonShinyIcon.x + 12, this.pokemonShinyIcon.y, "", TextStyle.WINDOW, { fontSize: infoContainerTextSize }); + this.pokemonShinyNewIcon = addTextObject(this.pokemonShinyIcon.x + 12, this.pokemonShinyIcon.y, "", TextStyle.WINDOW, { fontSize: infoContainerTextSize }); this.pokemonShinyNewIcon.setOrigin(0, 0); this.pokemonShinyNewIcon.setName("text-pkmn-shiny-new-icon"); this.add(this.pokemonShinyNewIcon); this.pokemonShinyNewIcon.setVisible(false); - this.pokemonFusionShinyIcon = this.scene.add.image(this.pokemonShinyIcon.x, this.pokemonShinyIcon.y, "shiny_star_2"); + this.pokemonFusionShinyIcon = globalScene.add.image(this.pokemonShinyIcon.x, this.pokemonShinyIcon.y, "shiny_star_2"); this.pokemonFusionShinyIcon.setOrigin(0, 0); this.pokemonFusionShinyIcon.setScale(0.75); this.pokemonFusionShinyIcon.setName("img-pkmn-fusion-shiny-icon"); @@ -194,10 +194,10 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { show(pokemon: Pokemon, showMoves: boolean = false, speedMultiplier: number = 1, dexEntry?: DexEntry, starterEntry?: StarterDataEntry, eggInfo = false): Promise { return new Promise(resolve => { if (!dexEntry) { - dexEntry = pokemon.scene.gameData.dexData[pokemon.species.speciesId]; + dexEntry = globalScene.gameData.dexData[pokemon.species.speciesId]; } if (!starterEntry) { - starterEntry = pokemon.scene.gameData.starterData[pokemon.species.getRootSpeciesId()]; + starterEntry = globalScene.gameData.starterData[pokemon.species.getRootSpeciesId()]; } const caughtAttr = BigInt(dexEntry.caughtAttr); @@ -209,31 +209,15 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { const newGender = BigInt(1 << pokemon.gender) * DexAttr.MALE; this.pokemonGenderNewText.setText("(+)"); - this.pokemonGenderNewText.setColor(getTextColor(TextStyle.SUMMARY_BLUE, false, this.scene.uiTheme)); - this.pokemonGenderNewText.setShadowColor(getTextColor(TextStyle.SUMMARY_BLUE, true, this.scene.uiTheme)); + this.pokemonGenderNewText.setColor(getTextColor(TextStyle.SUMMARY_BLUE, false, globalScene.uiTheme)); + this.pokemonGenderNewText.setShadowColor(getTextColor(TextStyle.SUMMARY_BLUE, true, globalScene.uiTheme)); this.pokemonGenderNewText.setVisible((newGender & caughtAttr) === BigInt(0)); } else { this.pokemonGenderNewText.setVisible(false); this.pokemonGenderText.setVisible(false); } - const formKey = (pokemon.species?.forms?.[pokemon.formIndex!]?.formKey); - const formText = Utils.capitalizeString(formKey, "-", false, false) || ""; - const speciesName = Utils.capitalizeString(Species[pokemon.species.speciesId], "_", true, false); - - let formName = ""; - if (pokemon.species.speciesId === Species.ARCEUS) { - formName = i18next.t(`pokemonInfo:Type.${formText?.toUpperCase()}`); - } else { - const i18key = `pokemonForm:${speciesName}${formText}`; - if (i18next.exists(i18key)) { - formName = i18next.t(i18key); - } else { - const rootSpeciesName = Utils.capitalizeString(Species[pokemon.species.getRootSpeciesId()], "_", true, false); - const i18RootKey = `pokemonForm:${rootSpeciesName}${formText}`; - formName = i18next.exists(i18RootKey) ? i18next.t(i18RootKey) : formText; - } - } + const formName = pokemon.species.getFormNameToDisplay(pokemon.formIndex); if (formName) { this.pokemonFormLabelText.setVisible(true); @@ -241,18 +225,18 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { const newForm = BigInt(1 << pokemon.formIndex) * DexAttr.DEFAULT_FORM; if ((newForm & caughtAttr) === BigInt(0)) { - this.pokemonFormLabelText.setColor(getTextColor(TextStyle.SUMMARY_BLUE, false, this.scene.uiTheme)); - this.pokemonFormLabelText.setShadowColor(getTextColor(TextStyle.SUMMARY_BLUE, true, this.scene.uiTheme)); + this.pokemonFormLabelText.setColor(getTextColor(TextStyle.SUMMARY_BLUE, false, globalScene.uiTheme)); + this.pokemonFormLabelText.setShadowColor(getTextColor(TextStyle.SUMMARY_BLUE, true, globalScene.uiTheme)); } else { - this.pokemonFormLabelText.setColor(getTextColor(TextStyle.WINDOW, false, this.scene.uiTheme)); - this.pokemonFormLabelText.setShadowColor(getTextColor(TextStyle.WINDOW, true, this.scene.uiTheme)); + this.pokemonFormLabelText.setColor(getTextColor(TextStyle.WINDOW, false, globalScene.uiTheme)); + this.pokemonFormLabelText.setShadowColor(getTextColor(TextStyle.WINDOW, true, globalScene.uiTheme)); } this.pokemonFormText.setText(formName.length > this.numCharsBeforeCutoff ? formName.substring(0, this.numCharsBeforeCutoff - 3) + "..." : formName); if (formName.length > this.numCharsBeforeCutoff) { this.pokemonFormText.setInteractive(new Phaser.Geom.Rectangle(0, 0, this.pokemonFormText.width, this.pokemonFormText.height), Phaser.Geom.Rectangle.Contains); - this.pokemonFormText.on("pointerover", () => (this.scene as BattleScene).ui.showTooltip("", formName, true)); - this.pokemonFormText.on("pointerout", () => (this.scene as BattleScene).ui.hideTooltip()); + this.pokemonFormText.on("pointerover", () => globalScene.ui.showTooltip("", formName, true)); + this.pokemonFormText.on("pointerout", () => globalScene.ui.hideTooltip()); } else { this.pokemonFormText.disableInteractive(); } @@ -264,31 +248,31 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { const abilityTextStyle = pokemon.abilityIndex === 2 ? TextStyle.MONEY : TextStyle.WINDOW; this.pokemonAbilityText.setText(pokemon.getAbility(true).name); - this.pokemonAbilityText.setColor(getTextColor(abilityTextStyle, false, this.scene.uiTheme)); - this.pokemonAbilityText.setShadowColor(getTextColor(abilityTextStyle, true, this.scene.uiTheme)); + this.pokemonAbilityText.setColor(getTextColor(abilityTextStyle, false, globalScene.uiTheme)); + this.pokemonAbilityText.setShadowColor(getTextColor(abilityTextStyle, true, globalScene.uiTheme)); // Check if the player owns ability for the root form const playerOwnsThisAbility = pokemon.checkIfPlayerHasAbilityOfStarter(starterEntry.abilityAttr); if (!playerOwnsThisAbility) { - this.pokemonAbilityLabelText.setColor(getTextColor(TextStyle.SUMMARY_BLUE, false, this.scene.uiTheme)); - this.pokemonAbilityLabelText.setShadowColor(getTextColor(TextStyle.SUMMARY_BLUE, true, this.scene.uiTheme)); + this.pokemonAbilityLabelText.setColor(getTextColor(TextStyle.SUMMARY_BLUE, false, globalScene.uiTheme)); + this.pokemonAbilityLabelText.setShadowColor(getTextColor(TextStyle.SUMMARY_BLUE, true, globalScene.uiTheme)); } else { - this.pokemonAbilityLabelText.setColor(getTextColor(TextStyle.WINDOW, false, this.scene.uiTheme)); - this.pokemonAbilityLabelText.setShadowColor(getTextColor(TextStyle.WINDOW, true, this.scene.uiTheme)); + this.pokemonAbilityLabelText.setColor(getTextColor(TextStyle.WINDOW, false, globalScene.uiTheme)); + this.pokemonAbilityLabelText.setShadowColor(getTextColor(TextStyle.WINDOW, true, globalScene.uiTheme)); } - this.pokemonNatureText.setText(getNatureName(pokemon.getNature(), true, false, false, this.scene.uiTheme)); + this.pokemonNatureText.setText(getNatureName(pokemon.getNature(), true, false, false, globalScene.uiTheme)); const dexNatures = dexEntry.natureAttr; const newNature = 1 << (pokemon.nature + 1); if (!(dexNatures & newNature)) { - this.pokemonNatureLabelText.setColor(getTextColor(TextStyle.SUMMARY_BLUE, false, this.scene.uiTheme)); - this.pokemonNatureLabelText.setShadowColor(getTextColor(TextStyle.SUMMARY_BLUE, true, this.scene.uiTheme)); + this.pokemonNatureLabelText.setColor(getTextColor(TextStyle.SUMMARY_BLUE, false, globalScene.uiTheme)); + this.pokemonNatureLabelText.setShadowColor(getTextColor(TextStyle.SUMMARY_BLUE, true, globalScene.uiTheme)); } else { - this.pokemonNatureLabelText.setColor(getTextColor(TextStyle.WINDOW, false, this.scene.uiTheme)); - this.pokemonNatureLabelText.setShadowColor(getTextColor(TextStyle.WINDOW, true, this.scene.uiTheme)); + this.pokemonNatureLabelText.setColor(getTextColor(TextStyle.WINDOW, false, globalScene.uiTheme)); + this.pokemonNatureLabelText.setShadowColor(getTextColor(TextStyle.WINDOW, true, globalScene.uiTheme)); } const isFusion = pokemon.isFusion(); @@ -302,22 +286,22 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { const shinyDescriptor = doubleShiny || baseVariant ? `${baseVariant === 2 ? i18next.t("common:epicShiny") : baseVariant === 1 ? i18next.t("common:rareShiny") : i18next.t("common:commonShiny")}${doubleShiny ? `/${pokemon.fusionVariant === 2 ? i18next.t("common:epicShiny") : pokemon.fusionVariant === 1 ? i18next.t("common:rareShiny") : i18next.t("common:commonShiny")}` : ""}` : ""; - this.pokemonShinyIcon.on("pointerover", () => (this.scene as BattleScene).ui.showTooltip("", `${i18next.t("common:shinyOnHover")}${shinyDescriptor ? ` (${shinyDescriptor})` : ""}`, true)); - this.pokemonShinyIcon.on("pointerout", () => (this.scene as BattleScene).ui.hideTooltip()); + this.pokemonShinyIcon.on("pointerover", () => globalScene.ui.showTooltip("", `${i18next.t("common:shinyOnHover")}${shinyDescriptor ? ` (${shinyDescriptor})` : ""}`, true)); + this.pokemonShinyIcon.on("pointerout", () => globalScene.ui.hideTooltip()); const newShiny = BigInt(1 << (pokemon.shiny ? 1 : 0)); const newVariant = BigInt(1 << (pokemon.variant + 4)); this.pokemonShinyNewIcon.setText("(+)"); - this.pokemonShinyNewIcon.setColor(getTextColor(TextStyle.SUMMARY_BLUE, false, this.scene.uiTheme)); - this.pokemonShinyNewIcon.setShadowColor(getTextColor(TextStyle.SUMMARY_BLUE, true, this.scene.uiTheme)); + this.pokemonShinyNewIcon.setColor(getTextColor(TextStyle.SUMMARY_BLUE, false, globalScene.uiTheme)); + this.pokemonShinyNewIcon.setShadowColor(getTextColor(TextStyle.SUMMARY_BLUE, true, globalScene.uiTheme)); const newShinyOrVariant = ((newShiny & caughtAttr) === BigInt(0)) || ((newVariant & caughtAttr) === BigInt(0)); this.pokemonShinyNewIcon.setVisible(!!newShinyOrVariant); } else if ((caughtAttr & DexAttr.NON_SHINY) === BigInt(0) && ((caughtAttr & DexAttr.SHINY) === DexAttr.SHINY)) { //If the player has *only* caught any shiny variant of this species, not a non-shiny this.pokemonShinyNewIcon.setVisible(true); this.pokemonShinyNewIcon.setText("(+)"); - this.pokemonShinyNewIcon.setColor(getTextColor(TextStyle.SUMMARY_BLUE, false, this.scene.uiTheme)); - this.pokemonShinyNewIcon.setShadowColor(getTextColor(TextStyle.SUMMARY_BLUE, true, this.scene.uiTheme)); + this.pokemonShinyNewIcon.setColor(getTextColor(TextStyle.SUMMARY_BLUE, false, globalScene.uiTheme)); + this.pokemonShinyNewIcon.setShadowColor(getTextColor(TextStyle.SUMMARY_BLUE, true, globalScene.uiTheme)); } else { this.pokemonShinyNewIcon.setVisible(false); } @@ -329,12 +313,12 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { } const starterSpeciesId = pokemon.species.getRootSpeciesId(); - const originalIvs: integer[] | null = eggInfo ? (dexEntry.caughtAttr ? dexEntry.ivs : null) : (this.scene.gameData.dexData[starterSpeciesId].caughtAttr - ? this.scene.gameData.dexData[starterSpeciesId].ivs : null); + const originalIvs: number[] | null = eggInfo ? (dexEntry.caughtAttr ? dexEntry.ivs : null) : (globalScene.gameData.dexData[starterSpeciesId].caughtAttr + ? globalScene.gameData.dexData[starterSpeciesId].ivs : null); this.statsContainer.updateIvs(pokemon.ivs, originalIvs!); // TODO: is this bang correct? if (!eggInfo) { - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this, duration: Utils.fixedInt(Math.floor(750 / speedMultiplier)), ease: "Cubic.easeInOut", @@ -345,7 +329,7 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { }); if (showMoves) { - this.scene.tweens.add({ + globalScene.tweens.add({ delay: Utils.fixedInt(Math.floor(325 / speedMultiplier)), targets: this.pokemonMovesContainer, duration: Utils.fixedInt(Math.floor(325 / speedMultiplier)), @@ -365,7 +349,7 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { this.setVisible(true); this.shown = true; - this.scene.hideEnemyModifierBar(); + globalScene.hideEnemyModifierBar(); }); } @@ -402,7 +386,7 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { makeRoomForConfirmUi(speedMultiplier: number = 1, fromCatch: boolean = false): Promise { const xPosition = fromCatch ? this.initialX - this.infoWindowWidth - 65 : this.initialX - this.infoWindowWidth - ConfirmUiHandler.windowWidth; return new Promise(resolve => { - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this, duration: Utils.fixedInt(Math.floor(150 / speedMultiplier)), ease: "Cubic.easeInOut", @@ -417,18 +401,18 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { hide(speedMultiplier: number = 1): Promise { return new Promise(resolve => { if (!this.shown) { - this.scene.showEnemyModifierBar(); + globalScene.showEnemyModifierBar(); return resolve(); } - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.pokemonMovesContainer, duration: Utils.fixedInt(Math.floor(750 / speedMultiplier)), ease: "Cubic.easeInOut", x: this.movesContainerInitialX }); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this, duration: Utils.fixedInt(Math.floor(750 / speedMultiplier)), ease: "Cubic.easeInOut", @@ -437,8 +421,8 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { this.setVisible(false); this.pokemonShinyIcon.off("pointerover"); this.pokemonShinyIcon.off("pointerout"); - (this.scene as BattleScene).ui.hideTooltip(); - this.scene.showEnemyModifierBar(); + globalScene.ui.hideTooltip(); + globalScene.showEnemyModifierBar(); resolve(); } }); @@ -447,7 +431,3 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { }); } } - -export default interface PokemonInfoContainer { - scene: BattleScene -} diff --git a/src/ui/registration-form-ui-handler.ts b/src/ui/registration-form-ui-handler.ts index 892f78bd1ba..3b229a47c38 100644 --- a/src/ui/registration-form-ui-handler.ts +++ b/src/ui/registration-form-ui-handler.ts @@ -1,9 +1,11 @@ -import { FormModalUiHandler, InputFieldConfig } from "./form-modal-ui-handler"; -import { ModalConfig } from "./modal-ui-handler"; +import type { InputFieldConfig } from "./form-modal-ui-handler"; +import { FormModalUiHandler } from "./form-modal-ui-handler"; +import type { ModalConfig } from "./modal-ui-handler"; import { Mode } from "./ui"; import { TextStyle, addTextObject } from "./text"; import i18next from "i18next"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; +import { globalScene } from "#app/global-scene"; interface LanguageSetting { @@ -78,7 +80,7 @@ export default class RegistrationFormUiHandler extends FormModalUiHandler { }); const warningMessageFontSize = languageSettings[i18next.resolvedLanguage!]?.warningMessageFontSize ?? "42px"; - const label = addTextObject(this.scene, 10, 87, i18next.t("menu:registrationAgeWarning"), TextStyle.TOOLTIP_CONTENT, { fontSize: warningMessageFontSize }); + const label = addTextObject(10, 87, i18next.t("menu:registrationAgeWarning"), TextStyle.TOOLTIP_CONTENT, { fontSize: warningMessageFontSize }); this.modalContainer.add(label); } @@ -92,10 +94,10 @@ export default class RegistrationFormUiHandler extends FormModalUiHandler { // Prevent overlapping overrides on action modification this.submitAction = originalRegistrationAction; this.sanitizeInputs(); - this.scene.ui.setMode(Mode.LOADING, { buttonActions: []}); + globalScene.ui.setMode(Mode.LOADING, { buttonActions: []}); const onFail = error => { - this.scene.ui.setMode(Mode.REGISTRATION_FORM, Object.assign(config, { errorMessage: error?.trim() })); - this.scene.ui.playError(); + globalScene.ui.setMode(Mode.REGISTRATION_FORM, Object.assign(config, { errorMessage: error?.trim() })); + globalScene.ui.playError(); const errorMessageFontSize = languageSettings[i18next.resolvedLanguage!]?.errorMessageFontSize; if (errorMessageFontSize) { this.errorMessage.setFontSize(errorMessageFontSize); diff --git a/src/ui/rename-form-ui-handler.ts b/src/ui/rename-form-ui-handler.ts index 6e4c4c6809d..3004530063e 100644 --- a/src/ui/rename-form-ui-handler.ts +++ b/src/ui/rename-form-ui-handler.ts @@ -1,7 +1,8 @@ -import { FormModalUiHandler, InputFieldConfig } from "./form-modal-ui-handler"; -import { ModalConfig } from "./modal-ui-handler"; +import type { InputFieldConfig } from "./form-modal-ui-handler"; +import { FormModalUiHandler } from "./form-modal-ui-handler"; +import type { ModalConfig } from "./modal-ui-handler"; import i18next from "i18next"; -import { PlayerPokemon } from "#app/field/pokemon"; +import type { PlayerPokemon } from "#app/field/pokemon"; export default class RenameFormUiHandler extends FormModalUiHandler { getModalTitle(config?: ModalConfig): string { diff --git a/src/ui/run-history-ui-handler.ts b/src/ui/run-history-ui-handler.ts index 061f15d0956..2a498f77b8d 100644 --- a/src/ui/run-history-ui-handler.ts +++ b/src/ui/run-history-ui-handler.ts @@ -1,15 +1,15 @@ -import BattleScene from "../battle-scene"; +import { globalScene } from "#app/global-scene"; import { GameModes } from "../game-mode"; import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; import { addWindow } from "./ui-theme"; import * as Utils from "../utils"; -import PokemonData from "../system/pokemon-data"; +import type PokemonData from "../system/pokemon-data"; import MessageUiHandler from "./message-ui-handler"; import i18next from "i18next"; import { Button } from "../enums/buttons"; import { BattleType } from "../battle"; -import { RunEntry } from "../system/game-data"; +import type { RunEntry } from "../system/game-data"; import { PlayerGender } from "#enums/player-gender"; import { TrainerVariant } from "../field/trainer"; import { RunDisplayMode } from "#app/ui/run-info-ui-handler"; @@ -40,34 +40,34 @@ export default class RunHistoryUiHandler extends MessageUiHandler { private runContainerInitialY: number; - constructor(scene: BattleScene) { - super(scene, Mode.RUN_HISTORY); + constructor() { + super(Mode.RUN_HISTORY); } override setup() { const ui = this.getUi(); - this.runSelectContainer = this.scene.add.container(0, 0); + this.runSelectContainer = globalScene.add.container(0, 0); this.runSelectContainer.setVisible(false); ui.add(this.runSelectContainer); - const loadSessionBg = this.scene.add.rectangle(0, 0, this.scene.game.canvas.width / 6, -this.scene.game.canvas.height / 6, 0x006860); + const loadSessionBg = globalScene.add.rectangle(0, 0, globalScene.game.canvas.width / 6, -globalScene.game.canvas.height / 6, 0x006860); loadSessionBg.setOrigin(0, 0); this.runSelectContainer.add(loadSessionBg); - this.runContainerInitialY = -this.scene.game.canvas.height / 6 + 8; + this.runContainerInitialY = -globalScene.game.canvas.height / 6 + 8; - this.runsContainer = this.scene.add.container(8, this.runContainerInitialY); + this.runsContainer = globalScene.add.container(8, this.runContainerInitialY); this.runSelectContainer.add(this.runsContainer); this.runs = []; - this.scene.loadImage("hall_of_fame_red", "ui"); - this.scene.loadImage("hall_of_fame_blue", "ui"); + globalScene.loadImage("hall_of_fame_red", "ui"); + globalScene.loadImage("hall_of_fame_blue", "ui"); // For some reason, the game deletes/unloads the rival sprites. As a result, Run Info cannot access the rival sprites. // The rivals are loaded here to have some way of accessing those sprites. - this.scene.loadAtlas("rival_f", "trainer"); - this.scene.loadAtlas("rival_m", "trainer"); + globalScene.loadAtlas("rival_f", "trainer"); + globalScene.loadAtlas("rival_m", "trainer"); } override show(args: any[]): boolean { @@ -75,7 +75,7 @@ export default class RunHistoryUiHandler extends MessageUiHandler { this.getUi().bringToTop(this.runSelectContainer); this.runSelectContainer.setVisible(true); - this.populateRuns(this.scene).then(() => { + this.populateRuns().then(() => { this.setScrollCursor(0); this.setCursor(0); @@ -105,7 +105,7 @@ export default class RunHistoryUiHandler extends MessageUiHandler { if (button === Button.ACTION) { const cursor = this.cursor + this.scrollCursor; if (this.runs[cursor]) { - this.scene.ui.setOverlayMode(Mode.RUN_INFO, this.runs[cursor].entryData, RunDisplayMode.RUN_HISTORY, true); + globalScene.ui.setOverlayMode(Mode.RUN_INFO, this.runs[cursor].entryData, RunDisplayMode.RUN_HISTORY, true); } else { return false; } @@ -114,7 +114,7 @@ export default class RunHistoryUiHandler extends MessageUiHandler { } else { this.runSelectCallback = null; success = true; - this.scene.ui.revertMode(); + globalScene.ui.revertMode(); } } else if (this.runs.length > 0) { switch (button) { @@ -153,12 +153,11 @@ export default class RunHistoryUiHandler extends MessageUiHandler { /** * This retrieves the player's run history and facilitates the processes necessary for the output display. - * @param scene: BattleScene * Runs are displayed from newest --> oldest in descending order. * In the for loop, each run is processed to create an RunEntryContainer used to display and store the run's unique information */ - private async populateRuns(scene: BattleScene) { - const response = await this.scene.gameData.getRunHistoryData(this.scene); + private async populateRuns() { + const response = await globalScene.gameData.getRunHistoryData(); const timestamps = Object.keys(response); if (timestamps.length === 0) { this.showEmpty(); @@ -170,8 +169,8 @@ export default class RunHistoryUiHandler extends MessageUiHandler { } const entryCount = timestamps.length; for (let s = 0; s < entryCount; s++) { - const entry = new RunEntryContainer(this.scene, response[timestampsNo[s]], s); - this.scene.add.existing(entry); + const entry = new RunEntryContainer(response[timestampsNo[s]], s); + globalScene.add.existing(entry); this.runsContainer.add(entry); this.runs.push(entry); } @@ -184,10 +183,10 @@ export default class RunHistoryUiHandler extends MessageUiHandler { * If the player has no runs saved so far, this creates a giant window labeled empty instead. */ private async showEmpty() { - const emptyWindow = addWindow(this.scene, 0, 0, 304, 165); + const emptyWindow = addWindow(0, 0, 304, 165); this.runsContainer.add(emptyWindow); const emptyWindowCoordinates = emptyWindow.getCenter(); - const emptyText = addTextObject(this.scene, 0, 0, i18next.t("saveSlotSelectUiHandler:empty"), TextStyle.WINDOW, { fontSize: "128px" }); + const emptyText = addTextObject(0, 0, i18next.t("saveSlotSelectUiHandler:empty"), TextStyle.WINDOW, { fontSize: "128px" }); emptyText.setPosition(emptyWindowCoordinates.x - 18, emptyWindowCoordinates.y - 15); this.runsContainer.add(emptyText); } @@ -196,7 +195,7 @@ export default class RunHistoryUiHandler extends MessageUiHandler { const changed = super.setCursor(cursor); if (!this.cursorObj) { - this.cursorObj = this.scene.add.nineslice(0, 0, "select_cursor_highlight_thick", undefined, 296, 46, 6, 6, 6, 6); + this.cursorObj = globalScene.add.nineslice(0, 0, "select_cursor_highlight_thick", undefined, 296, 46, 6, 6, 6, 6); this.cursorObj.setOrigin(0, 0); this.runsContainer.add(this.cursorObj); } @@ -210,7 +209,7 @@ export default class RunHistoryUiHandler extends MessageUiHandler { if (changed) { this.scrollCursor = scrollCursor; this.setCursor(this.cursor); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.runsContainer, y: this.runContainerInitialY - 56 * scrollCursor, duration: Utils.fixedInt(325), @@ -255,8 +254,8 @@ class RunEntryContainer extends Phaser.GameObjects.Container { private slotId: number; public entryData: RunEntry; - constructor(scene: BattleScene, entryData: RunEntry, slotId: number) { - super(scene, 0, slotId * 56); + constructor(entryData: RunEntry, slotId: number) { + super(globalScene, 0, slotId * 56); this.slotId = slotId; this.entryData = entryData; @@ -278,31 +277,31 @@ class RunEntryContainer extends Phaser.GameObjects.Container { private setup(run: RunEntry) { const victory = run.isVictory; - const data = this.scene.gameData.parseSessionData(JSON.stringify(run.entry)); + const data = globalScene.gameData.parseSessionData(JSON.stringify(run.entry)); - const slotWindow = addWindow(this.scene, 0, 0, 304, 52); + const slotWindow = addWindow(0, 0, 304, 52); this.add(slotWindow); // Run Result: Victory if (victory) { - const gameOutcomeLabel = addTextObject(this.scene, 8, 5, `${i18next.t("runHistory:victory")}`, TextStyle.WINDOW); + const gameOutcomeLabel = addTextObject(8, 5, `${i18next.t("runHistory:victory")}`, TextStyle.WINDOW); this.add(gameOutcomeLabel); } else { // Run Result: Defeats - const genderIndex = this.scene.gameData.gender ?? PlayerGender.UNSET; + const genderIndex = globalScene.gameData.gender ?? PlayerGender.UNSET; const genderStr = PlayerGender[genderIndex].toLowerCase(); // Defeats from wild Pokemon battles will show the Pokemon responsible by the text of the run result. if (data.battleType === BattleType.WILD || (data.battleType === BattleType.MYSTERY_ENCOUNTER && !data.trainer)) { - const enemyContainer = this.scene.add.container(8, 5); - const gameOutcomeLabel = addTextObject(this.scene, 0, 0, `${i18next.t("runHistory:defeatedWild", { context: genderStr })}`, TextStyle.WINDOW); + const enemyContainer = globalScene.add.container(8, 5); + const gameOutcomeLabel = addTextObject(0, 0, `${i18next.t("runHistory:defeatedWild", { context: genderStr })}`, TextStyle.WINDOW); enemyContainer.add(gameOutcomeLabel); data.enemyParty.forEach((enemyData, e) => { - const enemyIconContainer = this.scene.add.container(65 + (e * 25), -8); + const enemyIconContainer = globalScene.add.container(65 + (e * 25), -8); enemyIconContainer.setScale(0.75); enemyData.boss = false; enemyData["player"] = true; - const enemy = enemyData.toPokemon(this.scene); - const enemyIcon = this.scene.addPokemonIcon(enemy, 0, 0, 0, 0); - const enemyLevel = addTextObject(this.scene, 32, 20, `${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatLargeNumber(enemy.level, 1000)}`, TextStyle.PARTY, { fontSize: "54px", color: "#f8f8f8" }); + const enemy = enemyData.toPokemon(); + const enemyIcon = globalScene.addPokemonIcon(enemy, 0, 0, 0, 0); + const enemyLevel = addTextObject(32, 20, `${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatLargeNumber(enemy.level, 1000)}`, TextStyle.PARTY, { fontSize: "54px", color: "#f8f8f8" }); enemyLevel.setShadow(0, 0, undefined); enemyLevel.setStroke("#424242", 14); enemyLevel.setOrigin(1, 0); @@ -313,15 +312,15 @@ class RunEntryContainer extends Phaser.GameObjects.Container { }); this.add(enemyContainer); } else if (data.battleType === BattleType.TRAINER || (data.battleType === BattleType.MYSTERY_ENCOUNTER && data.trainer)) { // Defeats from Trainers show the trainer's title and name - const tObj = data.trainer.toTrainer(this.scene); + const tObj = data.trainer.toTrainer(); // Because of the interesting mechanics behind rival names, the rival name and title have to be retrieved differently const RIVAL_TRAINER_ID_THRESHOLD = 375; if (data.trainer.trainerType >= RIVAL_TRAINER_ID_THRESHOLD) { const rivalName = (tObj.variant === TrainerVariant.FEMALE) ? "trainerNames:rival_female" : "trainerNames:rival"; - const gameOutcomeLabel = addTextObject(this.scene, 8, 5, `${i18next.t("runHistory:defeatedRival", { context: genderStr })} ${i18next.t(rivalName)}`, TextStyle.WINDOW); + const gameOutcomeLabel = addTextObject(8, 5, `${i18next.t("runHistory:defeatedRival", { context: genderStr })} ${i18next.t(rivalName)}`, TextStyle.WINDOW); this.add(gameOutcomeLabel); } else { - const gameOutcomeLabel = addTextObject(this.scene, 8, 5, `${i18next.t("runHistory:defeatedTrainer", { context: genderStr })}${tObj.getName(0, true)}`, TextStyle.WINDOW); + const gameOutcomeLabel = addTextObject(8, 5, `${i18next.t("runHistory:defeatedTrainer", { context: genderStr })}${tObj.getName(0, true)}`, TextStyle.WINDOW); this.add(gameOutcomeLabel); } } @@ -330,7 +329,7 @@ class RunEntryContainer extends Phaser.GameObjects.Container { // Game Mode + Waves // Because Endless (Spliced) tends to have the longest name across languages, the line tends to spill into the party icons. // To fix this, the Spliced icon is used to indicate an Endless Spliced run - const gameModeLabel = addTextObject(this.scene, 8, 19, "", TextStyle.WINDOW); + const gameModeLabel = addTextObject(8, 19, "", TextStyle.WINDOW); let mode = ""; switch (data.gameMode) { case GameModes.DAILY: @@ -349,7 +348,7 @@ class RunEntryContainer extends Phaser.GameObjects.Container { } gameModeLabel.appendText(mode, false); if (data.gameMode === GameModes.SPLICED_ENDLESS) { - const splicedIcon = this.scene.add.image(0, 0, "icon_spliced"); + const splicedIcon = globalScene.add.image(0, 0, "icon_spliced"); splicedIcon.setScale(0.75); const coords = gameModeLabel.getTopRight(); splicedIcon.setPosition(coords.x + 5, 27); @@ -362,21 +361,21 @@ class RunEntryContainer extends Phaser.GameObjects.Container { gameModeLabel.appendText(i18next.t("saveSlotSelectUiHandler:wave") + " " + data.waveIndex, false); this.add(gameModeLabel); - const timestampLabel = addTextObject(this.scene, 8, 33, new Date(data.timestamp).toLocaleString(), TextStyle.WINDOW); + const timestampLabel = addTextObject(8, 33, new Date(data.timestamp).toLocaleString(), TextStyle.WINDOW); this.add(timestampLabel); // pokemonIconsContainer holds the run's party Pokemon icons and levels // Icons should be level with each other here, but there are significant number of icons that have a center axis / position far from the norm. // The code here does not account for icon weirdness. - const pokemonIconsContainer = this.scene.add.container(140, 17); + const pokemonIconsContainer = globalScene.add.container(140, 17); data.party.forEach((p: PokemonData, i: number) => { - const iconContainer = this.scene.add.container(26 * i, 0); + const iconContainer = globalScene.add.container(26 * i, 0); iconContainer.setScale(0.75); - const pokemon = p.toPokemon(this.scene); - const icon = this.scene.addPokemonIcon(pokemon, 0, 0, 0, 0); + const pokemon = p.toPokemon(); + const icon = globalScene.addPokemonIcon(pokemon, 0, 0, 0, 0); - const text = addTextObject(this.scene, 32, 20, `${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatLargeNumber(pokemon.level, 1000)}`, TextStyle.PARTY, { fontSize: "54px", color: "#f8f8f8" }); + const text = addTextObject(32, 20, `${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatLargeNumber(pokemon.level, 1000)}`, TextStyle.PARTY, { fontSize: "54px", color: "#f8f8f8" }); text.setShadow(0, 0, undefined); text.setStroke("#424242", 14); text.setOrigin(1, 0); @@ -392,8 +391,3 @@ class RunEntryContainer extends Phaser.GameObjects.Container { this.add(pokemonIconsContainer); } } - -interface RunEntryContainer { - scene: BattleScene; -} - diff --git a/src/ui/run-info-ui-handler.ts b/src/ui/run-info-ui-handler.ts index 071690aee54..bf07374e21a 100644 --- a/src/ui/run-info-ui-handler.ts +++ b/src/ui/run-info-ui-handler.ts @@ -1,13 +1,12 @@ -import BattleScene from "../battle-scene"; import { GameModes } from "../game-mode"; import UiHandler from "./ui-handler"; -import { SessionSaveData } from "../system/game-data"; +import type { SessionSaveData } from "../system/game-data"; import { TextStyle, addTextObject, addBBCodeTextObject, getTextColor } from "./text"; import { Mode } from "./ui"; import { addWindow } from "./ui-theme"; import { getPokeballAtlasKey } from "#app/data/pokeball"; import * as Utils from "../utils"; -import PokemonData from "../system/pokemon-data"; +import type PokemonData from "../system/pokemon-data"; import i18next from "i18next"; import { Button } from "../enums/buttons"; import { BattleType } from "../battle"; @@ -21,11 +20,12 @@ import { TypeColor, TypeShadow } from "#app/enums/color"; import { getNatureStatMultiplier, getNatureName } from "../data/nature"; import { getVariantTint } from "#app/data/variant"; import * as Modifier from "../modifier/modifier"; -import { Species } from "#enums/species"; +import type { Species } from "#enums/species"; import { PlayerGender } from "#enums/player-gender"; import { SettingKeyboard } from "#app/system/settings/settings-keyboard"; import { getBiomeName } from "#app/data/balance/biomes"; -import { MysteryEncounterType } from "#enums/mystery-encounter-type"; +import type { MysteryEncounterType } from "#enums/mystery-encounter-type"; +import { globalScene } from "#app/global-scene"; /** * RunInfoUiMode indicates possible overlays of RunInfoUiHandler. @@ -59,7 +59,7 @@ export default class RunInfoUiHandler extends UiHandler { private runResultContainer: Phaser.GameObjects.Container; private runInfoContainer: Phaser.GameObjects.Container; private partyContainer: Phaser.GameObjects.Container; - private statsBgWidth: integer; + private statsBgWidth: number; private hallofFameContainer: Phaser.GameObjects.Container; private endCardContainer: Phaser.GameObjects.Container; @@ -67,16 +67,16 @@ export default class RunInfoUiHandler extends UiHandler { private partyVisibility: Boolean; private modifiersModule: any; - constructor(scene: BattleScene) { - super(scene, Mode.RUN_INFO); + constructor() { + super(Mode.RUN_INFO); } override async setup() { - this.runContainer = this.scene.add.container(1, -(this.scene.game.canvas.height / 6) + 1); + this.runContainer = globalScene.add.container(1, -(globalScene.game.canvas.height / 6) + 1); // The import of the modifiersModule is loaded here to sidestep async/await issues. this.modifiersModule = Modifier; this.runContainer.setVisible(false); - this.scene.loadImage("encounter_exclaim", "mystery-encounters"); + globalScene.loadImage("encounter_exclaim", "mystery-encounters"); } /** @@ -93,14 +93,14 @@ export default class RunInfoUiHandler extends UiHandler { override show(args: any[]): boolean { super.show(args); - const gameStatsBg = this.scene.add.rectangle(0, 0, this.scene.game.canvas.width, this.scene.game.canvas.height, 0x006860); + const gameStatsBg = globalScene.add.rectangle(0, 0, globalScene.game.canvas.width, globalScene.game.canvas.height, 0x006860); gameStatsBg.setOrigin(0, 0); this.runContainer.add(gameStatsBg); const run = args[0]; this.runDisplayMode = args[1]; if (this.runDisplayMode === RunDisplayMode.RUN_HISTORY) { - this.runInfo = this.scene.gameData.parseSessionData(JSON.stringify(run.entry)); + this.runInfo = globalScene.gameData.parseSessionData(JSON.stringify(run.entry)); this.isVictory = run.isVictory ?? false; } else if (this.runDisplayMode === RunDisplayMode.SESSION_PREVIEW) { this.runInfo = args[0]; @@ -112,11 +112,11 @@ export default class RunInfoUiHandler extends UiHandler { // Creates Header and adds to this.runContainer this.addHeader(); - this.statsBgWidth = ((this.scene.game.canvas.width / 6) - 2) / 3; + this.statsBgWidth = ((globalScene.game.canvas.width / 6) - 2) / 3; // Creates Run Result Container - this.runResultContainer = this.scene.add.container(0, 24); - const runResultWindow = addWindow(this.scene, 0, 0, this.statsBgWidth - 11, 65); + this.runResultContainer = globalScene.add.container(0, 24); + const runResultWindow = addWindow(0, 0, this.statsBgWidth - 11, 65); runResultWindow.setOrigin(0, 0); runResultWindow.setName("Run_Result_Window"); this.runResultContainer.add(runResultWindow); @@ -127,18 +127,18 @@ export default class RunInfoUiHandler extends UiHandler { } // Creates Run Info Container - this.runInfoContainer = this.scene.add.container(0, 89); - const runInfoWindow = addWindow(this.scene, 0, 0, this.statsBgWidth - 11, 90); + this.runInfoContainer = globalScene.add.container(0, 89); + const runInfoWindow = addWindow(0, 0, this.statsBgWidth - 11, 90); const runInfoWindowCoords = runInfoWindow.getBottomRight(); this.runInfoContainer.add(runInfoWindow); this.parseRunInfo(runInfoWindowCoords.x, runInfoWindowCoords.y); // Creates Player Party Container - this.partyContainer = this.scene.add.container(this.statsBgWidth - 10, 23); + this.partyContainer = globalScene.add.container(this.statsBgWidth - 10, 23); this.parsePartyInfo(); this.showParty(true); - this.runContainer.setInteractive(new Phaser.Geom.Rectangle(0, 0, this.scene.game.canvas.width / 6, this.scene.game.canvas.height / 6), Phaser.Geom.Rectangle.Contains); + this.runContainer.setInteractive(new Phaser.Geom.Rectangle(0, 0, globalScene.game.canvas.width / 6, globalScene.game.canvas.height / 6), Phaser.Geom.Rectangle.Contains); this.getUi().bringToTop(this.runContainer); this.runContainer.setVisible(true); @@ -163,25 +163,25 @@ export default class RunInfoUiHandler extends UiHandler { * It does not check if the run has any PokemonHeldItemModifiers though. */ private addHeader() { - const headerBg = addWindow(this.scene, 0, 0, (this.scene.game.canvas.width / 6) - 2, 24); + const headerBg = addWindow(0, 0, (globalScene.game.canvas.width / 6) - 2, 24); headerBg.setOrigin(0, 0); this.runContainer.add(headerBg); if (this.runInfo.modifiers.length !== 0) { const headerBgCoords = headerBg.getTopRight(); - const abilityButtonContainer = this.scene.add.container(0, 0); - const abilityButtonText = addTextObject(this.scene, 8, 0, i18next.t("runHistory:viewHeldItems"), TextStyle.WINDOW, { fontSize:"34px" }); + const abilityButtonContainer = globalScene.add.container(0, 0); + const abilityButtonText = addTextObject(8, 0, i18next.t("runHistory:viewHeldItems"), TextStyle.WINDOW, { fontSize:"34px" }); const gamepadType = this.getUi().getGamepadType(); let abilityButtonElement: Phaser.GameObjects.Sprite; if (gamepadType === "touch") { - abilityButtonElement = new Phaser.GameObjects.Sprite(this.scene, 0, 2, "keyboard", "E.png"); + abilityButtonElement = new Phaser.GameObjects.Sprite(globalScene, 0, 2, "keyboard", "E.png"); } else { - abilityButtonElement = new Phaser.GameObjects.Sprite(this.scene, 0, 2, gamepadType, this.scene.inputController?.getIconForLatestInputRecorded(SettingKeyboard.Button_Cycle_Ability)); + abilityButtonElement = new Phaser.GameObjects.Sprite(globalScene, 0, 2, gamepadType, globalScene.inputController?.getIconForLatestInputRecorded(SettingKeyboard.Button_Cycle_Ability)); } abilityButtonContainer.add([ abilityButtonText, abilityButtonElement ]); abilityButtonContainer.setPosition(headerBgCoords.x - abilityButtonText.displayWidth - abilityButtonElement.displayWidth - 8, 10); this.runContainer.add(abilityButtonContainer); } - const headerText = addTextObject(this.scene, 0, 0, i18next.t("runHistory:runInfo"), TextStyle.SETTINGS_LABEL); + const headerText = addTextObject(0, 0, i18next.t("runHistory:runInfo"), TextStyle.SETTINGS_LABEL); headerText.setOrigin(0, 0); headerText.setPositionRelative(headerBg, 8, 4); this.runContainer.add(headerText); @@ -196,25 +196,25 @@ export default class RunInfoUiHandler extends UiHandler { * */ private async parseRunResult() { - const genderIndex = this.scene.gameData.gender ?? PlayerGender.UNSET; + const genderIndex = globalScene.gameData.gender ?? PlayerGender.UNSET; const genderStr = PlayerGender[genderIndex]; const runResultTextStyle = this.isVictory ? TextStyle.PERFECT_IV : TextStyle.SUMMARY_RED; const runResultTitle = this.isVictory ? i18next.t("runHistory:victory") : i18next.t("runHistory:defeated", { context: genderStr }); - const runResultText = addTextObject(this.scene, 6, 5, `${runResultTitle} - ${i18next.t("saveSlotSelectUiHandler:wave")} ${this.runInfo.waveIndex}`, runResultTextStyle, { fontSize : "65px", lineSpacing: 0.1 }); + const runResultText = addTextObject(6, 5, `${runResultTitle} - ${i18next.t("saveSlotSelectUiHandler:wave")} ${this.runInfo.waveIndex}`, runResultTextStyle, { fontSize : "65px", lineSpacing: 0.1 }); if (this.isVictory) { - const hallofFameInstructionContainer = this.scene.add.container(0, 0); - const shinyButtonText = addTextObject(this.scene, 8, 0, i18next.t("runHistory:viewHallOfFame"), TextStyle.WINDOW, { fontSize:"65px" }); - const formButtonText = addTextObject(this.scene, 8, 12, i18next.t("runHistory:viewEndingSplash"), TextStyle.WINDOW, { fontSize:"65px" }); + const hallofFameInstructionContainer = globalScene.add.container(0, 0); + const shinyButtonText = addTextObject(8, 0, i18next.t("runHistory:viewHallOfFame"), TextStyle.WINDOW, { fontSize:"65px" }); + const formButtonText = addTextObject(8, 12, i18next.t("runHistory:viewEndingSplash"), TextStyle.WINDOW, { fontSize:"65px" }); const gamepadType = this.getUi().getGamepadType(); let shinyButtonElement: Phaser.GameObjects.Sprite; let formButtonElement: Phaser.GameObjects.Sprite; if (gamepadType === "touch") { - shinyButtonElement = new Phaser.GameObjects.Sprite(this.scene, 0, 4, "keyboard", "R.png"); - formButtonElement = new Phaser.GameObjects.Sprite(this.scene, 0, 16, "keyboard", "F.png"); + shinyButtonElement = new Phaser.GameObjects.Sprite(globalScene, 0, 4, "keyboard", "R.png"); + formButtonElement = new Phaser.GameObjects.Sprite(globalScene, 0, 16, "keyboard", "F.png"); } else { - shinyButtonElement = new Phaser.GameObjects.Sprite(this.scene, 0, 4, gamepadType, this.scene.inputController?.getIconForLatestInputRecorded(SettingKeyboard.Button_Cycle_Shiny)); - formButtonElement = new Phaser.GameObjects.Sprite(this.scene, 0, 16, gamepadType, this.scene.inputController?.getIconForLatestInputRecorded(SettingKeyboard.Button_Cycle_Form)); + shinyButtonElement = new Phaser.GameObjects.Sprite(globalScene, 0, 4, gamepadType, globalScene.inputController?.getIconForLatestInputRecorded(SettingKeyboard.Button_Cycle_Shiny)); + formButtonElement = new Phaser.GameObjects.Sprite(globalScene, 0, 16, gamepadType, globalScene.inputController?.getIconForLatestInputRecorded(SettingKeyboard.Button_Cycle_Form)); } hallofFameInstructionContainer.add([ shinyButtonText, shinyButtonElement ]); @@ -227,7 +227,7 @@ export default class RunInfoUiHandler extends UiHandler { this.runResultContainer.add(runResultText); if (!this.isVictory) { - const enemyContainer = this.scene.add.container(0, 0); + const enemyContainer = globalScene.add.container(0, 0); // Wild - Single and Doubles if (this.runInfo.battleType === BattleType.WILD || (this.runInfo.battleType === BattleType.MYSTERY_ENCOUNTER && !this.runInfo.trainer)) { switch (this.runInfo.enemyParty.length) { @@ -255,7 +255,7 @@ export default class RunInfoUiHandler extends UiHandler { * Mystery Encounters contain sprites associated with MEs + the title of the specific ME. */ private parseRunStatus() { - const enemyContainer = this.scene.add.container(0, 0); + const enemyContainer = globalScene.add.container(0, 0); this.runResultContainer.add(enemyContainer); if (this.runInfo.battleType === BattleType.WILD) { if (this.runInfo.enemyParty.length === 1) { @@ -267,13 +267,13 @@ export default class RunInfoUiHandler extends UiHandler { this.showTrainerSprites(enemyContainer); const row_limit = 3; this.runInfo.enemyParty.forEach((p, i) => { - const pokeball = this.scene.add.sprite(0, 0, "pb"); + const pokeball = globalScene.add.sprite(0, 0, "pb"); pokeball.setFrame(getPokeballAtlasKey(p.pokeball)); pokeball.setScale(0.5); pokeball.setPosition(58 + ((i % row_limit) * 8), (i <= 2) ? 18 : 25); enemyContainer.add(pokeball); }); - const trainerObj = this.runInfo.trainer.toTrainer(this.scene); + const trainerObj = this.runInfo.trainer.toTrainer(); const RIVAL_TRAINER_ID_THRESHOLD = 375; let trainerName = ""; if (this.runInfo.trainer.trainerType >= RIVAL_TRAINER_ID_THRESHOLD) { @@ -282,21 +282,21 @@ export default class RunInfoUiHandler extends UiHandler { trainerName = trainerObj.getName(0, true); } const boxString = i18next.t(trainerObj.variant !== TrainerVariant.DOUBLE ? "battle:trainerAppeared" : "battle:trainerAppearedDouble", { trainerName: trainerName }).replace(/\n/g, " "); - const descContainer = this.scene.add.container(0, 0); - const textBox = addTextObject(this.scene, 0, 0, boxString, TextStyle.WINDOW, { fontSize : "35px", wordWrap: { width: 200 }}); + const descContainer = globalScene.add.container(0, 0); + const textBox = addTextObject(0, 0, boxString, TextStyle.WINDOW, { fontSize : "35px", wordWrap: { width: 200 }}); descContainer.add(textBox); descContainer.setPosition(55, 32); this.runResultContainer.add(descContainer); } else if (this.runInfo.battleType === BattleType.MYSTERY_ENCOUNTER) { - const encounterExclaim = this.scene.add.sprite(0, 0, "encounter_exclaim"); + const encounterExclaim = globalScene.add.sprite(0, 0, "encounter_exclaim"); encounterExclaim.setPosition(34, 26); encounterExclaim.setScale(0.65); - const subSprite = this.scene.add.sprite(56, -106, "pkmn__sub"); + const subSprite = globalScene.add.sprite(56, -106, "pkmn__sub"); subSprite.setScale(0.65); subSprite.setPosition(34, 46); - const mysteryEncounterTitle = i18next.t(this.scene.getMysteryEncounter(this.runInfo.mysteryEncounterType as MysteryEncounterType, true).localizationKey + ":title"); - const descContainer = this.scene.add.container(0, 0); - const textBox = addTextObject(this.scene, 0, 0, mysteryEncounterTitle, TextStyle.WINDOW, { fontSize : "45px", wordWrap: { width: 160 }}); + const mysteryEncounterTitle = i18next.t(globalScene.getMysteryEncounter(this.runInfo.mysteryEncounterType as MysteryEncounterType, true).localizationKey + ":title"); + const descContainer = globalScene.add.container(0, 0); + const textBox = addTextObject(0, 0, mysteryEncounterTitle, TextStyle.WINDOW, { fontSize : "45px", wordWrap: { width: 160 }}); descContainer.add(textBox); descContainer.setPosition(47, 37); this.runResultContainer.add([ encounterExclaim, subSprite, descContainer ]); @@ -306,10 +306,10 @@ export default class RunInfoUiHandler extends UiHandler { const windowCenterX = runResultWindow.getTopCenter().x; const windowBottomY = runResultWindow.getBottomCenter().y; - const runStatusText = addTextObject(this.scene, windowCenterX, 5, `${i18next.t("saveSlotSelectUiHandler:wave")} ${this.runInfo.waveIndex}`, TextStyle.WINDOW, { fontSize : "60px", lineSpacing: 0.1 }); + const runStatusText = addTextObject(windowCenterX, 5, `${i18next.t("saveSlotSelectUiHandler:wave")} ${this.runInfo.waveIndex}`, TextStyle.WINDOW, { fontSize : "60px", lineSpacing: 0.1 }); runStatusText.setOrigin(0.5, 0); - const currentBiomeText = addTextObject(this.scene, windowCenterX, windowBottomY - 5, `${getBiomeName(this.runInfo.arena.biome)}`, TextStyle.WINDOW, { fontSize: "60px" }); + const currentBiomeText = addTextObject(windowCenterX, windowBottomY - 5, `${getBiomeName(this.runInfo.arena.biome)}`, TextStyle.WINDOW, { fontSize: "60px" }); currentBiomeText.setOrigin(0.5, 1); this.runResultContainer.add([ runStatusText, currentBiomeText ]); @@ -321,16 +321,16 @@ export default class RunInfoUiHandler extends UiHandler { * @param enemyContainer - container holding enemy visual and level information */ private parseWildSingleDefeat(enemyContainer: Phaser.GameObjects.Container) { - const enemyIconContainer = this.scene.add.container(0, 0); + const enemyIconContainer = globalScene.add.container(0, 0); const enemyData = this.runInfo.enemyParty[0]; const bossStatus = enemyData.boss; enemyData.boss = false; enemyData["player"] = true; //addPokemonIcon() throws an error if the Pokemon used is a boss - const enemy = enemyData.toPokemon(this.scene); - const enemyIcon = this.scene.addPokemonIcon(enemy, 0, 0, 0, 0); + const enemy = enemyData.toPokemon(); + const enemyIcon = globalScene.addPokemonIcon(enemy, 0, 0, 0, 0); const enemyLevelStyle = bossStatus ? TextStyle.PARTY_RED : TextStyle.PARTY; - const enemyLevel = addTextObject(this.scene, 36, 26, `${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatLargeNumber(enemy.level, 1000)}`, enemyLevelStyle, { fontSize: "44px", color: "#f8f8f8" }); + const enemyLevel = addTextObject(36, 26, `${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatLargeNumber(enemy.level, 1000)}`, enemyLevelStyle, { fontSize: "44px", color: "#f8f8f8" }); enemyLevel.setShadow(0, 0, undefined); enemyLevel.setStroke("#424242", 14); enemyLevel.setOrigin(1, 0); @@ -348,13 +348,13 @@ export default class RunInfoUiHandler extends UiHandler { */ private parseWildDoubleDefeat(enemyContainer: Phaser.GameObjects.Container) { this.runInfo.enemyParty.forEach((enemyData, e) => { - const enemyIconContainer = this.scene.add.container(0, 0); + const enemyIconContainer = globalScene.add.container(0, 0); const bossStatus = enemyData.boss; enemyData.boss = false; enemyData["player"] = true; - const enemy = enemyData.toPokemon(this.scene); - const enemyIcon = this.scene.addPokemonIcon(enemy, 0, 0, 0, 0); - const enemyLevel = addTextObject(this.scene, 36, 26, `${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatLargeNumber(enemy.level, 1000)}`, bossStatus ? TextStyle.PARTY_RED : TextStyle.PARTY, { fontSize: "44px", color: "#f8f8f8" }); + const enemy = enemyData.toPokemon(); + const enemyIcon = globalScene.addPokemonIcon(enemy, 0, 0, 0, 0); + const enemyLevel = addTextObject(36, 26, `${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatLargeNumber(enemy.level, 1000)}`, bossStatus ? TextStyle.PARTY_RED : TextStyle.PARTY, { fontSize: "44px", color: "#f8f8f8" }); enemyLevel.setShadow(0, 0, undefined); enemyLevel.setStroke("#424242", 14); enemyLevel.setOrigin(1, 0); @@ -374,16 +374,16 @@ export default class RunInfoUiHandler extends UiHandler { */ private showTrainerSprites(enemyContainer: Phaser.GameObjects.Container) { // Creating the trainer sprite and adding it to enemyContainer - const tObj = this.runInfo.trainer.toTrainer(this.scene); + const tObj = this.runInfo.trainer.toTrainer(); // Loads trainer assets on demand, as they are not loaded by default in the scene - tObj.config.loadAssets(this.scene, this.runInfo.trainer.variant).then(() => { + tObj.config.loadAssets(this.runInfo.trainer.variant).then(() => { const tObjSpriteKey = tObj.config.getSpriteKey(this.runInfo.trainer.variant === TrainerVariant.FEMALE, false); - const tObjSprite = this.scene.add.sprite(0, 5, tObjSpriteKey); + const tObjSprite = globalScene.add.sprite(0, 5, tObjSpriteKey); if (this.runInfo.trainer.variant === TrainerVariant.DOUBLE && !tObj.config.doubleOnly) { - const doubleContainer = this.scene.add.container(5, 8); + const doubleContainer = globalScene.add.container(5, 8); tObjSprite.setPosition(-3, -3); const tObjPartnerSpriteKey = tObj.config.getSpriteKey(true, true); - const tObjPartnerSprite = this.scene.add.sprite(5, -3, tObjPartnerSpriteKey); + const tObjPartnerSprite = globalScene.add.sprite(5, -3, tObjPartnerSpriteKey); // Double Trainers have smaller sprites than Single Trainers if (this.runDisplayMode === RunDisplayMode.RUN_HISTORY) { tObjPartnerSprite.setScale(0.20); @@ -420,44 +420,21 @@ export default class RunInfoUiHandler extends UiHandler { private parseTrainerDefeat(enemyContainer: Phaser.GameObjects.Container) { // Loads and adds trainer sprites to the UI this.showTrainerSprites(enemyContainer); - // Determining which Terastallize Modifier belongs to which Pokemon - // Creates a dictionary {PokemonId: TeraShardType} - const teraPokemon = {}; - this.runInfo.enemyModifiers.forEach((m) => { - const modifier = m.toModifier(this.scene, this.modifiersModule[m.className]); - if (modifier instanceof Modifier.TerastallizeModifier) { - const teraDetails = modifier?.getArgs(); - const pkmnId = teraDetails[0]; - teraPokemon[pkmnId] = teraDetails[1]; - } - }); // Creates the Pokemon icons + level information and adds it to enemyContainer // 2 Rows x 3 Columns - const enemyPartyContainer = this.scene.add.container(0, 0); + const enemyPartyContainer = globalScene.add.container(0, 0); this.runInfo.enemyParty.forEach((enemyData, e) => { const pokemonRowHeight = Math.floor(e / 3); - const enemyIconContainer = this.scene.add.container(0, 0); + const enemyIconContainer = globalScene.add.container(0, 0); enemyIconContainer.setScale(0.6); const isBoss = enemyData.boss; enemyData.boss = false; enemyData["player"] = true; - const enemy = enemyData.toPokemon(this.scene); - const enemyIcon = this.scene.addPokemonIcon(enemy, 0, 0, 0, 0); - // Applying Terastallizing Type tint to Pokemon icon - // If the Pokemon is a fusion, it has two sprites and so, the tint has to be applied to each icon separately - const enemySprite1 = enemyIcon.list[0] as Phaser.GameObjects.Sprite; - const enemySprite2 = (enemyIcon.list.length > 1) ? enemyIcon.list[1] as Phaser.GameObjects.Sprite : undefined; - if (teraPokemon[enemyData.id]) { - const teraTint = getTypeRgb(teraPokemon[enemyData.id]); - const teraColor = new Phaser.Display.Color(teraTint[0], teraTint[1], teraTint[2]); - enemySprite1.setTint(teraColor.color); - if (enemySprite2) { - enemySprite2.setTint(teraColor.color); - } - } + const enemy = enemyData.toPokemon(); + const enemyIcon = globalScene.addPokemonIcon(enemy, 0, 0, 0, 0); enemyIcon.setPosition(39 * (e % 3) + 5, (35 * pokemonRowHeight)); - const enemyLevel = addTextObject(this.scene, 43 * (e % 3), (27 * (pokemonRowHeight + 1)), `${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatLargeNumber(enemy.level, 1000)}`, isBoss ? TextStyle.PARTY_RED : TextStyle.PARTY, { fontSize: "54px" }); + const enemyLevel = addTextObject(43 * (e % 3), (27 * (pokemonRowHeight + 1)), `${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatLargeNumber(enemy.level, 1000)}`, isBoss ? TextStyle.PARTY_RED : TextStyle.PARTY, { fontSize: "54px" }); enemyLevel.setShadow(0, 0, undefined); enemyLevel.setStroke("#424242", 14); enemyLevel.setOrigin(0, 0); @@ -480,7 +457,7 @@ export default class RunInfoUiHandler extends UiHandler { private async parseRunInfo(windowX: number, windowY: number) { // Parsing and displaying the mode. // In the future, parsing Challenges + Challenge Rules may have to be reworked as PokeRogue adds additional challenges and users can stack these challenges in various ways. - const modeText = addBBCodeTextObject(this.scene, 7, 0, "", TextStyle.WINDOW, { fontSize : "50px", lineSpacing:3 }); + const modeText = addBBCodeTextObject(7, 0, "", TextStyle.WINDOW, { fontSize : "50px", lineSpacing:3 }); modeText.setPosition(7, 5); modeText.appendText(i18next.t("runHistory:mode") + ": ", false); switch (this.runInfo.gameMode) { @@ -514,27 +491,27 @@ export default class RunInfoUiHandler extends UiHandler { } // If the player achieves a personal best in Endless, the mode text will be tinted similarly to SSS luck to celebrate their achievement. - if ((this.runInfo.gameMode === GameModes.ENDLESS || this.runInfo.gameMode === GameModes.SPLICED_ENDLESS) && this.runInfo.waveIndex === this.scene.gameData.gameStats.highestEndlessWave) { + if ((this.runInfo.gameMode === GameModes.ENDLESS || this.runInfo.gameMode === GameModes.SPLICED_ENDLESS) && this.runInfo.waveIndex === globalScene.gameData.gameStats.highestEndlessWave) { modeText.appendText(` [${i18next.t("runHistory:personalBest")}]`); modeText.setTint(0xffef5c, 0x47ff69, 0x6b6bff, 0xff6969); } // Duration + Money - const runInfoTextContainer = this.scene.add.container(0, 0); + const runInfoTextContainer = globalScene.add.container(0, 0); // Japanese is set to a greater line spacing of 35px in addBBCodeTextObject() if lineSpacing < 12. const lineSpacing = (i18next.resolvedLanguage === "ja") ? 12 : 3; - const runInfoText = addBBCodeTextObject(this.scene, 7, 0, "", TextStyle.WINDOW, { fontSize: "50px", lineSpacing: lineSpacing }); + const runInfoText = addBBCodeTextObject(7, 0, "", TextStyle.WINDOW, { fontSize: "50px", lineSpacing: lineSpacing }); const runTime = Utils.getPlayTimeString(this.runInfo.playTime); runInfoText.appendText(`${i18next.t("runHistory:runLength")}: ${runTime}`, false); - const runMoney = Utils.formatMoney(this.scene.moneyFormat, this.runInfo.money); - const moneyTextColor = getTextColor(TextStyle.MONEY_WINDOW, false, this.scene.uiTheme); + const runMoney = Utils.formatMoney(globalScene.moneyFormat, this.runInfo.money); + const moneyTextColor = getTextColor(TextStyle.MONEY_WINDOW, false, globalScene.uiTheme); runInfoText.appendText(`[color=${moneyTextColor}]${i18next.t("battleScene:moneyOwned", { formattedMoney : runMoney })}[/color]`); runInfoText.setPosition(7, 70); runInfoTextContainer.add(runInfoText); // Luck // Uses the parameters windowX and windowY to dynamically position the luck value neatly into the bottom right corner - const luckText = addBBCodeTextObject(this.scene, 0, 0, "", TextStyle.WINDOW, { fontSize: "55px" }); - const luckValue = Phaser.Math.Clamp(this.runInfo.party.map(p => p.toPokemon(this.scene).getLuck()).reduce((total: integer, value: integer) => total += value, 0), 0, 14); + const luckText = addBBCodeTextObject(0, 0, "", TextStyle.WINDOW, { fontSize: "55px" }); + const luckValue = Phaser.Math.Clamp(this.runInfo.party.map(p => p.toPokemon().getLuck()).reduce((total: number, value: number) => total += value, 0), 0, 14); let luckInfo = i18next.t("runHistory:luck") + ": " + getLuckString(luckValue); if (luckValue < 14) { luckInfo = "[color=#" + (getLuckTextTint(luckValue)).toString(16) + "]" + luckInfo + "[/color]"; @@ -550,14 +527,14 @@ export default class RunInfoUiHandler extends UiHandler { if (this.runInfo.modifiers.length) { let visibleModifierIndex = 0; - const modifierIconsContainer = this.scene.add.container(8, (this.runInfo.gameMode === GameModes.CHALLENGE) ? 20 : 15); + const modifierIconsContainer = globalScene.add.container(8, (this.runInfo.gameMode === GameModes.CHALLENGE) ? 20 : 15); modifierIconsContainer.setScale(0.45); for (const m of this.runInfo.modifiers) { - const modifier = m.toModifier(this.scene, this.modifiersModule[m.className]); + const modifier = m.toModifier(this.modifiersModule[m.className]); if (modifier instanceof Modifier.PokemonHeldItemModifier) { continue; } - const icon = modifier?.getIcon(this.scene, false); + const icon = modifier?.getIcon(false); if (icon) { const rowHeightModifier = Math.floor(visibleModifierIndex / 7); icon.setPosition(24 * (visibleModifierIndex % 7), 20 + (35 * rowHeightModifier)); @@ -565,7 +542,7 @@ export default class RunInfoUiHandler extends UiHandler { } if (++visibleModifierIndex === 20) { - const maxItems = addTextObject(this.scene, 45, 90, "+", TextStyle.WINDOW); + const maxItems = addTextObject(45, 90, "+", TextStyle.WINDOW); maxItems.setPositionRelative(modifierIconsContainer, 70, 45); this.runInfoContainer.add(maxItems); break; @@ -619,13 +596,13 @@ export default class RunInfoUiHandler extends UiHandler { private parsePartyInfo(): void { const party = this.runInfo.party; const currentLanguage = i18next.resolvedLanguage ?? "en"; - const windowHeight = ((this.scene.game.canvas.height / 6) - 23) / 6; + const windowHeight = ((globalScene.game.canvas.height / 6) - 23) / 6; - party.forEach((p: PokemonData, i: integer) => { - const pokemonInfoWindow = new RoundRectangle(this.scene, 0, 14, (this.statsBgWidth * 2) + 10, windowHeight - 2, 3); + party.forEach((p: PokemonData, i: number) => { + const pokemonInfoWindow = new RoundRectangle(globalScene, 0, 14, (this.statsBgWidth * 2) + 10, windowHeight - 2, 3); - const pokemon = p.toPokemon(this.scene); - const pokemonInfoContainer = this.scene.add.container(this.statsBgWidth + 5, (windowHeight - 0.5) * i); + const pokemon = p.toPokemon(); + const pokemonInfoContainer = globalScene.add.container(this.statsBgWidth + 5, (windowHeight - 0.5) * i); const types = pokemon.getTypes(); const type1 = getTypeRgb(types[0]); @@ -634,8 +611,8 @@ export default class RunInfoUiHandler extends UiHandler { const bgColor = type1Color.clone().darken(45); pokemonInfoWindow.setFillStyle(bgColor.color); - const iconContainer = this.scene.add.container(0, 0); - const icon = this.scene.addPokemonIcon(pokemon, 0, 0, 0, 0); + const iconContainer = globalScene.add.container(0, 0); + const icon = globalScene.addPokemonIcon(pokemon, 0, 0, 0, 0); icon.setScale(0.75); icon.setPosition(-99, 1); const type2 = types[1] ? getTypeRgb(types[1]) : undefined; @@ -645,7 +622,7 @@ export default class RunInfoUiHandler extends UiHandler { this.getUi().bringToTop(icon); // Contains Name, Level + Nature, Ability, Passive - const pokeInfoTextContainer = this.scene.add.container(-85, 3.5); + const pokeInfoTextContainer = globalScene.add.container(-85, 3.5); const textContainerFontSize = "34px"; // This checks if the Pokemon's nature has been overwritten during the run and displays the change accurately const pNature = pokemon.getNature(); @@ -664,7 +641,7 @@ export default class RunInfoUiHandler extends UiHandler { const pAbilityInfo = abilityLabel + ": " + pokemon.getAbility().name; // Japanese is set to a greater line spacing of 35px in addBBCodeTextObject() if lineSpacing < 12. const lineSpacing = (i18next.resolvedLanguage === "ja") ? 12 : 3; - const pokeInfoText = addBBCodeTextObject(this.scene, 0, 0, pName, TextStyle.SUMMARY, { fontSize: textContainerFontSize, lineSpacing: lineSpacing }); + const pokeInfoText = addBBCodeTextObject(0, 0, pName, TextStyle.SUMMARY, { fontSize: textContainerFontSize, lineSpacing: lineSpacing }); pokeInfoText.appendText(`${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatFancyLargeNumber(pokemon.level, 1)} - ${pNatureName}`); pokeInfoText.appendText(pAbilityInfo); pokeInfoText.appendText(pPassiveInfo); @@ -672,7 +649,7 @@ export default class RunInfoUiHandler extends UiHandler { // Pokemon Stats // Colored Arrows (Red/Blue) are placed by stats that are boosted from natures - const pokeStatTextContainer = this.scene.add.container(-35, 6); + const pokeStatTextContainer = globalScene.add.container(-35, 6); const pStats : string[] = []; pokemon.stats.forEach((element) => pStats.push(Utils.formatFancyLargeNumber(element, 1))); for (let i = 0; i < pStats.length; i++) { @@ -688,20 +665,20 @@ export default class RunInfoUiHandler extends UiHandler { const speedLabel = (currentLanguage === "es-ES" || currentLanguage === "pt_BR") ? i18next.t("runHistory:SPDshortened") : i18next.t("pokemonInfo:Stat.SPDshortened"); const speed = speedLabel + ": " + pStats[5]; // Column 1: HP Atk Def - const pokeStatText1 = addBBCodeTextObject(this.scene, -5, 0, hp, TextStyle.SUMMARY, { fontSize: textContainerFontSize, lineSpacing: lineSpacing }); + const pokeStatText1 = addBBCodeTextObject(-5, 0, hp, TextStyle.SUMMARY, { fontSize: textContainerFontSize, lineSpacing: lineSpacing }); pokeStatText1.appendText(atk); pokeStatText1.appendText(def); pokeStatTextContainer.add(pokeStatText1); // Column 2: SpAtk SpDef Speed - const pokeStatText2 = addBBCodeTextObject(this.scene, 25, 0, spatk, TextStyle.SUMMARY, { fontSize: textContainerFontSize, lineSpacing: lineSpacing }); + const pokeStatText2 = addBBCodeTextObject(25, 0, spatk, TextStyle.SUMMARY, { fontSize: textContainerFontSize, lineSpacing: lineSpacing }); pokeStatText2.appendText(spdef); pokeStatText2.appendText(speed); pokeStatTextContainer.add(pokeStatText2); // Shiny + Fusion Status - const marksContainer = this.scene.add.container(0, 0); + const marksContainer = globalScene.add.container(0, 0); if (pokemon.fusionSpecies) { - const splicedIcon = this.scene.add.image(0, 0, "icon_spliced"); + const splicedIcon = globalScene.add.image(0, 0, "icon_spliced"); splicedIcon.setScale(0.35); splicedIcon.setOrigin(0, 0); pokemon.isShiny() ? splicedIcon.setPositionRelative(pokeInfoTextContainer, 35, 0) : splicedIcon.setPositionRelative(pokeInfoTextContainer, 28, 0); @@ -710,7 +687,7 @@ export default class RunInfoUiHandler extends UiHandler { } if (pokemon.isShiny()) { const doubleShiny = pokemon.isFusion() && pokemon.shiny && pokemon.fusionShiny; - const shinyStar = this.scene.add.image(0, 0, `shiny_star_small${doubleShiny ? "_1" : ""}`); + const shinyStar = globalScene.add.image(0, 0, `shiny_star_small${doubleShiny ? "_1" : ""}`); shinyStar.setOrigin(0, 0); shinyStar.setScale(0.65); shinyStar.setPositionRelative(pokeInfoTextContainer, 28, 0); @@ -718,7 +695,7 @@ export default class RunInfoUiHandler extends UiHandler { marksContainer.add(shinyStar); this.getUi().bringToTop(shinyStar); if (doubleShiny) { - const fusionShinyStar = this.scene.add.image(0, 0, "shiny_star_small_2"); + const fusionShinyStar = globalScene.add.image(0, 0, "shiny_star_small_2"); fusionShinyStar.setOrigin(0, 0); fusionShinyStar.setScale(0.5); fusionShinyStar.setPosition(shinyStar.x + 1, shinyStar.y + 1); @@ -731,16 +708,16 @@ export default class RunInfoUiHandler extends UiHandler { // Pokemon Moveset // Need to check if dynamically typed moves const pokemonMoveset = pokemon.getMoveset(); - const movesetContainer = this.scene.add.container(70, -29); + const movesetContainer = globalScene.add.container(70, -29); const pokemonMoveBgs : Phaser.GameObjects.NineSlice[] = []; const pokemonMoveLabels : Phaser.GameObjects.Text[] = []; const movePos = [[ -6.5, 35.5 ], [ 37, 35.5 ], [ -6.5, 43.5 ], [ 37, 43.5 ]]; for (let m = 0; m < pokemonMoveset?.length; m++) { - const moveContainer = this.scene.add.container(movePos[m][0], movePos[m][1]); + const moveContainer = globalScene.add.container(movePos[m][0], movePos[m][1]); moveContainer.setScale(0.5); - const moveBg = this.scene.add.nineslice(0, 0, "type_bgs", "unknown", 85, 15, 2, 2, 2, 2); + const moveBg = globalScene.add.nineslice(0, 0, "type_bgs", "unknown", 85, 15, 2, 2, 2, 2); moveBg.setOrigin(1, 0); - const moveLabel = addTextObject(this.scene, -moveBg.width / 2, 2, "-", TextStyle.PARTY); + const moveLabel = addTextObject(-moveBg.width / 2, 2, "-", TextStyle.PARTY); moveLabel.setOrigin(0.5, 0); moveLabel.setName("text-move-label"); pokemonMoveBgs.push(moveBg); @@ -756,11 +733,11 @@ export default class RunInfoUiHandler extends UiHandler { // Pokemon Held Items - not displayed by default // Endless/Endless Spliced have a different scale because Pokemon tend to accumulate more items in these runs. const heldItemsScale = (this.runInfo.gameMode === GameModes.SPLICED_ENDLESS || this.runInfo.gameMode === GameModes.ENDLESS) ? 0.25 : 0.5; - const heldItemsContainer = this.scene.add.container(-82, 2); + const heldItemsContainer = globalScene.add.container(-82, 2); const heldItemsList : Modifier.PokemonHeldItemModifier[] = []; if (this.runInfo.modifiers.length) { for (const m of this.runInfo.modifiers) { - const modifier = m.toModifier(this.scene, this.modifiersModule[m.className]); + const modifier = m.toModifier(this.modifiersModule[m.className]); if (modifier instanceof Modifier.PokemonHeldItemModifier && modifier.pokemonId === pokemon.id) { modifier.stackCount = m["stackCount"]; heldItemsList.push(modifier); @@ -771,11 +748,11 @@ export default class RunInfoUiHandler extends UiHandler { let row = 0; for (const [ index, item ] of heldItemsList.entries()) { if ( index > 36 ) { - const overflowIcon = addTextObject(this.scene, 182, 4, "+", TextStyle.WINDOW); + const overflowIcon = addTextObject(182, 4, "+", TextStyle.WINDOW); heldItemsContainer.add(overflowIcon); break; } - const itemIcon = item?.getIcon(this.scene, true); + const itemIcon = item?.getIcon(true); if (item?.stackCount < item?.getMaxHeldItemCount(pokemon) && itemIcon.list[1] instanceof Phaser.GameObjects.BitmapText) { itemIcon.list[1].clearTint(); } @@ -833,13 +810,13 @@ export default class RunInfoUiHandler extends UiHandler { * Shows the ending art. */ private createVictorySplash(): void { - this.endCardContainer = this.scene.add.container(0, 0); - const genderIndex = this.scene.gameData.gender ?? PlayerGender.UNSET; + this.endCardContainer = globalScene.add.container(0, 0); + const genderIndex = globalScene.gameData.gender ?? PlayerGender.UNSET; const isFemale = genderIndex === PlayerGender.FEMALE; - const endCard = this.scene.add.image(0, 0, `end_${isFemale ? "f" : "m"}`); + const endCard = globalScene.add.image(0, 0, `end_${isFemale ? "f" : "m"}`); endCard.setOrigin(0); endCard.setScale(0.5); - const text = addTextObject(this.scene, this.scene.game.canvas.width / 12, (this.scene.game.canvas.height / 6) - 16, i18next.t("battle:congratulations"), TextStyle.SUMMARY, { fontSize: "128px" }); + const text = addTextObject(globalScene.game.canvas.width / 12, (globalScene.game.canvas.height / 6) - 16, i18next.t("battle:congratulations"), TextStyle.SUMMARY, { fontSize: "128px" }); text.setOrigin(0.5); this.endCardContainer.add(endCard); this.endCardContainer.add(text); @@ -850,45 +827,45 @@ export default class RunInfoUiHandler extends UiHandler { * This could be adapted into a public-facing method for victory screens. Perhaps. */ private createHallofFame(): void { - const genderIndex = this.scene.gameData.gender ?? PlayerGender.UNSET; + const genderIndex = globalScene.gameData.gender ?? PlayerGender.UNSET; const isFemale = genderIndex === PlayerGender.FEMALE; const genderStr = PlayerGender[genderIndex].toLowerCase(); // Issue Note (08-05-2024): It seems as if fused pokemon do not appear with the averaged color b/c pokemonData's loadAsset requires there to be some active battle? // As an alternative, the icons of the second/bottom fused Pokemon have been placed next to their fellow fused Pokemon in Hall of Fame - this.hallofFameContainer = this.scene.add.container(0, 0); + this.hallofFameContainer = globalScene.add.container(0, 0); // Thank you Hayuna for the code - const endCard = this.scene.add.image(0, 0, `end_${isFemale ? "f" : "m"}`); + const endCard = globalScene.add.image(0, 0, `end_${isFemale ? "f" : "m"}`); endCard.setOrigin(0); endCard.setPosition(-1, -1); endCard.setScale(0.5); const endCardCoords = endCard.getBottomCenter(); const overlayColor = isFemale ? "red" : "blue"; - const hallofFameBg = this.scene.add.image(0, 0, "hall_of_fame_" + overlayColor); + const hallofFameBg = globalScene.add.image(0, 0, "hall_of_fame_" + overlayColor); hallofFameBg.setPosition(159, 89); - hallofFameBg.setSize(this.scene.game.canvas.width, this.scene.game.canvas.height + 10); + hallofFameBg.setSize(globalScene.game.canvas.width, globalScene.game.canvas.height + 10); hallofFameBg.setAlpha(0.8); this.hallofFameContainer.add(endCard); this.hallofFameContainer.add(hallofFameBg); - const hallofFameText = addTextObject(this.scene, 0, 0, i18next.t("runHistory:hallofFameText", { context: genderStr }), TextStyle.WINDOW); + const hallofFameText = addTextObject(0, 0, i18next.t("runHistory:hallofFameText", { context: genderStr }), TextStyle.WINDOW); hallofFameText.setPosition(endCardCoords.x - (hallofFameText.displayWidth / 2), 164); this.hallofFameContainer.add(hallofFameText); this.runInfo.party.forEach((p, i) => { - const pkmn = p.toPokemon(this.scene); + const pkmn = p.toPokemon(); const row = i % 2; const id = pkmn.id; const shiny = pkmn.shiny; const formIndex = pkmn.formIndex; const variant = pkmn.variant; const species = pkmn.getSpeciesForm(); - const pokemonSprite: Phaser.GameObjects.Sprite = this.scene.add.sprite(60 + 40 * i, 40 + row * 80, "pkmn__sub"); - pokemonSprite.setPipeline(this.scene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], ignoreTimeTint: true }); + const pokemonSprite: Phaser.GameObjects.Sprite = globalScene.add.sprite(60 + 40 * i, 40 + row * 80, "pkmn__sub"); + pokemonSprite.setPipeline(globalScene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], ignoreTimeTint: true }); this.hallofFameContainer.add(pokemonSprite); const speciesLoaded: Map = new Map(); speciesLoaded.set(id, false); const female = pkmn.gender === 1; - species.loadAssets(this.scene, female, formIndex, shiny, variant, true).then(() => { + species.loadAssets(female, formIndex, shiny, variant, true).then(() => { speciesLoaded.set(id, true); pokemonSprite.play(species.getSpriteKey(female, formIndex, shiny, variant)); pokemonSprite.setPipelineData("shiny", shiny); @@ -897,7 +874,7 @@ export default class RunInfoUiHandler extends UiHandler { pokemonSprite.setVisible(true); }); if (pkmn.isFusion()) { - const fusionIcon = this.scene.add.sprite(80 + 40 * i, 50 + row * 80, pkmn.getFusionIconAtlasKey()); + const fusionIcon = globalScene.add.sprite(80 + 40 * i, 50 + row * 80, pkmn.getFusionIconAtlasKey()); fusionIcon.setName("sprite-fusion-icon"); fusionIcon.setOrigin(0.5, 0); fusionIcon.setFrame(pkmn.getFusionIconId(true)); diff --git a/src/ui/save-slot-select-ui-handler.ts b/src/ui/save-slot-select-ui-handler.ts index b36c0af6ec8..e746c9302d0 100644 --- a/src/ui/save-slot-select-ui-handler.ts +++ b/src/ui/save-slot-select-ui-handler.ts @@ -1,10 +1,10 @@ import i18next from "i18next"; -import BattleScene from "../battle-scene"; +import { globalScene } from "#app/global-scene"; import { Button } from "#enums/buttons"; import { GameMode } from "../game-mode"; import * as Modifier from "../modifier/modifier"; -import { SessionSaveData } from "../system/game-data"; -import PokemonData from "../system/pokemon-data"; +import type { SessionSaveData } from "../system/game-data"; +import type PokemonData from "../system/pokemon-data"; import * as Utils from "../utils"; import MessageUiHandler from "./message-ui-handler"; import { TextStyle, addTextObject } from "./text"; @@ -20,7 +20,7 @@ export enum SaveSlotUiMode { SAVE } -export type SaveSlotSelectCallback = (cursor: integer) => void; +export type SaveSlotSelectCallback = (cursor: number) => void; export default class SaveSlotSelectUiHandler extends MessageUiHandler { @@ -33,41 +33,41 @@ export default class SaveSlotSelectUiHandler extends MessageUiHandler { private uiMode: SaveSlotUiMode; private saveSlotSelectCallback: SaveSlotSelectCallback | null; - private scrollCursor: integer = 0; + private scrollCursor: number = 0; private cursorObj: Phaser.GameObjects.Container | null; private sessionSlotsContainerInitialY: number; - constructor(scene: BattleScene) { - super(scene, Mode.SAVE_SLOT); + constructor() { + super(Mode.SAVE_SLOT); } setup() { const ui = this.getUi(); - this.saveSlotSelectContainer = this.scene.add.container(0, 0); + this.saveSlotSelectContainer = globalScene.add.container(0, 0); this.saveSlotSelectContainer.setVisible(false); ui.add(this.saveSlotSelectContainer); - const loadSessionBg = this.scene.add.rectangle(0, 0, this.scene.game.canvas.width / 6, -this.scene.game.canvas.height / 6, 0x006860); + const loadSessionBg = globalScene.add.rectangle(0, 0, globalScene.game.canvas.width / 6, -globalScene.game.canvas.height / 6, 0x006860); loadSessionBg.setOrigin(0, 0); this.saveSlotSelectContainer.add(loadSessionBg); - this.sessionSlotsContainerInitialY = -this.scene.game.canvas.height / 6 + 8; + this.sessionSlotsContainerInitialY = -globalScene.game.canvas.height / 6 + 8; - this.sessionSlotsContainer = this.scene.add.container(8, this.sessionSlotsContainerInitialY); + this.sessionSlotsContainer = globalScene.add.container(8, this.sessionSlotsContainerInitialY); this.saveSlotSelectContainer.add(this.sessionSlotsContainer); - this.saveSlotSelectMessageBoxContainer = this.scene.add.container(0, 0); + this.saveSlotSelectMessageBoxContainer = globalScene.add.container(0, 0); this.saveSlotSelectMessageBoxContainer.setVisible(false); this.saveSlotSelectContainer.add(this.saveSlotSelectMessageBoxContainer); - this.saveSlotSelectMessageBox = addWindow(this.scene, 1, -1, 318, 28); + this.saveSlotSelectMessageBox = addWindow(1, -1, 318, 28); this.saveSlotSelectMessageBox.setOrigin(0, 1); this.saveSlotSelectMessageBoxContainer.add(this.saveSlotSelectMessageBox); - this.message = addTextObject(this.scene, 8, 8, "", TextStyle.WINDOW, { maxLines: 2 }); + this.message = addTextObject(8, 8, "", TextStyle.WINDOW, { maxLines: 2 }); this.message.setOrigin(0, 0); this.saveSlotSelectMessageBoxContainer.add(this.message); @@ -122,9 +122,9 @@ export default class SaveSlotSelectUiHandler extends MessageUiHandler { if (this.sessionSlots[cursor].hasData) { ui.showText(i18next.t("saveSlotSelectUiHandler:overwriteData"), null, () => { ui.setOverlayMode(Mode.CONFIRM, () => { - this.scene.gameData.deleteSession(cursor).then(response => { + globalScene.gameData.deleteSession(cursor).then(response => { if (response === false) { - this.scene.reset(true); + globalScene.reset(true); } else { saveAndCallback(); } @@ -157,6 +157,12 @@ export default class SaveSlotSelectUiHandler extends MessageUiHandler { success = (this.cursor === 0) ? this.setCursor(this.cursor) : this.setCursor(this.cursor - 1, cursorPosition); } else if (this.scrollCursor) { success = this.setScrollCursor(this.scrollCursor - 1, cursorPosition); + } else if ((this.cursor === 0) && (this.scrollCursor === 0)) { + this.setScrollCursor(SESSION_SLOTS_COUNT - SLOTS_ON_SCREEN); + // Revert to avoid an extra session slot sticking out + this.revertSessionSlot(SESSION_SLOTS_COUNT - SLOTS_ON_SCREEN); + this.setCursor(SLOTS_ON_SCREEN - 1); + success = true; } break; case Button.DOWN: @@ -164,11 +170,16 @@ export default class SaveSlotSelectUiHandler extends MessageUiHandler { success = this.setCursor(this.cursor + 1, cursorPosition); } else if (this.scrollCursor < SESSION_SLOTS_COUNT - SLOTS_ON_SCREEN) { success = this.setScrollCursor(this.scrollCursor + 1, cursorPosition); + } else if ((this.cursor === SLOTS_ON_SCREEN - 1) && (this.scrollCursor === SESSION_SLOTS_COUNT - SLOTS_ON_SCREEN)) { + this.setScrollCursor(0); + this.revertSessionSlot(SLOTS_ON_SCREEN - 1); + this.setCursor(0); + success = true; } break; case Button.RIGHT: if (this.sessionSlots[cursorPosition].hasData && this.sessionSlots[cursorPosition].saveData) { - this.scene.ui.setOverlayMode(Mode.RUN_INFO, this.sessionSlots[cursorPosition].saveData, RunDisplayMode.SESSION_PREVIEW); + globalScene.ui.setOverlayMode(Mode.RUN_INFO, this.sessionSlots[cursorPosition].saveData, RunDisplayMode.SESSION_PREVIEW); success = true; } } @@ -185,8 +196,8 @@ export default class SaveSlotSelectUiHandler extends MessageUiHandler { populateSessionSlots() { for (let s = 0; s < SESSION_SLOTS_COUNT; s++) { - const sessionSlot = new SessionSlot(this.scene, s); - this.scene.add.existing(sessionSlot); + const sessionSlot = new SessionSlot(s); + globalScene.add.existing(sessionSlot); this.sessionSlotsContainer.add(sessionSlot); this.sessionSlots.push(sessionSlot); sessionSlot.load().then((success) => { @@ -199,7 +210,7 @@ export default class SaveSlotSelectUiHandler extends MessageUiHandler { } } - showText(text: string, delay?: integer, callback?: Function, callbackDelay?: integer, prompt?: boolean, promptDelay?: integer) { + showText(text: string, delay?: number, callback?: Function, callbackDelay?: number, prompt?: boolean, promptDelay?: number) { super.showText(text, delay, callback, callbackDelay, prompt, promptDelay); if (text?.indexOf("\n") === -1) { @@ -219,13 +230,13 @@ export default class SaveSlotSelectUiHandler extends MessageUiHandler { * @param prevSlotIndex index of the previous session occupied by the cursor, between `0` and `SESSION_SLOTS_COUNT - 1` - optional * @returns `true` if the cursor position has changed | `false` if it has not */ - override setCursor(cursor: integer, prevSlotIndex?: integer): boolean { + override setCursor(cursor: number, prevSlotIndex?: number): boolean { const changed = super.setCursor(cursor); if (!this.cursorObj) { - this.cursorObj = this.scene.add.container(0, 0); - const cursorBox = this.scene.add.nineslice(0, 0, "select_cursor_highlight_thick", undefined, 296, 44, 6, 6, 6, 6); - const rightArrow = this.scene.add.image(0, 0, "cursor"); + this.cursorObj = globalScene.add.container(0, 0); + const cursorBox = globalScene.add.nineslice(0, 0, "select_cursor_highlight_thick", undefined, 296, 44, 6, 6, 6, 6); + const rightArrow = globalScene.add.image(0, 0, "cursor"); rightArrow.setPosition(160, 0); rightArrow.setName("rightArrow"); this.cursorObj.add([ cursorBox, rightArrow ]); @@ -256,7 +267,7 @@ export default class SaveSlotSelectUiHandler extends MessageUiHandler { /** * Helper function that resets the given session slot to its default central position */ - revertSessionSlot(slotIndex: integer): void { + revertSessionSlot(slotIndex: number): void { const sessionSlot = this.sessionSlots[slotIndex]; if (sessionSlot) { sessionSlot.setPosition(0, slotIndex * 56); @@ -280,13 +291,13 @@ export default class SaveSlotSelectUiHandler extends MessageUiHandler { * @param prevSlotIndex index of the previous slot occupied by the cursor, between `0` and `SESSION_SLOTS_COUNT-1` - optional * @returns `true` if the cursor position has changed | `false` if it has not */ - setScrollCursor(scrollCursor: integer, prevSlotIndex?: integer): boolean { + setScrollCursor(scrollCursor: number, prevSlotIndex?: number): boolean { const changed = scrollCursor !== this.scrollCursor; if (changed) { this.scrollCursor = scrollCursor; this.setCursor(this.cursor, prevSlotIndex); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.sessionSlotsContainer, y: this.sessionSlotsContainerInitialY - 56 * scrollCursor, duration: Utils.fixedInt(325), @@ -320,14 +331,14 @@ export default class SaveSlotSelectUiHandler extends MessageUiHandler { } class SessionSlot extends Phaser.GameObjects.Container { - public slotId: integer; + public slotId: number; public hasData: boolean; private loadingLabel: Phaser.GameObjects.Text; public saveData: SessionSaveData; - constructor(scene: BattleScene, slotId: integer) { - super(scene, 0, slotId * 56); + constructor(slotId: number) { + super(globalScene, 0, slotId * 56); this.slotId = slotId; @@ -335,10 +346,10 @@ class SessionSlot extends Phaser.GameObjects.Container { } setup() { - const slotWindow = addWindow(this.scene, 0, 0, 304, 52); + const slotWindow = addWindow(0, 0, 304, 52); this.add(slotWindow); - this.loadingLabel = addTextObject(this.scene, 152, 26, i18next.t("saveSlotSelectUiHandler:loading"), TextStyle.WINDOW); + this.loadingLabel = addTextObject(152, 26, i18next.t("saveSlotSelectUiHandler:loading"), TextStyle.WINDOW); this.loadingLabel.setOrigin(0.5, 0.5); this.add(this.loadingLabel); } @@ -346,24 +357,24 @@ class SessionSlot extends Phaser.GameObjects.Container { async setupWithData(data: SessionSaveData) { this.remove(this.loadingLabel, true); - const gameModeLabel = addTextObject(this.scene, 8, 5, `${GameMode.getModeName(data.gameMode) || i18next.t("gameMode:unkown")} - ${i18next.t("saveSlotSelectUiHandler:wave")} ${data.waveIndex}`, TextStyle.WINDOW); + const gameModeLabel = addTextObject(8, 5, `${GameMode.getModeName(data.gameMode) || i18next.t("gameMode:unkown")} - ${i18next.t("saveSlotSelectUiHandler:wave")} ${data.waveIndex}`, TextStyle.WINDOW); this.add(gameModeLabel); - const timestampLabel = addTextObject(this.scene, 8, 19, new Date(data.timestamp).toLocaleString(), TextStyle.WINDOW); + const timestampLabel = addTextObject(8, 19, new Date(data.timestamp).toLocaleString(), TextStyle.WINDOW); this.add(timestampLabel); - const playTimeLabel = addTextObject(this.scene, 8, 33, Utils.getPlayTimeString(data.playTime), TextStyle.WINDOW); + const playTimeLabel = addTextObject(8, 33, Utils.getPlayTimeString(data.playTime), TextStyle.WINDOW); this.add(playTimeLabel); - const pokemonIconsContainer = this.scene.add.container(144, 4); - data.party.forEach((p: PokemonData, i: integer) => { - const iconContainer = this.scene.add.container(26 * i, 0); + const pokemonIconsContainer = globalScene.add.container(144, 4); + data.party.forEach((p: PokemonData, i: number) => { + const iconContainer = globalScene.add.container(26 * i, 0); iconContainer.setScale(0.75); - const pokemon = p.toPokemon(this.scene); - const icon = this.scene.addPokemonIcon(pokemon, 0, 0, 0, 0); + const pokemon = p.toPokemon(); + const icon = globalScene.addPokemonIcon(pokemon, 0, 0, 0, 0); - const text = addTextObject(this.scene, 32, 20, `${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatLargeNumber(pokemon.level, 1000)}`, TextStyle.PARTY, { fontSize: "54px", color: "#f8f8f8" }); + const text = addTextObject(32, 20, `${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatLargeNumber(pokemon.level, 1000)}`, TextStyle.PARTY, { fontSize: "54px", color: "#f8f8f8" }); text.setShadow(0, 0, undefined); text.setStroke("#424242", 14); text.setOrigin(1, 0); @@ -378,15 +389,15 @@ class SessionSlot extends Phaser.GameObjects.Container { this.add(pokemonIconsContainer); - const modifierIconsContainer = this.scene.add.container(148, 30); + const modifierIconsContainer = globalScene.add.container(148, 30); modifierIconsContainer.setScale(0.5); let visibleModifierIndex = 0; for (const m of data.modifiers) { - const modifier = m.toModifier(this.scene, Modifier[m.className]); + const modifier = m.toModifier(Modifier[m.className]); if (modifier instanceof Modifier.PokemonHeldItemModifier) { continue; } - const icon = modifier?.getIcon(this.scene, false); + const icon = modifier?.getIcon(false); if (icon) { icon.setPosition(24 * visibleModifierIndex, 0); modifierIconsContainer.add(icon); @@ -401,7 +412,7 @@ class SessionSlot extends Phaser.GameObjects.Container { load(): Promise { return new Promise(resolve => { - this.scene.gameData.getSession(this.slotId).then(async sessionData => { + globalScene.gameData.getSession(this.slotId).then(async sessionData => { // Ignore the results if the view was exited if (!this.active) { return; @@ -420,7 +431,3 @@ class SessionSlot extends Phaser.GameObjects.Container { }); } } - -interface SessionSlot { - scene: BattleScene; -} diff --git a/src/ui/saving-icon-handler.ts b/src/ui/saving-icon-handler.ts index f62b0dc6162..ca7b1fb1aa8 100644 --- a/src/ui/saving-icon-handler.ts +++ b/src/ui/saving-icon-handler.ts @@ -1,4 +1,4 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import * as Utils from "../utils"; export default class SavingIconHandler extends Phaser.GameObjects.Container { @@ -7,12 +7,12 @@ export default class SavingIconHandler extends Phaser.GameObjects.Container { private animActive: boolean; private shown: boolean; - constructor(scene: BattleScene) { - super(scene, scene.game.canvas.width / 6 - 4, scene.game.canvas.height / 6 - 4); + constructor() { + super(globalScene, globalScene.game.canvas.width / 6 - 4, globalScene.game.canvas.height / 6 - 4); } setup(): void { - this.icon = this.scene.add.sprite(0, 0, "saving_icon"); + this.icon = globalScene.add.sprite(0, 0, "saving_icon"); this.icon.setOrigin(1, 1); this.add(this.icon); @@ -33,13 +33,13 @@ export default class SavingIconHandler extends Phaser.GameObjects.Container { this.animActive = true; - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this, alpha: 1, duration: Utils.fixedInt(250), ease: "Sine.easeInOut", onComplete: () => { - this.scene.time.delayedCall(Utils.fixedInt(500), () => { + globalScene.time.delayedCall(Utils.fixedInt(500), () => { this.animActive = false; if (!this.shown) { this.hide(); @@ -61,7 +61,7 @@ export default class SavingIconHandler extends Phaser.GameObjects.Container { this.animActive = true; - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this, alpha: 0, duration: Utils.fixedInt(250), diff --git a/src/ui/scroll-bar.ts b/src/ui/scroll-bar.ts index 9874be0f73a..eb74bfddfde 100644 --- a/src/ui/scroll-bar.ts +++ b/src/ui/scroll-bar.ts @@ -1,3 +1,5 @@ +import { globalScene } from "#app/global-scene"; + /** * A vertical scrollbar element that resizes dynamically based on the current scrolling * and number of elements that can be shown on screen @@ -11,15 +13,14 @@ export class ScrollBar extends Phaser.GameObjects.Container { private maxRows: number; /** - * @param scene the current scene * @param x the scrollbar's x position (origin: top left) * @param y the scrollbar's y position (origin: top left) * @param width the scrollbar's width * @param height the scrollbar's height * @param maxRows the maximum number of rows that can be shown at once */ - constructor(scene: Phaser.Scene, x: number, y: number, width: number, height: number, maxRows: number) { - super(scene, x, y); + constructor(x: number, y: number, width: number, height: number, maxRows: number) { + super(globalScene, x, y); this.maxRows = maxRows; this.totalRows = maxRows; @@ -28,15 +29,15 @@ export class ScrollBar extends Phaser.GameObjects.Container { const borderSize = 2; width = Math.max(width, 4); - this.bg = scene.add.nineslice(0, 0, "scroll_bar", undefined, width, height, borderSize, borderSize, borderSize, borderSize); + this.bg = globalScene.add.nineslice(0, 0, "scroll_bar", undefined, width, height, borderSize, borderSize, borderSize, borderSize); this.bg.setOrigin(0, 0); this.add(this.bg); - this.handleBody = scene.add.rectangle(1, 1, width - 2, 4, 0xaaaaaa); + this.handleBody = globalScene.add.rectangle(1, 1, width - 2, 4, 0xaaaaaa); this.handleBody.setOrigin(0, 0); this.add(this.handleBody); - this.handleBottom = scene.add.nineslice(1, 1, "scroll_bar_handle", undefined, width - 2, 2, 2, 0, 0, 0); + this.handleBottom = globalScene.add.nineslice(1, 1, "scroll_bar_handle", undefined, width - 2, 2, 2, 0, 0, 0); this.handleBottom.setOrigin(0, 0); this.add(this.handleBottom); } diff --git a/src/ui/scrollable-grid-handler.ts b/src/ui/scrollable-grid-handler.ts index cced92a2083..04851ec002f 100644 --- a/src/ui/scrollable-grid-handler.ts +++ b/src/ui/scrollable-grid-handler.ts @@ -1,6 +1,6 @@ import { Button } from "#enums/buttons"; -import UiHandler from "#app/ui/ui-handler"; -import { ScrollBar } from "#app/ui/scroll-bar"; +import type UiHandler from "#app/ui/ui-handler"; +import type { ScrollBar } from "#app/ui/scroll-bar"; type UpdateGridCallbackFunction = () => void; type UpdateDetailsCallbackFunction = (index: number) => void; @@ -24,15 +24,14 @@ export default class ScrollableGridUiHandler { private cursor: number; private scrollCursor: number; private scrollBar?: ScrollBar; + /** Optional function that will get called if the whole grid needs to get updated */ private updateGridCallback?: UpdateGridCallbackFunction; + /** Optional function that will get called if a single element's information needs to get updated */ private updateDetailsCallback?: UpdateDetailsCallbackFunction; /** - * @param scene the {@linkcode UiHandler} that needs its cursor updated based on the scrolling * @param rows the maximum number of rows shown at once * @param columns the maximum number of columns shown at once - * @param updateGridCallback optional function that will get called if the whole grid needs to get updated - * @param updateDetailsCallback optional function that will get called if a single element's information needs to get updated */ constructor(handler: UiHandler, rows: number, columns: number) { this.handler = handler; diff --git a/src/ui/session-reload-modal-ui-handler.ts b/src/ui/session-reload-modal-ui-handler.ts index 147634b19d2..640268f0480 100644 --- a/src/ui/session-reload-modal-ui-handler.ts +++ b/src/ui/session-reload-modal-ui-handler.ts @@ -1,11 +1,11 @@ -import BattleScene from "../battle-scene"; -import { ModalConfig, ModalUiHandler } from "./modal-ui-handler"; +import type { ModalConfig } from "./modal-ui-handler"; +import { ModalUiHandler } from "./modal-ui-handler"; import { addTextObject, TextStyle } from "./text"; -import { Mode } from "./ui"; +import type { Mode } from "./ui"; export default class SessionReloadModalUiHandler extends ModalUiHandler { - constructor(scene: BattleScene, mode: Mode | null = null) { - super(scene, mode); + constructor(mode: Mode | null = null) { + super(mode); } getModalTitle(): string { @@ -31,7 +31,7 @@ export default class SessionReloadModalUiHandler extends ModalUiHandler { setup(): void { super.setup(); - const label = addTextObject(this.scene, this.getWidth() / 2, this.getHeight() / 2, "Your session is out of date.\nYour data will be reloaded…", TextStyle.WINDOW, { fontSize: "48px", align: "center" }); + const label = addTextObject(this.getWidth() / 2, this.getHeight() / 2, "Your session is out of date.\nYour data will be reloaded…", TextStyle.WINDOW, { fontSize: "48px", align: "center" }); label.setOrigin(0.5, 0.5); this.modalContainer.add(label); diff --git a/src/ui/settings/abstract-binding-ui-handler.ts b/src/ui/settings/abstract-binding-ui-handler.ts index 9ebc3c493a4..e8c3e20c38f 100644 --- a/src/ui/settings/abstract-binding-ui-handler.ts +++ b/src/ui/settings/abstract-binding-ui-handler.ts @@ -1,11 +1,11 @@ import UiHandler from "../ui-handler"; -import BattleScene from "../../battle-scene"; -import { Mode } from "../ui"; +import type { Mode } from "../ui"; import { addWindow } from "../ui-theme"; import { addTextObject, TextStyle } from "../text"; import { Button } from "#enums/buttons"; import { NavigationManager } from "#app/ui/settings/navigationMenu"; import i18next from "i18next"; +import { globalScene } from "#app/global-scene"; type CancelFn = (succes?: boolean) => boolean; @@ -49,11 +49,10 @@ export default abstract class AbstractBindingUiHandler extends UiHandler { /** * Constructor for the AbstractBindingUiHandler. * - * @param scene - The BattleScene instance. * @param mode - The UI mode. */ - constructor(scene: BattleScene, mode: Mode | null = null) { - super(scene, mode); + constructor(mode: Mode | null = null) { + super(mode); } /** @@ -61,8 +60,8 @@ export default abstract class AbstractBindingUiHandler extends UiHandler { */ setup() { const ui = this.getUi(); - this.optionSelectContainer = this.scene.add.container(0, 0); - this.actionsContainer = this.scene.add.container(0, 0); + this.optionSelectContainer = globalScene.add.container(0, 0); + this.actionsContainer = globalScene.add.container(0, 0); // Initially, containers are not visible. this.optionSelectContainer.setVisible(false); this.actionsContainer.setVisible(false); @@ -72,30 +71,30 @@ export default abstract class AbstractBindingUiHandler extends UiHandler { ui.add(this.actionsContainer); // Setup backgrounds and text objects for UI. - this.titleBg = addWindow(this.scene, (this.scene.game.canvas.width / 6) - this.getWindowWidth(), -(this.scene.game.canvas.height / 6) + 28 + 21, this.getWindowWidth(), 24); + this.titleBg = addWindow((globalScene.game.canvas.width / 6) - this.getWindowWidth(), -(globalScene.game.canvas.height / 6) + 28 + 21, this.getWindowWidth(), 24); this.titleBg.setOrigin(0.5); this.optionSelectContainer.add(this.titleBg); - this.actionBg = addWindow(this.scene, (this.scene.game.canvas.width / 6) - this.getWindowWidth(), -(this.scene.game.canvas.height / 6) + this.getWindowHeight() + 28 + 21 + 21, this.getWindowWidth(), 24); + this.actionBg = addWindow((globalScene.game.canvas.width / 6) - this.getWindowWidth(), -(globalScene.game.canvas.height / 6) + this.getWindowHeight() + 28 + 21 + 21, this.getWindowWidth(), 24); this.actionBg.setOrigin(0.5); this.actionsContainer.add(this.actionBg); // Text prompts and instructions for the user. - this.unlockText = addTextObject(this.scene, 0, 0, i18next.t("settings:pressButton"), TextStyle.WINDOW); + this.unlockText = addTextObject(0, 0, i18next.t("settings:pressButton"), TextStyle.WINDOW); this.unlockText.setOrigin(0, 0); this.unlockText.setPositionRelative(this.titleBg, 36, 4); this.optionSelectContainer.add(this.unlockText); - this.timerText = addTextObject(this.scene, 0, 0, "(5)", TextStyle.WINDOW); + this.timerText = addTextObject(0, 0, "(5)", TextStyle.WINDOW); this.timerText.setOrigin(0, 0); this.timerText.setPositionRelative(this.unlockText, (this.unlockText.width / 6) + 5, 0); this.optionSelectContainer.add(this.timerText); - this.optionSelectBg = addWindow(this.scene, (this.scene.game.canvas.width / 6) - this.getWindowWidth(), -(this.scene.game.canvas.height / 6) + this.getWindowHeight() + 28, this.getWindowWidth(), this.getWindowHeight()); + this.optionSelectBg = addWindow((globalScene.game.canvas.width / 6) - this.getWindowWidth(), -(globalScene.game.canvas.height / 6) + this.getWindowHeight() + 28, this.getWindowWidth(), this.getWindowHeight()); this.optionSelectBg.setOrigin(0.5); this.optionSelectContainer.add(this.optionSelectBg); - this.cancelLabel = addTextObject(this.scene, 0, 0, i18next.t("settings:back"), TextStyle.SETTINGS_LABEL); + this.cancelLabel = addTextObject(0, 0, i18next.t("settings:back"), TextStyle.SETTINGS_LABEL); this.cancelLabel.setOrigin(0, 0.5); this.cancelLabel.setPositionRelative(this.actionBg, 10, this.actionBg.height / 2); this.actionsContainer.add(this.cancelLabel); @@ -204,7 +203,7 @@ export default abstract class AbstractBindingUiHandler extends UiHandler { * @param cursor - The cursor position to set. * @returns `true` if the cursor was set successfully. */ - setCursor(cursor: integer): boolean { + setCursor(cursor: number): boolean { this.cursor = cursor; if (cursor === 1) { this.actionLabel.setColor(this.getTextColor(TextStyle.SETTINGS_SELECTED)); diff --git a/src/ui/settings/abstract-control-settings-ui-handler.ts b/src/ui/settings/abstract-control-settings-ui-handler.ts index 69f8eb241d3..59af1abba2a 100644 --- a/src/ui/settings/abstract-control-settings-ui-handler.ts +++ b/src/ui/settings/abstract-control-settings-ui-handler.ts @@ -1,15 +1,15 @@ import UiHandler from "#app/ui/ui-handler"; -import BattleScene from "#app/battle-scene"; -import { Mode } from "#app/ui/ui"; -import { InterfaceConfig } from "#app/inputs-controller"; +import type { Mode } from "#app/ui/ui"; +import type { InterfaceConfig } from "#app/inputs-controller"; import { addWindow } from "#app/ui/ui-theme"; import { addTextObject, TextStyle } from "#app/ui/text"; import { ScrollBar } from "#app/ui/scroll-bar"; import { getIconWithSettingName } from "#app/configs/inputs/configHandler"; import NavigationMenu, { NavigationManager } from "#app/ui/settings/navigationMenu"; -import { Device } from "#enums/devices"; +import type { Device } from "#enums/devices"; import { Button } from "#enums/buttons"; import i18next from "i18next"; +import { globalScene } from "#app/global-scene"; export interface InputsIcons { [key: string]: Phaser.GameObjects.Sprite; @@ -67,16 +67,15 @@ export default abstract class AbstractControlSettingsUiHandler extends UiHandler protected device: Device; abstract saveSettingToLocalStorage(setting, cursor): void; - abstract setSetting(scene: BattleScene, setting, value: number): boolean; + abstract setSetting(setting, value: number): boolean; /** * Constructor for the AbstractSettingsUiHandler. * - * @param scene - The BattleScene instance. * @param mode - The UI mode. */ - constructor(scene: BattleScene, mode: Mode | null = null) { - super(scene, mode); + constructor(mode: Mode | null = null) { + super(mode); this.rowsToDisplay = 8; } @@ -99,44 +98,44 @@ export default abstract class AbstractControlSettingsUiHandler extends UiHandler const ui = this.getUi(); this.navigationIcons = {}; - this.settingsContainer = this.scene.add.container(1, -(this.scene.game.canvas.height / 6) + 1); + this.settingsContainer = globalScene.add.container(1, -(globalScene.game.canvas.height / 6) + 1); this.settingsContainer.setName(`settings-${this.titleSelected}`); - this.settingsContainer.setInteractive(new Phaser.Geom.Rectangle(0, 0, this.scene.game.canvas.width / 6, this.scene.game.canvas.height / 6), Phaser.Geom.Rectangle.Contains); + this.settingsContainer.setInteractive(new Phaser.Geom.Rectangle(0, 0, globalScene.game.canvas.width / 6, globalScene.game.canvas.height / 6), Phaser.Geom.Rectangle.Contains); - this.navigationContainer = new NavigationMenu(this.scene, 0, 0); + this.navigationContainer = new NavigationMenu(0, 0); - this.optionsBg = addWindow(this.scene, 0, this.navigationContainer.height, (this.scene.game.canvas.width / 6) - 2, (this.scene.game.canvas.height / 6) - 16 - this.navigationContainer.height - 2); + this.optionsBg = addWindow(0, this.navigationContainer.height, (globalScene.game.canvas.width / 6) - 2, (globalScene.game.canvas.height / 6) - 16 - this.navigationContainer.height - 2); this.optionsBg.setOrigin(0, 0); - this.actionsBg = addWindow(this.scene, 0, (this.scene.game.canvas.height / 6) - this.navigationContainer.height, (this.scene.game.canvas.width / 6) - 2, 22); + this.actionsBg = addWindow(0, (globalScene.game.canvas.height / 6) - this.navigationContainer.height, (globalScene.game.canvas.width / 6) - 2, 22); this.actionsBg.setOrigin(0, 0); - const iconAction = this.scene.add.sprite(0, 0, "keyboard"); + const iconAction = globalScene.add.sprite(0, 0, "keyboard"); iconAction.setOrigin(0, -0.1); iconAction.setPositionRelative(this.actionsBg, this.navigationContainer.width - 32, 4); this.navigationIcons["BUTTON_ACTION"] = iconAction; - const actionText = addTextObject(this.scene, 0, 0, i18next.t("settings:action"), TextStyle.SETTINGS_LABEL); + const actionText = addTextObject(0, 0, i18next.t("settings:action"), TextStyle.SETTINGS_LABEL); actionText.setOrigin(0, 0.15); actionText.setPositionRelative(iconAction, -actionText.width / 6 - 2, 0); - const iconCancel = this.scene.add.sprite(0, 0, "keyboard"); + const iconCancel = globalScene.add.sprite(0, 0, "keyboard"); iconCancel.setOrigin(0, -0.1); iconCancel.setPositionRelative(this.actionsBg, this.navigationContainer.width - 100, 4); this.navigationIcons["BUTTON_CANCEL"] = iconCancel; - const cancelText = addTextObject(this.scene, 0, 0, i18next.t("settings:back"), TextStyle.SETTINGS_LABEL); + const cancelText = addTextObject(0, 0, i18next.t("settings:back"), TextStyle.SETTINGS_LABEL); cancelText.setOrigin(0, 0.15); cancelText.setPositionRelative(iconCancel, -cancelText.width / 6 - 2, 0); - const iconReset = this.scene.add.sprite(0, 0, "keyboard"); + const iconReset = globalScene.add.sprite(0, 0, "keyboard"); iconReset.setOrigin(0, -0.1); iconReset.setPositionRelative(this.actionsBg, this.navigationContainer.width - 180, 4); this.navigationIcons["BUTTON_HOME"] = iconReset; - const resetText = addTextObject(this.scene, 0, 0, i18next.t("settings:reset"), TextStyle.SETTINGS_LABEL); + const resetText = addTextObject(0, 0, i18next.t("settings:reset"), TextStyle.SETTINGS_LABEL); resetText.setOrigin(0, 0.15); resetText.setPositionRelative(iconReset, -resetText.width / 6 - 2, 0); @@ -156,7 +155,7 @@ export default abstract class AbstractControlSettingsUiHandler extends UiHandler this.layout[config.padType] = new Map(); // Create a container for gamepad options in the scene, initially hidden. - const optionsContainer = this.scene.add.container(0, 0); + const optionsContainer = globalScene.add.container(0, 0); optionsContainer.setVisible(false); // Gather all binding settings from the configuration. @@ -195,7 +194,7 @@ export default abstract class AbstractControlSettingsUiHandler extends UiHandler } else { labelText = i18next.t(`settings:${i18nKey}`); } - settingLabels[s] = addTextObject(this.scene, 8, 28 + s * 16, labelText, labelStyle); + settingLabels[s] = addTextObject(8, 28 + s * 16, labelText, labelStyle); settingLabels[s].setOrigin(0, 0); optionsContainer.add(settingLabels[s]); @@ -208,14 +207,14 @@ export default abstract class AbstractControlSettingsUiHandler extends UiHandler if (bindingSettings.includes(this.setting[setting])) { // Create a label for non-null options, typically indicating actionable options like 'change'. if (o) { - const valueLabel = addTextObject(this.scene, 0, 0, isLock ? "" : option, TextStyle.WINDOW); + const valueLabel = addTextObject(0, 0, isLock ? "" : option, TextStyle.WINDOW); valueLabel.setOrigin(0, 0); optionsContainer.add(valueLabel); valueLabels.push(valueLabel); continue; } // For null options, add an icon for the key. - const icon = this.scene.add.sprite(0, 0, this.textureOverride ? this.textureOverride : config.padType); + const icon = globalScene.add.sprite(0, 0, this.textureOverride ? this.textureOverride : config.padType); icon.setOrigin(0, -0.15); inputsIcons[this.setting[setting]] = icon; optionsContainer.add(icon); @@ -223,7 +222,7 @@ export default abstract class AbstractControlSettingsUiHandler extends UiHandler continue; } // For regular settings like 'Gamepad support', create a label and determine if it is selected. - const valueLabel = addTextObject(this.scene, 0, 0, option, this.settingDeviceDefaults[this.setting[setting]] === o ? TextStyle.SETTINGS_SELECTED : TextStyle.WINDOW); + const valueLabel = addTextObject(0, 0, option, this.settingDeviceDefaults[this.setting[setting]] === o ? TextStyle.SETTINGS_SELECTED : TextStyle.WINDOW); valueLabel.setOrigin(0, 0); optionsContainer.add(valueLabel); @@ -273,7 +272,7 @@ export default abstract class AbstractControlSettingsUiHandler extends UiHandler } // Add vertical scrollbar - this.scrollBar = new ScrollBar(this.scene, this.optionsBg.width - 9, this.optionsBg.y + 5, 4, this.optionsBg.height - 11, this.rowsToDisplay); + this.scrollBar = new ScrollBar(this.optionsBg.width - 9, this.optionsBg.y + 5, 4, this.optionsBg.height - 11, this.rowsToDisplay); this.settingsContainer.add(this.scrollBar); // Add the settings container to the UI. @@ -289,7 +288,7 @@ export default abstract class AbstractControlSettingsUiHandler extends UiHandler * @returns The active configuration for current device */ getActiveConfig(): InterfaceConfig { - return this.scene.inputController.getActiveConfig(this.device); + return globalScene.inputController.getActiveConfig(this.device); } /** @@ -349,9 +348,9 @@ export default abstract class AbstractControlSettingsUiHandler extends UiHandler this.navigationIcons[settingName].alpha = 1; continue; } - const icon = this.scene.inputController?.getIconForLatestInputRecorded(settingName); + const icon = globalScene.inputController?.getIconForLatestInputRecorded(settingName); if (icon) { - const type = this.scene.inputController?.getLastSourceType(); + const type = globalScene.inputController?.getLastSourceType(); this.navigationIcons[settingName].setTexture(type); this.navigationIcons[settingName].setFrame(icon); this.navigationIcons[settingName].alpha = 1; @@ -444,7 +443,7 @@ export default abstract class AbstractControlSettingsUiHandler extends UiHandler // Handle cancel button press, reverting UI mode to previous state. success = true; NavigationManager.getInstance().reset(); - this.scene.ui.revertMode(); + globalScene.ui.revertMode(); } else { const cursor = this.cursor + this.scrollCursor; // Calculate the absolute cursor position. const setting = this.setting[Object.keys(this.setting)[cursor]]; @@ -456,7 +455,7 @@ export default abstract class AbstractControlSettingsUiHandler extends UiHandler if (this.settingBlacklisted.includes(setting) || !setting.includes("BUTTON_")) { success = false; } else { - success = this.setSetting(this.scene, setting, 1); + success = this.setSetting(setting, 1); } break; case Button.UP: // Move up in the menu. @@ -556,8 +555,8 @@ export default abstract class AbstractControlSettingsUiHandler extends UiHandler // Check if the cursor object exists, if not, create it. if (!this.cursorObj) { - const cursorWidth = (this.scene.game.canvas.width / 6) - (this.scrollBar.visible ? 16 : 10); - this.cursorObj = this.scene.add.nineslice(0, 0, "summary_moves_cursor", undefined, cursorWidth, 16, 1, 1, 1, 1); + const cursorWidth = (globalScene.game.canvas.width / 6) - (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 cbc93887810..7300b6d3266 100644 --- a/src/ui/settings/abstract-settings-ui-handler.ts +++ b/src/ui/settings/abstract-settings-ui-handler.ts @@ -1,14 +1,15 @@ -import BattleScene from "#app/battle-scene"; import { TextStyle, addTextObject } from "#app/ui/text"; import { Mode } from "#app/ui/ui"; import MessageUiHandler from "#app/ui/message-ui-handler"; import { addWindow } from "#app/ui/ui-theme"; import { ScrollBar } from "#app/ui/scroll-bar"; import { Button } from "#enums/buttons"; -import { InputsIcons } from "#app/ui/settings/abstract-control-settings-ui-handler"; +import type { InputsIcons } from "#app/ui/settings/abstract-control-settings-ui-handler"; import NavigationMenu, { NavigationManager } from "#app/ui/settings/navigationMenu"; -import { Setting, SettingKeys, SettingType } from "#app/system/settings/settings"; +import type { SettingType } from "#app/system/settings/settings"; +import { Setting, SettingKeys } from "#app/system/settings/settings"; import i18next from "i18next"; +import { globalScene } from "#app/global-scene"; /** @@ -42,8 +43,8 @@ export default class AbstractSettingsUiHandler extends MessageUiHandler { protected settings: Array; protected localStorageKey: string; - constructor(scene: BattleScene, type: SettingType, mode: Mode | null = null) { - super(scene, mode); + constructor(type: SettingType, mode: Mode | null = null) { + super(mode); this.settings = Setting.filter(s => s.type === type && !s?.isHidden?.()); this.reloadRequired = false; this.rowsToDisplay = 8; @@ -55,40 +56,40 @@ export default class AbstractSettingsUiHandler extends MessageUiHandler { setup() { const ui = this.getUi(); - this.settingsContainer = this.scene.add.container(1, -(this.scene.game.canvas.height / 6) + 1); + this.settingsContainer = globalScene.add.container(1, -(globalScene.game.canvas.height / 6) + 1); this.settingsContainer.setName(`settings-${this.title}`); - this.settingsContainer.setInteractive(new Phaser.Geom.Rectangle(0, 0, this.scene.game.canvas.width / 6, this.scene.game.canvas.height / 6 - 20), Phaser.Geom.Rectangle.Contains); + this.settingsContainer.setInteractive(new Phaser.Geom.Rectangle(0, 0, globalScene.game.canvas.width / 6, globalScene.game.canvas.height / 6 - 20), Phaser.Geom.Rectangle.Contains); this.navigationIcons = {}; - this.navigationContainer = new NavigationMenu(this.scene, 0, 0); + this.navigationContainer = new NavigationMenu(0, 0); - this.optionsBg = addWindow(this.scene, 0, this.navigationContainer.height, (this.scene.game.canvas.width / 6) - 2, (this.scene.game.canvas.height / 6) - 16 - this.navigationContainer.height - 2); + this.optionsBg = addWindow(0, this.navigationContainer.height, (globalScene.game.canvas.width / 6) - 2, (globalScene.game.canvas.height / 6) - 16 - this.navigationContainer.height - 2); this.optionsBg.setName("window-options-bg"); this.optionsBg.setOrigin(0, 0); - const actionsBg = addWindow(this.scene, 0, (this.scene.game.canvas.height / 6) - this.navigationContainer.height, (this.scene.game.canvas.width / 6) - 2, 22); + const actionsBg = addWindow(0, (globalScene.game.canvas.height / 6) - this.navigationContainer.height, (globalScene.game.canvas.width / 6) - 2, 22); actionsBg.setOrigin(0, 0); - const iconAction = this.scene.add.sprite(0, 0, "keyboard"); + const iconAction = globalScene.add.sprite(0, 0, "keyboard"); iconAction.setOrigin(0, -0.1); iconAction.setPositionRelative(actionsBg, this.navigationContainer.width - 32, 4); this.navigationIcons["BUTTON_ACTION"] = iconAction; - const actionText = addTextObject(this.scene, 0, 0, i18next.t("settings:action"), TextStyle.SETTINGS_LABEL); + const actionText = addTextObject(0, 0, i18next.t("settings:action"), TextStyle.SETTINGS_LABEL); actionText.setOrigin(0, 0.15); actionText.setPositionRelative(iconAction, -actionText.width / 6 - 2, 0); - const iconCancel = this.scene.add.sprite(0, 0, "keyboard"); + const iconCancel = globalScene.add.sprite(0, 0, "keyboard"); iconCancel.setOrigin(0, -0.1); iconCancel.setPositionRelative(actionsBg, this.navigationContainer.width - 100, 4); this.navigationIcons["BUTTON_CANCEL"] = iconCancel; - const cancelText = addTextObject(this.scene, 0, 0, i18next.t("settings:back"), TextStyle.SETTINGS_LABEL); + const cancelText = addTextObject(0, 0, i18next.t("settings:back"), TextStyle.SETTINGS_LABEL); cancelText.setOrigin(0, 0.15); cancelText.setPositionRelative(iconCancel, -cancelText.width / 6 - 2, 0); - this.optionsContainer = this.scene.add.container(0, 0); + this.optionsContainer = globalScene.add.container(0, 0); this.settingLabels = []; this.optionValueLabels = []; @@ -102,12 +103,12 @@ export default class AbstractSettingsUiHandler extends MessageUiHandler { settingName += ` (${i18next.t("settings:requireReload")})`; } - this.settingLabels[s] = addTextObject(this.scene, 8, 28 + s * 16, settingName, TextStyle.SETTINGS_LABEL); + this.settingLabels[s] = addTextObject(8, 28 + s * 16, settingName, TextStyle.SETTINGS_LABEL); this.settingLabels[s].setOrigin(0, 0); this.optionsContainer.add(this.settingLabels[s]); this.optionValueLabels.push(setting.options.map((option, o) => { - const valueLabel = addTextObject(this.scene, 0, 0, option.label, setting.default === o ? TextStyle.SETTINGS_SELECTED : TextStyle.SETTINGS_VALUE); + const valueLabel = addTextObject(0, 0, option.label, setting.default === o ? TextStyle.SETTINGS_SELECTED : TextStyle.SETTINGS_VALUE); valueLabel.setOrigin(0, 0); this.optionsContainer.add(valueLabel); @@ -132,20 +133,20 @@ export default class AbstractSettingsUiHandler extends MessageUiHandler { this.optionCursors = this.settings.map(setting => setting.default); - this.scrollBar = new ScrollBar(this.scene, this.optionsBg.width - 9, this.optionsBg.y + 5, 4, this.optionsBg.height - 11, this.rowsToDisplay); + this.scrollBar = new ScrollBar(this.optionsBg.width - 9, this.optionsBg.y + 5, 4, this.optionsBg.height - 11, this.rowsToDisplay); this.scrollBar.setTotalRows(this.settings.length); // Two-lines message box - this.messageBoxContainer = this.scene.add.container(0, this.scene.scaledCanvas.height); + this.messageBoxContainer = globalScene.add.container(0, globalScene.scaledCanvas.height); this.messageBoxContainer.setName("settings-message-box"); this.messageBoxContainer.setVisible(false); - const settingsMessageBox = addWindow(this.scene, 0, -1, this.scene.scaledCanvas.width - 2, 48); + const settingsMessageBox = addWindow(0, -1, globalScene.scaledCanvas.width - 2, 48); settingsMessageBox.setOrigin(0, 1); this.messageBoxContainer.add(settingsMessageBox); - const messageText = addTextObject(this.scene, 8, -40, "", TextStyle.WINDOW, { maxLines: 2 }); - messageText.setWordWrapWidth(this.scene.game.canvas.width - 60); + const messageText = addTextObject(8, -40, "", TextStyle.WINDOW, { maxLines: 2 }); + messageText.setWordWrapWidth(globalScene.game.canvas.width - 60); messageText.setName("settings-message"); messageText.setOrigin(0, 0); @@ -181,9 +182,9 @@ export default class AbstractSettingsUiHandler extends MessageUiHandler { this.navigationIcons[settingName].alpha = 1; continue; } - const icon = this.scene.inputController?.getIconForLatestInputRecorded(settingName); + const icon = globalScene.inputController?.getIconForLatestInputRecorded(settingName); if (icon) { - const type = this.scene.inputController?.getLastSourceType(); + const type = globalScene.inputController?.getLastSourceType(); this.navigationIcons[settingName].setTexture(type); this.navigationIcons[settingName].setFrame(icon); this.navigationIcons[settingName].alpha = 1; @@ -238,7 +239,7 @@ export default class AbstractSettingsUiHandler extends MessageUiHandler { success = true; NavigationManager.getInstance().reset(); // Reverts UI to its previous state on cancel. - this.scene.ui.revertMode(); + globalScene.ui.revertMode(); } else { const cursor = this.cursor + this.scrollCursor; switch (button) { @@ -314,7 +315,7 @@ export default class AbstractSettingsUiHandler extends MessageUiHandler { activateSetting(setting: Setting): boolean { switch (setting.key) { case SettingKeys.Move_Touch_Controls: - this.scene.inputController.moveTouchControlsHandler.enableConfigurationMode(this.getUi(), this.scene); + globalScene.inputController.moveTouchControlsHandler.enableConfigurationMode(this.getUi()); return true; } return false; @@ -330,8 +331,8 @@ export default class AbstractSettingsUiHandler extends MessageUiHandler { const ret = super.setCursor(cursor); if (!this.cursorObj) { - const cursorWidth = (this.scene.game.canvas.width / 6) - (this.scrollBar.visible ? 16 : 10); - this.cursorObj = this.scene.add.nineslice(0, 0, "summary_moves_cursor", undefined, cursorWidth, 16, 1, 1, 1, 1); + const cursorWidth = (globalScene.game.canvas.width / 6) - (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); } @@ -369,7 +370,7 @@ export default class AbstractSettingsUiHandler extends MessageUiHandler { if (save) { const saveSetting = () => { - this.scene.gameData.saveSetting(setting.key, cursor); + globalScene.gameData.saveSetting(setting.key, cursor); if (setting.requireReload) { this.reloadRequired = true; } @@ -378,20 +379,20 @@ export default class AbstractSettingsUiHandler extends MessageUiHandler { // For settings that ask for confirmation, display confirmation message and a Yes/No prompt before saving the setting if (setting.options[cursor].needConfirmation) { const confirmUpdateSetting = () => { - this.scene.ui.revertMode(); + globalScene.ui.revertMode(); this.showText(""); saveSetting(); }; const cancelUpdateSetting = () => { - this.scene.ui.revertMode(); + globalScene.ui.revertMode(); this.showText(""); // Put the cursor back to its previous position without saving or asking for confirmation again this.setOptionCursor(settingIndex, lastCursor, false); }; const confirmationMessage = setting.options[cursor].confirmationMessage ?? i18next.t("settings:defaultConfirmMessage"); - this.scene.ui.showText(confirmationMessage, null, () => { - this.scene.ui.setOverlayMode(Mode.CONFIRM, confirmUpdateSetting, cancelUpdateSetting, null, null, 1, 750); + globalScene.ui.showText(confirmationMessage, null, () => { + globalScene.ui.setOverlayMode(Mode.CONFIRM, confirmUpdateSetting, cancelUpdateSetting, null, null, 1, 750); }); } else { saveSetting(); @@ -445,10 +446,10 @@ export default class AbstractSettingsUiHandler extends MessageUiHandler { this.settingsContainer.setVisible(false); this.setScrollCursor(0); this.eraseCursor(); - this.getUi().bgmBar.toggleBgmBar(this.scene.showBgmBar); + this.getUi().bgmBar.toggleBgmBar(globalScene.showBgmBar); if (this.reloadRequired) { this.reloadRequired = false; - this.scene.reset(true, false, true); + globalScene.reset(true, false, true); } } @@ -462,7 +463,7 @@ export default class AbstractSettingsUiHandler extends MessageUiHandler { this.cursorObj = null; } - override showText(text: string, delay?: integer, callback?: Function, callbackDelay?: integer, prompt?: boolean, promptDelay?: integer) { + override showText(text: string, delay?: number, callback?: Function, callbackDelay?: number, prompt?: boolean, promptDelay?: number) { this.messageBoxContainer.setVisible(!!text?.length); super.showText(text, delay, callback, callbackDelay, prompt, promptDelay); } diff --git a/src/ui/settings/gamepad-binding-ui-handler.ts b/src/ui/settings/gamepad-binding-ui-handler.ts index e89529f6453..b69c2f34e06 100644 --- a/src/ui/settings/gamepad-binding-ui-handler.ts +++ b/src/ui/settings/gamepad-binding-ui-handler.ts @@ -1,37 +1,37 @@ -import BattleScene from "../../battle-scene"; import AbstractBindingUiHandler from "./abstract-binding-ui-handler"; -import { Mode } from "../ui"; +import type { Mode } from "../ui"; import { Device } from "#enums/devices"; import { getIconWithSettingName, getKeyWithKeycode } from "#app/configs/inputs/configHandler"; import { addTextObject, TextStyle } from "#app/ui/text"; +import { globalScene } from "#app/global-scene"; export default class GamepadBindingUiHandler extends AbstractBindingUiHandler { - constructor(scene: BattleScene, mode: Mode | null = null) { - super(scene, mode); - this.scene.input.gamepad?.on("down", this.gamepadButtonDown, this); + constructor(mode: Mode | null = null) { + super(mode); + globalScene.input.gamepad?.on("down", this.gamepadButtonDown, this); } setup() { super.setup(); // New button icon setup. - this.newButtonIcon = this.scene.add.sprite(0, 0, "xbox"); + this.newButtonIcon = globalScene.add.sprite(0, 0, "xbox"); this.newButtonIcon.setPositionRelative(this.optionSelectBg, 78, 16); this.newButtonIcon.setOrigin(0.5); this.newButtonIcon.setVisible(false); - this.swapText = addTextObject(this.scene, 0, 0, "will swap with", TextStyle.WINDOW); + this.swapText = addTextObject(0, 0, "will swap with", TextStyle.WINDOW); this.swapText.setOrigin(0.5); this.swapText.setPositionRelative(this.optionSelectBg, this.optionSelectBg.width / 2 - 2, this.optionSelectBg.height / 2 - 2); this.swapText.setVisible(false); - this.targetButtonIcon = this.scene.add.sprite(0, 0, "xbox"); + this.targetButtonIcon = globalScene.add.sprite(0, 0, "xbox"); this.targetButtonIcon.setPositionRelative(this.optionSelectBg, 78, 48); this.targetButtonIcon.setOrigin(0.5); this.targetButtonIcon.setVisible(false); - this.actionLabel = addTextObject(this.scene, 0, 0, "Confirm swap", TextStyle.SETTINGS_LABEL); + this.actionLabel = addTextObject(0, 0, "Confirm swap", TextStyle.SETTINGS_LABEL); this.actionLabel.setOrigin(0, 0.5); this.actionLabel.setPositionRelative(this.actionBg, this.actionBg.width - 75, this.actionBg.height / 2); this.actionsContainer.add(this.actionLabel); @@ -42,7 +42,7 @@ export default class GamepadBindingUiHandler extends AbstractBindingUiHandler { } getSelectedDevice() { - return this.scene.inputController?.selectedDevice[Device.GAMEPAD]; + return globalScene.inputController?.selectedDevice[Device.GAMEPAD]; } gamepadButtonDown(pad: Phaser.Input.Gamepad.Gamepad, button: Phaser.Input.Gamepad.Button, value: number): void { @@ -51,7 +51,7 @@ export default class GamepadBindingUiHandler extends AbstractBindingUiHandler { if (!this.listening || pad.id.toLowerCase() !== this.getSelectedDevice() || blacklist.includes(button.index) || this.buttonPressed !== null) { return; } - const activeConfig = this.scene.inputController.getActiveConfig(Device.GAMEPAD); + const activeConfig = globalScene.inputController.getActiveConfig(Device.GAMEPAD); const type = activeConfig.padType; const key = getKeyWithKeycode(activeConfig, button.index); const buttonIcon = activeConfig.icons[key]; @@ -64,9 +64,9 @@ export default class GamepadBindingUiHandler extends AbstractBindingUiHandler { } swapAction(): boolean { - const activeConfig = this.scene.inputController.getActiveConfig(Device.GAMEPAD); - if (this.scene.inputController.assignBinding(activeConfig, this.target, this.buttonPressed)) { - this.scene.gameData.saveMappingConfigs(this.getSelectedDevice(), activeConfig); + const activeConfig = globalScene.inputController.getActiveConfig(Device.GAMEPAD); + if (globalScene.inputController.assignBinding(activeConfig, this.target, this.buttonPressed)) { + globalScene.gameData.saveMappingConfigs(this.getSelectedDevice(), activeConfig); return true; } return false; diff --git a/src/ui/settings/keyboard-binding-ui-handler.ts b/src/ui/settings/keyboard-binding-ui-handler.ts index 52b1a0e385f..ddc60a15631 100644 --- a/src/ui/settings/keyboard-binding-ui-handler.ts +++ b/src/ui/settings/keyboard-binding-ui-handler.ts @@ -1,29 +1,29 @@ -import BattleScene from "../../battle-scene"; import AbstractBindingUiHandler from "./abstract-binding-ui-handler"; -import { Mode } from "../ui"; +import type { Mode } from "../ui"; import { getKeyWithKeycode } from "#app/configs/inputs/configHandler"; import { Device } from "#enums/devices"; import { addTextObject, TextStyle } from "#app/ui/text"; +import { globalScene } from "#app/global-scene"; export default class KeyboardBindingUiHandler extends AbstractBindingUiHandler { - constructor(scene: BattleScene, mode: Mode | null = null) { - super(scene, mode); + constructor(mode: Mode | null = null) { + super(mode); // Listen to gamepad button down events to initiate binding. - scene.input.keyboard?.on("keydown", this.onKeyDown, this); + globalScene.input.keyboard?.on("keydown", this.onKeyDown, this); } setup() { super.setup(); // New button icon setup. - this.newButtonIcon = this.scene.add.sprite(0, 0, "keyboard"); + this.newButtonIcon = globalScene.add.sprite(0, 0, "keyboard"); this.newButtonIcon.setPositionRelative(this.optionSelectBg, 78, 32); this.newButtonIcon.setOrigin(0.5); this.newButtonIcon.setVisible(false); - this.actionLabel = addTextObject(this.scene, 0, 0, "Assign button", TextStyle.SETTINGS_LABEL); + this.actionLabel = addTextObject(0, 0, "Assign button", TextStyle.SETTINGS_LABEL); this.actionLabel.setOrigin(0, 0.5); this.actionLabel.setPositionRelative(this.actionBg, this.actionBg.width - 80, this.actionBg.height / 2); this.actionsContainer.add(this.actionLabel); @@ -32,7 +32,7 @@ export default class KeyboardBindingUiHandler extends AbstractBindingUiHandler { } getSelectedDevice() { - return this.scene.inputController?.selectedDevice[Device.KEYBOARD]; + return globalScene.inputController?.selectedDevice[Device.KEYBOARD]; } onKeyDown(event): void { @@ -51,7 +51,7 @@ export default class KeyboardBindingUiHandler extends AbstractBindingUiHandler { if (!this.listening || this.buttonPressed !== null || blacklist.includes(key)) { return; } - const activeConfig = this.scene.inputController.getActiveConfig(Device.KEYBOARD); + const activeConfig = globalScene.inputController.getActiveConfig(Device.KEYBOARD); const _key = getKeyWithKeycode(activeConfig, key); const buttonIcon = activeConfig.icons[_key]; if (!buttonIcon) { @@ -63,9 +63,9 @@ export default class KeyboardBindingUiHandler extends AbstractBindingUiHandler { } swapAction(): boolean { - const activeConfig = this.scene.inputController.getActiveConfig(Device.KEYBOARD); - if (this.scene.inputController.assignBinding(activeConfig, this.target, this.buttonPressed)) { - this.scene.gameData.saveMappingConfigs(this.getSelectedDevice(), activeConfig); + const activeConfig = globalScene.inputController.getActiveConfig(Device.KEYBOARD); + if (globalScene.inputController.assignBinding(activeConfig, this.target, this.buttonPressed)) { + globalScene.gameData.saveMappingConfigs(this.getSelectedDevice(), activeConfig); return true; } return false; diff --git a/src/ui/settings/move-touch-controls-handler.ts b/src/ui/settings/move-touch-controls-handler.ts index eda75a54a63..48677122363 100644 --- a/src/ui/settings/move-touch-controls-handler.ts +++ b/src/ui/settings/move-touch-controls-handler.ts @@ -1,6 +1,7 @@ -import TouchControl from "#app/touch-controls"; -import UI from "#app/ui/ui"; -import { Scene } from "phaser"; +import { globalScene } from "#app/global-scene"; +import type TouchControl from "#app/touch-controls"; +import type UI from "#app/ui/ui"; +import i18next from "i18next"; export const TOUCH_CONTROL_POSITIONS_LANDSCAPE = "touchControlPositionsLandscape"; export const TOUCH_CONTROL_POSITIONS_PORTRAIT = "touchControlPositionsPortrait"; @@ -71,7 +72,7 @@ export default class MoveTouchControlsHandler { if (this.inConfigurationMode) { const orientation = document.querySelector("#touchControls #orientation"); if (orientation) { - orientation.textContent = this.isLandscapeMode ? "Landscape" : "Portrait"; + orientation.textContent = this.isLandscapeMode ? i18next.t("settings:landscape") : i18next.t("settings:portrait"); } } const positions = this.getSavedPositionsOfCurrentOrientation() ?? []; @@ -90,19 +91,22 @@ export default class MoveTouchControlsHandler { const toolbar = document.createElement("div"); toolbar.id = "configToolbar"; toolbar.innerHTML = ` -

-
-
Reset
-
Save & close
-
Cancel
-
-
-
- Orientation: ${this.isLandscapeMode ? "Landscape" : "Portrait"} -
+
+
+
${i18next.t("settings:touchReset")}
+
${i18next.t("settings:touchSaveClose")}
+
${i18next.t("settings:touchCancel")}
+
+
+
+ ${i18next.t("settings:orientation")} + + ${this.isLandscapeMode ? i18next.t("settings:landscape") : i18next.t("settings:portrait")} +
- `; +
+ `; return toolbar; } @@ -319,11 +323,10 @@ export default class MoveTouchControlsHandler { * Creates an overlay that covers the screen and allows the user to drag the touch controls around. * Also enables the toolbar for saving, resetting, and canceling the changes. * @param ui The UI of the game. - * @param scene The scene of the game. */ - private createOverlay(ui: UI, scene: Scene) { - const container = new Phaser.GameObjects.Container(scene, 0, 0); - const overlay = new Phaser.GameObjects.Rectangle(scene, 0, 0, scene.game.canvas.width, scene.game.canvas.height, 0x000000, 0.5); + private createOverlay(ui: UI) { + const container = new Phaser.GameObjects.Container(globalScene, 0, 0); + const overlay = new Phaser.GameObjects.Rectangle(globalScene, 0, 0, globalScene.game.canvas.width, globalScene.game.canvas.height, 0x000000, 0.5); overlay.setInteractive(); container.add(overlay); ui.add(container); @@ -336,15 +339,14 @@ export default class MoveTouchControlsHandler { /** * Allows the user to configure the touch controls by dragging buttons around the screen. * @param ui The UI of the game. - * @param scene The scene of the game. */ - public enableConfigurationMode(ui: UI, scene: Scene) { + public enableConfigurationMode(ui: UI) { if (this.inConfigurationMode) { return; } this.inConfigurationMode = true; this.touchControls.disable(); - this.createOverlay(ui, scene); + this.createOverlay(ui); this.createToolbar(); // Create event listeners with a delay to prevent the touchstart event from being triggered immediately. setTimeout(() => { diff --git a/src/ui/settings/navigationMenu.ts b/src/ui/settings/navigationMenu.ts index ab86fa1569a..5fa53b7c270 100644 --- a/src/ui/settings/navigationMenu.ts +++ b/src/ui/settings/navigationMenu.ts @@ -1,6 +1,6 @@ -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { Mode } from "#app/ui/ui"; -import { InputsIcons } from "#app/ui/settings/abstract-control-settings-ui-handler"; +import type { InputsIcons } from "#app/ui/settings/abstract-control-settings-ui-handler"; import { addTextObject, setTextStyle, TextStyle } from "#app/ui/text"; import { addWindow } from "#app/ui/ui-theme"; import { Button } from "#enums/buttons"; @@ -23,7 +23,7 @@ export class NavigationManager { * Creates an instance of NavigationManager. * To create a new tab in the menu, add the mode to the modes array and the label to the labels array. * and instantiate a new NavigationMenu instance in your handler - * like: this.navigationContainer = new NavigationMenu(this.scene, 0, 0); + * like: this.navigationContainer = new NavigationMenu(0, 0); */ constructor() { this.modes = [ @@ -54,10 +54,9 @@ export class NavigationManager { /** * Navigates modes based on given direction - * @param scene The current BattleScene instance * @param direction LEFT or RIGHT */ - public navigate(scene, direction) { + public navigate(direction) { const pos = this.modes.indexOf(this.selectedMode); const maxPos = this.modes.length - 1; const increment = direction === LEFT ? -1 : 1; @@ -68,7 +67,7 @@ export class NavigationManager { } else { this.selectedMode = this.modes[pos + increment]; } - scene.ui.setMode(this.selectedMode); + globalScene.ui.setMode(this.selectedMode); this.updateNavigationMenus(); } @@ -90,22 +89,26 @@ export class NavigationManager { } } + /** + * Removes menus from the manager in preparation for reset + */ + public clearNavigationMenus() { + this.navigationMenus.length = 0; + } + } export default class NavigationMenu extends Phaser.GameObjects.Container { private navigationIcons: InputsIcons; - public scene: BattleScene; protected headerTitles: Phaser.GameObjects.Text[] = new Array(); /** * Creates an instance of NavigationMenu. - * @param scene The current BattleScene instance. * @param x The x position of the NavigationMenu. * @param y The y position of the NavigationMenu. */ - constructor(scene: BattleScene, x: number, y: number) { - super(scene, x, y); - this.scene = scene; + constructor(x: number, y: number) { + super(globalScene, x, y); this.setup(); } @@ -115,7 +118,7 @@ export default class NavigationMenu extends Phaser.GameObjects.Container { */ setup() { const navigationManager = NavigationManager.getInstance(); - const headerBg = addWindow(this.scene, 0, 0, (this.scene.game.canvas.width / 6) - 2, 24); + const headerBg = addWindow(0, 0, (globalScene.game.canvas.width / 6) - 2, 24); headerBg.setOrigin(0, 0); this.add(headerBg); this.width = headerBg.width; @@ -123,12 +126,12 @@ export default class NavigationMenu extends Phaser.GameObjects.Container { this.navigationIcons = {}; - const iconPreviousTab = this.scene.add.sprite(8, 4, "keyboard"); + const iconPreviousTab = globalScene.add.sprite(8, 4, "keyboard"); iconPreviousTab.setOrigin(0, -0.1); iconPreviousTab.setPositionRelative(headerBg, 8, 4); this.navigationIcons["BUTTON_CYCLE_FORM"] = iconPreviousTab; - const iconNextTab = this.scene.add.sprite(0, 0, "keyboard"); + const iconNextTab = globalScene.add.sprite(0, 0, "keyboard"); iconNextTab.setOrigin(0, -0.1); iconNextTab.setPositionRelative(headerBg, headerBg.width - 20, 4); this.navigationIcons["BUTTON_CYCLE_SHINY"] = iconNextTab; @@ -136,7 +139,7 @@ export default class NavigationMenu extends Phaser.GameObjects.Container { let relative: Phaser.GameObjects.Sprite | Phaser.GameObjects.Text = iconPreviousTab; let relativeWidth: number = iconPreviousTab.width * 6; for (const label of navigationManager.labels) { - const labelText = addTextObject(this.scene, 0, 0, label, TextStyle.SETTINGS_LABEL); + const labelText = addTextObject(0, 0, label, TextStyle.SETTINGS_LABEL); labelText.setOrigin(0, 0); labelText.setPositionRelative(relative, 6 + relativeWidth / 6, 0); this.add(labelText); @@ -159,7 +162,7 @@ export default class NavigationMenu extends Phaser.GameObjects.Container { const posSelected = navigationManager.modes.indexOf(navigationManager.selectedMode); for (const [ index, title ] of this.headerTitles.entries()) { - setTextStyle(title, this.scene, index === posSelected ? TextStyle.SETTINGS_SELECTED : TextStyle.SETTINGS_LABEL); + setTextStyle(title, index === posSelected ? TextStyle.SETTINGS_SELECTED : TextStyle.SETTINGS_LABEL); } } @@ -178,9 +181,9 @@ export default class NavigationMenu extends Phaser.GameObjects.Container { this.navigationIcons[settingName].alpha = 1; continue; } - const icon = this.scene.inputController?.getIconForLatestInputRecorded(settingName); + const icon = globalScene.inputController?.getIconForLatestInputRecorded(settingName); if (icon) { - const type = this.scene.inputController?.getLastSourceType(); + const type = globalScene.inputController?.getLastSourceType(); this.navigationIcons[settingName].setTexture(type); this.navigationIcons[settingName].setFrame(icon); this.navigationIcons[settingName].alpha = 1; @@ -199,10 +202,10 @@ export default class NavigationMenu extends Phaser.GameObjects.Container { const navigationManager = NavigationManager.getInstance(); switch (button) { case Button.CYCLE_FORM: - navigationManager.navigate(this.scene, LEFT); + navigationManager.navigate(LEFT); return true; case Button.CYCLE_SHINY: - navigationManager.navigate(this.scene, RIGHT); + navigationManager.navigate(RIGHT); return true; } return false; diff --git a/src/ui/settings/option-select-ui-handler.ts b/src/ui/settings/option-select-ui-handler.ts index 8d2c534476a..b3d1735dc19 100644 --- a/src/ui/settings/option-select-ui-handler.ts +++ b/src/ui/settings/option-select-ui-handler.ts @@ -1,13 +1,12 @@ -import BattleScene from "../../battle-scene"; import AbstractOptionSelectUiHandler from "../abstact-option-select-ui-handler"; import { Mode } from "../ui"; export default class OptionSelectUiHandler extends AbstractOptionSelectUiHandler { - constructor(scene: BattleScene, mode: Mode = Mode.OPTION_SELECT) { - super(scene, mode); + constructor(mode: Mode = Mode.OPTION_SELECT) { + super(mode); } - getWindowWidth(): integer { + getWindowWidth(): number { return 64; } } diff --git a/src/ui/settings/settings-audio-ui-handler.ts b/src/ui/settings/settings-audio-ui-handler.ts index 86c6a9bce40..3b591eab4b9 100644 --- a/src/ui/settings/settings-audio-ui-handler.ts +++ b/src/ui/settings/settings-audio-ui-handler.ts @@ -1,18 +1,16 @@ -import BattleScene from "../../battle-scene"; -import { Mode } from "../ui"; -"#app/inputs-controller"; +import type { Mode } from "../ui"; import AbstractSettingsUiHandler from "./abstract-settings-ui-handler"; import { SettingType } from "#app/system/settings/settings"; +"#app/inputs-controller"; export default class SettingsAudioUiHandler extends AbstractSettingsUiHandler { /** * Creates an instance of SettingsAudioUiHandler. * - * @param scene - The BattleScene instance. * @param mode - The UI mode, optional. */ - constructor(scene: BattleScene, mode: Mode | null = null) { - super(scene, SettingType.AUDIO, mode); + constructor(mode: Mode | null = null) { + super(SettingType.AUDIO, mode); this.title = "Audio"; this.localStorageKey = "settings"; this.rowsToDisplay = 6; diff --git a/src/ui/settings/settings-display-ui-handler.ts b/src/ui/settings/settings-display-ui-handler.ts index c4cbb0dfe58..98fc16e2f96 100644 --- a/src/ui/settings/settings-display-ui-handler.ts +++ b/src/ui/settings/settings-display-ui-handler.ts @@ -1,18 +1,16 @@ -import BattleScene from "../../battle-scene"; -import { Mode } from "../ui"; -"#app/inputs-controller"; +import type { Mode } from "../ui"; import AbstractSettingsUiHandler from "./abstract-settings-ui-handler"; import { SettingKeys, SettingType } from "#app/system/settings/settings"; +"#app/inputs-controller"; export default class SettingsDisplayUiHandler extends AbstractSettingsUiHandler { /** * Creates an instance of SettingsGamepadUiHandler. * - * @param scene - The BattleScene instance. * @param mode - The UI mode, optional. */ - constructor(scene: BattleScene, mode: Mode | null = null) { - super(scene, SettingType.DISPLAY, mode); + constructor(mode: Mode | null = null) { + super(SettingType.DISPLAY, mode); this.title = "Display"; /** diff --git a/src/ui/settings/settings-gamepad-ui-handler.ts b/src/ui/settings/settings-gamepad-ui-handler.ts index 864142e055b..3d23b7e99bb 100644 --- a/src/ui/settings/settings-gamepad-ui-handler.ts +++ b/src/ui/settings/settings-gamepad-ui-handler.ts @@ -1,6 +1,5 @@ -import BattleScene from "../../battle-scene"; import { addTextObject, TextStyle } from "../text"; -import { Mode } from "../ui"; +import type { Mode } from "../ui"; import { setSettingGamepad, SettingGamepad, @@ -11,11 +10,12 @@ import { import pad_xbox360 from "#app/configs/inputs/pad_xbox360"; import pad_dualshock from "#app/configs/inputs/pad_dualshock"; import pad_unlicensedSNES from "#app/configs/inputs/pad_unlicensedSNES"; -import { InterfaceConfig } from "#app/inputs-controller"; +import type { InterfaceConfig } from "#app/inputs-controller"; import AbstractControlSettingsUiHandler from "#app/ui/settings/abstract-control-settings-ui-handler"; import { Device } from "#enums/devices"; import { truncateString } from "#app/utils"; import i18next from "i18next"; +import { globalScene } from "#app/global-scene"; /** * Class representing the settings UI handler for gamepads. @@ -28,11 +28,10 @@ export default class SettingsGamepadUiHandler extends AbstractControlSettingsUiH /** * Creates an instance of SettingsGamepadUiHandler. * - * @param scene - The BattleScene instance. * @param mode - The UI mode, optional. */ - constructor(scene: BattleScene, mode: Mode | null = null) { - super(scene, mode); + constructor(mode: Mode | null = null) { + super(mode); this.titleSelected = "Gamepad"; this.setting = SettingGamepad; this.settingDeviceDefaults = settingGamepadDefaults; @@ -53,9 +52,9 @@ export default class SettingsGamepadUiHandler extends AbstractControlSettingsUiH super.setup(); // If no gamepads are detected, set up a default UI prompt in the settings container. this.layout["noGamepads"] = new Map(); - const optionsContainer = this.scene.add.container(0, 0); + const optionsContainer = globalScene.add.container(0, 0); optionsContainer.setVisible(false); // Initially hide the container as no gamepads are connected. - const label = addTextObject(this.scene, 8, 28, i18next.t("settings:gamepadPleasePlug"), TextStyle.SETTINGS_LABEL); + const label = addTextObject(8, 28, i18next.t("settings:gamepadPleasePlug"), TextStyle.SETTINGS_LABEL); label.setOrigin(0, 0); optionsContainer.add(label); this.settingsContainer.add(optionsContainer); @@ -107,7 +106,7 @@ export default class SettingsGamepadUiHandler extends AbstractControlSettingsUiH // Update the text of the first option label under the current setting to the name of the chosen gamepad, // truncating the name to 30 characters if necessary. - this.layout[_key].optionValueLabels[index][0].setText(truncateString(this.scene.inputController.selectedDevice[Device.GAMEPAD], 20)); + this.layout[_key].optionValueLabels[index][0].setText(truncateString(globalScene.inputController.selectedDevice[Device.GAMEPAD], 20)); } } } @@ -121,7 +120,7 @@ export default class SettingsGamepadUiHandler extends AbstractControlSettingsUiH */ saveSettingToLocalStorage(settingName, cursor): void { if (this.setting[settingName] !== this.setting.Controller) { - this.scene.gameData.saveControlSetting(this.device, this.localStoragePropertyName, settingName, this.settingDeviceDefaults, cursor); + globalScene.gameData.saveControlSetting(this.device, this.localStoragePropertyName, settingName, this.settingDeviceDefaults, cursor); } } } diff --git a/src/ui/settings/settings-keyboard-ui-handler.ts b/src/ui/settings/settings-keyboard-ui-handler.ts index 17d91b27c57..ad9f23cc0d9 100644 --- a/src/ui/settings/settings-keyboard-ui-handler.ts +++ b/src/ui/settings/settings-keyboard-ui-handler.ts @@ -1,4 +1,3 @@ -import BattleScene from "../../battle-scene"; import { Mode } from "../ui"; import cfg_keyboard_qwerty from "#app/configs/inputs/cfg_keyboard_qwerty"; import { @@ -10,12 +9,13 @@ import { } from "#app/system/settings/settings-keyboard"; import { reverseValueToKeySetting, truncateString } from "#app/utils"; import AbstractControlSettingsUiHandler from "#app/ui/settings/abstract-control-settings-ui-handler"; -import { InterfaceConfig } from "#app/inputs-controller"; +import type { InterfaceConfig } from "#app/inputs-controller"; import { addTextObject, TextStyle } from "#app/ui/text"; import { deleteBind } from "#app/configs/inputs/configHandler"; import { Device } from "#enums/devices"; import { NavigationManager } from "#app/ui/settings/navigationMenu"; import i18next from "i18next"; +import { globalScene } from "#app/global-scene"; /** * Class representing the settings UI handler for keyboards. @@ -26,11 +26,10 @@ export default class SettingsKeyboardUiHandler extends AbstractControlSettingsUi /** * Creates an instance of SettingsKeyboardUiHandler. * - * @param scene - The BattleScene instance. * @param mode - The UI mode, optional. */ - constructor(scene: BattleScene, mode: Mode | null = null) { - super(scene, mode); + constructor(mode: Mode | null = null) { + super(mode); this.titleSelected = "Keyboard"; this.setting = SettingKeyboard; this.settingDeviceDefaults = settingKeyboardDefaults; @@ -42,8 +41,8 @@ export default class SettingsKeyboardUiHandler extends AbstractControlSettingsUi this.settingBlacklisted = settingKeyboardBlackList; this.device = Device.KEYBOARD; - const deleteEvent = scene.input.keyboard?.addKey(Phaser.Input.Keyboard.KeyCodes.DELETE); - const restoreDefaultEvent = scene.input.keyboard?.addKey(Phaser.Input.Keyboard.KeyCodes.HOME); + const deleteEvent = globalScene.input.keyboard?.addKey(Phaser.Input.Keyboard.KeyCodes.DELETE); + const restoreDefaultEvent = globalScene.input.keyboard?.addKey(Phaser.Input.Keyboard.KeyCodes.HOME); deleteEvent && deleteEvent.on("up", this.onDeleteDown, this); restoreDefaultEvent && restoreDefaultEvent.on("up", this.onHomeDown, this); } @@ -57,19 +56,19 @@ export default class SettingsKeyboardUiHandler extends AbstractControlSettingsUi super.setup(); // If no gamepads are detected, set up a default UI prompt in the settings container. this.layout["noKeyboard"] = new Map(); - const optionsContainer = this.scene.add.container(0, 0); + const optionsContainer = globalScene.add.container(0, 0); optionsContainer.setVisible(false); // Initially hide the container as no gamepads are connected. - const label = addTextObject(this.scene, 8, 28, i18next.t("settings:keyboardPleasePress"), TextStyle.SETTINGS_LABEL); + const label = addTextObject(8, 28, i18next.t("settings:keyboardPleasePress"), TextStyle.SETTINGS_LABEL); label.setOrigin(0, 0); optionsContainer.add(label); this.settingsContainer.add(optionsContainer); - const iconDelete = this.scene.add.sprite(0, 0, "keyboard"); + const iconDelete = globalScene.add.sprite(0, 0, "keyboard"); iconDelete.setOrigin(0, -0.1); iconDelete.setPositionRelative(this.actionsBg, this.navigationContainer.width - 260, 4); this.navigationIcons["BUTTON_DELETE"] = iconDelete; - const deleteText = addTextObject(this.scene, 0, 0, i18next.t("settings:delete"), TextStyle.SETTINGS_LABEL); + const deleteText = addTextObject(0, 0, i18next.t("settings:delete"), TextStyle.SETTINGS_LABEL); deleteText.setOrigin(0, 0.15); deleteText.setPositionRelative(iconDelete, -deleteText.width / 6 - 2, 0); @@ -86,10 +85,10 @@ export default class SettingsKeyboardUiHandler extends AbstractControlSettingsUi * Handle the home key press event. */ onHomeDown(): void { - if (![ Mode.SETTINGS_KEYBOARD, Mode.SETTINGS_GAMEPAD ].includes(this.scene.ui.getMode())) { + if (![ Mode.SETTINGS_KEYBOARD, Mode.SETTINGS_GAMEPAD ].includes(globalScene.ui.getMode())) { return; } - this.scene.gameData.resetMappingToFactory(); + globalScene.gameData.resetMappingToFactory(); NavigationManager.getInstance().updateIcons(); } @@ -97,7 +96,7 @@ export default class SettingsKeyboardUiHandler extends AbstractControlSettingsUi * Handle the delete key press event. */ onDeleteDown(): void { - if (this.scene.ui.getMode() !== Mode.SETTINGS_KEYBOARD) { + if (globalScene.ui.getMode() !== Mode.SETTINGS_KEYBOARD) { return; } const cursor = this.cursor + this.scrollCursor; // Calculate the absolute cursor position. @@ -153,7 +152,7 @@ export default class SettingsKeyboardUiHandler extends AbstractControlSettingsUi } // Skip updating the no gamepad layout. // Update the text of the first option label under the current setting to the name of the chosen gamepad, // truncating the name to 30 characters if necessary. - this.layout[_key].optionValueLabels[index][0].setText(truncateString(this.scene.inputController.selectedDevice[Device.KEYBOARD], 22)); + this.layout[_key].optionValueLabels[index][0].setText(truncateString(globalScene.inputController.selectedDevice[Device.KEYBOARD], 22)); } } } @@ -166,7 +165,7 @@ export default class SettingsKeyboardUiHandler extends AbstractControlSettingsUi * @param config - The configuration to save. */ saveCustomKeyboardMappingToLocalStorage(config): void { - this.scene.gameData.saveMappingConfigs(this.scene.inputController?.selectedDevice[Device.KEYBOARD], config); + globalScene.gameData.saveMappingConfigs(globalScene.inputController?.selectedDevice[Device.KEYBOARD], config); } /** @@ -177,7 +176,7 @@ export default class SettingsKeyboardUiHandler extends AbstractControlSettingsUi */ saveSettingToLocalStorage(settingName, cursor): void { if (this.setting[settingName] !== this.setting.Default_Layout) { - this.scene.gameData.saveControlSetting(this.device, this.localStoragePropertyName, settingName, this.settingDeviceDefaults, cursor); + globalScene.gameData.saveControlSetting(this.device, this.localStoragePropertyName, settingName, this.settingDeviceDefaults, cursor); } } } diff --git a/src/ui/settings/settings-ui-handler.ts b/src/ui/settings/settings-ui-handler.ts index 3c5a7dd2c90..22ea76d798b 100644 --- a/src/ui/settings/settings-ui-handler.ts +++ b/src/ui/settings/settings-ui-handler.ts @@ -1,17 +1,15 @@ -import BattleScene from "../../battle-scene"; import { SettingType } from "../../system/settings/settings"; -import { Mode } from "../ui"; +import type { Mode } from "../ui"; import AbstractSettingsUiHandler from "./abstract-settings-ui-handler"; export default class SettingsUiHandler extends AbstractSettingsUiHandler { /** * Creates an instance of SettingsGamepadUiHandler. * - * @param scene - The BattleScene instance. * @param mode - The UI mode, optional. */ - constructor(scene: BattleScene, mode: Mode | null = null) { - super(scene, SettingType.GENERAL, mode); + constructor(mode: Mode | null = null) { + super(SettingType.GENERAL, mode); this.title = "General"; this.localStorageKey = "settings"; } diff --git a/src/ui/starter-container.ts b/src/ui/starter-container.ts index ce21d13add8..792ce97e103 100644 --- a/src/ui/starter-container.ts +++ b/src/ui/starter-container.ts @@ -1,9 +1,8 @@ -import BattleScene from "../battle-scene"; -import PokemonSpecies from "../data/pokemon-species"; +import { globalScene } from "#app/global-scene"; +import type PokemonSpecies from "../data/pokemon-species"; import { addTextObject, TextStyle } from "./text"; export class StarterContainer extends Phaser.GameObjects.Container { - public scene: BattleScene; public species: PokemonSpecies; public icon: Phaser.GameObjects.Sprite; public shinyIcons: Phaser.GameObjects.Image[] = []; @@ -16,16 +15,16 @@ export class StarterContainer extends Phaser.GameObjects.Container { public candyUpgradeOverlayIcon: Phaser.GameObjects.Image; public cost: number = 0; - constructor(scene: BattleScene, species: PokemonSpecies) { - super(scene, 0, 0); + constructor(species: PokemonSpecies) { + super(globalScene, 0, 0); this.species = species; - const defaultDexAttr = scene.gameData.getSpeciesDefaultDexAttr(species, false, true); - const defaultProps = scene.gameData.getSpeciesDexAttrProps(species, defaultDexAttr); + const defaultDexAttr = globalScene.gameData.getSpeciesDefaultDexAttr(species, false, true); + const defaultProps = globalScene.gameData.getSpeciesDexAttrProps(species, defaultDexAttr); // starter passive bg - const starterPassiveBg = this.scene.add.image(2, 5, "passive_bg"); + const starterPassiveBg = globalScene.add.image(2, 5, "passive_bg"); starterPassiveBg.setOrigin(0, 0); starterPassiveBg.setScale(0.75); starterPassiveBg.setVisible(false); @@ -33,7 +32,7 @@ export class StarterContainer extends Phaser.GameObjects.Container { this.starterPassiveBgs = starterPassiveBg; // icon - this.icon = this.scene.add.sprite(-2, 2, species.getIconAtlasKey(defaultProps.formIndex, defaultProps.shiny, defaultProps.variant)); + this.icon = globalScene.add.sprite(-2, 2, species.getIconAtlasKey(defaultProps.formIndex, defaultProps.shiny, defaultProps.variant)); this.icon.setScale(0.5); this.icon.setOrigin(0, 0); this.icon.setFrame(species.getIconId(defaultProps.female, defaultProps.formIndex, defaultProps.shiny, defaultProps.variant)); @@ -43,7 +42,7 @@ export class StarterContainer extends Phaser.GameObjects.Container { // shiny icons for (let i = 0; i < 3; i++) { - const shinyIcon = this.scene.add.image(i * -3 + 12, 2, "shiny_star_small"); + const shinyIcon = globalScene.add.image(i * -3 + 12, 2, "shiny_star_small"); shinyIcon.setScale(0.5); shinyIcon.setOrigin(0, 0); shinyIcon.setVisible(false); @@ -52,7 +51,7 @@ export class StarterContainer extends Phaser.GameObjects.Container { this.add(this.shinyIcons); // value label - const label = addTextObject(this.scene, 1, 2, "0", TextStyle.WINDOW, { fontSize: "32px" }); + const label = addTextObject(1, 2, "0", TextStyle.WINDOW, { fontSize: "32px" }); label.setShadowOffset(2, 2); label.setOrigin(0, 0); label.setVisible(false); @@ -60,7 +59,7 @@ export class StarterContainer extends Phaser.GameObjects.Container { this.label = label; // hidden ability icon - const abilityIcon = this.scene.add.image(12, 7, "ha_capsule"); + const abilityIcon = globalScene.add.image(12, 7, "ha_capsule"); abilityIcon.setOrigin(0, 0); abilityIcon.setScale(0.5); abilityIcon.setVisible(false); @@ -68,7 +67,7 @@ export class StarterContainer extends Phaser.GameObjects.Container { this.hiddenAbilityIcon = abilityIcon; // favorite icon - const favoriteIcon = this.scene.add.image(0, 7, "favorite"); + const favoriteIcon = globalScene.add.image(0, 7, "favorite"); favoriteIcon.setOrigin(0, 0); favoriteIcon.setScale(0.5); favoriteIcon.setVisible(false); @@ -76,7 +75,7 @@ export class StarterContainer extends Phaser.GameObjects.Container { this.favoriteIcon = favoriteIcon; // classic win icon - const classicWinIcon = this.scene.add.image(0, 12, "champion_ribbon"); + const classicWinIcon = globalScene.add.image(0, 12, "champion_ribbon"); classicWinIcon.setOrigin(0, 0); classicWinIcon.setScale(0.5); classicWinIcon.setVisible(false); @@ -84,7 +83,7 @@ export class StarterContainer extends Phaser.GameObjects.Container { this.classicWinIcon = classicWinIcon; // candy upgrade icon - const candyUpgradeIcon = this.scene.add.image(12, 12, "candy"); + const candyUpgradeIcon = globalScene.add.image(12, 12, "candy"); candyUpgradeIcon.setOrigin(0, 0); candyUpgradeIcon.setScale(0.25); candyUpgradeIcon.setVisible(false); @@ -92,7 +91,7 @@ export class StarterContainer extends Phaser.GameObjects.Container { this.candyUpgradeIcon = candyUpgradeIcon; // candy upgrade overlay icon - const candyUpgradeOverlayIcon = this.scene.add.image(12, 12, "candy_overlay"); + const candyUpgradeOverlayIcon = globalScene.add.image(12, 12, "candy_overlay"); candyUpgradeOverlayIcon.setOrigin(0, 0); candyUpgradeOverlayIcon.setScale(0.25); candyUpgradeOverlayIcon.setVisible(false); diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 691e339eafc..34a29411de4 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -1,10 +1,14 @@ -import { BattleSceneEventType, CandyUpgradeNotificationChangedEvent } from "#app/events/battle-scene"; +import type { CandyUpgradeNotificationChangedEvent } from "#app/events/battle-scene"; +import { BattleSceneEventType } from "#app/events/battle-scene"; import { pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; -import { Variant, getVariantTint, getVariantIcon } from "#app/data/variant"; +import type { Variant } from "#app/data/variant"; +import { getVariantTint, getVariantIcon } from "#app/data/variant"; import { argbFromRgba } from "@material/material-color-utilities"; import i18next from "i18next"; -import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; -import BattleScene, { starterColors } from "#app/battle-scene"; +import type BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; +import { starterColors } from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; +import type { Ability } from "#app/data/ability"; import { allAbilities } from "#app/data/ability"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; import { GrowthRate, getGrowthRateColor } from "#app/data/exp"; @@ -12,15 +16,17 @@ import { Gender, getGenderColor, getGenderSymbol } from "#app/data/gender"; import { allMoves } from "#app/data/move"; import { getNatureName } from "#app/data/nature"; import { pokemonFormChanges } from "#app/data/pokemon-forms"; -import { LevelMoves, pokemonFormLevelMoves, pokemonSpeciesLevelMoves } from "#app/data/balance/pokemon-level-moves"; -import PokemonSpecies, { allSpecies, getPokemonSpeciesForm, getPokerusStarters } from "#app/data/pokemon-species"; +import type { LevelMoves } from "#app/data/balance/pokemon-level-moves"; +import { pokemonFormLevelMoves, pokemonSpeciesLevelMoves } from "#app/data/balance/pokemon-level-moves"; +import type PokemonSpecies from "#app/data/pokemon-species"; +import { allSpecies, getPokemonSpeciesForm, getPokerusStarters } from "#app/data/pokemon-species"; import { getStarterValueFriendshipCap, speciesStarterCosts, POKERUS_STARTER_COUNT } from "#app/data/balance/starters"; -import { starterPassiveAbilities } from "#app/data/balance/passives"; import { Type } from "#enums/type"; import { GameModes } from "#app/game-mode"; -import { AbilityAttr, DexAttr, DexAttrProps, DexEntry, StarterMoveset, StarterAttributes, StarterPreferences, StarterPrefs } from "#app/system/game-data"; +import type { DexAttrProps, DexEntry, StarterMoveset, StarterAttributes, StarterPreferences } from "#app/system/game-data"; +import { AbilityAttr, DexAttr, StarterPrefs } from "#app/system/game-data"; import { Tutorial, handleTutorial } from "#app/tutorial"; -import { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; +import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import MessageUiHandler from "#app/ui/message-ui-handler"; import PokemonIconAnimHandler, { PokemonIconAnimMode } from "#app/ui/pokemon-icon-anim-handler"; import { StatsContainer } from "#app/ui/stats-container"; @@ -35,7 +41,7 @@ import * as Challenge from "#app/data/challenge"; import MoveInfoOverlay from "#app/ui/move-info-overlay"; import { getEggTierForSpecies } from "#app/data/egg"; import { Device } from "#enums/devices"; -import { Moves } from "#enums/moves"; +import type { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { Button } from "#enums/buttons"; import { EggSourceType } from "#enums/egg-source-types"; @@ -48,28 +54,31 @@ import { EncounterPhase } from "#app/phases/encounter-phase"; import { TitlePhase } from "#app/phases/title-phase"; import { Abilities } from "#enums/abilities"; import { getPassiveCandyCount, getValueReductionCandyCounts, getSameSpeciesEggCandyCounts } from "#app/data/balance/starters"; -import { BooleanHolder, capitalizeString, fixedInt, getLocalizedSpriteKey, isNullOrUndefined, NumberHolder, padInt, randIntRange, rgbHexToRgba, toReadableString } from "#app/utils"; +import { BooleanHolder, fixedInt, getLocalizedSpriteKey, isNullOrUndefined, NumberHolder, padInt, randIntRange, rgbHexToRgba, toReadableString } from "#app/utils"; import type { Nature } from "#enums/nature"; import { PLAYER_PARTY_MAX_SIZE } from "#app/constants"; +import { achvs } from "#app/system/achv"; +import * as Utils from "../utils"; export type StarterSelectCallback = (starters: Starter[]) => void; export interface Starter { species: PokemonSpecies; dexAttr: bigint; - abilityIndex: integer, + abilityIndex: number, passive: boolean; nature: Nature; moveset?: StarterMoveset; pokerus: boolean; nickname?: string; + teraType?: Type; } interface LanguageSetting { starterInfoTextSize: string, instructionTextSize: string, - starterInfoXPos?: integer, - starterInfoYOffset?: integer + starterInfoXPos?: number, + starterInfoYOffset?: number } const languageSettings: { [key: string]: LanguageSetting } = { @@ -83,7 +92,7 @@ const languageSettings: { [key: string]: LanguageSetting } = { starterInfoXPos: 33, }, "es-ES":{ - starterInfoTextSize: "56px", + starterInfoTextSize: "52px", instructionTextSize: "35px", }, "fr":{ @@ -130,9 +139,10 @@ const valueReductionMax = 2; const filterBarHeight = 17; const speciesContainerX = 109; // if team on the RIGHT: 109 / if on the LEFT: 143 const teamWindowX = 285; // if team on the RIGHT: 285 / if on the LEFT: 109 -const teamWindowY = 18; +const teamWindowY = 38; const teamWindowWidth = 34; -const teamWindowHeight = 132; +const teamWindowHeight = 107; +const randomSelectionWindowHeight = 20; /** * Calculates the starter position for a Pokemon of a given UI index @@ -200,12 +210,13 @@ function findClosestStarterRow(index: number, numberOfRows: number) { interface SpeciesDetails { shiny?: boolean, - formIndex?: integer + formIndex?: number female?: boolean, variant?: Variant, - abilityIndex?: integer, - natureIndex?: integer, + abilityIndex?: number, + natureIndex?: number, forSeen?: boolean, // default = false + teraType?: Type, } export default class StarterSelectUiHandler extends MessageUiHandler { @@ -256,6 +267,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { private pokemonShinyIcon: Phaser.GameObjects.Sprite; private pokemonPassiveDisabledIcon: Phaser.GameObjects.Sprite; private pokemonPassiveLockedIcon: Phaser.GameObjects.Sprite; + private teraIcon: Phaser.GameObjects.Sprite; private activeTooltip: "ABILITY" | "PASSIVE" | "CANDY" | undefined; private instructionsContainer: Phaser.GameObjects.Container; @@ -265,14 +277,14 @@ export default class StarterSelectUiHandler extends MessageUiHandler { private abilityIconElement: Phaser.GameObjects.Sprite; private genderIconElement: Phaser.GameObjects.Sprite; private natureIconElement: Phaser.GameObjects.Sprite; - private variantIconElement: Phaser.GameObjects.Sprite; + private teraIconElement: Phaser.GameObjects.Sprite; private goFilterIconElement: Phaser.GameObjects.Sprite; private shinyLabel: Phaser.GameObjects.Text; private formLabel: Phaser.GameObjects.Text; private genderLabel: Phaser.GameObjects.Text; private abilityLabel: Phaser.GameObjects.Text; private natureLabel: Phaser.GameObjects.Text; - private variantLabel: Phaser.GameObjects.Text; + private teraLabel: Phaser.GameObjects.Text; private goFilterLabel: Phaser.GameObjects.Text; private starterSelectMessageBox: Phaser.GameObjects.NineSlice; @@ -288,7 +300,8 @@ export default class StarterSelectUiHandler extends MessageUiHandler { private dexAttrCursor: bigint = 0n; private abilityCursor: number = -1; private natureCursor: number = -1; - private filterBarCursor: integer = 0; + private teraCursor: Type = Type.UNKNOWN; + private filterBarCursor: number = 0; private starterMoveset: StarterMoveset | null; private scrollCursor: number; @@ -298,8 +311,9 @@ export default class StarterSelectUiHandler extends MessageUiHandler { public starterSpecies: PokemonSpecies[] = []; private pokerusSpecies: PokemonSpecies[] = []; private starterAttr: bigint[] = []; - private starterAbilityIndexes: integer[] = []; + private starterAbilityIndexes: number[] = []; private starterNatures: Nature[] = []; + private starterTeras: Type[] = []; private starterMovesets: StarterMoveset[] = []; private speciesStarterDexEntry: DexEntry | null; private speciesStarterMoves: Moves[]; @@ -308,7 +322,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { private canCycleGender: boolean; private canCycleAbility: boolean; private canCycleNature: boolean; - private canCycleVariant: boolean; + private canCycleTera: boolean; private assetLoadCancelled: BooleanHolder | null; public cursorObj: Phaser.GameObjects.Image; @@ -318,6 +332,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { private starterIconsCursorObj: Phaser.GameObjects.Image; private valueLimitLabel: Phaser.GameObjects.Text; private startCursorObj: Phaser.GameObjects.NineSlice; + private randomCursorObj: Phaser.GameObjects.NineSlice; private iconAnimHandler: PokemonIconAnimHandler; @@ -334,8 +349,8 @@ export default class StarterSelectUiHandler extends MessageUiHandler { protected blockInput: boolean = false; - constructor(scene: BattleScene) { - super(scene, Mode.STARTER_SELECT); + constructor() { + super(Mode.STARTER_SELECT); } setup() { @@ -344,49 +359,50 @@ export default class StarterSelectUiHandler extends MessageUiHandler { const langSettingKey = Object.keys(languageSettings).find(lang => currentLanguage.includes(lang)) ?? "en"; const textSettings = languageSettings[langSettingKey]; - this.starterSelectContainer = this.scene.add.container(0, -this.scene.game.canvas.height / 6); + this.starterSelectContainer = globalScene.add.container(0, -globalScene.game.canvas.height / 6); this.starterSelectContainer.setVisible(false); ui.add(this.starterSelectContainer); - const bgColor = this.scene.add.rectangle(0, 0, this.scene.game.canvas.width / 6, this.scene.game.canvas.height / 6, 0x006860); + 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 starterSelectBg = this.scene.add.image(0, 0, "starter_select_bg"); + const starterSelectBg = globalScene.add.image(0, 0, "starter_select_bg"); starterSelectBg.setOrigin(0, 0); this.starterSelectContainer.add(starterSelectBg); - this.shinyOverlay = this.scene.add.image(6, 6, "summary_overlay_shiny"); + 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 starterContainerWindow = addWindow(this.scene, speciesContainerX, filterBarHeight + 1, 175, 161); - const starterContainerBg = this.scene.add.image(speciesContainerX + 1, filterBarHeight + 2, "starter_container_bg"); + 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(this.scene, teamWindowX, teamWindowY, teamWindowWidth, teamWindowHeight)); - this.starterSelectContainer.add(addWindow(this.scene, teamWindowX, teamWindowY + teamWindowHeight - 5, teamWindowWidth, teamWindowWidth, true)); + 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); // Create and initialise filter bar - this.filterBarContainer = this.scene.add.container(0, 0); - this.filterBar = new FilterBar(this.scene, Math.min(speciesContainerX, teamWindowX), 1, 210, filterBarHeight); + 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(this.scene, 1, new DropDownLabel(i18next.t("starterSelectUiHandler:gen1"))), - new DropDownOption(this.scene, 2, new DropDownLabel(i18next.t("starterSelectUiHandler:gen2"))), - new DropDownOption(this.scene, 3, new DropDownLabel(i18next.t("starterSelectUiHandler:gen3"))), - new DropDownOption(this.scene, 4, new DropDownLabel(i18next.t("starterSelectUiHandler:gen4"))), - new DropDownOption(this.scene, 5, new DropDownLabel(i18next.t("starterSelectUiHandler:gen5"))), - new DropDownOption(this.scene, 6, new DropDownLabel(i18next.t("starterSelectUiHandler:gen6"))), - new DropDownOption(this.scene, 7, new DropDownLabel(i18next.t("starterSelectUiHandler:gen7"))), - new DropDownOption(this.scene, 8, new DropDownLabel(i18next.t("starterSelectUiHandler:gen8"))), - new DropDownOption(this.scene, 9, new DropDownLabel(i18next.t("starterSelectUiHandler:gen9"))), + 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 genDropDown: DropDown = new DropDown(this.scene, 0, 0, genOptions, this.updateStarters, DropDownType.HYBRID); + const genDropDown: DropDown = new DropDown(0, 0, genOptions, this.updateStarters, DropDownType.HYBRID); this.filterBar.addFilter(DropDownColumn.GEN, i18next.t("filterBar:genFilter"), genDropDown); // type filter @@ -396,39 +412,39 @@ export default class StarterSelectUiHandler extends MessageUiHandler { if (index === 0 || index === 19) { return; } - const typeSprite = this.scene.add.sprite(0, 0, getLocalizedSpriteKey("types")); + const typeSprite = globalScene.add.sprite(0, 0, getLocalizedSpriteKey("types")); typeSprite.setScale(0.5); typeSprite.setFrame(type.toLowerCase()); - typeOptions.push(new DropDownOption(this.scene, index, new DropDownLabel("", typeSprite))); + typeOptions.push(new DropDownOption(index, new DropDownLabel("", typeSprite))); }); - this.filterBar.addFilter(DropDownColumn.TYPES, i18next.t("filterBar:typeFilter"), new DropDown(this.scene, 0, 0, typeOptions, this.updateStarters, DropDownType.HYBRID, 0.5)); + this.filterBar.addFilter(DropDownColumn.TYPES, i18next.t("filterBar:typeFilter"), new DropDown(0, 0, typeOptions, this.updateStarters, DropDownType.HYBRID, 0.5)); // caught filter - const shiny1Sprite = this.scene.add.sprite(0, 0, "shiny_icons"); + 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 = this.scene.add.sprite(0, 0, "shiny_icons"); + 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 = this.scene.add.sprite(0, 0, "shiny_icons"); + 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 caughtOptions = [ - new DropDownOption(this.scene, "SHINY3", new DropDownLabel("", shiny3Sprite)), - new DropDownOption(this.scene, "SHINY2", new DropDownLabel("", shiny2Sprite)), - new DropDownOption(this.scene, "SHINY", new DropDownLabel("", shiny1Sprite)), - new DropDownOption(this.scene, "NORMAL", new DropDownLabel(i18next.t("filterBar:normal"))), - new DropDownOption(this.scene, "UNCAUGHT", new DropDownLabel(i18next.t("filterBar:uncaught"))) + new DropDownOption("SHINY3", new DropDownLabel("", shiny3Sprite)), + new DropDownOption("SHINY2", new DropDownLabel("", shiny2Sprite)), + new DropDownOption("SHINY", new DropDownLabel("", shiny1Sprite)), + new DropDownOption("NORMAL", new DropDownLabel(i18next.t("filterBar:normal"))), + new DropDownOption("UNCAUGHT", new DropDownLabel(i18next.t("filterBar:uncaught"))) ]; - this.filterBar.addFilter(DropDownColumn.CAUGHT, i18next.t("filterBar:caughtFilter"), new DropDown(this.scene, 0, 0, caughtOptions, this.updateStarters, DropDownType.HYBRID)); + this.filterBar.addFilter(DropDownColumn.CAUGHT, i18next.t("filterBar:caughtFilter"), new DropDown(0, 0, caughtOptions, this.updateStarters, DropDownType.HYBRID)); // unlocks filter const passiveLabels = [ @@ -441,16 +457,18 @@ export default class StarterSelectUiHandler extends MessageUiHandler { const costReductionLabels = [ new DropDownLabel(i18next.t("filterBar:costReduction"), undefined, DropDownState.OFF), new DropDownLabel(i18next.t("filterBar:costReductionUnlocked"), undefined, DropDownState.ON), + new DropDownLabel(i18next.t("filterBar:costReductionUnlockedOne"), undefined, DropDownState.ONE), + new DropDownLabel(i18next.t("filterBar:costReductionUnlockedTwo"), undefined, DropDownState.TWO), new DropDownLabel(i18next.t("filterBar:costReductionUnlockable"), undefined, DropDownState.UNLOCKABLE), new DropDownLabel(i18next.t("filterBar:costReductionLocked"), undefined, DropDownState.EXCLUDE), ]; const unlocksOptions = [ - new DropDownOption(this.scene, "PASSIVE", passiveLabels), - new DropDownOption(this.scene, "COST_REDUCTION", costReductionLabels), + new DropDownOption("PASSIVE", passiveLabels), + new DropDownOption("COST_REDUCTION", costReductionLabels), ]; - this.filterBar.addFilter(DropDownColumn.UNLOCKS, i18next.t("filterBar:unlocksFilter"), new DropDown(this.scene, 0, 0, unlocksOptions, this.updateStarters, DropDownType.RADIAL)); + this.filterBar.addFilter(DropDownColumn.UNLOCKS, i18next.t("filterBar:unlocksFilter"), new DropDown(0, 0, unlocksOptions, this.updateStarters, DropDownType.RADIAL)); // misc filter const favoriteLabels = [ @@ -477,23 +495,25 @@ export default class StarterSelectUiHandler extends MessageUiHandler { new DropDownLabel(i18next.t("filterBar:hasPokerus"), undefined, DropDownState.ON), ]; const miscOptions = [ - new DropDownOption(this.scene, "FAVORITE", favoriteLabels), - new DropDownOption(this.scene, "WIN", winLabels), - new DropDownOption(this.scene, "HIDDEN_ABILITY", hiddenAbilityLabels), - new DropDownOption(this.scene, "EGG", eggLabels), - new DropDownOption(this.scene, "POKERUS", pokerusLabels), + new DropDownOption("FAVORITE", favoriteLabels), + new DropDownOption("WIN", winLabels), + new DropDownOption("HIDDEN_ABILITY", hiddenAbilityLabels), + new DropDownOption("EGG", eggLabels), + new DropDownOption("POKERUS", pokerusLabels), ]; - this.filterBar.addFilter(DropDownColumn.MISC, i18next.t("filterBar:miscFilter"), new DropDown(this.scene, 0, 0, miscOptions, this.updateStarters, DropDownType.RADIAL)); + this.filterBar.addFilter(DropDownColumn.MISC, i18next.t("filterBar:miscFilter"), new DropDown(0, 0, miscOptions, this.updateStarters, DropDownType.RADIAL)); // sort filter const sortOptions = [ - new DropDownOption(this.scene, SortCriteria.NUMBER, new DropDownLabel(i18next.t("filterBar:sortByNumber"), undefined, DropDownState.ON)), - new DropDownOption(this.scene, SortCriteria.COST, new DropDownLabel(i18next.t("filterBar:sortByCost"))), - new DropDownOption(this.scene, SortCriteria.CANDY, new DropDownLabel(i18next.t("filterBar:sortByCandies"))), - new DropDownOption(this.scene, SortCriteria.IV, new DropDownLabel(i18next.t("filterBar:sortByIVs"))), - new DropDownOption(this.scene, SortCriteria.NAME, new DropDownLabel(i18next.t("filterBar:sortByName"))) + new DropDownOption(SortCriteria.NUMBER, new DropDownLabel(i18next.t("filterBar:sortByNumber"), undefined, DropDownState.ON)), + new DropDownOption(SortCriteria.COST, new DropDownLabel(i18next.t("filterBar:sortByCost"))), + new DropDownOption(SortCriteria.CANDY, new DropDownLabel(i18next.t("filterBar:sortByCandies"))), + new DropDownOption(SortCriteria.IV, new DropDownLabel(i18next.t("filterBar:sortByIVs"))), + new DropDownOption(SortCriteria.NAME, new DropDownLabel(i18next.t("filterBar:sortByName"))), + new DropDownOption(SortCriteria.CAUGHT, new DropDownLabel(i18next.t("filterBar:sortByNumCaught"))), + new DropDownOption(SortCriteria.HATCHED, new DropDownLabel(i18next.t("filterBar:sortByNumHatched"))) ]; - this.filterBar.addFilter(DropDownColumn.SORT, i18next.t("filterBar:sortFilter"), new DropDown(this.scene, 0, 0, sortOptions, this.updateStarters, DropDownType.SINGLE)); + this.filterBar.addFilter(DropDownColumn.SORT, i18next.t("filterBar:sortFilter"), new DropDown(0, 0, sortOptions, this.updateStarters, DropDownType.SINGLE)); this.filterBarContainer.add(this.filterBar); this.starterSelectContainer.add(this.filterBarContainer); @@ -501,35 +521,35 @@ export default class StarterSelectUiHandler extends MessageUiHandler { // Offset the generation filter dropdown to avoid covering the filtered pokemon this.filterBar.offsetHybridFilters(); - if (!this.scene.uiTheme) { + if (!globalScene.uiTheme) { starterContainerWindow.setVisible(false); } this.iconAnimHandler = new PokemonIconAnimHandler(); - this.iconAnimHandler.setup(this.scene); + this.iconAnimHandler.setup(); - this.pokemonNumberText = addTextObject(this.scene, 17, 1, "0000", TextStyle.SUMMARY); + this.pokemonNumberText = addTextObject(17, 1, "0000", TextStyle.SUMMARY); this.pokemonNumberText.setOrigin(0, 0); this.starterSelectContainer.add(this.pokemonNumberText); - this.pokemonNameText = addTextObject(this.scene, 6, 112, "", TextStyle.SUMMARY); + this.pokemonNameText = addTextObject(6, 112, "", TextStyle.SUMMARY); this.pokemonNameText.setOrigin(0, 0); this.starterSelectContainer.add(this.pokemonNameText); - this.pokemonGrowthRateLabelText = addTextObject(this.scene, 8, 106, i18next.t("starterSelectUiHandler:growthRate"), TextStyle.SUMMARY_ALT, { fontSize: "36px" }); + this.pokemonGrowthRateLabelText = addTextObject(8, 106, i18next.t("starterSelectUiHandler:growthRate"), TextStyle.SUMMARY_ALT, { fontSize: "36px" }); this.pokemonGrowthRateLabelText.setOrigin(0, 0); this.pokemonGrowthRateLabelText.setVisible(false); this.starterSelectContainer.add(this.pokemonGrowthRateLabelText); - this.pokemonGrowthRateText = addTextObject(this.scene, 34, 106, "", TextStyle.SUMMARY_PINK, { fontSize: "36px" }); + this.pokemonGrowthRateText = addTextObject(34, 106, "", TextStyle.SUMMARY_PINK, { fontSize: "36px" }); this.pokemonGrowthRateText.setOrigin(0, 0); this.starterSelectContainer.add(this.pokemonGrowthRateText); - this.pokemonGenderText = addTextObject(this.scene, 96, 112, "", TextStyle.SUMMARY_ALT); + this.pokemonGenderText = addTextObject(96, 112, "", TextStyle.SUMMARY_ALT); this.pokemonGenderText.setOrigin(0, 0); this.starterSelectContainer.add(this.pokemonGenderText); - this.pokemonUncaughtText = addTextObject(this.scene, 6, 127, i18next.t("starterSelectUiHandler:uncaught"), TextStyle.SUMMARY_ALT, { fontSize: "56px" }); + this.pokemonUncaughtText = addTextObject(6, 127, i18next.t("starterSelectUiHandler:uncaught"), TextStyle.SUMMARY_ALT, { fontSize: "56px" }); this.pokemonUncaughtText.setOrigin(0, 0); this.starterSelectContainer.add(this.pokemonUncaughtText); @@ -541,46 +561,46 @@ export default class StarterSelectUiHandler extends MessageUiHandler { // The font size should be set per language const starterInfoTextSize = textSettings?.starterInfoTextSize || 56; - this.pokemonAbilityLabelText = addTextObject(this.scene, 6, 127 + starterInfoYOffset, i18next.t("starterSelectUiHandler:ability"), TextStyle.SUMMARY_ALT, { fontSize: starterInfoTextSize }); + this.pokemonAbilityLabelText = addTextObject(6, 127 + starterInfoYOffset, i18next.t("starterSelectUiHandler:ability"), TextStyle.SUMMARY_ALT, { fontSize: starterInfoTextSize }); this.pokemonAbilityLabelText.setOrigin(0, 0); this.pokemonAbilityLabelText.setVisible(false); this.starterSelectContainer.add(this.pokemonAbilityLabelText); - this.pokemonAbilityText = addTextObject(this.scene, starterInfoXPos, 127 + starterInfoYOffset, "", TextStyle.SUMMARY_ALT, { fontSize: starterInfoTextSize }); + 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); - this.pokemonPassiveLabelText = addTextObject(this.scene, 6, 136 + starterInfoYOffset, i18next.t("starterSelectUiHandler:passive"), TextStyle.SUMMARY_ALT, { fontSize: starterInfoTextSize }); + this.pokemonPassiveLabelText = addTextObject(6, 136 + starterInfoYOffset, i18next.t("starterSelectUiHandler:passive"), TextStyle.SUMMARY_ALT, { fontSize: starterInfoTextSize }); this.pokemonPassiveLabelText.setOrigin(0, 0); this.pokemonPassiveLabelText.setVisible(false); this.starterSelectContainer.add(this.pokemonPassiveLabelText); - this.pokemonPassiveText = addTextObject(this.scene, starterInfoXPos, 136 + starterInfoYOffset, "", TextStyle.SUMMARY_ALT, { fontSize: starterInfoTextSize }); + 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); - this.pokemonPassiveDisabledIcon = this.scene.add.sprite(starterInfoXPos, 137 + starterInfoYOffset, "icon_stop"); + 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.pokemonPassiveLockedIcon = this.scene.add.sprite(starterInfoXPos, 137 + starterInfoYOffset, "icon_lock"); + 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.pokemonNatureLabelText = addTextObject(this.scene, 6, 145 + starterInfoYOffset, i18next.t("starterSelectUiHandler:nature"), TextStyle.SUMMARY_ALT, { fontSize: starterInfoTextSize }); + this.pokemonNatureLabelText = addTextObject(6, 145 + starterInfoYOffset, i18next.t("starterSelectUiHandler:nature"), TextStyle.SUMMARY_ALT, { fontSize: starterInfoTextSize }); this.pokemonNatureLabelText.setOrigin(0, 0); this.pokemonNatureLabelText.setVisible(false); this.starterSelectContainer.add(this.pokemonNatureLabelText); - this.pokemonNatureText = addBBCodeTextObject(this.scene, starterInfoXPos, 145 + starterInfoYOffset, "", TextStyle.SUMMARY_ALT, { fontSize: starterInfoTextSize }); + this.pokemonNatureText = addBBCodeTextObject(starterInfoXPos, 145 + starterInfoYOffset, "", TextStyle.SUMMARY_ALT, { fontSize: starterInfoTextSize }); this.pokemonNatureText.setOrigin(0, 0); this.starterSelectContainer.add(this.pokemonNatureText); @@ -592,29 +612,38 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonEggMoveBgs = []; this.pokemonEggMoveLabels = []; - this.valueLimitLabel = addTextObject(this.scene, teamWindowX + 17, 150, "0/10", TextStyle.TOOLTIP_CONTENT); + this.valueLimitLabel = addTextObject(teamWindowX + 17, 150, "0/10", TextStyle.TOOLTIP_CONTENT); this.valueLimitLabel.setOrigin(0.5, 0); this.starterSelectContainer.add(this.valueLimitLabel); - const startLabel = addTextObject(this.scene, teamWindowX + 17, 162, i18next.t("common:start"), TextStyle.TOOLTIP_CONTENT); + const startLabel = addTextObject(teamWindowX + 17, 162, i18next.t("common:start"), TextStyle.TOOLTIP_CONTENT); startLabel.setOrigin(0.5, 0); this.starterSelectContainer.add(startLabel); - this.startCursorObj = this.scene.add.nineslice(teamWindowX + 4, 160, "select_cursor", undefined, 26, 15, 6, 6, 6, 6); + this.startCursorObj = globalScene.add.nineslice(teamWindowX + 4, 160, "select_cursor", undefined, 26, 15, 6, 6, 6, 6); this.startCursorObj.setVisible(false); this.startCursorObj.setOrigin(0, 0); this.starterSelectContainer.add(this.startCursorObj); + const randomSelectLabel = addTextObject(teamWindowX + 17, 23, i18next.t("starterSelectUiHandler:randomize"), TextStyle.TOOLTIP_CONTENT); + randomSelectLabel.setOrigin(0.5, 0); + this.starterSelectContainer.add(randomSelectLabel); + + 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); + const starterSpecies: Species[] = []; - const starterBoxContainer = this.scene.add.container(speciesContainerX + 6, 9); //115 + const starterBoxContainer = globalScene.add.container(speciesContainerX + 6, 9); //115 - this.starterSelectScrollBar = new ScrollBar(this.scene, 161, 12, 5, starterContainerWindow.height - 6, 9); + this.starterSelectScrollBar = new ScrollBar(161, 12, 5, starterContainerWindow.height - 6, 9); starterBoxContainer.add(this.starterSelectScrollBar); this.pokerusCursorObjs = new Array(POKERUS_STARTER_COUNT).fill(null).map(() => { - const cursorObj = this.scene.add.image(0, 0, "select_cursor_pokerus"); + const cursorObj = globalScene.add.image(0, 0, "select_cursor_pokerus"); cursorObj.setVisible(false); cursorObj.setOrigin(0, 0); starterBoxContainer.add(cursorObj); @@ -622,16 +651,16 @@ export default class StarterSelectUiHandler extends MessageUiHandler { }); this.starterCursorObjs = new Array(6).fill(null).map(() => { - const cursorObj = this.scene.add.image(0, 0, "select_cursor_highlight"); + const cursorObj = globalScene.add.image(0, 0, "select_cursor_highlight"); cursorObj.setVisible(false); cursorObj.setOrigin(0, 0); starterBoxContainer.add(cursorObj); return cursorObj; }); - this.cursorObj = this.scene.add.image(0, 0, "select_cursor"); + this.cursorObj = globalScene.add.image(0, 0, "select_cursor"); this.cursorObj.setOrigin(0, 0); - this.starterIconsCursorObj = this.scene.add.image(289, 64, "select_gen_cursor"); + 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); @@ -648,7 +677,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.speciesLoaded.set(species.speciesId, false); this.allSpecies.push(species); - const starterContainer = new StarterContainer(this.scene, species).setVisible(false); + const starterContainer = new StarterContainer(species).setVisible(false); this.iconAnimHandler.addOrUpdate(starterContainer.icon, PokemonIconAnimMode.NONE); this.starterContainers.push(starterContainer); starterBoxContainer.add(starterContainer); @@ -657,7 +686,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.starterSelectContainer.add(starterBoxContainer); this.starterIcons = new Array(6).fill(null).map((_, i) => { - const icon = this.scene.add.sprite(teamWindowX + 7, calcStarterIconY(i), "pokemon_icons_0"); + const icon = globalScene.add.sprite(teamWindowX + 7, calcStarterIconY(i), "pokemon_icons_0"); icon.setScale(0.5); icon.setOrigin(0, 0); icon.setFrame("unknown"); @@ -666,96 +695,96 @@ export default class StarterSelectUiHandler extends MessageUiHandler { return icon; }); - this.pokemonSprite = this.scene.add.sprite(53, 63, "pkmn__sub"); - this.pokemonSprite.setPipeline(this.scene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], ignoreTimeTint: true }); + this.pokemonSprite = globalScene.add.sprite(53, 63, "pkmn__sub"); + this.pokemonSprite.setPipeline(globalScene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], ignoreTimeTint: true }); this.starterSelectContainer.add(this.pokemonSprite); - this.type1Icon = this.scene.add.sprite(8, 98, getLocalizedSpriteKey("types")); + 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.type2Icon = this.scene.add.sprite(26, 98, getLocalizedSpriteKey("types")); + 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.pokemonLuckLabelText = addTextObject(this.scene, 8, 89, i18next.t("common:luckIndicator"), TextStyle.WINDOW_ALT, { fontSize: "56px" }); + this.pokemonLuckLabelText = addTextObject(8, 89, i18next.t("common:luckIndicator"), TextStyle.WINDOW_ALT, { fontSize: "56px" }); this.pokemonLuckLabelText.setOrigin(0, 0); this.starterSelectContainer.add(this.pokemonLuckLabelText); - this.pokemonLuckText = addTextObject(this.scene, 8 + this.pokemonLuckLabelText.displayWidth + 2, 89, "0", TextStyle.WINDOW, { fontSize: "56px" }); + this.pokemonLuckText = addTextObject(8 + this.pokemonLuckLabelText.displayWidth + 2, 89, "0", TextStyle.WINDOW, { fontSize: "56px" }); this.pokemonLuckText.setOrigin(0, 0); this.starterSelectContainer.add(this.pokemonLuckText); // Candy icon and count - this.pokemonCandyContainer = this.scene.add.container(4.5, 18); + this.pokemonCandyContainer = globalScene.add.container(4.5, 18); - this.pokemonCandyIcon = this.scene.add.sprite(0, 0, "candy"); + 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 = this.scene.add.sprite(0, 0, "candy_overlay"); + 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 = this.scene.add.sprite(0, 0, "candy"); + 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.50); this.pokemonCandyContainer.add(this.pokemonCandyDarknessOverlay); - this.pokemonCandyCountText = addTextObject(this.scene, 9.5, 0, "x0", TextStyle.WINDOW_ALT, { fontSize: "56px" }); + 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.pokemonFormText = addTextObject(this.scene, 6, 42, "Form", TextStyle.WINDOW_ALT, { fontSize: "42px" }); + this.pokemonFormText = addTextObject(6, 42, "Form", TextStyle.WINDOW_ALT, { fontSize: "42px" }); this.pokemonFormText.setOrigin(0, 0); this.starterSelectContainer.add(this.pokemonFormText); - this.pokemonCaughtHatchedContainer = this.scene.add.container(2, 25); + this.pokemonCaughtHatchedContainer = globalScene.add.container(2, 25); this.pokemonCaughtHatchedContainer.setScale(0.5); this.starterSelectContainer.add(this.pokemonCaughtHatchedContainer); - const pokemonCaughtIcon = this.scene.add.sprite(1, 0, "items", "pb"); + const pokemonCaughtIcon = globalScene.add.sprite(1, 0, "items", "pb"); pokemonCaughtIcon.setOrigin(0, 0); pokemonCaughtIcon.setScale(0.75); this.pokemonCaughtHatchedContainer.add(pokemonCaughtIcon); - this.pokemonCaughtCountText = addTextObject(this.scene, 24, 4, "0", TextStyle.SUMMARY_ALT); + this.pokemonCaughtCountText = addTextObject(24, 4, "0", TextStyle.SUMMARY_ALT); this.pokemonCaughtCountText.setOrigin(0, 0); this.pokemonCaughtHatchedContainer.add(this.pokemonCaughtCountText); - this.pokemonHatchedIcon = this.scene.add.sprite(1, 14, "egg_icons"); + 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 = this.scene.add.sprite(14, 76, "shiny_icons"); + 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(this.scene, 24, 19, "0", TextStyle.SUMMARY_ALT); + this.pokemonHatchedCountText = addTextObject(24, 19, "0", TextStyle.SUMMARY_ALT); this.pokemonHatchedCountText.setOrigin(0, 0); this.pokemonCaughtHatchedContainer.add(this.pokemonHatchedCountText); - this.pokemonMovesContainer = this.scene.add.container(102, 16); + this.pokemonMovesContainer = globalScene.add.container(102, 16); this.pokemonMovesContainer.setScale(0.375); for (let m = 0; m < 4; m++) { - const moveContainer = this.scene.add.container(0, 14 * m); + const moveContainer = globalScene.add.container(0, 14 * m); - const moveBg = this.scene.add.nineslice(0, 0, "type_bgs", "unknown", 92, 14, 2, 2, 2, 2); + const moveBg = globalScene.add.nineslice(0, 0, "type_bgs", "unknown", 92, 14, 2, 2, 2, 2); moveBg.setOrigin(1, 0); - const moveLabel = addTextObject(this.scene, -moveBg.width / 2, 0, "-", TextStyle.PARTY); + const moveLabel = addTextObject(-moveBg.width / 2, 0, "-", TextStyle.PARTY); moveLabel.setOrigin(0.5, 0); this.pokemonMoveBgs.push(moveBg); @@ -768,28 +797,28 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonMovesContainer.add(moveContainer); } - this.pokemonAdditionalMoveCountLabel = addTextObject(this.scene, -this.pokemonMoveBgs[0].width / 2, 56, "(+0)", TextStyle.PARTY); + this.pokemonAdditionalMoveCountLabel = addTextObject(-this.pokemonMoveBgs[0].width / 2, 56, "(+0)", TextStyle.PARTY); this.pokemonAdditionalMoveCountLabel.setOrigin(0.5, 0); this.pokemonMovesContainer.add(this.pokemonAdditionalMoveCountLabel); this.starterSelectContainer.add(this.pokemonMovesContainer); - this.pokemonEggMovesContainer = this.scene.add.container(102, 85); + this.pokemonEggMovesContainer = globalScene.add.container(102, 85); this.pokemonEggMovesContainer.setScale(0.375); - const eggMovesLabel = addTextObject(this.scene, -46, 0, i18next.t("starterSelectUiHandler:eggMoves"), TextStyle.WINDOW_ALT); + const eggMovesLabel = addTextObject(-46, 0, i18next.t("starterSelectUiHandler:eggMoves"), TextStyle.WINDOW_ALT); eggMovesLabel.setOrigin(0.5, 0); this.pokemonEggMovesContainer.add(eggMovesLabel); for (let m = 0; m < 4; m++) { - const eggMoveContainer = this.scene.add.container(0, 16 + 14 * m); + const eggMoveContainer = globalScene.add.container(0, 16 + 14 * m); - const eggMoveBg = this.scene.add.nineslice(0, 0, "type_bgs", "unknown", 92, 14, 2, 2, 2, 2); + const eggMoveBg = globalScene.add.nineslice(0, 0, "type_bgs", "unknown", 92, 14, 2, 2, 2, 2); eggMoveBg.setOrigin(1, 0); - const eggMoveLabel = addTextObject(this.scene, -eggMoveBg.width / 2, 0, "???", TextStyle.PARTY); + const eggMoveLabel = addTextObject(-eggMoveBg.width / 2, 0, "???", TextStyle.PARTY); eggMoveLabel.setOrigin(0.5, 0); this.pokemonEggMoveBgs.push(eggMoveBg); @@ -805,88 +834,93 @@ export default class StarterSelectUiHandler extends MessageUiHandler { 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); + // The font size should be set per language const instructionTextSize = textSettings.instructionTextSize; - this.instructionsContainer = this.scene.add.container(4, 156); + this.instructionsContainer = globalScene.add.container(4, 156); this.instructionsContainer.setVisible(true); this.starterSelectContainer.add(this.instructionsContainer); // 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(this.scene, this.instructionRowX, this.instructionRowY, "keyboard", "R.png"); + 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.shinyLabel = addTextObject(this.scene, this.instructionRowX + this.instructionRowTextOffset, this.instructionRowY, i18next.t("starterSelectUiHandler:cycleShiny"), TextStyle.PARTY, { fontSize: instructionTextSize }); + this.shinyLabel = addTextObject(this.instructionRowX + this.instructionRowTextOffset, this.instructionRowY, i18next.t("starterSelectUiHandler:cycleShiny"), TextStyle.PARTY, { fontSize: instructionTextSize }); this.shinyLabel.setName("text-shiny-label"); - this.formIconElement = new Phaser.GameObjects.Sprite(this.scene, this.instructionRowX, this.instructionRowY, "keyboard", "F.png"); + 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.formLabel = addTextObject(this.scene, this.instructionRowX + this.instructionRowTextOffset, this.instructionRowY, i18next.t("starterSelectUiHandler:cycleForm"), TextStyle.PARTY, { fontSize: instructionTextSize }); + this.formLabel = addTextObject(this.instructionRowX + this.instructionRowTextOffset, this.instructionRowY, i18next.t("starterSelectUiHandler:cycleForm"), TextStyle.PARTY, { fontSize: instructionTextSize }); this.formLabel.setName("text-form-label"); - this.genderIconElement = new Phaser.GameObjects.Sprite(this.scene, this.instructionRowX, this.instructionRowY, "keyboard", "G.png"); + 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.genderLabel = addTextObject(this.scene, this.instructionRowX + this.instructionRowTextOffset, this.instructionRowY, i18next.t("starterSelectUiHandler:cycleGender"), TextStyle.PARTY, { fontSize: instructionTextSize }); + this.genderLabel = addTextObject(this.instructionRowX + this.instructionRowTextOffset, this.instructionRowY, i18next.t("starterSelectUiHandler:cycleGender"), TextStyle.PARTY, { fontSize: instructionTextSize }); this.genderLabel.setName("text-gender-label"); - this.abilityIconElement = new Phaser.GameObjects.Sprite(this.scene, this.instructionRowX, this.instructionRowY, "keyboard", "E.png"); + 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.abilityLabel = addTextObject(this.scene, this.instructionRowX + this.instructionRowTextOffset, this.instructionRowY, i18next.t("starterSelectUiHandler:cycleAbility"), TextStyle.PARTY, { fontSize: instructionTextSize }); + this.abilityLabel = addTextObject(this.instructionRowX + this.instructionRowTextOffset, this.instructionRowY, i18next.t("starterSelectUiHandler:cycleAbility"), TextStyle.PARTY, { fontSize: instructionTextSize }); this.abilityLabel.setName("text-ability-label"); - this.natureIconElement = new Phaser.GameObjects.Sprite(this.scene, this.instructionRowX, this.instructionRowY, "keyboard", "N.png"); + 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.natureLabel = addTextObject(this.scene, this.instructionRowX + this.instructionRowTextOffset, this.instructionRowY, i18next.t("starterSelectUiHandler:cycleNature"), TextStyle.PARTY, { fontSize: instructionTextSize }); + this.natureLabel = addTextObject(this.instructionRowX + this.instructionRowTextOffset, this.instructionRowY, i18next.t("starterSelectUiHandler:cycleNature"), TextStyle.PARTY, { fontSize: instructionTextSize }); this.natureLabel.setName("text-nature-label"); - this.variantIconElement = new Phaser.GameObjects.Sprite(this.scene, this.instructionRowX, this.instructionRowY, "keyboard", "V.png"); - this.variantIconElement.setName("sprite-variant-icon-element"); - this.variantIconElement.setScale(0.675); - this.variantIconElement.setOrigin(0.0, 0.0); - this.variantLabel = addTextObject(this.scene, this.instructionRowX + this.instructionRowTextOffset, this.instructionRowY, i18next.t("starterSelectUiHandler:cycleVariant"), TextStyle.PARTY, { fontSize: instructionTextSize }); - this.variantLabel.setName("text-variant-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.teraLabel = addTextObject(this.instructionRowX + this.instructionRowTextOffset, this.instructionRowY, i18next.t("starterSelectUiHandler:cycleTera"), TextStyle.PARTY, { fontSize: instructionTextSize }); + this.teraLabel.setName("text-tera-label"); - this.goFilterIconElement = new Phaser.GameObjects.Sprite(this.scene, this.filterInstructionRowX, this.filterInstructionRowY, "keyboard", "C.png"); + this.goFilterIconElement = new Phaser.GameObjects.Sprite(globalScene, this.filterInstructionRowX, this.filterInstructionRowY, "keyboard", "C.png"); this.goFilterIconElement.setName("sprite-goFilter-icon-element"); this.goFilterIconElement.setScale(0.675); this.goFilterIconElement.setOrigin(0.0, 0.0); - this.goFilterLabel = addTextObject(this.scene, this.filterInstructionRowX + this.instructionRowTextOffset, this.filterInstructionRowY, i18next.t("starterSelectUiHandler:goFilter"), TextStyle.PARTY, { fontSize: instructionTextSize }); + this.goFilterLabel = addTextObject(this.filterInstructionRowX + this.instructionRowTextOffset, this.filterInstructionRowY, i18next.t("starterSelectUiHandler:goFilter"), TextStyle.PARTY, { fontSize: instructionTextSize }); this.goFilterLabel.setName("text-goFilter-label"); this.hideInstructions(); - this.filterInstructionsContainer = this.scene.add.container(50, 5); + this.filterInstructionsContainer = globalScene.add.container(50, 5); this.filterInstructionsContainer.setVisible(true); this.starterSelectContainer.add(this.filterInstructionsContainer); - this.starterSelectMessageBoxContainer = this.scene.add.container(0, this.scene.game.canvas.height / 6); + this.starterSelectMessageBoxContainer = globalScene.add.container(0, globalScene.game.canvas.height / 6); this.starterSelectMessageBoxContainer.setVisible(false); this.starterSelectContainer.add(this.starterSelectMessageBoxContainer); - this.starterSelectMessageBox = addWindow(this.scene, 1, -1, 318, 28); + this.starterSelectMessageBox = addWindow(1, -1, 318, 28); this.starterSelectMessageBox.setOrigin(0, 1); this.starterSelectMessageBoxContainer.add(this.starterSelectMessageBox); - this.message = addTextObject(this.scene, 8, 8, "", TextStyle.WINDOW, { maxLines: 2 }); + this.message = addTextObject(8, 8, "", TextStyle.WINDOW, { maxLines: 2 }); this.message.setOrigin(0, 0); this.starterSelectMessageBoxContainer.add(this.message); // arrow icon for the message box this.initPromptSprite(this.starterSelectMessageBoxContainer); - this.statsContainer = new StatsContainer(this.scene, 6, 16); + this.statsContainer = new StatsContainer(6, 16); - this.scene.add.existing(this.statsContainer); + globalScene.add.existing(this.statsContainer); this.statsContainer.setVisible(false); @@ -894,11 +928,11 @@ export default class StarterSelectUiHandler extends MessageUiHandler { // 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(this.scene, { + this.moveInfoOverlay = new MoveInfoOverlay({ scale: overlayScale, top: true, x: 1, - y: this.scene.game.canvas.height / 6 - MoveInfoOverlay.getHeight(overlayScale) - 29, + y: globalScene.game.canvas.height / 6 - MoveInfoOverlay.getHeight(overlayScale) - 29, }); this.starterSelectContainer.add(this.moveInfoOverlay); @@ -907,7 +941,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.initTutorialOverlay(this.starterSelectContainer); this.starterSelectContainer.bringToTop(this.starterSelectMessageBoxContainer); - this.scene.eventTarget.addEventListener(BattleSceneEventType.CANDY_UPGRADE_NOTIFICATION_CHANGED, (e) => this.onCandyUpgradeDisplayChanged(e)); + globalScene.eventTarget.addEventListener(BattleSceneEventType.CANDY_UPGRADE_NOTIFICATION_CHANGED, (e) => this.onCandyUpgradeDisplayChanged(e)); this.updateInstructions(); } @@ -918,7 +952,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.starterPreferences = StarterPrefs.load(); } this.moveInfoOverlay.clear(); // clear this when removing a menu; the cancel button doesn't seem to trigger this automatically on controllers - this.pokerusSpecies = getPokerusStarters(this.scene); + this.pokerusSpecies = getPokerusStarters(); if (args.length >= 1 && args[0] instanceof Function) { super.show(args); @@ -928,7 +962,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.allSpecies.forEach((species, s) => { const icon = this.starterContainers[s].icon; - const dexEntry = this.scene.gameData.dexData[species.speciesId]; + const dexEntry = globalScene.gameData.dexData[species.speciesId]; // Initialize the StarterAttributes for this species this.starterPreferences[species.speciesId] = this.initStarterPrefs(species); @@ -950,7 +984,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.setCursor(0); this.tryUpdateValue(0); - handleTutorial(this.scene, Tutorial.Starter_Select); + handleTutorial(Tutorial.Starter_Select); return true; } @@ -968,8 +1002,8 @@ export default class StarterSelectUiHandler extends MessageUiHandler { */ initStarterPrefs(species: PokemonSpecies): StarterAttributes { const starterAttributes = this.starterPreferences[species.speciesId]; - const dexEntry = this.scene.gameData.dexData[species.speciesId]; - const starterData = this.scene.gameData.starterData[species.speciesId]; + const dexEntry = globalScene.gameData.dexData[species.speciesId]; + const starterData = globalScene.gameData.starterData[species.speciesId]; // no preferences or Pokemon wasn't caught, return empty attribute if (!starterAttributes || !dexEntry.caughtAttr) { @@ -1028,13 +1062,13 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } const selectedForm = starterAttributes.form; - if (selectedForm !== undefined && (!species.forms[selectedForm]?.isStarterSelectable || !(caughtAttr & this.scene.gameData.getFormAttr(selectedForm)))) { + if (selectedForm !== undefined && (!species.forms[selectedForm]?.isStarterSelectable || !(caughtAttr & globalScene.gameData.getFormAttr(selectedForm)))) { // requested form wasn't unlocked/isn't a starter form, purging setting delete starterAttributes.form; } if (starterAttributes.nature !== undefined) { - const unlockedNatures = this.scene.gameData.getNaturesForAttr(dexEntry.natureAttr); + const unlockedNatures = globalScene.gameData.getNaturesForAttr(dexEntry.natureAttr); if (unlockedNatures.indexOf(starterAttributes.nature as unknown as Nature) < 0) { // requested nature wasn't unlocked, purging setting delete starterAttributes.nature; @@ -1047,10 +1081,18 @@ export default class StarterSelectUiHandler extends MessageUiHandler { /** * Set the selections for all filters to their default starting value */ - resetFilters() : void { + public resetFilters(): void { + this.filterBar.setValsToDefault(); + this.resetCaughtDropdown(); + } + + /** + * Set default value for the caught dropdown, which only shows caught mons + */ + public resetCaughtDropdown(): void { const caughtDropDown: DropDown = this.filterBar.getFilter(DropDownColumn.CAUGHT); - this.filterBar.setValsToDefault(); + caughtDropDown.resetToDefault(); // initial setting, in caught filter, select the options excluding the uncaught option for (let i = 0; i < caughtDropDown.options.length; i++) { @@ -1061,7 +1103,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } } - showText(text: string, delay?: integer, callback?: Function, callbackDelay?: integer, prompt?: boolean, promptDelay?: integer, moveToTop?: boolean) { + showText(text: string, delay?: number, callback?: Function, callbackDelay?: number, prompt?: boolean, promptDelay?: number, moveToTop?: boolean) { super.showText(text, delay, callback, callbackDelay, prompt, promptDelay); const singleLine = text?.indexOf("\n") === -1; @@ -1073,7 +1115,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.starterSelectMessageBoxContainer.setY(0); this.message.setY(4); } else { - this.starterSelectMessageBoxContainer.setY(this.scene.game.canvas.height / 6); + this.starterSelectMessageBoxContainer.setY(globalScene.game.canvas.height / 6); this.starterSelectMessageBox.setOrigin(0, 1); this.message.setY(singleLine ? -22 : -37); } @@ -1086,14 +1128,14 @@ export default class StarterSelectUiHandler extends MessageUiHandler { * @returns true if upgrade notifications are enabled and set to display an 'Icon' */ isUpgradeIconEnabled(): boolean { - return this.scene.candyUpgradeNotification !== 0 && this.scene.candyUpgradeDisplay === 0; + return globalScene.candyUpgradeNotification !== 0 && globalScene.candyUpgradeDisplay === 0; } /** * Determines if 'Animation' based upgrade notifications should be shown * @returns true if upgrade notifications are enabled and set to display an 'Animation' */ isUpgradeAnimationEnabled(): boolean { - return this.scene.candyUpgradeNotification !== 0 && this.scene.candyUpgradeDisplay === 1; + return globalScene.candyUpgradeNotification !== 0 && globalScene.candyUpgradeDisplay === 1; } /** @@ -1103,7 +1145,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { */ isPassiveAvailable(speciesId: number): boolean { // Get this species ID's starter data - const starterData = this.scene.gameData.starterData[speciesId]; + const starterData = globalScene.gameData.starterData[speciesId]; return starterData.candyCount >= getPassiveCandyCount(speciesStarterCosts[speciesId]) && !(starterData.passiveAttr & PassiveAttr.UNLOCKED); @@ -1116,7 +1158,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { */ isValueReductionAvailable(speciesId: number): boolean { // Get this species ID's starter data - const starterData = this.scene.gameData.starterData[speciesId]; + const starterData = globalScene.gameData.starterData[speciesId]; return starterData.candyCount >= getValueReductionCandyCounts(speciesStarterCosts[speciesId])[starterData.valueReduction] && starterData.valueReduction < valueReductionMax; @@ -1129,7 +1171,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { */ isSameSpeciesEggAvailable(speciesId: number): boolean { // Get this species ID's starter data - const starterData = this.scene.gameData.starterData[speciesId]; + const starterData = globalScene.gameData.starterData[speciesId]; return starterData.candyCount >= getSameSpeciesEggCandyCounts(speciesStarterCosts[speciesId]); } @@ -1141,9 +1183,9 @@ export default class StarterSelectUiHandler extends MessageUiHandler { * @param startPaused Should this animation be paused after it is added? */ setUpgradeAnimation(icon: Phaser.GameObjects.Sprite, species: PokemonSpecies, startPaused: boolean = false): void { - this.scene.tweens.killTweensOf(icon); + globalScene.tweens.killTweensOf(icon); // Skip animations if they are disabled - if (this.scene.candyUpgradeDisplay === 0 || species.speciesId !== species.getRootSpeciesId(false)) { + if (globalScene.candyUpgradeDisplay === 0 || species.speciesId !== species.getRootSpeciesId(false)) { return; } @@ -1177,14 +1219,14 @@ export default class StarterSelectUiHandler extends MessageUiHandler { const isSameSpeciesEggAvailable = this.isSameSpeciesEggAvailable(species.speciesId); // 'Passives Only' mode - if (this.scene.candyUpgradeNotification === 1) { + if (globalScene.candyUpgradeNotification === 1) { if (isPassiveAvailable) { - this.scene.tweens.chain(tweenChain).paused = startPaused; + globalScene.tweens.chain(tweenChain).paused = startPaused; } // 'On' mode - } else if (this.scene.candyUpgradeNotification === 2) { + } else if (globalScene.candyUpgradeNotification === 2) { if (isPassiveAvailable || isValueReductionAvailable || isSameSpeciesEggAvailable) { - this.scene.tweens.chain(tweenChain).paused = startPaused; + globalScene.tweens.chain(tweenChain).paused = startPaused; } } } @@ -1196,7 +1238,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { const species = starter.species; const slotVisible = !!species?.speciesId; - if (!species || this.scene.candyUpgradeNotification === 0 || species.speciesId !== species.getRootSpeciesId(false)) { + if (!species || globalScene.candyUpgradeNotification === 0 || species.speciesId !== species.getRootSpeciesId(false)) { starter.candyUpgradeIcon.setVisible(false); starter.candyUpgradeOverlayIcon.setVisible(false); return; @@ -1207,12 +1249,12 @@ export default class StarterSelectUiHandler extends MessageUiHandler { const isSameSpeciesEggAvailable = this.isSameSpeciesEggAvailable(species.speciesId); // 'Passive Only' mode - if (this.scene.candyUpgradeNotification === 1) { + if (globalScene.candyUpgradeNotification === 1) { starter.candyUpgradeIcon.setVisible(slotVisible && isPassiveAvailable); starter.candyUpgradeOverlayIcon.setVisible(slotVisible && starter.candyUpgradeIcon.visible); // 'On' mode - } else if (this.scene.candyUpgradeNotification === 2) { + } else if (globalScene.candyUpgradeNotification === 2) { starter.candyUpgradeIcon.setVisible( slotVisible && ( isPassiveAvailable || isValueReductionAvailable || isSameSpeciesEggAvailable )); starter.candyUpgradeOverlayIcon.setVisible(slotVisible && starter.candyUpgradeIcon.visible); @@ -1243,7 +1285,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } // Loop through all visible candy icons when set to 'Icon' mode - if (this.scene.candyUpgradeDisplay === 0) { + if (globalScene.candyUpgradeDisplay === 0) { this.filteredStarterContainers.forEach((starter) => { this.setUpgradeIcon(starter); }); @@ -1290,16 +1332,15 @@ export default class StarterSelectUiHandler extends MessageUiHandler { if (this.filterMode && this.filterBar.openDropDown) { // CANCEL with a filter menu open > close it this.filterBar.toggleDropDown(this.filterBarCursor); - - // if there are possible starters go the first one of the list - if (numberOfStarters > 0) { - this.setFilterMode(false); - this.scrollCursor = 0; - this.updateScroll(); - this.setCursor(0); - } success = true; - + } else if (this.filterMode && !this.filterBar.getFilter(this.filterBar.getColumn(this.filterBarCursor)).hasDefaultValues()) { + if (this.filterBar.getColumn(this.filterBarCursor) === DropDownColumn.CAUGHT) { + this.resetCaughtDropdown(); + } else { + this.filterBar.resetSelection(this.filterBarCursor); + } + this.updateStarters(); + success = true; } else if (this.statsMode) { this.toggleStatsMode(false); success = true; @@ -1337,9 +1378,9 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.starterIconsCursorIndex = this.starterSpecies.length - 1; this.moveStarterIconsCursor(this.starterIconsCursorIndex); } else { + // TODO: how can we get here if start button can't be selected? this appears to be redundant this.startCursorObj.setVisible(false); - this.filterBarCursor = Math.max(1, this.filterBar.numFilters - 1); - this.setFilterMode(true); + this.randomCursorObj.setVisible(true); } success = true; break; @@ -1386,14 +1427,18 @@ export default class StarterSelectUiHandler extends MessageUiHandler { case Button.UP: if (this.filterBar.openDropDown) { success = this.filterBar.decDropDownCursor(); - } else if (this.filterBarCursor === this.filterBar.numFilters - 1 && this.starterSpecies.length > 0) { + } else if (this.filterBarCursor === this.filterBar.numFilters - 1 ) { // UP from the last filter, move to start button this.setFilterMode(false); this.cursorObj.setVisible(false); - this.startCursorObj.setVisible(true); + if (this.starterSpecies.length > 0) { + this.startCursorObj.setVisible(true); + } else { + this.randomCursorObj.setVisible(true); + } success = true; } else if (numberOfStarters > 0) { - // UP from filter bar to bottom of Pokemon list + // UP from filter bar to bottom of Pokemon list this.setFilterMode(false); this.scrollCursor = Math.max(0, numOfRows - 9); this.updateScroll(); @@ -1410,12 +1455,11 @@ export default class StarterSelectUiHandler extends MessageUiHandler { case Button.DOWN: if (this.filterBar.openDropDown) { success = this.filterBar.incDropDownCursor(); - } else if (this.filterBarCursor === this.filterBar.numFilters - 1 && this.starterSpecies.length > 0) { - // DOWN from the last filter, move to Pokemon in party if any + } else if (this.filterBarCursor === this.filterBar.numFilters - 1) { + // DOWN from the last filter, move to random selection label this.setFilterMode(false); this.cursorObj.setVisible(false); - this.starterIconsCursorIndex = 0; - this.moveStarterIconsCursor(this.starterIconsCursorIndex); + this.randomCursorObj.setVisible(true); success = true; } else if (numberOfStarters > 0) { // DOWN from filter bar to top of Pokemon list @@ -1437,10 +1481,103 @@ export default class StarterSelectUiHandler extends MessageUiHandler { success = true; break; } + } else if (this.randomCursorObj.visible) { + switch (button) { + case Button.ACTION: + if (this.starterSpecies.length >= 6) { + error = true; + break; + } + const currentPartyValue = this.starterSpecies.map(s => s.generation).reduce((total: number, _gen: number, i: number ) => total + globalScene.gameData.getSpeciesStarterValue(this.starterSpecies[i].speciesId), 0); + // Filter valid starters + const validStarters = this.filteredStarterContainers.filter(starter => { + const species = starter.species; + const [ isDupe ] = this.isInParty(species); + const starterCost = globalScene.gameData.getSpeciesStarterValue(species.speciesId); + const isValidForChallenge = new BooleanHolder(true); + Challenge.applyChallenges( + globalScene.gameMode, + Challenge.ChallengeType.STARTER_CHOICE, + species, + isValidForChallenge, + globalScene.gameData.getSpeciesDexAttrProps( + species, + this.getCurrentDexProps(species.speciesId) + ), + this.isPartyValid() + ); + const isCaught = globalScene.gameData.dexData[species.speciesId].caughtAttr; + return ( + !isDupe && + isValidForChallenge.value && + currentPartyValue + starterCost <= this.getValueLimit() && + isCaught + ); + }); + if (validStarters.length === 0) { + error = true; // No valid starters available + break; + } + // Select random starter + const randomStarter = validStarters[Math.floor(Math.random() * validStarters.length)]; + const randomSpecies = randomStarter.species; + // Set species and prepare attributes + this.setSpecies(randomSpecies); + const dexAttr = this.getCurrentDexProps(randomSpecies.speciesId); + const props = globalScene.gameData.getSpeciesDexAttrProps(randomSpecies, dexAttr); + const abilityIndex = this.abilityCursor; + const nature = this.natureCursor as unknown as Nature; + const teraType = this.teraCursor; + const moveset = this.starterMoveset?.slice(0) as StarterMoveset; + const starterCost = globalScene.gameData.getSpeciesStarterValue(randomSpecies.speciesId); + const speciesForm = getPokemonSpeciesForm(randomSpecies.speciesId, props.formIndex); + // Load assets and add to party + speciesForm + .loadAssets(props.female, props.formIndex, props.shiny, props.variant, true) + .then(() => { + if (this.tryUpdateValue(starterCost, true)) { + this.addToParty(randomSpecies, dexAttr, abilityIndex, nature, moveset, teraType, true); + ui.playSelect(); + } + }); + break; + case Button.UP: + this.randomCursorObj.setVisible(false); + this.filterBarCursor = this.filterBar.numFilters - 1; + this.setFilterMode(true); + success = true; + break; + case Button.DOWN: + this.randomCursorObj.setVisible(false); + if (this.starterSpecies.length > 0) { + this.starterIconsCursorIndex = 0; + this.moveStarterIconsCursor(this.starterIconsCursorIndex); + } else { + this.filterBarCursor = this.filterBar.numFilters - 1; + this.setFilterMode(true); + } + success = true; + break; + case Button.LEFT: + if (numberOfStarters > 0) { + this.randomCursorObj.setVisible(false); + this.cursorObj.setVisible(true); + this.setCursor(onScreenFirstIndex + 8); // set last column + success = true; + } + break; + case Button.RIGHT: + if (numberOfStarters > 0) { + this.randomCursorObj.setVisible(false); + this.cursorObj.setVisible(true); + this.setCursor(onScreenFirstIndex); // set first column + success = true; + } + break; + } } else { - let starterContainer; - const starterData = this.scene.gameData.starterData[this.lastSpecies.speciesId]; + const starterData = globalScene.gameData.starterData[this.lastSpecies.speciesId]; // prepare persistent starter data to store changes let starterAttributes = this.starterPreferences[this.lastSpecies.speciesId]; @@ -1464,22 +1601,22 @@ export default class StarterSelectUiHandler extends MessageUiHandler { const isPartyValid = this.isPartyValid(); const isValidForChallenge = new BooleanHolder(true); - Challenge.applyChallenges(this.scene.gameMode, Challenge.ChallengeType.STARTER_CHOICE, this.lastSpecies, isValidForChallenge, this.scene.gameData.getSpeciesDexAttrProps(this.lastSpecies, this.getCurrentDexProps(this.lastSpecies.speciesId)), isPartyValid); + Challenge.applyChallenges(globalScene.gameMode, Challenge.ChallengeType.STARTER_CHOICE, this.lastSpecies, isValidForChallenge, globalScene.gameData.getSpeciesDexAttrProps(this.lastSpecies, this.getCurrentDexProps(this.lastSpecies.speciesId)), isPartyValid); - const currentPartyValue = this.starterSpecies.map(s => s.generation).reduce((total: number, gen: number, i: number) => total += this.scene.gameData.getSpeciesStarterValue(this.starterSpecies[i].speciesId), 0); - const newCost = this.scene.gameData.getSpeciesStarterValue(this.lastSpecies.speciesId); + const currentPartyValue = this.starterSpecies.map(s => s.generation).reduce((total: number, _gen: number, i: number) => total += globalScene.gameData.getSpeciesStarterValue(this.starterSpecies[i].speciesId), 0); + const newCost = globalScene.gameData.getSpeciesStarterValue(this.lastSpecies.speciesId); if (!isDupe && isValidForChallenge.value && currentPartyValue + newCost <= this.getValueLimit() && this.starterSpecies.length < PLAYER_PARTY_MAX_SIZE) { // this checks to make sure the pokemon doesn't exist in your party, it's valid for the challenge and that it won't go over the cost limit; if it meets all these criteria it will add it to your party options = [ { label: i18next.t("starterSelectUiHandler:addToParty"), handler: () => { ui.setMode(Mode.STARTER_SELECT); - const isOverValueLimit = this.tryUpdateValue(this.scene.gameData.getSpeciesStarterValue(this.lastSpecies.speciesId), true); + const isOverValueLimit = this.tryUpdateValue(globalScene.gameData.getSpeciesStarterValue(this.lastSpecies.speciesId), true); if (!isDupe && isValidForChallenge.value && isOverValueLimit) { const cursorObj = this.starterCursorObjs[this.starterSpecies.length]; cursorObj.setVisible(true); cursorObj.setPosition(this.cursorObj.x, this.cursorObj.y); - this.addToParty(this.lastSpecies, this.dexAttrCursor, this.abilityCursor, this.natureCursor as unknown as Nature, this.starterMoveset?.slice(0) as StarterMoveset); + this.addToParty(this.lastSpecies, this.dexAttrCursor, this.abilityCursor, this.natureCursor as unknown as Nature, this.starterMoveset?.slice(0) as StarterMoveset, this.teraCursor); ui.playSelect(); } else { ui.playError(); // this should be redundant as there is now a trigger for when a pokemon can't be added to party @@ -1603,11 +1740,11 @@ export default class StarterSelectUiHandler extends MessageUiHandler { ui.setMode(Mode.STARTER_SELECT).then(() => { ui.showText(i18next.t("starterSelectUiHandler:selectNature"), null, () => { - const natures = this.scene.gameData.getNaturesForAttr(this.speciesStarterDexEntry?.natureAttr); + const natures = globalScene.gameData.getNaturesForAttr(this.speciesStarterDexEntry?.natureAttr); ui.setModeWithoutClear(Mode.OPTION_SELECT, { - options: natures.map((n: Nature, i: number) => { + options: natures.map((n: Nature, _i: number) => { const option: OptionSelectItem = { - label: getNatureName(n, true, true, true, this.scene.uiTheme), + label: getNatureName(n, true, true, true, globalScene.uiTheme), handler: () => { // update default nature in starter save data if (!starterAttributes) { @@ -1737,7 +1874,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { if (!(passiveAttr & PassiveAttr.UNLOCKED)) { const passiveCost = getPassiveCandyCount(speciesStarterCosts[this.lastSpecies.speciesId]); options.push({ - label: `x${passiveCost} ${i18next.t("starterSelectUiHandler:unlockPassive")} (${allAbilities[starterPassiveAbilities[this.lastSpecies.speciesId]].name})`, + label: `x${passiveCost} ${i18next.t("starterSelectUiHandler:unlockPassive")} (${allAbilities[this.lastSpecies.getPassiveAbility()].name})`, handler: () => { if (Overrides.FREE_CANDY_UPGRADE_OVERRIDE || candyCount >= passiveCost) { starterData.passiveAttr |= PassiveAttr.UNLOCKED | PassiveAttr.ENABLED; @@ -1745,19 +1882,19 @@ export default class StarterSelectUiHandler extends MessageUiHandler { starterData.candyCount -= passiveCost; } this.pokemonCandyCountText.setText(`x${starterData.candyCount}`); - this.scene.gameData.saveSystem().then(success => { + globalScene.gameData.saveSystem().then(success => { if (!success) { - return this.scene.reset(true); + return globalScene.reset(true); } }); ui.setMode(Mode.STARTER_SELECT); this.setSpeciesDetails(this.lastSpecies); - this.scene.playSound("se/buy"); + globalScene.playSound("se/buy"); // update the passive background and icon/animation for available upgrade if (starterContainer) { this.updateCandyUpgradeDisplay(starterContainer); - starterContainer.starterPassiveBgs.setVisible(!!this.scene.gameData.starterData[this.lastSpecies.speciesId].passiveAttr); + starterContainer.starterPassiveBgs.setVisible(!!globalScene.gameData.starterData[this.lastSpecies.speciesId].passiveAttr); } return true; } @@ -1781,14 +1918,14 @@ export default class StarterSelectUiHandler extends MessageUiHandler { starterData.candyCount -= reductionCost; } this.pokemonCandyCountText.setText(`x${starterData.candyCount}`); - this.scene.gameData.saveSystem().then(success => { + globalScene.gameData.saveSystem().then(success => { if (!success) { - return this.scene.reset(true); + return globalScene.reset(true); } }); this.tryUpdateValue(0); ui.setMode(Mode.STARTER_SELECT); - this.scene.playSound("se/buy"); + globalScene.playSound("se/buy"); // update the value label and icon/animation for available upgrade if (starterContainer) { @@ -1810,7 +1947,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { label: `x${sameSpeciesEggCost} ${i18next.t("starterSelectUiHandler:sameSpeciesEgg")}`, handler: () => { if (Overrides.FREE_CANDY_UPGRADE_OVERRIDE || candyCount >= sameSpeciesEggCost) { - if (this.scene.gameData.eggs.length >= 99 && !Overrides.UNLIMITED_EGG_COUNT_OVERRIDE) { + if (globalScene.gameData.eggs.length >= 99 && !Overrides.UNLIMITED_EGG_COUNT_OVERRIDE) { // Egg list full, show error message at the top of the screen and abort this.showText(i18next.t("egg:tooManyEggs"), undefined, () => this.showText("", 0, () => this.tutorialActive = false), 2000, false, undefined, true); return false; @@ -1820,16 +1957,16 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } this.pokemonCandyCountText.setText(`x${starterData.candyCount}`); - const egg = new Egg({ scene: this.scene, species: this.lastSpecies.speciesId, sourceType: EggSourceType.SAME_SPECIES_EGG }); - egg.addEggToGameData(this.scene); + const egg = new Egg({ species: this.lastSpecies.speciesId, sourceType: EggSourceType.SAME_SPECIES_EGG }); + egg.addEggToGameData(); - this.scene.gameData.saveSystem().then(success => { + globalScene.gameData.saveSystem().then(success => { if (!success) { - return this.scene.reset(true); + return globalScene.reset(true); } }); ui.setMode(Mode.STARTER_SELECT); - this.scene.playSound("se/buy"); + globalScene.playSound("se/buy"); // update the icon/animation for available upgrade if (starterContainer) { @@ -1855,6 +1992,21 @@ export default class StarterSelectUiHandler extends MessageUiHandler { yOffset: 47 }); }; + options.push({ + label: i18next.t("menuUiHandler:POKEDEX"), + handler: () => { + ui.setMode(Mode.STARTER_SELECT).then(() => { + const attributes = { + shiny: starterAttributes.shiny, + variant: starterAttributes.variant, + form: starterAttributes.form, + female: starterAttributes.female + }; + ui.setOverlayMode(Mode.POKEDEX_PAGE, this.lastSpecies, starterAttributes.form, attributes); + }); + return true; + } + }); if (!pokemonPrevolutions.hasOwnProperty(this.lastSpecies.speciesId)) { options.push({ label: i18next.t("starterSelectUiHandler:useCandies"), @@ -1878,57 +2030,60 @@ export default class StarterSelectUiHandler extends MessageUiHandler { success = true; } } else { - const props = this.scene.gameData.getSpeciesDexAttrProps(this.lastSpecies, this.getCurrentDexProps(this.lastSpecies.speciesId)); + const props = globalScene.gameData.getSpeciesDexAttrProps(this.lastSpecies, this.getCurrentDexProps(this.lastSpecies.speciesId)); switch (button) { case Button.CYCLE_SHINY: if (this.canCycleShiny) { - starterAttributes.shiny = starterAttributes.shiny !== undefined ? !starterAttributes.shiny : false; - - if (starterAttributes.shiny) { - // Change to shiny, we need to get the proper default variant - const newProps = this.scene.gameData.getSpeciesDexAttrProps(this.lastSpecies, this.getCurrentDexProps(this.lastSpecies.speciesId)); + if (starterAttributes.shiny === false) { + // If not shiny, we change to shiny and get the proper default variant + const newProps = globalScene.gameData.getSpeciesDexAttrProps(this.lastSpecies, this.getCurrentDexProps(this.lastSpecies.speciesId)); const newVariant = starterAttributes.variant ? starterAttributes.variant as Variant : newProps.variant; this.setSpeciesDetails(this.lastSpecies, { shiny: true, variant: newVariant }); - this.scene.playSound("se/sparkle"); - // Set the variant label to the shiny tint + 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); + + starterAttributes.shiny = true; } else { - this.setSpeciesDetails(this.lastSpecies, { shiny: false, variant: 0 }); - this.pokemonShinyIcon.setVisible(false); - success = true; - } - } - break; - case Button.V: - if (this.canCycleVariant) { - let newVariant = props.variant; - do { - newVariant = (newVariant + 1) % 3; - if (newVariant === 0) { - if (this.speciesStarterDexEntry!.caughtAttr & DexAttr.DEFAULT_VARIANT) { // TODO: is this bang correct? - break; - } - } else if (newVariant === 1) { - if (this.speciesStarterDexEntry!.caughtAttr & DexAttr.VARIANT_2) { // TODO: is this bang correct? - break; + // If shiny, we update the variant + let newVariant = props.variant; + do { + newVariant = (newVariant + 1) % 3; + if (newVariant === 0) { + if (this.speciesStarterDexEntry!.caughtAttr & DexAttr.DEFAULT_VARIANT) { // TODO: is this bang correct? + break; + } + } else if (newVariant === 1) { + if (this.speciesStarterDexEntry!.caughtAttr & DexAttr.VARIANT_2) { // TODO: is this bang correct? + break; + } + } else { + if (this.speciesStarterDexEntry!.caughtAttr & DexAttr.VARIANT_3) { // TODO: is this bang correct? + break; + } } + } while (newVariant !== props.variant); + starterAttributes.variant = newVariant; // store the selected variant + if ((this.speciesStarterDexEntry!.caughtAttr & DexAttr.NON_SHINY) && (newVariant <= props.variant)) { + // If we have run out of variants, go back to non shiny + this.setSpeciesDetails(this.lastSpecies, { shiny: false, variant: 0 }); + this.pokemonShinyIcon.setVisible(false); + success = true; + starterAttributes.shiny = false; } else { - if (this.speciesStarterDexEntry!.caughtAttr & DexAttr.VARIANT_3) { // TODO: is this bang correct? - break; - } + // If going to a higher variant, or only shiny forms are caught, go to next variant + this.setSpeciesDetails(this.lastSpecies, { variant: newVariant as Variant }); + // Cycle tint based on current sprite tint + const tint = getVariantTint(newVariant as Variant); + this.pokemonShinyIcon.setFrame(getVariantIcon(newVariant as Variant)); + this.pokemonShinyIcon.setTint(tint); + success = true; } - } while (newVariant !== props.variant); - starterAttributes.variant = newVariant; // store the selected variant - this.setSpeciesDetails(this.lastSpecies, { variant: newVariant as Variant }); - // Cycle tint based on current sprite tint - const tint = getVariantTint(newVariant as Variant); - this.pokemonShinyIcon.setFrame(getVariantIcon(newVariant as Variant)); - this.pokemonShinyIcon.setTint(tint); - success = true; + } } break; case Button.CYCLE_FORM: @@ -1937,12 +2092,13 @@ export default class StarterSelectUiHandler extends MessageUiHandler { let newFormIndex = props.formIndex; do { newFormIndex = (newFormIndex + 1) % formCount; - if (this.lastSpecies.forms[newFormIndex].isStarterSelectable && this.speciesStarterDexEntry!.caughtAttr! & this.scene.gameData.getFormAttr(newFormIndex)) { // TODO: are those bangs correct? + if (this.lastSpecies.forms[newFormIndex].isStarterSelectable && this.speciesStarterDexEntry!.caughtAttr! & globalScene.gameData.getFormAttr(newFormIndex)) { // TODO: are those bangs correct? break; } } while (newFormIndex !== props.formIndex); starterAttributes.form = newFormIndex; // store the selected form - this.setSpeciesDetails(this.lastSpecies, { formIndex: newFormIndex }); + starterAttributes.tera = this.lastSpecies.forms[newFormIndex].type1; + this.setSpeciesDetails(this.lastSpecies, { formIndex: newFormIndex, teraType: starterAttributes.tera }); success = true; } break; @@ -1956,7 +2112,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { case Button.CYCLE_ABILITY: if (this.canCycleAbility) { const abilityCount = this.lastSpecies.getAbilityCount(); - const abilityAttr = this.scene.gameData.starterData[this.lastSpecies.speciesId].abilityAttr; + const abilityAttr = globalScene.gameData.starterData[this.lastSpecies.speciesId].abilityAttr; const hasAbility1 = abilityAttr & AbilityAttr.ABILITY_1; let newAbilityIndex = this.abilityCursor; do { @@ -1979,11 +2135,11 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } while (newAbilityIndex !== this.abilityCursor); starterAttributes.ability = newAbilityIndex; // store the selected ability - const { visible: tooltipVisible } = this.scene.ui.getTooltip(); + const { visible: tooltipVisible } = globalScene.ui.getTooltip(); if (tooltipVisible && this.activeTooltip === "ABILITY") { const newAbility = allAbilities[this.lastSpecies.getAbility(newAbilityIndex)]; - this.scene.ui.editTooltip(`${newAbility.name}`, `${newAbility.description}`); + globalScene.ui.editTooltip(`${newAbility.name}`, `${newAbility.description}`); } this.setSpeciesDetails(this.lastSpecies, { abilityIndex: newAbilityIndex }); @@ -1992,15 +2148,28 @@ export default class StarterSelectUiHandler extends MessageUiHandler { break; case Button.CYCLE_NATURE: if (this.canCycleNature) { - const natures = this.scene.gameData.getNaturesForAttr(this.speciesStarterDexEntry?.natureAttr); + const natures = globalScene.gameData.getNaturesForAttr(this.speciesStarterDexEntry?.natureAttr); const natureIndex = natures.indexOf(this.natureCursor); const newNature = natures[natureIndex < natures.length - 1 ? natureIndex + 1 : 0]; // store cycled nature as default - starterAttributes.nature = newNature as unknown as integer; + starterAttributes.nature = newNature as unknown as number; this.setSpeciesDetails(this.lastSpecies, { natureIndex: newNature }); success = true; } break; + case Button.CYCLE_TERA: + if (this.canCycleTera) { + const speciesForm = getPokemonSpeciesForm(this.lastSpecies.speciesId, starterAttributes.form ?? 0); + if (speciesForm.type1 === this.teraCursor && !Utils.isNullOrUndefined(speciesForm.type2)) { + starterAttributes.tera = speciesForm.type2!; + this.setSpeciesDetails(this.lastSpecies, { teraType: speciesForm.type2! }); + } else { + starterAttributes.tera = speciesForm.type1; + this.setSpeciesDetails(this.lastSpecies, { teraType: speciesForm.type1 }); + } + success = true; + } + break; case Button.UP: if (!this.starterIconsCursorObj.visible) { if (currentRow > 0) { @@ -2016,11 +2185,10 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } } else { if (this.starterIconsCursorIndex === 0) { - // Up from first Pokemon in the team > go to filter + // Up from first Pokemon in the team > go to Random selection this.starterIconsCursorObj.setVisible(false); this.setSpecies(null); - this.filterBarCursor = Math.max(1, this.filterBar.numFilters - 1); - this.setFilterMode(true); + this.randomCursorObj.setVisible(true); } else { this.starterIconsCursorIndex--; this.moveStarterIconsCursor(this.starterIconsCursorIndex); @@ -2065,9 +2233,12 @@ export default class StarterSelectUiHandler extends MessageUiHandler { success = this.setCursor(this.cursor - 1); } else { // LEFT from filtered Pokemon, on the left edge - - if (this.starterSpecies.length === 0) { - // no starter in team > wrap around to the last column + if ( onScreenCurrentRow === 0 ) { + // from the first row of starters we go to the random selection + this.cursorObj.setVisible(false); + this.randomCursorObj.setVisible(true); + } else if (this.starterSpecies.length === 0) { + // no starter in team and not on first row > wrap around to the last column success = this.setCursor(this.cursor + Math.min(8, numberOfStarters - this.cursor)); } else if (onScreenCurrentRow < 7) { @@ -2103,7 +2274,11 @@ export default class StarterSelectUiHandler extends MessageUiHandler { success = this.setCursor(this.cursor + 1); } else { // RIGHT from filtered Pokemon, on the right edge - if (this.starterSpecies.length === 0) { + if ( onScreenCurrentRow === 0 ) { + // from the first row of starters we go to the random selection + this.cursorObj.setVisible(false); + this.randomCursorObj.setVisible(true); + } else if (this.starterSpecies.length === 0) { // no selected starter in team > wrap around to the first column success = this.setCursor(this.cursor - Math.min(8, this.cursor % 9)); @@ -2159,8 +2334,8 @@ export default class StarterSelectUiHandler extends MessageUiHandler { return [ isDupe, removeIndex ]; } - addToParty(species: PokemonSpecies, dexAttr: bigint, abilityIndex: integer, nature: Nature, moveset: StarterMoveset) { - const props = this.scene.gameData.getSpeciesDexAttrProps(species, dexAttr); + addToParty(species: PokemonSpecies, dexAttr: bigint, abilityIndex: number, nature: Nature, moveset: StarterMoveset, teraType: Type, randomSelection: boolean = false) { + const props = globalScene.gameData.getSpeciesDexAttrProps(species, dexAttr); this.starterIcons[this.starterSpecies.length].setTexture(species.getIconAtlasKey(props.formIndex, props.shiny, props.variant)); this.starterIcons[this.starterSpecies.length].setFrame(species.getIconId(props.female, props.formIndex, props.shiny, props.variant)); this.checkIconId(this.starterIcons[this.starterSpecies.length], species, props.female, props.formIndex, props.shiny, props.variant); @@ -2169,15 +2344,16 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.starterAttr.push(dexAttr); this.starterAbilityIndexes.push(abilityIndex); this.starterNatures.push(nature); + this.starterTeras.push(teraType); this.starterMovesets.push(moveset); - if (this.speciesLoaded.get(species.speciesId)) { - getPokemonSpeciesForm(species.speciesId, props.formIndex).cry(this.scene); + if (this.speciesLoaded.get(species.speciesId) || randomSelection ) { + getPokemonSpeciesForm(species.speciesId, props.formIndex).cry(); } this.updateInstructions(); } updatePartyIcon(species: PokemonSpecies, index: number) { - const props = this.scene.gameData.getSpeciesDexAttrProps(species, this.getCurrentDexProps(species.speciesId)); + const props = globalScene.gameData.getSpeciesDexAttrProps(species, this.getCurrentDexProps(species.speciesId)); this.starterIcons[index].setTexture(species.getIconAtlasKey(props.formIndex, props.shiny, props.variant)); this.starterIcons[index].setFrame(species.getIconId(props.female, props.formIndex, props.shiny, props.variant)); this.checkIconId(this.starterIcons[index], species, props.female, props.formIndex, props.shiny, props.variant); @@ -2190,29 +2366,29 @@ export default class StarterSelectUiHandler extends MessageUiHandler { if (existingMoveIndex > -1) { this.starterMoveset![existingMoveIndex] = move; // TODO: is this bang correct? } - const props: DexAttrProps = this.scene.gameData.getSpeciesDexAttrProps(this.lastSpecies, this.dexAttrCursor); + const props: DexAttrProps = globalScene.gameData.getSpeciesDexAttrProps(this.lastSpecies, this.dexAttrCursor); // species has different forms if (pokemonFormLevelMoves.hasOwnProperty(speciesId)) { // starterMoveData doesn't have base form moves or is using the single form format - if (!this.scene.gameData.starterData[speciesId].moveset || Array.isArray(this.scene.gameData.starterData[speciesId].moveset)) { - this.scene.gameData.starterData[speciesId].moveset = { [props.formIndex]: this.starterMoveset?.slice(0) as StarterMoveset }; + 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 = this.scene.gameData.starterData[speciesId].moveset; + const starterMoveData = globalScene.gameData.starterData[speciesId].moveset; // starterMoveData doesn't have active form moves if (!starterMoveData.hasOwnProperty(props.formIndex)) { - this.scene.gameData.starterData[speciesId].moveset[props.formIndex] = this.starterMoveset?.slice(0) as StarterMoveset; + 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) { - this.scene.gameData.starterData[speciesId].moveset[props.formIndex] = this.starterMoveset?.slice(0) as StarterMoveset; + globalScene.gameData.starterData[speciesId].moveset[props.formIndex] = this.starterMoveset?.slice(0) as StarterMoveset; } } } else { - this.scene.gameData.starterData[speciesId].moveset = this.starterMoveset?.slice(0) as StarterMoveset; + globalScene.gameData.starterData[speciesId].moveset = this.starterMoveset?.slice(0) as StarterMoveset; } this.setSpeciesDetails(this.lastSpecies, { forSeen: false }); @@ -2249,7 +2425,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { case SettingKeyboard.Button_Cycle_Nature: iconPath = "N.png"; break; - case SettingKeyboard.Button_Cycle_Variant: + case SettingKeyboard.Button_Cycle_Tera: iconPath = "V.png"; break; case SettingKeyboard.Button_Stats: @@ -2259,7 +2435,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { break; } } else { - iconPath = this.scene.inputController?.getIconForLatestInputRecorded(iconSetting); + iconPath = globalScene.inputController?.getIconForLatestInputRecorded(iconSetting); } iconElement.setTexture(gamepadType, iconPath); iconElement.setPosition(this.instructionRowX, this.instructionRowY); @@ -2282,7 +2458,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { gamepadType = "keyboard"; iconPath = "C.png"; } else { - iconPath = this.scene.inputController?.getIconForLatestInputRecorded(iconSetting); + iconPath = globalScene.inputController?.getIconForLatestInputRecorded(iconSetting); } iconElement.setTexture(gamepadType, iconPath); iconElement.setPosition(this.filterInstructionRowX, this.filterInstructionRowY); @@ -2306,10 +2482,10 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.instructionsContainer.removeAll(); this.filterInstructionsContainer.removeAll(); let gamepadType; - if (this.scene.inputMethod === "gamepad") { - gamepadType = this.scene.inputController.getConfig(this.scene.inputController.selectedDevice[Device.GAMEPAD]).padType; + if (globalScene.inputMethod === "gamepad") { + gamepadType = globalScene.inputController.getConfig(globalScene.inputController.selectedDevice[Device.GAMEPAD]).padType; } else { - gamepadType = this.scene.inputMethod; + gamepadType = globalScene.inputMethod; } if (!gamepadType) { @@ -2332,8 +2508,8 @@ export default class StarterSelectUiHandler extends MessageUiHandler { if (this.canCycleNature) { this.updateButtonIcon(SettingKeyboard.Button_Cycle_Nature, gamepadType, this.natureIconElement, this.natureLabel); } - if (this.canCycleVariant) { - this.updateButtonIcon(SettingKeyboard.Button_Cycle_Variant, gamepadType, this.variantIconElement, this.variantLabel); + if (this.canCycleTera) { + this.updateButtonIcon(SettingKeyboard.Button_Cycle_Tera, gamepadType, this.teraIconElement, this.teraLabel); } } @@ -2346,7 +2522,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { getValueLimit(): number { const valueLimit = new NumberHolder(0); - switch (this.scene.gameMode.modeId) { + switch (globalScene.gameMode.modeId) { case GameModes.ENDLESS: case GameModes.SPLICED_ENDLESS: valueLimit.value = 15; @@ -2355,7 +2531,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { valueLimit.value = 10; } - Challenge.applyChallenges(this.scene.gameMode, Challenge.ChallengeType.STARTER_POINTS, valueLimit); + Challenge.applyChallenges(globalScene.gameMode, Challenge.ChallengeType.STARTER_POINTS, valueLimit); return valueLimit.value; } @@ -2371,7 +2547,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.filterBar.updateFilterLabels(); // pre filter for challenges - if (this.scene.gameMode.modeId === GameModes.CHALLENGE) { + if (globalScene.gameMode.modeId === GameModes.CHALLENGE) { this.starterContainers.forEach(container => { const species = container.species; let allFormsValid = false; @@ -2382,12 +2558,12 @@ export default class StarterSelectUiHandler extends MessageUiHandler { */ const tempFormProps = BigInt(Math.pow(2, i)) * DexAttr.DEFAULT_FORM; const isValidForChallenge = new BooleanHolder(true); - Challenge.applyChallenges(this.scene.gameMode, Challenge.ChallengeType.STARTER_CHOICE, container.species, isValidForChallenge, this.scene.gameData.getSpeciesDexAttrProps(species, tempFormProps), true); + Challenge.applyChallenges(globalScene.gameMode, Challenge.ChallengeType.STARTER_CHOICE, container.species, isValidForChallenge, globalScene.gameData.getSpeciesDexAttrProps(species, tempFormProps), true); allFormsValid = allFormsValid || isValidForChallenge.value; } } else { const isValidForChallenge = new BooleanHolder(true); - Challenge.applyChallenges(this.scene.gameMode, Challenge.ChallengeType.STARTER_CHOICE, container.species, isValidForChallenge, this.scene.gameData.getSpeciesDexAttrProps(species, this.scene.gameData.getSpeciesDefaultDexAttr(container.species, false, true)), true); + Challenge.applyChallenges(globalScene.gameMode, Challenge.ChallengeType.STARTER_CHOICE, container.species, isValidForChallenge, globalScene.gameData.getSpeciesDexAttrProps(species, globalScene.gameData.getSpeciesDefaultDexAttr(container.species, false, true)), true); allFormsValid = isValidForChallenge.value; } if (allFormsValid) { @@ -2406,7 +2582,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { const starterSprite = currentFilteredContainer.icon as Phaser.GameObjects.Sprite; const currentDexAttr = this.getCurrentDexProps(currentFilteredContainer.species.speciesId); - const props = this.scene.gameData.getSpeciesDexAttrProps(currentFilteredContainer.species, currentDexAttr); + const props = globalScene.gameData.getSpeciesDexAttrProps(currentFilteredContainer.species, currentDexAttr); starterSprite.setTexture(currentFilteredContainer.species.getIconAtlasKey(props.formIndex, props.shiny, props.variant), currentFilteredContainer.species.getIconId(props.female!, props.formIndex, props.shiny, props.variant)); currentFilteredContainer.checkIconId(props.female, props.formIndex, props.shiny, props.variant); @@ -2416,11 +2592,11 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.validStarterContainers.forEach(container => { container.setVisible(false); - container.cost = this.scene.gameData.getSpeciesStarterValue(container.species.speciesId); + container.cost = globalScene.gameData.getSpeciesStarterValue(container.species.speciesId); // First, ensure you have the caught attributes for the species else default to bigint 0 - const caughtAttr = this.scene.gameData.dexData[container.species.speciesId]?.caughtAttr || BigInt(0); - const starterData = this.scene.gameData.starterData[container.species.speciesId]; + const caughtAttr = globalScene.gameData.dexData[container.species.speciesId]?.caughtAttr || BigInt(0); + const starterData = globalScene.gameData.starterData[container.species.speciesId]; const isStarterProgressable = speciesEggMoves.hasOwnProperty(container.species.speciesId); // Gen filter @@ -2466,13 +2642,18 @@ export default class StarterSelectUiHandler extends MessageUiHandler { }); // Cost Reduction Filter - const isCostReduced = starterData.valueReduction > 0; + const isCostReducedByOne = starterData.valueReduction === 1; + const isCostReducedByTwo = starterData.valueReduction === 2; const isCostReductionUnlockable = this.isValueReductionAvailable(container.species.speciesId); const fitsCostReduction = this.filterBar.getVals(DropDownColumn.UNLOCKS).some(unlocks => { if (unlocks.val === "COST_REDUCTION" && unlocks.state === DropDownState.ON) { - return isCostReduced; + return isCostReducedByOne || isCostReducedByTwo; + } else if (unlocks.val === "COST_REDUCTION" && unlocks.state === DropDownState.ONE) { + return isCostReducedByOne; + } else if (unlocks.val === "COST_REDUCTION" && unlocks.state === DropDownState.TWO) { + return isCostReducedByTwo; } else if (unlocks.val === "COST_REDUCTION" && unlocks.state === DropDownState.EXCLUDE) { - return isStarterProgressable && !isCostReduced; + return isStarterProgressable && !(isCostReducedByOne || isCostReducedByTwo); } else if (unlocks.val === "COST_REDUCTION" && unlocks.state === DropDownState.UNLOCKABLE) { return isCostReductionUnlockable; } else if (unlocks.val === "COST_REDUCTION" && unlocks.state === DropDownState.OFF) { @@ -2563,15 +2744,19 @@ export default class StarterSelectUiHandler extends MessageUiHandler { case SortCriteria.COST: return (a.cost - b.cost) * -sort.dir; case SortCriteria.CANDY: - const candyCountA = this.scene.gameData.starterData[a.species.speciesId].candyCount; - const candyCountB = this.scene.gameData.starterData[b.species.speciesId].candyCount; + const candyCountA = globalScene.gameData.starterData[a.species.speciesId].candyCount; + const candyCountB = globalScene.gameData.starterData[b.species.speciesId].candyCount; return (candyCountA - candyCountB) * -sort.dir; case SortCriteria.IV: - const avgIVsA = this.scene.gameData.dexData[a.species.speciesId].ivs.reduce((a, b) => a + b, 0) / this.scene.gameData.dexData[a.species.speciesId].ivs.length; - const avgIVsB = this.scene.gameData.dexData[b.species.speciesId].ivs.reduce((a, b) => a + b, 0) / this.scene.gameData.dexData[b.species.speciesId].ivs.length; + const avgIVsA = globalScene.gameData.dexData[a.species.speciesId].ivs.reduce((a, b) => a + b, 0) / globalScene.gameData.dexData[a.species.speciesId].ivs.length; + const avgIVsB = globalScene.gameData.dexData[b.species.speciesId].ivs.reduce((a, b) => a + b, 0) / globalScene.gameData.dexData[b.species.speciesId].ivs.length; return (avgIVsA - avgIVsB) * -sort.dir; case SortCriteria.NAME: return a.species.name.localeCompare(b.species.name) * -sort.dir; + case SortCriteria.CAUGHT: + return (globalScene.gameData.dexData[a.species.speciesId].caughtCount - globalScene.gameData.dexData[b.species.speciesId].caughtCount) * -sort.dir; + case SortCriteria.HATCHED: + return (globalScene.gameData.dexData[a.species.speciesId].hatchedCount - globalScene.gameData.dexData[b.species.speciesId].hatchedCount) * -sort.dir; } return 0; }); @@ -2579,6 +2764,11 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.updateScroll(); }; + override destroy(): void { + // Without this the reference gets hung up and no startercontainers get GCd + this.starterContainers = []; + } + updateScroll = () => { const maxColumns = 9; const maxRows = 9; @@ -2623,8 +2813,8 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.updateStarterValueLabel(container); container.label.setVisible(true); - const speciesVariants = speciesId && this.scene.gameData.dexData[speciesId].caughtAttr & DexAttr.SHINY - ? [ DexAttr.DEFAULT_VARIANT, DexAttr.VARIANT_2, DexAttr.VARIANT_3 ].filter(v => !!(this.scene.gameData.dexData[speciesId].caughtAttr & v)) + const speciesVariants = speciesId && globalScene.gameData.dexData[speciesId].caughtAttr & DexAttr.SHINY + ? [ DexAttr.DEFAULT_VARIANT, DexAttr.VARIANT_2, DexAttr.VARIANT_3 ].filter(v => !!(globalScene.gameData.dexData[speciesId].caughtAttr & v)) : []; for (let v = 0; v < 3; v++) { const hasVariant = speciesVariants.length > v; @@ -2634,13 +2824,13 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } } - container.starterPassiveBgs.setVisible(!!this.scene.gameData.starterData[speciesId].passiveAttr); - container.hiddenAbilityIcon.setVisible(!!this.scene.gameData.dexData[speciesId].caughtAttr && !!(this.scene.gameData.starterData[speciesId].abilityAttr & 4)); - container.classicWinIcon.setVisible(this.scene.gameData.starterData[speciesId].classicWinCount > 0); + container.starterPassiveBgs.setVisible(!!globalScene.gameData.starterData[speciesId].passiveAttr); + container.hiddenAbilityIcon.setVisible(!!globalScene.gameData.dexData[speciesId].caughtAttr && !!(globalScene.gameData.starterData[speciesId].abilityAttr & 4)); + container.classicWinIcon.setVisible(globalScene.gameData.starterData[speciesId].classicWinCount > 0); container.favoriteIcon.setVisible(this.starterPreferences[speciesId]?.favorite ?? false); // 'Candy Icon' mode - if (this.scene.candyUpgradeDisplay === 0) { + if (globalScene.candyUpgradeDisplay === 0) { if (!starterColors[speciesId]) { // Default to white if no colors are found @@ -2652,7 +2842,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { container.candyUpgradeOverlayIcon.setTint(argbFromRgba(rgbHexToRgba(starterColors[speciesId][1]))); this.setUpgradeIcon(container); - } else if (this.scene.candyUpgradeDisplay === 1) { + } else if (globalScene.candyUpgradeDisplay === 1) { container.candyUpgradeIcon.setVisible(false); container.candyUpgradeOverlayIcon.setVisible(false); } @@ -2660,7 +2850,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { }); }; - setCursor(cursor: integer): boolean { + setCursor(cursor: number): boolean { let changed = false; if (this.filterMode) { @@ -2679,7 +2869,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { if (species) { const defaultDexAttr = this.getCurrentDexProps(species.speciesId); - const defaultProps = this.scene.gameData.getSpeciesDexAttrProps(species, defaultDexAttr); + const defaultProps = globalScene.gameData.getSpeciesDexAttrProps(species, defaultDexAttr); const variant = this.starterPreferences[species.speciesId]?.variant ? this.starterPreferences[species.speciesId].variant as Variant : defaultProps.variant; const tint = getVariantTint(variant); this.pokemonShinyIcon.setFrame(getVariantIcon(variant)); @@ -2723,7 +2913,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } getFriendship(speciesId: number) { - let currentFriendship = this.scene.gameData.starterData[speciesId].friendship; + let currentFriendship = globalScene.gameData.starterData[speciesId].friendship; if (!currentFriendship || currentFriendship === undefined) { currentFriendship = 0; } @@ -2734,13 +2924,14 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } setSpecies(species: PokemonSpecies | null) { - this.speciesStarterDexEntry = species ? this.scene.gameData.dexData[species.speciesId] : null; + this.speciesStarterDexEntry = species ? globalScene.gameData.dexData[species.speciesId] : null; this.dexAttrCursor = species ? this.getCurrentDexProps(species.speciesId) : 0n; - this.abilityCursor = species ? this.scene.gameData.getStarterSpeciesDefaultAbilityIndex(species) : 0; - this.natureCursor = species ? this.scene.gameData.getSpeciesDefaultNature(species) : 0; + this.abilityCursor = species ? globalScene.gameData.getStarterSpeciesDefaultAbilityIndex(species) : 0; + this.natureCursor = species ? globalScene.gameData.getSpeciesDefaultNature(species) : 0; + this.teraCursor = species ? species.type1 : Type.UNKNOWN; - if (!species && this.scene.ui.getTooltip().visible) { - this.scene.ui.hideTooltip(); + if (!species && globalScene.ui.getTooltip().visible) { + globalScene.ui.hideTooltip(); } this.pokemonAbilityText.off("pointerover"); @@ -2756,6 +2947,10 @@ export default class StarterSelectUiHandler extends MessageUiHandler { // load default ability from stater save data, if set this.abilityCursor = starterAttributes.ability; } + if (starterAttributes?.tera) { + // load default tera from starter save data, if set + this.teraCursor = starterAttributes.tera; + } if (this.statsMode) { if (this.speciesStarterDexEntry?.caughtAttr) { @@ -2770,7 +2965,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { if (this.lastSpecies) { const dexAttr = this.getCurrentDexProps(this.lastSpecies.speciesId); - const props = this.scene.gameData.getSpeciesDexAttrProps(this.lastSpecies, dexAttr); + const props = globalScene.gameData.getSpeciesDexAttrProps(this.lastSpecies, dexAttr); const speciesIndex = this.allSpecies.indexOf(this.lastSpecies); const lastSpeciesIcon = this.starterContainers[speciesIndex].icon; this.checkIconId(lastSpeciesIcon, this.lastSpecies, props.female, props.formIndex, props.shiny, props.variant); @@ -2778,7 +2973,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { // Resume the animation for the previously selected species const icon = this.starterContainers[speciesIndex].icon; - this.scene.tweens.getTweensOf(icon).forEach(tween => tween.resume()); + globalScene.tweens.getTweensOf(icon).forEach(tween => tween.resume()); } this.lastSpecies = species!; // TODO: is this bang correct? @@ -2795,7 +2990,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { if (this.speciesStarterDexEntry?.caughtAttr) { const colorScheme = starterColors[species.speciesId]; - const luck = this.scene.gameData.getDexAttrLuck(this.speciesStarterDexEntry.caughtAttr); + 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)); @@ -2825,7 +3020,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonHatchedCountText.setText(`${this.speciesStarterDexEntry.hatchedCount}`); const defaultDexAttr = this.getCurrentDexProps(species.speciesId); - const defaultProps = this.scene.gameData.getSpeciesDexAttrProps(species, defaultDexAttr); + const defaultProps = globalScene.gameData.getSpeciesDexAttrProps(species, defaultDexAttr); const variant = defaultProps.variant; const tint = getVariantTint(variant); this.pokemonShinyIcon.setFrame(getVariantIcon(variant)); @@ -2849,7 +3044,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonShinyIcon.setY(117); this.pokemonCandyIcon.setTint(argbFromRgba(rgbHexToRgba(colorScheme[0]))); this.pokemonCandyOverlayIcon.setTint(argbFromRgba(rgbHexToRgba(colorScheme[1]))); - this.pokemonCandyCountText.setText(`x${this.scene.gameData.starterData[species.speciesId].candyCount}`); + this.pokemonCandyCountText.setText(`x${globalScene.gameData.starterData[species.speciesId].candyCount}`); this.pokemonCandyContainer.setVisible(true); this.pokemonFormText.setY(42); this.pokemonHatchedIcon.setVisible(true); @@ -2860,11 +3055,11 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonCandyDarknessOverlay.setCrop(0, 0, 16, candyCropY); this.pokemonCandyContainer.on("pointerover", () => { - this.scene.ui.showTooltip("", `${currentFriendship}/${friendshipCap}`, true); + globalScene.ui.showTooltip("", `${currentFriendship}/${friendshipCap}`, true); this.activeTooltip = "CANDY"; }); this.pokemonCandyContainer.on("pointerout", () => { - this.scene.ui.hideTooltip(); + globalScene.ui.hideTooltip(); this.activeTooltip = undefined; }); @@ -2876,7 +3071,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { const icon = this.starterContainers[speciesIndex].icon; if (this.isUpgradeAnimationEnabled()) { - this.scene.tweens.getTweensOf(icon).forEach(tween => tween.pause()); + globalScene.tweens.getTweensOf(icon).forEach(tween => tween.pause()); // Reset the position of the icon icon.x = -2; icon.y = 2; @@ -2890,21 +3085,22 @@ export default class StarterSelectUiHandler extends MessageUiHandler { let props: DexAttrProps; if (starterIndex > -1) { - props = this.scene.gameData.getSpeciesDexAttrProps(species, this.starterAttr[starterIndex]); + props = globalScene.gameData.getSpeciesDexAttrProps(species, this.starterAttr[starterIndex]); this.setSpeciesDetails(species, { shiny: props.shiny, formIndex: props.formIndex, female: props.female, variant: props.variant, abilityIndex: this.starterAbilityIndexes[starterIndex], - natureIndex: this.starterNatures[starterIndex] + natureIndex: this.starterNatures[starterIndex], + teraType: this.starterTeras[starterIndex] }); } else { const defaultDexAttr = this.getCurrentDexProps(species.speciesId); - const defaultAbilityIndex = starterAttributes?.ability ?? this.scene.gameData.getStarterSpeciesDefaultAbilityIndex(species); + const defaultAbilityIndex = starterAttributes?.ability ?? globalScene.gameData.getStarterSpeciesDefaultAbilityIndex(species); // load default nature from stater save data, if set - const defaultNature = starterAttributes?.nature || this.scene.gameData.getSpeciesDefaultNature(species); - props = this.scene.gameData.getSpeciesDexAttrProps(species, defaultDexAttr); + const defaultNature = starterAttributes?.nature || globalScene.gameData.getSpeciesDefaultNature(species); + props = globalScene.gameData.getSpeciesDexAttrProps(species, defaultDexAttr); if (starterAttributes?.variant && !isNaN(starterAttributes.variant)) { if (props.shiny) { props.variant = starterAttributes.variant as Variant; @@ -2928,7 +3124,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonSprite.clearTint(); if (this.pokerusSpecies.includes(species)) { - handleTutorial(this.scene, Tutorial.Pokerus); + handleTutorial(Tutorial.Pokerus); } } else { this.pokemonGrowthRateText.setText(""); @@ -2945,11 +3141,12 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonCaughtHatchedContainer.setVisible(false); this.pokemonCandyContainer.setVisible(false); this.pokemonFormText.setVisible(false); + this.teraIcon.setVisible(false); - const defaultDexAttr = this.scene.gameData.getSpeciesDefaultDexAttr(species, true, true); - const defaultAbilityIndex = this.scene.gameData.getStarterSpeciesDefaultAbilityIndex(species); - const defaultNature = this.scene.gameData.getSpeciesDefaultNature(species); - const props = this.scene.gameData.getSpeciesDexAttrProps(species, defaultDexAttr); + const defaultDexAttr = globalScene.gameData.getSpeciesDefaultDexAttr(species, true, true); + const defaultAbilityIndex = globalScene.gameData.getStarterSpeciesDefaultAbilityIndex(species); + const defaultNature = globalScene.gameData.getSpeciesDefaultNature(species); + const props = globalScene.gameData.getSpeciesDexAttrProps(species, defaultDexAttr); this.setSpeciesDetails(species, { shiny: props.shiny, @@ -2979,6 +3176,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonCaughtHatchedContainer.setVisible(false); this.pokemonCandyContainer.setVisible(false); this.pokemonFormText.setVisible(false); + this.teraIcon.setVisible(false); this.setSpeciesDetails(species!, { // TODO: is this bang correct? shiny: false, @@ -2993,15 +3191,15 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } setSpeciesDetails(species: PokemonSpecies, options: SpeciesDetails = {}): void { - let { shiny, formIndex, female, variant, abilityIndex, natureIndex } = options; + let { shiny, formIndex, female, variant, abilityIndex, natureIndex, teraType } = options; const forSeen: boolean = options.forSeen ?? false; - const oldProps = species ? this.scene.gameData.getSpeciesDexAttrProps(species, this.dexAttrCursor) : null; - const oldAbilityIndex = this.abilityCursor > -1 ? this.abilityCursor : this.scene.gameData.getStarterSpeciesDefaultAbilityIndex(species); - const oldNatureIndex = this.natureCursor > -1 ? this.natureCursor : this.scene.gameData.getSpeciesDefaultNature(species); + const oldProps = species ? globalScene.gameData.getSpeciesDexAttrProps(species, this.dexAttrCursor) : null; + const oldAbilityIndex = this.abilityCursor > -1 ? this.abilityCursor : globalScene.gameData.getStarterSpeciesDefaultAbilityIndex(species); + const oldNatureIndex = this.natureCursor > -1 ? this.natureCursor : globalScene.gameData.getSpeciesDefaultNature(species); this.dexAttrCursor = 0n; this.abilityCursor = -1; this.natureCursor = -1; - + this.teraCursor = Type.UNKNOWN; // We will only update the sprite if there is a change to form, shiny/variant // or gender for species with gender sprite differences const shouldUpdateSprite = (species?.genderDiffs && !isNullOrUndefined(female)) @@ -3010,9 +3208,9 @@ export default class StarterSelectUiHandler extends MessageUiHandler { if (this.activeTooltip === "CANDY") { if (this.lastSpecies && this.pokemonCandyContainer.visible) { const { currentFriendship, friendshipCap } = this.getFriendship(this.lastSpecies.speciesId); - this.scene.ui.editTooltip("", `${currentFriendship}/${friendshipCap}`); + globalScene.ui.editTooltip("", `${currentFriendship}/${friendshipCap}`); } else { - this.scene.ui.hideTooltip(); + globalScene.ui.hideTooltip(); } } @@ -3028,9 +3226,10 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.dexAttrCursor |= (shiny !== undefined ? !shiny : !(shiny = oldProps?.shiny)) ? DexAttr.NON_SHINY : DexAttr.SHINY; this.dexAttrCursor |= (female !== undefined ? !female : !(female = oldProps?.female)) ? DexAttr.MALE : DexAttr.FEMALE; this.dexAttrCursor |= (variant !== undefined ? !variant : !(variant = oldProps?.variant)) ? DexAttr.DEFAULT_VARIANT : variant === 1 ? DexAttr.VARIANT_2 : DexAttr.VARIANT_3; - this.dexAttrCursor |= this.scene.gameData.getFormAttr(formIndex !== undefined ? formIndex : (formIndex = oldProps!.formIndex)); // TODO: is this bang correct? + this.dexAttrCursor |= globalScene.gameData.getFormAttr(formIndex !== undefined ? formIndex : (formIndex = oldProps!.formIndex)); // TODO: is this bang correct? this.abilityCursor = abilityIndex !== undefined ? abilityIndex : (abilityIndex = oldAbilityIndex); this.natureCursor = natureIndex !== undefined ? natureIndex : (natureIndex = oldNatureIndex); + this.teraCursor = !Utils.isNullOrUndefined(teraType) ? teraType : (teraType = species.type1); const [ isInParty, partyIndex ]: [boolean, number] = this.isInParty(species); // we use this to firstly check if the pokemon is in the party, and if so, to get the party index in order to update the icon image if (isInParty) { this.updatePartyIcon(species, partyIndex); @@ -3042,6 +3241,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonPassiveText.setVisible(false); this.pokemonPassiveDisabledIcon.setVisible(false); this.pokemonPassiveLockedIcon.setVisible(false); + this.teraIcon.setVisible(false); if (this.assetLoadCancelled) { this.assetLoadCancelled.value = true; @@ -3052,15 +3252,15 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.speciesStarterMoves = []; if (species) { - const dexEntry = this.scene.gameData.dexData[species.speciesId]; - const abilityAttr = this.scene.gameData.starterData[species.speciesId].abilityAttr; + const dexEntry = globalScene.gameData.dexData[species.speciesId]; + const abilityAttr = globalScene.gameData.starterData[species.speciesId].abilityAttr; - const caughtAttr = this.scene.gameData.dexData[species.speciesId]?.caughtAttr || BigInt(0); + const caughtAttr = globalScene.gameData.dexData[species.speciesId]?.caughtAttr || BigInt(0); if (!dexEntry.caughtAttr) { - const props = this.scene.gameData.getSpeciesDexAttrProps(species, this.getCurrentDexProps(species.speciesId)); - const defaultAbilityIndex = this.scene.gameData.getStarterSpeciesDefaultAbilityIndex(species); - const defaultNature = this.scene.gameData.getSpeciesDefaultNature(species); + const props = globalScene.gameData.getSpeciesDexAttrProps(species, this.getCurrentDexProps(species.speciesId)); + const defaultAbilityIndex = globalScene.gameData.getStarterSpeciesDefaultAbilityIndex(species); + const defaultNature = globalScene.gameData.getSpeciesDefaultNature(species); if (shiny === undefined || shiny !== props.shiny) { shiny = props.shiny; @@ -3093,13 +3293,14 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.starterAttr[starterIndex] = this.dexAttrCursor; this.starterAbilityIndexes[starterIndex] = this.abilityCursor; this.starterNatures[starterIndex] = this.natureCursor; + this.starterTeras[starterIndex] = this.teraCursor; } const assetLoadCancelled = new BooleanHolder(false); this.assetLoadCancelled = assetLoadCancelled; if (shouldUpdateSprite) { - species.loadAssets(this.scene, female!, formIndex, shiny, variant, true).then(() => { // TODO: is this bang correct? + species.loadAssets(female!, formIndex, shiny, variant, true).then(() => { // TODO: is this bang correct? if (assetLoadCancelled.value) { return; } @@ -3116,7 +3317,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } const isValidForChallenge = new BooleanHolder(true); - Challenge.applyChallenges(this.scene.gameMode, Challenge.ChallengeType.STARTER_CHOICE, species, isValidForChallenge, this.scene.gameData.getSpeciesDexAttrProps(species, this.dexAttrCursor), !!this.starterSpecies.length); + Challenge.applyChallenges(globalScene.gameMode, Challenge.ChallengeType.STARTER_CHOICE, species, isValidForChallenge, globalScene.gameData.getSpeciesDexAttrProps(species, this.dexAttrCursor), !!this.starterSpecies.length); const currentFilteredContainer = this.filteredStarterContainers.find(p => p.species.speciesId === species.speciesId); if (currentFilteredContainer) { const starterSprite = currentFilteredContainer.icon as Phaser.GameObjects.Sprite; @@ -3126,12 +3327,9 @@ export default class StarterSelectUiHandler extends MessageUiHandler { const isNonShinyCaught = !!(caughtAttr & DexAttr.NON_SHINY); const isShinyCaught = !!(caughtAttr & DexAttr.SHINY); - const isVariant1Caught = isShinyCaught && !!(caughtAttr & DexAttr.DEFAULT_VARIANT); - const isVariant2Caught = isShinyCaught && !!(caughtAttr & DexAttr.VARIANT_2); - const isVariant3Caught = isShinyCaught && !!(caughtAttr & DexAttr.VARIANT_3); - this.canCycleShiny = isNonShinyCaught && isShinyCaught; - this.canCycleVariant = !!shiny && [ isVariant1Caught, isVariant2Caught, isVariant3Caught ].filter(v => v).length > 1; + const caughtVariants = [ DexAttr.DEFAULT_VARIANT, DexAttr.VARIANT_2, DexAttr.VARIANT_3 ].filter(v => caughtAttr & v); + this.canCycleShiny = (isNonShinyCaught && isShinyCaught) || (isShinyCaught && caughtVariants.length > 1); const isMaleCaught = !!(caughtAttr & DexAttr.MALE); const isFemaleCaught = !!(caughtAttr & DexAttr.FEMALE); @@ -3153,9 +3351,9 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.canCycleAbility = [ hasAbility1, hasAbility2, hasHiddenAbility ].filter(a => a).length > 1; this.canCycleForm = species.forms.filter(f => f.isStarterSelectable || !pokemonFormChanges[species.speciesId]?.find(fc => fc.formKey)) - .map((_, f) => dexEntry.caughtAttr & this.scene.gameData.getFormAttr(f)).filter(f => f).length > 1; - this.canCycleNature = this.scene.gameData.getNaturesForAttr(dexEntry.natureAttr).length > 1; - + .map((_, f) => dexEntry.caughtAttr & globalScene.gameData.getFormAttr(f)).filter(f => f).length > 1; + this.canCycleNature = globalScene.gameData.getNaturesForAttr(dexEntry.natureAttr).length > 1; + this.canCycleTera = !this.statsMode && globalScene.gameData.achvUnlocks.hasOwnProperty(achvs.TERASTALLIZE.id) && !Utils.isNullOrUndefined(getPokemonSpeciesForm(species.speciesId, formIndex ?? 0).type2); } if (dexEntry.caughtAttr && species.malePercent !== null) { @@ -3168,27 +3366,32 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } if (dexEntry.caughtAttr) { - const ability = allAbilities[this.lastSpecies.getAbility(abilityIndex!)]; // TODO: is this bang correct? + let ability: Ability; + if (this.lastSpecies.forms?.length > 1) { + ability = allAbilities[this.lastSpecies.forms[formIndex ?? 0].getAbility(abilityIndex!)]; + } 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)); - const passiveAttr = this.scene.gameData.starterData[species.speciesId].passiveAttr; - const passiveAbility = allAbilities[starterPassiveAbilities[this.lastSpecies.speciesId]]; + const passiveAttr = globalScene.gameData.starterData[species.speciesId].passiveAttr; + const passiveAbility = allAbilities[this.lastSpecies.getPassiveAbility(formIndex)]; if (this.pokemonAbilityText.visible) { if (this.activeTooltip === "ABILITY") { - this.scene.ui.editTooltip(`${ability.name}`, `${ability.description}`); + globalScene.ui.editTooltip(`${ability.name}`, `${ability.description}`); } this.pokemonAbilityText.on("pointerover", () => { - this.scene.ui.showTooltip(`${ability.name}`, `${ability.description}`, true); + globalScene.ui.showTooltip(`${ability.name}`, `${ability.description}`, true); this.activeTooltip = "ABILITY"; }); this.pokemonAbilityText.on("pointerout", () => { - this.scene.ui.hideTooltip(); + globalScene.ui.hideTooltip(); this.activeTooltip = undefined; }); } @@ -3210,16 +3413,16 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonPassiveText.setShadowColor(this.getTextColor(textStyle, true)); if (this.activeTooltip === "PASSIVE") { - this.scene.ui.editTooltip(`${passiveAbility.name}`, `${passiveAbility.description}`); + globalScene.ui.editTooltip(`${passiveAbility.name}`, `${passiveAbility.description}`); } if (this.pokemonPassiveText.visible) { this.pokemonPassiveText.on("pointerover", () => { - this.scene.ui.showTooltip(`${passiveAbility.name}`, `${passiveAbility.description}`, true); + globalScene.ui.showTooltip(`${passiveAbility.name}`, `${passiveAbility.description}`, true); this.activeTooltip = "PASSIVE"; }); this.pokemonPassiveText.on("pointerout", () => { - this.scene.ui.hideTooltip(); + globalScene.ui.hideTooltip(); this.activeTooltip = undefined; }); } @@ -3235,10 +3438,10 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } else if (this.activeTooltip === "PASSIVE") { // No passive and passive tooltip is active > hide it - this.scene.ui.hideTooltip(); + globalScene.ui.hideTooltip(); } - this.pokemonNatureText.setText(getNatureName(natureIndex as unknown as Nature, true, true, false, this.scene.uiTheme)); + this.pokemonNatureText.setText(getNatureName(natureIndex as unknown as Nature, true, true, false, globalScene.uiTheme)); let levelMoves: LevelMoves; if (pokemonFormLevelMoves.hasOwnProperty(species.speciesId) && formIndex && pokemonFormLevelMoves[species.speciesId].hasOwnProperty(formIndex)) { @@ -3249,19 +3452,19 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.speciesStarterMoves.push(...levelMoves.filter(lm => lm[0] > 0 && lm[0] <= 5).map(lm => lm[1])); if (speciesEggMoves.hasOwnProperty(species.speciesId)) { for (let em = 0; em < 4; em++) { - if (this.scene.gameData.starterData[species.speciesId].eggMoves & (1 << em)) { + if (globalScene.gameData.starterData[species.speciesId].eggMoves & (1 << em)) { this.speciesStarterMoves.push(speciesEggMoves[species.speciesId][em]); } } } - const speciesMoveData = this.scene.gameData.starterData[species.speciesId].moveset; + const speciesMoveData = globalScene.gameData.starterData[species.speciesId].moveset; const moveData: StarterMoveset | null = speciesMoveData ? Array.isArray(speciesMoveData) ? speciesMoveData : speciesMoveData[formIndex!] // TODO: is this bang correct? : null; - const availableStarterMoves = this.speciesStarterMoves.concat(speciesEggMoves.hasOwnProperty(species.speciesId) ? speciesEggMoves[species.speciesId].filter((_, em: integer) => this.scene.gameData.starterData[species.speciesId].eggMoves & (1 << em)) : []); + const availableStarterMoves = this.speciesStarterMoves.concat(speciesEggMoves.hasOwnProperty(species.speciesId) ? speciesEggMoves[species.speciesId].filter((_, em: number) => globalScene.gameData.starterData[species.speciesId].eggMoves & (1 << em)) : []); this.starterMoveset = (moveData || (this.speciesStarterMoves.slice(0, 4) as StarterMoveset)).filter(m => availableStarterMoves.find(sm => sm === m)) as StarterMoveset; // Consolidate move data if it contains an incompatible move if (this.starterMoveset.length < 4 && this.starterMoveset.length < availableStarterMoves.length) { @@ -3275,21 +3478,18 @@ export default class StarterSelectUiHandler extends MessageUiHandler { }) as StarterMoveset; const speciesForm = getPokemonSpeciesForm(species.speciesId, formIndex!); // TODO: is the bang correct? - const formText = capitalizeString(species?.forms[formIndex!]?.formKey, "-", false, false); // TODO: is the bang correct? - - const speciesName = capitalizeString(Species[species.speciesId], "_", true, false); - - if (species.speciesId === Species.ARCEUS) { - this.pokemonFormText.setText(i18next.t(`pokemonInfo:Type.${formText?.toUpperCase()}`)); - } else { - this.pokemonFormText.setText(formText ? i18next.t(`pokemonForm:${speciesName}${formText}`) : ""); - } + const formText = species.getFormNameToDisplay(formIndex); + this.pokemonFormText.setText(formText); this.setTypeIcons(speciesForm.type1, speciesForm.type2); + + this.teraIcon.setFrame(Type[this.teraCursor].toLowerCase()); + this.teraIcon.setVisible(!this.statsMode && globalScene.gameData.achvUnlocks.hasOwnProperty(achvs.TERASTALLIZE.id)); } else { this.pokemonAbilityText.setText(""); this.pokemonPassiveText.setText(""); this.pokemonNatureText.setText(""); + this.teraIcon.setVisible(false); this.setTypeIcons(null, null); } } else { @@ -3300,6 +3500,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonAbilityText.setText(""); this.pokemonPassiveText.setText(""); this.pokemonNatureText.setText(""); + this.teraIcon.setVisible(false); this.setTypeIcons(null, null); } @@ -3318,7 +3519,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { for (let em = 0; em < 4; em++) { const eggMove = hasEggMoves ? allMoves[speciesEggMoves[species.speciesId][em]] : null; - const eggMoveUnlocked = eggMove && this.scene.gameData.starterData[species.speciesId].eggMoves & (1 << em); + const eggMoveUnlocked = eggMove && globalScene.gameData.starterData[species.speciesId].eggMoves & (1 << em); this.pokemonEggMoveBgs[em].setFrame(Type[eggMove ? eggMove.type : Type.UNKNOWN].toString().toLowerCase()); this.pokemonEggMoveLabels[em].setText(eggMove && eggMoveUnlocked ? eggMove.name : "???"); } @@ -3353,12 +3554,13 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.starterAttr.splice(index, 1); this.starterAbilityIndexes.splice(index, 1); this.starterNatures.splice(index, 1); + this.starterTeras.splice(index, 1); this.starterMovesets.splice(index, 1); for (let s = 0; s < this.starterSpecies.length; s++) { const species = this.starterSpecies[s]; const currentDexAttr = this.getCurrentDexProps(species.speciesId); - const props = this.scene.gameData.getSpeciesDexAttrProps(species, currentDexAttr); + 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.checkIconId(this.starterIcons[s], species, props.female, props.formIndex, props.shiny, props.variant); @@ -3404,7 +3606,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { updateStarterValueLabel(starter: StarterContainer): void { const speciesId = starter.species.speciesId; const baseStarterValue = speciesStarterCosts[speciesId]; - const starterValue = this.scene.gameData.getSpeciesStarterValue(speciesId); + const starterValue = globalScene.gameData.getSpeciesStarterValue(speciesId); starter.cost = starterValue; let valueStr = starterValue.toString(); if (valueStr.startsWith("0.")) { @@ -3430,8 +3632,8 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } } - tryUpdateValue(add?: integer, addingToParty?: boolean): boolean { - const value = this.starterSpecies.map(s => s.generation).reduce((total: integer, gen: integer, i: integer) => total += this.scene.gameData.getSpeciesStarterValue(this.starterSpecies[i].speciesId), 0); + tryUpdateValue(add?: number, addingToParty?: boolean): boolean { + const value = this.starterSpecies.map(s => s.generation).reduce((total: number, _gen: number, i: number) => total += globalScene.gameData.getSpeciesStarterValue(this.starterSpecies[i].speciesId), 0); const newValue = value + (add || 0); const valueLimit = this.getValueLimit(); const overLimit = newValue > valueLimit; @@ -3443,14 +3645,14 @@ export default class StarterSelectUiHandler extends MessageUiHandler { 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)); if (overLimit) { - this.scene.time.delayedCall(fixedInt(500), () => this.tryUpdateValue()); + globalScene.time.delayedCall(fixedInt(500), () => this.tryUpdateValue()); return false; } let isPartyValid: boolean = this.isPartyValid(); // this checks to see if the party is valid if (addingToParty) { // this does a check to see if the pokemon being added is valid; if so, it will update the isPartyValid boolean const isNewPokemonValid = new BooleanHolder(true); const species = this.filteredStarterContainers[this.cursor].species; - Challenge.applyChallenges(this.scene.gameMode, Challenge.ChallengeType.STARTER_CHOICE, species, isNewPokemonValid, this.scene.gameData.getSpeciesDexAttrProps(species, this.getCurrentDexProps(species.speciesId)), false); + Challenge.applyChallenges(globalScene.gameMode, Challenge.ChallengeType.STARTER_CHOICE, species, isNewPokemonValid, globalScene.gameData.getSpeciesDexAttrProps(species, this.getCurrentDexProps(species.speciesId)), false); isPartyValid = isPartyValid || isNewPokemonValid.value; } @@ -3460,7 +3662,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { const remainValue = valueLimit - newValue; for (let s = 0; s < this.allSpecies.length; s++) { /** Cost of pokemon species */ - const speciesStarterValue = this.scene.gameData.getSpeciesStarterValue(this.allSpecies[s].speciesId); + const speciesStarterValue = globalScene.gameData.getSpeciesStarterValue(this.allSpecies[s].speciesId); /** {@linkcode Phaser.GameObjects.Sprite} object of Pokémon for setting the alpha value */ const speciesSprite = this.starterContainers[s].icon; @@ -3476,7 +3678,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { * we change to can AddParty value to true since the user has enough cost to choose this pokemon and this pokemon registered too. */ const isValidForChallenge = new BooleanHolder(true); - Challenge.applyChallenges(this.scene.gameMode, Challenge.ChallengeType.STARTER_CHOICE, this.allSpecies[s], isValidForChallenge, this.scene.gameData.getSpeciesDexAttrProps(this.allSpecies[s], this.getCurrentDexProps(this.allSpecies[s].speciesId)), isPartyValid); + Challenge.applyChallenges(globalScene.gameMode, Challenge.ChallengeType.STARTER_CHOICE, this.allSpecies[s], isValidForChallenge, globalScene.gameData.getSpeciesDexAttrProps(this.allSpecies[s], this.getCurrentDexProps(this.allSpecies[s].speciesId)), isPartyValid); const canBeChosen = remainValue >= speciesStarterValue && isValidForChallenge.value; @@ -3515,15 +3717,15 @@ export default class StarterSelectUiHandler extends MessageUiHandler { ui.showText(i18next.t("starterSelectUiHandler:confirmExit"), null, () => { ui.setModeWithoutClear(Mode.CONFIRM, () => { ui.setMode(Mode.STARTER_SELECT); - this.scene.clearPhaseQueue(); - if (this.scene.gameMode.isChallenge) { - this.scene.pushPhase(new SelectChallengePhase(this.scene)); - this.scene.pushPhase(new EncounterPhase(this.scene, false)); + globalScene.clearPhaseQueue(); + if (globalScene.gameMode.isChallenge) { + globalScene.pushPhase(new SelectChallengePhase()); + globalScene.pushPhase(new EncounterPhase()); } else { - this.scene.pushPhase(new TitlePhase(this.scene)); + globalScene.pushPhase(new TitlePhase()); } this.clearText(); - this.scene.getCurrentPhase()?.end(); + globalScene.getCurrentPhase()?.end(); }, cancel, null, null, 19); }); @@ -3551,7 +3753,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { ui.showText(i18next.t("starterSelectUiHandler:confirmStartTeam"), null, () => { ui.setModeWithoutClear(Mode.CONFIRM, () => { const startRun = () => { - this.scene.money = this.scene.gameMode.getStartingMoney(); + globalScene.money = globalScene.gameMode.getStartingMoney(); ui.setMode(Mode.STARTER_SELECT); const thisObj = this; const originalStarterSelectCallback = this.starterSelectCallback; @@ -3562,8 +3764,9 @@ export default class StarterSelectUiHandler extends MessageUiHandler { species: starterSpecies, dexAttr: thisObj.starterAttr[i], abilityIndex: thisObj.starterAbilityIndexes[i], - passive: !(thisObj.scene.gameData.starterData[starterSpecies.speciesId].passiveAttr ^ (PassiveAttr.ENABLED | PassiveAttr.UNLOCKED)), + passive: !(globalScene.gameData.starterData[starterSpecies.speciesId].passiveAttr ^ (PassiveAttr.ENABLED | PassiveAttr.UNLOCKED)), nature: thisObj.starterNatures[i] as Nature, + teraType: thisObj.starterTeras[i] as Type, moveset: thisObj.starterMovesets[i], pokerus: thisObj.pokerusSpecies.includes(starterSpecies), nickname: thisObj.starterPreferences[starterSpecies.speciesId]?.nickname, @@ -3588,7 +3791,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { for (let s = 0; s < this.starterSpecies.length; s++) { const isValidForChallenge = new BooleanHolder(true); const species = this.starterSpecies[s]; - Challenge.applyChallenges(this.scene.gameMode, Challenge.ChallengeType.STARTER_CHOICE, species, isValidForChallenge, this.scene.gameData.getSpeciesDexAttrProps(species, this.getCurrentDexProps(species.speciesId)), false); + Challenge.applyChallenges(globalScene.gameMode, Challenge.ChallengeType.STARTER_CHOICE, species, isValidForChallenge, globalScene.gameData.getSpeciesDexAttrProps(species, this.getCurrentDexProps(species.speciesId)), false); canStart = canStart || isValidForChallenge.value; } return canStart; @@ -3603,7 +3806,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { */ getCurrentDexProps(speciesId: number): bigint { let props = 0n; - const caughtAttr = this.scene.gameData.dexData[speciesId].caughtAttr; + const caughtAttr = globalScene.gameData.dexData[speciesId].caughtAttr; /* this checks the gender of the pokemon; this works by checking a) that the starter preferences for the species exist, and if so, is it female. If so, it'll add DexAttr.FEMALE to our temp props * It then checks b) if the caughtAttr for the pokemon is female and NOT male - this means that the ONLY gender we've gotten is female, and we need to add DexAttr.FEMALE to our temp props @@ -3641,7 +3844,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { props += BigInt(Math.pow(2, this.starterPreferences[speciesId]?.form)) * DexAttr.DEFAULT_FORM; } else { // Get the first unlocked form - props += this.scene.gameData.getFormAttr(this.scene.gameData.getFormIndex(caughtAttr)); + props += globalScene.gameData.getFormAttr(globalScene.gameData.getFormIndex(caughtAttr)); } return props; @@ -3655,12 +3858,20 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.showStats(); this.statsMode = true; this.pokemonSprite.setVisible(false); + this.teraIcon.setVisible(false); + this.canCycleTera = false; + this.updateInstructions(); } else { this.statsMode = false; this.statsContainer.setVisible(false); this.pokemonSprite.setVisible(!!this.speciesStarterDexEntry?.caughtAttr); //@ts-ignore this.statsContainer.updateIvs(null); // TODO: resolve ts-ignore. !?!? + this.teraIcon.setVisible(globalScene.gameData.achvUnlocks.hasOwnProperty(achvs.TERASTALLIZE.id)); + const props = globalScene.gameData.getSpeciesDexAttrProps(this.lastSpecies, this.getCurrentDexProps(this.lastSpecies.speciesId)); + const formIndex = props.formIndex; + this.canCycleTera = !this.statsMode && globalScene.gameData.achvUnlocks.hasOwnProperty(achvs.TERASTALLIZE.id) && !Utils.isNullOrUndefined(getPokemonSpeciesForm(this.lastSpecies.speciesId, formIndex ?? 0).type2); + this.updateInstructions(); } } @@ -3690,8 +3901,8 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.abilityLabel.setVisible(false); this.natureIconElement.setVisible(false); this.natureLabel.setVisible(false); - this.variantIconElement.setVisible(false); - this.variantLabel.setVisible(false); + this.teraIconElement.setVisible(false); + this.teraLabel.setVisible(false); this.goFilterIconElement.setVisible(false); this.goFilterLabel.setVisible(false); } @@ -3703,7 +3914,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.cursor = -1; this.hideInstructions(); this.activeTooltip = undefined; - this.scene.ui.hideTooltip(); + globalScene.ui.hideTooltip(); this.starterSelectContainer.setVisible(false); this.blockInput = false; diff --git a/src/ui/stats-container.ts b/src/ui/stats-container.ts index 7e026ede83e..add7eeedbb8 100644 --- a/src/ui/stats-container.ts +++ b/src/ui/stats-container.ts @@ -1,8 +1,8 @@ -import BBCodeText from "phaser3-rex-plugins/plugins/gameobjects/tagtext/bbcodetext/BBCodeText"; -import BattleScene from "../battle-scene"; +import type BBCodeText from "phaser3-rex-plugins/plugins/gameobjects/tagtext/bbcodetext/BBCodeText"; import { TextStyle, addBBCodeTextObject, addTextObject, getTextColor } from "./text"; import { PERMANENT_STATS, getStatKey } from "#app/enums/stat"; import i18next from "i18next"; +import { globalScene } from "#app/global-scene"; const ivChartSize = 24; @@ -17,12 +17,12 @@ const defaultIvChartData = new Array(12).fill(null).map(() => 0); export class StatsContainer extends Phaser.GameObjects.Container { private showDiff: boolean; - private statsIvsCache: integer[]; + private statsIvsCache: number[]; private ivChart: Phaser.GameObjects.Polygon; private ivStatValueTexts: BBCodeText[]; - constructor(scene: BattleScene, x: number, y: number, showDiff?: boolean) { - super(scene, x, y); + constructor(x: number, y: number, showDiff?: boolean) { + super(globalScene, x, y); this.showDiff = !!showDiff; @@ -31,22 +31,22 @@ export class StatsContainer extends Phaser.GameObjects.Container { setup() { this.setName("stats"); - const ivChartBgData = new Array(6).fill(null).map((_, i: integer) => [ ivChartSize * ivChartStatCoordMultipliers[ivChartStatIndexes[i]][0], ivChartSize * ivChartStatCoordMultipliers[ivChartStatIndexes[i]][1] ] ).flat(); - const ivChartBg = this.scene.add.polygon(48, 44, ivChartBgData, 0xd8e0f0, 0.625); + const ivChartBgData = new Array(6).fill(null).map((_, i: number) => [ ivChartSize * ivChartStatCoordMultipliers[ivChartStatIndexes[i]][0], ivChartSize * ivChartStatCoordMultipliers[ivChartStatIndexes[i]][1] ] ).flat(); + const ivChartBg = globalScene.add.polygon(48, 44, ivChartBgData, 0xd8e0f0, 0.625); ivChartBg.setOrigin(0, 0); - const ivChartBorder = this.scene.add.polygon(ivChartBg.x, ivChartBg.y, ivChartBgData) + const ivChartBorder = globalScene.add.polygon(ivChartBg.x, ivChartBg.y, ivChartBgData) .setStrokeStyle(1, 0x484050); ivChartBorder.setOrigin(0, 0); const ivChartBgLines = [[ 0, -1, 0, 1 ], [ -0.825, -0.5, 0.825, 0.5 ], [ 0.825, -0.5, -0.825, 0.5 ]].map(coords => { - const line = new Phaser.GameObjects.Line(this.scene, ivChartBg.x, ivChartBg.y, ivChartSize * coords[0], ivChartSize * coords[1], ivChartSize * coords[2], ivChartSize * coords[3], 0xffffff) + const line = new Phaser.GameObjects.Line(globalScene, ivChartBg.x, ivChartBg.y, ivChartSize * coords[0], ivChartSize * coords[1], ivChartSize * coords[2], ivChartSize * coords[3], 0xffffff) .setLineWidth(0.5); line.setOrigin(0, 0); return line; }); - this.ivChart = this.scene.add.polygon(ivChartBg.x, ivChartBg.y, defaultIvChartData, 0x98d8a0, 0.75); + this.ivChart = globalScene.add.polygon(ivChartBg.x, ivChartBg.y, defaultIvChartData, 0x98d8a0, 0.75); this.ivChart.setOrigin(0, 0); this.add(ivChartBg); @@ -58,7 +58,6 @@ export class StatsContainer extends Phaser.GameObjects.Container { for (const s of PERMANENT_STATS) { const statLabel = addTextObject( - this.scene, ivChartBg.x + (ivChartSize) * ivChartStatCoordMultipliers[s][0] * 1.325 + (this.showDiff ? 0 : ivLabelOffset[s]), ivChartBg.y + (ivChartSize) * ivChartStatCoordMultipliers[s][1] * 1.325 - 4 + (this.showDiff ? 0 : ivChartLabelyOffset[s]), i18next.t(getStatKey(s)), @@ -66,7 +65,7 @@ export class StatsContainer extends Phaser.GameObjects.Container { ); statLabel.setOrigin(0.5); - this.ivStatValueTexts[s] = addBBCodeTextObject(this.scene, statLabel.x - (this.showDiff ? 0 : ivLabelOffset[s]), statLabel.y + 8, "0", TextStyle.TOOLTIP_CONTENT); + this.ivStatValueTexts[s] = addBBCodeTextObject(statLabel.x - (this.showDiff ? 0 : ivLabelOffset[s]), statLabel.y + 8, "0", TextStyle.TOOLTIP_CONTENT); this.ivStatValueTexts[s].setOrigin(0.5); @@ -75,14 +74,14 @@ export class StatsContainer extends Phaser.GameObjects.Container { } } - updateIvs(ivs: integer[], originalIvs?: integer[]): void { + updateIvs(ivs: number[], originalIvs?: number[]): void { if (ivs) { const ivChartData = new Array(6).fill(null).map((_, i) => [ (ivs[ivChartStatIndexes[i]] / 31) * ivChartSize * ivChartStatCoordMultipliers[ivChartStatIndexes[i]][0], (ivs[ivChartStatIndexes[i]] / 31) * ivChartSize * ivChartStatCoordMultipliers[ivChartStatIndexes[i]][1] ] ).flat(); const lastIvChartData = this.statsIvsCache || defaultIvChartData; - const perfectIVColor: string = getTextColor(TextStyle.SUMMARY_GOLD, false, (this.scene as BattleScene).uiTheme); + const perfectIVColor: string = getTextColor(TextStyle.SUMMARY_GOLD, false, globalScene.uiTheme); this.statsIvsCache = ivChartData.slice(0); - this.ivStatValueTexts.map((t: BBCodeText, i: integer) => { + this.ivStatValueTexts.map((t: BBCodeText, i: number) => { let label = ""; // Check to see if IVs are 31, if so change the text style to gold, otherwise leave them be. @@ -93,7 +92,7 @@ export class StatsContainer extends Phaser.GameObjects.Container { } if (this.showDiff && originalIvs) { if (originalIvs[i] < ivs[i]) { - label += ` ([color=${getTextColor(TextStyle.SUMMARY_BLUE, false, (this.scene as BattleScene).uiTheme)}][shadow=${getTextColor(TextStyle.SUMMARY_BLUE, true, (this.scene as BattleScene).uiTheme)}]+${ivs[i] - originalIvs[i]}[/shadow][/color])`; + label += ` ([color=${getTextColor(TextStyle.SUMMARY_BLUE, false, globalScene.uiTheme)}][shadow=${getTextColor(TextStyle.SUMMARY_BLUE, true, globalScene.uiTheme)}]+${ivs[i] - originalIvs[i]}[/shadow][/color])`; } else { label += " (-)"; } @@ -108,14 +107,14 @@ export class StatsContainer extends Phaser.GameObjects.Container { Phaser.Display.Color.IntegerToColor(newColor) ] : null; - this.scene.tweens.addCounter({ + globalScene.tweens.addCounter({ from: 0, to: 1, duration: 1000, ease: "Cubic.easeOut", onUpdate: (tween: Phaser.Tweens.Tween) => { const progress = tween.getValue(); - const interpolatedData = ivChartData.map((v: number, i: integer) => v * progress + (lastIvChartData[i] * (1 - progress))); + const interpolatedData = ivChartData.map((v: number, i: number) => v * progress + (lastIvChartData[i] * (1 - progress))); if (interpolateColor) { this.ivChart.setFillStyle( Phaser.Display.Color.ValueToColor( diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index 63ef6155fbc..31dee6bb46c 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -1,14 +1,16 @@ -import BattleScene, { starterColors } from "#app/battle-scene"; +import { starterColors } from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { Mode } from "#app/ui/ui"; import UiHandler from "#app/ui/ui-handler"; import * as Utils from "#app/utils"; -import { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; +import type { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; import { getStarterValueFriendshipCap, speciesStarterCosts } from "#app/data/balance/starters"; import { argbFromRgba } from "@material/material-color-utilities"; import { getTypeRgb } from "#app/data/type"; import { Type } from "#enums/type"; import { TextStyle, addBBCodeTextObject, addTextObject, getBBCodeFrag } from "#app/ui/text"; -import Move, { MoveCategory } from "#app/data/move"; +import type Move from "#app/data/move"; +import { MoveCategory } from "#app/data/move"; import { getPokeballAtlasKey } from "#app/data/pokeball"; import { getGenderColor, getGenderSymbol } from "#app/data/gender"; import { getLevelRelExp, getLevelTotalExp } from "#app/data/exp"; @@ -17,14 +19,16 @@ import { StatusEffect } from "#enums/status-effect"; import { getBiomeName } from "#app/data/balance/biomes"; import { getNatureName, getNatureStatMultiplier } from "#app/data/nature"; import { loggedInUser } from "#app/account"; -import { Variant, getVariantTint } from "#app/data/variant"; +import type { Variant } from "#app/data/variant"; +import { getVariantTint } from "#app/data/variant"; import { Button } from "#enums/buttons"; -import { Ability } from "#app/data/ability"; +import type { Ability } from "#app/data/ability"; import i18next from "i18next"; import { modifierSortFunc } from "#app/modifier/modifier"; import { PlayerGender } from "#enums/player-gender"; import { Stat, PERMANENT_STATS, getStatKey } from "#enums/stat"; import { Nature } from "#enums/nature"; +import { achvs } from "#app/system/achv"; enum Page { PROFILE, @@ -93,6 +97,9 @@ export default class SummaryUiHandler extends UiHandler { private friendshipText: Phaser.GameObjects.Text; private friendshipIcon: Phaser.GameObjects.Sprite; private friendshipOverlay: Phaser.GameObjects.Sprite; + private permStatsContainer: Phaser.GameObjects.Container; + private ivContainer: Phaser.GameObjects.Container; + private statsContainer: Phaser.GameObjects.Container; private descriptionScrollTween: Phaser.Tweens.Tween | null; private moveCursorBlinkTimer: Phaser.Time.TimerEvent | null; @@ -107,186 +114,186 @@ export default class SummaryUiHandler extends UiHandler { private moveEffectsVisible: boolean; private moveSelect: boolean; - private moveCursor: integer; - private selectedMoveIndex: integer; + private moveCursor: number; + private selectedMoveIndex: number; private selectCallback: Function | null; - constructor(scene: BattleScene) { - super(scene, Mode.SUMMARY); + constructor() { + super(Mode.SUMMARY); } setup() { const ui = this.getUi(); - this.summaryContainer = this.scene.add.container(0, 0); + this.summaryContainer = globalScene.add.container(0, 0); this.summaryContainer.setVisible(false); ui.add(this.summaryContainer); - const summaryBg = this.scene.add.image(0, 0, "summary_bg"); + const summaryBg = globalScene.add.image(0, 0, "summary_bg"); summaryBg.setOrigin(0, 1); this.summaryContainer.add(summaryBg); - this.tabSprite = this.scene.add.sprite(134, (-summaryBg.displayHeight) + 16, "summary_tabs_1"); + this.tabSprite = globalScene.add.sprite(134, (-summaryBg.displayHeight) + 16, "summary_tabs_1"); this.tabSprite.setOrigin(1, 1); this.summaryContainer.add(this.tabSprite); - const summaryLabel = addTextObject(this.scene, 4, -165, i18next.t("pokemonSummary:pokemonInfo"), TextStyle.SUMMARY); + const summaryLabel = addTextObject(4, -165, i18next.t("pokemonSummary:pokemonInfo"), TextStyle.SUMMARY); summaryLabel.setOrigin(0, 1); this.summaryContainer.add(summaryLabel); - this.shinyOverlay = this.scene.add.image(6, -54, "summary_overlay_shiny"); + this.shinyOverlay = globalScene.add.image(6, -54, "summary_overlay_shiny"); this.shinyOverlay.setOrigin(0, 1); this.shinyOverlay.setVisible(false); this.summaryContainer.add(this.shinyOverlay); - this.numberText = addTextObject(this.scene, 17, -149, "0000", TextStyle.SUMMARY); + this.numberText = addTextObject(17, -149, "0000", TextStyle.SUMMARY); this.numberText.setOrigin(0, 1); this.summaryContainer.add(this.numberText); - this.pokemonSprite = this.scene.initPokemonSprite(this.scene.add.sprite(56, -106, "pkmn__sub"), undefined, false, true); + this.pokemonSprite = globalScene.initPokemonSprite(globalScene.add.sprite(56, -106, "pkmn__sub"), undefined, false, true); this.summaryContainer.add(this.pokemonSprite); - this.nameText = addTextObject(this.scene, 6, -54, "", TextStyle.SUMMARY); + this.nameText = addTextObject(6, -54, "", TextStyle.SUMMARY); this.nameText.setOrigin(0, 0); this.summaryContainer.add(this.nameText); - this.splicedIcon = this.scene.add.sprite(0, -54, "icon_spliced"); + this.splicedIcon = globalScene.add.sprite(0, -54, "icon_spliced"); this.splicedIcon.setVisible(false); this.splicedIcon.setOrigin(0, 0); this.splicedIcon.setScale(0.75); this.splicedIcon.setInteractive(new Phaser.Geom.Rectangle(0, 0, 12, 15), Phaser.Geom.Rectangle.Contains); this.summaryContainer.add(this.splicedIcon); - this.shinyIcon = this.scene.add.image(0, -54, "shiny_star"); + this.shinyIcon = globalScene.add.image(0, -54, "shiny_star"); this.shinyIcon.setVisible(false); this.shinyIcon.setOrigin(0, 0); this.shinyIcon.setScale(0.75); this.shinyIcon.setInteractive(new Phaser.Geom.Rectangle(0, 0, 12, 15), Phaser.Geom.Rectangle.Contains); this.summaryContainer.add(this.shinyIcon); - this.fusionShinyIcon = this.scene.add.image(0, 0, "shiny_star_2"); + this.fusionShinyIcon = globalScene.add.image(0, 0, "shiny_star_2"); this.fusionShinyIcon.setVisible(false); this.fusionShinyIcon.setOrigin(0, 0); this.fusionShinyIcon.setScale(0.75); this.summaryContainer.add(this.fusionShinyIcon); - this.pokeball = this.scene.add.sprite(6, -19, "pb"); + this.pokeball = globalScene.add.sprite(6, -19, "pb"); this.pokeball.setOrigin(0, 1); this.summaryContainer.add(this.pokeball); - this.candyIcon = this.scene.add.sprite(13, -140, "candy"); + this.candyIcon = globalScene.add.sprite(13, -140, "candy"); this.candyIcon.setScale(0.8); this.summaryContainer.add(this.candyIcon); - this.candyOverlay = this.scene.add.sprite(13, -140, "candy_overlay"); + this.candyOverlay = globalScene.add.sprite(13, -140, "candy_overlay"); this.candyOverlay.setScale(0.8); this.summaryContainer.add(this.candyOverlay); - this.candyShadow = this.scene.add.sprite(13, -140, "candy"); + this.candyShadow = globalScene.add.sprite(13, -140, "candy"); this.candyShadow.setTint(0x000000); this.candyShadow.setAlpha(0.50); this.candyShadow.setScale(0.8); this.candyShadow.setInteractive(new Phaser.Geom.Rectangle(0, 0, 30, 16), Phaser.Geom.Rectangle.Contains); this.summaryContainer.add(this.candyShadow); - this.candyCountText = addTextObject(this.scene, 20, -146, "x0", TextStyle.WINDOW_ALT, { fontSize: "76px" }); + this.candyCountText = addTextObject(20, -146, "x0", TextStyle.WINDOW_ALT, { fontSize: "76px" }); this.candyCountText.setOrigin(0, 0); this.summaryContainer.add(this.candyCountText); - this.friendshipIcon = this.scene.add.sprite(13, -60, "friendship"); + this.friendshipIcon = globalScene.add.sprite(13, -60, "friendship"); this.friendshipIcon.setScale(0.8); this.summaryContainer.add(this.friendshipIcon); - this.friendshipOverlay = this.scene.add.sprite(13, -60, "friendship_overlay"); + this.friendshipOverlay = globalScene.add.sprite(13, -60, "friendship_overlay"); this.friendshipOverlay.setScale(0.8); this.summaryContainer.add(this.friendshipOverlay); - this.friendshipShadow = this.scene.add.sprite(13, -60, "friendship"); + this.friendshipShadow = globalScene.add.sprite(13, -60, "friendship"); this.friendshipShadow.setTint(0x000000); this.friendshipShadow.setAlpha(0.50); this.friendshipShadow.setScale(0.8); this.friendshipShadow.setInteractive(new Phaser.Geom.Rectangle(0, 0, 50, 16), Phaser.Geom.Rectangle.Contains); this.summaryContainer.add(this.friendshipShadow); - this.friendshipText = addTextObject(this.scene, 20, -66, "x0", TextStyle.WINDOW_ALT, { fontSize: "76px" }); + this.friendshipText = addTextObject(20, -66, "x0", TextStyle.WINDOW_ALT, { fontSize: "76px" }); this.friendshipText.setOrigin(0, 0); this.summaryContainer.add(this.friendshipText); - this.championRibbon = this.scene.add.image(88, -146, "champion_ribbon"); + this.championRibbon = globalScene.add.image(88, -146, "champion_ribbon"); this.championRibbon.setOrigin(0, 0); //this.championRibbon.setScale(0.8); this.championRibbon.setScale(1.25); this.summaryContainer.add(this.championRibbon); this.championRibbon.setVisible(false); - this.levelText = addTextObject(this.scene, 36, -17, "", TextStyle.SUMMARY_ALT); + this.levelText = addTextObject(24, -17, "", TextStyle.SUMMARY_ALT); this.levelText.setOrigin(0, 1); this.summaryContainer.add(this.levelText); - this.genderText = addTextObject(this.scene, 96, -17, "", TextStyle.SUMMARY); + this.genderText = addTextObject(96, -17, "", TextStyle.SUMMARY); this.genderText.setOrigin(0, 1); this.summaryContainer.add(this.genderText); - this.statusContainer = this.scene.add.container(-106, -16); + this.statusContainer = globalScene.add.container(-106, -16); - const statusBg = this.scene.add.image(0, 0, "summary_status"); + const statusBg = globalScene.add.image(0, 0, "summary_status"); statusBg.setOrigin(0, 0); this.statusContainer.add(statusBg); - const statusLabel = addTextObject(this.scene, 3, 0, i18next.t("pokemonSummary:status"), TextStyle.SUMMARY); + const statusLabel = addTextObject(3, 0, i18next.t("pokemonSummary:status"), TextStyle.SUMMARY); statusLabel.setOrigin(0, 0); this.statusContainer.add(statusLabel); - this.status = this.scene.add.sprite(91, 4, Utils.getLocalizedSpriteKey("statuses")); + this.status = globalScene.add.sprite(91, 4, Utils.getLocalizedSpriteKey("statuses")); this.status.setOrigin(0.5, 0); this.statusContainer.add(this.status); this.summaryContainer.add(this.statusContainer); - this.moveEffectContainer = this.scene.add.container(106, -62); + this.moveEffectContainer = globalScene.add.container(106, -62); this.summaryContainer.add(this.moveEffectContainer); - const moveEffectBg = this.scene.add.image(0, 0, "summary_moves_effect"); + const moveEffectBg = globalScene.add.image(0, 0, "summary_moves_effect"); moveEffectBg.setOrigin(0, 0); this.moveEffectContainer.add(moveEffectBg); - const moveEffectLabels = addTextObject(this.scene, 8, 12, i18next.t("pokemonSummary:powerAccuracyCategory"), TextStyle.SUMMARY); + const moveEffectLabels = addTextObject(8, 12, i18next.t("pokemonSummary:powerAccuracyCategory"), TextStyle.SUMMARY); moveEffectLabels.setLineSpacing(9); moveEffectLabels.setOrigin(0, 0); this.moveEffectContainer.add(moveEffectLabels); - this.movePowerText = addTextObject(this.scene, 99, 27, "0", TextStyle.WINDOW_ALT); + this.movePowerText = addTextObject(99, 27, "0", TextStyle.WINDOW_ALT); this.movePowerText.setOrigin(1, 1); this.moveEffectContainer.add(this.movePowerText); - this.moveAccuracyText = addTextObject(this.scene, 99, 43, "0", TextStyle.WINDOW_ALT); + this.moveAccuracyText = addTextObject(99, 43, "0", TextStyle.WINDOW_ALT); this.moveAccuracyText.setOrigin(1, 1); this.moveEffectContainer.add(this.moveAccuracyText); - this.moveCategoryIcon = this.scene.add.sprite(99, 57, "categories"); + this.moveCategoryIcon = globalScene.add.sprite(99, 57, "categories"); this.moveCategoryIcon.setOrigin(1, 1); this.moveEffectContainer.add(this.moveCategoryIcon); const getSummaryPageBg = () => { - const ret = this.scene.add.sprite(0, 0, this.getPageKey(0)); + const ret = globalScene.add.sprite(0, 0, this.getPageKey(0)); ret.setOrigin(0, 1); return ret; }; - this.summaryContainer.add((this.summaryPageContainer = this.scene.add.container(106, 0))); + this.summaryContainer.add((this.summaryPageContainer = globalScene.add.container(106, 0))); this.summaryPageContainer.add(getSummaryPageBg()); this.summaryPageContainer.setVisible(false); - this.summaryContainer.add((this.summaryPageTransitionContainer = this.scene.add.container(106, 0))); + this.summaryContainer.add((this.summaryPageTransitionContainer = globalScene.add.container(106, 0))); this.summaryPageTransitionContainer.add(getSummaryPageBg()); this.summaryPageTransitionContainer.setVisible(false); } - getPageKey(page?: integer) { + getPageKey(page?: number) { if (page === undefined) { page = this.cursor; } @@ -306,7 +313,7 @@ export default class SummaryUiHandler extends UiHandler { this.pokemon = args[0] as PlayerPokemon; this.summaryUiMode = args.length > 1 ? args[1] as SummaryUiMode : SummaryUiMode.DEFAULT; this.playerParty = args[4] ?? true; - this.scene.ui.bringToTop(this.summaryContainer); + globalScene.ui.bringToTop(this.summaryContainer); this.summaryContainer.setVisible(true); this.cursor = -1; @@ -328,6 +335,7 @@ export default class SummaryUiHandler extends UiHandler { console.error(`Failed to play animation for ${spriteKey}`, err); } this.pokemonSprite.setPipelineData("teraColor", getTypeRgb(this.pokemon.getTeraType())); + this.pokemonSprite.setPipelineData("isTerastallized", this.pokemon.isTerastallized); this.pokemonSprite.setPipelineData("ignoreTimeTint", true); this.pokemonSprite.setPipelineData("spriteKey", this.pokemon.getSpriteKey()); this.pokemonSprite.setPipelineData("shiny", this.pokemon.shiny); @@ -348,17 +356,17 @@ export default class SummaryUiHandler extends UiHandler { this.splicedIcon.setPositionRelative(this.nameText, this.nameText.displayWidth + 2, 3); this.splicedIcon.setVisible(isFusion); if (this.splicedIcon.visible) { - this.splicedIcon.on("pointerover", () => (this.scene as BattleScene).ui.showTooltip("", `${this.pokemon?.species.getName(this.pokemon.formIndex)}/${this.pokemon?.fusionSpecies?.getName(this.pokemon?.fusionFormIndex)}`, true)); - this.splicedIcon.on("pointerout", () => (this.scene as BattleScene).ui.hideTooltip()); + this.splicedIcon.on("pointerover", () => globalScene.ui.showTooltip("", `${this.pokemon?.species.getName(this.pokemon.formIndex)}/${this.pokemon?.fusionSpecies?.getName(this.pokemon?.fusionFormIndex)}`, true)); + this.splicedIcon.on("pointerout", () => globalScene.ui.hideTooltip()); } - if (this.scene.gameData.starterData[this.pokemon.species.getRootSpeciesId()].classicWinCount > 0 && this.scene.gameData.starterData[this.pokemon.species.getRootSpeciesId(true)].classicWinCount > 0) { + if (globalScene.gameData.starterData[this.pokemon.species.getRootSpeciesId()].classicWinCount > 0 && globalScene.gameData.starterData[this.pokemon.species.getRootSpeciesId(true)].classicWinCount > 0) { this.championRibbon.setVisible(true); } else { this.championRibbon.setVisible(false); } - let currentFriendship = this.scene.gameData.starterData[this.pokemon.species.getRootSpeciesId()].friendship; + let currentFriendship = globalScene.gameData.starterData[this.pokemon.species.getRootSpeciesId()].friendship; if (!currentFriendship || currentFriendship === undefined) { currentFriendship = 0; } @@ -367,17 +375,17 @@ export default class SummaryUiHandler extends UiHandler { const candyCropY = 16 - (16 * (currentFriendship / friendshipCap)); if (this.candyShadow.visible) { - this.candyShadow.on("pointerover", () => (this.scene as BattleScene).ui.showTooltip("", `${currentFriendship}/${friendshipCap}`, true)); - this.candyShadow.on("pointerout", () => (this.scene as BattleScene).ui.hideTooltip()); + this.candyShadow.on("pointerover", () => globalScene.ui.showTooltip("", `${currentFriendship}/${friendshipCap}`, true)); + this.candyShadow.on("pointerout", () => globalScene.ui.hideTooltip()); } - this.candyCountText.setText(`x${this.scene.gameData.starterData[this.pokemon.species.getRootSpeciesId()].candyCount}`); + this.candyCountText.setText(`x${globalScene.gameData.starterData[this.pokemon.species.getRootSpeciesId()].candyCount}`); this.candyShadow.setCrop(0, 0, 16, candyCropY); if (this.friendshipShadow.visible) { - this.friendshipShadow.on("pointerover", () => this.scene.ui.showTooltip("", `${i18next.t("pokemonSummary:friendship")}`, true)); - this.friendshipShadow.on("pointerout", () => this.scene.ui.hideTooltip()); + this.friendshipShadow.on("pointerover", () => globalScene.ui.showTooltip("", `${i18next.t("pokemonSummary:friendship")}`, true)); + this.friendshipShadow.on("pointerout", () => globalScene.ui.hideTooltip()); } this.friendshipText.setText(`${this.pokemon?.friendship || "0"} / 255`); @@ -395,8 +403,8 @@ export default class SummaryUiHandler extends UiHandler { const shinyDescriptor = doubleShiny || baseVariant ? `${baseVariant === 2 ? i18next.t("common:epicShiny") : baseVariant === 1 ? i18next.t("common:rareShiny") : i18next.t("common:commonShiny")}${doubleShiny ? `/${this.pokemon.fusionVariant === 2 ? i18next.t("common:epicShiny") : this.pokemon.fusionVariant === 1 ? i18next.t("common:rareShiny") : i18next.t("common:commonShiny")}` : ""}` : ""; - this.shinyIcon.on("pointerover", () => (this.scene as BattleScene).ui.showTooltip("", `${i18next.t("common:shinyOnHover")}${shinyDescriptor ? ` (${shinyDescriptor})` : ""}`, true)); - this.shinyIcon.on("pointerout", () => (this.scene as BattleScene).ui.hideTooltip()); + this.shinyIcon.on("pointerover", () => globalScene.ui.showTooltip("", `${i18next.t("common:shinyOnHover")}${shinyDescriptor ? ` (${shinyDescriptor})` : ""}`, true)); + this.shinyIcon.on("pointerout", () => globalScene.ui.hideTooltip()); } this.fusionShinyIcon.setPosition(this.shinyIcon.x, this.shinyIcon.y); @@ -406,7 +414,7 @@ export default class SummaryUiHandler extends UiHandler { } this.pokeball.setFrame(getPokeballAtlasKey(this.pokemon.pokeball)); - this.levelText.setText(this.pokemon.level.toString()); + this.levelText.setText(`${i18next.t("pokemonSummary:lv")}${this.pokemon.level.toString()}`); this.genderText.setText(getGenderSymbol(this.pokemon.getGender(true))); this.genderText.setColor(getGenderColor(this.pokemon.getGender(true))); this.genderText.setShadowColor(getGenderColor(this.pokemon.getGender(true), true)); @@ -531,6 +539,10 @@ export default class SummaryUiHandler extends UiHandler { this.passiveContainer.nameText?.setVisible(!this.passiveContainer.descriptionText?.visible); this.passiveContainer.descriptionText?.setVisible(!this.passiveContainer.descriptionText.visible); this.passiveContainer.labelImage.setVisible(!this.passiveContainer.labelImage.visible); + } else if (this.cursor === Page.STATS) { + //Show IVs + this.permStatsContainer.setVisible(!this.permStatsContainer.visible); + this.ivContainer.setVisible(!this.ivContainer.visible); } } else if (button === Button.CANCEL) { if (this.summaryUiMode === SummaryUiMode.LEARN_MOVE) { @@ -560,7 +572,7 @@ export default class SummaryUiHandler extends UiHandler { break; } const isDown = button === Button.DOWN; - const party = this.scene.getPlayerParty(); + const party = globalScene.getPlayerParty(); const partyMemberIndex = this.pokemon ? party.indexOf(this.pokemon) : -1; if ((isDown && partyMemberIndex < party.length - 1) || (!isDown && partyMemberIndex)) { const page = this.cursor; @@ -594,7 +606,7 @@ export default class SummaryUiHandler extends UiHandler { return success || error; } - setCursor(cursor: integer, overrideChanged: boolean = false): boolean { + setCursor(cursor: number, overrideChanged: boolean = false): boolean { let changed: boolean = overrideChanged || this.moveCursor !== cursor; if (this.moveSelect) { @@ -621,7 +633,7 @@ export default class SummaryUiHandler extends UiHandler { } if (moveDescriptionLineCount > 3) { - this.descriptionScrollTween = this.scene.tweens.add({ + this.descriptionScrollTween = globalScene.tweens.add({ targets: this.moveDescriptionText, delay: Utils.fixedInt(2000), loop: -1, @@ -632,7 +644,7 @@ export default class SummaryUiHandler extends UiHandler { } if (!this.moveCursorObj) { - this.moveCursorObj = this.scene.add.sprite(-2, 0, "summary_moves_cursor", "highlight"); + this.moveCursorObj = globalScene.add.sprite(-2, 0, "summary_moves_cursor", "highlight"); this.moveCursorObj.setOrigin(0, 1); this.movesContainer.add(this.moveCursorObj); } @@ -643,12 +655,12 @@ export default class SummaryUiHandler extends UiHandler { this.moveCursorBlinkTimer.destroy(); } this.moveCursorObj.setVisible(true); - this.moveCursorBlinkTimer = this.scene.time.addEvent({ + this.moveCursorBlinkTimer = globalScene.time.addEvent({ loop: true, delay: Utils.fixedInt(600), callback: () => { this.moveCursorObj?.setVisible(false); - this.scene.time.delayedCall(Utils.fixedInt(100), () => { + globalScene.time.delayedCall(Utils.fixedInt(100), () => { if (!this.moveCursorObj) { return; } @@ -658,7 +670,7 @@ export default class SummaryUiHandler extends UiHandler { }); if (this.selectedMoveIndex > -1) { if (!this.selectedMoveCursorObj) { - this.selectedMoveCursorObj = this.scene.add.sprite(-2, 0, "summary_moves_cursor", "select"); + this.selectedMoveCursorObj = globalScene.add.sprite(-2, 0, "summary_moves_cursor", "select"); this.selectedMoveCursorObj.setOrigin(0, 1); this.movesContainer.add(this.selectedMoveCursorObj); this.movesContainer.moveBelow(this.selectedMoveCursorObj, this.moveCursorObj); @@ -684,7 +696,7 @@ export default class SummaryUiHandler extends UiHandler { } else { this.populatePageContainer(this.summaryPageContainer); } - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.summaryPageTransitionContainer, x: forward ? "-=214" : "+=214", duration: 250, @@ -737,27 +749,27 @@ export default class SummaryUiHandler extends UiHandler { switch (page) { case Page.PROFILE: - const profileContainer = this.scene.add.container(0, -pageBg.height); + const profileContainer = globalScene.add.container(0, -pageBg.height); pageContainer.add(profileContainer); // TODO: should add field for original trainer name to Pokemon object, to support gift/traded Pokemon from MEs - const trainerText = addBBCodeTextObject(this.scene, 7, 12, `${i18next.t("pokemonSummary:ot")}/${getBBCodeFrag(loggedInUser?.username || i18next.t("pokemonSummary:unknown"), this.scene.gameData.gender === PlayerGender.FEMALE ? TextStyle.SUMMARY_PINK : TextStyle.SUMMARY_BLUE)}`, TextStyle.SUMMARY_ALT); + const trainerText = addBBCodeTextObject(7, 12, `${i18next.t("pokemonSummary:ot")}/${getBBCodeFrag(loggedInUser?.username || i18next.t("pokemonSummary:unknown"), globalScene.gameData.gender === PlayerGender.FEMALE ? TextStyle.SUMMARY_PINK : TextStyle.SUMMARY_BLUE)}`, TextStyle.SUMMARY_ALT); trainerText.setOrigin(0, 0); profileContainer.add(trainerText); - const trainerIdText = addTextObject(this.scene, 174, 12, this.scene.gameData.trainerId.toString(), TextStyle.SUMMARY_ALT); + const trainerIdText = addTextObject(141, 12, `${i18next.t("pokemonSummary:idNo")}${globalScene.gameData.trainerId.toString()}`, TextStyle.SUMMARY_ALT); trainerIdText.setOrigin(0, 0); profileContainer.add(trainerIdText); - const typeLabel = addTextObject(this.scene, 7, 28, `${i18next.t("pokemonSummary:type")}/`, TextStyle.WINDOW_ALT); + const typeLabel = addTextObject(7, 28, `${i18next.t("pokemonSummary:type")}/`, TextStyle.WINDOW_ALT); typeLabel.setOrigin(0, 0); profileContainer.add(typeLabel); - const getTypeIcon = (index: integer, type: Type, tera: boolean = false) => { + const getTypeIcon = (index: number, type: Type, tera: boolean = false) => { const xCoord = typeLabel.width * typeLabel.scale + 9 + 34 * index; const typeIcon = !tera - ? this.scene.add.sprite(xCoord, 42, Utils.getLocalizedSpriteKey("types"), Type[type].toLowerCase()) - : this.scene.add.sprite(xCoord, 42, "type_tera"); + ? globalScene.add.sprite(xCoord, 42, Utils.getLocalizedSpriteKey("types"), Type[type].toLowerCase()) + : globalScene.add.sprite(xCoord, 42, "type_tera"); if (tera) { typeIcon.setScale(0.5); const typeRgb = getTypeRgb(type); @@ -772,23 +784,27 @@ export default class SummaryUiHandler extends UiHandler { if (types.length > 1) { profileContainer.add(getTypeIcon(1, types[1])); } - if (this.pokemon?.isTerastallized()) { - profileContainer.add(getTypeIcon(types.length, this.pokemon.getTeraType(), true)); - } if (this.pokemon?.getLuck()) { - const luckLabelText = addTextObject(this.scene, 141, 28, i18next.t("common:luckIndicator"), TextStyle.SUMMARY_ALT); + const luckLabelText = addTextObject(141, 28, i18next.t("common:luckIndicator"), TextStyle.SUMMARY_ALT); luckLabelText.setOrigin(0, 0); profileContainer.add(luckLabelText); - const luckText = addTextObject(this.scene, 141 + luckLabelText.displayWidth + 2, 28, this.pokemon.getLuck().toString(), TextStyle.SUMMARY); + const luckText = addTextObject(141 + luckLabelText.displayWidth + 2, 28, this.pokemon.getLuck().toString(), TextStyle.SUMMARY); luckText.setOrigin(0, 0); luckText.setTint(getVariantTint((Math.min(this.pokemon.getLuck() - 1, 2)) as Variant)); profileContainer.add(luckText); } + if (globalScene.gameData.achvUnlocks.hasOwnProperty(achvs.TERASTALLIZE.id) && !Utils.isNullOrUndefined(this.pokemon)) { + const teraIcon = globalScene.add.sprite(123, 26, "button_tera"); + teraIcon.setName("terrastallize-icon"); + teraIcon.setFrame(Type[this.pokemon.getTeraType()].toLowerCase()); + profileContainer.add(teraIcon); + } + this.abilityContainer = { - labelImage: this.scene.add.image(0, 0, "summary_profile_ability"), + labelImage: globalScene.add.image(0, 0, "summary_profile_ability"), ability: this.pokemon?.getAbility(true)!, // TODO: is this bang correct? nameText: null, descriptionText: null }; @@ -797,14 +813,14 @@ export default class SummaryUiHandler extends UiHandler { // Only add to the array and set up displaying a passive if it's unlocked if (this.pokemon?.hasPassive()) { this.passiveContainer = { - labelImage: this.scene.add.image(0, 0, "summary_profile_passive"), + labelImage: globalScene.add.image(0, 0, "summary_profile_passive"), ability: this.pokemon.getPassiveAbility(), nameText: null, descriptionText: null }; allAbilityInfo.push(this.passiveContainer); // Sets up the pixel button prompt image - this.abilityPrompt = this.scene.add.image(0, 0, !this.scene.inputController?.gamepadSupport ? "summary_profile_prompt_z" : "summary_profile_prompt_a"); + this.abilityPrompt = globalScene.add.image(0, 0, !globalScene.inputController?.gamepadSupport ? "summary_profile_prompt_z" : "summary_profile_prompt_a"); this.abilityPrompt.setPosition(8, 43); this.abilityPrompt.setVisible(true); this.abilityPrompt.setOrigin(0, 0); @@ -817,16 +833,16 @@ export default class SummaryUiHandler extends UiHandler { abilityInfo.labelImage.setOrigin(0, 0); profileContainer.add(abilityInfo.labelImage); - abilityInfo.nameText = addTextObject(this.scene, 7, 66, abilityInfo.ability?.name!, TextStyle.SUMMARY_ALT); // TODO: is this bang correct? + abilityInfo.nameText = addTextObject(7, 66, abilityInfo.ability?.name!, TextStyle.SUMMARY_ALT); // TODO: is this bang correct? abilityInfo.nameText.setOrigin(0, 1); profileContainer.add(abilityInfo.nameText); - abilityInfo.descriptionText = addTextObject(this.scene, 7, 69, abilityInfo.ability?.description!, TextStyle.WINDOW_ALT, { wordWrap: { width: 1224 }}); // TODO: is this bang correct? + abilityInfo.descriptionText = addTextObject(7, 69, abilityInfo.ability?.description!, TextStyle.WINDOW_ALT, { wordWrap: { width: 1224 }}); // TODO: is this bang correct? abilityInfo.descriptionText.setOrigin(0, 0); profileContainer.add(abilityInfo.descriptionText); // Sets up the mask that hides the description text to give an illusion of scrolling - const descriptionTextMaskRect = this.scene.make.graphics({}); + const descriptionTextMaskRect = globalScene.make.graphics({}); descriptionTextMaskRect.setScale(6); descriptionTextMaskRect.fillStyle(0xFFFFFF); descriptionTextMaskRect.beginPath(); @@ -841,7 +857,7 @@ export default class SummaryUiHandler extends UiHandler { // Animates the description text moving upwards if (abilityDescriptionLineCount > 2) { abilityInfo.descriptionText.setY(69); - this.descriptionScrollTween = this.scene.tweens.add({ + this.descriptionScrollTween = globalScene.tweens.add({ targets: abilityInfo.descriptionText, delay: Utils.fixedInt(2000), loop: -1, @@ -869,13 +885,18 @@ export default class SummaryUiHandler extends UiHandler { natureFragment: i18next.t(`pokemonSummary:natureFragment.${rawNature}`, { nature: nature }) }); - const memoText = addBBCodeTextObject(this.scene, 7, 113, String(memoString), TextStyle.WINDOW_ALT); + const memoText = addBBCodeTextObject(7, 113, String(memoString), TextStyle.WINDOW_ALT); memoText.setOrigin(0, 0); profileContainer.add(memoText); break; case Page.STATS: - const statsContainer = this.scene.add.container(0, -pageBg.height); - pageContainer.add(statsContainer); + this.statsContainer = globalScene.add.container(0, -pageBg.height); + pageContainer.add(this.statsContainer); + this.permStatsContainer = globalScene.add.container(27, 56); + this.statsContainer.add(this.permStatsContainer); + this.ivContainer = globalScene.add.container(27, 56); + this.statsContainer.add(this.ivContainer); + this.statsContainer.setVisible(true); PERMANENT_STATS.forEach((stat, s) => { const statName = i18next.t(getStatKey(stat)); @@ -884,32 +905,41 @@ export default class SummaryUiHandler extends UiHandler { const natureStatMultiplier = getNatureStatMultiplier(this.pokemon?.getNature()!, s); // TODO: is this bang correct? - const statLabel = addTextObject(this.scene, 27 + 115 * colIndex + (colIndex === 1 ? 5 : 0), 56 + 16 * rowIndex, statName, natureStatMultiplier === 1 ? TextStyle.SUMMARY : natureStatMultiplier > 1 ? TextStyle.SUMMARY_PINK : TextStyle.SUMMARY_BLUE); + const statLabel = addTextObject(115 * colIndex + (colIndex === 1 ? 5 : 0), 16 * rowIndex, statName, natureStatMultiplier === 1 ? TextStyle.SUMMARY : natureStatMultiplier > 1 ? TextStyle.SUMMARY_PINK : TextStyle.SUMMARY_BLUE); + const ivLabel = addTextObject(115 * colIndex + (colIndex === 1 ? 5 : 0), 16 * rowIndex, statName, this.pokemon?.ivs[stat] === 31 ? TextStyle.SUMMARY_GOLD : TextStyle.SUMMARY); + statLabel.setOrigin(0.5, 0); - statsContainer.add(statLabel); + ivLabel.setOrigin(0.5, 0); + this.permStatsContainer.add(statLabel); + this.ivContainer.add(ivLabel); const statValueText = stat !== Stat.HP ? Utils.formatStat(this.pokemon?.getStat(stat)!) // TODO: is this bang correct? : `${Utils.formatStat(this.pokemon?.hp!, true)}/${Utils.formatStat(this.pokemon?.getMaxHp()!, true)}`; // TODO: are those bangs correct? + const ivText = `${this.pokemon?.ivs[stat]}/31`; - const statValue = addTextObject(this.scene, 120 + 88 * colIndex, 56 + 16 * rowIndex, statValueText, TextStyle.WINDOW_ALT); + const statValue = addTextObject(93 + 88 * colIndex, 16 * rowIndex, statValueText, TextStyle.WINDOW_ALT); statValue.setOrigin(1, 0); - statsContainer.add(statValue); + this.permStatsContainer.add(statValue); + const ivValue = addTextObject(93 + 88 * colIndex, 16 * rowIndex, ivText, TextStyle.WINDOW_ALT); + ivValue.setOrigin(1, 0); + this.ivContainer.add(ivValue); }); + this.ivContainer.setVisible(false); - const itemModifiers = (this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier + const itemModifiers = (globalScene.findModifiers(m => m instanceof PokemonHeldItemModifier && m.pokemonId === this.pokemon?.id, this.playerParty) as PokemonHeldItemModifier[]) .sort(modifierSortFunc); itemModifiers.forEach((item, i) => { - const icon = item.getIcon(this.scene, true); + const icon = item.getIcon(true); icon.setPosition((i % 17) * 12 + 3, 14 * Math.floor(i / 17) + 15); - statsContainer.add(icon); + this.statsContainer.add(icon); icon.setInteractive(new Phaser.Geom.Rectangle(0, 0, 32, 32), Phaser.Geom.Rectangle.Contains); - icon.on("pointerover", () => (this.scene as BattleScene).ui.showTooltip(item.type.name, item.type.getDescription(this.scene), true)); - icon.on("pointerout", () => (this.scene as BattleScene).ui.hideTooltip()); + icon.on("pointerover", () => globalScene.ui.showTooltip(item.type.name, item.type.getDescription(), true)); + icon.on("pointerout", () => globalScene.ui.hideTooltip()); }); const pkmLvl = this.pokemon?.level!; // TODO: is this bang correct? @@ -917,32 +947,32 @@ export default class SummaryUiHandler extends UiHandler { const pkmExp = this.pokemon?.exp!; // TODO: is this bang correct? const pkmSpeciesGrowthRate = this.pokemon?.species.growthRate!; // TODO: is this bang correct? const relLvExp = getLevelRelExp(pkmLvl + 1, pkmSpeciesGrowthRate); - const expRatio = pkmLvl < this.scene.getMaxExpLevel() ? pkmLvlExp / relLvExp : 0; + const expRatio = pkmLvl < globalScene.getMaxExpLevel() ? pkmLvlExp / relLvExp : 0; - const expLabel = addTextObject(this.scene, 6, 112, i18next.t("pokemonSummary:expPoints"), TextStyle.SUMMARY); + const expLabel = addTextObject(6, 112, i18next.t("pokemonSummary:expPoints"), TextStyle.SUMMARY); expLabel.setOrigin(0, 0); - statsContainer.add(expLabel); + this.statsContainer.add(expLabel); - const nextLvExpLabel = addTextObject(this.scene, 6, 128, i18next.t("pokemonSummary:nextLv"), TextStyle.SUMMARY); + const nextLvExpLabel = addTextObject(6, 128, i18next.t("pokemonSummary:nextLv"), TextStyle.SUMMARY); nextLvExpLabel.setOrigin(0, 0); - statsContainer.add(nextLvExpLabel); + this.statsContainer.add(nextLvExpLabel); - const expText = addTextObject(this.scene, 208, 112, pkmExp.toString(), TextStyle.WINDOW_ALT); + const expText = addTextObject(208, 112, pkmExp.toString(), TextStyle.WINDOW_ALT); expText.setOrigin(1, 0); - statsContainer.add(expText); + this.statsContainer.add(expText); - const nextLvExp = pkmLvl < this.scene.getMaxExpLevel() + const nextLvExp = pkmLvl < globalScene.getMaxExpLevel() ? getLevelTotalExp(pkmLvl + 1, pkmSpeciesGrowthRate) - pkmExp : 0; - const nextLvExpText = addTextObject(this.scene, 208, 128, nextLvExp.toString(), TextStyle.WINDOW_ALT); + const nextLvExpText = addTextObject(208, 128, nextLvExp.toString(), TextStyle.WINDOW_ALT); nextLvExpText.setOrigin(1, 0); - statsContainer.add(nextLvExpText); + this.statsContainer.add(nextLvExpText); - const expOverlay = this.scene.add.image(140, 145, "summary_stats_overlay_exp"); + const expOverlay = globalScene.add.image(140, 145, "summary_stats_overlay_exp"); expOverlay.setOrigin(0, 0); - statsContainer.add(expOverlay); + this.statsContainer.add(expOverlay); - const expMaskRect = this.scene.make.graphics({}); + const expMaskRect = globalScene.make.graphics({}); expMaskRect.setScale(6); expMaskRect.fillStyle(0xFFFFFF); expMaskRect.beginPath(); @@ -951,20 +981,25 @@ export default class SummaryUiHandler extends UiHandler { const expMask = expMaskRect.createGeometryMask(); expOverlay.setMask(expMask); + this.abilityPrompt = globalScene.add.image(0, 0, !globalScene.inputController?.gamepadSupport ? "summary_profile_prompt_z" : "summary_profile_prompt_a"); + this.abilityPrompt.setPosition(8, 47); + this.abilityPrompt.setVisible(true); + this.abilityPrompt.setOrigin(0, 0); + this.statsContainer.add(this.abilityPrompt); break; case Page.MOVES: - this.movesContainer = this.scene.add.container(5, -pageBg.height + 26); + this.movesContainer = globalScene.add.container(5, -pageBg.height + 26); pageContainer.add(this.movesContainer); - this.extraMoveRowContainer = this.scene.add.container(0, 64); + this.extraMoveRowContainer = globalScene.add.container(0, 64); this.extraMoveRowContainer.setVisible(false); this.movesContainer.add(this.extraMoveRowContainer); - const extraRowOverlay = this.scene.add.image(-2, 1, "summary_moves_overlay_row"); + const extraRowOverlay = globalScene.add.image(-2, 1, "summary_moves_overlay_row"); extraRowOverlay.setOrigin(0, 1); this.extraMoveRowContainer.add(extraRowOverlay); - const extraRowText = addTextObject(this.scene, 35, 0, this.summaryUiMode === SummaryUiMode.LEARN_MOVE && this.newMove ? this.newMove.name : i18next.t("pokemonSummary:cancel"), + const extraRowText = addTextObject(35, 0, this.summaryUiMode === SummaryUiMode.LEARN_MOVE && this.newMove ? this.newMove.name : i18next.t("pokemonSummary:cancel"), this.summaryUiMode === SummaryUiMode.LEARN_MOVE ? TextStyle.SUMMARY_PINK : TextStyle.SUMMARY); extraRowText.setOrigin(0, 1); this.extraMoveRowContainer.add(extraRowText); @@ -975,45 +1010,45 @@ export default class SummaryUiHandler extends UiHandler { if (this.newMove && this.pokemon) { const spriteKey = Utils.getLocalizedSpriteKey("types"); const moveType = this.pokemon.getMoveType(this.newMove); - const newMoveTypeIcon = this.scene.add.sprite(0, 0, spriteKey, Type[moveType].toLowerCase()); + const newMoveTypeIcon = globalScene.add.sprite(0, 0, spriteKey, Type[moveType].toLowerCase()); newMoveTypeIcon.setOrigin(0, 1); this.extraMoveRowContainer.add(newMoveTypeIcon); } - const ppOverlay = this.scene.add.image(163, -1, "summary_moves_overlay_pp"); + const ppOverlay = globalScene.add.image(163, -1, "summary_moves_overlay_pp"); ppOverlay.setOrigin(0, 1); this.extraMoveRowContainer.add(ppOverlay); const pp = Utils.padInt(this.newMove?.pp!, 2, " "); // TODO: is this bang correct? - const ppText = addTextObject(this.scene, 173, 1, `${pp}/${pp}`, TextStyle.WINDOW); + const ppText = addTextObject(173, 1, `${pp}/${pp}`, TextStyle.WINDOW); ppText.setOrigin(0, 1); this.extraMoveRowContainer.add(ppText); } - this.moveRowsContainer = this.scene.add.container(0, 0); + this.moveRowsContainer = globalScene.add.container(0, 0); this.movesContainer.add(this.moveRowsContainer); for (let m = 0; m < 4; m++) { const move: PokemonMove | null = this.pokemon && this.pokemon.moveset.length > m ? this.pokemon?.moveset[m] : null; - const moveRowContainer = this.scene.add.container(0, 16 * m); + const moveRowContainer = globalScene.add.container(0, 16 * m); this.moveRowsContainer.add(moveRowContainer); if (move && this.pokemon) { const spriteKey = Utils.getLocalizedSpriteKey("types"); const moveType = this.pokemon.getMoveType(move.getMove()); - const typeIcon = this.scene.add.sprite(0, 0, spriteKey, Type[moveType].toLowerCase()); + const typeIcon = globalScene.add.sprite(0, 0, spriteKey, Type[moveType].toLowerCase()); typeIcon.setOrigin(0, 1); moveRowContainer.add(typeIcon); } - const moveText = addTextObject(this.scene, 35, 0, move ? move.getName() : "-", TextStyle.SUMMARY); + const moveText = addTextObject(35, 0, move ? move.getName() : "-", TextStyle.SUMMARY); moveText.setOrigin(0, 1); moveRowContainer.add(moveText); - const ppOverlay = this.scene.add.image(163, -1, "summary_moves_overlay_pp"); + const ppOverlay = globalScene.add.image(163, -1, "summary_moves_overlay_pp"); ppOverlay.setOrigin(0, 1); moveRowContainer.add(ppOverlay); - const ppText = addTextObject(this.scene, 173, 1, "--/--", TextStyle.WINDOW); + const ppText = addTextObject(173, 1, "--/--", TextStyle.WINDOW); ppText.setOrigin(0, 1); if (move) { @@ -1025,10 +1060,10 @@ export default class SummaryUiHandler extends UiHandler { moveRowContainer.add(ppText); } - this.moveDescriptionText = addTextObject(this.scene, 2, 84, "", TextStyle.WINDOW_ALT, { wordWrap: { width: 1212 }}); + this.moveDescriptionText = addTextObject(2, 84, "", TextStyle.WINDOW_ALT, { wordWrap: { width: 1212 }}); this.movesContainer.add(this.moveDescriptionText); - const moveDescriptionTextMaskRect = this.scene.make.graphics({}); + const moveDescriptionTextMaskRect = globalScene.make.graphics({}); moveDescriptionTextMaskRect.setScale(6); moveDescriptionTextMaskRect.fillStyle(0xFFFFFF); moveDescriptionTextMaskRect.beginPath(); @@ -1046,7 +1081,7 @@ export default class SummaryUiHandler extends UiHandler { return; } this.statusVisible = true; - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.statusContainer, x: 0, duration: instant ? 0 : 250, @@ -1059,7 +1094,7 @@ export default class SummaryUiHandler extends UiHandler { return; } this.statusVisible = false; - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.statusContainer, x: -106, duration: instant ? 0 : 250, @@ -1122,7 +1157,7 @@ export default class SummaryUiHandler extends UiHandler { return; } this.moveEffectsVisible = true; - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.moveEffectContainer, x: 6, duration: instant ? 0 : 250, @@ -1135,7 +1170,7 @@ export default class SummaryUiHandler extends UiHandler { return; } this.moveEffectsVisible = false; - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.moveEffectContainer, x: 106, duration: instant ? 0 : 250, diff --git a/src/ui/target-select-ui-handler.ts b/src/ui/target-select-ui-handler.ts index 249ae7b8b01..681c5ff40c0 100644 --- a/src/ui/target-select-ui-handler.ts +++ b/src/ui/target-select-ui-handler.ts @@ -1,14 +1,14 @@ import { BattlerIndex } from "../battle"; -import BattleScene from "../battle-scene"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import * as Utils from "../utils"; import { getMoveTargets } from "../data/move"; import { Button } from "#enums/buttons"; -import { Moves } from "#enums/moves"; -import Pokemon from "#app/field/pokemon"; -import { ModifierBar } from "#app/modifier/modifier"; +import type { Moves } from "#enums/moves"; +import type Pokemon from "#app/field/pokemon"; +import type { ModifierBar } from "#app/modifier/modifier"; import { SubstituteTag } from "#app/data/battler-tags"; +import { globalScene } from "#app/global-scene"; export type TargetSelectCallback = (targets: BattlerIndex[]) => void; @@ -26,8 +26,8 @@ export default class TargetSelectUiHandler extends UiHandler { private enemyModifiers: ModifierBar; private targetBattleInfoMoveTween: Phaser.Tweens.Tween[] = []; - constructor(scene: BattleScene) { - super(scene, Mode.TARGET_SELECT); + constructor() { + super(Mode.TARGET_SELECT); this.cursor = -1; } @@ -41,10 +41,10 @@ export default class TargetSelectUiHandler extends UiHandler { super.show(args); - this.fieldIndex = args[0] as integer; + this.fieldIndex = args[0] as number; this.move = args[1] as Moves; this.targetSelectCallback = args[2] as TargetSelectCallback; - const user = this.scene.getPlayerField()[this.fieldIndex]; + const user = globalScene.getPlayerField()[this.fieldIndex]; const moveTargets = getMoveTargets(user, this.move); this.targets = moveTargets.targets; @@ -54,7 +54,7 @@ export default class TargetSelectUiHandler extends UiHandler { return false; } - this.enemyModifiers = this.scene.getModifierBar(true); + this.enemyModifiers = globalScene.getModifierBar(true); if (this.fieldIndex === BattlerIndex.PLAYER) { this.resetCursor(this.cursor0, user); @@ -131,9 +131,9 @@ export default class TargetSelectUiHandler extends UiHandler { return success; } - setCursor(cursor: integer): boolean { - const singleTarget = this.scene.getField()[cursor]; - const multipleTargets = this.targets.map(index => this.scene.getField()[index]); + setCursor(cursor: number): boolean { + const singleTarget = globalScene.getField()[cursor]; + const multipleTargets = this.targets.map(index => globalScene.getField()[index]); this.targetsHighlighted = this.isMultipleTargets ? multipleTargets : [ singleTarget ]; @@ -147,7 +147,7 @@ export default class TargetSelectUiHandler extends UiHandler { } } - this.targetFlashTween = this.scene.tweens.add({ + this.targetFlashTween = globalScene.tweens.add({ targets: this.targetsHighlighted, key: { start: 1, to: 0.25 }, loop: -1, @@ -173,7 +173,7 @@ export default class TargetSelectUiHandler extends UiHandler { const targetsBattleInfo = this.targetsHighlighted.map(target => target.getBattleInfo()); targetsBattleInfo.map(info => { - this.targetBattleInfoMoveTween.push(this.scene.tweens.add({ + this.targetBattleInfoMoveTween.push(globalScene.tweens.add({ targets: [ info ], y: { start: info.getBaseY(), to: info.getBaseY() + 1 }, loop: -1, diff --git a/src/ui/test-dialogue-ui-handler.ts b/src/ui/test-dialogue-ui-handler.ts index bf0e7f6723f..c7693ec954d 100644 --- a/src/ui/test-dialogue-ui-handler.ts +++ b/src/ui/test-dialogue-ui-handler.ts @@ -1,8 +1,9 @@ -import { FormModalUiHandler, InputFieldConfig } from "./form-modal-ui-handler"; -import { ModalConfig } from "./modal-ui-handler"; +import type { InputFieldConfig } from "./form-modal-ui-handler"; +import { FormModalUiHandler } from "./form-modal-ui-handler"; +import type { ModalConfig } from "./modal-ui-handler"; import i18next from "i18next"; -import { PlayerPokemon } from "#app/field/pokemon"; -import { OptionSelectItem } from "./abstact-option-select-ui-handler"; +import type { PlayerPokemon } from "#app/field/pokemon"; +import type { OptionSelectItem } from "./abstact-option-select-ui-handler"; import { isNullOrUndefined } from "#app/utils"; import { Mode } from "./ui"; @@ -10,8 +11,8 @@ export default class TestDialogueUiHandler extends FormModalUiHandler { keys: string[]; - constructor(scene, mode) { - super(scene, mode); + constructor(mode) { + super(mode); } setup() { diff --git a/src/ui/text.ts b/src/ui/text.ts index 17ae02be9ef..19b0eddb494 100644 --- a/src/ui/text.ts +++ b/src/ui/text.ts @@ -1,9 +1,9 @@ import { EggTier } from "#enums/egg-type"; import { UiTheme } from "#enums/ui-theme"; -import Phaser from "phaser"; +import type Phaser from "phaser"; import BBCodeText from "phaser3-rex-plugins/plugins/gameobjects/tagtext/bbcodetext/BBCodeText"; import InputText from "phaser3-rex-plugins/plugins/inputtext"; -import BattleScene from "../battle-scene"; +import { globalScene } from "#app/global-scene"; import { ModifierTier } from "../modifier/modifier-tier"; import i18next from "#app/plugins/i18n"; @@ -42,6 +42,7 @@ export enum TextStyle { PERFECT_IV, ME_OPTION_DEFAULT, // Default style for choices in ME ME_OPTION_SPECIAL, // Style for choices with special requirements in ME + SHADOW_TEXT // To obscure unavailable options } export interface TextStyleOptions { @@ -52,10 +53,10 @@ export interface TextStyleOptions { shadowYpos: number } -export function addTextObject(scene: Phaser.Scene, x: number, y: number, content: string, style: TextStyle, extraStyleOptions?: Phaser.Types.GameObjects.Text.TextStyle): Phaser.GameObjects.Text { - const { scale, styleOptions, shadowColor, shadowXpos, shadowYpos } = getTextStyleOptions(style, (scene as BattleScene).uiTheme, extraStyleOptions); +export function addTextObject(x: number, y: number, content: string, style: TextStyle, extraStyleOptions?: Phaser.Types.GameObjects.Text.TextStyle): Phaser.GameObjects.Text { + const { scale, styleOptions, shadowColor, shadowXpos, shadowYpos } = getTextStyleOptions(style, globalScene.uiTheme, extraStyleOptions); - const ret = scene.add.text(x, y, content, styleOptions); + const ret = globalScene.add.text(x, y, content, styleOptions); ret.setScale(scale); ret.setShadow(shadowXpos, shadowYpos, shadowColor); if (!(styleOptions as Phaser.Types.GameObjects.Text.TextStyle).lineSpacing) { @@ -69,8 +70,8 @@ export function addTextObject(scene: Phaser.Scene, x: number, y: number, content return ret; } -export function setTextStyle(obj: Phaser.GameObjects.Text, scene: Phaser.Scene, style: TextStyle, extraStyleOptions?: Phaser.Types.GameObjects.Text.TextStyle) { - const { scale, styleOptions, shadowColor, shadowXpos, shadowYpos } = getTextStyleOptions(style, (scene as BattleScene).uiTheme, extraStyleOptions); +export function setTextStyle(obj: Phaser.GameObjects.Text, style: TextStyle, extraStyleOptions?: Phaser.Types.GameObjects.Text.TextStyle) { + const { scale, styleOptions, shadowColor, shadowXpos, shadowYpos } = getTextStyleOptions(style, globalScene.uiTheme, extraStyleOptions); obj.setScale(scale); obj.setShadow(shadowXpos, shadowYpos, shadowColor); if (!(styleOptions as Phaser.Types.GameObjects.Text.TextStyle).lineSpacing) { @@ -82,11 +83,11 @@ export function setTextStyle(obj: Phaser.GameObjects.Text, scene: Phaser.Scene, } } -export function addBBCodeTextObject(scene: Phaser.Scene, x: number, y: number, content: string, style: TextStyle, extraStyleOptions?: Phaser.Types.GameObjects.Text.TextStyle): BBCodeText { - const { scale, styleOptions, shadowColor, shadowXpos, shadowYpos } = getTextStyleOptions(style, (scene as BattleScene).uiTheme, extraStyleOptions); +export function addBBCodeTextObject(x: number, y: number, content: string, style: TextStyle, extraStyleOptions?: Phaser.Types.GameObjects.Text.TextStyle): BBCodeText { + const { scale, styleOptions, shadowColor, shadowXpos, shadowYpos } = getTextStyleOptions(style, globalScene.uiTheme, extraStyleOptions); - const ret = new BBCodeText(scene, x, y, content, styleOptions as BBCodeText.TextStyle); - scene.add.existing(ret); + const ret = new BBCodeText(globalScene, x, y, content, styleOptions as BBCodeText.TextStyle); + globalScene.add.existing(ret); ret.setScale(scale); ret.setShadow(shadowXpos, shadowYpos, shadowColor); if (!(styleOptions as BBCodeText.TextStyle).lineSpacing) { @@ -100,11 +101,11 @@ export function addBBCodeTextObject(scene: Phaser.Scene, x: number, y: number, c return ret; } -export function addTextInputObject(scene: Phaser.Scene, x: number, y: number, width: number, height: number, style: TextStyle, extraStyleOptions?: InputText.IConfig): InputText { - const { scale, styleOptions } = getTextStyleOptions(style, (scene as BattleScene).uiTheme, extraStyleOptions); +export function addTextInputObject(x: number, y: number, width: number, height: number, style: TextStyle, extraStyleOptions?: InputText.IConfig): InputText { + const { scale, styleOptions } = getTextStyleOptions(style, globalScene.uiTheme, extraStyleOptions); - const ret = new InputText(scene, x, y, width, height, styleOptions as InputText.IConfig); - scene.add.existing(ret); + const ret = new InputText(globalScene, x, y, width, height, styleOptions as InputText.IConfig); + globalScene.add.existing(ret); ret.setScale(scale); return ret; @@ -359,10 +360,16 @@ export function getTextColor(textStyle: TextStyle, shadow?: boolean, uiTheme: Ui return !shadow ? "#f8b050" : "#c07800"; // Gold } return !shadow ? "#78c850" : "#306850"; // Green + // Leaving the logic in place, in case someone wants to pick an even darker hue for the shadow down the line + case TextStyle.SHADOW_TEXT: + if (isLegacyTheme) { + return !shadow ? "#d0d0c8" : "#d0d0c8"; + } + return !shadow ? "#6b5a73" : "#6b5a73"; } } -export function getModifierTierTextTint(tier: ModifierTier): integer { +export function getModifierTierTextTint(tier: ModifierTier): number { switch (tier) { case ModifierTier.COMMON: return 0xf8f8f8; @@ -379,7 +386,7 @@ export function getModifierTierTextTint(tier: ModifierTier): integer { } } -export function getEggTierTextTint(tier: EggTier): integer { +export function getEggTierTextTint(tier: EggTier): number { switch (tier) { case EggTier.COMMON: return getModifierTierTextTint(ModifierTier.COMMON); diff --git a/src/ui/time-of-day-widget.ts b/src/ui/time-of-day-widget.ts index 66fe5cc9ac3..2a33b475385 100644 --- a/src/ui/time-of-day-widget.ts +++ b/src/ui/time-of-day-widget.ts @@ -1,13 +1,11 @@ import * as Utils from "../utils"; -import BattleScene from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; import { BattleSceneEventType } from "../events/battle-scene"; import { EaseType } from "#enums/ease-type"; import { TimeOfDay } from "#enums/time-of-day"; /** A small self contained UI element that displays the time of day as an icon */ export default class TimeOfDayWidget extends Phaser.GameObjects.Container { - /** An alias for the scene typecast to a {@linkcode BattleScene} */ - private battleScene: BattleScene; /** The {@linkcode Phaser.GameObjects.Sprite} that represents the foreground of the current time of day */ private readonly timeOfDayIconFgs: Phaser.GameObjects.Sprite[] = new Array(2); @@ -42,19 +40,18 @@ export default class TimeOfDayWidget extends Phaser.GameObjects.Container { public set parentVisible(visible: boolean) { if (visible && !this._parentVisible) { // Only resume the tweens if parent is newly visible this.timeOfDayIcons?.forEach( - icon => this.scene.tweens.getTweensOf(icon).forEach( + icon => globalScene.tweens.getTweensOf(icon).forEach( tween => tween.resume())); } this._parentVisible = visible; } - constructor(scene: Phaser.Scene, x: number = 0, y: number = 0) { - super(scene, x, y); - this.battleScene = this.scene as BattleScene; + constructor(x: number = 0, y: number = 0) { + super(globalScene, x, y); - this.setVisible(this.battleScene.showTimeOfDayWidget); - if (!this.battleScene.showTimeOfDayWidget) { + this.setVisible(globalScene.showTimeOfDayWidget); + if (!globalScene.showTimeOfDayWidget) { return; } @@ -62,14 +59,14 @@ export default class TimeOfDayWidget extends Phaser.GameObjects.Container { this.timeOfDayIconPairs.forEach( (icons, key) => { for (let i = 0; i < icons.length; i++) { - icons[i] = this.scene.add.sprite(0, 0, "dawn_icon_" + key).setOrigin(); + icons[i] = globalScene.add.sprite(0, 0, "dawn_icon_" + key).setOrigin(); } }); // Store a flat array of all icons for later this.timeOfDayIcons = [ this.timeOfDayIconBgs, this.timeOfDayIconMgs, this.timeOfDayIconFgs ].flat(); this.add(this.timeOfDayIcons); - this.battleScene.eventTarget.addEventListener(BattleSceneEventType.ENCOUNTER_PHASE, this.onEncounterPhaseEvent); + globalScene.eventTarget.addEventListener(BattleSceneEventType.ENCOUNTER_PHASE, this.onEncounterPhaseEvent); } /** @@ -136,13 +133,13 @@ export default class TimeOfDayWidget extends Phaser.GameObjects.Container { /** Adds the proper tween for all icons */ private tweenTimeOfDayIcon() { - this.scene.tweens.killTweensOf(this.timeOfDayIcons); + globalScene.tweens.killTweensOf(this.timeOfDayIcons); this.resetIcons(); // Tween based on the player setting - (this.battleScene.timeOfDayAnimation === EaseType.BACK ? this.getBackTween() : this.getBounceTween()) - .forEach(tween => this.scene.tweens.add(tween)); + (globalScene.timeOfDayAnimation === EaseType.BACK ? this.getBackTween() : this.getBounceTween()) + .forEach(tween => globalScene.tweens.add(tween)); // Swaps all elements of the icon arrays by shifting the first element onto the end of the array // This ensures index[0] is always the new time of day icon and index[1] is always the current one @@ -158,7 +155,7 @@ export default class TimeOfDayWidget extends Phaser.GameObjects.Container { * @param event {@linkcode Event} being sent */ private onEncounterPhase(event: Event) { - const newTime = this.battleScene.arena.getTimeOfDay(); + const newTime = globalScene.arena.getTimeOfDay(); if (this.currentTime === newTime) { return; diff --git a/src/ui/title-ui-handler.ts b/src/ui/title-ui-handler.ts index aec80f049c9..0d69eae0efc 100644 --- a/src/ui/title-ui-handler.ts +++ b/src/ui/title-ui-handler.ts @@ -1,13 +1,13 @@ -import BattleScene from "../battle-scene"; import OptionSelectUiHandler from "./settings/option-select-ui-handler"; import { Mode } from "./ui"; import * as Utils from "../utils"; -import { TextStyle, addTextObject, getTextStyleOptions } from "./text"; +import { TextStyle, addTextObject } from "./text"; import { getSplashMessages } from "../data/splash-messages"; import i18next from "i18next"; import { TimedEventDisplay } from "#app/timed-event-manager"; import { version } from "../../package.json"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; +import { globalScene } from "#app/global-scene"; export default class TitleUiHandler extends OptionSelectUiHandler { /** If the stats can not be retrieved, use this fallback value */ @@ -22,8 +22,8 @@ export default class TitleUiHandler extends OptionSelectUiHandler { private titleStatsTimer: NodeJS.Timeout | null; - constructor(scene: BattleScene, mode: Mode = Mode.TITLE) { - super(scene, mode); + constructor(mode: Mode = Mode.TITLE) { + super(mode); } setup() { @@ -31,25 +31,24 @@ export default class TitleUiHandler extends OptionSelectUiHandler { const ui = this.getUi(); - this.titleContainer = this.scene.add.container(0, -(this.scene.game.canvas.height / 6)); + this.titleContainer = globalScene.add.container(0, -(globalScene.game.canvas.height / 6)); this.titleContainer.setName("title"); this.titleContainer.setAlpha(0); ui.add(this.titleContainer); - const logo = this.scene.add.image((this.scene.game.canvas.width / 6) / 2, 8, "logo"); + const logo = globalScene.add.image((globalScene.game.canvas.width / 6) / 2, 8, "logo"); logo.setOrigin(0.5, 0); this.titleContainer.add(logo); - if (this.scene.eventManager.isEventActive()) { - this.eventDisplay = new TimedEventDisplay(this.scene, 0, 0, this.scene.eventManager.activeEvent()); + if (globalScene.eventManager.isEventActive()) { + this.eventDisplay = new TimedEventDisplay(0, 0, globalScene.eventManager.activeEvent()); this.eventDisplay.setup(); this.titleContainer.add(this.eventDisplay); } this.playerCountLabel = addTextObject( - this.scene, - (this.scene.game.canvas.width / 6) - 2, - (this.scene.game.canvas.height / 6) - 13 - 576 * getTextStyleOptions(TextStyle.WINDOW, this.scene.uiTheme).scale, + // Actual y position will be determined after the title menu has been populated with options + (globalScene.game.canvas.width / 6) - 2, 0, `? ${i18next.t("menu:playersOnline")}`, TextStyle.MESSAGE, { fontSize: "54px" } @@ -57,14 +56,14 @@ export default class TitleUiHandler extends OptionSelectUiHandler { this.playerCountLabel.setOrigin(1, 0); this.titleContainer.add(this.playerCountLabel); - this.splashMessageText = addTextObject(this.scene, logo.x + 64, logo.y + logo.displayHeight - 8, "", TextStyle.MONEY, { fontSize: "54px" }); + this.splashMessageText = addTextObject(logo.x + 64, logo.y + logo.displayHeight - 8, "", TextStyle.MONEY, { fontSize: "54px" }); this.splashMessageText.setOrigin(0.5, 0.5); this.splashMessageText.setAngle(-20); this.titleContainer.add(this.splashMessageText); const originalSplashMessageScale = this.splashMessageText.scale; - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.splashMessageText, duration: Utils.fixedInt(350), scale: originalSplashMessageScale * 1.25, @@ -72,7 +71,7 @@ export default class TitleUiHandler extends OptionSelectUiHandler { yoyo: true, }); - this.appVersionText = addTextObject(this.scene, logo.x - 60, logo.y + logo.displayHeight + 4, "", TextStyle.MONEY, { fontSize: "54px" }); + this.appVersionText = addTextObject(logo.x - 60, logo.y + logo.displayHeight + 4, "", TextStyle.MONEY, { fontSize: "54px" }); this.appVersionText.setOrigin(0.5, 0.5); this.appVersionText.setAngle(0); this.titleContainer.add(this.appVersionText); @@ -97,6 +96,9 @@ export default class TitleUiHandler extends OptionSelectUiHandler { const ret = super.show(args); if (ret) { + // Moving player count to top of the menu + this.playerCountLabel.setY((globalScene.game.canvas.height / 6) - 13 - this.getWindowHeight()); + this.splashMessage = Utils.randItem(getSplashMessages()); this.splashMessageText.setText(i18next.t(this.splashMessage, { count: TitleUiHandler.BATTLES_WON_FALLBACK })); @@ -104,8 +106,8 @@ export default class TitleUiHandler extends OptionSelectUiHandler { const ui = this.getUi(); - if (this.scene.eventManager.isEventActive()) { - this.eventDisplay.setWidth(this.scene.scaledCanvas.width - this.optionSelectBg.width - this.optionSelectBg.x); + if (globalScene.eventManager.isEventActive()) { + this.eventDisplay.setWidth(globalScene.scaledCanvas.width - this.optionSelectBg.width - this.optionSelectBg.x); this.eventDisplay.show(); } @@ -115,7 +117,7 @@ export default class TitleUiHandler extends OptionSelectUiHandler { this.updateTitleStats(); }, 60000); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: [ this.titleContainer, ui.getMessageHandler().bg ], duration: Utils.fixedInt(325), alpha: (target: any) => target === this.titleContainer ? 1 : 0, @@ -136,7 +138,7 @@ export default class TitleUiHandler extends OptionSelectUiHandler { this.titleStatsTimer && clearInterval(this.titleStatsTimer); this.titleStatsTimer = null; - this.scene.tweens.add({ + globalScene.tweens.add({ targets: [ this.titleContainer, ui.getMessageHandler().bg ], duration: Utils.fixedInt(325), alpha: (target: any) => target === this.titleContainer ? 0 : 1, diff --git a/src/ui/ui-handler.ts b/src/ui/ui-handler.ts index bb7b1e038db..f001ab5bd6f 100644 --- a/src/ui/ui-handler.ts +++ b/src/ui/ui-handler.ts @@ -1,23 +1,21 @@ -import BattleScene from "../battle-scene"; -import { TextStyle, getTextColor } from "./text"; -import { Mode } from "./ui"; -import { Button } from "#enums/buttons"; +import { globalScene } from "#app/global-scene"; +import type { TextStyle } from "./text"; +import { getTextColor } from "./text"; +import type { Mode } from "./ui"; +import type { Button } from "#enums/buttons"; /** * A basic abstract class to act as a holder and processor for UI elements. */ export default abstract class UiHandler { - protected scene: BattleScene; - protected mode: integer | null; - protected cursor: integer = 0; + protected mode: number | null; + protected cursor: number = 0; public active: boolean = false; /** - * @param {BattleScene} scene The same scene as everything else. - * @param {Mode} mode The mode of the UI element. These should be unique. + * @param mode The mode of the UI element. These should be unique. */ - constructor(scene: BattleScene, mode: Mode | null = null) { - this.scene = scene; + constructor(mode: Mode | null = null) { this.mode = mode; } @@ -32,18 +30,18 @@ export default abstract class UiHandler { abstract processInput(button: Button): boolean; getUi() { - return this.scene.ui; + return globalScene.ui; } getTextColor(style: TextStyle, shadow: boolean = false): string { - return getTextColor(style, shadow, this.scene.uiTheme); + return getTextColor(style, shadow, globalScene.uiTheme); } - getCursor(): integer { + getCursor(): number { return this.cursor; } - setCursor(cursor: integer): boolean { + setCursor(cursor: number): boolean { const changed = this.cursor !== cursor; if (changed) { this.cursor = cursor; @@ -58,10 +56,15 @@ export default abstract class UiHandler { * @param cursorStyle cursor style to apply */ protected setMouseCursorStyle(cursorStyle: "pointer" | "default") { - this.scene.input.manager.canvas.style.cursor = cursorStyle; + globalScene.input.manager.canvas.style.cursor = cursorStyle; } clear() { this.active = false; } + /** + * To be implemented by individual handlers when necessary to free memory + * Called when {@linkcode BattleScene} is reset + */ + destroy(): void {} } diff --git a/src/ui/ui-theme.ts b/src/ui/ui-theme.ts index 89c56384bd0..36e2e844a56 100644 --- a/src/ui/ui-theme.ts +++ b/src/ui/ui-theme.ts @@ -1,6 +1,6 @@ import { UiTheme } from "#enums/ui-theme"; import { legacyCompatibleImages } from "#app/scene-base"; -import BattleScene from "../battle-scene"; +import { globalScene } from "#app/global-scene"; export enum WindowVariant { NORMAL, @@ -36,14 +36,14 @@ const windowTypeControlColors = { } }; -export function addWindow(scene: BattleScene, x: number, y: number, width: number, height: number, mergeMaskTop?: boolean, mergeMaskLeft?: boolean, maskOffsetX?: number, maskOffsetY?: number, windowVariant?: WindowVariant): Phaser.GameObjects.NineSlice { +export function addWindow(x: number, y: number, width: number, height: number, mergeMaskTop?: boolean, mergeMaskLeft?: boolean, maskOffsetX?: number, maskOffsetY?: number, windowVariant?: WindowVariant): Phaser.GameObjects.NineSlice { if (windowVariant === undefined) { windowVariant = WindowVariant.NORMAL; } - const borderSize = scene.uiTheme ? 6 : 8; + const borderSize = globalScene.uiTheme ? 6 : 8; - const window = scene.add.nineslice(x, y, `window_${scene.windowType}${getWindowVariantSuffix(windowVariant)}`, undefined, width, height, borderSize, borderSize, borderSize, borderSize); + const window = globalScene.add.nineslice(x, y, `window_${globalScene.windowType}${getWindowVariantSuffix(windowVariant)}`, undefined, width, height, borderSize, borderSize, borderSize, borderSize); window.setOrigin(0, 0); if (mergeMaskLeft || mergeMaskTop || maskOffsetX || maskOffsetY) { @@ -54,7 +54,7 @@ export function addWindow(scene: BattleScene, x: number, y: number, width: numbe * height: bottom */ const maskRect = new Phaser.GameObjects.Rectangle( - scene, + globalScene, 6 * (x - (mergeMaskLeft ? 2 : 0) - (maskOffsetX || 0)), 6 * (y + (mergeMaskTop ? 2 : 0) + (maskOffsetY || 0)), width - (mergeMaskLeft ? 2 : 0), @@ -70,7 +70,7 @@ export function addWindow(scene: BattleScene, x: number, y: number, width: numbe return window; } -export function updateWindowType(scene: BattleScene, windowTypeIndex: integer): void { +export function updateWindowType(windowTypeIndex: number): void { const windowObjects: [Phaser.GameObjects.NineSlice, WindowVariant][] = []; const themedObjects: (Phaser.GameObjects.Image | Phaser.GameObjects.NineSlice)[] = []; const traverse = (object: any) => { @@ -96,12 +96,12 @@ export function updateWindowType(scene: BattleScene, windowTypeIndex: integer): } }; - traverse(scene); + traverse(globalScene); - scene.windowType = windowTypeIndex; + globalScene.windowType = windowTypeIndex; const rootStyle = document.documentElement.style; - [ "base", "light", "dark" ].map((k, i) => rootStyle.setProperty(`--color-${k}`, windowTypeControlColors[scene.uiTheme][windowTypeIndex - 1][i])); + [ "base", "light", "dark" ].map((k, i) => rootStyle.setProperty(`--color-${k}`, windowTypeControlColors[globalScene.uiTheme][windowTypeIndex - 1][i])); const windowKey = `window_${windowTypeIndex}`; @@ -114,11 +114,11 @@ export function updateWindowType(scene: BattleScene, windowTypeIndex: integer): } } -export function addUiThemeOverrides(scene: BattleScene): void { - const originalAddImage = scene.add.image; - scene.add.image = function (x: number, y: number, texture: string | Phaser.Textures.Texture, frame?: string | number): Phaser.GameObjects.Image { +export function addUiThemeOverrides(): void { + const originalAddImage = globalScene.add.image; + globalScene.add.image = function (x: number, y: number, texture: string | Phaser.Textures.Texture, frame?: string | number): Phaser.GameObjects.Image { let legacy = false; - if (typeof texture === "string" && scene.uiTheme && legacyCompatibleImages.includes(texture)) { + if (typeof texture === "string" && globalScene.uiTheme && legacyCompatibleImages.includes(texture)) { legacy = true; texture += "_legacy"; } @@ -133,10 +133,10 @@ export function addUiThemeOverrides(scene: BattleScene): void { return ret; }; - const originalAddSprite = scene.add.sprite; - scene.add.sprite = function (x: number, y: number, texture: string | Phaser.Textures.Texture, frame?: string | number): Phaser.GameObjects.Sprite { + const originalAddSprite = globalScene.add.sprite; + globalScene.add.sprite = function (x: number, y: number, texture: string | Phaser.Textures.Texture, frame?: string | number): Phaser.GameObjects.Sprite { let legacy = false; - if (typeof texture === "string" && scene.uiTheme && legacyCompatibleImages.includes(texture)) { + if (typeof texture === "string" && globalScene.uiTheme && legacyCompatibleImages.includes(texture)) { legacy = true; texture += "_legacy"; } @@ -151,10 +151,10 @@ export function addUiThemeOverrides(scene: BattleScene): void { return ret; }; - const originalAddNineslice = scene.add.nineslice; - scene.add.nineslice = function (x: number, y: number, texture: string | Phaser.Textures.Texture, frame?: string | number, width?: number, height?: number, leftWidth?: number, rightWidth?: number, topHeight?: number, bottomHeight?: number): Phaser.GameObjects.NineSlice { + const originalAddNineslice = globalScene.add.nineslice; + globalScene.add.nineslice = function (x: number, y: number, texture: string | Phaser.Textures.Texture, frame?: string | number, width?: number, height?: number, leftWidth?: number, rightWidth?: number, topHeight?: number, bottomHeight?: number): Phaser.GameObjects.NineSlice { let legacy = false; - if (typeof texture === "string" && scene.uiTheme && legacyCompatibleImages.includes(texture)) { + if (typeof texture === "string" && globalScene.uiTheme && legacyCompatibleImages.includes(texture)) { legacy = true; texture += "_legacy"; } diff --git a/src/ui/ui.ts b/src/ui/ui.ts index fc8fa94c848..7fbd10b4668 100644 --- a/src/ui/ui.ts +++ b/src/ui/ui.ts @@ -1,5 +1,5 @@ -import { default as BattleScene } from "../battle-scene"; -import UiHandler from "./ui-handler"; +import { globalScene } from "#app/global-scene"; +import type UiHandler from "./ui-handler"; import BattleMessageUiHandler from "./battle-message-ui-handler"; import CommandUiHandler from "./command-ui-handler"; import PartyUiHandler from "./party-ui-handler"; @@ -23,6 +23,7 @@ import OptionSelectUiHandler from "./settings/option-select-ui-handler"; import EggHatchSceneHandler from "./egg-hatch-scene-handler"; import EggListUiHandler from "./egg-list-ui-handler"; import EggGachaUiHandler from "./egg-gacha-ui-handler"; +import PokedexUiHandler from "./pokedex-ui-handler"; import { addWindow } from "./ui-theme"; import LoginFormUiHandler from "./login-form-ui-handler"; import RegistrationFormUiHandler from "./registration-form-ui-handler"; @@ -35,7 +36,7 @@ import TitleUiHandler from "./title-ui-handler"; import SavingIconHandler from "./saving-icon-handler"; import UnavailableModalUiHandler from "./unavailable-modal-ui-handler"; import SessionReloadModalUiHandler from "./session-reload-modal-ui-handler"; -import { Button } from "#enums/buttons"; +import type { Button } from "#enums/buttons"; import i18next from "i18next"; import GamepadBindingUiHandler from "./settings/gamepad-binding-ui-handler"; import SettingsKeyboardUiHandler from "#app/ui/settings/settings-keyboard-ui-handler"; @@ -43,7 +44,7 @@ import KeyboardBindingUiHandler from "#app/ui/settings/keyboard-binding-ui-handl import SettingsDisplayUiHandler from "./settings/settings-display-ui-handler"; import SettingsAudioUiHandler from "./settings/settings-audio-ui-handler"; import { PlayerGender } from "#enums/player-gender"; -import BgmBar from "#app/ui/bgm-bar"; +import type BgmBar from "#app/ui/bgm-bar"; import RenameFormUiHandler from "./rename-form-ui-handler"; import AdminUiHandler from "./admin-ui-handler"; import RunHistoryUiHandler from "./run-history-ui-handler"; @@ -53,6 +54,9 @@ import TestDialogueUiHandler from "#app/ui/test-dialogue-ui-handler"; import AutoCompleteUiHandler from "./autocomplete-ui-handler"; import { Device } from "#enums/devices"; import MysteryEncounterUiHandler from "./mystery-encounter-ui-handler"; +import PokedexScanUiHandler from "./pokedex-scan-ui-handler"; +import PokedexPageUiHandler from "./pokedex-page-ui-handler"; +import { NavigationManager } from "./settings/navigationMenu"; export enum Mode { MESSAGE, @@ -84,6 +88,9 @@ export enum Mode { GAME_STATS, EGG_LIST, EGG_GACHA, + POKEDEX, + POKEDEX_SCAN, + POKEDEX_PAGE, LOGIN_FORM, REGISTRATION_FORM, LOADING, @@ -108,6 +115,8 @@ const transitionModes = [ Mode.EGG_HATCH_SCENE, Mode.EGG_LIST, Mode.EGG_GACHA, + Mode.POKEDEX, + Mode.POKEDEX_PAGE, Mode.CHALLENGE_SELECT, Mode.RUN_HISTORY, ]; @@ -127,6 +136,7 @@ const noTransitionModes = [ Mode.SETTINGS_KEYBOARD, Mode.ACHIEVEMENTS, Mode.GAME_STATS, + Mode.POKEDEX_SCAN, Mode.LOGIN_FORM, Mode.REGISTRATION_FORM, Mode.LOADING, @@ -156,55 +166,58 @@ export default class UI extends Phaser.GameObjects.Container { private overlayActive: boolean; - constructor(scene: BattleScene) { - super(scene, 0, scene.game.canvas.height / 6); + constructor() { + super(globalScene, 0, globalScene.game.canvas.height / 6); this.mode = Mode.MESSAGE; this.modeChain = []; this.handlers = [ - new BattleMessageUiHandler(scene), - new TitleUiHandler(scene), - new CommandUiHandler(scene), - new FightUiHandler(scene), - new BallUiHandler(scene), - new TargetSelectUiHandler(scene), - new ModifierSelectUiHandler(scene), - new SaveSlotSelectUiHandler(scene), - new PartyUiHandler(scene), - new SummaryUiHandler(scene), - new StarterSelectUiHandler(scene), - new EvolutionSceneHandler(scene), - new EggHatchSceneHandler(scene), - new EggSummaryUiHandler(scene), - new ConfirmUiHandler(scene), - new OptionSelectUiHandler(scene), - new MenuUiHandler(scene), - new OptionSelectUiHandler(scene, Mode.MENU_OPTION_SELECT), + new BattleMessageUiHandler(), + new TitleUiHandler(), + new CommandUiHandler(), + new FightUiHandler(), + new BallUiHandler(), + new TargetSelectUiHandler(), + new ModifierSelectUiHandler(), + new SaveSlotSelectUiHandler(), + new PartyUiHandler(), + new SummaryUiHandler(), + new StarterSelectUiHandler(), + new EvolutionSceneHandler(), + new EggHatchSceneHandler(), + new EggSummaryUiHandler(), + new ConfirmUiHandler(), + new OptionSelectUiHandler(), + new MenuUiHandler(), + new OptionSelectUiHandler(Mode.MENU_OPTION_SELECT), // settings - new SettingsUiHandler(scene), - new SettingsDisplayUiHandler(scene), - new SettingsAudioUiHandler(scene), - new SettingsGamepadUiHandler(scene), - new GamepadBindingUiHandler(scene), - new SettingsKeyboardUiHandler(scene), - new KeyboardBindingUiHandler(scene), - new AchvsUiHandler(scene), - new GameStatsUiHandler(scene), - new EggListUiHandler(scene), - new EggGachaUiHandler(scene), - new LoginFormUiHandler(scene), - new RegistrationFormUiHandler(scene), - new LoadingModalUiHandler(scene), - new SessionReloadModalUiHandler(scene), - new UnavailableModalUiHandler(scene), - new GameChallengesUiHandler(scene), - new RenameFormUiHandler(scene), - new RunHistoryUiHandler(scene), - new RunInfoUiHandler(scene), - new TestDialogueUiHandler(scene, Mode.TEST_DIALOGUE), - new AutoCompleteUiHandler(scene), - new AdminUiHandler(scene), - new MysteryEncounterUiHandler(scene), + new SettingsUiHandler(), + new SettingsDisplayUiHandler(), + new SettingsAudioUiHandler(), + new SettingsGamepadUiHandler(), + new GamepadBindingUiHandler(), + new SettingsKeyboardUiHandler(), + new KeyboardBindingUiHandler(), + new AchvsUiHandler(), + new GameStatsUiHandler(), + new EggListUiHandler(), + new EggGachaUiHandler(), + new PokedexUiHandler(), + new PokedexScanUiHandler(Mode.TEST_DIALOGUE), + new PokedexPageUiHandler(), + new LoginFormUiHandler(), + new RegistrationFormUiHandler(), + new LoadingModalUiHandler(), + new SessionReloadModalUiHandler(), + new UnavailableModalUiHandler(), + new GameChallengesUiHandler(), + new RenameFormUiHandler(), + new RunHistoryUiHandler(), + new RunInfoUiHandler(), + new TestDialogueUiHandler(Mode.TEST_DIALOGUE), + new AutoCompleteUiHandler(), + new AdminUiHandler(), + new MysteryEncounterUiHandler(), ]; } @@ -213,38 +226,38 @@ export default class UI extends Phaser.GameObjects.Container { for (const handler of this.handlers) { handler.setup(); } - this.overlay = this.scene.add.rectangle(0, 0, this.scene.game.canvas.width / 6, this.scene.game.canvas.height / 6, 0); + this.overlay = globalScene.add.rectangle(0, 0, globalScene.game.canvas.width / 6, globalScene.game.canvas.height / 6, 0); this.overlay.setName("rect-ui-overlay"); this.overlay.setOrigin(0, 0); - (this.scene as BattleScene).uiContainer.add(this.overlay); + globalScene.uiContainer.add(this.overlay); this.overlay.setVisible(false); this.setupTooltip(); - this.achvBar = new AchvBar(this.scene as BattleScene); + this.achvBar = new AchvBar; this.achvBar.setup(); - (this.scene as BattleScene).uiContainer.add(this.achvBar); + globalScene.uiContainer.add(this.achvBar); - this.savingIcon = new SavingIconHandler(this.scene as BattleScene); + this.savingIcon = new SavingIconHandler; this.savingIcon.setup(); - (this.scene as BattleScene).uiContainer.add(this.savingIcon); + globalScene.uiContainer.add(this.savingIcon); } private setupTooltip() { - this.tooltipContainer = this.scene.add.container(0, 0); + this.tooltipContainer = globalScene.add.container(0, 0); this.tooltipContainer.setName("tooltip"); this.tooltipContainer.setVisible(false); - this.tooltipBg = addWindow(this.scene as BattleScene, 0, 0, 128, 31); + this.tooltipBg = addWindow(0, 0, 128, 31); this.tooltipBg.setName("window-tooltip-bg"); this.tooltipBg.setOrigin(0, 0); - this.tooltipTitle = addTextObject(this.scene, 64, 4, "", TextStyle.TOOLTIP_TITLE); + this.tooltipTitle = addTextObject(64, 4, "", TextStyle.TOOLTIP_TITLE); this.tooltipTitle.setName("text-tooltip-title"); this.tooltipTitle.setOrigin(0.5, 0); - this.tooltipContent = addTextObject(this.scene, 6, 16, "", TextStyle.TOOLTIP_CONTENT); + this.tooltipContent = addTextObject(6, 16, "", TextStyle.TOOLTIP_CONTENT); this.tooltipContent.setName("text-tooltip-content"); this.tooltipContent.setWordWrapWidth(850); @@ -252,7 +265,7 @@ export default class UI extends Phaser.GameObjects.Container { this.tooltipContainer.add(this.tooltipTitle); this.tooltipContainer.add(this.tooltipContent); - (this.scene as BattleScene).uiContainer.add(this.tooltipContainer); + globalScene.uiContainer.add(this.tooltipContainer); } getHandler(): H { @@ -268,15 +281,19 @@ export default class UI extends Phaser.GameObjects.Container { return false; } - const battleScene = this.scene as BattleScene; - if ([ Mode.CONFIRM, Mode.COMMAND, Mode.FIGHT, Mode.MESSAGE ].includes(this.mode)) { - battleScene?.processInfoButton(pressed); + if ([ Mode.CONFIRM, Mode.COMMAND, Mode.FIGHT, Mode.MESSAGE, Mode.TARGET_SELECT ].includes(this.mode)) { + globalScene?.processInfoButton(pressed); return true; } - battleScene?.processInfoButton(false); + globalScene?.processInfoButton(false); return true; } + /** + * Process a player input of a button (delivering it to the current UI handler for processing) + * @param button The {@linkcode Button} being inputted + * @returns true if the input attempt succeeds + */ processInput(button: Button): boolean { if (this.overlayActive) { return false; @@ -291,13 +308,13 @@ export default class UI extends Phaser.GameObjects.Container { return handler.processInput(button); } - showTextPromise(text: string, callbackDelay: number = 0, prompt: boolean = true, promptDelay?: integer | null): Promise { + showTextPromise(text: string, callbackDelay: number = 0, prompt: boolean = true, promptDelay?: number | null): Promise { return new Promise(resolve => { this.showText(text ?? "", null, () => resolve(), callbackDelay, prompt, promptDelay); }); } - showText(text: string, delay?: integer | null, callback?: Function | null, callbackDelay?: integer | null, prompt?: boolean | null, promptDelay?: integer | null): void { + showText(text: string, delay?: number | null, callback?: Function | null, callbackDelay?: number | null, prompt?: boolean | null, promptDelay?: number | null): void { if (prompt && text.indexOf("$") > -1) { const messagePages = text.split(/\$/g).map(m => m.trim()); let showMessageAndCallback = () => callback && callback(); @@ -317,12 +334,11 @@ export default class UI extends Phaser.GameObjects.Container { } } - showDialogue(keyOrText: string, name: string | undefined, delay: integer | null = 0, callback: Function, callbackDelay?: integer, promptDelay?: integer): void { - const battleScene = this.scene as BattleScene; + showDialogue(keyOrText: string, name: string | undefined, delay: number | null = 0, callback: Function, callbackDelay?: number, promptDelay?: number): void { // Get localized dialogue (if available) let hasi18n = false; let text = keyOrText; - const genderIndex = battleScene.gameData.gender ?? PlayerGender.UNSET; + const genderIndex = globalScene.gameData.gender ?? PlayerGender.UNSET; const genderStr = PlayerGender[genderIndex].toLowerCase(); if (i18next.exists(keyOrText) ) { @@ -339,7 +355,7 @@ export default class UI extends Phaser.GameObjects.Container { } } let showMessageAndCallback = () => { - hasi18n && battleScene.gameData.saveSeenDialogue(keyOrText); + hasi18n && globalScene.gameData.saveSeenDialogue(keyOrText); callback(); }; if (text.indexOf("$") > -1) { @@ -360,10 +376,8 @@ export default class UI extends Phaser.GameObjects.Container { } shouldSkipDialogue(i18nKey: string): boolean { - const battleScene = this.scene as BattleScene; - if (i18next.exists(i18nKey) ) { - if (battleScene.skipSeenDialogues && battleScene.gameData.getSeenDialogues()[i18nKey] === true) { + if (globalScene.skipSeenDialogues && globalScene.gameData.getSeenDialogues()[i18nKey] === true) { return true; } } @@ -378,9 +392,9 @@ export default class UI extends Phaser.GameObjects.Container { this.tooltipContainer.setVisible(true); this.editTooltip(title, content); if (overlap) { - (this.scene as BattleScene).uiContainer.moveAbove(this.tooltipContainer, this); + globalScene.uiContainer.moveAbove(this.tooltipContainer, this); } else { - (this.scene as BattleScene).uiContainer.moveBelow(this.tooltipContainer, this); + globalScene.uiContainer.moveBelow(this.tooltipContainer, this); } } @@ -401,9 +415,9 @@ export default class UI extends Phaser.GameObjects.Container { update(): void { if (this.tooltipContainer.visible) { - const isTouch = (this.scene as BattleScene).inputMethod === "touch"; - const pointerX = this.scene.game.input.activePointer.x; - const pointerY = this.scene.game.input.activePointer.y; + const isTouch = globalScene.inputMethod === "touch"; + const pointerX = globalScene.game.input.activePointer.x; + const pointerY = globalScene.game.input.activePointer.y; const tooltipWidth = this.tooltipBg.width; const tooltipHeight = this.tooltipBg.height; const padding = 2; @@ -414,16 +428,16 @@ export default 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 <= this.scene.game.canvas.width / 2 && pointerY <= this.scene.game.canvas.height / 2) { - x = this.scene.game.canvas.width / 6 - tooltipWidth - padding; + if (pointerX <= globalScene.game.canvas.width / 2 && pointerY <= globalScene.game.canvas.height / 2) { + x = globalScene.game.canvas.width / 6 - 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 > this.scene.game.canvas.width / 6) { + if (x + tooltipWidth + padding > globalScene.game.canvas.width / 6) { 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 > this.scene.game.canvas.height / 6) { + if (y + tooltipHeight + padding > globalScene.game.canvas.height / 6) { y = Math.max(padding, pointerY / 6 - tooltipHeight - padding); } } @@ -441,7 +455,7 @@ export default class UI extends Phaser.GameObjects.Container { } } - setCursor(cursor: integer): boolean { + setCursor(cursor: number): boolean { const changed = this.getHandler().setCursor(cursor); if (changed) { this.playSelect(); @@ -451,14 +465,14 @@ export default class UI extends Phaser.GameObjects.Container { } playSelect(): void { - (this.scene as BattleScene).playSound("ui/select"); + globalScene.playSound("ui/select"); } playError(): void { - (this.scene as BattleScene).playSound("ui/error"); + globalScene.playSound("ui/error"); } - fadeOut(duration: integer): Promise { + fadeOut(duration: number): Promise { return new Promise(resolve => { if (this.overlayActive) { return resolve(); @@ -466,7 +480,7 @@ export default class UI extends Phaser.GameObjects.Container { this.overlayActive = true; this.overlay.setAlpha(0); this.overlay.setVisible(true); - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.overlay, alpha: 1, duration: duration, @@ -476,12 +490,12 @@ export default class UI extends Phaser.GameObjects.Container { }); } - fadeIn(duration: integer): Promise { + fadeIn(duration: number): Promise { return new Promise(resolve => { if (!this.overlayActive) { return resolve(); } - this.scene.tweens.add({ + globalScene.tweens.add({ targets: this.overlay, alpha: 0, duration: duration, @@ -508,7 +522,7 @@ export default class UI extends Phaser.GameObjects.Container { } if (chainMode && this.mode && !clear) { this.modeChain.push(this.mode); - (this.scene as BattleScene).updateGameInfo(); + globalScene.updateGameInfo(); } this.mode = mode; const touchControls = document?.getElementById("touchControls"); @@ -523,7 +537,7 @@ export default class UI extends Phaser.GameObjects.Container { && (noTransitionModes.indexOf(this.mode) === -1 && noTransitionModes.indexOf(mode) === -1))) || (chainMode && noTransitionModes.indexOf(mode) === -1))) { this.fadeOut(250).then(() => { - this.scene.time.delayedCall(100, () => { + globalScene.time.delayedCall(100, () => { doSetMode(); this.fadeIn(250); }); @@ -556,11 +570,12 @@ export default class UI extends Phaser.GameObjects.Container { resetModeChain(): void { this.modeChain = []; - (this.scene as BattleScene).updateGameInfo(); + globalScene.updateGameInfo(); } revertMode(): Promise { return new Promise(resolve => { + if (!this?.modeChain?.length) { return resolve(false); } @@ -570,7 +585,7 @@ export default class UI extends Phaser.GameObjects.Container { const doRevertMode = () => { this.getHandler().clear(); this.mode = this.modeChain.pop()!; // TODO: is this bang correct? - (this.scene as BattleScene).updateGameInfo(); + globalScene.updateGameInfo(); const touchControls = document.getElementById("touchControls"); if (touchControls) { touchControls.dataset.uiMode = Mode[this.mode]; @@ -580,7 +595,7 @@ export default class UI extends Phaser.GameObjects.Container { if (noTransitionModes.indexOf(lastMode) === -1) { this.fadeOut(250).then(() => { - this.scene.time.delayedCall(100, () => { + globalScene.time.delayedCall(100, () => { doRevertMode(); this.fadeIn(250); }); @@ -612,11 +627,20 @@ export default class UI extends Phaser.GameObjects.Container { * @returns gamepad type */ public getGamepadType(): string { - const scene = this.scene as BattleScene; - if (scene.inputMethod === "gamepad") { - return scene.inputController.getConfig(scene.inputController.selectedDevice[Device.GAMEPAD]).padType; + if (globalScene.inputMethod === "gamepad") { + return globalScene.inputController.getConfig(globalScene.inputController.selectedDevice[Device.GAMEPAD]).padType; } else { - return scene.inputMethod; + return globalScene.inputMethod; } } + + /** + * Attempts to free memory held by UI handlers + * and clears menus from {@linkcode NavigationManager} to prepare for reset + */ + public freeUIData(): void { + this.handlers.forEach(h => h.destroy()); + this.handlers = []; + NavigationManager.getInstance().clearNavigationMenus(); + } } diff --git a/src/ui/unavailable-modal-ui-handler.ts b/src/ui/unavailable-modal-ui-handler.ts index 92b1c2f1b4e..36f1a191b77 100644 --- a/src/ui/unavailable-modal-ui-handler.ts +++ b/src/ui/unavailable-modal-ui-handler.ts @@ -1,10 +1,11 @@ -import BattleScene from "../battle-scene"; -import { ModalConfig, ModalUiHandler } from "./modal-ui-handler"; +import type { ModalConfig } from "./modal-ui-handler"; +import { ModalUiHandler } from "./modal-ui-handler"; import { addTextObject, TextStyle } from "./text"; -import { Mode } from "./ui"; +import type { Mode } from "./ui"; import { updateUserInfo } from "#app/account"; import * as Utils from "#app/utils"; import i18next from "i18next"; +import { globalScene } from "#app/global-scene"; export default class UnavailableModalUiHandler extends ModalUiHandler { private reconnectTimer: NodeJS.Timeout | null; @@ -16,8 +17,8 @@ export default class UnavailableModalUiHandler extends ModalUiHandler { private readonly randVarianceTime = 1000 * 10; - constructor(scene: BattleScene, mode: Mode | null = null) { - super(scene, mode); + constructor(mode: Mode | null = null) { + super(mode); this.reconnectDuration = this.minTime; } @@ -44,7 +45,7 @@ export default class UnavailableModalUiHandler extends ModalUiHandler { setup(): void { super.setup(); - const label = addTextObject(this.scene, this.getWidth() / 2, this.getHeight() / 2, i18next.t("menu:errorServerDown"), TextStyle.WINDOW, { fontSize: "48px", align: "center" }); + const label = addTextObject(this.getWidth() / 2, this.getHeight() / 2, i18next.t("menu:errorServerDown"), TextStyle.WINDOW, { fontSize: "48px", align: "center" }); label.setOrigin(0.5, 0.5); this.modalContainer.add(label); @@ -55,11 +56,11 @@ export default class UnavailableModalUiHandler extends ModalUiHandler { if (response[0] || [ 200, 400 ].includes(response[1])) { this.reconnectTimer = null; this.reconnectDuration = this.minTime; - this.scene.playSound("se/pb_bounce_1"); + globalScene.playSound("se/pb_bounce_1"); this.reconnectCallback(); } else if (response[1] === 401) { Utils.removeCookie(Utils.sessionIdKey); - this.scene.reset(true, true); + globalScene.reset(true, true); } else { this.reconnectDuration = Math.min(this.reconnectDuration * 2, this.maxTime); // Set a max delay so it isn't infinite this.reconnectTimer = diff --git a/src/utils.ts b/src/utils.ts index be0aec84ecd..56df3f3f48e 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -11,7 +11,7 @@ export function toReadableString(str: string): string { return str.replace(/\_/g, " ").split(" ").map(s => `${s.slice(0, 1)}${s.slice(1).toLowerCase()}`).join(" "); } -export function randomString(length: integer, seeded: boolean = false) { +export function randomString(length: number, seeded: boolean = false) { const characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; let result = ""; @@ -23,7 +23,7 @@ export function randomString(length: integer, seeded: boolean = false) { return result; } -export function shiftCharCodes(str: string, shiftCount: integer) { +export function shiftCharCodes(str: string, shiftCount: number) { if (!shiftCount) { shiftCount = 0; } @@ -59,7 +59,7 @@ export function randSeedGauss(stdev: number, mean: number = 0): number { return z * stdev + mean; } -export function padInt(value: integer, length: integer, padWith?: string): string { +export function padInt(value: number, length: number, padWith?: string): string { if (!padWith) { padWith = "0"; } @@ -75,7 +75,7 @@ export function padInt(value: integer, length: integer, padWith?: string): strin * @param range The amount of possible numbers * @param min The starting number */ -export function randInt(range: integer, min: integer = 0): integer { +export function randInt(range: number, min: number = 0): number { if (range === 1) { return min; } @@ -88,7 +88,7 @@ export function randInt(range: integer, min: integer = 0): integer { * @param min The minimum integer to pick, default `0` * @returns A random integer between {@linkcode min} and ({@linkcode min} + {@linkcode range} - 1) */ -export function randSeedInt(range: integer, min: integer = 0): integer { +export function randSeedInt(range: number, min: number = 0): number { if (range <= 1) { return min; } @@ -100,7 +100,7 @@ export function randSeedInt(range: integer, min: integer = 0): integer { * @param min The lowest number * @param max The highest number */ -export function randIntRange(min: integer, max: integer): integer { +export function randIntRange(min: number, max: number): number { return randInt(max - min, min); } @@ -139,7 +139,7 @@ export function randSeedShuffle(items: T[]): T[] { return newArray; } -export function getFrameMs(frameCount: integer): integer { +export function getFrameMs(frameCount: number): number { return Math.floor((1 / 60) * 1000 * frameCount); } @@ -150,7 +150,7 @@ export function getCurrentTime(): number { const secondsInHour = 3600; -export function getPlayTimeString(totalSeconds: integer): string { +export function getPlayTimeString(totalSeconds: number): string { const days = `${Math.floor(totalSeconds / (secondsInHour * 24))}`; const hours = `${Math.floor(totalSeconds % (secondsInHour * 24) / secondsInHour)}`; const minutes = `${Math.floor(totalSeconds % secondsInHour / 60)}`; @@ -176,7 +176,7 @@ export function getIvsFromId(id: number): number[] { ]; } -export function formatLargeNumber(count: integer, threshold: integer): string { +export function formatLargeNumber(count: number, threshold: number): string { if (count < threshold) { return count.toString(); } @@ -236,7 +236,7 @@ export function formatMoney(format: MoneyFormat, amount: number) { return amount.toLocaleString(); } -export function formatStat(stat: integer, forHp: boolean = false): string { +export function formatStat(stat: number, forHp: boolean = false): string { return formatLargeNumber(stat, forHp ? 100000 : 1000000); } @@ -244,7 +244,7 @@ export function getEnumKeys(enumType: any): string[] { return Object.values(enumType).filter(v => isNaN(parseInt(v!.toString()))).map(v => v!.toString()); } -export function getEnumValues(enumType: any): integer[] { +export function getEnumValues(enumType: any): number[] { return Object.values(enumType).filter(v => !isNaN(parseInt(v!.toString()))).map(v => parseInt(v!.toString())); } @@ -342,23 +342,16 @@ export class NumberHolder { } } -/** @deprecated Use {@linkcode NumberHolder} */ -export class IntegerHolder extends NumberHolder { - constructor(value: integer) { - super(value); +export class FixedInt { + public readonly value: number; + + constructor(value: number) { + this.value = value; } } -/** @deprecated Use {@linkcode NumberHolder}*/ -export class FixedInt extends IntegerHolder { - constructor(value: integer) { - super(value); - } -} - -/** @deprecated */ -export function fixedInt(value: integer): integer { - return new FixedInt(value) as unknown as integer; +export function fixedInt(value: number): number { + return new FixedInt(value) as unknown as number; } /** @@ -382,7 +375,7 @@ export function toCamelCaseString(unformattedText: string): string { return unformattedText.split(/[_ ]/).filter(f => f).map((f, i) => i ? `${f[0].toUpperCase()}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join(""); } -export function rgbToHsv(r: integer, g: integer, b: integer) { +export function rgbToHsv(r: number, g: number, b: number) { const v = Math.max(r, g, b); const c = v - Math.min(r, g, b); const h = c && ((v === r) ? (g - b) / c : ((v === g) ? 2 + (b - r) / c : 4 + (r - g) / c)); @@ -394,7 +387,7 @@ export function rgbToHsv(r: integer, g: integer, b: integer) { * @param {Array} rgb1 First RGB color in array * @param {Array} rgb2 Second RGB color in array */ -export function deltaRgb(rgb1: integer[], rgb2: integer[]): integer { +export function deltaRgb(rgb1: number[], rgb2: number[]): number { const [ r1, g1, b1 ] = rgb1; const [ r2, g2, b2 ] = rgb2; const drp2 = Math.pow(r1 - r2, 2); @@ -415,7 +408,7 @@ export function rgbHexToRgba(hex: string) { }; } -export function rgbaToInt(rgba: integer[]): integer { +export function rgbaToInt(rgba: number[]): number { return (rgba[0] << 24) + (rgba[1] << 16) + (rgba[2] << 8) + rgba[3]; } diff --git a/src/test/abilities/ability_duplication.test.ts b/test/abilities/ability_duplication.test.ts similarity index 96% rename from src/test/abilities/ability_duplication.test.ts rename to test/abilities/ability_duplication.test.ts index f9122b3259c..73092b41ce6 100644 --- a/src/test/abilities/ability_duplication.test.ts +++ b/test/abilities/ability_duplication.test.ts @@ -2,7 +2,7 @@ import { Stat } from "#app/enums/stat"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest"; diff --git a/src/test/abilities/ability_timing.test.ts b/test/abilities/ability_timing.test.ts similarity index 96% rename from src/test/abilities/ability_timing.test.ts rename to test/abilities/ability_timing.test.ts index e3264c2c1a8..85332b9cd82 100644 --- a/src/test/abilities/ability_timing.test.ts +++ b/test/abilities/ability_timing.test.ts @@ -5,7 +5,7 @@ import i18next from "#app/plugins/i18n"; import { Mode } from "#app/ui/ui"; import { Abilities } from "#enums/abilities"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/abilities/analytic.test.ts b/test/abilities/analytic.test.ts similarity index 98% rename from src/test/abilities/analytic.test.ts rename to test/abilities/analytic.test.ts index 12777c545f0..45f7bc55006 100644 --- a/src/test/abilities/analytic.test.ts +++ b/test/abilities/analytic.test.ts @@ -3,7 +3,7 @@ import { isBetween, toDmgValue } from "#app/utils"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/abilities/arena_trap.test.ts b/test/abilities/arena_trap.test.ts similarity index 98% rename from src/test/abilities/arena_trap.test.ts rename to test/abilities/arena_trap.test.ts index 12b9673080d..dda6e60e886 100644 --- a/src/test/abilities/arena_trap.test.ts +++ b/test/abilities/arena_trap.test.ts @@ -2,7 +2,7 @@ import { allAbilities } from "#app/data/ability"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; diff --git a/src/test/abilities/aroma_veil.test.ts b/test/abilities/aroma_veil.test.ts similarity index 94% rename from src/test/abilities/aroma_veil.test.ts rename to test/abilities/aroma_veil.test.ts index e74d0ff5a39..111d682aabe 100644 --- a/src/test/abilities/aroma_veil.test.ts +++ b/test/abilities/aroma_veil.test.ts @@ -1,13 +1,13 @@ import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { Abilities } from "#enums/abilities"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import { BattlerTagType } from "#enums/battler-tag-type"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerIndex } from "#app/battle"; -import { PlayerPokemon } from "#app/field/pokemon"; +import type { PlayerPokemon } from "#app/field/pokemon"; describe("Moves - Aroma Veil", () => { let phaserGame: Phaser.Game; diff --git a/src/test/abilities/aura_break.test.ts b/test/abilities/aura_break.test.ts similarity index 97% rename from src/test/abilities/aura_break.test.ts rename to test/abilities/aura_break.test.ts index 137688d1f22..230835a887e 100644 --- a/src/test/abilities/aura_break.test.ts +++ b/test/abilities/aura_break.test.ts @@ -2,7 +2,7 @@ import { allMoves } from "#app/data/move"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/abilities/battery.test.ts b/test/abilities/battery.test.ts similarity index 97% rename from src/test/abilities/battery.test.ts rename to test/abilities/battery.test.ts index 8abeca287f7..b82ffaeea7b 100644 --- a/src/test/abilities/battery.test.ts +++ b/test/abilities/battery.test.ts @@ -4,7 +4,7 @@ import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/abilities/battle_bond.test.ts b/test/abilities/battle_bond.test.ts similarity index 98% rename from src/test/abilities/battle_bond.test.ts rename to test/abilities/battle_bond.test.ts index db7ed01e7d9..38d25fa3800 100644 --- a/src/test/abilities/battle_bond.test.ts +++ b/test/abilities/battle_bond.test.ts @@ -4,7 +4,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/abilities/beast_boost.test.ts b/test/abilities/beast_boost.test.ts similarity index 98% rename from src/test/abilities/beast_boost.test.ts rename to test/abilities/beast_boost.test.ts index de31b979e32..c9877709467 100644 --- a/src/test/abilities/beast_boost.test.ts +++ b/test/abilities/beast_boost.test.ts @@ -3,7 +3,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/abilities/commander.test.ts b/test/abilities/commander.test.ts similarity index 98% rename from src/test/abilities/commander.test.ts rename to test/abilities/commander.test.ts index 99b3d50797c..1b054bbd5ea 100644 --- a/src/test/abilities/commander.test.ts +++ b/test/abilities/commander.test.ts @@ -1,14 +1,15 @@ import { BattlerIndex } from "#app/battle"; import { BattlerTagType } from "#enums/battler-tag-type"; import { PokemonAnimType } from "#enums/pokemon-anim-type"; -import { EffectiveStat, Stat } from "#enums/stat"; +import type { EffectiveStat } from "#enums/stat"; +import { Stat } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; import { WeatherType } from "#enums/weather-type"; import { MoveResult } from "#app/field/pokemon"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/abilities/competitive.test.ts b/test/abilities/competitive.test.ts similarity index 97% rename from src/test/abilities/competitive.test.ts rename to test/abilities/competitive.test.ts index ecb276a1b8d..e4baf9b9855 100644 --- a/src/test/abilities/competitive.test.ts +++ b/test/abilities/competitive.test.ts @@ -3,7 +3,7 @@ import { TurnInitPhase } from "#app/phases/turn-init-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/abilities/contrary.test.ts b/test/abilities/contrary.test.ts similarity index 97% rename from src/test/abilities/contrary.test.ts rename to test/abilities/contrary.test.ts index c838a5a098e..eaf8d885a83 100644 --- a/src/test/abilities/contrary.test.ts +++ b/test/abilities/contrary.test.ts @@ -2,7 +2,7 @@ import { Moves } from "#app/enums/moves"; import { Abilities } from "#enums/abilities"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/abilities/corrosion.test.ts b/test/abilities/corrosion.test.ts similarity index 96% rename from src/test/abilities/corrosion.test.ts rename to test/abilities/corrosion.test.ts index e607e85defb..2829c3c3b41 100644 --- a/src/test/abilities/corrosion.test.ts +++ b/test/abilities/corrosion.test.ts @@ -1,7 +1,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/abilities/costar.test.ts b/test/abilities/costar.test.ts similarity index 97% rename from src/test/abilities/costar.test.ts rename to test/abilities/costar.test.ts index 3be29ea2dcf..09b724a07ec 100644 --- a/src/test/abilities/costar.test.ts +++ b/test/abilities/costar.test.ts @@ -4,7 +4,7 @@ import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { CommandPhase } from "#app/phases/command-phase"; import { MessagePhase } from "#app/phases/message-phase"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; diff --git a/test/abilities/dancer.test.ts b/test/abilities/dancer.test.ts new file mode 100644 index 00000000000..99d8a6d588d --- /dev/null +++ b/test/abilities/dancer.test.ts @@ -0,0 +1,102 @@ +import { BattlerIndex } from "#app/battle"; +import type { MovePhase } from "#app/phases/move-phase"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Dancer", () => { + 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.battleType("double"); + }); + + // Reference Link: https://bulbapedia.bulbagarden.net/wiki/Dancer_(Ability) + + it("triggers when dance moves are used, doesn't consume extra PP", async () => { + game.override + .enemyAbility(Abilities.DANCER) + .enemySpecies(Species.MAGIKARP) + .enemyMoveset(Moves.VICTORY_DANCE); + await game.classicMode.startBattle([ Species.ORICORIO, Species.FEEBAS ]); + + const [ oricorio, feebas ] = game.scene.getPlayerField(); + game.move.changeMoveset(oricorio, [ Moves.SWORDS_DANCE, Moves.VICTORY_DANCE, Moves.SPLASH ]); + game.move.changeMoveset(feebas, [ Moves.SWORDS_DANCE, Moves.SPLASH ]); + + game.move.select(Moves.SPLASH); + game.move.select(Moves.SWORDS_DANCE, 1); + await game.setTurnOrder([ BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2 ]); + await game.phaseInterceptor.to("MovePhase"); + // immediately copies ally move + await game.phaseInterceptor.to("MovePhase", false); + let currentPhase = game.scene.getCurrentPhase() as MovePhase; + expect(currentPhase.pokemon).toBe(oricorio); + expect(currentPhase.move.moveId).toBe(Moves.SWORDS_DANCE); + await game.phaseInterceptor.to("MoveEndPhase"); + await game.phaseInterceptor.to("MovePhase"); + // immediately copies enemy move + await game.phaseInterceptor.to("MovePhase", false); + currentPhase = game.scene.getCurrentPhase() as MovePhase; + expect(currentPhase.pokemon).toBe(oricorio); + expect(currentPhase.move.moveId).toBe(Moves.VICTORY_DANCE); + await game.phaseInterceptor.to("BerryPhase"); + + // doesn't use PP if copied move is also in moveset + expect(oricorio.moveset[0]?.ppUsed).toBe(0); + expect(oricorio.moveset[1]?.ppUsed).toBe(0); + }); + + // TODO: Enable after Dancer rework to not push to move history + it.todo("should not count as the last move used for mirror move/instruct", async () => { + game.override + .moveset([ Moves.FIERY_DANCE, Moves.REVELATION_DANCE ]) + .enemyMoveset([ Moves.INSTRUCT, Moves.MIRROR_MOVE, Moves.SPLASH ]) + .enemySpecies(Species.SHUCKLE) + .enemyLevel(10); + await game.classicMode.startBattle([ Species.ORICORIO, Species.FEEBAS ]); + + const [ oricorio ] = game.scene.getPlayerField(); + const [ , shuckle2 ] = game.scene.getEnemyField(); + + game.move.select(Moves.REVELATION_DANCE, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2); + game.move.select(Moves.FIERY_DANCE, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY_2); + await game.forceEnemyMove(Moves.INSTRUCT, BattlerIndex.PLAYER); + await game.forceEnemyMove(Moves.MIRROR_MOVE, BattlerIndex.PLAYER); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY_2, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("MovePhase"); // Oricorio rev dance + await game.phaseInterceptor.to("MovePhase"); // Feebas fiery dance + await game.phaseInterceptor.to("MovePhase"); // Oricorio fiery dance (from dancer) + await game.phaseInterceptor.to("MoveEndPhase", false); + // dancer copied move doesn't appear in move history + expect(oricorio.getLastXMoves(-1)[0].move).toBe(Moves.REVELATION_DANCE); + + await game.phaseInterceptor.to("MovePhase"); // shuckle 2 mirror moves oricorio + await game.phaseInterceptor.to("MovePhase"); // calls instructed rev dance + let currentPhase = game.scene.getCurrentPhase() as MovePhase; + expect(currentPhase.pokemon).toBe(shuckle2); + expect(currentPhase.move.moveId).toBe(Moves.REVELATION_DANCE); + + await game.phaseInterceptor.to("MovePhase"); // shuckle 1 instructs oricorio + await game.phaseInterceptor.to("MovePhase"); + currentPhase = game.scene.getCurrentPhase() as MovePhase; + expect(currentPhase.pokemon).toBe(oricorio); + expect(currentPhase.move.moveId).toBe(Moves.REVELATION_DANCE); + + }); +}); diff --git a/src/test/abilities/defiant.test.ts b/test/abilities/defiant.test.ts similarity index 97% rename from src/test/abilities/defiant.test.ts rename to test/abilities/defiant.test.ts index aa8d250dad7..ce8c7bac8b3 100644 --- a/src/test/abilities/defiant.test.ts +++ b/test/abilities/defiant.test.ts @@ -3,7 +3,7 @@ import { TurnInitPhase } from "#app/phases/turn-init-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/test/abilities/desolate-land.test.ts b/test/abilities/desolate-land.test.ts new file mode 100644 index 00000000000..4aa44c97404 --- /dev/null +++ b/test/abilities/desolate-land.test.ts @@ -0,0 +1,139 @@ +import { PokeballType } from "#app/enums/pokeball"; +import { WeatherType } from "#app/enums/weather-type"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; + +describe("Abilities - Desolate Land", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset(Moves.SPLASH) + .hasPassiveAbility(true) + .enemySpecies(Species.RALTS) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + /** + * This checks that the weather has changed after the Enemy Pokemon with {@linkcode Abilities.DESOLATE_LAND} + * is forcefully moved out of the field from moves such as Roar {@linkcode Moves.ROAR} + */ + it("should lift only when all pokemon with this ability leave the field", async () => { + game.override + .battleType("double") + .enemyMoveset([ Moves.SPLASH, Moves.ROAR ]); + await game.classicMode.startBattle([ Species.MAGCARGO, Species.MAGCARGO, Species.MAGIKARP, Species.MAGIKARP ]); + + expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.HARSH_SUN); + + vi.spyOn(game.scene, "randBattleSeedInt").mockImplementation((range, min: number = 0) => { + return min; + }); + + game.move.select(Moves.SPLASH, 0, 2); + game.move.select(Moves.SPLASH, 1, 2); + + await game.forceEnemyMove(Moves.ROAR, 0); + await game.forceEnemyMove(Moves.SPLASH, 1); + + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.HARSH_SUN); + + await game.toNextTurn(); + + vi.spyOn(game.scene, "randBattleSeedInt").mockImplementation((range, min: number = 0) => { + return min + 1; + }); + + game.move.select(Moves.SPLASH, 0, 2); + game.move.select(Moves.SPLASH, 1, 2); + + await game.forceEnemyMove(Moves.ROAR, 1); + await game.forceEnemyMove(Moves.SPLASH, 0); + + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(game.scene.arena.weather?.weatherType).not.toBe(WeatherType.HARSH_SUN); + }); + + it("should lift when enemy faints", async () => { + game.override + .battleType("single") + .moveset([ Moves.SHEER_COLD ]) + .ability(Abilities.NO_GUARD) + .startingLevel(100) + .enemyLevel(1) + .enemyMoveset([ Moves.SPLASH ]) + .enemySpecies(Species.MAGCARGO) + .enemyHasPassiveAbility(true); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.HARSH_SUN); + + game.move.select(Moves.SHEER_COLD); + + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(game.scene.arena.weather?.weatherType).not.toBe(WeatherType.HARSH_SUN); + }); + + it("should lift when pokemon returns upon switching from double to single battle", async () => { + game.override + .battleType("even-doubles") + .enemyMoveset([ Moves.SPLASH, Moves.MEMENTO ]) + .startingWave(12); + await game.classicMode.startBattle([ Species.MAGIKARP, Species.MAGCARGO ]); + + expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.HARSH_SUN); + + game.move.select(Moves.SPLASH, 0, 2); + game.move.select(Moves.SPLASH, 1, 2); + await game.forceEnemyMove(Moves.MEMENTO, 0); + await game.forceEnemyMove(Moves.MEMENTO, 1); + + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.HARSH_SUN); + + await game.toNextWave(); + + expect(game.scene.arena.weather?.weatherType).not.toBe(WeatherType.HARSH_SUN); + }); + + it("should lift when enemy is captured", async () => { + game.override + .battleType("single") + .enemyMoveset([ Moves.SPLASH ]) + .enemySpecies(Species.MAGCARGO) + .enemyHasPassiveAbility(true); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.HARSH_SUN); + + game.scene.pokeballCounts[PokeballType.MASTER_BALL] = 1; + + game.doThrowPokeball(PokeballType.MASTER_BALL); + + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(game.scene.arena.weather?.weatherType).not.toBe(WeatherType.HARSH_SUN); + }); +}); diff --git a/src/test/abilities/disguise.test.ts b/test/abilities/disguise.test.ts similarity index 99% rename from src/test/abilities/disguise.test.ts rename to test/abilities/disguise.test.ts index 07a84bd7a5a..cb875e23019 100644 --- a/src/test/abilities/disguise.test.ts +++ b/test/abilities/disguise.test.ts @@ -5,7 +5,7 @@ import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/abilities/dry_skin.test.ts b/test/abilities/dry_skin.test.ts similarity index 98% rename from src/test/abilities/dry_skin.test.ts rename to test/abilities/dry_skin.test.ts index 314564df15c..f3a67f0c1fd 100644 --- a/src/test/abilities/dry_skin.test.ts +++ b/test/abilities/dry_skin.test.ts @@ -1,7 +1,7 @@ import { Species } from "#app/enums/species"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/abilities/early_bird.test.ts b/test/abilities/early_bird.test.ts similarity index 98% rename from src/test/abilities/early_bird.test.ts rename to test/abilities/early_bird.test.ts index a69290fa1e4..5889cfe2f89 100644 --- a/src/test/abilities/early_bird.test.ts +++ b/test/abilities/early_bird.test.ts @@ -4,7 +4,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/abilities/flash_fire.test.ts b/test/abilities/flash_fire.test.ts similarity index 99% rename from src/test/abilities/flash_fire.test.ts rename to test/abilities/flash_fire.test.ts index 0ca55227ea4..1c94c694b29 100644 --- a/src/test/abilities/flash_fire.test.ts +++ b/test/abilities/flash_fire.test.ts @@ -6,7 +6,7 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { StatusEffect } from "#enums/status-effect"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/abilities/flower_gift.test.ts b/test/abilities/flower_gift.test.ts similarity index 99% rename from src/test/abilities/flower_gift.test.ts rename to test/abilities/flower_gift.test.ts index 04ada598f22..99f4211eeaa 100644 --- a/src/test/abilities/flower_gift.test.ts +++ b/test/abilities/flower_gift.test.ts @@ -4,7 +4,7 @@ import { Stat } from "#app/enums/stat"; import { WeatherType } from "#app/enums/weather-type"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/abilities/forecast.test.ts b/test/abilities/forecast.test.ts similarity index 99% rename from src/test/abilities/forecast.test.ts rename to test/abilities/forecast.test.ts index 6d1f776da16..31c9942cd98 100644 --- a/src/test/abilities/forecast.test.ts +++ b/test/abilities/forecast.test.ts @@ -9,7 +9,7 @@ import { QuietFormChangePhase } from "#app/phases/quiet-form-change-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/abilities/friend_guard.test.ts b/test/abilities/friend_guard.test.ts similarity index 98% rename from src/test/abilities/friend_guard.test.ts rename to test/abilities/friend_guard.test.ts index 4ce64468c43..986bd8e7925 100644 --- a/src/test/abilities/friend_guard.test.ts +++ b/test/abilities/friend_guard.test.ts @@ -1,7 +1,7 @@ import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { Abilities } from "#enums/abilities"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { BattlerIndex } from "#app/battle"; diff --git a/src/test/abilities/galvanize.test.ts b/test/abilities/galvanize.test.ts similarity index 98% rename from src/test/abilities/galvanize.test.ts rename to test/abilities/galvanize.test.ts index 80e767866ea..f0230be3b31 100644 --- a/src/test/abilities/galvanize.test.ts +++ b/test/abilities/galvanize.test.ts @@ -5,7 +5,7 @@ import { Abilities } from "#app/enums/abilities"; import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { HitResult } from "#app/field/pokemon"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/test/abilities/good_as_gold.test.ts b/test/abilities/good_as_gold.test.ts new file mode 100644 index 00000000000..e3367d5b7f8 --- /dev/null +++ b/test/abilities/good_as_gold.test.ts @@ -0,0 +1,143 @@ +import { BattlerIndex } from "#app/battle"; +import { allAbilities } from "#app/data/ability"; +import { ArenaTagSide } from "#app/data/arena-tag"; +import { ArenaTagType } from "#app/enums/arena-tag-type"; +import { BattlerTagType } from "#app/enums/battler-tag-type"; +import { Stat } from "#app/enums/stat"; +import { StatusEffect } from "#app/enums/status-effect"; +import { WeatherType } from "#app/enums/weather-type"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; + +describe("Abilities - Good As Gold", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .ability(Abilities.GOOD_AS_GOLD) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should block normal status moves", async () => { + game.override.enemyMoveset( [ Moves.GROWL ] ); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const player = game.scene.getPlayerPokemon()!; + + game.move.select(Moves.SPLASH, 0); + + await game.phaseInterceptor.to("BerryPhase"); + + expect(player.battleData.abilitiesApplied[0]).toBe(Abilities.GOOD_AS_GOLD); + expect(player.getStatStage(Stat.ATK)).toBe(0); + }); + + it("should block memento and prevent the user from fainting", async () => { + game.override.enemyMoveset( [ Moves.MEMENTO ] ); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + game.move.select(Moves.MEMENTO); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getPlayerPokemon()!.isFainted()).toBe(false); + expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.ATK)).toBe(0); + }); + + it("should not block any status moves that target the field, one side, or all pokemon", async () => { + game.override.battleType("double"); + game.override.enemyMoveset( [ Moves.STEALTH_ROCK, Moves.HAZE ] ); + game.override.moveset([ Moves.SWORDS_DANCE, Moves.SAFEGUARD ]); + await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]); + const [ good_as_gold, ball_fetch ] = game.scene.getPlayerField(); + + // Force second pokemon to have ball fetch to isolate to a single mon. + vi.spyOn(ball_fetch, "getAbility").mockReturnValue(allAbilities[Abilities.BALL_FETCH]); + + game.move.select(Moves.SWORDS_DANCE, 0); + game.move.select(Moves.SAFEGUARD, 1); + await game.forceEnemyMove(Moves.STEALTH_ROCK); + await game.forceEnemyMove(Moves.HAZE); + await game.setTurnOrder( [ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ] ); + await game.phaseInterceptor.to("BerryPhase"); + expect(good_as_gold.getAbility().id).toBe(Abilities.GOOD_AS_GOLD); + expect(good_as_gold.getStatStage(Stat.ATK)).toBe(0); + expect(game.scene.arena.getTagOnSide(ArenaTagType.STEALTH_ROCK, ArenaTagSide.PLAYER)).toBeDefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.SAFEGUARD, ArenaTagSide.PLAYER)).toBeDefined(); + }); + + it("should not block field targeted effects in singles", async () => { + game.override.battleType("single"); + game.override.enemyMoveset( [ Moves.SPIKES ] ); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + game.move.select(Moves.SPLASH, 0); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.PLAYER)).toBeDefined(); + }); + + it("should block the ally's helping hand", async () => { + game.override.battleType("double"); + game.override.moveset([ Moves.HELPING_HAND, Moves.TACKLE ]); + await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]); + + game.move.select(Moves.HELPING_HAND, 0); + game.move.select(Moves.TACKLE, 1); + await game.phaseInterceptor.to("MoveEndPhase", true); + + expect(game.scene.getPlayerField()[1].getTag(BattlerTagType.HELPING_HAND)).toBeUndefined(); + }); + + it("should block the ally's heal bell, but only if the good as gold user is on the field", async () => { + game.override.battleType("double"); + game.override.moveset([ Moves.HEAL_BELL, Moves.SPLASH ]); + game.override.statusEffect(StatusEffect.BURN); + await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS, Species.ABRA ]); + const [ good_as_gold, ball_fetch ] = game.scene.getPlayerField(); + + // Force second pokemon to have ball fetch to isolate to a single mon. + vi.spyOn(ball_fetch, "getAbility").mockReturnValue(allAbilities[Abilities.BALL_FETCH]); + + // turn 1 + game.move.select(Moves.SPLASH, 0); + game.move.select(Moves.HEAL_BELL, 1); + await game.toNextTurn(); + expect(good_as_gold.status?.effect).toBe(StatusEffect.BURN); + + game.doSwitchPokemon(2); + game.move.select(Moves.HEAL_BELL, 0); + await game.toNextTurn(); + expect(good_as_gold.status?.effect).toBeUndefined(); + }); + + it("should not block field targeted effects like rain dance", async () => { + game.override.battleType("single"); + game.override.enemyMoveset( [ Moves.RAIN_DANCE ] ); + game.override.weather(WeatherType.NONE); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + game.move.select(Moves.SPLASH, 0); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.RAIN); + }); +}); diff --git a/src/test/abilities/gorilla_tactics.test.ts b/test/abilities/gorilla_tactics.test.ts similarity index 98% rename from src/test/abilities/gorilla_tactics.test.ts rename to test/abilities/gorilla_tactics.test.ts index 8aee365eb8f..e97bca6a725 100644 --- a/src/test/abilities/gorilla_tactics.test.ts +++ b/test/abilities/gorilla_tactics.test.ts @@ -3,7 +3,7 @@ import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { Stat } from "#app/enums/stat"; import { Abilities } from "#enums/abilities"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/abilities/gulp_missile.test.ts b/test/abilities/gulp_missile.test.ts similarity index 99% rename from src/test/abilities/gulp_missile.test.ts rename to test/abilities/gulp_missile.test.ts index 01b68d0c89d..d34e86ddc08 100644 --- a/src/test/abilities/gulp_missile.test.ts +++ b/test/abilities/gulp_missile.test.ts @@ -1,12 +1,12 @@ import { BattlerIndex } from "#app/battle"; -import Pokemon from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; import { Abilities } from "#enums/abilities"; import { BattlerTagType } from "#enums/battler-tag-type"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/abilities/heatproof.test.ts b/test/abilities/heatproof.test.ts similarity index 97% rename from src/test/abilities/heatproof.test.ts rename to test/abilities/heatproof.test.ts index bf4e99ce467..6c41460535f 100644 --- a/src/test/abilities/heatproof.test.ts +++ b/test/abilities/heatproof.test.ts @@ -4,7 +4,7 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { toDmgValue } from "#app/utils"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/abilities/honey_gather.test.ts b/test/abilities/honey_gather.test.ts similarity index 97% rename from src/test/abilities/honey_gather.test.ts rename to test/abilities/honey_gather.test.ts index fc9d6cdd150..a1cad453843 100644 --- a/src/test/abilities/honey_gather.test.ts +++ b/test/abilities/honey_gather.test.ts @@ -3,7 +3,7 @@ import { Command } from "#app/ui/command-ui-handler"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/abilities/hustle.test.ts b/test/abilities/hustle.test.ts similarity index 98% rename from src/test/abilities/hustle.test.ts rename to test/abilities/hustle.test.ts index 08a441315fb..c92bc5cbbd3 100644 --- a/src/test/abilities/hustle.test.ts +++ b/test/abilities/hustle.test.ts @@ -3,7 +3,7 @@ import { Abilities } from "#app/enums/abilities"; import { Stat } from "#app/enums/stat"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/abilities/hyper_cutter.test.ts b/test/abilities/hyper_cutter.test.ts similarity index 96% rename from src/test/abilities/hyper_cutter.test.ts rename to test/abilities/hyper_cutter.test.ts index e51fef6bd49..c8c4c21c98f 100644 --- a/src/test/abilities/hyper_cutter.test.ts +++ b/test/abilities/hyper_cutter.test.ts @@ -2,7 +2,7 @@ import { Stat } from "#enums/stat"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/abilities/ice_face.test.ts b/test/abilities/ice_face.test.ts similarity index 99% rename from src/test/abilities/ice_face.test.ts rename to test/abilities/ice_face.test.ts index e31bee1c721..e4339cb8a28 100644 --- a/src/test/abilities/ice_face.test.ts +++ b/test/abilities/ice_face.test.ts @@ -8,7 +8,7 @@ import { Abilities } from "#enums/abilities"; import { BattlerTagType } from "#enums/battler-tag-type"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/abilities/illuminate.test.ts b/test/abilities/illuminate.test.ts similarity index 96% rename from src/test/abilities/illuminate.test.ts rename to test/abilities/illuminate.test.ts index 4f7d3d83b51..c4fbcd2c7a4 100644 --- a/src/test/abilities/illuminate.test.ts +++ b/test/abilities/illuminate.test.ts @@ -1,7 +1,7 @@ import { Stat } from "#app/enums/stat"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest"; diff --git a/src/test/abilities/imposter.test.ts b/test/abilities/imposter.test.ts similarity index 90% rename from src/test/abilities/imposter.test.ts rename to test/abilities/imposter.test.ts index 3445b3b322c..d73b77feda9 100644 --- a/src/test/abilities/imposter.test.ts +++ b/test/abilities/imposter.test.ts @@ -1,6 +1,6 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import Phaser from "phaser"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Moves } from "#enums/moves"; @@ -116,4 +116,15 @@ describe("Abilities - Imposter", () => { } }); }); + + it("should activate its ability if it copies one that activates on summon", async () => { + game.override.enemyAbility(Abilities.INTIMIDATE); + + await game.classicMode.startBattle([ Species.DITTO ]); + + game.move.select(Moves.TACKLE); + await game.phaseInterceptor.to("MoveEndPhase"); + + expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.ATK)).toBe(-1); + }); }); diff --git a/src/test/abilities/infiltrator.test.ts b/test/abilities/infiltrator.test.ts similarity index 97% rename from src/test/abilities/infiltrator.test.ts rename to test/abilities/infiltrator.test.ts index 01c5cef7796..c614bbe4474 100644 --- a/src/test/abilities/infiltrator.test.ts +++ b/test/abilities/infiltrator.test.ts @@ -7,7 +7,7 @@ import { StatusEffect } from "#enums/status-effect"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -75,7 +75,7 @@ describe("Abilities - Infiltrator", () => { }); // TODO: fix this interaction to pass this test - it.skip("should bypass the target's Mist", async () => { + it.todo("should bypass the target's Mist", async () => { await game.classicMode.startBattle([ Species.MAGIKARP ]); const player = game.scene.getPlayerPokemon()!; diff --git a/src/test/abilities/intimidate.test.ts b/test/abilities/intimidate.test.ts similarity index 97% rename from src/test/abilities/intimidate.test.ts rename to test/abilities/intimidate.test.ts index d5a37d06593..eab59e7c1a2 100644 --- a/src/test/abilities/intimidate.test.ts +++ b/test/abilities/intimidate.test.ts @@ -1,9 +1,9 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import Phaser from "phaser"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Mode } from "#app/ui/ui"; import { Stat } from "#enums/stat"; -import { getMovePosition } from "#test/utils/gameManagerUtils"; +import { getMovePosition } from "#test/testUtils/gameManagerUtils"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/src/test/abilities/intrepid_sword.test.ts b/test/abilities/intrepid_sword.test.ts similarity index 95% rename from src/test/abilities/intrepid_sword.test.ts rename to test/abilities/intrepid_sword.test.ts index 7bf0654276c..0f4305d38b4 100644 --- a/src/test/abilities/intrepid_sword.test.ts +++ b/test/abilities/intrepid_sword.test.ts @@ -1,5 +1,5 @@ import { Stat } from "#enums/stat"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { CommandPhase } from "#app/phases/command-phase"; import { Abilities } from "#enums/abilities"; import { Species } from "#enums/species"; diff --git a/src/test/abilities/libero.test.ts b/test/abilities/libero.test.ts similarity index 97% rename from src/test/abilities/libero.test.ts rename to test/abilities/libero.test.ts index e7bc9eeeb63..46093019daa 100644 --- a/src/test/abilities/libero.test.ts +++ b/test/abilities/libero.test.ts @@ -1,7 +1,7 @@ import { allMoves } from "#app/data/move"; import { Type } from "#enums/type"; import { Weather } from "#app/data/weather"; -import { PlayerPokemon } from "#app/field/pokemon"; +import type { PlayerPokemon } from "#app/field/pokemon"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Abilities } from "#enums/abilities"; import { BattlerTagType } from "#enums/battler-tag-type"; @@ -9,9 +9,9 @@ import { Biome } from "#enums/biome"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { WeatherType } from "#enums/weather-type"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; describe("Abilities - Libero", () => { @@ -54,6 +54,7 @@ describe("Abilities - Libero", () => { }, ); + // Test for Gen9+ functionality, we are using previous funcionality test.skip( "ability applies only once per switch in", async () => { @@ -257,7 +258,7 @@ describe("Abilities - Libero", () => { const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - vi.spyOn(leadPokemon, "isTerastallized").mockReturnValue(true); + leadPokemon.isTerastallized = true; game.move.select(Moves.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); diff --git a/test/abilities/magic_bounce.test.ts b/test/abilities/magic_bounce.test.ts new file mode 100644 index 00000000000..9bb7b55bc72 --- /dev/null +++ b/test/abilities/magic_bounce.test.ts @@ -0,0 +1,351 @@ +import { BattlerIndex } from "#app/battle"; +import { allAbilities } from "#app/data/ability"; +import { ArenaTagSide } from "#app/data/arena-tag"; +import { allMoves } from "#app/data/move"; +import { ArenaTagType } from "#app/enums/arena-tag-type"; +import { BattlerTagType } from "#app/enums/battler-tag-type"; +import { Stat } from "#app/enums/stat"; +import { StatusEffect } from "#app/enums/status-effect"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; + +describe("Abilities - Magic Bounce", () => { + 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(Abilities.BALL_FETCH) + .battleType("single") + .moveset( [ Moves.GROWL, Moves.SPLASH ]) + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.MAGIC_BOUNCE) + .enemyMoveset(Moves.SPLASH); + }); + + it("should reflect basic status moves", async () => { + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + game.move.select(Moves.GROWL); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(-1); + }); + + it("should not bounce moves while the target is in the semi-invulnerable state", async () => { + await game.classicMode.startBattle([ Species.MAGIKARP ]); + game.override.moveset([ Moves.GROWL ]); + game.override.enemyMoveset( [ Moves.FLY ]); + + game.move.select(Moves.GROWL); + await game.forceEnemyMove(Moves.FLY); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(0); + }); + + it("should individually bounce back multi-target moves", async () => { + game.override.battleType("double"); + game.override.moveset([ Moves.GROWL, Moves.SPLASH ]); + await game.classicMode.startBattle([ Species.MAGIKARP, Species.MAGIKARP ]); + + game.move.select(Moves.GROWL, 0); + game.move.select(Moves.SPLASH, 1); + await game.phaseInterceptor.to("BerryPhase"); + + const user = game.scene.getPlayerField()[0]; + expect(user.getStatStage(Stat.ATK)).toBe(-2); + }); + + it("should still bounce back a move that would otherwise fail", async () => { + await game.classicMode.startBattle([ Species.MAGIKARP ]); + game.scene.getEnemyPokemon()?.setStatStage(Stat.ATK, -6); + game.override.moveset([ Moves.GROWL ]); + + game.move.select(Moves.GROWL); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(-1); + }); + + it("should not bounce back a move that was just bounced", async () => { + game.override.ability(Abilities.MAGIC_BOUNCE); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + game.move.select(Moves.GROWL); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(-1); + }); + + it("should receive the stat change after reflecting a move back to a mirror armor user", async () => { + game.override.ability(Abilities.MIRROR_ARMOR); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + game.move.select(Moves.GROWL); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(-1); + }); + + it("should not bounce back a move from a mold breaker user", async () => { + game.override.ability(Abilities.MOLD_BREAKER); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + game.move.select(Moves.GROWL); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(-1); + }); + + it("should bounce back a spread status move against both pokemon", async () => { + game.override.battleType("double"); + game.override.moveset([ Moves.GROWL, Moves.SPLASH ]); + game.override.enemyMoveset([ Moves.SPLASH ]); + await game.classicMode.startBattle([ Species.MAGIKARP, Species.MAGIKARP ]); + + game.move.select(Moves.GROWL, 0); + game.move.select(Moves.SPLASH, 1); + + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getPlayerField().every(p => p.getStatStage(Stat.ATK) === -2)).toBeTruthy(); + }); + + it("should only bounce spikes back once in doubles when both targets have magic bounce", async () => { + game.override.battleType("double"); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + game.override.moveset([ Moves.SPIKES ]); + + game.move.select(Moves.SPIKES); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.PLAYER)!["layers"]).toBe(1); + expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.ENEMY)).toBeUndefined(); + }); + + it("should bounce spikes even when the target is protected", async () => { + game.override.moveset([ Moves.SPIKES ]); + game.override.enemyMoveset([ Moves.PROTECT ]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + game.move.select(Moves.SPIKES); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.PLAYER)!["layers"]).toBe(1); + }); + + it("should not bounce spikes when the target is in the semi-invulnerable state", async () => { + game.override.moveset([ Moves.SPIKES ]); + game.override.enemyMoveset([ Moves.FLY ]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + game.move.select(Moves.SPIKES); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.ENEMY)!["layers"]).toBe(1); + }); + + it("should not bounce back curse", async() => { + game.override.starterSpecies(Species.GASTLY); + await game.classicMode.startBattle([ Species.GASTLY ]); + game.override.moveset([ Moves.CURSE ]); + + game.move.select(Moves.CURSE); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getEnemyPokemon()!.getTag(BattlerTagType.CURSED)).toBeDefined(); + }); + + it("should not cause encore to be interrupted after bouncing", async () => { + game.override.moveset([ Moves.SPLASH, Moves.GROWL, Moves.ENCORE ]); + game.override.enemyMoveset([ Moves.TACKLE, Moves.GROWL ]); + // game.override.ability(Abilities.MOLD_BREAKER); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + const playerPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.scene.getEnemyPokemon()!; + + // Give the player MOLD_BREAKER for this turn to bypass Magic Bounce. + vi.spyOn(playerPokemon, "getAbility").mockReturnValue(allAbilities[Abilities.MOLD_BREAKER]); + + // turn 1 + game.move.select(Moves.ENCORE); + await game.forceEnemyMove(Moves.TACKLE); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextTurn(); + expect(enemyPokemon.getTag(BattlerTagType.ENCORE)!["moveId"]).toBe(Moves.TACKLE); + + // turn 2 + vi.spyOn(playerPokemon, "getAbility").mockRestore(); + game.move.select(Moves.GROWL); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("BerryPhase"); + expect(enemyPokemon.getTag(BattlerTagType.ENCORE)!["moveId"]).toBe(Moves.TACKLE); + expect(enemyPokemon.getLastXMoves()[0].move).toBe(Moves.TACKLE); + + }); + + // TODO: encore is failing if the last move was virtual. + it.todo("should not cause the bounced move to count for encore", async () => { + game.override.moveset([ Moves.SPLASH, Moves.GROWL, Moves.ENCORE ]); + game.override.enemyMoveset([ Moves.GROWL, Moves.TACKLE ]); + game.override.enemyAbility(Abilities.MAGIC_BOUNCE); + + await game.classicMode.startBattle([ Species.MAGIKARP ]); + const playerPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.scene.getEnemyPokemon()!; + + // turn 1 + game.move.select(Moves.GROWL); + await game.forceEnemyMove(Moves.TACKLE); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextTurn(); + + // Give the player MOLD_BREAKER for this turn to bypass Magic Bounce. + vi.spyOn(playerPokemon, "getAbility").mockReturnValue(allAbilities[Abilities.MOLD_BREAKER]); + + // turn 2 + game.move.select(Moves.ENCORE); + await game.forceEnemyMove(Moves.TACKLE); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("BerryPhase"); + expect(enemyPokemon.getTag(BattlerTagType.ENCORE)!["moveId"]).toBe(Moves.TACKLE); + expect(enemyPokemon.getLastXMoves()[0].move).toBe(Moves.TACKLE); + }); + + // TODO: stomping tantrum should consider moves that were bounced. + it.todo("should cause stomping tantrum to double in power when the last move was bounced", async () => { + game.override.battleType("single"); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + game.override.moveset([ Moves.STOMPING_TANTRUM, Moves.CHARM ]); + + const stomping_tantrum = allMoves[Moves.STOMPING_TANTRUM]; + vi.spyOn(stomping_tantrum, "calculateBattlePower"); + + game.move.select(Moves.CHARM); + await game.toNextTurn(); + + game.move.select(Moves.STOMPING_TANTRUM); + await game.phaseInterceptor.to("BerryPhase"); + expect(stomping_tantrum.calculateBattlePower).toHaveReturnedWith(150); + }); + + // TODO: stomping tantrum should consider moves that were bounced. + it.todo("should properly cause the enemy's stomping tantrum to be doubled in power after bouncing and failing", async () => { + game.override.enemyMoveset([ Moves.STOMPING_TANTRUM, Moves.SPLASH, Moves.CHARM ]); + await game.classicMode.startBattle([ Species.BULBASAUR ]); + + const stomping_tantrum = allMoves[Moves.STOMPING_TANTRUM]; + const enemy = game.scene.getEnemyPokemon()!; + vi.spyOn(stomping_tantrum, "calculateBattlePower"); + + game.move.select(Moves.SPORE); + await game.forceEnemyMove(Moves.CHARM); + await game.phaseInterceptor.to("TurnEndPhase"); + expect(enemy.getLastXMoves(1)[0].result).toBe("success"); + + await game.phaseInterceptor.to("BerryPhase"); + expect(stomping_tantrum.calculateBattlePower).toHaveReturnedWith(75); + + await game.toNextTurn(); + game.move.select(Moves.GROWL); + await game.phaseInterceptor.to("BerryPhase"); + expect(stomping_tantrum.calculateBattlePower).toHaveReturnedWith(75); + }); + + it("should respect immunities when bouncing a move", async () => { + vi.spyOn(allMoves[Moves.THUNDER_WAVE], "accuracy", "get").mockReturnValue(100); + game.override.moveset([ Moves.THUNDER_WAVE, Moves.GROWL ]); + game.override.ability(Abilities.SOUNDPROOF); + await game.classicMode.startBattle([ Species.PHANPY ]); + + // Turn 1 - thunder wave immunity test + game.move.select(Moves.THUNDER_WAVE); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); + + // Turn 2 - soundproof immunity test + game.move.select(Moves.GROWL); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(0); + }); + + it("should bounce back a move before the accuracy check", async () => { + game.override.moveset([ Moves.SPORE ]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const attacker = game.scene.getPlayerPokemon()!; + + vi.spyOn(attacker, "getAccuracyMultiplier").mockReturnValue(0.0); + game.move.select(Moves.SPORE); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getPlayerPokemon()!.status?.effect).toBe(StatusEffect.SLEEP); + }); + + it("should take the accuracy of the magic bounce user into account", async () => { + game.override.moveset([ Moves.SPORE ]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + const opponent = game.scene.getEnemyPokemon()!; + + vi.spyOn(opponent, "getAccuracyMultiplier").mockReturnValue(0); + game.move.select(Moves.SPORE); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); + }); + + it("should always apply the leftmost available target's magic bounce when bouncing moves like sticky webs in doubles", async () => { + game.override.battleType("double"); + game.override.moveset([ Moves.STICKY_WEB, Moves.SPLASH, Moves.TRICK_ROOM ]); + + await game.classicMode.startBattle([ Species.MAGIKARP, Species.MAGIKARP ]); + const [ enemy_1, enemy_2 ] = game.scene.getEnemyField(); + // set speed just incase logic erroneously checks for speed order + enemy_1.setStat(Stat.SPD, enemy_2.getStat(Stat.SPD) + 1); + + // turn 1 + game.move.select(Moves.STICKY_WEB, 0); + game.move.select(Moves.TRICK_ROOM, 1); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(game.scene.arena.getTagOnSide(ArenaTagType.STICKY_WEB, ArenaTagSide.PLAYER)?.getSourcePokemon()?.getBattlerIndex()).toBe(BattlerIndex.ENEMY); + game.scene.arena.removeTagOnSide(ArenaTagType.STICKY_WEB, ArenaTagSide.PLAYER, true); + + // turn 2 + game.move.select(Moves.STICKY_WEB, 0); + game.move.select(Moves.TRICK_ROOM, 1); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.arena.getTagOnSide(ArenaTagType.STICKY_WEB, ArenaTagSide.PLAYER)?.getSourcePokemon()?.getBattlerIndex()).toBe(BattlerIndex.ENEMY); + }); + + it("should not bounce back status moves that hit through semi-invulnerable states", async () => { + game.override.moveset([ Moves.TOXIC, Moves.CHARM ]); + await game.classicMode.startBattle([ Species.BULBASAUR ]); + game.move.select(Moves.TOXIC); + await game.forceEnemyMove(Moves.FLY); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getEnemyPokemon()!.status?.effect).toBe(StatusEffect.TOXIC); + expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); + + game.override.ability(Abilities.NO_GUARD); + game.move.select(Moves.CHARM); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(-2); + expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(0); + }); +}); + diff --git a/src/test/abilities/magic_guard.test.ts b/test/abilities/magic_guard.test.ts similarity index 99% rename from src/test/abilities/magic_guard.test.ts rename to test/abilities/magic_guard.test.ts index 7c038354748..a2a88915419 100644 --- a/src/test/abilities/magic_guard.test.ts +++ b/test/abilities/magic_guard.test.ts @@ -8,7 +8,7 @@ import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import { WeatherType } from "#enums/weather-type"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/abilities/mimicry.test.ts b/test/abilities/mimicry.test.ts similarity index 98% rename from src/test/abilities/mimicry.test.ts rename to test/abilities/mimicry.test.ts index 29aa1d649d3..75990c89707 100644 --- a/src/test/abilities/mimicry.test.ts +++ b/test/abilities/mimicry.test.ts @@ -2,7 +2,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { Type } from "#enums/type"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/test/abilities/mirror_armor.test.ts b/test/abilities/mirror_armor.test.ts new file mode 100644 index 00000000000..1d103c45be1 --- /dev/null +++ b/test/abilities/mirror_armor.test.ts @@ -0,0 +1,315 @@ +import { Stat } from "#enums/stat"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import { BattlerIndex } from "#app/battle"; + +// TODO: When Magic Bounce is implemented, make a test for its interaction with mirror guard, use screech + +describe("Ability - Mirror Armor", () => { + 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.battleType("single") + .enemySpecies(Species.RATTATA) + .enemyMoveset([ Moves.SPLASH, Moves.STICKY_WEB, Moves.TICKLE, Moves.OCTOLOCK ]) + .enemyAbility(Abilities.BALL_FETCH) + .startingLevel(2000) + .moveset([ Moves.SPLASH, Moves.STICKY_WEB, Moves.TICKLE, Moves.OCTOLOCK ]) + .ability(Abilities.BALL_FETCH); + }); + + it("Player side + single battle Intimidate - opponent loses stats", async () => { + game.override.ability(Abilities.MIRROR_ARMOR); + game.override.enemyAbility(Abilities.INTIMIDATE); + await game.classicMode.startBattle([ Species.BULBASAUR ]); + + const enemyPokemon = game.scene.getEnemyPokemon()!; + const userPokemon = game.scene.getPlayerPokemon()!; + + // Enemy has intimidate, enemy should lose -1 atk + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + await game.toNextTurn(); + + expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(-1); + expect(userPokemon.getStatStage(Stat.ATK)).toBe(0); + }); + + it("Enemy side + single battle Intimidate - player loses stats", async () => { + game.override.enemyAbility(Abilities.MIRROR_ARMOR); + game.override.ability(Abilities.INTIMIDATE); + await game.classicMode.startBattle([ Species.BULBASAUR ]); + + const enemyPokemon = game.scene.getEnemyPokemon()!; + const userPokemon = game.scene.getPlayerPokemon()!; + + // Enemy has intimidate, enemy should lose -1 atk + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + await game.toNextTurn(); + + expect(userPokemon.getStatStage(Stat.ATK)).toBe(-1); + expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(0); + }); + + it("Player side + double battle Intimidate - opponents each lose -2 atk", async () => { + game.override.battleType("double"); + game.override.ability(Abilities.MIRROR_ARMOR); + game.override.enemyAbility(Abilities.INTIMIDATE); + await game.classicMode.startBattle([ Species.BULBASAUR, Species.CHARMANDER ]); + + const [ enemy1, enemy2 ] = game.scene.getEnemyField(); + const [ player1, player2 ] = game.scene.getPlayerField(); + + // Enemy has intimidate, enemy should lose -2 atk each + game.move.select(Moves.SPLASH); + game.move.select(Moves.SPLASH, 1); + await game.forceEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + await game.forceEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER_2); + await game.toNextTurn(); + + expect(enemy1.getStatStage(Stat.ATK)).toBe(-2); + expect(enemy2.getStatStage(Stat.ATK)).toBe(-2); + expect(player1.getStatStage(Stat.ATK)).toBe(0); + expect(player2.getStatStage(Stat.ATK)).toBe(0); + }); + + it("Enemy side + double battle Intimidate - players each lose -2 atk", async () => { + game.override.battleType("double"); + game.override.enemyAbility(Abilities.MIRROR_ARMOR); + game.override.ability(Abilities.INTIMIDATE); + await game.classicMode.startBattle([ Species.BULBASAUR, Species.CHARMANDER ]); + + const [ enemy1, enemy2 ] = game.scene.getEnemyField(); + const [ player1, player2 ] = game.scene.getPlayerField(); + + // Enemy has intimidate, enemy should lose -1 atk + game.move.select(Moves.SPLASH); + game.move.select(Moves.SPLASH, 1); + await game.forceEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + await game.forceEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER_2); + await game.toNextTurn(); + + expect(enemy1.getStatStage(Stat.ATK)).toBe(0); + expect(enemy2.getStatStage(Stat.ATK)).toBe(0); + expect(player1.getStatStage(Stat.ATK)).toBe(-2); + expect(player2.getStatStage(Stat.ATK)).toBe(-2); + }); + + it("Player side + single battle Intimidate + Tickle - opponent loses stats", async () => { + game.override.ability(Abilities.MIRROR_ARMOR); + game.override.enemyAbility(Abilities.INTIMIDATE); + await game.classicMode.startBattle([ Species.BULBASAUR ]); + + const enemyPokemon = game.scene.getEnemyPokemon()!; + const userPokemon = game.scene.getPlayerPokemon()!; + + // Enemy has intimidate and uses tickle, enemy receives -2 atk and -1 defense + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.TICKLE, BattlerIndex.PLAYER); + await game.toNextTurn(); + + expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(-1); + expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(-2); + expect(userPokemon.getStatStage(Stat.ATK)).toBe(0); + expect(userPokemon.getStatStage(Stat.DEF)).toBe(0); + }); + + it("Player side + double battle Intimidate + Tickle - opponents each lose -3 atk, -1 def", async () => { + game.override.battleType("double"); + game.override.ability(Abilities.MIRROR_ARMOR); + game.override.enemyAbility(Abilities.INTIMIDATE); + await game.classicMode.startBattle([ Species.BULBASAUR, Species.CHARMANDER ]); + + const [ enemy1, enemy2 ] = game.scene.getEnemyField(); + const [ player1, player2 ] = game.scene.getPlayerField(); + + game.move.select(Moves.SPLASH); + game.move.select(Moves.SPLASH, 1); + await game.forceEnemyMove(Moves.TICKLE, BattlerIndex.PLAYER); + await game.forceEnemyMove(Moves.TICKLE, BattlerIndex.PLAYER_2); + await game.toNextTurn(); + + expect(player1.getStatStage(Stat.ATK)).toBe(0); + expect(player1.getStatStage(Stat.DEF)).toBe(0); + expect(player2.getStatStage(Stat.ATK)).toBe(0); + expect(player2.getStatStage(Stat.DEF)).toBe(0); + expect(enemy1.getStatStage(Stat.ATK)).toBe(-3); + expect(enemy1.getStatStage(Stat.DEF)).toBe(-1); + expect(enemy2.getStatStage(Stat.ATK)).toBe(-3); + expect(enemy2.getStatStage(Stat.DEF)).toBe(-1); + + }); + + it("Enemy side + single battle Intimidate + Tickle - player loses stats", async () => { + game.override.enemyAbility(Abilities.MIRROR_ARMOR); + game.override.ability(Abilities.INTIMIDATE); + await game.classicMode.startBattle([ Species.BULBASAUR ]); + + const enemyPokemon = game.scene.getEnemyPokemon()!; + const userPokemon = game.scene.getPlayerPokemon()!; + + // Enemy has intimidate and uses tickle, enemy receives -2 atk and -1 defense + game.move.select(Moves.TICKLE); + await game.forceEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + await game.toNextTurn(); + + expect(userPokemon.getStatStage(Stat.DEF)).toBe(-1); + expect(userPokemon.getStatStage(Stat.ATK)).toBe(-2); + expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(0); + expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(0); + }); + + it("Player side + single battle Intimidate + oppoenent has white smoke - no one loses stats", async () => { + game.override.enemyAbility(Abilities.WHITE_SMOKE); + game.override.ability(Abilities.MIRROR_ARMOR); + await game.classicMode.startBattle([ Species.BULBASAUR ]); + + const enemyPokemon = game.scene.getEnemyPokemon()!; + const userPokemon = game.scene.getPlayerPokemon()!; + + // Enemy has intimidate and uses tickle, enemy has white smoke, no one loses stats + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.TICKLE, BattlerIndex.PLAYER); + await game.toNextTurn(); + + expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(0); + expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(0); + expect(userPokemon.getStatStage(Stat.ATK)).toBe(0); + expect(userPokemon.getStatStage(Stat.DEF)).toBe(0); + }); + + it("Enemy side + single battle Intimidate + player has white smoke - no one loses stats", async () => { + game.override.ability(Abilities.WHITE_SMOKE); + game.override.enemyAbility(Abilities.MIRROR_ARMOR); + await game.classicMode.startBattle([ Species.BULBASAUR ]); + + const enemyPokemon = game.scene.getEnemyPokemon()!; + const userPokemon = game.scene.getPlayerPokemon()!; + + // Enemy has intimidate and uses tickle, enemy has white smoke, no one loses stats + game.move.select(Moves.TICKLE); + await game.forceEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + await game.toNextTurn(); + + expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(0); + expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(0); + expect(userPokemon.getStatStage(Stat.ATK)).toBe(0); + expect(userPokemon.getStatStage(Stat.DEF)).toBe(0); + }); + + it("Player side + single battle + opponent uses octolock - does not interact with mirror armor, player loses stats", async () => { + game.override.ability(Abilities.MIRROR_ARMOR); + await game.classicMode.startBattle([ Species.BULBASAUR ]); + + const enemyPokemon = game.scene.getEnemyPokemon()!; + const userPokemon = game.scene.getPlayerPokemon()!; + + // Enemy uses octolock, player loses stats at end of turn + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.OCTOLOCK, BattlerIndex.PLAYER); + await game.toNextTurn(); + + expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(0); + expect(enemyPokemon.getStatStage(Stat.SPDEF)).toBe(0); + expect(userPokemon.getStatStage(Stat.DEF)).toBe(-1); + expect(userPokemon.getStatStage(Stat.SPDEF)).toBe(-1); + }); + + it("Enemy side + single battle + player uses octolock - does not interact with mirror armor, opponent loses stats", async () => { + game.override.enemyAbility(Abilities.MIRROR_ARMOR); + await game.classicMode.startBattle([ Species.BULBASAUR ]); + + const enemyPokemon = game.scene.getEnemyPokemon()!; + const userPokemon = game.scene.getPlayerPokemon()!; + + // Player uses octolock, enemy loses stats at end of turn + game.move.select(Moves.OCTOLOCK); + await game.forceEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + await game.toNextTurn(); + + expect(userPokemon.getStatStage(Stat.DEF)).toBe(0); + expect(userPokemon.getStatStage(Stat.SPDEF)).toBe(0); + expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(-1); + expect(enemyPokemon.getStatStage(Stat.SPDEF)).toBe(-1); + }); + + it("Both sides have mirror armor - does not loop, player loses attack", async () => { + game.override.enemyAbility(Abilities.MIRROR_ARMOR); + game.override.ability(Abilities.MIRROR_ARMOR); + game.override.ability(Abilities.INTIMIDATE); + await game.classicMode.startBattle([ Species.BULBASAUR ]); + + const enemyPokemon = game.scene.getEnemyPokemon()!; + const userPokemon = game.scene.getPlayerPokemon()!; + + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + await game.toNextTurn(); + + expect(userPokemon.getStatStage(Stat.ATK)).toBe(-1); + expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(0); + }); + + it("Single battle + sticky web applied player side - player switches out and enemy should lose -1 speed", async () => { + game.override.ability(Abilities.MIRROR_ARMOR); + await game.classicMode.startBattle([ Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE ]); + + const enemyPokemon = game.scene.getEnemyPokemon()!; + const userPokemon = game.scene.getPlayerPokemon()!; + + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.STICKY_WEB, BattlerIndex.PLAYER); + await game.toNextTurn(); + + game.doSwitchPokemon(1); + await game.forceEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + await game.toNextTurn(); + + expect(userPokemon.getStatStage(Stat.SPD)).toBe(0); + expect(enemyPokemon.getStatStage(Stat.SPD)).toBe(-1); + }); + + it("Double battle + sticky web applied player side - player switches out and enemy 1 should lose -1 speed", async () => { + game.override.battleType("double"); + game.override.ability(Abilities.MIRROR_ARMOR); + await game.classicMode.startBattle([ Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE ]); + + const [ enemy1, enemy2 ] = game.scene.getEnemyField(); + const [ player1, player2 ] = game.scene.getPlayerField(); + + game.move.select(Moves.SPLASH); + game.move.select(Moves.SPLASH, 1); + await game.forceEnemyMove(Moves.STICKY_WEB, BattlerIndex.PLAYER); + await game.forceEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER_2); + await game.toNextTurn(); + + game.doSwitchPokemon(2); + game.move.select(Moves.SPLASH, 1); + await game.forceEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + await game.forceEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER_2); + await game.toNextTurn(); + + expect(enemy1.getStatStage(Stat.SPD)).toBe(-1); + expect(enemy2.getStatStage(Stat.SPD)).toBe(0); + expect(player1.getStatStage(Stat.SPD)).toBe(0); + expect(player2.getStatStage(Stat.SPD)).toBe(0); + }); +}); diff --git a/src/test/abilities/moody.test.ts b/test/abilities/moody.test.ts similarity index 98% rename from src/test/abilities/moody.test.ts rename to test/abilities/moody.test.ts index 166f69b0fe3..64c2c7d8a07 100644 --- a/src/test/abilities/moody.test.ts +++ b/test/abilities/moody.test.ts @@ -2,7 +2,7 @@ import { BATTLE_STATS, EFFECTIVE_STATS } from "#enums/stat"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/abilities/moxie.test.ts b/test/abilities/moxie.test.ts similarity index 97% rename from src/test/abilities/moxie.test.ts rename to test/abilities/moxie.test.ts index 5f337fedabb..c518c55671f 100644 --- a/src/test/abilities/moxie.test.ts +++ b/test/abilities/moxie.test.ts @@ -1,5 +1,5 @@ import { Stat } from "#enums/stat"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/abilities/mummy.test.ts b/test/abilities/mummy.test.ts new file mode 100644 index 00000000000..96b5e170c14 --- /dev/null +++ b/test/abilities/mummy.test.ts @@ -0,0 +1,52 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Mummy", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .ability(Abilities.MUMMY) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.TACKLE); + }); + + it("should set the enemy's ability to mummy when hit by a contact move", async () => { + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getEnemyPokemon()?.getAbility().id).toBe(Abilities.MUMMY); + }); + + it("should not change the enemy's ability hit by a non-contact move", async () => { + game.override.enemyMoveset(Moves.EARTHQUAKE); + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getEnemyPokemon()?.getAbility().id).toBe(Abilities.BALL_FETCH); + }); +}); diff --git a/src/test/abilities/mycelium_might.test.ts b/test/abilities/mycelium_might.test.ts similarity index 98% rename from src/test/abilities/mycelium_might.test.ts rename to test/abilities/mycelium_might.test.ts index 0c8e7b5a703..2c0bd39b32a 100644 --- a/src/test/abilities/mycelium_might.test.ts +++ b/test/abilities/mycelium_might.test.ts @@ -1,6 +1,6 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { TurnStartPhase } from "#app/phases/turn-start-phase"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Abilities } from "#enums/abilities"; import { Stat } from "#enums/stat"; import { Moves } from "#enums/moves"; diff --git a/test/abilities/neutralizing_gas.test.ts b/test/abilities/neutralizing_gas.test.ts new file mode 100644 index 00000000000..a0612078e64 --- /dev/null +++ b/test/abilities/neutralizing_gas.test.ts @@ -0,0 +1,165 @@ +import { BattlerIndex } from "#app/battle"; +import { Abilities } from "#enums/abilities"; +import { ArenaTagType } from "#enums/arena-tag-type"; +import { Moves } from "#enums/moves"; +import { PokeballType } from "#enums/pokeball"; +import { Species } from "#enums/species"; +import { Stat } from "#enums/stat"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Neutralizing Gas", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .ability(Abilities.NEUTRALIZING_GAS) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should prevent other abilities from activating", async () => { + game.override.enemyAbility(Abilities.INTIMIDATE); + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to("TurnEndPhase"); + + // Intimidate is suppressed, so the attack stat should not be lowered + expect(game.scene.getPlayerPokemon()?.getStatStage(Stat.ATK)).toBe(0); + }); + + it("should allow the user's passive to activate", async () => { + game.override.passiveAbility(Abilities.INTREPID_SWORD); + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(game.scene.getPlayerPokemon()?.getStatStage(Stat.ATK)).toBe(1); + }); + + it.todo("should activate before other abilities", async () => { + game.override.enemySpecies(Species.ACCELGOR) + .enemyLevel(100) + .enemyAbility(Abilities.INTIMIDATE); + + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to("TurnEndPhase"); + + // Intimidate is suppressed even when the user's speed is lower + expect(game.scene.getPlayerPokemon()?.getStatStage(Stat.ATK)).toBe(0); + }); + + it("should activate other abilities when removed", async () => { + game.override.enemyAbility(Abilities.INTREPID_SWORD) + .enemyPassiveAbility(Abilities.DAUNTLESS_SHIELD) + .enemyMoveset(Moves.ENTRAINMENT); + + await game.classicMode.startBattle([ Species.FEEBAS ]); + + const enemyPokemon = game.scene.getEnemyPokemon(); + expect(enemyPokemon?.getStatStage(Stat.ATK)).toBe(0); + expect(enemyPokemon?.getStatStage(Stat.DEF)).toBe(0); + + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to("BerryPhase"); + // Enemy removes user's ability, so both abilities are activated + expect(enemyPokemon?.getStatStage(Stat.ATK)).toBe(1); + expect(enemyPokemon?.getStatStage(Stat.DEF)).toBe(1); + }); + + it("should not activate the user's other ability when removed", async () => { + game.override.passiveAbility(Abilities.INTIMIDATE) + .enemyMoveset(Moves.ENTRAINMENT); + + await game.classicMode.startBattle([ Species.FEEBAS ]); + // Neutralising gas user's passive is still active + const enemyPokemon = game.scene.getEnemyPokemon(); + expect(enemyPokemon?.getStatStage(Stat.ATK)).toBe(-1); + + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to("BerryPhase"); + // Intimidate did not reactivate after neutralizing gas was removed + expect(enemyPokemon?.getStatStage(Stat.ATK)).toBe(-1); + }); + + it("should only deactivate when all setters are off the field", async () => { + game.override.enemyMoveset([ Moves.ENTRAINMENT, Moves.SPLASH ]) + .battleType("double"); + + await game.classicMode.startBattle([ Species.ACCELGOR, Species.ACCELGOR ]); + game.move.select(Moves.SPLASH, 0); + game.move.select(Moves.SPLASH, 1); + await game.forceEnemyMove(Moves.ENTRAINMENT, BattlerIndex.PLAYER); + await game.forceEnemyMove(Moves.SPLASH); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS)).toBeDefined(); // Now one neut gas user is left + + game.move.select(Moves.SPLASH, 0); + game.move.select(Moves.SPLASH, 1); + await game.forceEnemyMove(Moves.ENTRAINMENT, BattlerIndex.PLAYER_2); + await game.forceEnemyMove(Moves.SPLASH); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS)).toBeUndefined(); // No neut gas users are left + }); + + it("should deactivate when suppressed by gastro acid", async () => { + game.override.enemyMoveset(Moves.GASTRO_ACID); + + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS)).toBeUndefined(); + }); + + it("should deactivate when the pokemon faints", async () => { + game.override.ability(Abilities.BALL_FETCH) + .enemyAbility(Abilities.NEUTRALIZING_GAS); + + await game.classicMode.startBattle([ Species.FEEBAS ]); + game.move.select(Moves.SPLASH); + expect(game.scene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS)).toBeDefined(); + await game.doKillOpponents(); + + expect(game.scene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS)).toBeUndefined(); + }); + + it("should deactivate upon catching a wild pokemon", async () => { + game.override + .battleType("single") + .enemyAbility(Abilities.NEUTRALIZING_GAS) + .ability(Abilities.BALL_FETCH); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + expect(game.scene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS)).toBeDefined(); + + game.scene.pokeballCounts[PokeballType.MASTER_BALL] = 1; + game.doThrowPokeball(PokeballType.MASTER_BALL); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(game.scene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS)).toBeUndefined(); + }); +}); diff --git a/src/test/abilities/no_guard.test.ts b/test/abilities/no_guard.test.ts similarity index 97% rename from src/test/abilities/no_guard.test.ts rename to test/abilities/no_guard.test.ts index b0b454dd560..1a319eb2611 100644 --- a/src/test/abilities/no_guard.test.ts +++ b/test/abilities/no_guard.test.ts @@ -4,7 +4,7 @@ import { MoveEndPhase } from "#app/phases/move-end-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; diff --git a/src/test/abilities/parental_bond.test.ts b/test/abilities/parental_bond.test.ts similarity index 99% rename from src/test/abilities/parental_bond.test.ts rename to test/abilities/parental_bond.test.ts index c2f54fa4cfc..d22c5615df2 100644 --- a/src/test/abilities/parental_bond.test.ts +++ b/test/abilities/parental_bond.test.ts @@ -6,7 +6,7 @@ import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/abilities/pastel_veil.test.ts b/test/abilities/pastel_veil.test.ts similarity index 97% rename from src/test/abilities/pastel_veil.test.ts rename to test/abilities/pastel_veil.test.ts index dd8360493a1..cb73a79bae4 100644 --- a/src/test/abilities/pastel_veil.test.ts +++ b/test/abilities/pastel_veil.test.ts @@ -5,7 +5,7 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/test/abilities/perish_body.test.ts b/test/abilities/perish_body.test.ts new file mode 100644 index 00000000000..7084076713a --- /dev/null +++ b/test/abilities/perish_body.test.ts @@ -0,0 +1,116 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + + +describe("Abilities - Perish Song", () => { + 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.battleType("single"); + game.override.disableCrits(); + + game.override.enemySpecies(Species.MAGIKARP); + game.override.enemyAbility(Abilities.BALL_FETCH); + + game.override.starterSpecies(Species.CURSOLA); + game.override.ability(Abilities.PERISH_BODY); + game.override.moveset([ Moves.SPLASH ]); + }); + + it("should trigger when hit with damaging move", async () => { + game.override.enemyMoveset([ Moves.AQUA_JET ]); + await game.classicMode.startBattle(); + const cursola = game.scene.getPlayerPokemon(); + const magikarp = game.scene.getEnemyPokemon(); + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + + expect(cursola?.summonData.tags[0].turnCount).toBe(3); + expect(magikarp?.summonData.tags[0].turnCount).toBe(3); + }); + + it("should trigger even when fainting", async () => { + game.override.enemyMoveset([ Moves.AQUA_JET ]) + .enemyLevel(100) + .startingLevel(1); + await game.classicMode.startBattle([ Species.CURSOLA, Species.FEEBAS ]); + const magikarp = game.scene.getEnemyPokemon(); + + game.move.select(Moves.SPLASH); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + + expect(magikarp?.summonData.tags[0].turnCount).toBe(3); + }); + + it("should not activate if attacker already has perish song", async () => { + game.override.enemyMoveset([ Moves.PERISH_SONG, Moves.AQUA_JET, Moves.SPLASH ]); + await game.classicMode.startBattle([ Species.FEEBAS, Species.CURSOLA ]); + const feebas = game.scene.getPlayerPokemon(); + const magikarp = game.scene.getEnemyPokemon(); + + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.PERISH_SONG); + await game.toNextTurn(); + + expect(feebas?.summonData.tags[0].turnCount).toBe(3); + expect(magikarp?.summonData.tags[0].turnCount).toBe(3); + + game.doSwitchPokemon(1); + await game.forceEnemyMove(Moves.SPLASH); + await game.toNextTurn(); + + const cursola = game.scene.getPlayerPokemon(); + expect(cursola?.summonData.tags.length).toBe(0); + expect(magikarp?.summonData.tags[0].turnCount).toBe(2); + + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.AQUA_JET); + await game.toNextTurn(); + + expect(cursola?.summonData.tags.length).toBe(0); + expect(magikarp?.summonData.tags[0].turnCount).toBe(1); + + }); + + it("should activate if cursola already has perish song, but not reset its counter", async () => { + game.override.enemyMoveset([ Moves.PERISH_SONG, Moves.AQUA_JET, Moves.SPLASH ]); + game.override.moveset([ Moves.WHIRLWIND, Moves.SPLASH ]); + game.override.startingWave(5); + await game.classicMode.startBattle([ Species.CURSOLA ]); + const cursola = game.scene.getPlayerPokemon(); + + game.move.select(Moves.WHIRLWIND); + await game.forceEnemyMove(Moves.PERISH_SONG); + await game.toNextTurn(); + + const magikarp = game.scene.getEnemyPokemon(); + expect(cursola?.summonData.tags[0].turnCount).toBe(3); + expect(magikarp?.summonData.tags.length).toBe(0); + + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.AQUA_JET); + await game.toNextTurn(); + + expect(cursola?.summonData.tags[0].turnCount).toBe(2); + expect(magikarp?.summonData.tags.length).toBe(1); + expect(magikarp?.summonData.tags[0].turnCount).toBe(3); + }); +}); diff --git a/src/test/abilities/power_construct.test.ts b/test/abilities/power_construct.test.ts similarity index 98% rename from src/test/abilities/power_construct.test.ts rename to test/abilities/power_construct.test.ts index aaab5ddb5c4..b6b7be33753 100644 --- a/src/test/abilities/power_construct.test.ts +++ b/test/abilities/power_construct.test.ts @@ -5,7 +5,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; diff --git a/src/test/abilities/power_spot.test.ts b/test/abilities/power_spot.test.ts similarity index 97% rename from src/test/abilities/power_spot.test.ts rename to test/abilities/power_spot.test.ts index a566c2277c3..dbc3799d48d 100644 --- a/src/test/abilities/power_spot.test.ts +++ b/test/abilities/power_spot.test.ts @@ -4,7 +4,7 @@ import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/abilities/protean.test.ts b/test/abilities/protean.test.ts similarity index 97% rename from src/test/abilities/protean.test.ts rename to test/abilities/protean.test.ts index 0d7202e3f6d..a20fa61d75f 100644 --- a/src/test/abilities/protean.test.ts +++ b/test/abilities/protean.test.ts @@ -1,7 +1,7 @@ import { allMoves } from "#app/data/move"; import { Type } from "#enums/type"; import { Weather } from "#app/data/weather"; -import { PlayerPokemon } from "#app/field/pokemon"; +import type { PlayerPokemon } from "#app/field/pokemon"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Abilities } from "#enums/abilities"; import { BattlerTagType } from "#enums/battler-tag-type"; @@ -9,9 +9,9 @@ import { Biome } from "#enums/biome"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { WeatherType } from "#enums/weather-type"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; describe("Abilities - Protean", () => { @@ -54,6 +54,7 @@ describe("Abilities - Protean", () => { }, ); + // Test for Gen9+ functionality, we are using previous funcionality test.skip( "ability applies only once per switch in", async () => { @@ -257,7 +258,7 @@ describe("Abilities - Protean", () => { const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - vi.spyOn(leadPokemon, "isTerastallized").mockReturnValue(true); + leadPokemon.isTerastallized = true; game.move.select(Moves.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); diff --git a/test/abilities/protosynthesis.test.ts b/test/abilities/protosynthesis.test.ts new file mode 100644 index 00000000000..a122fbad797 --- /dev/null +++ b/test/abilities/protosynthesis.test.ts @@ -0,0 +1,66 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Nature } from "#enums/nature"; +import { Species } from "#enums/species"; +import { Stat } from "#enums/stat"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { BattlerIndex } from "#app/battle"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Protosynthesis", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH, Moves.TACKLE ]) + .ability(Abilities.PROTOSYNTHESIS) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should not consider temporary items when determining which stat to boost", async() => { + // Mew has uniform base stats + game.override.startingModifier([{ name: "TEMP_STAT_STAGE_BOOSTER", type: Stat.DEF }]) + .enemyMoveset(Moves.SUNNY_DAY) + .startingLevel(100) + .enemyLevel(100); + await game.classicMode.startBattle([ Species.MEW ]); + const mew = game.scene.getPlayerPokemon()!; + // Nature of starting mon is randomized. We need to fix it to a neutral nature for the automated test. + mew.setNature(Nature.HARDY); + const enemy = game.scene.getEnemyPokemon()!; + const def_before_boost = mew.getEffectiveStat(Stat.DEF, undefined, undefined, false, undefined, false, false, true); + const atk_before_boost = mew.getEffectiveStat(Stat.ATK, undefined, undefined, false, undefined, false, false, true); + const initialHp = enemy.hp; + game.move.select(Moves.TACKLE); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.toNextTurn(); + const unboosted_dmg = initialHp - enemy.hp; + enemy.hp = initialHp; + const def_after_boost = mew.getEffectiveStat(Stat.DEF, undefined, undefined, false, undefined, false, false, true); + const atk_after_boost = mew.getEffectiveStat(Stat.ATK, undefined, undefined, false, undefined, false, false, true); + game.move.select(Moves.TACKLE); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.toNextTurn(); + const boosted_dmg = initialHp - enemy.hp; + expect(boosted_dmg).toBeGreaterThan(unboosted_dmg); + expect(def_after_boost).toEqual(def_before_boost); + expect(atk_after_boost).toBeGreaterThan(atk_before_boost); + }); +}); diff --git a/src/test/abilities/quick_draw.test.ts b/test/abilities/quick_draw.test.ts similarity index 98% rename from src/test/abilities/quick_draw.test.ts rename to test/abilities/quick_draw.test.ts index 4979152f4d6..c451218a56c 100644 --- a/src/test/abilities/quick_draw.test.ts +++ b/test/abilities/quick_draw.test.ts @@ -3,7 +3,7 @@ import { FaintPhase } from "#app/phases/faint-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; diff --git a/src/test/abilities/sand_spit.test.ts b/test/abilities/sand_spit.test.ts similarity index 73% rename from src/test/abilities/sand_spit.test.ts rename to test/abilities/sand_spit.test.ts index 1c21cff3c14..dafae695d3b 100644 --- a/src/test/abilities/sand_spit.test.ts +++ b/test/abilities/sand_spit.test.ts @@ -2,7 +2,7 @@ import { WeatherType } from "#app/enums/weather-type"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -36,7 +36,7 @@ describe("Abilities - Sand Spit", () => { it("should trigger when hit with damaging move", async () => { game.override.enemyMoveset([ Moves.TACKLE ]); - await game.startBattle(); + await game.classicMode.startBattle(); game.move.select(Moves.SPLASH); await game.toNextTurn(); @@ -44,9 +44,22 @@ describe("Abilities - Sand Spit", () => { expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SANDSTORM); }, 20000); + it("should trigger even when fainting", async () => { + game.override.enemyMoveset([ Moves.TACKLE ]) + .enemyLevel(100) + .startingLevel(1); + await game.classicMode.startBattle([ Species.SILICOBRA, Species.MAGIKARP ]); + + game.move.select(Moves.SPLASH); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + + expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SANDSTORM); + }); + it("should not trigger when targetted with status moves", async () => { game.override.enemyMoveset([ Moves.GROWL ]); - await game.startBattle(); + await game.classicMode.startBattle(); game.move.select(Moves.COIL); await game.toNextTurn(); diff --git a/src/test/abilities/sand_veil.test.ts b/test/abilities/sand_veil.test.ts similarity index 97% rename from src/test/abilities/sand_veil.test.ts rename to test/abilities/sand_veil.test.ts index ee8ca450df9..0128276075b 100644 --- a/src/test/abilities/sand_veil.test.ts +++ b/test/abilities/sand_veil.test.ts @@ -7,7 +7,7 @@ import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; import { WeatherType } from "#enums/weather-type"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; diff --git a/src/test/abilities/sap_sipper.test.ts b/test/abilities/sap_sipper.test.ts similarity index 98% rename from src/test/abilities/sap_sipper.test.ts rename to test/abilities/sap_sipper.test.ts index dc254a54b54..836219fcbcb 100644 --- a/src/test/abilities/sap_sipper.test.ts +++ b/test/abilities/sap_sipper.test.ts @@ -6,7 +6,7 @@ import { Abilities } from "#enums/abilities"; import { BattlerTagType } from "#enums/battler-tag-type"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { allMoves, RandomMoveAttr } from "#app/data/move"; diff --git a/src/test/abilities/schooling.test.ts b/test/abilities/schooling.test.ts similarity index 97% rename from src/test/abilities/schooling.test.ts rename to test/abilities/schooling.test.ts index e1ec58f517e..a52c6a06f12 100644 --- a/src/test/abilities/schooling.test.ts +++ b/test/abilities/schooling.test.ts @@ -5,7 +5,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; diff --git a/src/test/abilities/screen_cleaner.test.ts b/test/abilities/screen_cleaner.test.ts similarity index 97% rename from src/test/abilities/screen_cleaner.test.ts rename to test/abilities/screen_cleaner.test.ts index c036aa90a77..9c182398765 100644 --- a/src/test/abilities/screen_cleaner.test.ts +++ b/test/abilities/screen_cleaner.test.ts @@ -4,7 +4,7 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/test/abilities/seed_sower.test.ts b/test/abilities/seed_sower.test.ts new file mode 100644 index 00000000000..6e3acdf6093 --- /dev/null +++ b/test/abilities/seed_sower.test.ts @@ -0,0 +1,69 @@ +import { TerrainType } from "#app/data/terrain"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + + +describe("Abilities - Seed Sower", () => { + 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.battleType("single"); + game.override.disableCrits(); + + game.override.enemySpecies(Species.MAGIKARP); + game.override.enemyAbility(Abilities.BALL_FETCH); + + game.override.starterSpecies(Species.ARBOLIVA); + game.override.ability(Abilities.SEED_SOWER); + game.override.moveset([ Moves.SPLASH ]); + }); + + it("should trigger when hit with damaging move", async () => { + game.override.enemyMoveset([ Moves.TACKLE ]); + await game.classicMode.startBattle(); + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + + expect(game.scene.arena.terrain?.terrainType).toBe(TerrainType.GRASSY); + }); + + it("should trigger even when fainting", async () => { + game.override.enemyMoveset([ Moves.TACKLE ]) + .enemyLevel(100) + .startingLevel(1); + await game.classicMode.startBattle([ Species.ARBOLIVA, Species.MAGIKARP ]); + + game.move.select(Moves.SPLASH); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + + expect(game.scene.arena.terrain?.terrainType).toBe(TerrainType.GRASSY); + }); + + it("should not trigger when targetted with status moves", async () => { + game.override.enemyMoveset([ Moves.GROWL ]); + await game.classicMode.startBattle(); + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + + expect(game.scene.arena.terrain?.terrainType).not.toBe(TerrainType.GRASSY); + }); +}); diff --git a/src/test/abilities/serene_grace.test.ts b/test/abilities/serene_grace.test.ts similarity index 96% rename from src/test/abilities/serene_grace.test.ts rename to test/abilities/serene_grace.test.ts index 6f9b2195a9c..cb21121743b 100644 --- a/src/test/abilities/serene_grace.test.ts +++ b/test/abilities/serene_grace.test.ts @@ -2,7 +2,7 @@ import { BattlerIndex } from "#app/battle"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { allMoves } from "#app/data/move"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/abilities/sheer_force.test.ts b/test/abilities/sheer_force.test.ts similarity index 99% rename from src/test/abilities/sheer_force.test.ts rename to test/abilities/sheer_force.test.ts index a0ddf5bb9c6..a65334cbfa0 100644 --- a/src/test/abilities/sheer_force.test.ts +++ b/test/abilities/sheer_force.test.ts @@ -4,7 +4,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { allMoves, FlinchAttr } from "#app/data/move"; diff --git a/src/test/abilities/shield_dust.test.ts b/test/abilities/shield_dust.test.ts similarity index 84% rename from src/test/abilities/shield_dust.test.ts rename to test/abilities/shield_dust.test.ts index 9f1e6aeb11d..a63898b0c63 100644 --- a/src/test/abilities/shield_dust.test.ts +++ b/test/abilities/shield_dust.test.ts @@ -6,7 +6,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -53,11 +53,11 @@ describe("Abilities - Shield Dust", () => { expect(move.id).toBe(Moves.AIR_SLASH); const chance = new NumberHolder(move.chance); - applyAbAttrs(MoveEffectChanceMultiplierAbAttr, phase.getUserPokemon()!, null, false, chance, move, phase.getFirstTarget(), false); - applyPreDefendAbAttrs(IgnoreMoveEffectsAbAttr, phase.getFirstTarget()!, phase.getUserPokemon()!, null, null, false, chance); + await applyAbAttrs(MoveEffectChanceMultiplierAbAttr, phase.getUserPokemon()!, null, false, chance, move, phase.getFirstTarget(), false); + await applyPreDefendAbAttrs(IgnoreMoveEffectsAbAttr, phase.getFirstTarget()!, phase.getUserPokemon()!, null, null, false, chance); expect(chance.value).toBe(0); - }, 20000); + }); //TODO King's Rock Interaction Unit Test }); diff --git a/test/abilities/shields_down.test.ts b/test/abilities/shields_down.test.ts new file mode 100644 index 00000000000..4e47a018471 --- /dev/null +++ b/test/abilities/shields_down.test.ts @@ -0,0 +1,207 @@ +import { Status } from "#app/data/status-effect"; +import { BattlerTagType } from "#app/enums/battler-tag-type"; +import { QuietFormChangePhase } from "#app/phases/quiet-form-change-phase"; +import { TurnEndPhase } from "#app/phases/turn-end-phase"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { StatusEffect } from "#enums/status-effect"; +import GameManager from "#test/testUtils/gameManager"; +import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; + + +describe("Abilities - SHIELDS DOWN", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + const moveToUse = Moves.SPLASH; + game.override.battleType("single"); + game.override.ability(Abilities.SHIELDS_DOWN); + game.override.moveset([ moveToUse ]); + game.override.enemyMoveset([ Moves.TACKLE ]); + }); + + test( + "check if fainted pokemon switched to base form on arena reset", + async () => { + const meteorForm = 0, + coreForm = 7; + game.override.startingWave(4); + game.override.starterForms({ + [Species.MINIOR]: coreForm, + }); + + await game.classicMode.startBattle([ Species.MAGIKARP, Species.MINIOR ]); + + const minior = game.scene.getPlayerParty().find((p) => p.species.speciesId === Species.MINIOR)!; + expect(minior).not.toBe(undefined); + expect(minior.formIndex).toBe(coreForm); + + minior.hp = 0; + minior.status = new Status(StatusEffect.FAINT); + expect(minior.isFainted()).toBe(true); + + game.move.select(Moves.SPLASH); + await game.doKillOpponents(); + await game.phaseInterceptor.to(TurnEndPhase); + game.doSelectModifier(); + await game.phaseInterceptor.to(QuietFormChangePhase); + + expect(minior.formIndex).toBe(meteorForm); + }, + ); + + test("should ignore non-volatile status moves", + async () => { + game.override.enemyMoveset([ Moves.SPORE ]); + + await game.classicMode.startBattle([ Species.MINIOR ]); + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to(TurnEndPhase); + + expect(game.scene.getPlayerPokemon()!.status).toBe(undefined); + } + ); + + test("should still ignore non-volatile status moves used by a pokemon with mold breaker", + async () => { + game.override.enemyAbility(Abilities.MOLD_BREAKER); + game.override.enemyMoveset([ Moves.SPORE ]); + + await game.classicMode.startBattle([ Species.MINIOR ]); + + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.SPORE); + await game.phaseInterceptor.to(TurnEndPhase); + + expect(game.scene.getPlayerPokemon()!.status).toBe(undefined); + } + ); + + test("should ignore non-volatile secondary status effects", + async() => { + game.override.enemyMoveset([ Moves.NUZZLE ]); + + await game.classicMode.startBattle([ Species.MINIOR ]); + + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to(TurnEndPhase); + + expect(game.scene.getPlayerPokemon()!.status).toBe(undefined); + } + ); + + test("should ignore status moves even through mold breaker", + async () => { + game.override.enemyMoveset([ Moves.SPORE ]); + game.override.enemyAbility(Abilities.MOLD_BREAKER); + + await game.classicMode.startBattle([ Species.MINIOR ]); + + game.move.select(Moves.SPLASH); + + await game.phaseInterceptor.to(TurnEndPhase); + + expect(game.scene.getPlayerPokemon()!.status).toBe(undefined); + } + ); + + + // toxic spikes currently does not poison flying types when gravity is in effect + test.todo("should become poisoned by toxic spikes when grounded", + async () => { + game.override.enemyMoveset([ Moves.GRAVITY, Moves.TOXIC_SPIKES, Moves.SPLASH ]); + game.override.moveset([ Moves.GRAVITY, Moves.SPLASH ]); + + await game.classicMode.startBattle([ Species.MAGIKARP, Species.MINIOR ]); + + // turn 1 + game.move.select(Moves.GRAVITY); + await game.forceEnemyMove(Moves.TOXIC_SPIKES); + await game.toNextTurn(); + + // turn 2 + game.doSwitchPokemon(1); + await game.forceEnemyMove(Moves.SPLASH); + await game.toNextTurn(); + + expect(game.scene.getPlayerPokemon()!.species.speciesId).toBe(Species.MINIOR); + expect(game.scene.getPlayerPokemon()!.species.formIndex).toBe(0); + expect(game.scene.getPlayerPokemon()!.status?.effect).toBe(StatusEffect.POISON); + } + ); + + test("should ignore yawn", + async () => { + game.override.enemyMoveset([ Moves.YAWN ]); + + await game.classicMode.startBattle([ Species.MAGIKARP, Species.MINIOR ]); + + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.YAWN); + + await game.phaseInterceptor.to(TurnEndPhase); + expect(game.scene.getPlayerPokemon()!.findTag( (tag ) => tag.tagType === BattlerTagType.DROWSY)).toBe(undefined); + } + ); + + test("should not ignore volatile status effects", + async () => { + game.override.enemyMoveset([ Moves.CONFUSE_RAY ]); + + await game.classicMode.startBattle([ Species.MINIOR ]); + + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.CONFUSE_RAY); + + await game.phaseInterceptor.to(TurnEndPhase); + + expect(game.scene.getPlayerPokemon()!.findTag( (tag ) => tag.tagType === BattlerTagType.CONFUSED)).not.toBe(undefined); + } + ); + + // the `NoTransformAbilityAbAttr` attribute is not checked anywhere, so this test cannot pass. + test.todo("ditto should not be immune to status after transforming", + async () => { + game.override.enemySpecies(Species.DITTO); + game.override.enemyAbility(Abilities.IMPOSTER); + game.override.moveset([ Moves.SPLASH, Moves.SPORE ]); + + await game.classicMode.startBattle([ Species.MINIOR ]); + + game.move.select(Moves.SPORE); + await game.forceEnemyMove(Moves.SPLASH); + + await game.phaseInterceptor.to(TurnEndPhase); + expect(game.scene.getEnemyPokemon()!.status?.effect).toBe(StatusEffect.SLEEP); + } + ); + + test("should not prevent minior from receiving the fainted status effect in trainer battles", async () => { + game.override.enemyMoveset([ Moves.TACKLE ]); + game.override.moveset([ Moves.THUNDERBOLT ]); + game.override.startingLevel(100); + game.override.startingWave(5); + game.override.enemySpecies(Species.MINIOR); + await game.classicMode.startBattle([ Species.REGIELEKI ]); + const minior = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.THUNDERBOLT); + await game.toNextTurn(); + expect(minior.isFainted()).toBe(true); + expect(minior.status?.effect).toBe(StatusEffect.FAINT); + }); + +}); diff --git a/src/test/abilities/simple.test.ts b/test/abilities/simple.test.ts similarity index 95% rename from src/test/abilities/simple.test.ts rename to test/abilities/simple.test.ts index e5ca474d7c3..e8d478655ab 100644 --- a/src/test/abilities/simple.test.ts +++ b/test/abilities/simple.test.ts @@ -2,7 +2,7 @@ import { Moves } from "#app/enums/moves"; import { Abilities } from "#enums/abilities"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/abilities/speed_boost.test.ts b/test/abilities/speed_boost.test.ts similarity index 97% rename from src/test/abilities/speed_boost.test.ts rename to test/abilities/speed_boost.test.ts index ff5184eedae..912bb62bca4 100644 --- a/src/test/abilities/speed_boost.test.ts +++ b/test/abilities/speed_boost.test.ts @@ -2,10 +2,10 @@ import { Stat } from "#enums/stat"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; -import { CommandPhase } from "#app/phases/command-phase"; +import type { CommandPhase } from "#app/phases/command-phase"; import { Command } from "#app/ui/command-ui-handler"; import { AttemptRunPhase } from "#app/phases/attempt-run-phase"; diff --git a/src/test/abilities/stakeout.test.ts b/test/abilities/stakeout.test.ts similarity index 97% rename from src/test/abilities/stakeout.test.ts rename to test/abilities/stakeout.test.ts index 885169b284e..67442ae1822 100644 --- a/src/test/abilities/stakeout.test.ts +++ b/test/abilities/stakeout.test.ts @@ -3,7 +3,7 @@ import { isBetween } from "#app/utils"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/abilities/stall.test.ts b/test/abilities/stall.test.ts similarity index 98% rename from src/test/abilities/stall.test.ts rename to test/abilities/stall.test.ts index b51c56dbe1f..c0b71221071 100644 --- a/src/test/abilities/stall.test.ts +++ b/test/abilities/stall.test.ts @@ -1,7 +1,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import { TurnStartPhase } from "#app/phases/turn-start-phase"; diff --git a/src/test/abilities/steely_spirit.test.ts b/test/abilities/steely_spirit.test.ts similarity index 98% rename from src/test/abilities/steely_spirit.test.ts rename to test/abilities/steely_spirit.test.ts index 61e76989060..e1f6a04c0fa 100644 --- a/src/test/abilities/steely_spirit.test.ts +++ b/test/abilities/steely_spirit.test.ts @@ -3,7 +3,7 @@ import { allMoves } from "#app/data/move"; import { Abilities } from "#app/enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/abilities/sturdy.test.ts b/test/abilities/sturdy.test.ts similarity index 95% rename from src/test/abilities/sturdy.test.ts rename to test/abilities/sturdy.test.ts index 07ccbbb68e5..36b098ab69e 100644 --- a/src/test/abilities/sturdy.test.ts +++ b/test/abilities/sturdy.test.ts @@ -1,10 +1,10 @@ -import { EnemyPokemon } from "#app/field/pokemon"; +import type { EnemyPokemon } from "#app/field/pokemon"; import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; diff --git a/test/abilities/supreme_overlord.test.ts b/test/abilities/supreme_overlord.test.ts new file mode 100644 index 00000000000..6de17bc3c7a --- /dev/null +++ b/test/abilities/supreme_overlord.test.ts @@ -0,0 +1,178 @@ +import { Moves } from "#app/enums/moves"; +import { Abilities } from "#enums/abilities"; +import { Species } from "#enums/species"; +import { BattlerIndex } from "#app/battle"; +import { MoveEffectPhase } from "#app/phases/move-effect-phase"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { allMoves } from "#app/data/move"; + +describe("Abilities - Supreme Overlord", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + const move = allMoves[Moves.TACKLE]; + const basePower = move.power; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .battleType("single") + .enemySpecies(Species.MAGIKARP) + .enemyLevel(100) + .startingLevel(1) + .enemyAbility(Abilities.BALL_FETCH) + .ability(Abilities.SUPREME_OVERLORD) + .enemyMoveset([ Moves.SPLASH ]) + .moveset([ Moves.TACKLE, Moves.EXPLOSION, Moves.LUNAR_DANCE ]); + + vi.spyOn(move, "calculateBattlePower"); + }); + + it("should increase Power by 20% if 2 Pokemon are fainted in the party", async() => { + await game.startBattle([ Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE ]); + + game.move.select(Moves.EXPLOSION); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + + game.move.select(Moves.EXPLOSION); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + game.doSelectPartyPokemon(2); + await game.toNextTurn(); + + game.move.select(Moves.TACKLE); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to(MoveEffectPhase); + + expect(move.calculateBattlePower).toHaveReturnedWith(basePower * 1.2); + }); + + it("should increase Power by 30% if an ally fainted twice and another one once", async () => { + await game.classicMode.startBattle([ Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE ]); + + /** + * Bulbasur faints once + */ + game.move.select(Moves.EXPLOSION); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + + /** + * Charmander faints once + */ + game.doRevivePokemon(1); + game.move.select(Moves.EXPLOSION); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + + /** + * Bulbasur faints twice + */ + game.move.select(Moves.EXPLOSION); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + game.doSelectPartyPokemon(2); + await game.toNextTurn(); + + game.move.select(Moves.TACKLE); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to(MoveEffectPhase); + + expect(move.calculateBattlePower).toHaveReturnedWith(basePower * 1.3); + }); + + it("should maintain its power during next battle if it is within the same arena encounter", async () => { + game.override + .enemySpecies(Species.MAGIKARP) + .startingWave(1) + .enemyLevel(1) + .startingLevel(100); + + await game.classicMode.startBattle([ Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE ]); + + /** + * The first Pokemon faints and another Pokemon in the party is selected. + */ + game.move.select(Moves.LUNAR_DANCE); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + + /** + * Enemy Pokemon faints and new wave is entered. + */ + game.move.select(Moves.TACKLE); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextWave(); + + game.move.select(Moves.TACKLE); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(move.calculateBattlePower).toHaveLastReturnedWith(basePower * 1.1); + }); + + it("should reset playerFaints count if we enter new trainer battle", async () => { + game.override + .enemySpecies(Species.MAGIKARP) + .startingWave(4) + .enemyLevel(1) + .startingLevel(100); + + await game.classicMode.startBattle([ Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE ]); + + game.move.select(Moves.LUNAR_DANCE); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + + game.move.select(Moves.TACKLE); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextWave(); + + game.move.select(Moves.TACKLE); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("BerryPhase", false); + + expect(move.calculateBattlePower).toHaveLastReturnedWith(basePower); + }); + + it("should reset playerFaints count if we enter new biome", async () => { + game.override + .enemySpecies(Species.MAGIKARP) + .startingWave(10) + .enemyLevel(1) + .startingLevel(100); + + await game.classicMode.startBattle([ Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE ]); + + game.move.select(Moves.LUNAR_DANCE); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + + game.move.select(Moves.TACKLE); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextWave(); + + game.move.select(Moves.TACKLE); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("BerryPhase", false); + + expect(move.calculateBattlePower).toHaveLastReturnedWith(basePower); + }); +}); diff --git a/src/test/abilities/sweet_veil.test.ts b/test/abilities/sweet_veil.test.ts similarity index 98% rename from src/test/abilities/sweet_veil.test.ts rename to test/abilities/sweet_veil.test.ts index ef66cb1c68a..14f4f79c3f0 100644 --- a/src/test/abilities/sweet_veil.test.ts +++ b/test/abilities/sweet_veil.test.ts @@ -5,7 +5,7 @@ import { CommandPhase } from "#app/phases/command-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/abilities/synchronize.test.ts b/test/abilities/synchronize.test.ts similarity index 98% rename from src/test/abilities/synchronize.test.ts rename to test/abilities/synchronize.test.ts index 2ae80ae9c7a..19b5560f61a 100644 --- a/src/test/abilities/synchronize.test.ts +++ b/test/abilities/synchronize.test.ts @@ -2,7 +2,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/abilities/tera_shell.test.ts b/test/abilities/tera_shell.test.ts similarity index 98% rename from src/test/abilities/tera_shell.test.ts rename to test/abilities/tera_shell.test.ts index 01382d0fd9a..38be70f511b 100644 --- a/src/test/abilities/tera_shell.test.ts +++ b/test/abilities/tera_shell.test.ts @@ -3,7 +3,7 @@ import { Abilities } from "#app/enums/abilities"; import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { HitResult } from "#app/field/pokemon"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/test/abilities/trace.test.ts b/test/abilities/trace.test.ts new file mode 100644 index 00000000000..e7059d2b0f1 --- /dev/null +++ b/test/abilities/trace.test.ts @@ -0,0 +1,53 @@ +import { Stat } from "#app/enums/stat"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Trace", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .ability(Abilities.TRACE) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should copy the opponent's ability", async () => { + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getPlayerPokemon()?.getAbility().id).toBe(Abilities.BALL_FETCH); + }); + + it("should activate a copied post-summon ability", async () => { + game.override.enemyAbility(Abilities.INTIMIDATE); + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.ATK)).toBe(-1); + }); +}); diff --git a/src/test/abilities/unburden.test.ts b/test/abilities/unburden.test.ts similarity index 99% rename from src/test/abilities/unburden.test.ts rename to test/abilities/unburden.test.ts index ba14c7fdcd0..67cf83870b3 100644 --- a/src/test/abilities/unburden.test.ts +++ b/test/abilities/unburden.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; import { PostItemLostAbAttr } from "#app/data/ability"; import { allMoves, StealHeldItemChanceAttr } from "#app/data/move"; -import Pokemon from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; import type { ContactHeldItemTransferChanceModifier } from "#app/modifier/modifier"; import { Abilities } from "#enums/abilities"; import { BattlerTagType } from "#enums/battler-tag-type"; @@ -9,7 +9,7 @@ import { BerryType } from "#enums/berry-type"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -391,7 +391,7 @@ describe("Abilities - Unburden", () => { await game.forceEnemyMove(Moves.THIEF, BattlerIndex.PLAYER); await game.forceEnemyMove(Moves.SPLASH); await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2 ]); - game.doSelectPartyPokemon(0, "MoveEffectPhase"); + game.doSelectPartyPokemon(0, "RevivalBlessingPhase"); await game.toNextTurn(); expect(game.scene.getPlayerField()[0]).toBe(treecko); diff --git a/src/test/abilities/unseen_fist.test.ts b/test/abilities/unseen_fist.test.ts similarity index 92% rename from src/test/abilities/unseen_fist.test.ts rename to test/abilities/unseen_fist.test.ts index f8fa8a723fe..de93aef0988 100644 --- a/src/test/abilities/unseen_fist.test.ts +++ b/test/abilities/unseen_fist.test.ts @@ -2,7 +2,7 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import { BattlerTagType } from "#app/enums/battler-tag-type"; @@ -45,9 +45,9 @@ describe("Abilities - Unseen Fist", () => { it( "should not apply if the source has Long Reach", - () => { + async () => { game.override.passiveAbility(Abilities.LONG_REACH); - testUnseenFistHitResult(game, Moves.QUICK_ATTACK, Moves.PROTECT, false); + await testUnseenFistHitResult(game, Moves.QUICK_ATTACK, Moves.PROTECT, false); } ); @@ -67,7 +67,7 @@ describe("Abilities - Unseen Fist", () => { game.override.enemyLevel(1); game.override.moveset([ Moves.TACKLE ]); - await game.startBattle(); + await game.classicMode.startBattle(); const enemyPokemon = game.scene.getEnemyPokemon()!; enemyPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, enemyPokemon.id); @@ -86,7 +86,7 @@ async function testUnseenFistHitResult(game: GameManager, attackMove: Moves, pro game.override.moveset([ attackMove ]); game.override.enemyMoveset([ protectMove, protectMove, protectMove, protectMove ]); - await game.startBattle(); + await game.classicMode.startBattle(); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); diff --git a/src/test/abilities/volt_absorb.test.ts b/test/abilities/volt_absorb.test.ts similarity index 98% rename from src/test/abilities/volt_absorb.test.ts rename to test/abilities/volt_absorb.test.ts index 4fee7653b99..2221619af07 100644 --- a/src/test/abilities/volt_absorb.test.ts +++ b/test/abilities/volt_absorb.test.ts @@ -4,7 +4,7 @@ import { Abilities } from "#enums/abilities"; import { BattlerTagType } from "#enums/battler-tag-type"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import { BattlerIndex } from "#app/battle"; diff --git a/test/abilities/wandering_spirit.test.ts b/test/abilities/wandering_spirit.test.ts new file mode 100644 index 00000000000..48c7afa5751 --- /dev/null +++ b/test/abilities/wandering_spirit.test.ts @@ -0,0 +1,65 @@ +import { Stat } from "#app/enums/stat"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Wandering Spirit", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .ability(Abilities.WANDERING_SPIRIT) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.TACKLE); + }); + + it("should exchange abilities when hit with a contact move", async () => { + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getPlayerPokemon()?.getAbility().id).toBe(Abilities.BALL_FETCH); + expect(game.scene.getEnemyPokemon()?.getAbility().id).toBe(Abilities.WANDERING_SPIRIT); + }); + + it("should not exchange abilities when hit with a non-contact move", async () => { + game.override.enemyMoveset(Moves.EARTHQUAKE); + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getPlayerPokemon()?.getAbility().id).toBe(Abilities.WANDERING_SPIRIT); + expect(game.scene.getEnemyPokemon()?.getAbility().id).toBe(Abilities.BALL_FETCH); + }); + + it("should activate post-summon abilities", async () => { + game.override.enemyAbility(Abilities.INTIMIDATE); + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.ATK)).toBe(-1); + }); +}); diff --git a/src/test/abilities/wimp_out.test.ts b/test/abilities/wimp_out.test.ts similarity index 93% rename from src/test/abilities/wimp_out.test.ts rename to test/abilities/wimp_out.test.ts index bff68b54c75..5aff05d4c20 100644 --- a/src/test/abilities/wimp_out.test.ts +++ b/test/abilities/wimp_out.test.ts @@ -1,7 +1,8 @@ import { BattlerIndex } from "#app/battle"; import { ArenaTagSide } from "#app/data/arena-tag"; import { allMoves } from "#app/data/move"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; +import { toDmgValue } from "#app/utils"; import { Abilities } from "#enums/abilities"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; @@ -244,29 +245,32 @@ describe("Abilities - Wimp Out", () => { confirmNoSwitch(); }); - it("If it falls below half and recovers back above half from a Shell Bell, Wimp Out will activate even after the Shell Bell recovery", async () => { - game.override - .moveset([ Moves.DOUBLE_EDGE ]) - .enemyMoveset([ Moves.SPLASH ]) - .startingHeldItems([ - { name: "SHELL_BELL", count: 3 }, - { name: "HEALING_CHARM", count: 5 }, - ]); - await game.classicMode.startBattle([ - Species.WIMPOD, - Species.TYRUNT - ]); + // TODO: Enable when this behavior is fixed (currently Shell Bell won't activate if Wimp Out activates because + // the pokemon is removed from the field before the Shell Bell modifier is applied, so it can't see the + // damage dealt and doesn't heal the pokemon) + it.todo( + "If it falls below half and recovers back above half from a Shell Bell, Wimp Out will activate even after the Shell Bell recovery", + async () => { + game.override + .moveset([ Moves.DOUBLE_EDGE ]) + .enemyMoveset([ Moves.SPLASH ]) + .startingHeldItems([{ name: "SHELL_BELL", count: 4 }]); + await game.classicMode.startBattle([ Species.WIMPOD, Species.TYRUNT ]); - game.scene.getPlayerPokemon()!.hp *= 0.75; + const wimpod = game.scene.getPlayerPokemon()!; - game.move.select(Moves.DOUBLE_EDGE); - game.doSelectPartyPokemon(1); - await game.phaseInterceptor.to("TurnEndPhase"); + wimpod.damageAndUpdate(toDmgValue(wimpod.getMaxHp() * 0.4)); - expect(game.scene.getPlayerParty()[1].getHpRatio()).toBeGreaterThan(0.5); - expect(game.phaseInterceptor.log).toContain("SwitchSummonPhase"); - expect(game.scene.getPlayerPokemon()!.species.speciesId).toBe(Species.TYRUNT); - }); + game.move.select(Moves.DOUBLE_EDGE); + game.doSelectPartyPokemon(1); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(game.scene.getPlayerParty()[1]).toBe(wimpod); + expect(wimpod.hp).toBeGreaterThan(toDmgValue(wimpod.getMaxHp() / 2)); + expect(game.phaseInterceptor.log).toContain("SwitchSummonPhase"); + expect(game.scene.getPlayerPokemon()!.species.speciesId).toBe(Species.TYRUNT); + }, + ); it("Wimp Out will activate due to weather damage", async () => { game.override diff --git a/src/test/abilities/wind_power.test.ts b/test/abilities/wind_power.test.ts similarity index 98% rename from src/test/abilities/wind_power.test.ts rename to test/abilities/wind_power.test.ts index 538b65f898b..f9be5393d15 100644 --- a/src/test/abilities/wind_power.test.ts +++ b/test/abilities/wind_power.test.ts @@ -3,7 +3,7 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/abilities/wind_rider.test.ts b/test/abilities/wind_rider.test.ts similarity index 98% rename from src/test/abilities/wind_rider.test.ts rename to test/abilities/wind_rider.test.ts index cd7094fb0a9..7cebd70a11a 100644 --- a/src/test/abilities/wind_rider.test.ts +++ b/test/abilities/wind_rider.test.ts @@ -1,5 +1,5 @@ import { Stat } from "#enums/stat"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/src/test/abilities/wonder_skin.test.ts b/test/abilities/wonder_skin.test.ts similarity index 97% rename from src/test/abilities/wonder_skin.test.ts rename to test/abilities/wonder_skin.test.ts index 6b25701e36a..4f6e45d8fe0 100644 --- a/src/test/abilities/wonder_skin.test.ts +++ b/test/abilities/wonder_skin.test.ts @@ -4,7 +4,7 @@ import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/abilities/zen_mode.test.ts b/test/abilities/zen_mode.test.ts similarity index 98% rename from src/test/abilities/zen_mode.test.ts rename to test/abilities/zen_mode.test.ts index e0cc457c4d5..cb4c82e00dc 100644 --- a/src/test/abilities/zen_mode.test.ts +++ b/test/abilities/zen_mode.test.ts @@ -3,7 +3,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/abilities/zero_to_hero.test.ts b/test/abilities/zero_to_hero.test.ts similarity index 98% rename from src/test/abilities/zero_to_hero.test.ts rename to test/abilities/zero_to_hero.test.ts index 5702f73e6c4..338ebd6344f 100644 --- a/src/test/abilities/zero_to_hero.test.ts +++ b/test/abilities/zero_to_hero.test.ts @@ -5,7 +5,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/account.test.ts b/test/account.test.ts similarity index 99% rename from src/test/account.test.ts rename to test/account.test.ts index 0f49014c377..099564ce7a8 100644 --- a/src/test/account.test.ts +++ b/test/account.test.ts @@ -1,7 +1,7 @@ import * as battleScene from "#app/battle-scene"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; import { describe, expect, it, vi } from "vitest"; -import { initLoggedInUser, loggedInUser, updateUserInfo } from "../account"; +import { initLoggedInUser, loggedInUser, updateUserInfo } from "#app/account"; describe("account", () => { describe("initLoggedInUser", () => { diff --git a/src/test/achievements/achievement.test.ts b/test/achievements/achievement.test.ts similarity index 88% rename from src/test/achievements/achievement.test.ts rename to test/achievements/achievement.test.ts index a3669c60463..3c6dc8aefe8 100644 --- a/src/test/achievements/achievement.test.ts +++ b/test/achievements/achievement.test.ts @@ -1,10 +1,10 @@ import { TurnHeldItemTransferModifier } from "#app/modifier/modifier"; import { Achv, AchvTier, DamageAchv, HealAchv, LevelAchv, ModifierAchv, MoneyAchv, RibbonAchv, achvs } from "#app/system/achv"; -import { IntegerHolder, NumberHolder } from "#app/utils"; -import GameManager from "#test/utils/gameManager"; +import { NumberHolder } from "#app/utils"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import BattleScene from "../../battle-scene"; +import BattleScene from "#app/battle-scene"; describe("check some Achievement related stuff", () => { it ("should check Achievement creation", () => { @@ -58,11 +58,11 @@ describe("Achv", () => { }); it("should validate the achievement based on the condition function", () => { - const conditionFunc = vi.fn((scene: BattleScene, args: any[]) => args[0] === 10); + const conditionFunc = vi.fn((args: any[]) => args[0] === 10); const achv = new Achv("", "Test Achievement", "Test Description", "test_icon", 10, conditionFunc); - expect(achv.validate(new BattleScene(), [ 5 ])).toBe(false); - expect(achv.validate(new BattleScene(), [ 10 ])).toBe(true); + expect(achv.validate([ 5 ])).toBe(false); + expect(achv.validate([ 10 ])).toBe(true); expect(conditionFunc).toHaveBeenCalledTimes(2); }); }); @@ -79,10 +79,10 @@ describe("MoneyAchv", () => { const scene = new BattleScene(); scene.money = 5000; - expect(moneyAchv.validate(scene, [])).toBe(false); + expect(moneyAchv.validate([])).toBe(false); scene.money = 15000; - expect(moneyAchv.validate(scene, [])).toBe(true); + expect(moneyAchv.validate([])).toBe(true); }); }); @@ -122,10 +122,10 @@ describe("RibbonAchv", () => { const ribbonAchv = new RibbonAchv("", "Test Ribbon Achievement", 10, "ribbon_icon", 10); scene.gameData.gameStats.ribbonsOwned = 5; - expect(ribbonAchv.validate(scene, [])).toBe(false); + expect(ribbonAchv.validate([])).toBe(false); scene.gameData.gameStats.ribbonsOwned = 15; - expect(ribbonAchv.validate(scene, [])).toBe(true); + expect(ribbonAchv.validate([])).toBe(true); }); }); @@ -138,13 +138,12 @@ describe("DamageAchv", () => { it("should validate the achievement based on the damage amount", () => { const damageAchv = new DamageAchv("", "Test Damage Achievement", 250, "damage_icon", 10); - const scene = new BattleScene(); const numberHolder = new NumberHolder(200); - expect(damageAchv.validate(scene, [ numberHolder ])).toBe(false); + expect(damageAchv.validate([ numberHolder ])).toBe(false); numberHolder.value = 300; - expect(damageAchv.validate(scene, [ numberHolder ])).toBe(true); + expect(damageAchv.validate([ numberHolder ])).toBe(true); }); }); @@ -157,13 +156,12 @@ describe("HealAchv", () => { it("should validate the achievement based on the heal amount", () => { const healAchv = new HealAchv("", "Test Heal Achievement", 250, "heal_icon", 10); - const scene = new BattleScene(); const numberHolder = new NumberHolder(200); - expect(healAchv.validate(scene, [ numberHolder ])).toBe(false); + expect(healAchv.validate([ numberHolder ])).toBe(false); numberHolder.value = 300; - expect(healAchv.validate(scene, [ numberHolder ])).toBe(true); + expect(healAchv.validate([ numberHolder ])).toBe(true); }); }); @@ -176,13 +174,12 @@ describe("LevelAchv", () => { it("should validate the achievement based on the level", () => { const levelAchv = new LevelAchv("", "Test Level Achievement", 100, "level_icon", 10); - const scene = new BattleScene(); - const integerHolder = new IntegerHolder(50); + const integerHolder = new NumberHolder(50); - expect(levelAchv.validate(scene, [ integerHolder ])).toBe(false); + expect(levelAchv.validate([ integerHolder ])).toBe(false); integerHolder.value = 150; - expect(levelAchv.validate(scene, [ integerHolder ])).toBe(true); + expect(levelAchv.validate([ integerHolder ])).toBe(true); }); }); @@ -195,10 +192,9 @@ describe("ModifierAchv", () => { it("should validate the achievement based on the modifier function", () => { const modifierAchv = new ModifierAchv("", "Test Modifier Achievement", "Test Description", "modifier_icon", 10, () => true); - const scene = new BattleScene(); const modifier = new TurnHeldItemTransferModifier(null!, 3, 1); - expect(modifierAchv.validate(scene, [ modifier ])).toBe(true); + expect(modifierAchv.validate([ modifier ])).toBe(true); }); }); diff --git a/src/test/arena/arena_gravity.test.ts b/test/arena/arena_gravity.test.ts similarity index 98% rename from src/test/arena/arena_gravity.test.ts rename to test/arena/arena_gravity.test.ts index 13e9c23a35c..75197a4341c 100644 --- a/src/test/arena/arena_gravity.test.ts +++ b/test/arena/arena_gravity.test.ts @@ -5,7 +5,7 @@ import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/arena/grassy_terrain.test.ts b/test/arena/grassy_terrain.test.ts similarity index 97% rename from src/test/arena/grassy_terrain.test.ts rename to test/arena/grassy_terrain.test.ts index ead4467925b..f493242a9d8 100644 --- a/src/test/arena/grassy_terrain.test.ts +++ b/test/arena/grassy_terrain.test.ts @@ -2,7 +2,7 @@ import { allMoves } from "#app/data/move"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/arena/weather_fog.test.ts b/test/arena/weather_fog.test.ts similarity index 96% rename from src/test/arena/weather_fog.test.ts rename to test/arena/weather_fog.test.ts index 8c1fcb1e3a4..8b4ffff3a64 100644 --- a/src/test/arena/weather_fog.test.ts +++ b/test/arena/weather_fog.test.ts @@ -4,7 +4,7 @@ import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { WeatherType } from "#enums/weather-type"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/arena/weather_hail.test.ts b/test/arena/weather_hail.test.ts similarity index 97% rename from src/test/arena/weather_hail.test.ts rename to test/arena/weather_hail.test.ts index 0b267550d75..137c7622517 100644 --- a/src/test/arena/weather_hail.test.ts +++ b/test/arena/weather_hail.test.ts @@ -2,7 +2,7 @@ import { BattlerIndex } from "#app/battle"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { WeatherType } from "#enums/weather-type"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/arena/weather_sandstorm.test.ts b/test/arena/weather_sandstorm.test.ts similarity index 98% rename from src/test/arena/weather_sandstorm.test.ts rename to test/arena/weather_sandstorm.test.ts index 17ccfdee94b..6420117d107 100644 --- a/src/test/arena/weather_sandstorm.test.ts +++ b/test/arena/weather_sandstorm.test.ts @@ -3,7 +3,7 @@ import { Stat } from "#app/enums/stat"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { WeatherType } from "#enums/weather-type"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/arena/weather_strong_winds.test.ts b/test/arena/weather_strong_winds.test.ts similarity index 98% rename from src/test/arena/weather_strong_winds.test.ts rename to test/arena/weather_strong_winds.test.ts index 557de93d644..2685a9149ae 100644 --- a/src/test/arena/weather_strong_winds.test.ts +++ b/test/arena/weather_strong_winds.test.ts @@ -4,7 +4,7 @@ import { TurnStartPhase } from "#app/phases/turn-start-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/battle-scene.test.ts b/test/battle-scene.test.ts similarity index 93% rename from src/test/battle-scene.test.ts rename to test/battle-scene.test.ts index 4da75cea197..44f1364441b 100644 --- a/src/test/battle-scene.test.ts +++ b/test/battle-scene.test.ts @@ -1,6 +1,6 @@ import { LoadingScene } from "#app/loading-scene"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import GameManager from "./utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; describe("BattleScene", () => { let phaserGame: Phaser.Game; diff --git a/test/battle/ability_swap.test.ts b/test/battle/ability_swap.test.ts new file mode 100644 index 00000000000..ff3f7c002bc --- /dev/null +++ b/test/battle/ability_swap.test.ts @@ -0,0 +1,67 @@ +import { allAbilities } from "#app/data/ability"; +import { Stat } from "#app/enums/stat"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Test Ability Swapping", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should activate post-summon abilities", async () => { + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.SPLASH); + game.scene.getPlayerPokemon()?.setTempAbility(allAbilities[Abilities.INTIMIDATE]); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.ATK)).toBe(-1); + }); + + it("should remove primal weather when the setter's ability is removed", async () => { + game.override.ability(Abilities.DESOLATE_LAND); + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.SPLASH); + game.scene.getPlayerPokemon()?.setTempAbility(allAbilities[Abilities.BALL_FETCH]); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.arena.weather?.weatherType).toBeUndefined(); + }); + + it("should not activate passive abilities", async () => { + game.override.passiveAbility(Abilities.INTREPID_SWORD); + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.SPLASH); + game.scene.getPlayerPokemon()?.setTempAbility(allAbilities[Abilities.BALL_FETCH]); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getPlayerPokemon()?.getStatStage(Stat.ATK)).toBe(1); // would be 2 if passive activated again + }); +}); diff --git a/src/test/battle/battle-order.test.ts b/test/battle/battle-order.test.ts similarity index 99% rename from src/test/battle/battle-order.test.ts rename to test/battle/battle-order.test.ts index d4e9950dec9..165a2fc916c 100644 --- a/src/test/battle/battle-order.test.ts +++ b/test/battle/battle-order.test.ts @@ -4,7 +4,7 @@ import { TurnStartPhase } from "#app/phases/turn-start-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/battle/battle.test.ts b/test/battle/battle.test.ts similarity index 97% rename from src/test/battle/battle.test.ts rename to test/battle/battle.test.ts index d2b074acce0..edd04cf8ed0 100644 --- a/src/test/battle/battle.test.ts +++ b/test/battle/battle.test.ts @@ -16,8 +16,8 @@ import { SwitchPhase } from "#app/phases/switch-phase"; import { TitlePhase } from "#app/phases/title-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; import { VictoryPhase } from "#app/phases/victory-phase"; -import GameManager from "#app/test/utils/gameManager"; -import { generateStarter } from "#app/test/utils/gameManagerUtils"; +import GameManager from "#test/testUtils/gameManager"; +import { generateStarter } from "#test/testUtils/gameManagerUtils"; import { Mode } from "#app/ui/ui"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; @@ -122,7 +122,7 @@ describe("Test Battle Phase", () => { }, 20000); it("load 100% data file", async () => { - await game.importData("src/test/utils/saves/everything.prsv"); + await game.importData("./test/testUtils/saves/everything.prsv"); const caughtCount = Object.keys(game.scene.gameData.dexData).filter((key) => { const species = game.scene.gameData.dexData[key]; return species.caughtAttr !== 0n; @@ -188,8 +188,8 @@ describe("Test Battle Phase", () => { game.onNextPrompt("TitlePhase", Mode.TITLE, () => { game.scene.gameMode = getGameMode(GameModes.CLASSIC); const starters = generateStarter(game.scene); - const selectStarterPhase = new SelectStarterPhase(game.scene); - game.scene.pushPhase(new EncounterPhase(game.scene, false)); + const selectStarterPhase = new SelectStarterPhase(); + game.scene.pushPhase(new EncounterPhase(false)); selectStarterPhase.initBattle(starters); }); await game.phaseInterceptor.runFrom(SelectGenderPhase).to(SummonPhase); diff --git a/src/test/battle/damage_calculation.test.ts b/test/battle/damage_calculation.test.ts similarity index 81% rename from src/test/battle/damage_calculation.test.ts rename to test/battle/damage_calculation.test.ts index e6aca828156..0a954b624c0 100644 --- a/src/test/battle/damage_calculation.test.ts +++ b/test/battle/damage_calculation.test.ts @@ -1,9 +1,11 @@ import { allMoves } from "#app/data/move"; +import type { EnemyPersistentModifier } from "#app/modifier/modifier"; +import { modifierTypes } from "#app/modifier/modifier-type"; import { Abilities } from "#enums/abilities"; import { ArenaTagType } from "#enums/arena-tag-type"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -65,6 +67,28 @@ describe("Battle Mechanics - Damage Calculation", () => { expect(aggron.hp).toBe(aggron.getMaxHp() - 1); }); + it("Attacks deal 1 damage at minimum even with many tokens", async () => { + game.override + .startingLevel(1) + .enemySpecies(Species.AGGRON) + .enemyAbility(Abilities.STURDY) + .enemyLevel(10000); + + await game.classicMode.startBattle([ Species.SHUCKLE ]); + + const dmg_redux_modifier = modifierTypes.ENEMY_DAMAGE_REDUCTION().newModifier() as EnemyPersistentModifier; + dmg_redux_modifier.stackCount = 1000; + await game.scene.addEnemyModifier(modifierTypes.ENEMY_DAMAGE_REDUCTION().newModifier() as EnemyPersistentModifier); + + const aggron = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.TACKLE); + + await game.phaseInterceptor.to("BerryPhase", false); + + expect(aggron.hp).toBe(aggron.getMaxHp() - 1); + }); + it("Fixed-damage moves ignore damage multipliers", async () => { game.override .enemySpecies(Species.DRAGONITE) diff --git a/src/test/battle/double_battle.test.ts b/test/battle/double_battle.test.ts similarity index 98% rename from src/test/battle/double_battle.test.ts rename to test/battle/double_battle.test.ts index b48f2a96a5b..de65245698e 100644 --- a/src/test/battle/double_battle.test.ts +++ b/test/battle/double_battle.test.ts @@ -6,7 +6,7 @@ import { TurnInitPhase } from "#app/phases/turn-init-phase"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/battle/inverse_battle.test.ts b/test/battle/inverse_battle.test.ts similarity index 99% rename from src/test/battle/inverse_battle.test.ts rename to test/battle/inverse_battle.test.ts index 0bda678bbd3..ce44824e772 100644 --- a/src/test/battle/inverse_battle.test.ts +++ b/test/battle/inverse_battle.test.ts @@ -6,7 +6,7 @@ import { Challenges } from "#enums/challenges"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/battle/special_battle.test.ts b/test/battle/special_battle.test.ts similarity index 98% rename from src/test/battle/special_battle.test.ts rename to test/battle/special_battle.test.ts index af9e3dddbec..df24626766c 100644 --- a/src/test/battle/special_battle.test.ts +++ b/test/battle/special_battle.test.ts @@ -3,7 +3,7 @@ import { Mode } from "#app/ui/ui"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/battlerTags/octolock.test.ts b/test/battlerTags/octolock.test.ts similarity index 61% rename from src/test/battlerTags/octolock.test.ts rename to test/battlerTags/octolock.test.ts index 9efce220fe8..f161d90d466 100644 --- a/src/test/battlerTags/octolock.test.ts +++ b/test/battlerTags/octolock.test.ts @@ -1,23 +1,34 @@ -import BattleScene from "#app/battle-scene"; -import { describe, expect, it, vi } from "vitest"; -import Pokemon from "#app/field/pokemon"; +import { afterEach, beforeAll, describe, expect, it, vi } from "vitest"; +import type Pokemon from "#app/field/pokemon"; import { BattlerTagLapseType, OctolockTag, TrappedTag } from "#app/data/battler-tags"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { Stat } from "#enums/stat"; - -vi.mock("#app/battle-scene.js"); +import GameManager from "#test/testUtils/gameManager"; describe("BattlerTag - OctolockTag", () => { describe("lapse behavior", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + game = new GameManager(phaserGame); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + it("unshifts a StatStageChangePhase with expected stat stage changes", async () => { const mockPokemon = { - scene: new BattleScene(), getBattlerIndex: () => 0, } as Pokemon; const subject = new OctolockTag(1); - vi.spyOn(mockPokemon.scene, "unshiftPhase").mockImplementation(phase => { + vi.spyOn(game.scene, "unshiftPhase").mockImplementation(phase => { expect(phase).toBeInstanceOf(StatStageChangePhase); expect((phase as StatStageChangePhase)["stages"]).toEqual(-1); expect((phase as StatStageChangePhase)["stats"]).toEqual([ Stat.DEF, Stat.SPDEF ]); @@ -25,7 +36,7 @@ describe("BattlerTag - OctolockTag", () => { subject.lapse(mockPokemon, BattlerTagLapseType.TURN_END); - expect(mockPokemon.scene.unshiftPhase).toBeCalledTimes(1); + expect(game.scene.unshiftPhase).toBeCalledTimes(1); }); }); diff --git a/src/test/battlerTags/stockpiling.test.ts b/test/battlerTags/stockpiling.test.ts similarity index 73% rename from src/test/battlerTags/stockpiling.test.ts rename to test/battlerTags/stockpiling.test.ts index dab189853c5..5970b5abbc6 100644 --- a/src/test/battlerTags/stockpiling.test.ts +++ b/test/battlerTags/stockpiling.test.ts @@ -1,28 +1,42 @@ -import BattleScene from "#app/battle-scene"; -import { beforeEach, describe, expect, it, vi } from "vitest"; -import Pokemon, { PokemonSummonData } from "#app/field/pokemon"; import { StockpilingTag } from "#app/data/battler-tags"; -import { Stat } from "#enums/stat"; +import type Pokemon from "#app/field/pokemon"; +import { PokemonSummonData } from "#app/field/pokemon"; import * as messages from "#app/messages"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; +import { Stat } from "#enums/stat"; +import GameManager from "#test/testUtils/gameManager"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; beforeEach(() => { vi.spyOn(messages, "getPokemonNameWithAffix").mockImplementation(() => ""); }); describe("BattlerTag - StockpilingTag", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + game = new GameManager(phaserGame); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + describe("onAdd", () => { it("unshifts a StatStageChangePhase with expected stat stage changes on add", async () => { const mockPokemon = { - scene: vi.mocked(new BattleScene()) as BattleScene, getBattlerIndex: () => 0, } as Pokemon; - vi.spyOn(mockPokemon.scene, "queueMessage").mockImplementation(() => {}); + vi.spyOn(game.scene, "queueMessage").mockImplementation(() => {}); const subject = new StockpilingTag(1); - vi.spyOn(mockPokemon.scene, "unshiftPhase").mockImplementation(phase => { + vi.spyOn(game.scene, "unshiftPhase").mockImplementation(phase => { expect(phase).toBeInstanceOf(StatStageChangePhase); expect((phase as StatStageChangePhase)["stages"]).toEqual(1); expect((phase as StatStageChangePhase)["stats"]).toEqual(expect.arrayContaining([ Stat.DEF, Stat.SPDEF ])); @@ -32,24 +46,23 @@ describe("BattlerTag - StockpilingTag", () => { subject.onAdd(mockPokemon); - expect(mockPokemon.scene.unshiftPhase).toBeCalledTimes(1); + expect(game.scene.unshiftPhase).toBeCalledTimes(1); }); it("unshifts a StatStageChangePhase with expected stat changes on add (one stat maxed)", async () => { const mockPokemon = { - scene: new BattleScene(), summonData: new PokemonSummonData(), getBattlerIndex: () => 0, - } as Pokemon; + } as unknown as Pokemon; - vi.spyOn(mockPokemon.scene, "queueMessage").mockImplementation(() => {}); + vi.spyOn(game.scene, "queueMessage").mockImplementation(() => {}); mockPokemon.summonData.statStages[Stat.DEF - 1] = 6; mockPokemon.summonData.statStages[Stat.SPD - 1] = 5; const subject = new StockpilingTag(1); - vi.spyOn(mockPokemon.scene, "unshiftPhase").mockImplementation(phase => { + vi.spyOn(game.scene, "unshiftPhase").mockImplementation(phase => { expect(phase).toBeInstanceOf(StatStageChangePhase); expect((phase as StatStageChangePhase)["stages"]).toEqual(1); expect((phase as StatStageChangePhase)["stats"]).toEqual(expect.arrayContaining([ Stat.DEF, Stat.SPDEF ])); @@ -59,22 +72,21 @@ describe("BattlerTag - StockpilingTag", () => { subject.onAdd(mockPokemon); - expect(mockPokemon.scene.unshiftPhase).toBeCalledTimes(1); + expect(game.scene.unshiftPhase).toBeCalledTimes(1); }); }); describe("onOverlap", () => { it("unshifts a StatStageChangePhase with expected stat changes on overlap", async () => { const mockPokemon = { - scene: new BattleScene(), getBattlerIndex: () => 0, } as Pokemon; - vi.spyOn(mockPokemon.scene, "queueMessage").mockImplementation(() => {}); + vi.spyOn(game.scene, "queueMessage").mockImplementation(() => {}); const subject = new StockpilingTag(1); - vi.spyOn(mockPokemon.scene, "unshiftPhase").mockImplementation(phase => { + vi.spyOn(game.scene, "unshiftPhase").mockImplementation(phase => { expect(phase).toBeInstanceOf(StatStageChangePhase); expect((phase as StatStageChangePhase)["stages"]).toEqual(1); expect((phase as StatStageChangePhase)["stats"]).toEqual(expect.arrayContaining([ Stat.DEF, Stat.SPDEF ])); @@ -84,26 +96,25 @@ describe("BattlerTag - StockpilingTag", () => { subject.onOverlap(mockPokemon); - expect(mockPokemon.scene.unshiftPhase).toBeCalledTimes(1); + expect(game.scene.unshiftPhase).toBeCalledTimes(1); }); }); describe("stack limit, stat tracking, and removal", () => { it("can be added up to three times, even when one stat does not change", async () => { const mockPokemon = { - scene: new BattleScene(), summonData: new PokemonSummonData(), getBattlerIndex: () => 0, } as Pokemon; - vi.spyOn(mockPokemon.scene, "queueMessage").mockImplementation(() => {}); + vi.spyOn(game.scene, "queueMessage").mockImplementation(() => {}); mockPokemon.summonData.statStages[Stat.DEF - 1] = 5; mockPokemon.summonData.statStages[Stat.SPD - 1] = 4; const subject = new StockpilingTag(1); - vi.spyOn(mockPokemon.scene, "unshiftPhase").mockImplementationOnce(phase => { + vi.spyOn(game.scene, "unshiftPhase").mockImplementationOnce(phase => { expect(phase).toBeInstanceOf(StatStageChangePhase); expect((phase as StatStageChangePhase)["stages"]).toEqual(1); expect((phase as StatStageChangePhase)["stats"]).toEqual(expect.arrayContaining([ Stat.DEF, Stat.SPDEF ])); @@ -115,7 +126,7 @@ describe("BattlerTag - StockpilingTag", () => { subject.onAdd(mockPokemon); expect(subject.stockpiledCount).toBe(1); - vi.spyOn(mockPokemon.scene, "unshiftPhase").mockImplementationOnce(phase => { + vi.spyOn(game.scene, "unshiftPhase").mockImplementationOnce(phase => { expect(phase).toBeInstanceOf(StatStageChangePhase); expect((phase as StatStageChangePhase)["stages"]).toEqual(1); expect((phase as StatStageChangePhase)["stats"]).toEqual(expect.arrayContaining([ Stat.DEF, Stat.SPDEF ])); @@ -127,7 +138,7 @@ describe("BattlerTag - StockpilingTag", () => { subject.onOverlap(mockPokemon); expect(subject.stockpiledCount).toBe(2); - vi.spyOn(mockPokemon.scene, "unshiftPhase").mockImplementationOnce(phase => { + vi.spyOn(game.scene, "unshiftPhase").mockImplementationOnce(phase => { expect(phase).toBeInstanceOf(StatStageChangePhase); expect((phase as StatStageChangePhase)["stages"]).toEqual(1); expect((phase as StatStageChangePhase)["stats"]).toEqual(expect.arrayContaining([ Stat.DEF, Stat.SPDEF ])); @@ -138,7 +149,7 @@ describe("BattlerTag - StockpilingTag", () => { subject.onOverlap(mockPokemon); expect(subject.stockpiledCount).toBe(3); - vi.spyOn(mockPokemon.scene, "unshiftPhase").mockImplementationOnce(_phase => { + vi.spyOn(game.scene, "unshiftPhase").mockImplementationOnce(_phase => { throw new Error("Should not be called a fourth time"); }); @@ -148,14 +159,14 @@ describe("BattlerTag - StockpilingTag", () => { expect(subject.statChangeCounts).toMatchObject({ [Stat.DEF]: 0, [Stat.SPDEF]: 2 }); // removing tag should reverse stat changes - vi.spyOn(mockPokemon.scene, "unshiftPhase").mockImplementationOnce(phase => { + vi.spyOn(game.scene, "unshiftPhase").mockImplementationOnce(phase => { expect(phase).toBeInstanceOf(StatStageChangePhase); expect((phase as StatStageChangePhase)["stages"]).toEqual(-2); expect((phase as StatStageChangePhase)["stats"]).toEqual(expect.arrayContaining([ Stat.SPDEF ])); }); subject.onRemove(mockPokemon); - expect(mockPokemon.scene.unshiftPhase).toHaveBeenCalledOnce(); // note that re-spying each add/overlap has been refreshing call count + expect(game.scene.unshiftPhase).toHaveBeenCalledOnce(); // note that re-spying each add/overlap has been refreshing call count }); }); }); diff --git a/src/test/battlerTags/substitute.test.ts b/test/battlerTags/substitute.test.ts similarity index 61% rename from src/test/battlerTags/substitute.test.ts rename to test/battlerTags/substitute.test.ts index af0aa63af89..4bf7e584ed3 100644 --- a/src/test/battlerTags/substitute.test.ts +++ b/test/battlerTags/substitute.test.ts @@ -1,14 +1,14 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; -import Pokemon, { MoveResult, PokemonTurnData, TurnMove, PokemonMove } from "#app/field/pokemon"; +import type { PokemonTurnData, TurnMove, PokemonMove } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; +import { MoveResult } from "#app/field/pokemon"; import BattleScene from "#app/battle-scene"; import { BattlerTagLapseType, BindTag, SubstituteTag } from "#app/data/battler-tags"; import { Moves } from "#app/enums/moves"; import { PokemonAnimType } from "#app/enums/pokemon-anim-type"; import * as messages from "#app/messages"; import { allMoves } from "#app/data/move"; -import { MoveEffectPhase } from "#app/phases/move-effect-phase"; - -vi.mock("#app/battle-scene.js"); +import type { MoveEffectPhase } from "#app/phases/move-effect-phase"; describe("BattlerTag - SubstituteTag", () => { let mockPokemon: Pokemon; @@ -26,10 +26,10 @@ describe("BattlerTag - SubstituteTag", () => { expect(tagFilter(trapTag)).toBeTruthy(); return true; }) as Pokemon["findAndRemoveTags"] - } as Pokemon; + } as unknown as Pokemon; vi.spyOn(messages, "getPokemonNameWithAffix").mockReturnValue(""); - vi.spyOn(mockPokemon.scene, "getPokemonById").mockImplementation(pokemonId => mockPokemon.id === pokemonId ? mockPokemon : null); + vi.spyOn(mockPokemon.scene as BattleScene, "getPokemonById").mockImplementation(pokemonId => mockPokemon.id === pokemonId ? mockPokemon : null); }); it( @@ -37,8 +37,8 @@ describe("BattlerTag - SubstituteTag", () => { async () => { const subject = new SubstituteTag(Moves.SUBSTITUTE, mockPokemon.id); - vi.spyOn(mockPokemon.scene, "triggerPokemonBattleAnim").mockReturnValue(true); - vi.spyOn(mockPokemon.scene, "queueMessage").mockReturnValue(); + vi.spyOn(mockPokemon.scene as BattleScene, "triggerPokemonBattleAnim").mockReturnValue(true); + vi.spyOn(mockPokemon.scene as BattleScene, "queueMessage").mockReturnValue(); subject.onAdd(mockPokemon); @@ -51,20 +51,20 @@ describe("BattlerTag - SubstituteTag", () => { async () => { const subject = new SubstituteTag(Moves.SUBSTITUTE, mockPokemon.id); - vi.spyOn(mockPokemon.scene, "triggerPokemonBattleAnim").mockImplementation( + vi.spyOn(mockPokemon.scene as BattleScene, "triggerPokemonBattleAnim").mockImplementation( (pokemon, battleAnimType, fieldAssets?, delayed?) => { expect(battleAnimType).toBe(PokemonAnimType.SUBSTITUTE_ADD); return true; } ); - vi.spyOn(mockPokemon.scene, "queueMessage").mockReturnValue(); + vi.spyOn(mockPokemon.scene as BattleScene, "queueMessage").mockReturnValue(); subject.onAdd(mockPokemon); expect(subject.sourceInFocus).toBeFalsy(); - expect(mockPokemon.scene.triggerPokemonBattleAnim).toHaveBeenCalledTimes(1); - expect(mockPokemon.scene.queueMessage).toHaveBeenCalledTimes(1); + expect((mockPokemon.scene as BattleScene).triggerPokemonBattleAnim).toHaveBeenCalledTimes(1); + expect((mockPokemon.scene as BattleScene).queueMessage).toHaveBeenCalledTimes(1); } ); @@ -73,7 +73,7 @@ describe("BattlerTag - SubstituteTag", () => { async () => { const subject = new SubstituteTag(Moves.SUBSTITUTE, mockPokemon.id); - vi.spyOn(mockPokemon.scene, "queueMessage").mockReturnValue(); + vi.spyOn(mockPokemon.scene as BattleScene, "queueMessage").mockReturnValue(); subject.onAdd(mockPokemon); expect(mockPokemon.findAndRemoveTags).toHaveBeenCalledTimes(1); @@ -88,7 +88,7 @@ describe("BattlerTag - SubstituteTag", () => { hp: 101, id: 0, isFainted: vi.fn().mockReturnValue(false) as Pokemon["isFainted"] - } as Pokemon; + } as unknown as Pokemon; vi.spyOn(messages, "getPokemonNameWithAffix").mockReturnValue(""); }); @@ -99,19 +99,19 @@ describe("BattlerTag - SubstituteTag", () => { const subject = new SubstituteTag(Moves.SUBSTITUTE, mockPokemon.id); subject.sourceInFocus = false; - vi.spyOn(mockPokemon.scene, "triggerPokemonBattleAnim").mockImplementation( + vi.spyOn(mockPokemon.scene as BattleScene, "triggerPokemonBattleAnim").mockImplementation( (pokemon, battleAnimType, fieldAssets?, delayed?) => { expect(battleAnimType).toBe(PokemonAnimType.SUBSTITUTE_REMOVE); return true; } ); - vi.spyOn(mockPokemon.scene, "queueMessage").mockReturnValue(); + vi.spyOn(mockPokemon.scene as BattleScene, "queueMessage").mockReturnValue(); subject.onRemove(mockPokemon); - expect(mockPokemon.scene.triggerPokemonBattleAnim).toHaveBeenCalledTimes(1); - expect(mockPokemon.scene.queueMessage).toHaveBeenCalledTimes(1); + expect((mockPokemon.scene as BattleScene).triggerPokemonBattleAnim).toHaveBeenCalledTimes(1); + expect((mockPokemon.scene as BattleScene).queueMessage).toHaveBeenCalledTimes(1); } ); }); @@ -124,7 +124,7 @@ describe("BattlerTag - SubstituteTag", () => { id: 0, turnData: { acted: true } as PokemonTurnData, getLastXMoves: vi.fn().mockReturnValue([ { move: Moves.TACKLE, result: MoveResult.SUCCESS } as TurnMove ]) as Pokemon["getLastXMoves"], - } as Pokemon; + } as unknown as Pokemon; vi.spyOn(messages, "getPokemonNameWithAffix").mockReturnValue(""); }); @@ -134,20 +134,20 @@ describe("BattlerTag - SubstituteTag", () => { async () => { const subject = new SubstituteTag(Moves.SUBSTITUTE, mockPokemon.id); - vi.spyOn(mockPokemon.scene, "triggerPokemonBattleAnim").mockImplementation( + vi.spyOn(mockPokemon.scene as BattleScene, "triggerPokemonBattleAnim").mockImplementation( (pokemon, battleAnimType, fieldAssets?, delayed?) => { expect(battleAnimType).toBe(PokemonAnimType.SUBSTITUTE_PRE_MOVE); return true; } ); - vi.spyOn(mockPokemon.scene, "queueMessage").mockReturnValue(); + vi.spyOn(mockPokemon.scene as BattleScene, "queueMessage").mockReturnValue(); expect(subject.lapse(mockPokemon, BattlerTagLapseType.PRE_MOVE)).toBeTruthy(); expect(subject.sourceInFocus).toBeTruthy(); - expect(mockPokemon.scene.triggerPokemonBattleAnim).toHaveBeenCalledTimes(1); - expect(mockPokemon.scene.queueMessage).not.toHaveBeenCalled(); + expect((mockPokemon.scene as BattleScene).triggerPokemonBattleAnim).toHaveBeenCalledTimes(1); + expect((mockPokemon.scene as BattleScene).queueMessage).not.toHaveBeenCalled(); } ); @@ -156,31 +156,31 @@ describe("BattlerTag - SubstituteTag", () => { async () => { const subject = new SubstituteTag(Moves.SUBSTITUTE, mockPokemon.id); - vi.spyOn(mockPokemon.scene, "triggerPokemonBattleAnim").mockImplementation( + vi.spyOn(mockPokemon.scene as BattleScene, "triggerPokemonBattleAnim").mockImplementation( (pokemon, battleAnimType, fieldAssets?, delayed?) => { expect(battleAnimType).toBe(PokemonAnimType.SUBSTITUTE_POST_MOVE); return true; } ); - vi.spyOn(mockPokemon.scene, "queueMessage").mockReturnValue(); + vi.spyOn(mockPokemon.scene as BattleScene, "queueMessage").mockReturnValue(); expect(subject.lapse(mockPokemon, BattlerTagLapseType.AFTER_MOVE)).toBeTruthy(); expect(subject.sourceInFocus).toBeFalsy(); - expect(mockPokemon.scene.triggerPokemonBattleAnim).toHaveBeenCalledTimes(1); - expect(mockPokemon.scene.queueMessage).not.toHaveBeenCalled(); + expect((mockPokemon.scene as BattleScene).triggerPokemonBattleAnim).toHaveBeenCalledTimes(1); + expect((mockPokemon.scene as BattleScene).queueMessage).not.toHaveBeenCalled(); } ); - /** TODO: Figure out how to mock a MoveEffectPhase correctly for this test */ - it.skip( + // TODO: Figure out how to mock a MoveEffectPhase correctly for this test + it.todo( "HIT lapse triggers on-hit message", async () => { const subject = new SubstituteTag(Moves.SUBSTITUTE, mockPokemon.id); - vi.spyOn(mockPokemon.scene, "triggerPokemonBattleAnim").mockReturnValue(true); - vi.spyOn(mockPokemon.scene, "queueMessage").mockReturnValue(); + vi.spyOn(mockPokemon.scene as BattleScene, "triggerPokemonBattleAnim").mockReturnValue(true); + vi.spyOn(mockPokemon.scene as BattleScene, "queueMessage").mockReturnValue(); const pokemonMove = { getMove: vi.fn().mockReturnValue(allMoves[Moves.TACKLE]) as PokemonMove["getMove"] @@ -191,13 +191,13 @@ describe("BattlerTag - SubstituteTag", () => { getUserPokemon: vi.fn().mockReturnValue(undefined) as MoveEffectPhase["getUserPokemon"] } as MoveEffectPhase; - vi.spyOn(mockPokemon.scene, "getCurrentPhase").mockReturnValue(moveEffectPhase); + vi.spyOn(mockPokemon.scene as BattleScene, "getCurrentPhase").mockReturnValue(moveEffectPhase); vi.spyOn(allMoves[Moves.TACKLE], "hitsSubstitute").mockReturnValue(true); expect(subject.lapse(mockPokemon, BattlerTagLapseType.HIT)).toBeTruthy(); - expect(mockPokemon.scene.triggerPokemonBattleAnim).not.toHaveBeenCalled(); - expect(mockPokemon.scene.queueMessage).toHaveBeenCalledTimes(1); + expect((mockPokemon.scene as BattleScene).triggerPokemonBattleAnim).not.toHaveBeenCalled(); + expect((mockPokemon.scene as BattleScene).queueMessage).toHaveBeenCalledTimes(1); } ); @@ -206,8 +206,8 @@ describe("BattlerTag - SubstituteTag", () => { async () => { const subject = new SubstituteTag(Moves.SUBSTITUTE, mockPokemon.id); - vi.spyOn(mockPokemon.scene, "triggerPokemonBattleAnim").mockReturnValue(true); - vi.spyOn(mockPokemon.scene, "queueMessage").mockReturnValue(); + vi.spyOn(mockPokemon.scene as BattleScene, "triggerPokemonBattleAnim").mockReturnValue(true); + vi.spyOn(mockPokemon.scene as BattleScene, "queueMessage").mockReturnValue(); expect(subject.lapse(mockPokemon, BattlerTagLapseType.CUSTOM)).toBeFalsy(); } @@ -218,13 +218,13 @@ describe("BattlerTag - SubstituteTag", () => { async () => { const subject = new SubstituteTag(Moves.SUBSTITUTE, mockPokemon.id); - vi.spyOn(mockPokemon.scene, "triggerPokemonBattleAnim").mockReturnValue(true); - vi.spyOn(mockPokemon.scene, "queueMessage").mockReturnValue(); + vi.spyOn(mockPokemon.scene as BattleScene, "triggerPokemonBattleAnim").mockReturnValue(true); + vi.spyOn(mockPokemon.scene as BattleScene, "queueMessage").mockReturnValue(); expect(subject.lapse(mockPokemon, BattlerTagLapseType.TURN_END)).toBeTruthy(); - expect(mockPokemon.scene.triggerPokemonBattleAnim).not.toHaveBeenCalled(); - expect(mockPokemon.scene.queueMessage).not.toHaveBeenCalled(); + expect((mockPokemon.scene as BattleScene).triggerPokemonBattleAnim).not.toHaveBeenCalled(); + expect((mockPokemon.scene as BattleScene).queueMessage).not.toHaveBeenCalled(); } ); }); diff --git a/src/test/boss-pokemon.test.ts b/test/boss-pokemon.test.ts similarity index 98% rename from src/test/boss-pokemon.test.ts rename to test/boss-pokemon.test.ts index 840b65f3cc6..ea5a9000000 100644 --- a/src/test/boss-pokemon.test.ts +++ b/test/boss-pokemon.test.ts @@ -1,11 +1,11 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; -import GameManager from "./utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Species } from "#app/enums/species"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { Abilities } from "#app/enums/abilities"; import { Moves } from "#app/enums/moves"; import { EFFECTIVE_STATS } from "#app/enums/stat"; -import { EnemyPokemon } from "#app/field/pokemon"; +import type { EnemyPokemon } from "#app/field/pokemon"; import { toDmgValue } from "#app/utils"; describe("Boss Pokemon / Shields", () => { diff --git a/src/test/daily_mode.test.ts b/test/daily_mode.test.ts similarity index 98% rename from src/test/daily_mode.test.ts rename to test/daily_mode.test.ts index 3e70cc2d8a7..95c01b51434 100644 --- a/src/test/daily_mode.test.ts +++ b/test/daily_mode.test.ts @@ -6,7 +6,7 @@ import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { Species } from "#enums/species"; import { Mode } from "#app/ui/ui"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; //const TIMEOUT = 20 * 1000; diff --git a/src/test/data/splash_messages.test.ts b/test/data/splash_messages.test.ts similarity index 100% rename from src/test/data/splash_messages.test.ts rename to test/data/splash_messages.test.ts diff --git a/src/test/data/status-effect.test.ts b/test/data/status_effect.test.ts similarity index 91% rename from src/test/data/status-effect.test.ts rename to test/data/status_effect.test.ts index 4831e8de5de..e94cb193f0a 100644 --- a/src/test/data/status-effect.test.ts +++ b/test/data/status_effect.test.ts @@ -11,8 +11,8 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; -import GameManager from "#test/utils/gameManager"; -import { mockI18next } from "#test/utils/testUtils"; +import GameManager from "#test/testUtils/gameManager"; +import { mockI18next } from "#test/testUtils/testUtils"; import i18next from "i18next"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -20,8 +20,8 @@ const pokemonName = "PKM"; const sourceText = "SOURCE"; describe("Status Effect Messages", () => { - beforeAll(() => { - i18next.init(); + beforeAll(async () => { + await i18next.init(); }); describe("NONE", () => { @@ -400,4 +400,42 @@ describe("Status Effects", () => { expect(player.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS); }); }); + + describe("Behavior", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.NUZZLE) + .enemyLevel(2000); + }); + + it("should not inflict a 0 HP mon with a status", async () => { + await game.classicMode.startBattle([ Species.FEEBAS, Species.MILOTIC ]); + + const player = game.scene.getPlayerPokemon()!; + player.hp = 0; + + expect(player.trySetStatus(StatusEffect.BURN)).toBe(false); + expect(player.status?.effect).not.toBe(StatusEffect.BURN); + }); + }); }); diff --git a/src/test/eggs/egg.test.ts b/test/eggs/egg.test.ts similarity index 93% rename from src/test/eggs/egg.test.ts rename to test/eggs/egg.test.ts index 1a33b4eff7c..e4a7cc31709 100644 --- a/src/test/eggs/egg.test.ts +++ b/test/eggs/egg.test.ts @@ -7,14 +7,14 @@ import { VariantTier } from "#app/enums/variant-tier"; import EggData from "#app/system/egg-data"; import * as Utils from "#app/utils"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; describe("Egg Generation Tests", () => { let phaserGame: Phaser.Game; let game: GameManager; - const EGG_HATCH_COUNT: integer = 1000; + const EGG_HATCH_COUNT: number = 1000; beforeAll(() => { phaserGame = new Phaser.Game({ @@ -29,24 +29,22 @@ describe("Egg Generation Tests", () => { }); beforeEach(async () => { - await game.importData("src/test/utils/saves/everything.prsv"); + await game.importData("./test/testUtils/saves/everything.prsv"); }); it("should return Kyogre for the 10th of June", () => { - const scene = game.scene; const timestamp = new Date(2024, 5, 10, 15, 0, 0, 0).getTime(); const expectedSpecies = Species.KYOGRE; - const result = getLegendaryGachaSpeciesForTimestamp(scene, timestamp); + const result = getLegendaryGachaSpeciesForTimestamp(timestamp); expect(result).toBe(expectedSpecies); }); it("should return Kyogre for the 10th of July", () => { - const scene = game.scene; const timestamp = new Date(2024, 6, 10, 15, 0, 0, 0).getTime(); const expectedSpecies = Species.KYOGRE; - const result = getLegendaryGachaSpeciesForTimestamp(scene, timestamp); + const result = getLegendaryGachaSpeciesForTimestamp(timestamp); expect(result).toBe(expectedSpecies); }); @@ -57,7 +55,7 @@ describe("Egg Generation Tests", () => { let gachaSpeciesCount = 0; for (let i = 0; i < EGG_HATCH_COUNT; i++) { - const result = new Egg({ scene, timestamp, sourceType: EggSourceType.GACHA_LEGENDARY, tier: EggTier.LEGENDARY }).generatePlayerPokemon(scene).species.speciesId; + const result = new Egg({ scene, timestamp, sourceType: EggSourceType.GACHA_LEGENDARY, tier: EggTier.LEGENDARY }).generatePlayerPokemon().species.speciesId; if (result === expectedSpecies) { gachaSpeciesCount++; } @@ -76,7 +74,7 @@ describe("Egg Generation Tests", () => { const scene = game.scene; const expectedSpecies = Species.ARCEUS; - const result = new Egg({ scene, species: expectedSpecies }).generatePlayerPokemon(scene).species.speciesId; + const result = new Egg({ scene, species: expectedSpecies }).generatePlayerPokemon().species.speciesId; expect(result).toBe(expectedSpecies); }); @@ -140,7 +138,7 @@ describe("Egg Generation Tests", () => { const scene = game.scene; const expectedResult = true; - const result = new Egg({ scene, isShiny: expectedResult, species: Species.BULBASAUR }).generatePlayerPokemon(scene).isShiny(); + const result = new Egg({ scene, isShiny: expectedResult, species: Species.BULBASAUR }).generatePlayerPokemon().isShiny(); expect(result).toBe(expectedResult); }); @@ -148,7 +146,7 @@ describe("Egg Generation Tests", () => { const scene = game.scene; const expectedVariantTier = VariantTier.STANDARD; - const result = new Egg({ scene, isShiny: true, variantTier: expectedVariantTier, species: Species.BULBASAUR }).generatePlayerPokemon(scene).variant; + const result = new Egg({ scene, isShiny: true, variantTier: expectedVariantTier, species: Species.BULBASAUR }).generatePlayerPokemon().variant; expect(result).toBe(expectedVariantTier); }); @@ -156,7 +154,7 @@ describe("Egg Generation Tests", () => { const scene = game.scene; const expectedVariantTier = VariantTier.RARE; - const result = new Egg({ scene, isShiny: true, variantTier: expectedVariantTier, species: Species.BULBASAUR }).generatePlayerPokemon(scene).variant; + const result = new Egg({ scene, isShiny: true, variantTier: expectedVariantTier, species: Species.BULBASAUR }).generatePlayerPokemon().variant; expect(result).toBe(expectedVariantTier); }); @@ -164,7 +162,7 @@ describe("Egg Generation Tests", () => { const scene = game.scene; const expectedVariantTier = VariantTier.EPIC; - const result = new Egg({ scene, isShiny: true, variantTier: expectedVariantTier, species: Species.BULBASAUR }).generatePlayerPokemon(scene).variant; + const result = new Egg({ scene, isShiny: true, variantTier: expectedVariantTier, species: Species.BULBASAUR }).generatePlayerPokemon().variant; expect(result).toBe(expectedVariantTier); }); @@ -187,7 +185,7 @@ describe("Egg Generation Tests", () => { it("should return a hatched pokemon with a hidden ability", () => { const scene = game.scene; - const playerPokemon = new Egg({ scene, overrideHiddenAbility: true, species: Species.BULBASAUR }).generatePlayerPokemon(scene); + const playerPokemon = new Egg({ scene, overrideHiddenAbility: true, species: Species.BULBASAUR }).generatePlayerPokemon(); const expectedAbilityIndex = playerPokemon.species.ability2 ? 2 : 1; const result = playerPokemon.abilityIndex; @@ -332,7 +330,7 @@ describe("Egg Generation Tests", () => { scene.resetSeed(); const firstEgg = new Egg({ scene, sourceType: EggSourceType.GACHA_SHINY, tier: EggTier.COMMON }); - const firstHatch = firstEgg.generatePlayerPokemon(scene); + const firstHatch = firstEgg.generatePlayerPokemon(); let diffEggMove = false; let diffSpecies = false; let diffShiny = false; @@ -343,7 +341,7 @@ describe("Egg Generation Tests", () => { scene.resetSeed(); // Make sure that eggs are unpredictable even if using same seed const newEgg = new Egg({ scene, sourceType: EggSourceType.GACHA_SHINY, tier: EggTier.COMMON }); - const newHatch = newEgg.generatePlayerPokemon(scene); + const newHatch = newEgg.generatePlayerPokemon(); diffEggMove = diffEggMove || (newEgg.eggMoveIndex !== firstEgg.eggMoveIndex); diffSpecies = diffSpecies || (newHatch.species.speciesId !== firstHatch.species.speciesId); diffShiny = diffShiny || (newHatch.shiny !== firstHatch.shiny); @@ -362,7 +360,7 @@ describe("Egg Generation Tests", () => { scene.resetSeed(); const firstEgg = new Egg({ scene, species: Species.BULBASAUR }); - const firstHatch = firstEgg.generatePlayerPokemon(scene); + const firstHatch = firstEgg.generatePlayerPokemon(); let diffEggMove = false; let diffSpecies = false; let diffShiny = false; @@ -372,7 +370,7 @@ describe("Egg Generation Tests", () => { scene.resetSeed(); // Make sure that eggs are unpredictable even if using same seed const newEgg = new Egg({ scene, species: Species.BULBASAUR }); - const newHatch = newEgg.generatePlayerPokemon(scene); + const newHatch = newEgg.generatePlayerPokemon(); diffEggMove = diffEggMove || (newEgg.eggMoveIndex !== firstEgg.eggMoveIndex); diffSpecies = diffSpecies || (newHatch.species.speciesId !== firstHatch.species.speciesId); diffShiny = diffShiny || (newHatch.shiny !== firstHatch.shiny); diff --git a/src/test/eggs/manaphy-egg.test.ts b/test/eggs/manaphy-egg.test.ts similarity index 91% rename from src/test/eggs/manaphy-egg.test.ts rename to test/eggs/manaphy-egg.test.ts index 3b2c40ae84a..c63dbae7780 100644 --- a/src/test/eggs/manaphy-egg.test.ts +++ b/test/eggs/manaphy-egg.test.ts @@ -2,14 +2,14 @@ import { Egg } from "#app/data/egg"; import { EggSourceType } from "#app/enums/egg-source-types"; import { EggTier } from "#app/enums/egg-type"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; describe("Manaphy Eggs", () => { let phaserGame: Phaser.Game; let game: GameManager; - const EGG_HATCH_COUNT: integer = 48; + const EGG_HATCH_COUNT: number = 48; let rngSweepProgress: number = 0; beforeAll(() => { @@ -25,7 +25,7 @@ describe("Manaphy Eggs", () => { }); beforeEach(async () => { - await game.importData("src/test/utils/saves/everything.prsv"); + await game.importData("./test/testUtils/saves/everything.prsv"); /** * In our tests, we will perform an "RNG sweep" by letting rngSweepProgress @@ -48,7 +48,7 @@ describe("Manaphy Eggs", () => { rngSweepProgress = (2 * i + 1) / (2 * EGG_HATCH_COUNT); const newEgg = new Egg({ scene, tier: EggTier.COMMON, sourceType: EggSourceType.GACHA_SHINY, id: 204 }); - const newHatch = newEgg.generatePlayerPokemon(scene); + const newHatch = newEgg.generatePlayerPokemon(); if (newHatch.species.speciesId === Species.MANAPHY) { manaphyCount++; } else if (newHatch.species.speciesId === Species.PHIONE) { @@ -74,7 +74,7 @@ describe("Manaphy Eggs", () => { rngSweepProgress = (2 * i + 1) / (2 * EGG_HATCH_COUNT); const newEgg = new Egg({ scene, species: Species.PHIONE, sourceType: EggSourceType.SAME_SPECIES_EGG }); - const newHatch = newEgg.generatePlayerPokemon(scene); + const newHatch = newEgg.generatePlayerPokemon(); if (newHatch.species.speciesId === Species.MANAPHY) { manaphyCount++; } else if (newHatch.species.speciesId === Species.PHIONE) { @@ -100,7 +100,7 @@ describe("Manaphy Eggs", () => { rngSweepProgress = (2 * i + 1) / (2 * EGG_HATCH_COUNT); const newEgg = new Egg({ scene, species: Species.MANAPHY, sourceType: EggSourceType.SAME_SPECIES_EGG }); - const newHatch = newEgg.generatePlayerPokemon(scene); + const newHatch = newEgg.generatePlayerPokemon(); if (newHatch.species.speciesId === Species.MANAPHY) { manaphyCount++; } else if (newHatch.species.speciesId === Species.PHIONE) { diff --git a/src/test/endless_boss.test.ts b/test/endless_boss.test.ts similarity index 98% rename from src/test/endless_boss.test.ts rename to test/endless_boss.test.ts index c9f3afc3936..ab7df412c12 100644 --- a/src/test/endless_boss.test.ts +++ b/test/endless_boss.test.ts @@ -2,7 +2,7 @@ import { Biome } from "#app/enums/biome"; import { Species } from "#app/enums/species"; import { GameModes } from "#app/game-mode"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; -import GameManager from "./utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; const EndlessBossWave = { Minor: 250, diff --git a/src/test/enemy_command.test.ts b/test/enemy_command.test.ts similarity index 90% rename from src/test/enemy_command.test.ts rename to test/enemy_command.test.ts index 49419f5b34d..b8e0c38b9e8 100644 --- a/src/test/enemy_command.test.ts +++ b/test/enemy_command.test.ts @@ -1,21 +1,23 @@ +import type BattleScene from "#app/battle-scene"; import { allMoves, MoveCategory } from "#app/data/move"; import { Abilities } from "#app/enums/abilities"; import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; -import { AiType, EnemyPokemon } from "#app/field/pokemon"; +import type { EnemyPokemon } from "#app/field/pokemon"; +import { AiType } from "#app/field/pokemon"; import { randSeedInt } from "#app/utils"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; - +let globalScene: BattleScene; const NUM_TRIALS = 300; type MoveChoiceSet = { [key: number]: number }; function getEnemyMoveChoices(pokemon: EnemyPokemon, moveChoices: MoveChoiceSet): void { // Use an unseeded random number generator in place of the mocked-out randBattleSeedInt - vi.spyOn(pokemon.scene, "randBattleSeedInt").mockImplementation((range, min?) => { + vi.spyOn(globalScene, "randBattleSeedInt").mockImplementation((range, min?) => { return randSeedInt(range, min); }); for (let i = 0; i < NUM_TRIALS; i++) { @@ -44,6 +46,7 @@ describe("Enemy Commands - Move Selection", () => { beforeEach(() => { game = new GameManager(phaserGame); + globalScene = game.scene; game.override .ability(Abilities.BALL_FETCH) diff --git a/src/test/escape-calculations.test.ts b/test/escape-calculations.test.ts similarity index 99% rename from src/test/escape-calculations.test.ts rename to test/escape-calculations.test.ts index cc18fd78066..6c5c8777d01 100644 --- a/src/test/escape-calculations.test.ts +++ b/test/escape-calculations.test.ts @@ -1,10 +1,10 @@ import { AttemptRunPhase } from "#app/phases/attempt-run-phase"; -import { CommandPhase } from "#app/phases/command-phase"; +import type { CommandPhase } from "#app/phases/command-phase"; import { Command } from "#app/ui/command-ui-handler"; import * as Utils from "#app/utils"; import { Abilities } from "#enums/abilities"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/evolution.test.ts b/test/evolution.test.ts similarity index 87% rename from src/test/evolution.test.ts rename to test/evolution.test.ts index 3046d103cbc..dbd4ef3a0d7 100644 --- a/src/test/evolution.test.ts +++ b/test/evolution.test.ts @@ -3,7 +3,7 @@ import { Abilities } from "#app/enums/abilities"; import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import * as Utils from "#app/utils"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -40,10 +40,10 @@ describe("Evolution", () => { eevee.abilityIndex = 2; trapinch.abilityIndex = 2; - eevee.evolve(pokemonEvolutions[Species.EEVEE][6], eevee.getSpeciesForm()); + await eevee.evolve(pokemonEvolutions[Species.EEVEE][6], eevee.getSpeciesForm()); expect(eevee.abilityIndex).toBe(2); - trapinch.evolve(pokemonEvolutions[Species.TRAPINCH][0], trapinch.getSpeciesForm()); + await trapinch.evolve(pokemonEvolutions[Species.TRAPINCH][0], trapinch.getSpeciesForm()); expect(trapinch.abilityIndex).toBe(1); }); @@ -55,10 +55,10 @@ describe("Evolution", () => { bulbasaur.abilityIndex = 0; charmander.abilityIndex = 1; - bulbasaur.evolve(pokemonEvolutions[Species.BULBASAUR][0], bulbasaur.getSpeciesForm()); + await bulbasaur.evolve(pokemonEvolutions[Species.BULBASAUR][0], bulbasaur.getSpeciesForm()); expect(bulbasaur.abilityIndex).toBe(0); - charmander.evolve(pokemonEvolutions[Species.CHARMANDER][0], charmander.getSpeciesForm()); + await charmander.evolve(pokemonEvolutions[Species.CHARMANDER][0], charmander.getSpeciesForm()); expect(charmander.abilityIndex).toBe(1); }); @@ -68,7 +68,7 @@ describe("Evolution", () => { const squirtle = game.scene.getPlayerPokemon()!; squirtle.abilityIndex = 5; - squirtle.evolve(pokemonEvolutions[Species.SQUIRTLE][0], squirtle.getSpeciesForm()); + await squirtle.evolve(pokemonEvolutions[Species.SQUIRTLE][0], squirtle.getSpeciesForm()); expect(squirtle.abilityIndex).toBe(0); }); @@ -78,12 +78,15 @@ describe("Evolution", () => { const nincada = game.scene.getPlayerPokemon()!; nincada.abilityIndex = 2; nincada.metBiome = -1; + nincada.gender = 1; - nincada.evolve(pokemonEvolutions[Species.NINCADA][0], nincada.getSpeciesForm()); + await nincada.evolve(pokemonEvolutions[Species.NINCADA][0], nincada.getSpeciesForm()); const ninjask = game.scene.getPlayerParty()[0]; const shedinja = game.scene.getPlayerParty()[1]; expect(ninjask.abilityIndex).toBe(2); expect(shedinja.abilityIndex).toBe(1); + expect(ninjask.gender).toBe(1); + expect(shedinja.gender).toBe(-1); // Regression test for https://github.com/pagefaultgames/pokerogue/issues/3842 expect(shedinja.metBiome).toBe(-1); }); @@ -171,7 +174,7 @@ describe("Evolution", () => { for (let f = 1; f < 4; f++) { vi.spyOn(Utils, "randSeedInt").mockReturnValue(f); // setting the random generator to 1, 2 and 3 to force 4 family mausholds const fourForm = playerPokemon.getEvolution()!; - expect(fourForm.evoFormKey).toBe(null); // meanwhile, according to the pokemon-forms, the evoFormKey for a 4 family maushold is null + expect(fourForm.evoFormKey).toBe("four"); // meanwhile, according to the pokemon-forms, the evoFormKey for a 4 family maushold is "four" } }); }); diff --git a/test/field/pokemon.test.ts b/test/field/pokemon.test.ts new file mode 100644 index 00000000000..b327fe0c137 --- /dev/null +++ b/test/field/pokemon.test.ts @@ -0,0 +1,212 @@ +import { Species } from "#app/enums/species"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import GameManager from "#test/testUtils/gameManager"; +import { PokeballType } from "#enums/pokeball"; +import type BattleScene from "#app/battle-scene"; +import { Moves } from "#app/enums/moves"; +import { Type } from "#app/enums/type"; +import { CustomPokemonData } from "#app/data/custom-pokemon-data"; + +describe("Spec - Pokemon", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + }); + + it("should not crash when trying to set status of undefined", async () => { + await game.classicMode.runToSummon([ Species.ABRA ]); + + const pkm = game.scene.getPlayerPokemon()!; + expect(pkm).toBeDefined(); + + expect(pkm.trySetStatus(undefined)).toBe(true); + }); + + describe("Add To Party", () => { + let scene: BattleScene; + + beforeEach(async () => { + game.override.enemySpecies(Species.ZUBAT); + await game.classicMode.runToSummon([ Species.ABRA, Species.ABRA, Species.ABRA, Species.ABRA, Species.ABRA ]); // 5 Abra, only 1 slot left + scene = game.scene; + }); + + it("should append a new pokemon by default", async () => { + const zubat = scene.getEnemyPokemon()!; + zubat.addToParty(PokeballType.LUXURY_BALL); + + const party = scene.getPlayerParty(); + expect(party).toHaveLength(6); + party.forEach((pkm, index) =>{ + expect(pkm.species.speciesId).toBe(index === 5 ? Species.ZUBAT : Species.ABRA); + }); + }); + + it("should put a new pokemon into the passed slotIndex", async () => { + const slotIndex = 1; + const zubat = scene.getEnemyPokemon()!; + zubat.addToParty(PokeballType.LUXURY_BALL, slotIndex); + + const party = scene.getPlayerParty(); + expect(party).toHaveLength(6); + party.forEach((pkm, index) =>{ + expect(pkm.species.speciesId).toBe(index === slotIndex ? Species.ZUBAT : Species.ABRA); + }); + }); + }); + + it("should not share tms between different forms", async () => { + game.override.starterForms({ [Species.ROTOM]: 4 }); + + await game.classicMode.startBattle([ Species.ROTOM ]); + + const fanRotom = game.scene.getPlayerPokemon()!; + + expect(fanRotom.compatibleTms).not.toContain(Moves.BLIZZARD); + expect(fanRotom.compatibleTms).toContain(Moves.AIR_SLASH); + }); + + describe("Get correct fusion type", () => { + let scene: BattleScene; + + beforeEach(async () => { + game.override.enemySpecies(Species.ZUBAT); + game.override.starterSpecies(Species.ABRA); + game.override.enableStarterFusion(); + scene = game.scene; + }); + + it("Fusing two mons with a single type", async () => { + game.override.starterFusionSpecies(Species.CHARMANDER); + await game.classicMode.startBattle(); + const pokemon = scene.getPlayerParty()[0]; + + let types = pokemon.getTypes(); + expect(types[0]).toBe(Type.PSYCHIC); + expect(types[1]).toBe(Type.FIRE); + + pokemon.customPokemonData.types = [ Type.UNKNOWN, Type.NORMAL ]; + types = pokemon.getTypes(); + expect(types[0]).toBe(Type.PSYCHIC); + expect(types[1]).toBe(Type.FIRE); + + pokemon.customPokemonData.types = [ Type.NORMAL, Type.UNKNOWN ]; + types = pokemon.getTypes(); + expect(types[0]).toBe(Type.NORMAL); + expect(types[1]).toBe(Type.FIRE); + + if (!pokemon.fusionCustomPokemonData) { + pokemon.fusionCustomPokemonData = new CustomPokemonData(); + } + pokemon.customPokemonData.types = []; + + pokemon.fusionCustomPokemonData.types = [ Type.UNKNOWN, Type.NORMAL ]; + types = pokemon.getTypes(); + expect(types[0]).toBe(Type.PSYCHIC); + expect(types[1]).toBe(Type.NORMAL); + + pokemon.fusionCustomPokemonData.types = [ Type.NORMAL, Type.UNKNOWN ]; + types = pokemon.getTypes(); + expect(types[0]).toBe(Type.PSYCHIC); + expect(types[1]).toBe(Type.NORMAL); + + pokemon.customPokemonData.types = [ Type.NORMAL, Type.UNKNOWN ]; + pokemon.fusionCustomPokemonData.types = [ Type.UNKNOWN, Type.NORMAL ]; + types = pokemon.getTypes(); + expect(types[0]).toBe(Type.NORMAL); + expect(types[1]).toBe(Type.FIRE); + }); + + it("Fusing two mons with same single type", async () => { + game.override.starterFusionSpecies(Species.DROWZEE); + await game.classicMode.startBattle(); + const pokemon = scene.getPlayerParty()[0]; + + const types = pokemon.getTypes(); + expect(types[0]).toBe(Type.PSYCHIC); + expect(types.length).toBe(1); + }); + + it("Fusing mons with one and two types", async () => { + game.override.starterSpecies(Species.CHARMANDER); + game.override.starterFusionSpecies(Species.HOUNDOUR); + await game.classicMode.startBattle(); + const pokemon = scene.getPlayerParty()[0]; + + const types = pokemon.getTypes(); + expect(types[0]).toBe(Type.FIRE); + expect(types[1]).toBe(Type.DARK); + }); + + it("Fusing mons with two and one types", async () => { + game.override.starterSpecies(Species.NUMEL); + game.override.starterFusionSpecies(Species.CHARMANDER); + await game.classicMode.startBattle(); + const pokemon = scene.getPlayerParty()[0]; + + const types = pokemon.getTypes(); + expect(types[0]).toBe(Type.FIRE); + expect(types[1]).toBe(Type.GROUND); + }); + + it("Fusing two mons with two types", async () => { + game.override.starterSpecies(Species.NATU); + game.override.starterFusionSpecies(Species.HOUNDOUR); + await game.classicMode.startBattle(); + const pokemon = scene.getPlayerParty()[0]; + + let types = pokemon.getTypes(); + expect(types[0]).toBe(Type.PSYCHIC); + expect(types[1]).toBe(Type.FIRE); + + // Natu Psychic/Grass + pokemon.customPokemonData.types = [ Type.UNKNOWN, Type.GRASS ]; + types = pokemon.getTypes(); + expect(types[0]).toBe(Type.PSYCHIC); + expect(types[1]).toBe(Type.FIRE); + + // Natu Grass/Flying + pokemon.customPokemonData.types = [ Type.GRASS, Type.UNKNOWN ]; + types = pokemon.getTypes(); + expect(types[0]).toBe(Type.GRASS); + expect(types[1]).toBe(Type.FIRE); + + if (!pokemon.fusionCustomPokemonData) { + pokemon.fusionCustomPokemonData = new CustomPokemonData(); + } + pokemon.customPokemonData.types = []; + + // Houndour Dark/Grass + pokemon.fusionCustomPokemonData.types = [ Type.UNKNOWN, Type.GRASS ]; + types = pokemon.getTypes(); + expect(types[0]).toBe(Type.PSYCHIC); + expect(types[1]).toBe(Type.GRASS); + + // Houndour Grass/Fire + pokemon.fusionCustomPokemonData.types = [ Type.GRASS, Type.UNKNOWN ]; + types = pokemon.getTypes(); + expect(types[0]).toBe(Type.PSYCHIC); + expect(types[1]).toBe(Type.FIRE); + + // Natu Grass/Flying + // Houndour Dark/Grass + pokemon.customPokemonData.types = [ Type.GRASS, Type.UNKNOWN ]; + pokemon.fusionCustomPokemonData.types = [ Type.UNKNOWN, Type.GRASS ]; + types = pokemon.getTypes(); + expect(types[0]).toBe(Type.GRASS); + expect(types[1]).toBe(Type.DARK); + }); + }); +}); diff --git a/src/test/final_boss.test.ts b/test/final_boss.test.ts similarity index 99% rename from src/test/final_boss.test.ts rename to test/final_boss.test.ts index 5540d9511e4..f7675c17005 100644 --- a/src/test/final_boss.test.ts +++ b/test/final_boss.test.ts @@ -5,7 +5,7 @@ import { Biome } from "#enums/biome"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; const FinalWave = { diff --git a/src/test/fontFace.setup.ts b/test/fontFace.setup.ts similarity index 100% rename from src/test/fontFace.setup.ts rename to test/fontFace.setup.ts diff --git a/src/test/game-mode.test.ts b/test/game-mode.test.ts similarity index 89% rename from src/test/game-mode.test.ts rename to test/game-mode.test.ts index 11994a102af..3f5819f9a38 100644 --- a/src/test/game-mode.test.ts +++ b/test/game-mode.test.ts @@ -1,7 +1,8 @@ -import { GameMode, GameModes, getGameMode } from "#app/game-mode"; +import type { GameMode } from "#app/game-mode"; +import { GameModes, getGameMode } from "#app/game-mode"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import * as Utils from "../utils"; -import GameManager from "./utils/gameManager"; +import * as Utils from "#app/utils"; +import GameManager from "#test/testUtils/gameManager"; describe("game-mode", () => { let phaserGame: Phaser.Game; diff --git a/src/test/imports.test.ts b/test/imports.test.ts similarity index 100% rename from src/test/imports.test.ts rename to test/imports.test.ts diff --git a/src/test/inputs/inputs.test.ts b/test/inputs/inputs.test.ts similarity index 96% rename from src/test/inputs/inputs.test.ts rename to test/inputs/inputs.test.ts index 6306c1b9da6..2cdab4b3eb2 100644 --- a/src/test/inputs/inputs.test.ts +++ b/test/inputs/inputs.test.ts @@ -1,7 +1,7 @@ import cfg_keyboard_qwerty from "#app/configs/inputs/cfg_keyboard_qwerty"; import pad_xbox360 from "#app/configs/inputs/pad_xbox360"; -import GameManager from "#test/utils/gameManager"; -import InputsHandler from "#test/utils/inputsHandler"; +import GameManager from "#test/testUtils/gameManager"; +import InputsHandler from "#test/testUtils/inputsHandler"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/internals.test.ts b/test/internals.test.ts similarity index 95% rename from src/test/internals.test.ts rename to test/internals.test.ts index ce2cd55dbc6..2cc827a8906 100644 --- a/src/test/internals.test.ts +++ b/test/internals.test.ts @@ -1,6 +1,6 @@ import { Abilities } from "#app/enums/abilities"; import { Species } from "#app/enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/items/dire_hit.test.ts b/test/items/dire_hit.test.ts similarity index 95% rename from src/test/items/dire_hit.test.ts rename to test/items/dire_hit.test.ts index 601552de7f1..4a94030ab93 100644 --- a/src/test/items/dire_hit.test.ts +++ b/test/items/dire_hit.test.ts @@ -1,13 +1,13 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { BattleEndPhase } from "#app/phases/battle-end-phase"; import { TempCritBoosterModifier } from "#app/modifier/modifier"; import { Mode } from "#app/ui/ui"; -import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; +import type ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { Button } from "#app/enums/buttons"; import { CommandPhase } from "#app/phases/command-phase"; import { NewBattlePhase } from "#app/phases/new-battle-phase"; diff --git a/src/test/items/double_battle_chance_booster.test.ts b/test/items/double_battle_chance_booster.test.ts similarity index 95% rename from src/test/items/double_battle_chance_booster.test.ts rename to test/items/double_battle_chance_booster.test.ts index 8d2bd7c9179..2a86a151685 100644 --- a/src/test/items/double_battle_chance_booster.test.ts +++ b/test/items/double_battle_chance_booster.test.ts @@ -1,12 +1,12 @@ import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { DoubleBattleChanceBoosterModifier } from "#app/modifier/modifier"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import { ShopCursorTarget } from "#app/enums/shop-cursor-target"; import { Mode } from "#app/ui/ui"; -import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; +import type ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { Button } from "#app/enums/buttons"; describe("Items - Double Battle Chance Boosters", () => { diff --git a/src/test/items/eviolite.test.ts b/test/items/eviolite.test.ts similarity index 99% rename from src/test/items/eviolite.test.ts rename to test/items/eviolite.test.ts index a97c287da29..64038cc9b82 100644 --- a/src/test/items/eviolite.test.ts +++ b/test/items/eviolite.test.ts @@ -2,7 +2,7 @@ import { StatBoosterModifier } from "#app/modifier/modifier"; import { NumberHolder, randItem } from "#app/utils"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/items/exp_booster.test.ts b/test/items/exp_booster.test.ts similarity index 88% rename from src/test/items/exp_booster.test.ts rename to test/items/exp_booster.test.ts index 36107329706..4519df29b01 100644 --- a/src/test/items/exp_booster.test.ts +++ b/test/items/exp_booster.test.ts @@ -1,7 +1,7 @@ import { Abilities } from "#app/enums/abilities"; import { PokemonExpBoosterModifier } from "#app/modifier/modifier"; import * as Utils from "#app/utils"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -34,7 +34,7 @@ describe("EXP Modifier Items", () => { const partyMember = game.scene.getPlayerPokemon()!; partyMember.exp = 100; const expHolder = new Utils.NumberHolder(partyMember.exp); - partyMember.scene.applyModifiers(PokemonExpBoosterModifier, true, partyMember, expHolder); + game.scene.applyModifiers(PokemonExpBoosterModifier, true, partyMember, expHolder); expect(expHolder.value).toBe(440); }, 20000); }); diff --git a/src/test/items/grip_claw.test.ts b/test/items/grip_claw.test.ts similarity index 95% rename from src/test/items/grip_claw.test.ts rename to test/items/grip_claw.test.ts index 2909549af87..854e0998d3b 100644 --- a/src/test/items/grip_claw.test.ts +++ b/test/items/grip_claw.test.ts @@ -1,11 +1,11 @@ import { BattlerIndex } from "#app/battle"; -import Pokemon from "#app/field/pokemon"; -import { ContactHeldItemTransferChanceModifier } from "#app/modifier/modifier"; +import type Pokemon from "#app/field/pokemon"; +import type { ContactHeldItemTransferChanceModifier } from "#app/modifier/modifier"; import { Abilities } from "#enums/abilities"; import { BerryType } from "#enums/berry-type"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/items/leek.test.ts b/test/items/leek.test.ts similarity index 98% rename from src/test/items/leek.test.ts rename to test/items/leek.test.ts index 901b353b3d3..a3c509d19dd 100644 --- a/src/test/items/leek.test.ts +++ b/test/items/leek.test.ts @@ -2,7 +2,7 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; import * as Utils from "#app/utils"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/items/leftovers.test.ts b/test/items/leftovers.test.ts similarity index 97% rename from src/test/items/leftovers.test.ts rename to test/items/leftovers.test.ts index 672151d97cb..8d74301968f 100644 --- a/src/test/items/leftovers.test.ts +++ b/test/items/leftovers.test.ts @@ -3,7 +3,7 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/items/light_ball.test.ts b/test/items/light_ball.test.ts similarity index 71% rename from src/test/items/light_ball.test.ts rename to test/items/light_ball.test.ts index fe79b6a2045..8dff8001ffc 100644 --- a/src/test/items/light_ball.test.ts +++ b/test/items/light_ball.test.ts @@ -4,7 +4,7 @@ import { modifierTypes } from "#app/modifier/modifier-type"; import i18next from "#app/plugins/i18n"; import * as Utils from "#app/utils"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -31,7 +31,7 @@ describe("Items - Light Ball", () => { it("LIGHT_BALL activates in battle correctly", async() => { game.override.startingHeldItems([{ name: "SPECIES_STAT_BOOSTER", type: "LIGHT_BALL" }]); const consoleSpy = vi.spyOn(console, "log"); - await game.startBattle([ + await game.classicMode.startBattle([ Species.PIKACHU ]); @@ -64,7 +64,7 @@ describe("Items - Light Ball", () => { }); it("LIGHT_BALL held by PIKACHU", async() => { - await game.startBattle([ + await game.classicMode.startBattle([ Species.PIKACHU ]); @@ -75,24 +75,24 @@ describe("Items - Light Ball", () => { // Making sure modifier is not applied without holding item const atkValue = new Utils.NumberHolder(atkStat); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, atkValue); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, atkValue); const spAtkValue = new Utils.NumberHolder(spAtkStat); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPDEF, spAtkValue); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPDEF, spAtkValue); expect(atkValue.value / atkStat).toBe(1); expect(spAtkValue.value / spAtkStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "LIGHT_BALL" ])!.newModifier(partyMember), true); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPATK, spAtkValue); + await game.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "LIGHT_BALL" ])!.newModifier(partyMember), true); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPATK, spAtkValue); expect(atkValue.value / atkStat).toBe(2); expect(spAtkValue.value / spAtkStat).toBe(2); }, 20000); it("LIGHT_BALL held by fused PIKACHU (base)", async() => { - await game.startBattle([ + await game.classicMode.startBattle([ Species.PIKACHU, Species.MAROWAK ]); @@ -114,17 +114,17 @@ describe("Items - Light Ball", () => { // Making sure modifier is not applied without holding item const atkValue = new Utils.NumberHolder(atkStat); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, atkValue); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, atkValue); const spAtkValue = new Utils.NumberHolder(spAtkStat); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPDEF, spAtkValue); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPDEF, spAtkValue); expect(atkValue.value / atkStat).toBe(1); expect(spAtkValue.value / spAtkStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "LIGHT_BALL" ])!.newModifier(partyMember), true); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPATK, spAtkValue); + await game.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "LIGHT_BALL" ])!.newModifier(partyMember), true); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPATK, spAtkValue); expect(atkValue.value / atkStat).toBe(2); expect(spAtkValue.value / spAtkStat).toBe(2); @@ -153,17 +153,17 @@ describe("Items - Light Ball", () => { // Making sure modifier is not applied without holding item const atkValue = new Utils.NumberHolder(atkStat); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, atkValue); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, atkValue); const spAtkValue = new Utils.NumberHolder(spAtkStat); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPDEF, spAtkValue); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPDEF, spAtkValue); expect(atkValue.value / atkStat).toBe(1); expect(spAtkValue.value / spAtkStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "LIGHT_BALL" ])!.newModifier(partyMember), true); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPATK, spAtkValue); + await game.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "LIGHT_BALL" ])!.newModifier(partyMember), true); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPATK, spAtkValue); expect(atkValue.value / atkStat).toBe(2); expect(spAtkValue.value / spAtkStat).toBe(2); @@ -181,17 +181,17 @@ describe("Items - Light Ball", () => { // Making sure modifier is not applied without holding item const atkValue = new Utils.NumberHolder(atkStat); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, atkValue); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, atkValue); const spAtkValue = new Utils.NumberHolder(spAtkStat); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPDEF, spAtkValue); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPDEF, spAtkValue); expect(atkValue.value / atkStat).toBe(1); expect(spAtkValue.value / spAtkStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "LIGHT_BALL" ])!.newModifier(partyMember), true); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPATK, spAtkValue); + await game.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "LIGHT_BALL" ])!.newModifier(partyMember), true); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPATK, spAtkValue); expect(atkValue.value / atkStat).toBe(1); expect(spAtkValue.value / spAtkStat).toBe(1); diff --git a/src/test/items/lock_capsule.test.ts b/test/items/lock_capsule.test.ts similarity index 84% rename from src/test/items/lock_capsule.test.ts rename to test/items/lock_capsule.test.ts index 0b6534b5eaf..4cdd3b8a8a0 100644 --- a/src/test/items/lock_capsule.test.ts +++ b/test/items/lock_capsule.test.ts @@ -3,7 +3,7 @@ import { Moves } from "#app/enums/moves"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import { Mode } from "#app/ui/ui"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -34,7 +34,7 @@ describe("Items - Lock Capsule", () => { it("doesn't set the cost of common tier items to 0", async () => { await game.classicMode.startBattle(); - game.scene.overridePhase(new SelectModifierPhase(game.scene, 0, undefined, { guaranteedModifierTiers: [ ModifierTier.COMMON, ModifierTier.COMMON, ModifierTier.COMMON ], fillRemaining: false })); + game.scene.overridePhase(new SelectModifierPhase(0, undefined, { guaranteedModifierTiers: [ ModifierTier.COMMON, ModifierTier.COMMON, ModifierTier.COMMON ], fillRemaining: false })); game.onNextPrompt("SelectModifierPhase", Mode.MODIFIER_SELECT, () => { const selectModifierPhase = game.scene.getCurrentPhase() as SelectModifierPhase; diff --git a/src/test/items/metal_powder.test.ts b/test/items/metal_powder.test.ts similarity index 78% rename from src/test/items/metal_powder.test.ts rename to test/items/metal_powder.test.ts index 86e7d329ecb..c1345af35df 100644 --- a/src/test/items/metal_powder.test.ts +++ b/test/items/metal_powder.test.ts @@ -4,7 +4,7 @@ import { modifierTypes } from "#app/modifier/modifier-type"; import i18next from "#app/plugins/i18n"; import * as Utils from "#app/utils"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -31,7 +31,7 @@ describe("Items - Metal Powder", () => { it("METAL_POWDER activates in battle correctly", async() => { game.override.startingHeldItems([{ name: "SPECIES_STAT_BOOSTER", type: "METAL_POWDER" }]); const consoleSpy = vi.spyOn(console, "log"); - await game.startBattle([ + await game.classicMode.startBattle([ Species.DITTO ]); @@ -74,13 +74,13 @@ describe("Items - Metal Powder", () => { // Making sure modifier is not applied without holding item const defValue = new Utils.NumberHolder(defStat); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); expect(defValue.value / defStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "METAL_POWDER" ])!.newModifier(partyMember), true); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); + await game.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "METAL_POWDER" ])!.newModifier(partyMember), true); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); expect(defValue.value / defStat).toBe(2); }, 20000); @@ -107,13 +107,13 @@ describe("Items - Metal Powder", () => { // Making sure modifier is not applied without holding item const defValue = new Utils.NumberHolder(defStat); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); expect(defValue.value / defStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "METAL_POWDER" ])!.newModifier(partyMember), true); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); + await game.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "METAL_POWDER" ])!.newModifier(partyMember), true); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); expect(defValue.value / defStat).toBe(2); }, 20000); @@ -140,13 +140,13 @@ describe("Items - Metal Powder", () => { // Making sure modifier is not applied without holding item const defValue = new Utils.NumberHolder(defStat); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); expect(defValue.value / defStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "METAL_POWDER" ])!.newModifier(partyMember), true); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); + await game.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "METAL_POWDER" ])!.newModifier(partyMember), true); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); expect(defValue.value / defStat).toBe(2); }, 20000); @@ -162,13 +162,13 @@ describe("Items - Metal Powder", () => { // Making sure modifier is not applied without holding item const defValue = new Utils.NumberHolder(defStat); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); expect(defValue.value / defStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "METAL_POWDER" ])!.newModifier(partyMember), true); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); + await game.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "METAL_POWDER" ])!.newModifier(partyMember), true); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); expect(defValue.value / defStat).toBe(1); }, 20000); diff --git a/src/test/items/multi_lens.test.ts b/test/items/multi_lens.test.ts similarity index 99% rename from src/test/items/multi_lens.test.ts rename to test/items/multi_lens.test.ts index bd586878fce..01447a29544 100644 --- a/src/test/items/multi_lens.test.ts +++ b/test/items/multi_lens.test.ts @@ -3,7 +3,7 @@ import { Stat } from "#enums/stat"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/items/quick_powder.test.ts b/test/items/quick_powder.test.ts similarity index 75% rename from src/test/items/quick_powder.test.ts rename to test/items/quick_powder.test.ts index 905d023ad8b..80ff0d7ba33 100644 --- a/src/test/items/quick_powder.test.ts +++ b/test/items/quick_powder.test.ts @@ -4,7 +4,7 @@ import { modifierTypes } from "#app/modifier/modifier-type"; import i18next from "#app/plugins/i18n"; import * as Utils from "#app/utils"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -31,7 +31,7 @@ describe("Items - Quick Powder", () => { it("QUICK_POWDER activates in battle correctly", async() => { game.override.startingHeldItems([{ name: "SPECIES_STAT_BOOSTER", type: "QUICK_POWDER" }]); const consoleSpy = vi.spyOn(console, "log"); - await game.startBattle([ + await game.classicMode.startBattle([ Species.DITTO ]); @@ -64,7 +64,7 @@ describe("Items - Quick Powder", () => { }); it("QUICK_POWDER held by DITTO", async() => { - await game.startBattle([ + await game.classicMode.startBattle([ Species.DITTO ]); @@ -74,19 +74,19 @@ describe("Items - Quick Powder", () => { // Making sure modifier is not applied without holding item const spdValue = new Utils.NumberHolder(spdStat); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); expect(spdValue.value / spdStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "QUICK_POWDER" ])!.newModifier(partyMember), true); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); + await game.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "QUICK_POWDER" ])!.newModifier(partyMember), true); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); expect(spdValue.value / spdStat).toBe(2); - }, 20000); + }); it("QUICK_POWDER held by fused DITTO (base)", async() => { - await game.startBattle([ + await game.classicMode.startBattle([ Species.DITTO, Species.MAROWAK ]); @@ -107,19 +107,19 @@ describe("Items - Quick Powder", () => { // Making sure modifier is not applied without holding item const spdValue = new Utils.NumberHolder(spdStat); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); expect(spdValue.value / spdStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "QUICK_POWDER" ])!.newModifier(partyMember), true); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); + await game.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "QUICK_POWDER" ])!.newModifier(partyMember), true); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); expect(spdValue.value / spdStat).toBe(2); - }, 20000); + }); it("QUICK_POWDER held by fused DITTO (part)", async() => { - await game.startBattle([ + await game.classicMode.startBattle([ Species.MAROWAK, Species.DITTO ]); @@ -140,19 +140,19 @@ describe("Items - Quick Powder", () => { // Making sure modifier is not applied without holding item const spdValue = new Utils.NumberHolder(spdStat); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); expect(spdValue.value / spdStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "QUICK_POWDER" ])!.newModifier(partyMember), true); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); + await game.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "QUICK_POWDER" ])!.newModifier(partyMember), true); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); expect(spdValue.value / spdStat).toBe(2); - }, 20000); + }); it("QUICK_POWDER not held by DITTO", async() => { - await game.startBattle([ + await game.classicMode.startBattle([ Species.MAROWAK ]); @@ -162,14 +162,14 @@ describe("Items - Quick Powder", () => { // Making sure modifier is not applied without holding item const spdValue = new Utils.NumberHolder(spdStat); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); expect(spdValue.value / spdStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "QUICK_POWDER" ])!.newModifier(partyMember), true); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); + await game.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "QUICK_POWDER" ])!.newModifier(partyMember), true); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); expect(spdValue.value / spdStat).toBe(1); - }, 20000); + }); }); diff --git a/src/test/items/scope_lens.test.ts b/test/items/scope_lens.test.ts similarity index 95% rename from src/test/items/scope_lens.test.ts rename to test/items/scope_lens.test.ts index e39517ceae9..98e374b6969 100644 --- a/src/test/items/scope_lens.test.ts +++ b/test/items/scope_lens.test.ts @@ -1,7 +1,7 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/items/temp_stat_stage_booster.test.ts b/test/items/temp_stat_stage_booster.test.ts similarity index 97% rename from src/test/items/temp_stat_stage_booster.test.ts rename to test/items/temp_stat_stage_booster.test.ts index 6186799623a..8bbd9f4f29d 100644 --- a/src/test/items/temp_stat_stage_booster.test.ts +++ b/test/items/temp_stat_stage_booster.test.ts @@ -1,5 +1,5 @@ import { BATTLE_STATS, Stat } from "#enums/stat"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import Phase from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -9,7 +9,7 @@ import { Abilities } from "#app/enums/abilities"; import { TempStatStageBoosterModifier } from "#app/modifier/modifier"; import { Mode } from "#app/ui/ui"; import { Button } from "#app/enums/buttons"; -import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; +import type ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { ShopCursorTarget } from "#app/enums/shop-cursor-target"; diff --git a/src/test/items/thick_club.test.ts b/test/items/thick_club.test.ts similarity index 72% rename from src/test/items/thick_club.test.ts rename to test/items/thick_club.test.ts index d349a1ad7b9..f18c0bd073e 100644 --- a/src/test/items/thick_club.test.ts +++ b/test/items/thick_club.test.ts @@ -4,7 +4,7 @@ import { modifierTypes } from "#app/modifier/modifier-type"; import i18next from "#app/plugins/i18n"; import * as Utils from "#app/utils"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -31,7 +31,7 @@ describe("Items - Thick Club", () => { it("THICK_CLUB activates in battle correctly", async() => { game.override.startingHeldItems([{ name: "SPECIES_STAT_BOOSTER", type: "THICK_CLUB" }]); const consoleSpy = vi.spyOn(console, "log"); - await game.startBattle([ + await game.classicMode.startBattle([ Species.CUBONE ]); @@ -64,7 +64,7 @@ describe("Items - Thick Club", () => { }); it("THICK_CLUB held by CUBONE", async() => { - await game.startBattle([ + await game.classicMode.startBattle([ Species.CUBONE ]); @@ -74,19 +74,19 @@ describe("Items - Thick Club", () => { // Making sure modifier is not applied without holding item const atkValue = new Utils.NumberHolder(atkStat); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); expect(atkValue.value / atkStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "THICK_CLUB" ])!.newModifier(partyMember), true); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); + await game.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "THICK_CLUB" ])!.newModifier(partyMember), true); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); expect(atkValue.value / atkStat).toBe(2); - }, 20000); + }); it("THICK_CLUB held by MAROWAK", async() => { - await game.startBattle([ + await game.classicMode.startBattle([ Species.MAROWAK ]); @@ -96,19 +96,19 @@ describe("Items - Thick Club", () => { // Making sure modifier is not applied without holding item const atkValue = new Utils.NumberHolder(atkStat); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); expect(atkValue.value / atkStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "THICK_CLUB" ])!.newModifier(partyMember), true); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); + await game.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "THICK_CLUB" ])!.newModifier(partyMember), true); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); expect(atkValue.value / atkStat).toBe(2); - }, 20000); + }); it("THICK_CLUB held by ALOLA_MAROWAK", async() => { - await game.startBattle([ + await game.classicMode.startBattle([ Species.ALOLA_MAROWAK ]); @@ -118,23 +118,23 @@ describe("Items - Thick Club", () => { // Making sure modifier is not applied without holding item const atkValue = new Utils.NumberHolder(atkStat); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); expect(atkValue.value / atkStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "THICK_CLUB" ])!.newModifier(partyMember), true); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); + await game.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "THICK_CLUB" ])!.newModifier(partyMember), true); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); expect(atkValue.value / atkStat).toBe(2); - }, 20000); + }); it("THICK_CLUB held by fused CUBONE line (base)", async() => { // Randomly choose from the Cubone line const species = [ Species.CUBONE, Species.MAROWAK, Species.ALOLA_MAROWAK ]; const randSpecies = Utils.randInt(species.length); - await game.startBattle([ + await game.classicMode.startBattle([ species[randSpecies], Species.PIKACHU ]); @@ -155,23 +155,23 @@ describe("Items - Thick Club", () => { // Making sure modifier is not applied without holding item const atkValue = new Utils.NumberHolder(atkStat); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); expect(atkValue.value / atkStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "THICK_CLUB" ])!.newModifier(partyMember), true); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); + await game.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "THICK_CLUB" ])!.newModifier(partyMember), true); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); expect(atkValue.value / atkStat).toBe(2); - }, 20000); + }); it("THICK_CLUB held by fused CUBONE line (part)", async() => { // Randomly choose from the Cubone line const species = [ Species.CUBONE, Species.MAROWAK, Species.ALOLA_MAROWAK ]; const randSpecies = Utils.randInt(species.length); - await game.startBattle([ + await game.classicMode.startBattle([ Species.PIKACHU, species[randSpecies] ]); @@ -192,19 +192,19 @@ describe("Items - Thick Club", () => { // Making sure modifier is not applied without holding item const atkValue = new Utils.NumberHolder(atkStat); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); expect(atkValue.value / atkStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "THICK_CLUB" ])!.newModifier(partyMember), true); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); + await game.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "THICK_CLUB" ])!.newModifier(partyMember), true); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); expect(atkValue.value / atkStat).toBe(2); - }, 20000); + }); it("THICK_CLUB not held by CUBONE", async() => { - await game.startBattle([ + await game.classicMode.startBattle([ Species.PIKACHU ]); @@ -214,14 +214,14 @@ describe("Items - Thick Club", () => { // Making sure modifier is not applied without holding item const atkValue = new Utils.NumberHolder(atkStat); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); expect(atkValue.value / atkStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "THICK_CLUB" ])!.newModifier(partyMember), true); - partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); + await game.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "THICK_CLUB" ])!.newModifier(partyMember), true); + game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); expect(atkValue.value / atkStat).toBe(1); - }, 20000); + }); }); diff --git a/src/test/items/toxic_orb.test.ts b/test/items/toxic_orb.test.ts similarity index 96% rename from src/test/items/toxic_orb.test.ts rename to test/items/toxic_orb.test.ts index 6918d7f34f0..8201036b927 100644 --- a/src/test/items/toxic_orb.test.ts +++ b/test/items/toxic_orb.test.ts @@ -3,7 +3,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/misc.test.ts b/test/misc.test.ts similarity index 95% rename from src/test/misc.test.ts rename to test/misc.test.ts index ae91a5014d9..f2b89418ef5 100644 --- a/src/test/misc.test.ts +++ b/test/misc.test.ts @@ -1,6 +1,6 @@ // import { apiFetch } from "#app/utils"; -import GameManager from "#test/utils/gameManager"; -import { waitUntil } from "#test/utils/gameManagerUtils"; +import GameManager from "#test/testUtils/gameManager"; +import { waitUntil } from "#test/testUtils/gameManagerUtils"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/moves/after_you.test.ts b/test/moves/after_you.test.ts similarity index 97% rename from src/test/moves/after_you.test.ts rename to test/moves/after_you.test.ts index 99f383194aa..bf030027436 100644 --- a/src/test/moves/after_you.test.ts +++ b/test/moves/after_you.test.ts @@ -4,7 +4,7 @@ import { MoveResult } from "#app/field/pokemon"; import { MovePhase } from "#app/phases/move-phase"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/alluring_voice.test.ts b/test/moves/alluring_voice.test.ts similarity index 96% rename from src/test/moves/alluring_voice.test.ts rename to test/moves/alluring_voice.test.ts index 2980f102735..bf5a9f90f82 100644 --- a/src/test/moves/alluring_voice.test.ts +++ b/test/moves/alluring_voice.test.ts @@ -4,7 +4,7 @@ import { BattlerTagType } from "#app/enums/battler-tag-type"; import { BerryPhase } from "#app/phases/berry-phase"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/aromatherapy.test.ts b/test/moves/aromatherapy.test.ts similarity index 98% rename from src/test/moves/aromatherapy.test.ts rename to test/moves/aromatherapy.test.ts index 874dadc0a1f..e70384355a0 100644 --- a/src/test/moves/aromatherapy.test.ts +++ b/test/moves/aromatherapy.test.ts @@ -3,7 +3,7 @@ import { CommandPhase } from "#app/phases/command-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; diff --git a/test/moves/assist.test.ts b/test/moves/assist.test.ts new file mode 100644 index 00000000000..4168ec6295a --- /dev/null +++ b/test/moves/assist.test.ts @@ -0,0 +1,105 @@ +import { BattlerIndex } from "#app/battle"; +import { Stat } from "#app/enums/stat"; +import { MoveResult } from "#app/field/pokemon"; +import { CommandPhase } from "#app/phases/command-phase"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Assist", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + // Manual moveset overrides are required for the player pokemon in these tests + // because the normal moveset override doesn't allow for accurate testing of moveset changes + game.override + .ability(Abilities.BALL_FETCH) + .battleType("double") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyLevel(100) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should only use an ally's moves", async () => { + game.override.enemyMoveset(Moves.SWORDS_DANCE); + await game.classicMode.startBattle([ Species.FEEBAS, Species.SHUCKLE ]); + + const [ feebas, shuckle ] = game.scene.getPlayerField(); + // These are all moves Assist cannot call; Sketch will be used to test that it can call other moves properly + game.move.changeMoveset(feebas, [ Moves.ASSIST, Moves.SKETCH, Moves.PROTECT, Moves.DRAGON_TAIL ]); + game.move.changeMoveset(shuckle, [ Moves.ASSIST, Moves.SKETCH, Moves.PROTECT, Moves.DRAGON_TAIL ]); + + game.move.select(Moves.ASSIST, 0); + game.move.select(Moves.SKETCH, 1); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER ]); + // Player_2 uses Sketch, copies Swords Dance, Player_1 uses Assist, uses Player_2's Sketched Swords Dance + await game.toNextTurn(); + + expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(2); // Stat raised from Assist -> Swords Dance + }); + + it("should fail if there are no allies", async () => { + await game.classicMode.startBattle([ Species.FEEBAS ]); + + const feebas = game.scene.getPlayerPokemon()!; + game.move.changeMoveset(feebas, [ Moves.ASSIST, Moves.SKETCH, Moves.PROTECT, Moves.DRAGON_TAIL ]); + + game.move.select(Moves.ASSIST, 0); + await game.toNextTurn(); + expect(game.scene.getPlayerPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); + }); + + it("should fail if ally has no usable moves and user has usable moves", async () => { + game.override.enemyMoveset(Moves.SWORDS_DANCE); + await game.classicMode.startBattle([ Species.FEEBAS, Species.SHUCKLE ]); + + const [ feebas, shuckle ] = game.scene.getPlayerField(); + game.move.changeMoveset(feebas, [ Moves.ASSIST, Moves.SKETCH, Moves.PROTECT, Moves.DRAGON_TAIL ]); + game.move.changeMoveset(shuckle, [ Moves.ASSIST, Moves.SKETCH, Moves.PROTECT, Moves.DRAGON_TAIL ]); + + game.move.select(Moves.SKETCH, 0); + game.move.select(Moves.PROTECT, 1); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2 ]); + // Player uses Sketch to copy Swords Dance, Player_2 stalls a turn. Player will attempt Assist and should have no usable moves + await game.toNextTurn(); + game.move.select(Moves.ASSIST, 0); + await game.phaseInterceptor.to(CommandPhase); + game.move.select(Moves.PROTECT, 1); + await game.toNextTurn(); + + expect(game.scene.getPlayerPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); + }); + + it("should apply secondary effects of a move", async () => { + game.override.moveset([ Moves.ASSIST, Moves.WOOD_HAMMER, Moves.WOOD_HAMMER, Moves.WOOD_HAMMER ]); + await game.classicMode.startBattle([ Species.FEEBAS, Species.SHUCKLE ]); + + const [ feebas, shuckle ] = game.scene.getPlayerField(); + game.move.changeMoveset(feebas, [ Moves.ASSIST, Moves.SKETCH, Moves.PROTECT, Moves.DRAGON_TAIL ]); + game.move.changeMoveset(shuckle, [ Moves.ASSIST, Moves.SKETCH, Moves.PROTECT, Moves.DRAGON_TAIL ]); + + game.move.select(Moves.ASSIST, 0); + await game.phaseInterceptor.to(CommandPhase); + game.move.select(Moves.ASSIST, 1); + await game.toNextTurn(); + + expect(game.scene.getPlayerPokemon()!.isFullHp()).toBeFalsy(); // should receive recoil damage from Wood Hammer + }); +}); diff --git a/src/test/moves/astonish.test.ts b/test/moves/astonish.test.ts similarity index 97% rename from src/test/moves/astonish.test.ts rename to test/moves/astonish.test.ts index d94e50fc9f9..87af0db737b 100644 --- a/src/test/moves/astonish.test.ts +++ b/test/moves/astonish.test.ts @@ -7,7 +7,7 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; diff --git a/src/test/moves/aurora_veil.test.ts b/test/moves/aurora_veil.test.ts similarity index 89% rename from src/test/moves/aurora_veil.test.ts rename to test/moves/aurora_veil.test.ts index 2d7484b4eb5..c8da3e03db5 100644 --- a/src/test/moves/aurora_veil.test.ts +++ b/test/moves/aurora_veil.test.ts @@ -1,17 +1,20 @@ +import type BattleScene from "#app/battle-scene"; import { ArenaTagSide } from "#app/data/arena-tag"; -import Move, { allMoves } from "#app/data/move"; +import type Move from "#app/data/move"; +import { allMoves } from "#app/data/move"; import { ArenaTagType } from "#app/enums/arena-tag-type"; -import Pokemon from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { NumberHolder } from "#app/utils"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { WeatherType } from "#enums/weather-type"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +let globalScene: BattleScene; describe("Moves - Aurora Veil", () => { let phaserGame: Phaser.Game; @@ -31,6 +34,7 @@ describe("Moves - Aurora Veil", () => { beforeEach(() => { game = new GameManager(phaserGame); + globalScene = game.scene; game.override.battleType("single"); game.override.ability(Abilities.NONE); game.override.moveset([ Moves.ABSORB, Moves.ROCK_SLIDE, Moves.TACKLE ]); @@ -110,8 +114,8 @@ const getMockedMoveDamage = (defender: Pokemon, attacker: Pokemon, move: Move) = const multiplierHolder = new NumberHolder(1); const side = defender.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; - if (defender.scene.arena.getTagOnSide(ArenaTagType.AURORA_VEIL, side)) { - defender.scene.arena.applyTagsForSide(ArenaTagType.AURORA_VEIL, side, false, attacker, move.category, multiplierHolder); + if (globalScene.arena.getTagOnSide(ArenaTagType.AURORA_VEIL, side)) { + globalScene.arena.applyTagsForSide(ArenaTagType.AURORA_VEIL, side, false, attacker, move.category, multiplierHolder); } return move.power * multiplierHolder.value; diff --git a/src/test/moves/autotomize.test.ts b/test/moves/autotomize.test.ts similarity index 98% rename from src/test/moves/autotomize.test.ts rename to test/moves/autotomize.test.ts index e15642b7ce5..29d2edbcf4e 100644 --- a/src/test/moves/autotomize.test.ts +++ b/test/moves/autotomize.test.ts @@ -1,7 +1,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest"; diff --git a/src/test/moves/baddy_bad.test.ts b/test/moves/baddy_bad.test.ts similarity index 95% rename from src/test/moves/baddy_bad.test.ts rename to test/moves/baddy_bad.test.ts index 1be25704393..78e7c63d49f 100644 --- a/src/test/moves/baddy_bad.test.ts +++ b/test/moves/baddy_bad.test.ts @@ -1,7 +1,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/baneful_bunker.test.ts b/test/moves/baneful_bunker.test.ts similarity index 98% rename from src/test/moves/baneful_bunker.test.ts rename to test/moves/baneful_bunker.test.ts index a0fc0f21ee2..55b4b7d985e 100644 --- a/src/test/moves/baneful_bunker.test.ts +++ b/test/moves/baneful_bunker.test.ts @@ -1,6 +1,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; -import GameManager from "../utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; diff --git a/src/test/moves/baton_pass.test.ts b/test/moves/baton_pass.test.ts similarity index 98% rename from src/test/moves/baton_pass.test.ts rename to test/moves/baton_pass.test.ts index 52e4c3ec016..6abd2d95f7b 100644 --- a/src/test/moves/baton_pass.test.ts +++ b/test/moves/baton_pass.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Abilities } from "#enums/abilities"; import { BattlerTagType } from "#enums/battler-tag-type"; import { Moves } from "#enums/moves"; diff --git a/src/test/moves/beak_blast.test.ts b/test/moves/beak_blast.test.ts similarity index 98% rename from src/test/moves/beak_blast.test.ts rename to test/moves/beak_blast.test.ts index 0c1e7bbeed9..177610182b0 100644 --- a/src/test/moves/beak_blast.test.ts +++ b/test/moves/beak_blast.test.ts @@ -6,7 +6,7 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/beat_up.test.ts b/test/moves/beat_up.test.ts similarity index 97% rename from src/test/moves/beat_up.test.ts rename to test/moves/beat_up.test.ts index 41e5b63471f..1ac2ae238b8 100644 --- a/src/test/moves/beat_up.test.ts +++ b/test/moves/beat_up.test.ts @@ -3,7 +3,7 @@ import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { StatusEffect } from "#app/enums/status-effect"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/belly_drum.test.ts b/test/moves/belly_drum.test.ts similarity index 98% rename from src/test/moves/belly_drum.test.ts rename to test/moves/belly_drum.test.ts index 0bed1248e7e..7d8b17262d7 100644 --- a/src/test/moves/belly_drum.test.ts +++ b/test/moves/belly_drum.test.ts @@ -3,7 +3,7 @@ import { toDmgValue } from "#app/utils"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; import { Abilities } from "#app/enums/abilities"; diff --git a/src/test/moves/burning_jealousy.test.ts b/test/moves/burning_jealousy.test.ts similarity index 95% rename from src/test/moves/burning_jealousy.test.ts rename to test/moves/burning_jealousy.test.ts index fe2735cfa96..bfa9af600a2 100644 --- a/src/test/moves/burning_jealousy.test.ts +++ b/test/moves/burning_jealousy.test.ts @@ -4,7 +4,7 @@ import { Abilities } from "#app/enums/abilities"; import { StatusEffect } from "#app/enums/status-effect"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -82,7 +82,8 @@ describe("Moves - Burning Jealousy", () => { expect(enemy.status?.effect).toBeUndefined(); }); - it.skip("should ignore weakness policy", async () => { // TODO: Make this test if WP is implemented + // TODO: Make this test if WP is implemented + it.todo("should ignore weakness policy", async () => { await game.classicMode.startBattle(); }); diff --git a/src/test/moves/camouflage.test.ts b/test/moves/camouflage.test.ts similarity index 96% rename from src/test/moves/camouflage.test.ts rename to test/moves/camouflage.test.ts index 5773afffcc3..8995e2d00bb 100644 --- a/src/test/moves/camouflage.test.ts +++ b/test/moves/camouflage.test.ts @@ -4,7 +4,7 @@ import { Species } from "#enums/species"; import { TerrainType } from "#app/data/terrain"; import { Type } from "#enums/type"; import { BattlerIndex } from "#app/battle"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/ceaseless_edge.test.ts b/test/moves/ceaseless_edge.test.ts similarity index 98% rename from src/test/moves/ceaseless_edge.test.ts rename to test/moves/ceaseless_edge.test.ts index 3fbbb7b0aaf..22cf310bc80 100644 --- a/src/test/moves/ceaseless_edge.test.ts +++ b/test/moves/ceaseless_edge.test.ts @@ -6,7 +6,7 @@ import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; diff --git a/src/test/moves/chilly_reception.test.ts b/test/moves/chilly_reception.test.ts similarity index 98% rename from src/test/moves/chilly_reception.test.ts rename to test/moves/chilly_reception.test.ts index 664ca242b20..0d99175a9bc 100644 --- a/src/test/moves/chilly_reception.test.ts +++ b/test/moves/chilly_reception.test.ts @@ -2,7 +2,7 @@ import { Abilities } from "#app/enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { WeatherType } from "#enums/weather-type"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; //import { TurnInitPhase } from "#app/phases/turn-init-phase"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/chloroblast.test.ts b/test/moves/chloroblast.test.ts similarity index 95% rename from src/test/moves/chloroblast.test.ts rename to test/moves/chloroblast.test.ts index 5e55bf46958..ee01935291a 100644 --- a/src/test/moves/chloroblast.test.ts +++ b/test/moves/chloroblast.test.ts @@ -1,7 +1,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/clangorous_soul.test.ts b/test/moves/clangorous_soul.test.ts similarity index 98% rename from src/test/moves/clangorous_soul.test.ts rename to test/moves/clangorous_soul.test.ts index 52e980cc4fa..6bb50b9ba59 100644 --- a/src/test/moves/clangorous_soul.test.ts +++ b/test/moves/clangorous_soul.test.ts @@ -1,6 +1,6 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import Phaser from "phaser"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/moves/copycat.test.ts b/test/moves/copycat.test.ts new file mode 100644 index 00000000000..9b111c7b342 --- /dev/null +++ b/test/moves/copycat.test.ts @@ -0,0 +1,91 @@ +import { BattlerIndex } from "#app/battle"; +import { allMoves, RandomMoveAttr } from "#app/data/move"; +import { Stat } from "#app/enums/stat"; +import { MoveResult } from "#app/field/pokemon"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; + +describe("Moves - Copycat", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + const randomMoveAttr = allMoves[Moves.METRONOME].getAttrs(RandomMoveAttr)[0]; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.COPYCAT, Moves.SPIKY_SHIELD, Moves.SWORDS_DANCE, Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .starterSpecies(Species.FEEBAS) + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should copy the last move successfully executed", async () => { + game.override.enemyMoveset(Moves.SUCKER_PUNCH); + await game.classicMode.startBattle(); + + game.move.select(Moves.SWORDS_DANCE); + await game.toNextTurn(); + + game.move.select(Moves.COPYCAT); // Last successful move should be Swords Dance + await game.toNextTurn(); + + expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(4); + }); + + it("should fail when the last move used is not a valid Copycat move", async () => { + game.override.enemyMoveset(Moves.PROTECT); // Protect is not a valid move for Copycat to copy + await game.classicMode.startBattle(); + + game.move.select(Moves.SPIKY_SHIELD); // Spiky Shield is not a valid move for Copycat to copy + await game.toNextTurn(); + + game.move.select(Moves.COPYCAT); + await game.toNextTurn(); + + expect(game.scene.getPlayerPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); + }); + + it("should copy the called move when the last move successfully calls another", async () => { + game.override + .moveset([ Moves.SPLASH, Moves.METRONOME ]) + .enemyMoveset(Moves.COPYCAT); + await game.classicMode.startBattle(); + vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(Moves.SWORDS_DANCE); + + game.move.select(Moves.METRONOME); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); // Player moves first, so enemy can copy Swords Dance + await game.toNextTurn(); + + expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(2); + }); + + it("should apply secondary effects of a move", async () => { + game.override.enemyMoveset(Moves.ACID_SPRAY); // Secondary effect lowers SpDef by 2 stages + await game.classicMode.startBattle(); + + game.move.select(Moves.COPYCAT); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextTurn(); + + expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.SPDEF)).toBe(-2); + }); +}); diff --git a/src/test/moves/crafty_shield.test.ts b/test/moves/crafty_shield.test.ts similarity index 98% rename from src/test/moves/crafty_shield.test.ts rename to test/moves/crafty_shield.test.ts index 93dd4a02538..054d19debf8 100644 --- a/src/test/moves/crafty_shield.test.ts +++ b/test/moves/crafty_shield.test.ts @@ -1,6 +1,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; -import GameManager from "../utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; diff --git a/test/moves/defog.test.ts b/test/moves/defog.test.ts new file mode 100644 index 00000000000..52c51df657a --- /dev/null +++ b/test/moves/defog.test.ts @@ -0,0 +1,71 @@ +import { Stat } from "#enums/stat"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Defog", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.MIST, Moves.SAFEGUARD, Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.SHUCKLE) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset([ Moves.DEFOG, Moves.GROWL ]); + }); + + it("should not allow Safeguard to be active", async () => { + await game.classicMode.startBattle([ Species.REGIELEKI ]); + + const playerPokemon = game.scene.getPlayerField(); + const enemyPokemon = game.scene.getEnemyField(); + + game.move.select(Moves.SAFEGUARD); + await game.forceEnemyMove(Moves.DEFOG); + await game.phaseInterceptor.to("BerryPhase"); + + expect(playerPokemon[0].isSafeguarded(enemyPokemon[0])).toBe(false); + + + expect(true).toBe(true); + }); + + + it("should not allow Mist to be active", async () => { + await game.classicMode.startBattle([ Species.REGIELEKI ]); + + const playerPokemon = game.scene.getPlayerField(); + + game.move.select(Moves.MIST); + await game.forceEnemyMove(Moves.DEFOG); + + await game.toNextTurn(); + + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.GROWL); + + await game.phaseInterceptor.to("BerryPhase"); + + expect(playerPokemon[0].getStatStage(Stat.ATK)).toBe(-1); + + expect(true).toBe(true); + }); +}); diff --git a/src/test/moves/destiny_bond.test.ts b/test/moves/destiny_bond.test.ts similarity index 98% rename from src/test/moves/destiny_bond.test.ts rename to test/moves/destiny_bond.test.ts index 4b4c8782862..9ae37ef5b9b 100644 --- a/src/test/moves/destiny_bond.test.ts +++ b/test/moves/destiny_bond.test.ts @@ -1,10 +1,11 @@ -import { ArenaTagSide, ArenaTrapTag } from "#app/data/arena-tag"; +import type { ArenaTrapTag } from "#app/data/arena-tag"; +import { ArenaTagSide } from "#app/data/arena-tag"; import { allMoves } from "#app/data/move"; import { Abilities } from "#enums/abilities"; import { ArenaTagType } from "#enums/arena-tag-type"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { BattlerIndex } from "#app/battle"; diff --git a/src/test/moves/diamond_storm.test.ts b/test/moves/diamond_storm.test.ts similarity index 96% rename from src/test/moves/diamond_storm.test.ts rename to test/moves/diamond_storm.test.ts index 6e5be2a790d..7a30f73a113 100644 --- a/src/test/moves/diamond_storm.test.ts +++ b/test/moves/diamond_storm.test.ts @@ -3,7 +3,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/moves/dig.test.ts b/test/moves/dig.test.ts similarity index 98% rename from src/test/moves/dig.test.ts rename to test/moves/dig.test.ts index 4c6b5d3b75d..53104f13b20 100644 --- a/src/test/moves/dig.test.ts +++ b/test/moves/dig.test.ts @@ -7,7 +7,7 @@ import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import { MoveResult } from "#app/field/pokemon"; import { describe, beforeAll, afterEach, beforeEach, it, expect } from "vitest"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; describe("Moves - Dig", () => { let phaserGame: Phaser.Game; diff --git a/src/test/moves/disable.test.ts b/test/moves/disable.test.ts similarity index 82% rename from src/test/moves/disable.test.ts rename to test/moves/disable.test.ts index 3748598fa90..044cfc762cd 100644 --- a/src/test/moves/disable.test.ts +++ b/test/moves/disable.test.ts @@ -3,7 +3,7 @@ import { MoveResult } from "#app/field/pokemon"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; describe("Moves - Disable", () => { @@ -123,6 +123,26 @@ describe("Moves - Disable", () => { await game.toNextTurn(); expect(enemyMon.isMoveRestricted(Moves.NATURE_POWER)).toBe(true); - expect(enemyMon.isMoveRestricted(enemyMon.getLastXMoves(2)[1].move)).toBe(false); + expect(enemyMon.isMoveRestricted(enemyMon.getLastXMoves(2)[0].move)).toBe(false); + }, 20000); + + it("disables most recent move", async() => { + game.override.enemyMoveset([ Moves.SPLASH, Moves.TACKLE ]); + await game.classicMode.startBattle(); + + const enemyMon = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextTurn(); + + game.move.select(Moves.DISABLE); + await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextTurn(); + + expect(enemyMon.isMoveRestricted(Moves.TACKLE)).toBe(true); + expect(enemyMon.isMoveRestricted(Moves.SPLASH)).toBe(false); }, 20000); }); diff --git a/src/test/moves/dive.test.ts b/test/moves/dive.test.ts similarity index 98% rename from src/test/moves/dive.test.ts rename to test/moves/dive.test.ts index b60416d7740..e8febaa72f6 100644 --- a/src/test/moves/dive.test.ts +++ b/test/moves/dive.test.ts @@ -4,7 +4,7 @@ import { MoveResult } from "#app/field/pokemon"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest"; import { WeatherType } from "#enums/weather-type"; diff --git a/test/moves/doodle.test.ts b/test/moves/doodle.test.ts new file mode 100644 index 00000000000..6272a822094 --- /dev/null +++ b/test/moves/doodle.test.ts @@ -0,0 +1,70 @@ +import { BattlerIndex } from "#app/battle"; +import { Stat } from "#app/enums/stat"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Doodle", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH, Moves.DOODLE ]) + .ability(Abilities.ADAPTABILITY) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should copy the opponent's ability in singles", async () => { + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.DOODLE); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getPlayerPokemon()?.getAbility().id).toBe(Abilities.BALL_FETCH); + }); + + it("should copy the opponent's ability to itself and its ally in doubles", async () => { + game.override.battleType("double"); + await game.classicMode.startBattle([ Species.FEEBAS, Species.MAGIKARP ]); + + game.move.select(Moves.DOODLE, 0, BattlerIndex.ENEMY); + game.move.select(Moves.SPLASH, 1); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getPlayerField()[0].getAbility().id).toBe(Abilities.BALL_FETCH); + expect(game.scene.getPlayerField()[1].getAbility().id).toBe(Abilities.BALL_FETCH); + }); + + it("should activate post-summon abilities", async () => { + game.override.battleType("double") + .enemyAbility(Abilities.INTIMIDATE); + + await game.classicMode.startBattle([ Species.FEEBAS, Species.MAGIKARP ]); + + game.move.select(Moves.DOODLE, 0, BattlerIndex.ENEMY); + game.move.select(Moves.SPLASH, 1); + await game.phaseInterceptor.to("BerryPhase"); + + // Enemies should have been intimidated twice + expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.ATK)).toBe(-2); + }); +}); diff --git a/src/test/moves/double_team.test.ts b/test/moves/double_team.test.ts similarity index 96% rename from src/test/moves/double_team.test.ts rename to test/moves/double_team.test.ts index 62848553e06..9145265bf93 100644 --- a/src/test/moves/double_team.test.ts +++ b/test/moves/double_team.test.ts @@ -3,7 +3,7 @@ import { Abilities } from "#app/enums/abilities"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/moves/dragon_cheer.test.ts b/test/moves/dragon_cheer.test.ts similarity index 98% rename from src/test/moves/dragon_cheer.test.ts rename to test/moves/dragon_cheer.test.ts index 750f09214ca..44bedeaa03a 100644 --- a/src/test/moves/dragon_cheer.test.ts +++ b/test/moves/dragon_cheer.test.ts @@ -3,7 +3,7 @@ import { Type } from "#enums/type"; import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { Abilities } from "#enums/abilities"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/moves/dragon_rage.test.ts b/test/moves/dragon_rage.test.ts similarity index 92% rename from src/test/moves/dragon_rage.test.ts rename to test/moves/dragon_rage.test.ts index d5536ff9d2f..0a5202825f5 100644 --- a/src/test/moves/dragon_rage.test.ts +++ b/test/moves/dragon_rage.test.ts @@ -1,12 +1,12 @@ import { Stat } from "#enums/stat"; import { Type } from "#enums/type"; import { Species } from "#app/enums/species"; -import { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; +import type { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Abilities } from "#enums/abilities"; import { BattlerTagType } from "#enums/battler-tag-type"; import { Moves } from "#enums/moves"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -45,14 +45,10 @@ describe("Moves - Dragon Rage", () => { game.override.enemyPassiveAbility(Abilities.BALL_FETCH); game.override.enemyLevel(100); - await game.startBattle(); + await game.classicMode.startBattle(); partyPokemon = game.scene.getPlayerParty()[0]; enemyPokemon = game.scene.getEnemyPokemon()!; - - // remove berries - game.scene.removePartyMemberModifiers(0); - game.scene.clearEnemyHeldItemModifiers(); }); it("ignores weaknesses", async () => { diff --git a/src/test/moves/dragon_tail.test.ts b/test/moves/dragon_tail.test.ts similarity index 99% rename from src/test/moves/dragon_tail.test.ts rename to test/moves/dragon_tail.test.ts index 96db67279d3..8415251c24c 100644 --- a/src/test/moves/dragon_tail.test.ts +++ b/test/moves/dragon_tail.test.ts @@ -7,7 +7,7 @@ import { Type } from "#enums/type"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/moves/dynamax_cannon.test.ts b/test/moves/dynamax_cannon.test.ts similarity index 92% rename from src/test/moves/dynamax_cannon.test.ts rename to test/moves/dynamax_cannon.test.ts index 269374f7514..0deb12b2737 100644 --- a/src/test/moves/dynamax_cannon.test.ts +++ b/test/moves/dynamax_cannon.test.ts @@ -4,7 +4,7 @@ import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -81,7 +81,7 @@ describe("Moves - Dynamax Cannon", () => { const phase = game.scene.getCurrentPhase() as MoveEffectPhase; expect(phase.move.moveId).toBe(dynamaxCannon.id); // Force level cap to be 100 - vi.spyOn(phase.getFirstTarget()!.scene, "getMaxExpLevel").mockReturnValue(100); + vi.spyOn(game.scene, "getMaxExpLevel").mockReturnValue(100); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(dynamaxCannon.calculateBattlePower).toHaveLastReturnedWith(120); }, 20000); @@ -98,7 +98,7 @@ describe("Moves - Dynamax Cannon", () => { const phase = game.scene.getCurrentPhase() as MoveEffectPhase; expect(phase.move.moveId).toBe(dynamaxCannon.id); // Force level cap to be 100 - vi.spyOn(phase.getFirstTarget()!.scene, "getMaxExpLevel").mockReturnValue(100); + vi.spyOn(game.scene, "getMaxExpLevel").mockReturnValue(100); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(dynamaxCannon.calculateBattlePower).toHaveLastReturnedWith(140); }, 20000); @@ -115,7 +115,7 @@ describe("Moves - Dynamax Cannon", () => { const phase = game.scene.getCurrentPhase() as MoveEffectPhase; expect(phase.move.moveId).toBe(dynamaxCannon.id); // Force level cap to be 100 - vi.spyOn(phase.getFirstTarget()!.scene, "getMaxExpLevel").mockReturnValue(100); + vi.spyOn(game.scene, "getMaxExpLevel").mockReturnValue(100); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(dynamaxCannon.calculateBattlePower).toHaveLastReturnedWith(160); }, 20000); @@ -132,7 +132,7 @@ describe("Moves - Dynamax Cannon", () => { const phase = game.scene.getCurrentPhase() as MoveEffectPhase; expect(phase.move.moveId).toBe(dynamaxCannon.id); // Force level cap to be 100 - vi.spyOn(phase.getFirstTarget()!.scene, "getMaxExpLevel").mockReturnValue(100); + vi.spyOn(game.scene, "getMaxExpLevel").mockReturnValue(100); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(dynamaxCannon.calculateBattlePower).toHaveLastReturnedWith(180); }, 20000); @@ -149,7 +149,7 @@ describe("Moves - Dynamax Cannon", () => { const phase = game.scene.getCurrentPhase() as MoveEffectPhase; expect(phase.move.moveId).toBe(dynamaxCannon.id); // Force level cap to be 100 - vi.spyOn(phase.getFirstTarget()!.scene, "getMaxExpLevel").mockReturnValue(100); + vi.spyOn(game.scene, "getMaxExpLevel").mockReturnValue(100); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(dynamaxCannon.calculateBattlePower).toHaveLastReturnedWith(200); }, 20000); diff --git a/src/test/moves/effectiveness.test.ts b/test/moves/effectiveness.test.ts similarity index 91% rename from src/test/moves/effectiveness.test.ts rename to test/moves/effectiveness.test.ts index 5ad258d7990..d9974fd1980 100644 --- a/src/test/moves/effectiveness.test.ts +++ b/test/moves/effectiveness.test.ts @@ -6,8 +6,7 @@ import { Abilities } from "#app/enums/abilities"; import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import * as Messages from "#app/messages"; -import { TerastallizeModifier, overrideHeldItems } from "#app/modifier/modifier"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, describe, expect, it, vi } from "vitest"; @@ -15,15 +14,14 @@ function testMoveEffectiveness(game: GameManager, move: Moves, targetSpecies: Sp expected: number, targetAbility: Abilities = Abilities.BALL_FETCH, teraType?: Type): void { // Suppress getPokemonNameWithAffix because it calls on a null battle spec vi.spyOn(Messages, "getPokemonNameWithAffix").mockReturnValue(""); - game.override - .enemyAbility(targetAbility) - .enemyHeldItems([{ name:"TERA_SHARD", type: teraType }]); + game.override.enemyAbility(targetAbility); const user = game.scene.addPlayerPokemon(getPokemonSpecies(Species.SNORLAX), 5); const target = game.scene.addEnemyPokemon(getPokemonSpecies(targetSpecies), 5, TrainerSlot.NONE); if (teraType !== undefined) { - overrideHeldItems(game.scene, target, false); + target.teraType = teraType; + target.isTerastallized = true; } expect(target.getMoveEffectiveness(user, allMoves[move])).toBe(expected); @@ -40,7 +38,6 @@ describe("Moves - Type Effectiveness", () => { type: Phaser.HEADLESS, }); game = new GameManager(phaserGame); - TerastallizeModifier.prototype.apply = (args) => true; game.override.ability(Abilities.BALL_FETCH); }); @@ -73,6 +70,10 @@ describe("Moves - Type Effectiveness", () => { () => testMoveEffectiveness(game, Moves.THUNDERBOLT, Species.BLASTOISE, 2) ); + it("Ghost-type attacks have no effect on Normal-type Pokemon", + () => testMoveEffectiveness(game, Moves.SHADOW_BALL, Species.URSALUNA, 0) + ); + it("Electric-type attacks are doubly super-effective against Water/Flying-type Pokemon", () => testMoveEffectiveness(game, Moves.THUNDERBOLT, Species.GYARADOS, 4) ); diff --git a/src/test/moves/electrify.test.ts b/test/moves/electrify.test.ts similarity index 97% rename from src/test/moves/electrify.test.ts rename to test/moves/electrify.test.ts index 8015dd0a74d..f7d78a2f4d0 100644 --- a/src/test/moves/electrify.test.ts +++ b/test/moves/electrify.test.ts @@ -3,7 +3,7 @@ import { Type } from "#enums/type"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; diff --git a/src/test/moves/electro_shot.test.ts b/test/moves/electro_shot.test.ts similarity index 98% rename from src/test/moves/electro_shot.test.ts rename to test/moves/electro_shot.test.ts index 283154b3408..7cc7e793f4a 100644 --- a/src/test/moves/electro_shot.test.ts +++ b/test/moves/electro_shot.test.ts @@ -5,7 +5,7 @@ import { MoveResult } from "#app/field/pokemon"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest"; diff --git a/src/test/moves/encore.test.ts b/test/moves/encore.test.ts similarity index 98% rename from src/test/moves/encore.test.ts rename to test/moves/encore.test.ts index 7d8dc9658bf..4cf466a7f2a 100644 --- a/src/test/moves/encore.test.ts +++ b/test/moves/encore.test.ts @@ -4,7 +4,7 @@ import { MoveResult } from "#app/field/pokemon"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/endure.test.ts b/test/moves/endure.test.ts similarity index 97% rename from src/test/moves/endure.test.ts rename to test/moves/endure.test.ts index bde5a26f68e..8514470d59c 100644 --- a/src/test/moves/endure.test.ts +++ b/test/moves/endure.test.ts @@ -1,7 +1,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/test/moves/entrainment.test.ts b/test/moves/entrainment.test.ts new file mode 100644 index 00000000000..608c6ef3676 --- /dev/null +++ b/test/moves/entrainment.test.ts @@ -0,0 +1,53 @@ +import { Stat } from "#app/enums/stat"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Entrainment", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH, Moves.ENTRAINMENT ]) + .ability(Abilities.ADAPTABILITY) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("gives its ability to the target", async () => { + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.ENTRAINMENT); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getEnemyPokemon()?.getAbility().id).toBe(Abilities.ADAPTABILITY); + }); + + it("should activate post-summon abilities", async () => { + game.override.ability(Abilities.INTIMIDATE); + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.ENTRAINMENT); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getPlayerPokemon()?.getStatStage(Stat.ATK)).toBe(-1); + }); +}); diff --git a/src/test/moves/fairy_lock.test.ts b/test/moves/fairy_lock.test.ts similarity index 99% rename from src/test/moves/fairy_lock.test.ts rename to test/moves/fairy_lock.test.ts index ceb298ed0fe..627eac401cc 100644 --- a/src/test/moves/fairy_lock.test.ts +++ b/test/moves/fairy_lock.test.ts @@ -3,7 +3,7 @@ import { ArenaTagType } from "#app/enums/arena-tag-type"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/fake_out.test.ts b/test/moves/fake_out.test.ts similarity index 98% rename from src/test/moves/fake_out.test.ts rename to test/moves/fake_out.test.ts index f20b6db3a13..21a129b6410 100644 --- a/src/test/moves/fake_out.test.ts +++ b/test/moves/fake_out.test.ts @@ -1,4 +1,4 @@ -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import Phaser from "phaser"; diff --git a/test/moves/fell_stinger.test.ts b/test/moves/fell_stinger.test.ts new file mode 100644 index 00000000000..fdcba624e22 --- /dev/null +++ b/test/moves/fell_stinger.test.ts @@ -0,0 +1,198 @@ +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import GameManager from "#test/testUtils/gameManager"; +import { Species } from "#enums/species"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Stat } from "#enums/stat"; +import { StatusEffect } from "#app/enums/status-effect"; +import { WeatherType } from "#app/enums/weather-type"; +import { allMoves } from "#app/data/move"; + + +describe("Moves - Fell Stinger", () => { + 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.battleType("single") + .moveset([ + Moves.FELL_STINGER, + Moves.SALT_CURE, + Moves.BIND, + Moves.LEECH_SEED + ]) + .startingLevel(50) + .disableCrits() + .enemyAbility(Abilities.STURDY) + .enemySpecies(Species.HYPNO) + .enemyMoveset(Moves.SPLASH) + .enemyLevel(5); + }); + + it("should not grant stat boost if opponent gets KO'd by recoil", async () => { + game.override.enemyMoveset([ Moves.DOUBLE_EDGE ]); + + await game.classicMode.startBattle([ Species.LEAVANNY ]); + const leadPokemon = game.scene.getPlayerPokemon()!; + game.move.select(Moves.FELL_STINGER); + + await game.phaseInterceptor.to("VictoryPhase"); + + expect(leadPokemon.getStatStage(Stat.ATK)).toBe(0); + }); + + it("should not grant stat boost if enemy is KO'd by status effect", async () => { + game.override + .enemyMoveset(Moves.SPLASH) + .enemyStatusEffect(StatusEffect.BURN); + + await game.classicMode.startBattle([ Species.LEAVANNY ]); + const leadPokemon = game.scene.getPlayerPokemon()!; + game.move.select(Moves.FELL_STINGER); + + await game.phaseInterceptor.to("VictoryPhase"); + + expect(leadPokemon.getStatStage(Stat.ATK)).toBe(0); + }); + + it("should not grant stat boost if enemy is KO'd by damaging weather", async () => { + game.override.weather(WeatherType.HAIL); + + await game.classicMode.startBattle([ Species.LEAVANNY ]); + const leadPokemon = game.scene.getPlayerPokemon()!; + + game.move.select(Moves.FELL_STINGER); + + await game.phaseInterceptor.to("VictoryPhase"); + + expect(leadPokemon.getStatStage(Stat.ATK)).toBe(0); + }); + + it("should not grant stat boost if enemy is KO'd by Dry Skin + Harsh Sunlight", async () => { + game.override + .enemyPassiveAbility(Abilities.STURDY) + .enemyAbility(Abilities.DRY_SKIN) + .weather(WeatherType.HARSH_SUN); + + await game.challengeMode.startBattle([ Species.LEAVANNY ]); + const leadPokemon = game.scene.getPlayerPokemon()!; + + game.move.select(Moves.FELL_STINGER); + + await game.phaseInterceptor.to("VictoryPhase"); + + expect(leadPokemon.getStatStage(Stat.ATK)).toBe(0); + }); + + it("should not grant stat boost if enemy is saved by Reviver Seed", async () => { + game.override + .enemyAbility(Abilities.BALL_FETCH) + .enemyHeldItems([{ name: "REVIVER_SEED" }]); + + await game.classicMode.startBattle([ Species.LEAVANNY ]); + const leadPokemon = game.scene.getPlayerPokemon()!; + game.move.select(Moves.FELL_STINGER); + + await game.phaseInterceptor.to("TurnEndPhase"); + expect(leadPokemon.getStatStage(Stat.ATK)).toBe(0); + }); + + it("should not grant stat boost if enemy is KO'd by Salt Cure", async () => { + game.override.battleType("double") + .startingLevel(5); + const saltCure = allMoves[Moves.SALT_CURE]; + const fellStinger = allMoves[Moves.FELL_STINGER]; + vi.spyOn(saltCure, "accuracy", "get").mockReturnValue(100); + vi.spyOn(fellStinger, "power", "get").mockReturnValue(50000); + + await game.classicMode.startBattle([ Species.LEAVANNY ]); + const leadPokemon = game.scene.getPlayerPokemon()!; + const leftEnemy = game.scene.getEnemyField()[0]!; + + // Turn 1: set Salt Cure, enemy splashes and does nothing + game.move.select(Moves.SALT_CURE, 0, leftEnemy.getBattlerIndex()); + + // Turn 2: enemy Endures Fell Stinger, then dies to Salt Cure + await game.toNextTurn(); + expect(leftEnemy.isFainted()).toBe(false); + leftEnemy.heal(leftEnemy.getMaxHp()); + game.move.select(Moves.FELL_STINGER); + await game.toNextTurn(); + + expect(leftEnemy.isFainted()).toBe(true); + expect(leadPokemon.getStatStage(Stat.ATK)).toBe(0); + }); + + it("should not grant stat boost if enemy dies to Bind or a similar effect", async () => { + game.override.battleType("double") + .startingLevel(5); + vi.spyOn(allMoves[Moves.BIND], "accuracy", "get").mockReturnValue(100); + vi.spyOn(allMoves[Moves.FELL_STINGER], "power", "get").mockReturnValue(50000); + + await game.classicMode.startBattle([ Species.LEAVANNY ]); + const leadPokemon = game.scene.getPlayerPokemon()!; + const leftEnemy = game.scene.getEnemyField()[0]!; + + // Turn 1: set Bind, enemy splashes and does nothing + game.move.select(Moves.BIND, 0, leftEnemy.getBattlerIndex()); + + // Turn 2: enemy Endures Fell Stinger, then dies to Bind + await game.toNextTurn(); + expect(leftEnemy.isFainted()).toBe(false); + leftEnemy.heal(leftEnemy.getMaxHp()); + game.move.select(Moves.FELL_STINGER, 0, leftEnemy.getBattlerIndex()); + await game.toNextTurn(); + + expect(leftEnemy.isFainted()).toBe(true); + expect(leadPokemon.getStatStage(Stat.ATK)).toBe(0); + }); + + it("should not grant stat boost if enemy dies to Leech Seed", async () => { + game.override.battleType("double") + .startingLevel(5); + vi.spyOn(allMoves[Moves.LEECH_SEED], "accuracy", "get").mockReturnValue(100); + vi.spyOn(allMoves[Moves.FELL_STINGER], "power", "get").mockReturnValue(50000); + + await game.classicMode.startBattle([ Species.LEAVANNY ]); + const leadPokemon = game.scene.getPlayerPokemon()!; + const leftEnemy = game.scene.getEnemyField()[0]!; + + // Turn 1: set Leech Seed, enemy splashes and does nothing + game.move.select(Moves.LEECH_SEED, 0, leftEnemy.getBattlerIndex()); + + // Turn 2: enemy Endures Fell Stinger, then dies to Leech Seed + await game.toNextTurn(); + expect(leftEnemy.isFainted()).toBe(false); + leftEnemy.heal(leftEnemy.getMaxHp()); + game.move.select(Moves.FELL_STINGER, 0, leftEnemy.getBattlerIndex()); + await game.toNextTurn(); + + expect(leftEnemy.isFainted()).toBe(true); + expect(leadPokemon.getStatStage(Stat.ATK)).toBe(0); + }); + + it("should grant stat boost if enemy dies directly to hit", async () => { + game.override.enemyAbility(Abilities.KLUTZ); + + await game.classicMode.startBattle([ Species.LEAVANNY ]); + const leadPokemon = game.scene.getPlayerPokemon(); + game.move.select(Moves.FELL_STINGER); + + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(leadPokemon?.getStatStage(Stat.ATK)).toBe(3); + }); +}); diff --git a/src/test/moves/fillet_away.test.ts b/test/moves/fillet_away.test.ts similarity index 98% rename from src/test/moves/fillet_away.test.ts rename to test/moves/fillet_away.test.ts index aa3243270cb..076a3011afa 100644 --- a/src/test/moves/fillet_away.test.ts +++ b/test/moves/fillet_away.test.ts @@ -3,7 +3,7 @@ import { toDmgValue } from "#app/utils"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; diff --git a/src/test/moves/fissure.test.ts b/test/moves/fissure.test.ts similarity index 90% rename from src/test/moves/fissure.test.ts rename to test/moves/fissure.test.ts index 15dabb971cc..07f2a3bfacb 100644 --- a/src/test/moves/fissure.test.ts +++ b/test/moves/fissure.test.ts @@ -1,11 +1,11 @@ import { Stat } from "#enums/stat"; import { Species } from "#app/enums/species"; -import { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; +import type { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -41,14 +41,10 @@ describe("Moves - Fissure", () => { game.override.enemyPassiveAbility(Abilities.BALL_FETCH); game.override.enemyLevel(100); - await game.startBattle(); + await game.classicMode.startBattle(); partyPokemon = game.scene.getPlayerParty()[0]; enemyPokemon = game.scene.getEnemyPokemon()!; - - // remove berries - game.scene.removePartyMemberModifiers(0); - game.scene.clearEnemyHeldItemModifiers(); }); it("ignores damage modification from abilities, for example FUR_COAT", async () => { diff --git a/src/test/moves/flame_burst.test.ts b/test/moves/flame_burst.test.ts similarity index 97% rename from src/test/moves/flame_burst.test.ts rename to test/moves/flame_burst.test.ts index feedee3b7bc..7bcf06d92ae 100644 --- a/src/test/moves/flame_burst.test.ts +++ b/test/moves/flame_burst.test.ts @@ -1,10 +1,10 @@ import { allAbilities } from "#app/data/ability"; import { Abilities } from "#app/enums/abilities"; -import Pokemon from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/moves/flower_shield.test.ts b/test/moves/flower_shield.test.ts similarity index 98% rename from src/test/moves/flower_shield.test.ts rename to test/moves/flower_shield.test.ts index 4c03df5212b..d6f79c40533 100644 --- a/src/test/moves/flower_shield.test.ts +++ b/test/moves/flower_shield.test.ts @@ -6,7 +6,7 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/fly.test.ts b/test/moves/fly.test.ts similarity index 98% rename from src/test/moves/fly.test.ts rename to test/moves/fly.test.ts index 6ae758fe3dc..b0abf96e128 100644 --- a/src/test/moves/fly.test.ts +++ b/test/moves/fly.test.ts @@ -4,7 +4,7 @@ import { MoveResult } from "#app/field/pokemon"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; import { BattlerIndex } from "#app/battle"; diff --git a/src/test/moves/focus_punch.test.ts b/test/moves/focus_punch.test.ts similarity index 78% rename from src/test/moves/focus_punch.test.ts rename to test/moves/focus_punch.test.ts index 352e3b60aa4..1f14a19fbd7 100644 --- a/src/test/moves/focus_punch.test.ts +++ b/test/moves/focus_punch.test.ts @@ -6,9 +6,10 @@ import { TurnStartPhase } from "#app/phases/turn-start-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; +import i18next from "i18next"; import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; describe("Moves - Focus Punch", () => { @@ -41,7 +42,7 @@ describe("Moves - Focus Punch", () => { it( "should deal damage at the end of turn if uninterrupted", async () => { - await game.startBattle([ Species.CHARIZARD ]); + await game.classicMode.startBattle([ Species.CHARIZARD ]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -68,7 +69,7 @@ describe("Moves - Focus Punch", () => { async () => { game.override.enemyMoveset([ Moves.TACKLE ]); - await game.startBattle([ Species.CHARIZARD ]); + await game.classicMode.startBattle([ Species.CHARIZARD ]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -95,7 +96,7 @@ describe("Moves - Focus Punch", () => { async () => { game.override.enemyMoveset([ Moves.SPORE ]); - await game.startBattle([ Species.CHARIZARD ]); + await game.classicMode.startBattle([ Species.CHARIZARD ]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -119,7 +120,7 @@ describe("Moves - Focus Punch", () => { /** Guarantee a Trainer battle with multiple enemy Pokemon */ game.override.startingWave(25); - await game.startBattle([ Species.CHARIZARD ]); + await game.classicMode.startBattle([ Species.CHARIZARD ]); game.forceEnemyToSwitch(); game.move.select(Moves.FOCUS_PUNCH); @@ -130,4 +131,15 @@ describe("Moves - Focus Punch", () => { expect(game.scene.phaseQueue.find(phase => phase instanceof MoveHeaderPhase)).toBeDefined(); } ); + it("should replace the 'but it failed' text when the user gets hit", async () => { + game.override.enemyMoveset([ Moves.TACKLE ]); + await game.classicMode.startBattle([ Species.CHARIZARD ]); + + game.move.select(Moves.FOCUS_PUNCH); + await game.phaseInterceptor.to("MoveEndPhase", true); + await game.phaseInterceptor.to("MessagePhase", false); + const consoleSpy = vi.spyOn(console, "log"); + await game.phaseInterceptor.to("MoveEndPhase", true); + expect(consoleSpy).nthCalledWith(1, i18next.t("moveTriggers:lostFocus", { pokemonName: "Charizard" })); + }); }); diff --git a/src/test/moves/follow_me.test.ts b/test/moves/follow_me.test.ts similarity index 98% rename from src/test/moves/follow_me.test.ts rename to test/moves/follow_me.test.ts index fba7937f812..bef9b9ddb01 100644 --- a/src/test/moves/follow_me.test.ts +++ b/test/moves/follow_me.test.ts @@ -4,7 +4,7 @@ import { Abilities } from "#app/enums/abilities"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; diff --git a/src/test/moves/foresight.test.ts b/test/moves/foresight.test.ts similarity index 97% rename from src/test/moves/foresight.test.ts rename to test/moves/foresight.test.ts index 1195cd0b71b..7dccd0fefca 100644 --- a/src/test/moves/foresight.test.ts +++ b/test/moves/foresight.test.ts @@ -1,7 +1,7 @@ import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/moves/forests_curse.test.ts b/test/moves/forests_curse.test.ts similarity index 96% rename from src/test/moves/forests_curse.test.ts rename to test/moves/forests_curse.test.ts index 010b00599a5..c9977190c9d 100644 --- a/src/test/moves/forests_curse.test.ts +++ b/test/moves/forests_curse.test.ts @@ -2,7 +2,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { Type } from "#enums/type"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/freeze_dry.test.ts b/test/moves/freeze_dry.test.ts similarity index 97% rename from src/test/moves/freeze_dry.test.ts rename to test/moves/freeze_dry.test.ts index 9206a103a35..f07105882c2 100644 --- a/src/test/moves/freeze_dry.test.ts +++ b/test/moves/freeze_dry.test.ts @@ -4,7 +4,7 @@ import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { Type } from "#enums/type"; import { Challenges } from "#enums/challenges"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -117,11 +117,12 @@ describe("Moves - Freeze-Dry", () => { }); it("should deal 2x damage to steel type terastallized into water", async () => { - game.override.enemySpecies(Species.SKARMORY) - .enemyHeldItems([{ name: "TERA_SHARD", type: Type.WATER }]); + game.override.enemySpecies(Species.SKARMORY); await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; + enemy.teraType = Type.WATER; + enemy.isTerastallized = true; vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(Moves.FREEZE_DRY); @@ -132,11 +133,12 @@ describe("Moves - Freeze-Dry", () => { }); it("should deal 0.5x damage to water type terastallized into fire", async () => { - game.override.enemySpecies(Species.PELIPPER) - .enemyHeldItems([{ name: "TERA_SHARD", type: Type.FIRE }]); + game.override.enemySpecies(Species.PELIPPER); await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; + enemy.teraType = Type.FIRE; + enemy.isTerastallized = true; vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(Moves.FREEZE_DRY); diff --git a/src/test/moves/freezy_frost.test.ts b/test/moves/freezy_frost.test.ts similarity index 98% rename from src/test/moves/freezy_frost.test.ts rename to test/moves/freezy_frost.test.ts index 09d7779474f..26c7d06961f 100644 --- a/src/test/moves/freezy_frost.test.ts +++ b/test/moves/freezy_frost.test.ts @@ -2,7 +2,7 @@ import { Stat } from "#enums/stat"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { allMoves } from "#app/data/move"; diff --git a/src/test/moves/fusion_bolt.test.ts b/test/moves/fusion_bolt.test.ts similarity index 96% rename from src/test/moves/fusion_bolt.test.ts rename to test/moves/fusion_bolt.test.ts index 4e35b939abf..9bb53ef8fb0 100644 --- a/src/test/moves/fusion_bolt.test.ts +++ b/test/moves/fusion_bolt.test.ts @@ -1,7 +1,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/fusion_flare.test.ts b/test/moves/fusion_flare.test.ts similarity index 96% rename from src/test/moves/fusion_flare.test.ts rename to test/moves/fusion_flare.test.ts index 75641c04d02..02f5b19d97f 100644 --- a/src/test/moves/fusion_flare.test.ts +++ b/test/moves/fusion_flare.test.ts @@ -2,7 +2,7 @@ import { TurnStartPhase } from "#app/phases/turn-start-phase"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/fusion_flare_bolt.test.ts b/test/moves/fusion_flare_bolt.test.ts similarity index 99% rename from src/test/moves/fusion_flare_bolt.test.ts rename to test/moves/fusion_flare_bolt.test.ts index dbd4479dff8..340020c85b7 100644 --- a/src/test/moves/fusion_flare_bolt.test.ts +++ b/test/moves/fusion_flare_bolt.test.ts @@ -7,7 +7,7 @@ import { MoveEndPhase } from "#app/phases/move-end-phase"; import { MovePhase } from "#app/phases/move-phase"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/moves/future_sight.test.ts b/test/moves/future_sight.test.ts similarity index 95% rename from src/test/moves/future_sight.test.ts rename to test/moves/future_sight.test.ts index d0110a87202..e0a9a1efd04 100644 --- a/src/test/moves/future_sight.test.ts +++ b/test/moves/future_sight.test.ts @@ -1,7 +1,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/gastro_acid.test.ts b/test/moves/gastro_acid.test.ts similarity index 97% rename from src/test/moves/gastro_acid.test.ts rename to test/moves/gastro_acid.test.ts index ec9246c855c..2e4f7938306 100644 --- a/src/test/moves/gastro_acid.test.ts +++ b/test/moves/gastro_acid.test.ts @@ -3,7 +3,7 @@ import { Abilities } from "#app/enums/abilities"; import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { MoveResult } from "#app/field/pokemon"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/geomancy.test.ts b/test/moves/geomancy.test.ts similarity index 94% rename from src/test/moves/geomancy.test.ts rename to test/moves/geomancy.test.ts index 6e2f40b9144..914e4f7188a 100644 --- a/src/test/moves/geomancy.test.ts +++ b/test/moves/geomancy.test.ts @@ -1,9 +1,10 @@ -import { EffectiveStat, Stat } from "#enums/stat"; +import type { EffectiveStat } from "#enums/stat"; +import { Stat } from "#enums/stat"; import { MoveResult } from "#app/field/pokemon"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest"; diff --git a/src/test/moves/gigaton_hammer.test.ts b/test/moves/gigaton_hammer.test.ts similarity index 97% rename from src/test/moves/gigaton_hammer.test.ts rename to test/moves/gigaton_hammer.test.ts index f54700fe660..37735b29a3b 100644 --- a/src/test/moves/gigaton_hammer.test.ts +++ b/test/moves/gigaton_hammer.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import Phaser from "phaser"; diff --git a/src/test/moves/glaive_rush.test.ts b/test/moves/glaive_rush.test.ts similarity index 98% rename from src/test/moves/glaive_rush.test.ts rename to test/moves/glaive_rush.test.ts index 9cfbfdd8727..557d003e541 100644 --- a/src/test/moves/glaive_rush.test.ts +++ b/test/moves/glaive_rush.test.ts @@ -2,7 +2,7 @@ import { allMoves } from "#app/data/move"; import { Abilities } from "#app/enums/abilities"; import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/growth.test.ts b/test/moves/growth.test.ts similarity index 96% rename from src/test/moves/growth.test.ts rename to test/moves/growth.test.ts index a66e4ec6719..dfc41acd757 100644 --- a/src/test/moves/growth.test.ts +++ b/test/moves/growth.test.ts @@ -1,5 +1,5 @@ import { Stat } from "#enums/stat"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/src/test/moves/grudge.test.ts b/test/moves/grudge.test.ts similarity index 98% rename from src/test/moves/grudge.test.ts rename to test/moves/grudge.test.ts index 340808929ab..4b9683dd417 100644 --- a/src/test/moves/grudge.test.ts +++ b/test/moves/grudge.test.ts @@ -2,7 +2,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { BattlerIndex } from "#app/battle"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/guard_split.test.ts b/test/moves/guard_split.test.ts similarity index 97% rename from src/test/moves/guard_split.test.ts rename to test/moves/guard_split.test.ts index 519f347b920..af5023608d3 100644 --- a/src/test/moves/guard_split.test.ts +++ b/test/moves/guard_split.test.ts @@ -1,6 +1,6 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import Phaser from "phaser"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Moves } from "#enums/moves"; diff --git a/src/test/moves/guard_swap.test.ts b/test/moves/guard_swap.test.ts similarity index 97% rename from src/test/moves/guard_swap.test.ts rename to test/moves/guard_swap.test.ts index 99769b32899..592307ff168 100644 --- a/src/test/moves/guard_swap.test.ts +++ b/test/moves/guard_swap.test.ts @@ -1,6 +1,6 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import Phaser from "phaser"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Moves } from "#enums/moves"; diff --git a/src/test/moves/hard_press.test.ts b/test/moves/hard_press.test.ts similarity index 97% rename from src/test/moves/hard_press.test.ts rename to test/moves/hard_press.test.ts index 0fa4181491c..29a386207ad 100644 --- a/src/test/moves/hard_press.test.ts +++ b/test/moves/hard_press.test.ts @@ -3,7 +3,7 @@ import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/moves/haze.test.ts b/test/moves/haze.test.ts similarity index 97% rename from src/test/moves/haze.test.ts rename to test/moves/haze.test.ts index 30aab8bd98c..11071bdc07d 100644 --- a/src/test/moves/haze.test.ts +++ b/test/moves/haze.test.ts @@ -1,5 +1,5 @@ import { Stat } from "#enums/stat"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/src/test/moves/heal_bell.test.ts b/test/moves/heal_bell.test.ts similarity index 98% rename from src/test/moves/heal_bell.test.ts rename to test/moves/heal_bell.test.ts index b180588d3a3..72957ee21e7 100644 --- a/src/test/moves/heal_bell.test.ts +++ b/test/moves/heal_bell.test.ts @@ -3,7 +3,7 @@ import { CommandPhase } from "#app/phases/command-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; diff --git a/src/test/moves/heal_block.test.ts b/test/moves/heal_block.test.ts similarity index 98% rename from src/test/moves/heal_block.test.ts rename to test/moves/heal_block.test.ts index 25f2076ff3e..a0e8eaf541c 100644 --- a/src/test/moves/heal_block.test.ts +++ b/test/moves/heal_block.test.ts @@ -1,6 +1,6 @@ import { BattlerIndex } from "#app/battle"; import { ArenaTagSide } from "#app/data/arena-tag"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Abilities } from "#enums/abilities"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; diff --git a/src/test/moves/heart_swap.test.ts b/test/moves/heart_swap.test.ts similarity index 96% rename from src/test/moves/heart_swap.test.ts rename to test/moves/heart_swap.test.ts index a128549c459..43569a32a69 100644 --- a/src/test/moves/heart_swap.test.ts +++ b/test/moves/heart_swap.test.ts @@ -1,6 +1,6 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import Phaser from "phaser"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Moves } from "#enums/moves"; diff --git a/src/test/moves/hyper_beam.test.ts b/test/moves/hyper_beam.test.ts similarity index 97% rename from src/test/moves/hyper_beam.test.ts rename to test/moves/hyper_beam.test.ts index af8440a0911..5869655948c 100644 --- a/src/test/moves/hyper_beam.test.ts +++ b/test/moves/hyper_beam.test.ts @@ -5,7 +5,7 @@ import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { BerryPhase } from "#app/phases/berry-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/moves/imprison.test.ts b/test/moves/imprison.test.ts similarity index 98% rename from src/test/moves/imprison.test.ts rename to test/moves/imprison.test.ts index f10e20dab63..85d529d7a74 100644 --- a/src/test/moves/imprison.test.ts +++ b/test/moves/imprison.test.ts @@ -1,7 +1,7 @@ import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { Abilities } from "#enums/abilities"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import { BattlerTagType } from "#enums/battler-tag-type"; diff --git a/test/moves/instruct.test.ts b/test/moves/instruct.test.ts new file mode 100644 index 00000000000..db9801932cc --- /dev/null +++ b/test/moves/instruct.test.ts @@ -0,0 +1,549 @@ +import { BattlerIndex } from "#app/battle"; +import type Pokemon from "#app/field/pokemon"; +import { MoveResult } from "#app/field/pokemon"; +import type { MovePhase } from "#app/phases/move-phase"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Instruct", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + function instructSuccess(target: Pokemon, move: Moves): void { + expect(target.getLastXMoves(-1)[0].move).toBe(move); + expect(target.getLastXMoves(-1)[1].move).toBe(target.getLastXMoves()[0].move); + expect(target.getMoveset().find(m => m?.moveId === move)?.ppUsed).toBe(2); + } + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .battleType("single") + .enemySpecies(Species.SHUCKLE) + .enemyAbility(Abilities.NO_GUARD) + .enemyLevel(100) + .startingLevel(100) + .disableCrits(); + }); + + it("should repeat target's last used move", async () => { + game.override + .moveset(Moves.INSTRUCT) + .enemyLevel(1000); // ensures shuckle no die + await game.classicMode.startBattle([ Species.AMOONGUSS ]); + + const enemy = game.scene.getEnemyPokemon()!; + game.move.changeMoveset(enemy, Moves.SONIC_BOOM); + + game.move.select(Moves.INSTRUCT); + await game.forceEnemyMove(Moves.SONIC_BOOM); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + + await game.phaseInterceptor.to("MovePhase"); // enemy attacks us + await game.phaseInterceptor.to("MovePhase", false); // instruct + let currentPhase = game.scene.getCurrentPhase() as MovePhase; + expect(currentPhase.pokemon).toBe(game.scene.getPlayerPokemon()); + await game.phaseInterceptor.to("MoveEndPhase"); + + await game.phaseInterceptor.to("MovePhase", false); // enemy repeats move + currentPhase = game.scene.getCurrentPhase() as MovePhase; + expect(currentPhase.pokemon).toBe(enemy); + expect(currentPhase.move.moveId).toBe(Moves.SONIC_BOOM); + await game.phaseInterceptor.to("TurnEndPhase", false); + + instructSuccess(enemy, Moves.SONIC_BOOM); + expect(game.scene.getPlayerPokemon()?.getInverseHp()).toBe(40); + }); + + it("should repeat enemy's move through substitute", async () => { + game.override.moveset([ Moves.INSTRUCT, Moves.SPLASH ]); + await game.classicMode.startBattle([ Species.AMOONGUSS ]); + + const enemy = game.scene.getEnemyPokemon()!; + game.move.changeMoveset(enemy, [ Moves.SONIC_BOOM, Moves.SUBSTITUTE ]); + + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.SUBSTITUTE); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.toNextTurn(); + + game.move.select(Moves.INSTRUCT); + await game.forceEnemyMove(Moves.SONIC_BOOM); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.phaseInterceptor.to("TurnEndPhase", false); + + instructSuccess(game.scene.getEnemyPokemon()!, Moves.SONIC_BOOM); + expect(game.scene.getPlayerPokemon()?.getInverseHp()).toBe(40); + }); + + it("should repeat ally's attack on enemy", async () => { + game.override + .battleType("double") + .enemyMoveset(Moves.SPLASH); + await game.classicMode.startBattle([ Species.AMOONGUSS, Species.SHUCKLE ]); + + const [ amoonguss, shuckle ] = game.scene.getPlayerField(); + game.move.changeMoveset(amoonguss, [ Moves.INSTRUCT, Moves.SONIC_BOOM ]); + game.move.changeMoveset(shuckle, [ Moves.INSTRUCT, Moves.SONIC_BOOM ]); + + game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2); + game.move.select(Moves.SONIC_BOOM, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); + await game.setTurnOrder([ BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); + await game.phaseInterceptor.to("TurnEndPhase", false); + + instructSuccess(shuckle, Moves.SONIC_BOOM); + expect(game.scene.getEnemyField()[0].getInverseHp()).toBe(40); + }); + + // TODO: Enable test case once gigaton hammer (and blood moon) are reworked + it.todo("should repeat enemy's Gigaton Hammer", async () => { + game.override + .moveset(Moves.INSTRUCT) + .enemyLevel(5); + await game.classicMode.startBattle([ Species.AMOONGUSS ]); + + const enemy = game.scene.getEnemyPokemon()!; + game.move.changeMoveset(enemy, [ Moves.GIGATON_HAMMER, Moves.BLOOD_MOON ]); + + game.move.select(Moves.INSTRUCT); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.phaseInterceptor.to("BerryPhase"); + + instructSuccess(enemy, Moves.GIGATON_HAMMER); + expect(game.scene.getPlayerPokemon()!.turnData.attacksReceived.length).toBe(2); + }); + + it("should add moves to move queue for copycat", async () => { + game.override + .battleType("double") + .moveset(Moves.INSTRUCT) + .enemyLevel(5); + await game.classicMode.startBattle([ Species.AMOONGUSS ]); + + const [ enemy1, enemy2 ] = game.scene.getEnemyField()!; + game.move.changeMoveset(enemy1, Moves.WATER_GUN); + game.move.changeMoveset(enemy2, Moves.COPYCAT); + + game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2 ]); + await game.phaseInterceptor.to("BerryPhase"); + + instructSuccess(enemy1, Moves.WATER_GUN); + // amoonguss gets hit by water gun thrice; once by original attack, once by instructed use and once by copycat + expect(game.scene.getPlayerPokemon()!.turnData.attacksReceived.length).toBe(3); + }); + + it("should respect enemy's status condition", async () => { + game.override + .moveset([ Moves.INSTRUCT, Moves.THUNDER_WAVE ]) + .enemyMoveset(Moves.SONIC_BOOM); + await game.classicMode.startBattle([ Species.AMOONGUSS ]); + + game.move.select(Moves.THUNDER_WAVE); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextTurn(); + + game.move.select(Moves.INSTRUCT); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("MovePhase"); + // force enemy's instructed move to bork and then immediately thaw out + await game.move.forceStatusActivation(true); + await game.move.forceStatusActivation(false); + await game.phaseInterceptor.to("TurnEndPhase", false); + + const moveHistory = game.scene.getEnemyPokemon()?.getLastXMoves(-1)!; + expect(moveHistory.map(m => m.move)).toEqual([ Moves.SONIC_BOOM, Moves.NONE, Moves.SONIC_BOOM ]); + expect(game.scene.getPlayerPokemon()?.getInverseHp()).toBe(40); + }); + + it("should not repeat enemy's out of pp move", async () => { + game.override + .moveset(Moves.INSTRUCT) + .enemySpecies(Species.UNOWN); + await game.classicMode.startBattle([ Species.AMOONGUSS ]); + + const enemyPokemon = game.scene.getEnemyPokemon()!; + game.move.changeMoveset(enemyPokemon, Moves.HIDDEN_POWER); + const moveUsed = enemyPokemon.moveset.find(m => m?.moveId === Moves.HIDDEN_POWER)!; + moveUsed.ppUsed = moveUsed.getMovePp() - 1; + + game.move.select(Moves.INSTRUCT); + await game.forceEnemyMove(Moves.HIDDEN_POWER); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.phaseInterceptor.to("TurnEndPhase", false); + + const playerMoves = game.scene.getPlayerPokemon()!.getLastXMoves(-1)!; + expect(playerMoves[0].result).toBe(MoveResult.FAIL); + expect(enemyPokemon.getMoveHistory().length).toBe(1); + }); + + it("should redirect attacking moves if enemy faints", async () => { + game.override + .battleType("double") + .enemyMoveset(Moves.SPLASH) + .enemySpecies(Species.MAGIKARP) + .enemyLevel(1); + await game.classicMode.startBattle([ Species.HISUI_ELECTRODE, Species.KOMMO_O ]); + + const [ electrode, kommo_o ] = game.scene.getPlayerField()!; + game.move.changeMoveset(electrode, Moves.CHLOROBLAST); + game.move.changeMoveset(kommo_o, Moves.INSTRUCT); + + game.move.select(Moves.CHLOROBLAST, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); + await game.phaseInterceptor.to("BerryPhase"); + + // Chloroblast always deals 50% max HP% recoil UNLESS you whiff + // due to lack of targets or similar, + // so all we have to do is check whether electrode fainted or not. + // Naturally, both karps should also be dead as well. + expect(electrode.isFainted()).toBe(true); + const [ karp1, karp2 ] = game.scene.getEnemyField()!; + expect(karp1.isFainted()).toBe(true); + expect(karp2.isFainted()).toBe(true); + }), + + it("should allow for dancer copying of instructed dance move", async () => { + game.override + .battleType("double") + .enemyMoveset([ Moves.INSTRUCT, Moves.SPLASH ]) + .enemyLevel(1000); + await game.classicMode.startBattle([ Species.ORICORIO, Species.VOLCARONA ]); + + const [ oricorio, volcarona ] = game.scene.getPlayerField(); + game.move.changeMoveset(oricorio, Moves.SPLASH); + game.move.changeMoveset(volcarona, Moves.FIERY_DANCE); + + game.move.select(Moves.SPLASH, BattlerIndex.PLAYER); + game.move.select(Moves.FIERY_DANCE, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); + await game.forceEnemyMove(Moves.INSTRUCT, BattlerIndex.PLAYER_2); + await game.forceEnemyMove(Moves.SPLASH); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); + await game.phaseInterceptor.to("BerryPhase"); + + // fiery dance triggered dancer successfully for a total of 4 hits + // Enemy level is set to a high value so that it does not faint even after all 4 hits + instructSuccess(volcarona, Moves.FIERY_DANCE); + expect(game.scene.getEnemyField()[0].turnData.attacksReceived.length).toBe(4); + }); + + it("should not repeat move when switching out", async () => { + game.override + .enemyMoveset(Moves.INSTRUCT) + .enemySpecies(Species.UNOWN); + await game.classicMode.startBattle([ Species.AMOONGUSS, Species.TOXICROAK ]); + + const amoonguss = game.scene.getPlayerPokemon()!; + game.move.changeMoveset(amoonguss, Moves.SEED_BOMB); + + amoonguss.battleSummonData.moveHistory = [{ move: Moves.SEED_BOMB, targets: [ BattlerIndex.ENEMY ], result: MoveResult.SUCCESS }]; + + game.doSwitchPokemon(1); + await game.phaseInterceptor.to("TurnEndPhase", false); + + const enemyMoves = game.scene.getEnemyPokemon()!.getLastXMoves(-1)!; + expect(enemyMoves[0].result).toBe(MoveResult.FAIL); + }); + + it("should fail if no move has yet been used by target", async () => { + game.override + .moveset(Moves.INSTRUCT) + .enemyMoveset(Moves.SPLASH); + await game.classicMode.startBattle([ Species.AMOONGUSS ]); + + game.move.select(Moves.INSTRUCT); + await game.forceEnemyMove(Moves.SPLASH); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("TurnEndPhase", false); + + expect(game.scene.getPlayerPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); + }); + + it("should attempt to call enemy's disabled move, but move use itself should fail", async () => { + game.override + .moveset([ Moves.INSTRUCT, Moves.DISABLE ]) + .battleType("double"); + await game.classicMode.startBattle([ Species.AMOONGUSS, Species.DROWZEE ]); + + const [ enemy1, enemy2 ] = game.scene.getEnemyField(); + game.move.changeMoveset(enemy1, Moves.SONIC_BOOM); + game.move.changeMoveset(enemy2, Moves.SPLASH); + + game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(Moves.DISABLE, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); + await game.forceEnemyMove(Moves.SONIC_BOOM, BattlerIndex.PLAYER); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2 ]); + await game.phaseInterceptor.to("TurnEndPhase", false); + + expect(game.scene.getPlayerField()[0].getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); + const enemyMove = game.scene.getEnemyField()[0]!.getLastXMoves()[0]; + expect(enemyMove.result).toBe(MoveResult.FAIL); + expect(game.scene.getEnemyField()[0].getMoveset().find(m => m?.moveId === Moves.SONIC_BOOM)?.ppUsed).toBe(1); + }); + + it("should not repeat enemy's move through protect", async () => { + game.override.moveset([ Moves.INSTRUCT ]); + await game.classicMode.startBattle([ Species.AMOONGUSS ]); + + const enemy = game.scene.getEnemyPokemon()!; + game.move.changeMoveset(enemy, Moves.PROTECT); + game.move.select(Moves.INSTRUCT); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.phaseInterceptor.to("TurnEndPhase", false); + + expect(enemy.getLastXMoves(-1)[0].move).toBe(Moves.PROTECT); + expect(enemy.getLastXMoves(-1)[1]).toBeUndefined(); // undefined because instruct failed and didn't repeat + expect(enemy.getMoveset().find(m => m?.moveId === Moves.PROTECT)?.ppUsed).toBe(1); + }); + + it("should not repeat enemy's charging move", async () => { + game.override + .moveset([ Moves.INSTRUCT ]) + .enemyMoveset([ Moves.SONIC_BOOM, Moves.HYPER_BEAM ]); + await game.classicMode.startBattle([ Species.SHUCKLE ]); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + enemy.battleSummonData.moveHistory = [{ move: Moves.SONIC_BOOM, targets: [ BattlerIndex.PLAYER ], result: MoveResult.SUCCESS, virtual: false }]; + + game.move.select(Moves.INSTRUCT); + await game.forceEnemyMove(Moves.HYPER_BEAM); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextTurn(); + + // instruct fails at copying last move due to charging turn (rather than instructing sonic boom) + expect(player.getLastXMoves()[0].result).toBe(MoveResult.FAIL); + + game.move.select(Moves.INSTRUCT); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.phaseInterceptor.to("TurnEndPhase", false); + + expect(player.getLastXMoves()[0].result).toBe(MoveResult.FAIL); + }); + + it("should not repeat move since forgotten by target", async () => { + game.override + .enemyLevel(5) + .xpMultiplier(0) + .enemySpecies(Species.WURMPLE) + .enemyMoveset(Moves.INSTRUCT); + await game.classicMode.startBattle([ Species.REGIELEKI ]); + + const regieleki = game.scene.getPlayerPokemon()!; + // fill out moveset with random moves + game.move.changeMoveset(regieleki, [ Moves.ELECTRO_DRIFT, Moves.SPLASH, Moves.ICE_BEAM, Moves.ANCIENT_POWER ]); + + game.move.select(Moves.ELECTRO_DRIFT); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("FaintPhase"); + await game.move.learnMove(Moves.ELECTROWEB); + await game.toNextWave(); + + game.move.select(Moves.SPLASH); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.phaseInterceptor.to("TurnEndPhase", false); + expect(game.scene.getEnemyField()[0].getLastXMoves()[0].result).toBe(MoveResult.FAIL); + }); + + it("should disregard priority of instructed move on use", async () => { + game.override + .enemyMoveset([ Moves.SPLASH, Moves.WHIRLWIND ]) + .moveset(Moves.INSTRUCT); + await game.classicMode.startBattle([ Species.LUCARIO, Species.BANETTE ]); + + const enemyPokemon = game.scene.getEnemyPokemon()!; + enemyPokemon.battleSummonData.moveHistory = [{ move: Moves.WHIRLWIND, targets: [ BattlerIndex.PLAYER ], result: MoveResult.SUCCESS, virtual: false }]; + + game.move.select(Moves.INSTRUCT); + await game.forceEnemyMove(Moves.SPLASH); + await game.phaseInterceptor.to("TurnEndPhase", false); + + // lucario instructed enemy whirlwind at 0 priority to switch itself out + const instructedMove = enemyPokemon.getLastXMoves(-1)[1]; + expect(instructedMove.result).toBe(MoveResult.SUCCESS); + expect(instructedMove.move).toBe(Moves.WHIRLWIND); + expect(game.scene.getPlayerPokemon()?.species.speciesId).toBe(Species.BANETTE); + }); + + it("should respect moves' original priority for psychic terrain", async () => { + game.override. + battleType("double") + .moveset([ Moves.QUICK_ATTACK, Moves.SPLASH, Moves.INSTRUCT ]) + .enemyMoveset([ Moves.SPLASH, Moves.PSYCHIC_TERRAIN ]); + await game.classicMode.startBattle([ Species.BANETTE, Species.KLEFKI ]); + + game.move.select(Moves.QUICK_ATTACK, BattlerIndex.PLAYER, BattlerIndex.ENEMY); // succeeds due to terrain no + game.move.select(Moves.SPLASH, BattlerIndex.PLAYER_2); + await game.forceEnemyMove(Moves.SPLASH); + await game.forceEnemyMove(Moves.PSYCHIC_TERRAIN); + await game.toNextTurn(); + + game.move.select(Moves.SPLASH, BattlerIndex.PLAYER); + game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER); + await game.setTurnOrder([ BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); + await game.phaseInterceptor.to("TurnEndPhase", false); + + // quick attack failed when instructed + const banette = game.scene.getPlayerPokemon()!; + expect(banette.getLastXMoves(-1)[1].move).toBe(Moves.QUICK_ATTACK); + expect(banette.getLastXMoves(-1)[1].result).toBe(MoveResult.FAIL); + }); + + it("should still work w/ prankster in psychic terrain", async () => { + game.override. + battleType("double") + .enemyMoveset([ Moves.SPLASH, Moves.PSYCHIC_TERRAIN ]); + await game.classicMode.startBattle([ Species.BANETTE, Species.KLEFKI ]); + + const [ banette, klefki ] = game.scene.getPlayerField()!; + game.move.changeMoveset(banette, [ Moves.VINE_WHIP, Moves.SPLASH ]); + game.move.changeMoveset(klefki, [ Moves.INSTRUCT, Moves.SPLASH ]); + + game.move.select(Moves.VINE_WHIP, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(Moves.SPLASH, BattlerIndex.PLAYER_2); + await game.forceEnemyMove(Moves.SPLASH); + await game.forceEnemyMove(Moves.PSYCHIC_TERRAIN); + await game.toNextTurn(); + + game.move.select(Moves.SPLASH, BattlerIndex.PLAYER); + game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER); // copies vine whip + await game.setTurnOrder([ BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); + await game.phaseInterceptor.to("TurnEndPhase", false); + expect(banette.getLastXMoves(-1)[1].move).toBe(Moves.VINE_WHIP); + expect(banette.getLastXMoves(-1)[2].move).toBe(Moves.VINE_WHIP); + expect(banette.getMoveset().find(m => m?.moveId === Moves.VINE_WHIP )?.ppUsed).toBe(2); + }); + + it("should cause spread moves to correctly hit targets in doubles after singles", async () => { + game.override + .battleType("even-doubles") + .moveset([ Moves.BREAKING_SWIPE, Moves.INSTRUCT, Moves.SPLASH ]) + .enemyMoveset(Moves.SONIC_BOOM) + .enemySpecies(Species.AXEW) + .startingLevel(500); + await game.classicMode.startBattle([ Species.KORAIDON, Species.KLEFKI ]); + + const koraidon = game.scene.getPlayerField()[0]!; + + game.move.select(Moves.BREAKING_SWIPE); + await game.phaseInterceptor.to("TurnEndPhase", false); + expect(koraidon.getInverseHp()).toBe(0); + expect(koraidon.getLastXMoves(-1)[0].targets).toEqual([ BattlerIndex.ENEMY ]); + await game.toNextWave(); + + game.move.select(Moves.SPLASH, BattlerIndex.PLAYER); + game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER); + await game.setTurnOrder([ BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); + await game.phaseInterceptor.to("TurnEndPhase", false); + // did not take damage since enemies died beforehand; + // last move used hit both enemies + expect(koraidon.getInverseHp()).toBe(0); + expect(koraidon.getLastXMoves(-1)[1].targets?.sort()).toEqual([ BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); + }); + + it("should cause AoE moves to correctly hit everyone in doubles after singles", async () => { + game.override + .battleType("even-doubles") + .moveset([ Moves.BRUTAL_SWING, Moves.INSTRUCT, Moves.SPLASH ]) + .enemySpecies(Species.AXEW) + .enemyMoveset(Moves.SONIC_BOOM) + .startingLevel(500); + await game.classicMode.startBattle([ Species.KORAIDON, Species.KLEFKI ]); + + const koraidon = game.scene.getPlayerField()[0]!; + + game.move.select(Moves.BRUTAL_SWING); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("TurnEndPhase", false); + expect(koraidon.getInverseHp()).toBe(0); + expect(koraidon.getLastXMoves(-1)[0].targets).toEqual([ BattlerIndex.ENEMY ]); + await game.toNextWave(); + + game.move.select(Moves.SPLASH, BattlerIndex.PLAYER); + game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER); + await game.setTurnOrder([ BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); + await game.phaseInterceptor.to("TurnEndPhase", false); + // did not take damage since enemies died beforehand; + // last move used hit everything around it + expect(koraidon.getInverseHp()).toBe(0); + expect(koraidon.getLastXMoves(-1)[1].targets?.sort()).toEqual([ BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); + }); + + it("should cause multi-hit moves to hit the appropriate number of times in singles", async () => { + game.override + .enemyAbility(Abilities.SKILL_LINK) + .moveset([ Moves.SPLASH, Moves.INSTRUCT ]) + .enemyMoveset(Moves.BULLET_SEED); + await game.classicMode.startBattle([ Species.BULBASAUR ]); + + const bulbasaur = game.scene.getPlayerPokemon()!; + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + + game.move.select(Moves.INSTRUCT); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("BerryPhase"); + + expect(bulbasaur.turnData.attacksReceived.length).toBe(10); + + await game.toNextTurn(); + game.move.select(Moves.INSTRUCT); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.phaseInterceptor.to("BerryPhase"); + + expect(bulbasaur.turnData.attacksReceived.length).toBe(10); + }); + + it("should cause multi-hit moves to hit the appropriate number of times in doubles", async () => { + game.override + .battleType("double") + .enemyAbility(Abilities.SKILL_LINK) + .moveset([ Moves.SPLASH, Moves.INSTRUCT ]) + .enemyMoveset([ Moves.BULLET_SEED, Moves.SPLASH ]) + .enemyLevel(5); + await game.classicMode.startBattle([ Species.BULBASAUR, Species.IVYSAUR ]); + + const [ , ivysaur ] = game.scene.getPlayerField(); + + game.move.select(Moves.SPLASH, BattlerIndex.PLAYER); + game.move.select(Moves.SPLASH, BattlerIndex.PLAYER_2); + await game.forceEnemyMove(Moves.BULLET_SEED, BattlerIndex.PLAYER_2); + await game.forceEnemyMove(Moves.SPLASH); + await game.toNextTurn(); + + game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); + await game.forceEnemyMove(Moves.BULLET_SEED, BattlerIndex.PLAYER_2); + await game.forceEnemyMove(Moves.SPLASH); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); + await game.phaseInterceptor.to("BerryPhase"); + + expect(ivysaur.turnData.attacksReceived.length).toBe(15); + + await game.toNextTurn(); + game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); + await game.forceEnemyMove(Moves.BULLET_SEED, BattlerIndex.PLAYER_2); + await game.forceEnemyMove(Moves.SPLASH); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2 ]); + await game.phaseInterceptor.to("BerryPhase"); + + expect(ivysaur.turnData.attacksReceived.length).toBe(15); + }); +}); diff --git a/src/test/moves/jaw_lock.test.ts b/test/moves/jaw_lock.test.ts similarity index 99% rename from src/test/moves/jaw_lock.test.ts rename to test/moves/jaw_lock.test.ts index 30dbcac64a8..4f9c6481a9a 100644 --- a/src/test/moves/jaw_lock.test.ts +++ b/test/moves/jaw_lock.test.ts @@ -5,7 +5,7 @@ import { BerryPhase } from "#app/phases/berry-phase"; import { FaintPhase } from "#app/phases/faint-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import Phaser from "phaser"; diff --git a/src/test/moves/lash_out.test.ts b/test/moves/lash_out.test.ts similarity index 96% rename from src/test/moves/lash_out.test.ts rename to test/moves/lash_out.test.ts index 014c0ae8fe5..3fe5c56dd3e 100644 --- a/src/test/moves/lash_out.test.ts +++ b/test/moves/lash_out.test.ts @@ -3,7 +3,7 @@ import { allMoves } from "#app/data/move"; import { Abilities } from "#app/enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/test/moves/last_respects.test.ts b/test/moves/last_respects.test.ts new file mode 100644 index 00000000000..54e4bc5a0bc --- /dev/null +++ b/test/moves/last_respects.test.ts @@ -0,0 +1,219 @@ +import { Moves } from "#enums/moves"; +import { BattlerIndex } from "#app/battle"; +import { Species } from "#enums/species"; +import { Abilities } from "#enums/abilities"; +import GameManager from "#test/testUtils/gameManager"; +import { allMoves } from "#app/data/move"; +import { MoveEffectPhase } from "#app/phases/move-effect-phase"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; + +describe("Moves - Last Respects", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + const move = allMoves[Moves.LAST_RESPECTS]; + const basePower = move.power; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .battleType("single") + .disableCrits() + .moveset([ Moves.LAST_RESPECTS, Moves.EXPLOSION, Moves.LUNAR_DANCE ]) + .ability(Abilities.BALL_FETCH) + .enemyAbility(Abilities.BALL_FETCH) + .enemySpecies(Species.MAGIKARP) + .enemyMoveset(Moves.SPLASH) + .startingLevel(1) + .enemyLevel(100); + + vi.spyOn(move, "calculateBattlePower"); + }); + + it("should have 150 power if 2 allies faint before using move", async () => { + await game.classicMode.startBattle([ Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE ]); + + /** + * Bulbasur faints once + */ + game.move.select(Moves.EXPLOSION); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + + /** + * Charmander faints once + */ + game.move.select(Moves.EXPLOSION); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + game.doSelectPartyPokemon(2); + await game.toNextTurn(); + + game.move.select(Moves.LAST_RESPECTS); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to(MoveEffectPhase); + + expect(move.calculateBattlePower).toHaveReturnedWith(basePower + (2 * 50)); + }); + + it("should have 200 power if an ally fainted twice and another one once", async () => { + await game.classicMode.startBattle([ Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE ]); + + /** + * Bulbasur faints once + */ + game.move.select(Moves.EXPLOSION); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + + /** + * Charmander faints once + */ + game.doRevivePokemon(1); + game.move.select(Moves.EXPLOSION); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + + /** + * Bulbasur faints twice + */ + game.move.select(Moves.EXPLOSION); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + game.doSelectPartyPokemon(2); + await game.toNextTurn(); + + game.move.select(Moves.LAST_RESPECTS); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to(MoveEffectPhase); + + expect(move.calculateBattlePower).toHaveReturnedWith(basePower + (3 * 50)); + }); + + it("should maintain its power for the player during the next battle if it is within the same arena encounter", async () => { + game.override + .enemySpecies(Species.MAGIKARP) + .startingWave(1) + .enemyLevel(1) + .startingLevel(100) + .enemyMoveset(Moves.SPLASH); + + await game.classicMode.startBattle([ Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE ]); + + /** + * The first Pokemon faints and another Pokemon in the party is selected. + */ + game.move.select(Moves.LUNAR_DANCE); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + + /** + * Enemy Pokemon faints and new wave is entered. + */ + game.move.select(Moves.LAST_RESPECTS); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextWave(); + expect(game.scene.arena.playerFaints).toBe(1); + + game.move.select(Moves.LAST_RESPECTS); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("MoveEndPhase"); + expect(move.calculateBattlePower).toHaveLastReturnedWith(basePower + (1 * 50)); + }); + + it("should reset enemyFaints count on progressing to the next wave.", async () => { + game.override + .enemySpecies(Species.MAGIKARP) + .startingWave(1) + .enemyLevel(1) + .startingLevel(100) + .enemyMoveset(Moves.LAST_RESPECTS) + .moveset([ Moves.LUNAR_DANCE, Moves.LAST_RESPECTS, Moves.SPLASH ]); + + await game.classicMode.startBattle([ Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE ]); + + /** + * The first Pokemon faints and another Pokemon in the party is selected. + */ + game.move.select(Moves.LUNAR_DANCE); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + + /** + * Enemy Pokemon faints and new wave is entered. + */ + game.move.select(Moves.LAST_RESPECTS); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextWave(); + expect(game.scene.currentBattle.enemyFaints).toBe(0); + + game.move.select(Moves.LAST_RESPECTS); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.phaseInterceptor.to("MoveEndPhase"); + expect(move.calculateBattlePower).toHaveLastReturnedWith(basePower); + }); + + it("should reset playerFaints count if we enter new trainer battle", async () => { + game.override + .enemySpecies(Species.MAGIKARP) + .startingWave(4) + .enemyLevel(1) + .startingLevel(100); + + await game.classicMode.startBattle([ Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE ]); + + game.move.select(Moves.LUNAR_DANCE); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + + game.move.select(Moves.LAST_RESPECTS); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextWave(); + + game.move.select(Moves.LAST_RESPECTS); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("BerryPhase", false); + + expect(move.calculateBattlePower).toHaveLastReturnedWith(basePower); + }); + + it("should reset playerFaints count if we enter new biome", async () => { + game.override + .enemySpecies(Species.MAGIKARP) + .startingWave(10) + .enemyLevel(1) + .startingLevel(100); + + await game.classicMode.startBattle([ Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE ]); + + game.move.select(Moves.LUNAR_DANCE); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + + game.move.select(Moves.LAST_RESPECTS); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextWave(); + + game.move.select(Moves.LAST_RESPECTS); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("BerryPhase", false); + + expect(move.calculateBattlePower).toHaveLastReturnedWith(basePower); + }); +}); diff --git a/src/test/moves/light_screen.test.ts b/test/moves/light_screen.test.ts similarity index 87% rename from src/test/moves/light_screen.test.ts rename to test/moves/light_screen.test.ts index af14d9273e6..8eee58c8e17 100644 --- a/src/test/moves/light_screen.test.ts +++ b/test/moves/light_screen.test.ts @@ -1,16 +1,19 @@ +import type BattleScene from "#app/battle-scene"; import { ArenaTagSide } from "#app/data/arena-tag"; -import Move, { allMoves } from "#app/data/move"; +import type Move from "#app/data/move"; +import { allMoves } from "#app/data/move"; import { Abilities } from "#app/enums/abilities"; import { ArenaTagType } from "#app/enums/arena-tag-type"; -import Pokemon from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { NumberHolder } from "#app/utils"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +let globalScene: BattleScene; describe("Moves - Light Screen", () => { let phaserGame: Phaser.Game; @@ -30,6 +33,7 @@ describe("Moves - Light Screen", () => { beforeEach(() => { game = new GameManager(phaserGame); + globalScene = game.scene; game.override.battleType("single"); game.override.ability(Abilities.NONE); game.override.moveset([ Moves.ABSORB, Moves.DAZZLING_GLEAM, Moves.TACKLE ]); @@ -93,8 +97,8 @@ const getMockedMoveDamage = (defender: Pokemon, attacker: Pokemon, move: Move) = const multiplierHolder = new NumberHolder(1); const side = defender.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; - if (defender.scene.arena.getTagOnSide(ArenaTagType.LIGHT_SCREEN, side)) { - defender.scene.arena.applyTagsForSide(ArenaTagType.LIGHT_SCREEN, side, false, attacker, move.category, multiplierHolder); + if (globalScene.arena.getTagOnSide(ArenaTagType.LIGHT_SCREEN, side)) { + globalScene.arena.applyTagsForSide(ArenaTagType.LIGHT_SCREEN, side, false, attacker, move.category, multiplierHolder); } return move.power * multiplierHolder.value; diff --git a/src/test/moves/lucky_chant.test.ts b/test/moves/lucky_chant.test.ts similarity index 98% rename from src/test/moves/lucky_chant.test.ts rename to test/moves/lucky_chant.test.ts index 02e9dd24465..7f943732192 100644 --- a/src/test/moves/lucky_chant.test.ts +++ b/test/moves/lucky_chant.test.ts @@ -5,7 +5,7 @@ import { Species } from "#app/enums/species"; import { BerryPhase } from "#app/phases/berry-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; -import GameManager from "../utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; describe("Moves - Lucky Chant", () => { diff --git a/src/test/moves/lunar_blessing.test.ts b/test/moves/lunar_blessing.test.ts similarity index 97% rename from src/test/moves/lunar_blessing.test.ts rename to test/moves/lunar_blessing.test.ts index 52c41a30e11..a81e967a6d9 100644 --- a/src/test/moves/lunar_blessing.test.ts +++ b/test/moves/lunar_blessing.test.ts @@ -3,7 +3,7 @@ import { CommandPhase } from "#app/phases/command-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/moves/lunar_dance.test.ts b/test/moves/lunar_dance.test.ts similarity index 98% rename from src/test/moves/lunar_dance.test.ts rename to test/moves/lunar_dance.test.ts index 603247298ac..37e96e0dc3e 100644 --- a/src/test/moves/lunar_dance.test.ts +++ b/test/moves/lunar_dance.test.ts @@ -3,7 +3,7 @@ import { CommandPhase } from "#app/phases/command-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest"; diff --git a/test/moves/magic_coat.test.ts b/test/moves/magic_coat.test.ts new file mode 100644 index 00000000000..6ecbea435b6 --- /dev/null +++ b/test/moves/magic_coat.test.ts @@ -0,0 +1,286 @@ +import { BattlerIndex } from "#app/battle"; +import { ArenaTagSide } from "#app/data/arena-tag"; +import { allMoves } from "#app/data/move"; +import { ArenaTagType } from "#app/enums/arena-tag-type"; +import { BattlerTagType } from "#app/enums/battler-tag-type"; +import { Stat } from "#app/enums/stat"; +import { StatusEffect } from "#app/enums/status-effect"; +import { MoveResult } from "#app/field/pokemon"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; + +describe("Moves - Magic Coat", () => { + 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(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.MAGIC_COAT); + }); + + it("should fail if the user goes last in the turn", async () => { + game.override.moveset([ Moves.PROTECT ]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + game.move.select(Moves.PROTECT); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getEnemyPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); + }); + + it("should fail if called again in the same turn due to moves like instruct", async () => { + game.override.moveset([ Moves.INSTRUCT ]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + game.move.select(Moves.INSTRUCT); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getEnemyPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); + }); + + it("should not reflect moves used on the next turn", async () => { + game.override.moveset([ Moves.GROWL, Moves.SPLASH ]); + game.override.enemyMoveset([ Moves.MAGIC_COAT, Moves.SPLASH ]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + // turn 1 + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.MAGIC_COAT); + await game.toNextTurn(); + + // turn 2 + game.move.select(Moves.GROWL); + await game.forceEnemyMove(Moves.SPLASH); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(-1); + }); + + it("should reflect basic status moves", async () => { + game.override.moveset([ Moves.GROWL ]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + game.move.select(Moves.GROWL); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(-1); + }); + + it("should individually bounce back multi-target moves when used by both targets in doubles", async () => { + game.override.battleType("double"); + game.override.moveset([ Moves.GROWL, Moves.SPLASH ]); + await game.classicMode.startBattle([ Species.MAGIKARP, Species.MAGIKARP ]); + + game.move.select(Moves.GROWL, 0); + game.move.select(Moves.SPLASH, 1); + await game.phaseInterceptor.to("BerryPhase"); + + const user = game.scene.getPlayerField()[0]; + expect(user.getStatStage(Stat.ATK)).toBe(-2); + }); + + it("should bounce back a spread status move against both pokemon", async () => { + game.override.battleType("double"); + game.override.moveset([ Moves.GROWL, Moves.SPLASH ]); + game.override.enemyMoveset([ Moves.SPLASH, Moves.MAGIC_COAT ]); + await game.classicMode.startBattle([ Species.MAGIKARP, Species.MAGIKARP ]); + + game.move.select(Moves.GROWL, 0); + game.move.select(Moves.SPLASH, 1); + await game.forceEnemyMove(Moves.SPLASH); + await game.forceEnemyMove(Moves.MAGIC_COAT); + + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getPlayerField().every(p => p.getStatStage(Stat.ATK) === -1)).toBeTruthy(); + }); + + it("should still bounce back a move that would otherwise fail", async () => { + await game.classicMode.startBattle([ Species.MAGIKARP ]); + game.scene.getEnemyPokemon()?.setStatStage(Stat.ATK, -6); + game.override.moveset([ Moves.GROWL ]); + + game.move.select(Moves.GROWL); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(-1); + }); + + it("should not bounce back a move that was just bounced", async () => { + game.override.battleType("double"); + game.override.ability(Abilities.MAGIC_BOUNCE); + game.override.moveset([ Moves.GROWL, Moves.MAGIC_COAT ]); + game.override.enemyMoveset([ Moves.SPLASH, Moves.MAGIC_COAT ]); + await game.classicMode.startBattle([ Species.MAGIKARP, Species.MAGIKARP ]); + + game.move.select(Moves.MAGIC_COAT, 0); + game.move.select(Moves.GROWL, 1); + await game.forceEnemyMove(Moves.MAGIC_COAT); + await game.forceEnemyMove(Moves.SPLASH); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getEnemyField()[0].getStatStage(Stat.ATK)).toBe(0); + }); + + // todo while Mirror Armor is not implemented + it.todo("should receive the stat change after reflecting a move back to a mirror armor user", async () => { + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + game.move.select(Moves.GROWL); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(-1); + }); + + it("should still bounce back a move from a mold breaker user", async () => { + game.override.ability(Abilities.MOLD_BREAKER); + game.override.moveset([ Moves.GROWL ]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + game.move.select(Moves.GROWL); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(0); + expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(-1); + }); + + it("should only bounce spikes back once when both targets use magic coat in doubles", async () => { + game.override.battleType("double"); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + game.override.moveset([ Moves.SPIKES ]); + + game.move.select(Moves.SPIKES); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.PLAYER)!["layers"]).toBe(1); + expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.ENEMY)).toBeUndefined(); + }); + + it("should not bounce back curse", async() => { + game.override.starterSpecies(Species.GASTLY); + await game.classicMode.startBattle([ Species.GASTLY ]); + game.override.moveset([ Moves.CURSE ]); + + game.move.select(Moves.CURSE); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getEnemyPokemon()!.getTag(BattlerTagType.CURSED)).toBeDefined(); + }); + + // TODO: encore is failing if the last move was virtual. + it.todo("should not cause the bounced move to count for encore", async () => { + game.override.moveset([ Moves.GROWL, Moves.ENCORE ]); + game.override.enemyMoveset([ Moves.MAGIC_COAT, Moves.TACKLE ]); + game.override.enemyAbility(Abilities.MAGIC_BOUNCE); + + await game.classicMode.startBattle([ Species.MAGIKARP ]); + const enemyPokemon = game.scene.getEnemyPokemon()!; + + // turn 1 + game.move.select(Moves.GROWL); + await game.forceEnemyMove(Moves.MAGIC_COAT); + await game.toNextTurn(); + + // turn 2 + game.move.select(Moves.ENCORE); + await game.forceEnemyMove(Moves.TACKLE); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("BerryPhase"); + expect(enemyPokemon.getTag(BattlerTagType.ENCORE)!["moveId"]).toBe(Moves.TACKLE); + expect(enemyPokemon.getLastXMoves()[0].move).toBe(Moves.TACKLE); + }); + + // TODO: stomping tantrum should consider moves that were bounced. + it.todo("should cause stomping tantrum to double in power when the last move was bounced", async () => { + game.override.battleType("single"); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + game.override.moveset([ Moves.STOMPING_TANTRUM, Moves.CHARM ]); + + const stomping_tantrum = allMoves[Moves.STOMPING_TANTRUM]; + vi.spyOn(stomping_tantrum, "calculateBattlePower"); + + game.move.select(Moves.CHARM); + await game.toNextTurn(); + + game.move.select(Moves.STOMPING_TANTRUM); + await game.phaseInterceptor.to("BerryPhase"); + expect(stomping_tantrum.calculateBattlePower).toHaveReturnedWith(150); + }); + + // TODO: stomping tantrum should consider moves that were bounced. + it.todo("should properly cause the enemy's stomping tantrum to be doubled in power after bouncing and failing", async () => { + game.override.enemyMoveset([ Moves.STOMPING_TANTRUM, Moves.SPLASH, Moves.CHARM ]); + await game.classicMode.startBattle([ Species.BULBASAUR ]); + + const stomping_tantrum = allMoves[Moves.STOMPING_TANTRUM]; + const enemy = game.scene.getEnemyPokemon()!; + vi.spyOn(stomping_tantrum, "calculateBattlePower"); + + game.move.select(Moves.SPORE); + await game.forceEnemyMove(Moves.CHARM); + await game.phaseInterceptor.to("TurnEndPhase"); + expect(enemy.getLastXMoves(1)[0].result).toBe("success"); + + await game.phaseInterceptor.to("BerryPhase"); + expect(stomping_tantrum.calculateBattlePower).toHaveReturnedWith(75); + + await game.toNextTurn(); + game.move.select(Moves.GROWL); + await game.phaseInterceptor.to("BerryPhase"); + expect(stomping_tantrum.calculateBattlePower).toHaveReturnedWith(75); + }); + + it("should respect immunities when bouncing a move", async () => { + vi.spyOn(allMoves[Moves.THUNDER_WAVE], "accuracy", "get").mockReturnValue(100); + game.override.moveset([ Moves.THUNDER_WAVE, Moves.GROWL ]); + game.override.ability(Abilities.SOUNDPROOF); + await game.classicMode.startBattle([ Species.PHANPY ]); + + // Turn 1 - thunder wave immunity test + game.move.select(Moves.THUNDER_WAVE); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); + + // Turn 2 - soundproof immunity test + game.move.select(Moves.GROWL); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(0); + }); + + it("should bounce back a move before the accuracy check", async () => { + game.override.moveset([ Moves.SPORE ]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const attacker = game.scene.getPlayerPokemon()!; + + vi.spyOn(attacker, "getAccuracyMultiplier").mockReturnValue(0.0); + game.move.select(Moves.SPORE); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getPlayerPokemon()!.status?.effect).toBe(StatusEffect.SLEEP); + }); + + it("should take the accuracy of the magic bounce user into account", async () => { + game.override.moveset([ Moves.SPORE ]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + const opponent = game.scene.getEnemyPokemon()!; + + vi.spyOn(opponent, "getAccuracyMultiplier").mockReturnValue(0); + game.move.select(Moves.SPORE); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); + }); +}); diff --git a/src/test/moves/magnet_rise.test.ts b/test/moves/magnet_rise.test.ts similarity index 97% rename from src/test/moves/magnet_rise.test.ts rename to test/moves/magnet_rise.test.ts index b26bbf42ed0..e4ceeaea929 100644 --- a/src/test/moves/magnet_rise.test.ts +++ b/test/moves/magnet_rise.test.ts @@ -2,7 +2,7 @@ import { CommandPhase } from "#app/phases/command-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/make_it_rain.test.ts b/test/moves/make_it_rain.test.ts similarity index 98% rename from src/test/moves/make_it_rain.test.ts rename to test/moves/make_it_rain.test.ts index 08021227e9c..8de6777bddf 100644 --- a/src/test/moves/make_it_rain.test.ts +++ b/test/moves/make_it_rain.test.ts @@ -2,7 +2,7 @@ import { Stat } from "#enums/stat"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import { MoveEndPhase } from "#app/phases/move-end-phase"; diff --git a/src/test/moves/mat_block.test.ts b/test/moves/mat_block.test.ts similarity index 98% rename from src/test/moves/mat_block.test.ts rename to test/moves/mat_block.test.ts index a4d9177cbdc..b9e66253058 100644 --- a/src/test/moves/mat_block.test.ts +++ b/test/moves/mat_block.test.ts @@ -1,6 +1,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; -import GameManager from "../utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; diff --git a/src/test/moves/metal_burst.test.ts b/test/moves/metal_burst.test.ts similarity index 98% rename from src/test/moves/metal_burst.test.ts rename to test/moves/metal_burst.test.ts index 3b32dd322a3..7f7cfa841da 100644 --- a/src/test/moves/metal_burst.test.ts +++ b/test/moves/metal_burst.test.ts @@ -3,7 +3,7 @@ import { MoveResult } from "#app/field/pokemon"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/test/moves/metronome.test.ts b/test/moves/metronome.test.ts new file mode 100644 index 00000000000..85c027b62e3 --- /dev/null +++ b/test/moves/metronome.test.ts @@ -0,0 +1,113 @@ +import { RechargingTag, SemiInvulnerableTag } from "#app/data/battler-tags"; +import { allMoves, RandomMoveAttr } from "#app/data/move"; +import { Abilities } from "#app/enums/abilities"; +import { Stat } from "#app/enums/stat"; +import { CommandPhase } from "#app/phases/command-phase"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; + +describe("Moves - Metronome", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + const randomMoveAttr = allMoves[Moves.METRONOME].getAttrs(RandomMoveAttr)[0]; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.METRONOME, Moves.SPLASH ]) + .battleType("single") + .startingLevel(100) + .starterSpecies(Species.REGIELEKI) + .enemyLevel(100) + .enemySpecies(Species.SHUCKLE) + .enemyMoveset(Moves.SPLASH) + .enemyAbility(Abilities.BALL_FETCH); + }); + + it("should have one semi-invulnerable turn and deal damage on the second turn when a semi-invulnerable move is called", async () => { + await game.classicMode.startBattle(); + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(Moves.DIVE); + + game.move.select(Moves.METRONOME); + await game.toNextTurn(); + + expect(player.getTag(SemiInvulnerableTag)).toBeTruthy(); + + await game.toNextTurn(); + expect(player.getTag(SemiInvulnerableTag)).toBeFalsy(); + expect(enemy.isFullHp()).toBeFalsy(); + }); + + it("should apply secondary effects of a move", async () => { + await game.classicMode.startBattle(); + const player = game.scene.getPlayerPokemon()!; + vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(Moves.WOOD_HAMMER); + + game.move.select(Moves.METRONOME); + await game.toNextTurn(); + + expect(player.isFullHp()).toBeFalsy(); + }); + + it("should recharge after using recharge move", async () => { + await game.classicMode.startBattle(); + const player = game.scene.getPlayerPokemon()!; + vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(Moves.HYPER_BEAM); + vi.spyOn(allMoves[Moves.HYPER_BEAM], "accuracy", "get").mockReturnValue(100); + + game.move.select(Moves.METRONOME); + await game.toNextTurn(); + + expect(player.getTag(RechargingTag)).toBeTruthy(); + }); + + it("should only target ally for Aromatic Mist", async () => { + game.override.battleType("double"); + await game.classicMode.startBattle([ Species.REGIELEKI, Species.RATTATA ]); + const [ leftPlayer, rightPlayer ] = game.scene.getPlayerField(); + const [ leftOpp, rightOpp ] = game.scene.getEnemyField(); + vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(Moves.AROMATIC_MIST); + + game.move.select(Moves.METRONOME, 0); + await game.phaseInterceptor.to(CommandPhase); + game.move.select(Moves.SPLASH, 1); + await game.toNextTurn(); + + expect(rightPlayer.getStatStage(Stat.SPDEF)).toBe(1); + expect(leftPlayer.getStatStage(Stat.SPDEF)).toBe(0); + expect(leftOpp.getStatStage(Stat.SPDEF)).toBe(0); + expect(rightOpp.getStatStage(Stat.SPDEF)).toBe(0); + }); + + it("should cause opponent to flee, and not crash for Roar", async () => { + await game.classicMode.startBattle(); + vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(Moves.ROAR); + + const enemyPokemon = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.METRONOME); + await game.phaseInterceptor.to("BerryPhase"); + + const isVisible = enemyPokemon.visible; + const hasFled = enemyPokemon.switchOutStatus; + expect(!isVisible && hasFled).toBe(true); + + await game.phaseInterceptor.to("CommandPhase"); + }); +}); diff --git a/src/test/moves/miracle_eye.test.ts b/test/moves/miracle_eye.test.ts similarity index 96% rename from src/test/moves/miracle_eye.test.ts rename to test/moves/miracle_eye.test.ts index 70f487de942..068f4f70493 100644 --- a/src/test/moves/miracle_eye.test.ts +++ b/test/moves/miracle_eye.test.ts @@ -2,7 +2,7 @@ import { BattlerIndex } from "#app/battle"; import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/test/moves/mirror_move.test.ts b/test/moves/mirror_move.test.ts new file mode 100644 index 00000000000..a6fe90548be --- /dev/null +++ b/test/moves/mirror_move.test.ts @@ -0,0 +1,84 @@ +import { BattlerIndex } from "#app/battle"; +import { Stat } from "#app/enums/stat"; +import { MoveResult } from "#app/field/pokemon"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Mirror Move", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.MIRROR_MOVE, Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should use the last move that the target used on the user", async () => { + game.override + .battleType("double") + .enemyMoveset([ Moves.TACKLE, Moves.GROWL ]); + await game.classicMode.startBattle([ Species.FEEBAS, Species.MAGIKARP ]); + + game.move.select(Moves.MIRROR_MOVE, 0, BattlerIndex.ENEMY); // target's last move is Tackle, enemy should receive damage from Mirror Move copying Tackle + game.move.select(Moves.SPLASH, 1); + await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); + await game.forceEnemyMove(Moves.GROWL, BattlerIndex.PLAYER_2); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER ]); + await game.toNextTurn(); + + expect(game.scene.getEnemyField()[0].isFullHp()).toBeFalsy(); + }); + + it("should apply secondary effects of a move", async () => { + game.override.enemyMoveset(Moves.ACID_SPRAY); + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.MIRROR_MOVE); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextTurn(); + + expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.SPDEF)).toBe(-2); + }); + + it("should be able to copy status moves", async () => { + game.override.enemyMoveset(Moves.GROWL); + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.MIRROR_MOVE); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextTurn(); + + expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(-1); + }); + + it("should fail if the target has not used any moves", async () => { + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.MIRROR_MOVE); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.toNextTurn(); + + expect(game.scene.getPlayerPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); + }); +}); diff --git a/src/test/moves/mist.test.ts b/test/moves/mist.test.ts similarity index 96% rename from src/test/moves/mist.test.ts rename to test/moves/mist.test.ts index cd338f79412..a9b69bccc6c 100644 --- a/src/test/moves/mist.test.ts +++ b/test/moves/mist.test.ts @@ -2,7 +2,7 @@ import { Stat } from "#enums/stat"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/moongeist_beam.test.ts b/test/moves/moongeist_beam.test.ts similarity index 97% rename from src/test/moves/moongeist_beam.test.ts rename to test/moves/moongeist_beam.test.ts index 216eee482fb..15a5787be41 100644 --- a/src/test/moves/moongeist_beam.test.ts +++ b/test/moves/moongeist_beam.test.ts @@ -2,7 +2,7 @@ import { allMoves, RandomMoveAttr } from "#app/data/move"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/moves/multi_target.test.ts b/test/moves/multi_target.test.ts similarity index 98% rename from src/test/moves/multi_target.test.ts rename to test/moves/multi_target.test.ts index 965876d3445..a2379524c73 100644 --- a/src/test/moves/multi_target.test.ts +++ b/test/moves/multi_target.test.ts @@ -3,7 +3,7 @@ import { Abilities } from "#app/enums/abilities"; import { Species } from "#app/enums/species"; import * as Utils from "#app/utils"; import { Moves } from "#enums/moves"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/nightmare.test.ts b/test/moves/nightmare.test.ts similarity index 96% rename from src/test/moves/nightmare.test.ts rename to test/moves/nightmare.test.ts index 850b0793b1e..0a2392fe833 100644 --- a/src/test/moves/nightmare.test.ts +++ b/test/moves/nightmare.test.ts @@ -2,7 +2,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/obstruct.test.ts b/test/moves/obstruct.test.ts similarity index 98% rename from src/test/moves/obstruct.test.ts rename to test/moves/obstruct.test.ts index 1649c199e32..e2c469e21f0 100644 --- a/src/test/moves/obstruct.test.ts +++ b/test/moves/obstruct.test.ts @@ -2,7 +2,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/octolock.test.ts b/test/moves/octolock.test.ts similarity index 98% rename from src/test/moves/octolock.test.ts rename to test/moves/octolock.test.ts index 6ca96eeb464..882a2357e1a 100644 --- a/src/test/moves/octolock.test.ts +++ b/test/moves/octolock.test.ts @@ -3,7 +3,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/order_up.test.ts b/test/moves/order_up.test.ts similarity index 95% rename from src/test/moves/order_up.test.ts rename to test/moves/order_up.test.ts index d0b52dc1a9d..339f3f31584 100644 --- a/src/test/moves/order_up.test.ts +++ b/test/moves/order_up.test.ts @@ -1,11 +1,12 @@ import { BattlerIndex } from "#app/battle"; import { BattlerTagType } from "#enums/battler-tag-type"; import { PokemonAnimType } from "#enums/pokemon-anim-type"; -import { EffectiveStat, Stat } from "#enums/stat"; +import type { EffectiveStat } from "#enums/stat"; +import { Stat } from "#enums/stat"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/moves/parting_shot.test.ts b/test/moves/parting_shot.test.ts similarity index 95% rename from src/test/moves/parting_shot.test.ts rename to test/moves/parting_shot.test.ts index cfdf6c15966..43a6d833949 100644 --- a/src/test/moves/parting_shot.test.ts +++ b/test/moves/parting_shot.test.ts @@ -3,7 +3,7 @@ import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, test } from "vitest"; -import GameManager from "../utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Stat } from "#enums/stat"; import { BerryPhase } from "#app/phases/berry-phase"; import { FaintPhase } from "#app/phases/faint-phase"; @@ -75,7 +75,7 @@ describe("Moves - Parting Shot", () => { } ); - it.skip( // TODO: fix this bug to pass the test! + it.todo( // TODO: fix this bug to pass the test! "Parting shot should fail if target is -6/-6 de-buffed", async () => { game.override.moveset([ Moves.PARTING_SHOT, Moves.MEMENTO, Moves.SPLASH ]); @@ -117,7 +117,7 @@ describe("Moves - Parting Shot", () => { } ); - it.skip( // TODO: fix this bug to pass the test! + it.todo( // TODO: fix this bug to pass the test! "Parting shot shouldn't allow switch out when mist is active", async () => { game.override @@ -138,7 +138,7 @@ describe("Moves - Parting Shot", () => { } ); - it.skip( // TODO: fix this bug to pass the test! + it.todo( // TODO: fix this bug to pass the test! "Parting shot shouldn't allow switch out against clear body ability", async () => { game.override @@ -158,7 +158,7 @@ describe("Moves - Parting Shot", () => { } ); - it.skip( // TODO: fix this bug to pass the test! + it.todo( // TODO: fix this bug to pass the test! "Parting shot should de-buff and not fail if no party available to switch - party size 1", async () => { await game.startBattle([ Species.MURKROW ]); @@ -175,7 +175,7 @@ describe("Moves - Parting Shot", () => { } ); - it.skip( // TODO: fix this bug to pass the test! + it.todo( // TODO: fix this bug to pass the test! "Parting shot regularly not fail if no party available to switch - party fainted", async () => { await game.startBattle([ Species.MURKROW, Species.MEOWTH ]); diff --git a/src/test/moves/plasma_fists.test.ts b/test/moves/plasma_fists.test.ts similarity index 98% rename from src/test/moves/plasma_fists.test.ts rename to test/moves/plasma_fists.test.ts index 4075c1ab988..5a2ec90f60b 100644 --- a/src/test/moves/plasma_fists.test.ts +++ b/test/moves/plasma_fists.test.ts @@ -3,7 +3,7 @@ import { Type } from "#enums/type"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; diff --git a/src/test/moves/pledge_moves.test.ts b/test/moves/pledge_moves.test.ts similarity index 99% rename from src/test/moves/pledge_moves.test.ts rename to test/moves/pledge_moves.test.ts index 64d586e7ba4..24fff05a25d 100644 --- a/src/test/moves/pledge_moves.test.ts +++ b/test/moves/pledge_moves.test.ts @@ -9,7 +9,7 @@ import { toDmgValue } from "#app/utils"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; diff --git a/src/test/moves/powder.test.ts b/test/moves/powder.test.ts similarity index 99% rename from src/test/moves/powder.test.ts rename to test/moves/powder.test.ts index a1db2bced3a..24162825230 100644 --- a/src/test/moves/powder.test.ts +++ b/test/moves/powder.test.ts @@ -1,6 +1,6 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import Phaser from "phaser"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/src/test/moves/power_shift.test.ts b/test/moves/power_shift.test.ts similarity index 97% rename from src/test/moves/power_shift.test.ts rename to test/moves/power_shift.test.ts index e389f77bedf..bb98d8cf3ed 100644 --- a/src/test/moves/power_shift.test.ts +++ b/test/moves/power_shift.test.ts @@ -2,7 +2,7 @@ import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { Stat } from "#app/enums/stat"; import { Abilities } from "#enums/abilities"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/power_split.test.ts b/test/moves/power_split.test.ts similarity index 97% rename from src/test/moves/power_split.test.ts rename to test/moves/power_split.test.ts index 914fa86e491..69ea92c69ef 100644 --- a/src/test/moves/power_split.test.ts +++ b/test/moves/power_split.test.ts @@ -1,6 +1,6 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import Phaser from "phaser"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Moves } from "#enums/moves"; diff --git a/src/test/moves/power_swap.test.ts b/test/moves/power_swap.test.ts similarity index 97% rename from src/test/moves/power_swap.test.ts rename to test/moves/power_swap.test.ts index e9a4b569c92..637714f1277 100644 --- a/src/test/moves/power_swap.test.ts +++ b/test/moves/power_swap.test.ts @@ -1,6 +1,6 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import Phaser from "phaser"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Moves } from "#enums/moves"; diff --git a/src/test/moves/power_trick.test.ts b/test/moves/power_trick.test.ts similarity index 98% rename from src/test/moves/power_trick.test.ts rename to test/moves/power_trick.test.ts index a064a43dec4..e60172b5304 100644 --- a/src/test/moves/power_trick.test.ts +++ b/test/moves/power_trick.test.ts @@ -1,6 +1,6 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import Phaser from "phaser"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Moves } from "#enums/moves"; import { Stat } from "#enums/stat"; import { Species } from "#enums/species"; diff --git a/src/test/moves/protect.test.ts b/test/moves/protect.test.ts similarity index 98% rename from src/test/moves/protect.test.ts rename to test/moves/protect.test.ts index e639969ddf0..d502e997483 100644 --- a/src/test/moves/protect.test.ts +++ b/test/moves/protect.test.ts @@ -1,6 +1,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; -import GameManager from "../utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; diff --git a/src/test/moves/psycho_shift.test.ts b/test/moves/psycho_shift.test.ts similarity index 96% rename from src/test/moves/psycho_shift.test.ts rename to test/moves/psycho_shift.test.ts index 448a8c99ef0..d5890a3af0b 100644 --- a/src/test/moves/psycho_shift.test.ts +++ b/test/moves/psycho_shift.test.ts @@ -2,7 +2,7 @@ import { StatusEffect } from "#app/enums/status-effect"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/purify.test.ts b/test/moves/purify.test.ts similarity index 94% rename from src/test/moves/purify.test.ts rename to test/moves/purify.test.ts index 171f94a611a..eba8e9d851f 100644 --- a/src/test/moves/purify.test.ts +++ b/test/moves/purify.test.ts @@ -1,11 +1,11 @@ import { BattlerIndex } from "#app/battle"; import { Status } from "#app/data/status-effect"; -import { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; +import type { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; import { MoveEndPhase } from "#app/phases/move-end-phase"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; diff --git a/test/moves/quash.test.ts b/test/moves/quash.test.ts new file mode 100644 index 00000000000..dd91820a8db --- /dev/null +++ b/test/moves/quash.test.ts @@ -0,0 +1,99 @@ +import { Species } from "#enums/species"; +import { Moves } from "#enums/moves"; +import { Abilities } from "#app/enums/abilities"; +import { BattlerIndex } from "#app/battle"; +import { WeatherType } from "#enums/weather-type"; +import { MoveResult } from "#app/field/pokemon"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { describe, beforeAll, afterEach, beforeEach, it, expect } from "vitest"; + +describe("Moves - Quash", () => { + 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 + .battleType("double") + .enemyLevel(1) + .enemySpecies(Species.SLOWPOKE) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset([ Moves.RAIN_DANCE, Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .moveset([ Moves.QUASH, Moves.SUNNY_DAY, Moves.RAIN_DANCE, Moves.SPLASH ]); + }); + + it("makes the target move last in a turn, ignoring priority", async () => { + await game.classicMode.startBattle([ Species.ACCELGOR, Species.RATTATA ]); + + game.move.select(Moves.QUASH, 0, BattlerIndex.PLAYER_2); + game.move.select(Moves.SUNNY_DAY, 1); + await game.forceEnemyMove(Moves.SPLASH); + await game.forceEnemyMove(Moves.RAIN_DANCE); + + await game.phaseInterceptor.to("TurnEndPhase", false); + // will be sunny if player_2 moved last because of quash, rainy otherwise + expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SUNNY); + }); + + it("fails if the target has already moved", async () => { + await game.classicMode.startBattle([ Species.ACCELGOR, Species.RATTATA ]); + game.move.select(Moves.SPLASH, 0); + game.move.select(Moves.QUASH, 1, BattlerIndex.PLAYER); + + await game.phaseInterceptor.to("MoveEndPhase"); + await game.phaseInterceptor.to("MoveEndPhase"); + + expect(game.scene.getPlayerField()[1].getLastXMoves(1)[0].result).toBe(MoveResult.FAIL); + }); + + it("makes multiple quashed targets move in speed order at the end of the turn", async () => { + game.override.enemySpecies(Species.NINJASK) + .enemyLevel(100); + + await game.classicMode.startBattle([ Species.ACCELGOR, Species.RATTATA ]); + + // both users are quashed - rattata is slower so sun should be up at end of turn + game.move.select(Moves.RAIN_DANCE, 0); + game.move.select(Moves.SUNNY_DAY, 1); + + await game.forceEnemyMove(Moves.QUASH, BattlerIndex.PLAYER); + await game.forceEnemyMove(Moves.QUASH, BattlerIndex.PLAYER_2); + + await game.phaseInterceptor.to("TurnEndPhase", false); + expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SUNNY); + }); + + it("respects trick room", async () => { + game.override.enemyMoveset([ Moves.RAIN_DANCE, Moves.SPLASH, Moves.TRICK_ROOM ]); + + await game.classicMode.startBattle([ Species.ACCELGOR, Species.RATTATA ]); + game.move.select(Moves.SPLASH, 0); + game.move.select(Moves.SPLASH, 1); + + await game.forceEnemyMove(Moves.TRICK_ROOM); + await game.forceEnemyMove(Moves.SPLASH); + await game.phaseInterceptor.to("TurnInitPhase"); + // both users are quashed - accelgor should move last w/ TR so rain should be up at end of turn + game.move.select(Moves.RAIN_DANCE, 0); + game.move.select(Moves.SUNNY_DAY, 1); + + await game.forceEnemyMove(Moves.QUASH, BattlerIndex.PLAYER); + await game.forceEnemyMove(Moves.QUASH, BattlerIndex.PLAYER_2); + + await game.phaseInterceptor.to("TurnEndPhase", false); + expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.RAIN); + }); + +}); diff --git a/src/test/moves/quick_guard.test.ts b/test/moves/quick_guard.test.ts similarity index 98% rename from src/test/moves/quick_guard.test.ts rename to test/moves/quick_guard.test.ts index 7bda71782aa..c326e77d057 100644 --- a/src/test/moves/quick_guard.test.ts +++ b/test/moves/quick_guard.test.ts @@ -1,6 +1,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; -import GameManager from "../utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; diff --git a/test/moves/rage_fist.test.ts b/test/moves/rage_fist.test.ts new file mode 100644 index 00000000000..4d17cf990f7 --- /dev/null +++ b/test/moves/rage_fist.test.ts @@ -0,0 +1,143 @@ +import { BattlerIndex } from "#app/battle"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { allMoves } from "#app/data/move"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; + +describe("Moves - Rage Fist", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + const move = allMoves[Moves.RAGE_FIST]; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .battleType("single") + .moveset([ Moves.RAGE_FIST, Moves.SPLASH, Moves.SUBSTITUTE ]) + .startingLevel(100) + .enemyLevel(1) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.DOUBLE_KICK); + + vi.spyOn(move, "calculateBattlePower"); + }); + + it("should have 100 more power if hit twice before calling Rage Fist", async () => { + game.override + .enemySpecies(Species.MAGIKARP); + + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + game.move.select(Moves.RAGE_FIST); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(move.calculateBattlePower).toHaveLastReturnedWith(150); + }); + + it("should maintain its power during next battle if it is within the same arena encounter", async () => { + game.override + .enemySpecies(Species.MAGIKARP) + .startingWave(1); + + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + game.move.select(Moves.RAGE_FIST); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextWave(); + + game.move.select(Moves.RAGE_FIST); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.phaseInterceptor.to("BerryPhase", false); + + expect(move.calculateBattlePower).toHaveLastReturnedWith(250); + }); + + it("should reset the hitRecCounter if we enter new trainer battle", async () => { + game.override + .enemySpecies(Species.MAGIKARP) + .startingWave(4); + + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + game.move.select(Moves.RAGE_FIST); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextWave(); + + game.move.select(Moves.RAGE_FIST); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.phaseInterceptor.to("BerryPhase", false); + + expect(move.calculateBattlePower).toHaveLastReturnedWith(150); + }); + + it("should not increase the hitCounter if Substitute is hit", async () => { + game.override + .enemySpecies(Species.MAGIKARP) + .startingWave(4); + + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + game.move.select(Moves.SUBSTITUTE); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("MoveEffectPhase"); + + expect(game.scene.getPlayerPokemon()?.customPokemonData.hitsRecCount).toBe(0); + }); + + it("should reset the hitRecCounter if we enter new biome", async () => { + game.override + .enemySpecies(Species.MAGIKARP) + .startingWave(10); + + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + game.move.select(Moves.RAGE_FIST); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextTurn(); + + game.move.select(Moves.RAGE_FIST); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.phaseInterceptor.to("BerryPhase", false); + + expect(move.calculateBattlePower).toHaveLastReturnedWith(150); + }); + + it("should not reset the hitRecCounter if switched out", async () => { + game.override + .enemySpecies(Species.MAGIKARP) + .startingWave(1) + .enemyMoveset(Moves.TACKLE); + + await game.classicMode.startBattle([ Species.CHARIZARD, Species.BLASTOISE ]); + + game.move.select(Moves.SPLASH); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextTurn(); + + game.doSwitchPokemon(1); + await game.toNextTurn(); + + game.doSwitchPokemon(1); + await game.toNextTurn(); + + game.move.select(Moves.RAGE_FIST); + await game.phaseInterceptor.to("MoveEndPhase"); + + expect(game.scene.getPlayerParty()[0].species.speciesId).toBe(Species.CHARIZARD); + expect(move.calculateBattlePower).toHaveLastReturnedWith(150); + }); +}); diff --git a/src/test/moves/rage_powder.test.ts b/test/moves/rage_powder.test.ts similarity index 97% rename from src/test/moves/rage_powder.test.ts rename to test/moves/rage_powder.test.ts index 1b73a7f0f5f..15a9bfd951c 100644 --- a/src/test/moves/rage_powder.test.ts +++ b/test/moves/rage_powder.test.ts @@ -2,7 +2,7 @@ import { BattlerIndex } from "#app/battle"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; diff --git a/src/test/moves/reflect.test.ts b/test/moves/reflect.test.ts similarity index 87% rename from src/test/moves/reflect.test.ts rename to test/moves/reflect.test.ts index 3bf415ea75c..edc3f1ab8aa 100644 --- a/src/test/moves/reflect.test.ts +++ b/test/moves/reflect.test.ts @@ -1,16 +1,19 @@ +import type BattleScene from "#app/battle-scene"; import { ArenaTagSide } from "#app/data/arena-tag"; -import Move, { allMoves } from "#app/data/move"; +import type Move from "#app/data/move"; +import { allMoves } from "#app/data/move"; import { Abilities } from "#app/enums/abilities"; import { ArenaTagType } from "#app/enums/arena-tag-type"; -import Pokemon from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { NumberHolder } from "#app/utils"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +let globalScene: BattleScene; describe("Moves - Reflect", () => { let phaserGame: Phaser.Game; @@ -30,6 +33,7 @@ describe("Moves - Reflect", () => { beforeEach(() => { game = new GameManager(phaserGame); + globalScene = game.scene; game.override.battleType("single"); game.override.ability(Abilities.NONE); game.override.moveset([ Moves.ABSORB, Moves.ROCK_SLIDE, Moves.TACKLE ]); @@ -93,8 +97,8 @@ const getMockedMoveDamage = (defender: Pokemon, attacker: Pokemon, move: Move) = const multiplierHolder = new NumberHolder(1); const side = defender.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; - if (defender.scene.arena.getTagOnSide(ArenaTagType.REFLECT, side)) { - defender.scene.arena.applyTagsForSide(ArenaTagType.REFLECT, side, false, attacker, move.category, multiplierHolder); + if (globalScene.arena.getTagOnSide(ArenaTagType.REFLECT, side)) { + globalScene.arena.applyTagsForSide(ArenaTagType.REFLECT, side, false, attacker, move.category, multiplierHolder); } return move.power * multiplierHolder.value; diff --git a/src/test/moves/reflect_type.test.ts b/test/moves/reflect_type.test.ts similarity index 97% rename from src/test/moves/reflect_type.test.ts rename to test/moves/reflect_type.test.ts index 50e0fc2fbe6..575f4b88f86 100644 --- a/src/test/moves/reflect_type.test.ts +++ b/test/moves/reflect_type.test.ts @@ -2,7 +2,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { Type } from "#enums/type"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/relic_song.test.ts b/test/moves/relic_song.test.ts similarity index 97% rename from src/test/moves/relic_song.test.ts rename to test/moves/relic_song.test.ts index c09514850eb..f28047bb90e 100644 --- a/src/test/moves/relic_song.test.ts +++ b/test/moves/relic_song.test.ts @@ -3,7 +3,7 @@ import { Challenges } from "#app/enums/challenges"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/retaliate.test.ts b/test/moves/retaliate.test.ts similarity index 96% rename from src/test/moves/retaliate.test.ts rename to test/moves/retaliate.test.ts index e00b9da6010..32d5379f05e 100644 --- a/src/test/moves/retaliate.test.ts +++ b/test/moves/retaliate.test.ts @@ -1,6 +1,6 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import Phaser from "phaser"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { Moves } from "#enums/moves"; import { allMoves } from "#app/data/move"; diff --git a/test/moves/revival_blessing.test.ts b/test/moves/revival_blessing.test.ts new file mode 100644 index 00000000000..647771fa23b --- /dev/null +++ b/test/moves/revival_blessing.test.ts @@ -0,0 +1,117 @@ +import { BattlerIndex } from "#app/battle"; +import { MoveResult } from "#app/field/pokemon"; +import { toDmgValue } from "#app/utils"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Revival Blessing", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH, Moves.REVIVAL_BLESSING, Moves.MEMENTO ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should revive a selected fainted Pokemon when used by the player", async () => { + await game.classicMode.startBattle([ Species.FEEBAS, Species.MAGIKARP ]); + + game.move.select(Moves.MEMENTO); + game.doSelectPartyPokemon(1, "SwitchPhase"); + await game.toNextTurn(); + + const player = game.scene.getPlayerPokemon()!; + + expect(player.species.speciesId).toBe(Species.MAGIKARP); + game.move.select(Moves.REVIVAL_BLESSING); + + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + game.doSelectPartyPokemon(1, "RevivalBlessingPhase"); + + await game.phaseInterceptor.to("MoveEndPhase", false); + + const revivedPokemon = game.scene.getPlayerParty()[1]; + expect(revivedPokemon.status?.effect).toBeFalsy(); + expect(revivedPokemon.hp).toBe(Math.floor(revivedPokemon.getMaxHp() / 2)); + }); + + it("should revive a random fainted enemy when used by an enemy Trainer", async () => { + game.override.enemyMoveset(Moves.REVIVAL_BLESSING).startingWave(8); + + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + game.move.select(Moves.SPLASH); + await game.doKillOpponents(); + + await game.toNextTurn(); + game.move.select(Moves.SPLASH); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + + await game.phaseInterceptor.to("MoveEndPhase", false); + + const revivedPokemon = game.scene.getEnemyParty()[1]; + expect(revivedPokemon.status?.effect).toBeFalsy(); + expect(revivedPokemon.hp).toBe(Math.floor(revivedPokemon.getMaxHp() / 2)); + }); + + it("should fail when there are no fainted Pokemon to target", async () => { + await game.classicMode.startBattle([ Species.FEEBAS, Species.MAGIKARP ]); + + game.move.select(Moves.REVIVAL_BLESSING); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("MoveEndPhase", false); + + const player = game.scene.getPlayerPokemon()!; + expect(player.getLastXMoves()[0].result).toBe(MoveResult.FAIL); + }); + + it("should revive a player pokemon and immediately send it back out if used in the same turn it fainted in doubles", async () => { + game.override + .battleType("double") + .enemyMoveset([ Moves.SPLASH, Moves.FISSURE ]) + .enemyAbility(Abilities.NO_GUARD) + .enemyLevel(100); + await game.classicMode.startBattle([ Species.FEEBAS, Species.MILOTIC, Species.GYARADOS ]); + + const feebas = game.scene.getPlayerField()[0]; + + game.move.select(Moves.SPLASH); + game.move.select(Moves.REVIVAL_BLESSING, 1); + await game.forceEnemyMove(Moves.FISSURE, BattlerIndex.PLAYER); + await game.forceEnemyMove(Moves.SPLASH); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2 ]); + + await game.phaseInterceptor.to("MoveEndPhase"); + await game.phaseInterceptor.to("MoveEndPhase"); + + expect(feebas.isFainted()).toBe(true); + + game.doSelectPartyPokemon(0, "RevivalBlessingPhase"); + await game.toNextTurn(); + + expect(feebas.isFainted()).toBe(false); + expect(feebas.hp).toBe(toDmgValue(0.5 * feebas.getMaxHp())); + expect(game.scene.getPlayerField()[0]).toBe(feebas); + }); +}); diff --git a/test/moves/role_play.test.ts b/test/moves/role_play.test.ts new file mode 100644 index 00000000000..edc41de5c68 --- /dev/null +++ b/test/moves/role_play.test.ts @@ -0,0 +1,53 @@ +import { Stat } from "#app/enums/stat"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Role Play", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH, Moves.ROLE_PLAY ]) + .ability(Abilities.ADAPTABILITY) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should set the user's ability to the target's ability", async () => { + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.ROLE_PLAY); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getPlayerPokemon()?.getAbility().id).toBe(Abilities.BALL_FETCH); + }); + + it("should activate post-summon abilities", async () => { + game.override.enemyAbility(Abilities.INTIMIDATE); + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.ROLE_PLAY); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.ATK)).toBe(-1); + }); +}); diff --git a/src/test/moves/rollout.test.ts b/test/moves/rollout.test.ts similarity index 98% rename from src/test/moves/rollout.test.ts rename to test/moves/rollout.test.ts index 199f4e1dcf2..c58ab3e6a18 100644 --- a/src/test/moves/rollout.test.ts +++ b/test/moves/rollout.test.ts @@ -3,7 +3,7 @@ import { CommandPhase } from "#app/phases/command-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/moves/roost.test.ts b/test/moves/roost.test.ts similarity index 99% rename from src/test/moves/roost.test.ts rename to test/moves/roost.test.ts index 69301dc86cf..b9424747f5e 100644 --- a/src/test/moves/roost.test.ts +++ b/test/moves/roost.test.ts @@ -5,7 +5,7 @@ import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; diff --git a/src/test/moves/round.test.ts b/test/moves/round.test.ts similarity index 94% rename from src/test/moves/round.test.ts rename to test/moves/round.test.ts index fd318d30c1e..5d26e242aff 100644 --- a/src/test/moves/round.test.ts +++ b/test/moves/round.test.ts @@ -1,10 +1,10 @@ import { BattlerIndex } from "#app/battle"; import { allMoves } from "#app/data/move"; -import { MoveEffectPhase } from "#app/phases/move-effect-phase"; +import type { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/moves/safeguard.test.ts b/test/moves/safeguard.test.ts similarity index 98% rename from src/test/moves/safeguard.test.ts rename to test/moves/safeguard.test.ts index 6505162fd04..9768b24f170 100644 --- a/src/test/moves/safeguard.test.ts +++ b/test/moves/safeguard.test.ts @@ -2,7 +2,7 @@ import { BattlerIndex } from "#app/battle"; import { allAbilities, PostDefendContactApplyStatusEffectAbAttr } from "#app/data/ability"; import { Abilities } from "#app/enums/abilities"; import { StatusEffect } from "#app/enums/status-effect"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import Phaser from "phaser"; diff --git a/src/test/moves/scale_shot.test.ts b/test/moves/scale_shot.test.ts similarity index 98% rename from src/test/moves/scale_shot.test.ts rename to test/moves/scale_shot.test.ts index cbaa6611f3e..76954ba2413 100644 --- a/src/test/moves/scale_shot.test.ts +++ b/test/moves/scale_shot.test.ts @@ -8,7 +8,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; diff --git a/src/test/moves/secret_power.test.ts b/test/moves/secret_power.test.ts similarity index 98% rename from src/test/moves/secret_power.test.ts rename to test/moves/secret_power.test.ts index 09fe5faa50b..f155633d545 100644 --- a/src/test/moves/secret_power.test.ts +++ b/test/moves/secret_power.test.ts @@ -4,7 +4,7 @@ import { Moves } from "#enums/moves"; import { Stat } from "#enums/stat"; import { allMoves } from "#app/data/move"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { StatusEffect } from "#enums/status-effect"; diff --git a/src/test/moves/shed_tail.test.ts b/test/moves/shed_tail.test.ts similarity index 82% rename from src/test/moves/shed_tail.test.ts rename to test/moves/shed_tail.test.ts index 33a7d81e460..be746aacd78 100644 --- a/src/test/moves/shed_tail.test.ts +++ b/test/moves/shed_tail.test.ts @@ -3,7 +3,7 @@ import { MoveResult } from "#app/field/pokemon"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest"; @@ -46,11 +46,8 @@ describe("Moves - Shed Tail", () => { expect(feebas).not.toBe(magikarp); expect(feebas.hp).toBe(feebas.getMaxHp()); - // Note: Shed Tail's HP cost is currently not accurate to mainline, as it - // should cost ceil(maxHP / 2) instead of max(floor(maxHp / 2), 1). The current - // implementation is consistent with Substitute's HP cost logic, but that's not - // the case in mainline for some reason :regiDespair:. - expect(magikarp.hp).toBe(Math.ceil(magikarp.getMaxHp() / 2)); + // Note: Altered the test to be consistent with the correct HP cost :yipeevee_static: + expect(magikarp.hp).toBe(Math.floor(magikarp.getMaxHp() / 2)); expect(substituteTag).toBeDefined(); expect(substituteTag?.hp).toBe(Math.floor(magikarp.getMaxHp() / 4)); }); diff --git a/src/test/moves/shell_side_arm.test.ts b/test/moves/shell_side_arm.test.ts similarity index 97% rename from src/test/moves/shell_side_arm.test.ts rename to test/moves/shell_side_arm.test.ts index 41cbefb186b..3a658d53a83 100644 --- a/src/test/moves/shell_side_arm.test.ts +++ b/test/moves/shell_side_arm.test.ts @@ -3,7 +3,7 @@ import { allMoves, ShellSideArmCategoryAttr } from "#app/data/move"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/moves/shell_trap.test.ts b/test/moves/shell_trap.test.ts similarity index 98% rename from src/test/moves/shell_trap.test.ts rename to test/moves/shell_trap.test.ts index 04d3cf998b1..aa94d0cab1b 100644 --- a/src/test/moves/shell_trap.test.ts +++ b/test/moves/shell_trap.test.ts @@ -6,7 +6,7 @@ import { MoveResult } from "#app/field/pokemon"; import { BerryPhase } from "#app/phases/berry-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; import { MovePhase } from "#app/phases/move-phase"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/test/moves/simple_beam.test.ts b/test/moves/simple_beam.test.ts new file mode 100644 index 00000000000..1fb8b54e8aa --- /dev/null +++ b/test/moves/simple_beam.test.ts @@ -0,0 +1,42 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Simple Beam", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH, Moves.SIMPLE_BEAM ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("sets the target's ability to simple", async () => { + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.SIMPLE_BEAM); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getEnemyPokemon()?.getAbility().id).toBe(Abilities.SIMPLE); + }); +}); diff --git a/src/test/moves/sketch.test.ts b/test/moves/sketch.test.ts similarity index 98% rename from src/test/moves/sketch.test.ts rename to test/moves/sketch.test.ts index f531f44ef0c..e736893b0aa 100644 --- a/src/test/moves/sketch.test.ts +++ b/test/moves/sketch.test.ts @@ -2,7 +2,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { MoveResult, PokemonMove } from "#app/field/pokemon"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { StatusEffect } from "#app/enums/status-effect"; diff --git a/test/moves/skill_swap.test.ts b/test/moves/skill_swap.test.ts new file mode 100644 index 00000000000..e39dac8bb01 --- /dev/null +++ b/test/moves/skill_swap.test.ts @@ -0,0 +1,56 @@ +import { Stat } from "#app/enums/stat"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Skill Swap", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH, Moves.SKILL_SWAP ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should swap the two abilities", async () => { + game.override.ability(Abilities.ADAPTABILITY); + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.SKILL_SWAP); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getPlayerPokemon()?.getAbility().id).toBe(Abilities.BALL_FETCH); + expect(game.scene.getEnemyPokemon()?.getAbility().id).toBe(Abilities.ADAPTABILITY); + }); + + it("should activate post-summon abilities", async () => { + game.override.ability(Abilities.INTIMIDATE); + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.SKILL_SWAP); + await game.phaseInterceptor.to("BerryPhase"); + + // player atk should be -1 after opponent gains intimidate and it activates + expect(game.scene.getPlayerPokemon()?.getStatStage(Stat.ATK)).toBe(-1); + }); +}); diff --git a/test/moves/sleep_talk.test.ts b/test/moves/sleep_talk.test.ts new file mode 100644 index 00000000000..b9c98f4fb65 --- /dev/null +++ b/test/moves/sleep_talk.test.ts @@ -0,0 +1,75 @@ +import { Stat } from "#app/enums/stat"; +import { StatusEffect } from "#app/enums/status-effect"; +import { MoveResult } from "#app/field/pokemon"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Sleep Talk", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH, Moves.SLEEP_TALK ]) + .statusEffect(StatusEffect.SLEEP) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH) + .enemyLevel(100); + }); + + it("should fail when the user is not asleep", async () => { + game.override.statusEffect(StatusEffect.NONE); + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.SLEEP_TALK); + await game.toNextTurn(); + expect(game.scene.getPlayerPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); + }); + + it("should fail if the user has no valid moves", async () => { + game.override.moveset([ Moves.SLEEP_TALK, Moves.DIG, Moves.METRONOME, Moves.SOLAR_BEAM ]); + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.SLEEP_TALK); + await game.toNextTurn(); + expect(game.scene.getPlayerPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); + }); + + it("should call a random valid move if the user is asleep", async () => { + game.override.moveset([ Moves.SLEEP_TALK, Moves.DIG, Moves.FLY, Moves.SWORDS_DANCE ]); // Dig and Fly are invalid moves, Swords Dance should always be called + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.SLEEP_TALK); + await game.toNextTurn(); + expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)); + }); + + it("should apply secondary effects of a move", async () => { + game.override.moveset([ Moves.SLEEP_TALK, Moves.DIG, Moves.FLY, Moves.WOOD_HAMMER ]); // Dig and Fly are invalid moves, Wood Hammer should always be called + await game.classicMode.startBattle(); + + game.move.select(Moves.SLEEP_TALK); + await game.toNextTurn(); + + expect(game.scene.getPlayerPokemon()!.isFullHp()).toBeFalsy(); // Wood Hammer recoil effect should be applied + }); +}); diff --git a/src/test/moves/solar_beam.test.ts b/test/moves/solar_beam.test.ts similarity index 98% rename from src/test/moves/solar_beam.test.ts rename to test/moves/solar_beam.test.ts index ebec338932a..7f18cebff6d 100644 --- a/src/test/moves/solar_beam.test.ts +++ b/test/moves/solar_beam.test.ts @@ -5,7 +5,7 @@ import { MoveResult } from "#app/field/pokemon"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; diff --git a/src/test/moves/sparkly_swirl.test.ts b/test/moves/sparkly_swirl.test.ts similarity index 98% rename from src/test/moves/sparkly_swirl.test.ts rename to test/moves/sparkly_swirl.test.ts index a83f1c3a437..53851cb77d3 100644 --- a/src/test/moves/sparkly_swirl.test.ts +++ b/test/moves/sparkly_swirl.test.ts @@ -4,7 +4,7 @@ import { CommandPhase } from "#app/phases/command-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/test/moves/spectral_thief.test.ts b/test/moves/spectral_thief.test.ts new file mode 100644 index 00000000000..883f280da08 --- /dev/null +++ b/test/moves/spectral_thief.test.ts @@ -0,0 +1,224 @@ +import { Abilities } from "#enums/abilities"; +import { BattlerIndex } from "#app/battle"; +import { Stat } from "#enums/stat"; +import { allMoves } from "#app/data/move"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { TurnEndPhase } from "#app/phases/turn-end-phase"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Spectral Thief", () => { + 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 + .enemySpecies(Species.SHUCKLE) + .enemyLevel(100) + .enemyMoveset(Moves.SPLASH) + .enemyAbility(Abilities.BALL_FETCH) + .moveset([ Moves.SPECTRAL_THIEF, Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .disableCrits; + }); + + it("should steal max possible positive stat changes and ignore negative ones.", async () => { + await game.classicMode.startBattle(); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + + enemy.setStatStage(Stat.ATK, 6); + enemy.setStatStage(Stat.DEF, -6); + enemy.setStatStage(Stat.SPATK, 6); + enemy.setStatStage(Stat.SPDEF, -6); + enemy.setStatStage(Stat.SPD, 3); + + player.setStatStage(Stat.ATK, 4); + player.setStatStage(Stat.DEF, 1); + player.setStatStage(Stat.SPATK, 0); + player.setStatStage(Stat.SPDEF, 0); + player.setStatStage(Stat.SPD, -2); + + game.move.select(Moves.SPECTRAL_THIEF); + await game.phaseInterceptor.to(TurnEndPhase); + + /** + * enemy has +6 ATK and player +4 => player only steals +2 + * enemy has -6 DEF and player 1 => player should not steal + * enemy has +6 SPATK and player 0 => player only steals +6 + * enemy has -6 SPDEF and player 0 => player should not steal + * enemy has +3 SPD and player -2 => player only steals +3 + */ + expect(player.getStatStages()).toEqual([ 6, 1, 6, 0, 1, 0, 0 ]); + expect(enemy.getStatStages()).toEqual([ 4, -6, 0, -6, 0, 0, 0 ]); + }); + + it("should steal stat stages before dmg calculation", async () => { + game.override + .enemySpecies(Species.MAGIKARP) + .enemyLevel(50); + await game.classicMode.startBattle(); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + const moveToCheck = allMoves[Moves.SPECTRAL_THIEF]; + const dmgBefore = enemy.getAttackDamage(player, moveToCheck, false, false, false, false).damage; + + enemy.setStatStage(Stat.ATK, 6); + + player.setStatStage(Stat.ATK, 0); + + game.move.select(Moves.SPECTRAL_THIEF); + await game.phaseInterceptor.to(TurnEndPhase); + + expect(dmgBefore).toBeLessThan(enemy.getAttackDamage(player, moveToCheck, false, false, false, false).damage); + }); + + it("should steal stat stages as a negative value with Contrary.", async () => { + game.override + .ability(Abilities.CONTRARY); + await game.classicMode.startBattle(); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + + enemy.setStatStage(Stat.ATK, 6); + + player.setStatStage(Stat.ATK, 0); + + game.move.select(Moves.SPECTRAL_THIEF); + await game.phaseInterceptor.to(TurnEndPhase); + + expect(player.getStatStage(Stat.ATK)).toEqual(-6); + expect(enemy.getStatStage(Stat.ATK)).toEqual(0); + }); + + it("should steal double the stat stages with Simple.", async () => { + game.override + .ability(Abilities.SIMPLE); + await game.classicMode.startBattle(); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + + enemy.setStatStage(Stat.ATK, 3); + + player.setStatStage(Stat.ATK, 0); + + game.move.select(Moves.SPECTRAL_THIEF); + await game.phaseInterceptor.to(TurnEndPhase); + + expect(player.getStatStage(Stat.ATK)).toEqual(6); + expect(enemy.getStatStage(Stat.ATK)).toEqual(0); + }); + + it("should steal the stat stages through Clear Body.", async () => { + game.override + .enemyAbility(Abilities.CLEAR_BODY); + await game.classicMode.startBattle(); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + + enemy.setStatStage(Stat.ATK, 3); + + player.setStatStage(Stat.ATK, 0); + + game.move.select(Moves.SPECTRAL_THIEF); + await game.phaseInterceptor.to(TurnEndPhase); + + expect(player.getStatStage(Stat.ATK)).toEqual(3); + expect(enemy.getStatStage(Stat.ATK)).toEqual(0); + }); + + it("should steal the stat stages through White Smoke.", async () => { + game.override + .enemyAbility(Abilities.WHITE_SMOKE); + await game.classicMode.startBattle(); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + + enemy.setStatStage(Stat.ATK, 3); + + player.setStatStage(Stat.ATK, 0); + + game.move.select(Moves.SPECTRAL_THIEF); + await game.phaseInterceptor.to(TurnEndPhase); + + expect(player.getStatStage(Stat.ATK)).toEqual(3); + expect(enemy.getStatStage(Stat.ATK)).toEqual(0); + }); + + it("should steal the stat stages through Hyper Cutter.", async () => { + game.override + .enemyAbility(Abilities.HYPER_CUTTER); + await game.classicMode.startBattle(); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + + enemy.setStatStage(Stat.ATK, 3); + + player.setStatStage(Stat.ATK, 0); + + game.move.select(Moves.SPECTRAL_THIEF); + await game.phaseInterceptor.to(TurnEndPhase); + + expect(player.getStatStage(Stat.ATK)).toEqual(3); + expect(enemy.getStatStage(Stat.ATK)).toEqual(0); + }); + + it("should bypass Substitute.", async () => { + game.override + .enemyMoveset(Moves.SUBSTITUTE); + await game.classicMode.startBattle(); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + + enemy.setStatStage(Stat.ATK, 3); + + player.setStatStage(Stat.ATK, 0); + + game.move.select(Moves.SPECTRAL_THIEF); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.phaseInterceptor.to(TurnEndPhase); + + expect(player.getStatStage(Stat.ATK)).toEqual(3); + expect(enemy.getStatStage(Stat.ATK)).toEqual(0); + expect(enemy.hp).toBeLessThan(enemy.getMaxHp() - 1); + }); + + it("should get blocked by protect.", async () => { + game.override + .enemyMoveset(Moves.PROTECT); + await game.classicMode.startBattle(); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + + enemy.setStatStage(Stat.ATK, 3); + + player.setStatStage(Stat.ATK, 0); + + game.move.select(Moves.SPECTRAL_THIEF); + await game.phaseInterceptor.to(TurnEndPhase); + + expect(player.getStatStage(Stat.ATK)).toEqual(0); + expect(enemy.getStatStage(Stat.ATK)).toEqual(3); + expect(enemy.hp).toBe(enemy.getMaxHp()); + }); +}); diff --git a/src/test/moves/speed_swap.test.ts b/test/moves/speed_swap.test.ts similarity index 96% rename from src/test/moves/speed_swap.test.ts rename to test/moves/speed_swap.test.ts index 179f1212394..5cdea223296 100644 --- a/src/test/moves/speed_swap.test.ts +++ b/test/moves/speed_swap.test.ts @@ -1,6 +1,6 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import Phaser from "phaser"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Moves } from "#enums/moves"; diff --git a/src/test/moves/spikes.test.ts b/test/moves/spikes.test.ts similarity index 97% rename from src/test/moves/spikes.test.ts rename to test/moves/spikes.test.ts index 35e89c8caf7..11ef295a62f 100644 --- a/src/test/moves/spikes.test.ts +++ b/test/moves/spikes.test.ts @@ -1,7 +1,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/spit_up.test.ts b/test/moves/spit_up.test.ts similarity index 92% rename from src/test/moves/spit_up.test.ts rename to test/moves/spit_up.test.ts index 8e418858e8d..125b17891ed 100644 --- a/src/test/moves/spit_up.test.ts +++ b/test/moves/spit_up.test.ts @@ -2,8 +2,9 @@ import { Stat } from "#enums/stat"; import { StockpilingTag } from "#app/data/battler-tags"; import { allMoves } from "#app/data/move"; import { BattlerTagType } from "#app/enums/battler-tag-type"; -import { MoveResult, TurnMove } from "#app/field/pokemon"; -import GameManager from "#test/utils/gameManager"; +import type { TurnMove } from "#app/field/pokemon"; +import { MoveResult } from "#app/field/pokemon"; +import GameManager from "#test/testUtils/gameManager"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; @@ -124,7 +125,7 @@ describe("Moves - Spit Up", () => { game.move.select(Moves.SPIT_UP); await game.phaseInterceptor.to(TurnInitPhase); - expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ move: Moves.SPIT_UP, result: MoveResult.FAIL }); + expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ move: Moves.SPIT_UP, result: MoveResult.FAIL, targets: [ game.scene.getEnemyPokemon()!.getBattlerIndex() ]}); expect(spitUp.calculateBattlePower).not.toHaveBeenCalled(); }); @@ -147,7 +148,7 @@ describe("Moves - Spit Up", () => { await game.phaseInterceptor.to(TurnInitPhase); - expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ move: Moves.SPIT_UP, result: MoveResult.SUCCESS }); + expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ move: Moves.SPIT_UP, result: MoveResult.SUCCESS, targets: [ game.scene.getEnemyPokemon()!.getBattlerIndex() ]}); expect(spitUp.calculateBattlePower).toHaveBeenCalledOnce(); @@ -175,7 +176,7 @@ describe("Moves - Spit Up", () => { game.move.select(Moves.SPIT_UP); await game.phaseInterceptor.to(TurnInitPhase); - expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ move: Moves.SPIT_UP, result: MoveResult.SUCCESS }); + expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ move: Moves.SPIT_UP, result: MoveResult.SUCCESS, targets: [ game.scene.getEnemyPokemon()!.getBattlerIndex() ]}); expect(spitUp.calculateBattlePower).toHaveBeenCalledOnce(); diff --git a/src/test/moves/spotlight.test.ts b/test/moves/spotlight.test.ts similarity index 97% rename from src/test/moves/spotlight.test.ts rename to test/moves/spotlight.test.ts index 095f7d80bfe..2a883d403a7 100644 --- a/src/test/moves/spotlight.test.ts +++ b/test/moves/spotlight.test.ts @@ -2,7 +2,7 @@ import { BattlerIndex } from "#app/battle"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; diff --git a/src/test/moves/steamroller.test.ts b/test/moves/steamroller.test.ts similarity index 94% rename from src/test/moves/steamroller.test.ts rename to test/moves/steamroller.test.ts index 9d16643ec5d..2aed941fd92 100644 --- a/src/test/moves/steamroller.test.ts +++ b/test/moves/steamroller.test.ts @@ -1,11 +1,11 @@ import { BattlerIndex } from "#app/battle"; import { allMoves } from "#app/data/move"; import { BattlerTagType } from "#app/enums/battler-tag-type"; -import { DamageCalculationResult } from "#app/field/pokemon"; +import type { DamageCalculationResult } from "#app/field/pokemon"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/moves/stockpile.test.ts b/test/moves/stockpile.test.ts similarity index 94% rename from src/test/moves/stockpile.test.ts rename to test/moves/stockpile.test.ts index d3239856ed7..0d0a1de4840 100644 --- a/src/test/moves/stockpile.test.ts +++ b/test/moves/stockpile.test.ts @@ -1,12 +1,13 @@ import { Stat } from "#enums/stat"; import { StockpilingTag } from "#app/data/battler-tags"; -import { MoveResult, TurnMove } from "#app/field/pokemon"; +import type { TurnMove } from "#app/field/pokemon"; +import { MoveResult } from "#app/field/pokemon"; import { CommandPhase } from "#app/phases/command-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -71,7 +72,7 @@ describe("Moves - Stockpile", () => { expect(user.getStatStage(Stat.SPDEF)).toBe(3); expect(stockpilingTag).toBeDefined(); expect(stockpilingTag.stockpiledCount).toBe(3); - expect(user.getMoveHistory().at(-1)).toMatchObject({ result: MoveResult.FAIL, move: Moves.STOCKPILE }); + expect(user.getMoveHistory().at(-1)).toMatchObject({ result: MoveResult.FAIL, move: Moves.STOCKPILE, targets: [ user.getBattlerIndex() ]}); } } }); diff --git a/src/test/moves/substitute.test.ts b/test/moves/substitute.test.ts similarity index 99% rename from src/test/moves/substitute.test.ts rename to test/moves/substitute.test.ts index 14ab4ab5054..5acbb6c0a44 100644 --- a/src/test/moves/substitute.test.ts +++ b/test/moves/substitute.test.ts @@ -3,8 +3,8 @@ import { ArenaTagSide } from "#app/data/arena-tag"; import { SubstituteTag, TrappedTag } from "#app/data/battler-tags"; import { allMoves, StealHeldItemChanceAttr } from "#app/data/move"; import { MoveResult } from "#app/field/pokemon"; -import { CommandPhase } from "#app/phases/command-phase"; -import GameManager from "#app/test/utils/gameManager"; +import type { CommandPhase } from "#app/phases/command-phase"; +import GameManager from "#test/testUtils/gameManager"; import { Command } from "#app/ui/command-ui-handler"; import { Mode } from "#app/ui/ui"; import { Abilities } from "#enums/abilities"; diff --git a/src/test/moves/swallow.test.ts b/test/moves/swallow.test.ts similarity index 93% rename from src/test/moves/swallow.test.ts rename to test/moves/swallow.test.ts index 2aee4d2604a..1ede5808d82 100644 --- a/src/test/moves/swallow.test.ts +++ b/test/moves/swallow.test.ts @@ -1,13 +1,14 @@ import { Stat } from "#enums/stat"; import { StockpilingTag } from "#app/data/battler-tags"; import { BattlerTagType } from "#app/enums/battler-tag-type"; -import { MoveResult, TurnMove } from "#app/field/pokemon"; +import type { TurnMove } from "#app/field/pokemon"; +import { MoveResult } from "#app/field/pokemon"; import { MovePhase } from "#app/phases/move-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -134,7 +135,7 @@ describe("Moves - Swallow", () => { game.move.select(Moves.SWALLOW); await game.phaseInterceptor.to(TurnInitPhase); - expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ move: Moves.SWALLOW, result: MoveResult.FAIL }); + expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ move: Moves.SWALLOW, result: MoveResult.FAIL, targets: [ pokemon.getBattlerIndex() ]}); }); describe("restores stat stage boosts granted by stacks", () => { @@ -155,7 +156,7 @@ describe("Moves - Swallow", () => { await game.phaseInterceptor.to(TurnInitPhase); - expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ move: Moves.SWALLOW, result: MoveResult.SUCCESS }); + expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ move: Moves.SWALLOW, result: MoveResult.SUCCESS, targets: [ pokemon.getBattlerIndex() ]}); expect(pokemon.getStatStage(Stat.DEF)).toBe(0); expect(pokemon.getStatStage(Stat.SPDEF)).toBe(0); @@ -182,7 +183,7 @@ describe("Moves - Swallow", () => { await game.phaseInterceptor.to(TurnInitPhase); - expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ move: Moves.SWALLOW, result: MoveResult.SUCCESS }); + expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ move: Moves.SWALLOW, result: MoveResult.SUCCESS, targets: [ pokemon.getBattlerIndex() ]}); expect(pokemon.getStatStage(Stat.DEF)).toBe(1); expect(pokemon.getStatStage(Stat.SPDEF)).toBe(-2); diff --git a/src/test/moves/syrup_bomb.test.ts b/test/moves/syrup_bomb.test.ts similarity index 98% rename from src/test/moves/syrup_bomb.test.ts rename to test/moves/syrup_bomb.test.ts index ea2f8b6bab3..a284e6fa669 100644 --- a/src/test/moves/syrup_bomb.test.ts +++ b/test/moves/syrup_bomb.test.ts @@ -3,7 +3,7 @@ import { Species } from "#enums/species"; import { Abilities } from "#enums/abilities"; import { BattlerTagType } from "#enums/battler-tag-type"; import { Stat } from "#enums/stat"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { BattlerIndex } from "#app/battle"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/tackle.test.ts b/test/moves/tackle.test.ts similarity index 97% rename from src/test/moves/tackle.test.ts rename to test/moves/tackle.test.ts index ff50f027f87..2ee811d3137 100644 --- a/src/test/moves/tackle.test.ts +++ b/test/moves/tackle.test.ts @@ -3,7 +3,7 @@ import { EnemyCommandPhase } from "#app/phases/enemy-command-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/tail_whip.test.ts b/test/moves/tail_whip.test.ts similarity index 96% rename from src/test/moves/tail_whip.test.ts rename to test/moves/tail_whip.test.ts index 5c83feb8a4e..fea334e4708 100644 --- a/src/test/moves/tail_whip.test.ts +++ b/test/moves/tail_whip.test.ts @@ -1,5 +1,5 @@ import { Stat } from "#enums/stat"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/src/test/moves/tailwind.test.ts b/test/moves/tailwind.test.ts similarity index 98% rename from src/test/moves/tailwind.test.ts rename to test/moves/tailwind.test.ts index a26dde82824..56cf85749cd 100644 --- a/src/test/moves/tailwind.test.ts +++ b/test/moves/tailwind.test.ts @@ -4,7 +4,7 @@ import { ArenaTagType } from "#app/enums/arena-tag-type"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/tar_shot.test.ts b/test/moves/tar_shot.test.ts similarity index 94% rename from src/test/moves/tar_shot.test.ts rename to test/moves/tar_shot.test.ts index 5fb70abc19c..1a259206e48 100644 --- a/src/test/moves/tar_shot.test.ts +++ b/test/moves/tar_shot.test.ts @@ -4,7 +4,7 @@ import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { Stat } from "#app/enums/stat"; import { Abilities } from "#enums/abilities"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -83,10 +83,12 @@ describe("Moves - Tar Shot", () => { }); it("does not double the effectiveness of Fire-type moves against a Pokémon that is Terastallized", async () => { - game.override.enemyHeldItems([{ name: "TERA_SHARD", type: Type.GRASS }]).enemySpecies(Species.SPRIGATITO); + game.override.enemySpecies(Species.SPRIGATITO); await game.classicMode.startBattle([ Species.PIKACHU ]); const enemy = game.scene.getEnemyPokemon()!; + enemy.teraType = Type.GRASS; + enemy.isTerastallized = true; vi.spyOn(enemy, "getMoveEffectiveness"); @@ -119,7 +121,8 @@ describe("Moves - Tar Shot", () => { await game.toNextTurn(); - game.override.enemyHeldItems([{ name: "TERA_SHARD", type: Type.GRASS }]); + enemy.teraType = Type.GRASS; + enemy.isTerastallized = true; game.move.select(Moves.FIRE_PUNCH); await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); diff --git a/src/test/moves/taunt.test.ts b/test/moves/taunt.test.ts similarity index 96% rename from src/test/moves/taunt.test.ts rename to test/moves/taunt.test.ts index a425a048a2c..c5cdd512704 100644 --- a/src/test/moves/taunt.test.ts +++ b/test/moves/taunt.test.ts @@ -1,7 +1,7 @@ import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { Abilities } from "#enums/abilities"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import { MoveResult } from "#app/field/pokemon"; diff --git a/src/test/moves/telekinesis.test.ts b/test/moves/telekinesis.test.ts similarity index 88% rename from src/test/moves/telekinesis.test.ts rename to test/moves/telekinesis.test.ts index 76c0d001f00..441c70fff34 100644 --- a/src/test/moves/telekinesis.test.ts +++ b/test/moves/telekinesis.test.ts @@ -4,9 +4,10 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { MoveResult } from "#app/field/pokemon"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; +import { BattlerIndex } from "#app/battle"; describe("Moves - Telekinesis", () => { let phaserGame: Phaser.Game; @@ -121,4 +122,17 @@ describe("Moves - Telekinesis", () => { expect(enemyOpponent.getTag(BattlerTagType.FLOATING)).toBeUndefined(); expect(playerPokemon.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); }); + + it("should not be baton passed onto a mega gengar", async () => { + game.override.moveset([ Moves.BATON_PASS ]) + .enemyMoveset([ Moves.TELEKINESIS ]) + .starterForms({ [Species.GENGAR]: 1 }); + + await game.classicMode.startBattle([ Species.MAGIKARP, Species.GENGAR ]); + game.move.select(Moves.BATON_PASS); + game.doSelectPartyPokemon(1); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getPlayerPokemon()!.getTag(BattlerTagType.TELEKINESIS)).toBeUndefined(); + }); }); diff --git a/test/moves/tera_blast.test.ts b/test/moves/tera_blast.test.ts new file mode 100644 index 00000000000..22231ec6e46 --- /dev/null +++ b/test/moves/tera_blast.test.ts @@ -0,0 +1,191 @@ +import { BattlerIndex } from "#app/battle"; +import { Stat } from "#enums/stat"; +import { allMoves, TeraMoveCategoryAttr } from "#app/data/move"; +import { Type } from "#enums/type"; +import { Abilities } from "#app/enums/abilities"; +import { HitResult } from "#app/field/pokemon"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; + +describe("Moves - Tera Blast", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + const moveToCheck = allMoves[Moves.TERA_BLAST]; + const teraBlastAttr = moveToCheck.getAttrs(TeraMoveCategoryAttr)[0]; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + + game.override + .battleType("single") + .disableCrits() + .starterSpecies(Species.FEEBAS) + .moveset([ Moves.TERA_BLAST ]) + .ability(Abilities.BALL_FETCH) + .enemySpecies(Species.MAGIKARP) + .enemyMoveset(Moves.SPLASH) + .enemyAbility(Abilities.STURDY) + .enemyLevel(50); + + vi.spyOn(moveToCheck, "calculateBattlePower"); + }); + + it("changes type to match user's tera type", async () => { + game.override.enemySpecies(Species.FURRET); + await game.startBattle(); + const enemyPokemon = game.scene.getEnemyPokemon()!; + vi.spyOn(enemyPokemon, "apply"); + + const playerPokemon = game.scene.getPlayerPokemon()!; + playerPokemon.teraType = Type.FIGHTING; + playerPokemon.isTerastallized = true; + + game.move.select(Moves.TERA_BLAST); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("MoveEffectPhase"); + + expect(enemyPokemon.apply).toHaveReturnedWith(HitResult.SUPER_EFFECTIVE); + }, 20000); + + it("increases power if user is Stellar tera type", async () => { + await game.startBattle(); + + const playerPokemon = game.scene.getPlayerPokemon()!; + playerPokemon.teraType = Type.STELLAR; + playerPokemon.isTerastallized = true; + + game.move.select(Moves.TERA_BLAST); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("MoveEffectPhase"); + + expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(100); + }, 20000); + + it("is super effective against terastallized targets if user is Stellar tera type", async () => { + await game.startBattle(); + + const playerPokemon = game.scene.getPlayerPokemon()!; + playerPokemon.teraType = Type.STELLAR; + playerPokemon.isTerastallized = true; + + const enemyPokemon = game.scene.getEnemyPokemon()!; + vi.spyOn(enemyPokemon, "apply"); + enemyPokemon.isTerastallized = true; + + game.move.select(Moves.TERA_BLAST); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("MoveEffectPhase"); + + expect(enemyPokemon.apply).toHaveReturnedWith(HitResult.SUPER_EFFECTIVE); + }); + + it("uses the higher ATK for damage calculation", async () => { + await game.startBattle(); + + const playerPokemon = game.scene.getPlayerPokemon()!; + playerPokemon.stats[Stat.ATK] = 100; + playerPokemon.stats[Stat.SPATK] = 1; + playerPokemon.isTerastallized = true; + + vi.spyOn(teraBlastAttr, "apply"); + + game.move.select(Moves.TERA_BLAST); + await game.toNextTurn(); + expect(teraBlastAttr.apply).toHaveLastReturnedWith(true); + }); + + it("uses the higher SPATK for damage calculation", async () => { + await game.startBattle(); + + const playerPokemon = game.scene.getPlayerPokemon()!; + playerPokemon.stats[Stat.ATK] = 1; + playerPokemon.stats[Stat.SPATK] = 100; + + vi.spyOn(teraBlastAttr, "apply"); + + game.move.select(Moves.TERA_BLAST); + await game.toNextTurn(); + expect(teraBlastAttr.apply).toHaveLastReturnedWith(false); + }); + + it("should stay as a special move if ATK turns lower than SPATK mid-turn", async () => { + game.override.enemyMoveset([ Moves.CHARM ]); + await game.startBattle(); + + const playerPokemon = game.scene.getPlayerPokemon()!; + playerPokemon.stats[Stat.ATK] = 51; + playerPokemon.stats[Stat.SPATK] = 50; + + vi.spyOn(teraBlastAttr, "apply"); + + game.move.select(Moves.TERA_BLAST); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextTurn(); + expect(teraBlastAttr.apply).toHaveLastReturnedWith(false); + }); + + it("does not change its move category from stat changes due to held items", async () => { + game.override + .startingHeldItems([{ name: "SPECIES_STAT_BOOSTER", type: "THICK_CLUB" }]) + .starterSpecies(Species.CUBONE); + await game.startBattle(); + + const playerPokemon = game.scene.getPlayerPokemon()!; + + playerPokemon.stats[Stat.ATK] = 50; + playerPokemon.stats[Stat.SPATK] = 51; + + vi.spyOn(teraBlastAttr, "apply"); + + game.move.select(Moves.TERA_BLAST); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextTurn(); + + expect(teraBlastAttr.apply).toHaveLastReturnedWith(false); + }); + + it("does not change its move category from stat changes due to abilities", async () => { + game.override.ability(Abilities.HUGE_POWER); + await game.startBattle(); + + const playerPokemon = game.scene.getPlayerPokemon()!; + playerPokemon.stats[Stat.ATK] = 50; + playerPokemon.stats[Stat.SPATK] = 51; + + vi.spyOn(teraBlastAttr, "apply"); + + game.move.select(Moves.TERA_BLAST); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextTurn(); + expect(teraBlastAttr.apply).toHaveLastReturnedWith(false); + }); + + + it("causes stat drops if user is Stellar tera type", async () => { + await game.startBattle(); + + const playerPokemon = game.scene.getPlayerPokemon()!; + playerPokemon.teraType = Type.STELLAR; + playerPokemon.isTerastallized = true; + + game.move.select(Moves.TERA_BLAST); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("MoveEndPhase"); + + expect(playerPokemon.getStatStage(Stat.SPATK)).toBe(-1); + expect(playerPokemon.getStatStage(Stat.ATK)).toBe(-1); + }, 20000); +}); diff --git a/src/test/moves/tera_starstorm.test.ts b/test/moves/tera_starstorm.test.ts similarity index 92% rename from src/test/moves/tera_starstorm.test.ts rename to test/moves/tera_starstorm.test.ts index 22dd5b3c4d1..219a64b4ecc 100644 --- a/src/test/moves/tera_starstorm.test.ts +++ b/test/moves/tera_starstorm.test.ts @@ -3,7 +3,7 @@ import { Type } from "#enums/type"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; @@ -29,8 +29,7 @@ describe("Moves - Tera Starstorm", () => { .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH) .enemyLevel(30) - .enemySpecies(Species.MAGIKARP) - .startingHeldItems([{ name: "TERA_SHARD", type: Type.FIRE }]); + .enemySpecies(Species.MAGIKARP); }); it("changes type to Stellar when used by Terapagos in its Stellar Form", async () => { @@ -38,19 +37,22 @@ describe("Moves - Tera Starstorm", () => { await game.classicMode.startBattle([ Species.TERAPAGOS ]); const terapagos = game.scene.getPlayerPokemon()!; + terapagos.isTerastallized = true; vi.spyOn(terapagos, "getMoveType"); game.move.select(Moves.TERA_STARSTORM); await game.phaseInterceptor.to("TurnEndPhase"); - expect(terapagos.isTerastallized()).toBe(true); expect(terapagos.getMoveType).toHaveReturnedWith(Type.STELLAR); }); it("targets both opponents in a double battle when used by Terapagos in its Stellar Form", async () => { await game.classicMode.startBattle([ Species.MAGIKARP, Species.TERAPAGOS ]); + const terapagos = game.scene.getPlayerParty()[1]; + terapagos.isTerastallized = true; + game.move.select(Moves.TERA_STARSTORM, 0, BattlerIndex.ENEMY); game.move.select(Moves.TERA_STARSTORM, 1); @@ -82,6 +84,8 @@ describe("Moves - Tera Starstorm", () => { fusionedMon.fusionGender = magikarp.gender; fusionedMon.fusionLuck = magikarp.luck; + fusionedMon.isTerastallized = true; + vi.spyOn(fusionedMon, "getMoveType"); game.move.select(Moves.TERA_STARSTORM, 0); @@ -90,7 +94,6 @@ describe("Moves - Tera Starstorm", () => { // Fusion and terastallized expect(fusionedMon.isFusion()).toBe(true); - expect(fusionedMon.isTerastallized()).toBe(true); // Move effects should be applied expect(fusionedMon.getMoveType).toHaveReturnedWith(Type.STELLAR); expect(game.scene.getEnemyField().every(pokemon => pokemon.isFullHp())).toBe(false); diff --git a/src/test/moves/thousand_arrows.test.ts b/test/moves/thousand_arrows.test.ts similarity index 98% rename from src/test/moves/thousand_arrows.test.ts rename to test/moves/thousand_arrows.test.ts index 976b4352ee4..563f99c030d 100644 --- a/src/test/moves/thousand_arrows.test.ts +++ b/test/moves/thousand_arrows.test.ts @@ -4,7 +4,7 @@ import { BerryPhase } from "#app/phases/berry-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/throat_chop.test.ts b/test/moves/throat_chop.test.ts similarity index 96% rename from src/test/moves/throat_chop.test.ts rename to test/moves/throat_chop.test.ts index 24293f8d086..d69205aadf3 100644 --- a/src/test/moves/throat_chop.test.ts +++ b/test/moves/throat_chop.test.ts @@ -3,7 +3,7 @@ import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { Stat } from "#app/enums/stat"; import { Abilities } from "#enums/abilities"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest"; diff --git a/src/test/moves/thunder_wave.test.ts b/test/moves/thunder_wave.test.ts similarity index 96% rename from src/test/moves/thunder_wave.test.ts rename to test/moves/thunder_wave.test.ts index 5551451e59b..34ab64e081a 100644 --- a/src/test/moves/thunder_wave.test.ts +++ b/test/moves/thunder_wave.test.ts @@ -1,9 +1,9 @@ -import { EnemyPokemon } from "#app/field/pokemon"; +import type { EnemyPokemon } from "#app/field/pokemon"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/tidy_up.test.ts b/test/moves/tidy_up.test.ts similarity index 98% rename from src/test/moves/tidy_up.test.ts rename to test/moves/tidy_up.test.ts index 255967b40ac..5b5b67847ce 100644 --- a/src/test/moves/tidy_up.test.ts +++ b/test/moves/tidy_up.test.ts @@ -5,7 +5,7 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import { SubstituteTag } from "#app/data/battler-tags"; diff --git a/src/test/moves/torment.test.ts b/test/moves/torment.test.ts similarity index 97% rename from src/test/moves/torment.test.ts rename to test/moves/torment.test.ts index b4c9a059db1..8cc835aad48 100644 --- a/src/test/moves/torment.test.ts +++ b/test/moves/torment.test.ts @@ -1,7 +1,7 @@ import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { Abilities } from "#enums/abilities"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import { MoveResult } from "#app/field/pokemon"; diff --git a/src/test/moves/toxic.test.ts b/test/moves/toxic.test.ts similarity index 98% rename from src/test/moves/toxic.test.ts rename to test/moves/toxic.test.ts index b146134ae51..8e66fefe6ff 100644 --- a/src/test/moves/toxic.test.ts +++ b/test/moves/toxic.test.ts @@ -1,6 +1,6 @@ import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { StatusEffect } from "#enums/status-effect"; diff --git a/src/test/moves/toxic_spikes.test.ts b/test/moves/toxic_spikes.test.ts similarity index 92% rename from src/test/moves/toxic_spikes.test.ts rename to test/moves/toxic_spikes.test.ts index bdd59ed0ac8..2bddbc2eccb 100644 --- a/src/test/moves/toxic_spikes.test.ts +++ b/test/moves/toxic_spikes.test.ts @@ -1,11 +1,13 @@ -import { ArenaTagSide, ArenaTrapTag } from "#app/data/arena-tag"; -import { decrypt, encrypt, GameData, SessionSaveData } from "#app/system/game-data"; +import type { ArenaTrapTag } from "#app/data/arena-tag"; +import { ArenaTagSide } from "#app/data/arena-tag"; +import type { SessionSaveData } from "#app/system/game-data"; +import { decrypt, encrypt, GameData } from "#app/system/game-data"; import { Abilities } from "#enums/abilities"; import { ArenaTagType } from "#enums/arena-tag-type"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -116,8 +118,7 @@ describe("Moves - Toxic Spikes", () => { it("should persist through reload", async () => { game.override.startingWave(1); - const scene = game.scene; - const gameData = new GameData(scene); + const gameData = new GameData(); await game.classicMode.runToSummon([ Species.MIGHTYENA ]); @@ -128,10 +129,10 @@ describe("Moves - Toxic Spikes", () => { await game.phaseInterceptor.to("BattleEndPhase"); await game.toNextWave(); - const sessionData : SessionSaveData = gameData["getSessionSaveData"](game.scene); + const sessionData : SessionSaveData = gameData["getSessionSaveData"](); localStorage.setItem("sessionTestData", encrypt(JSON.stringify(sessionData), true)); const recoveredData : SessionSaveData = gameData.parseSessionData(decrypt(localStorage.getItem("sessionTestData")!, true)); - gameData.loadSession(game.scene, 0, recoveredData); + await gameData.loadSession(0, recoveredData); expect(sessionData.arena.tags).toEqual(recoveredData.arena.tags); localStorage.removeItem("sessionTestData"); diff --git a/src/test/moves/transform.test.ts b/test/moves/transform.test.ts similarity index 89% rename from src/test/moves/transform.test.ts rename to test/moves/transform.test.ts index adb97b42af7..781e83b7e89 100644 --- a/src/test/moves/transform.test.ts +++ b/test/moves/transform.test.ts @@ -1,6 +1,6 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import Phaser from "phaser"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Moves } from "#enums/moves"; @@ -116,4 +116,16 @@ describe("Moves - Transform", () => { } }); }); + + it("should activate its ability if it copies one that activates on summon", async () => { + game.override.enemyAbility(Abilities.INTIMIDATE) + .ability(Abilities.BALL_FETCH); + + await game.classicMode.startBattle([ Species.DITTO ]); + game.move.select(Moves.TRANSFORM); + + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.ATK)).toBe(-1); + }); }); diff --git a/src/test/moves/trick_or_treat.test.ts b/test/moves/trick_or_treat.test.ts similarity index 96% rename from src/test/moves/trick_or_treat.test.ts rename to test/moves/trick_or_treat.test.ts index 5c85cac05e2..2efd1b76d1a 100644 --- a/src/test/moves/trick_or_treat.test.ts +++ b/test/moves/trick_or_treat.test.ts @@ -2,7 +2,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { Type } from "#enums/type"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/triple_arrows.test.ts b/test/moves/triple_arrows.test.ts similarity index 97% rename from src/test/moves/triple_arrows.test.ts rename to test/moves/triple_arrows.test.ts index 98ad29997df..9aa08d7b670 100644 --- a/src/test/moves/triple_arrows.test.ts +++ b/test/moves/triple_arrows.test.ts @@ -2,7 +2,7 @@ import { allMoves, FlinchAttr, StatStageChangeAttr } from "#app/data/move"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/moves/u_turn.test.ts b/test/moves/u_turn.test.ts similarity index 98% rename from src/test/moves/u_turn.test.ts rename to test/moves/u_turn.test.ts index c6e255e01b2..f57dec2e39f 100644 --- a/src/test/moves/u_turn.test.ts +++ b/test/moves/u_turn.test.ts @@ -2,7 +2,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/moves/upper_hand.test.ts b/test/moves/upper_hand.test.ts similarity index 98% rename from src/test/moves/upper_hand.test.ts rename to test/moves/upper_hand.test.ts index f94197d3fbd..c7556c1fa91 100644 --- a/src/test/moves/upper_hand.test.ts +++ b/test/moves/upper_hand.test.ts @@ -3,7 +3,7 @@ import { MoveResult } from "#app/field/pokemon"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/moves/whirlwind.test.ts b/test/moves/whirlwind.test.ts similarity index 99% rename from src/test/moves/whirlwind.test.ts rename to test/moves/whirlwind.test.ts index 69232bee43a..8637b6ec02c 100644 --- a/src/test/moves/whirlwind.test.ts +++ b/test/moves/whirlwind.test.ts @@ -5,7 +5,7 @@ import { MoveResult } from "#app/field/pokemon"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { Status } from "#app/data/status-effect"; diff --git a/src/test/moves/wide_guard.test.ts b/test/moves/wide_guard.test.ts similarity index 98% rename from src/test/moves/wide_guard.test.ts rename to test/moves/wide_guard.test.ts index c25a700c981..1f0579e24ee 100644 --- a/src/test/moves/wide_guard.test.ts +++ b/test/moves/wide_guard.test.ts @@ -1,6 +1,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; -import GameManager from "../utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; diff --git a/src/test/moves/will_o_wisp.test.ts b/test/moves/will_o_wisp.test.ts similarity index 96% rename from src/test/moves/will_o_wisp.test.ts rename to test/moves/will_o_wisp.test.ts index 39729d331ad..473f0d4d0a8 100644 --- a/src/test/moves/will_o_wisp.test.ts +++ b/test/moves/will_o_wisp.test.ts @@ -3,7 +3,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/src/test/mystery-encounter/encounter-test-utils.ts b/test/mystery-encounter/encounter-test-utils.ts similarity index 93% rename from src/test/mystery-encounter/encounter-test-utils.ts rename to test/mystery-encounter/encounter-test-utils.ts index ee67f1b5d39..97f292ef6b1 100644 --- a/src/test/mystery-encounter/encounter-test-utils.ts +++ b/test/mystery-encounter/encounter-test-utils.ts @@ -4,15 +4,15 @@ import { CommandPhase } from "#app/phases/command-phase"; import { MessagePhase } from "#app/phases/message-phase"; import { MysteryEncounterBattlePhase, MysteryEncounterOptionSelectedPhase, MysteryEncounterPhase, MysteryEncounterRewardsPhase } from "#app/phases/mystery-encounter-phases"; import { VictoryPhase } from "#app/phases/victory-phase"; -import MessageUiHandler from "#app/ui/message-ui-handler"; -import MysteryEncounterUiHandler from "#app/ui/mystery-encounter-ui-handler"; -import PartyUiHandler from "#app/ui/party-ui-handler"; -import OptionSelectUiHandler from "#app/ui/settings/option-select-ui-handler"; +import type MessageUiHandler from "#app/ui/message-ui-handler"; +import type MysteryEncounterUiHandler from "#app/ui/mystery-encounter-ui-handler"; +import type PartyUiHandler from "#app/ui/party-ui-handler"; +import type OptionSelectUiHandler from "#app/ui/settings/option-select-ui-handler"; import { Mode } from "#app/ui/ui"; import { isNullOrUndefined } from "#app/utils"; import { Button } from "#enums/buttons"; import { StatusEffect } from "#enums/status-effect"; -import GameManager from "#test/utils/gameManager"; +import type GameManager from "#test/testUtils/gameManager"; import { expect, vi } from "vitest"; /** @@ -52,7 +52,7 @@ export async function runMysteryEncounterToEnd(game: GameManager, optionNo: numb game.onNextPrompt("CommandPhase", Mode.COMMAND, () => { game.scene.clearPhaseQueue(); game.scene.clearPhaseQueueSplice(); - game.scene.unshiftPhase(new VictoryPhase(game.scene, 0)); + game.scene.unshiftPhase(new VictoryPhase(0)); game.endPhase(); }); @@ -170,7 +170,7 @@ export async function skipBattleRunMysteryEncounterRewardsPhase(game: GameManage p.status = new Status(StatusEffect.FAINT); game.scene.field.remove(p); }); - game.scene.pushPhase(new VictoryPhase(game.scene, 0)); + game.scene.pushPhase(new VictoryPhase(0)); game.phaseInterceptor.superEndPhase(); game.setMode(Mode.MESSAGE); await game.phaseInterceptor.to(MysteryEncounterRewardsPhase, runRewardsPhase); diff --git a/src/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts b/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts similarity index 97% rename from src/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts rename to test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts index 7d783958422..d7f0ed6e20e 100644 --- a/src/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts +++ b/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts @@ -3,14 +3,14 @@ import { HUMAN_TRANSITABLE_BIOMES } from "#app/data/mystery-encounters/mystery-e import { Biome } from "#app/enums/biome"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; import { Species } from "#app/enums/species"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { runMysteryEncounterToEnd, skipBattleRunMysteryEncounterRewardsPhase } from "#test/mystery-encounter/encounter-test-utils"; -import BattleScene from "#app/battle-scene"; +import type BattleScene from "#app/battle-scene"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; -import { initSceneWithoutEncounterPhase } from "#test/utils/gameManagerUtils"; +import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; import { ATrainersTestEncounter } from "#app/data/mystery-encounters/encounters/a-trainers-test-encounter"; import { EggTier } from "#enums/egg-type"; import { CommandPhase } from "#app/phases/command-phase"; @@ -78,8 +78,8 @@ describe("A Trainer's Test - Mystery Encounter", () => { expect(ATrainersTestEncounter.onInit).toBeDefined(); - ATrainersTestEncounter.populateDialogueTokensFromRequirements(scene); - const onInitResult = onInit!(scene); + ATrainersTestEncounter.populateDialogueTokensFromRequirements(); + const onInitResult = onInit!(); expect(ATrainersTestEncounter.dialogueTokens?.statTrainerName).toBeDefined(); expect(ATrainersTestEncounter.misc.trainerType).toBeDefined(); diff --git a/src/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts b/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts similarity index 99% rename from src/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts rename to test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts index 61d8aaa9f5a..0503a60cf1b 100644 --- a/src/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts +++ b/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts @@ -1,11 +1,11 @@ import { Biome } from "#app/enums/biome"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; import { Species } from "#app/enums/species"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { runMysteryEncounterToEnd, skipBattleRunMysteryEncounterRewardsPhase } from "#test/mystery-encounter/encounter-test-utils"; -import BattleScene from "#app/battle-scene"; +import type BattleScene from "#app/battle-scene"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; diff --git a/src/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts b/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts similarity index 96% rename from src/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts rename to test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts index 727a3993d9b..b88e02be6ab 100644 --- a/src/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts +++ b/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts @@ -3,16 +3,16 @@ import { HUMAN_TRANSITABLE_BIOMES } from "#app/data/mystery-encounters/mystery-e import { Biome } from "#app/enums/biome"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; import { Species } from "#app/enums/species"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { runMysteryEncounterToEnd } from "#test/mystery-encounter/encounter-test-utils"; -import BattleScene from "#app/battle-scene"; +import type BattleScene from "#app/battle-scene"; import { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; import { AnOfferYouCantRefuseEncounter } from "#app/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; -import { initSceneWithoutEncounterPhase } from "#test/utils/gameManagerUtils"; +import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { Moves } from "#enums/moves"; import { ShinyRateBoosterModifier } from "#app/modifier/modifier"; @@ -91,8 +91,8 @@ describe("An Offer You Can't Refuse - Mystery Encounter", () => { expect(AnOfferYouCantRefuseEncounter.onInit).toBeDefined(); - AnOfferYouCantRefuseEncounter.populateDialogueTokensFromRequirements(scene); - const onInitResult = onInit!(scene); + AnOfferYouCantRefuseEncounter.populateDialogueTokensFromRequirements(); + const onInitResult = onInit!(); expect(AnOfferYouCantRefuseEncounter.dialogueTokens?.strongestPokemon).toBeDefined(); expect(AnOfferYouCantRefuseEncounter.dialogueTokens?.price).toBeDefined(); @@ -130,7 +130,7 @@ describe("An Offer You Can't Refuse - Mystery Encounter", () => { const price = scene.currentBattle.mysteryEncounter!.misc.price; - expect(updateMoneySpy).toHaveBeenCalledWith(scene, price); + expect(updateMoneySpy).toHaveBeenCalledWith(price); expect(scene.money).toBe(initialMoney + price); }); @@ -220,7 +220,7 @@ describe("An Offer You Can't Refuse - Mystery Encounter", () => { const price = scene.currentBattle.mysteryEncounter!.misc.price; - expect(updateMoneySpy).toHaveBeenCalledWith(scene, price); + expect(updateMoneySpy).toHaveBeenCalledWith(price); expect(scene.money).toBe(initialMoney + price); }); diff --git a/src/test/mystery-encounter/encounters/berries-abound-encounter.test.ts b/test/mystery-encounter/encounters/berries-abound-encounter.test.ts similarity index 95% rename from src/test/mystery-encounter/encounters/berries-abound-encounter.test.ts rename to test/mystery-encounter/encounters/berries-abound-encounter.test.ts index 2507b94e5ae..d623d1ce7a8 100644 --- a/src/test/mystery-encounter/encounters/berries-abound-encounter.test.ts +++ b/test/mystery-encounter/encounters/berries-abound-encounter.test.ts @@ -2,16 +2,16 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encount import { Biome } from "#app/enums/biome"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; import { Species } from "#app/enums/species"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { runMysteryEncounterToEnd, skipBattleRunMysteryEncounterRewardsPhase } from "#test/mystery-encounter/encounter-test-utils"; -import BattleScene from "#app/battle-scene"; +import type BattleScene from "#app/battle-scene"; import { Mode } from "#app/ui/ui"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { BerryModifier } from "#app/modifier/modifier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; -import { initSceneWithoutEncounterPhase } from "#test/utils/gameManagerUtils"; +import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; import { BerriesAboundEncounter } from "#app/data/mystery-encounters/encounters/berries-abound-encounter"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import * as EncounterDialogueUtils from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; @@ -80,8 +80,8 @@ describe("Berries Abound - Mystery Encounter", () => { expect(BerriesAboundEncounter.onInit).toBeDefined(); - BerriesAboundEncounter.populateDialogueTokensFromRequirements(scene); - const onInitResult = onInit!(scene); + BerriesAboundEncounter.populateDialogueTokensFromRequirements(); + const onInitResult = onInit!(); const config = BerriesAboundEncounter.enemyPartyConfigs[0]; expect(config).toBeDefined(); @@ -192,7 +192,7 @@ describe("Berries Abound - Mystery Encounter", () => { // Should be enraged expect(enemyField[0].summonData.statStages).toEqual([ 0, 1, 0, 1, 1, 0, 0 ]); - expect(encounterTextSpy).toHaveBeenCalledWith(expect.any(BattleScene), `${namespace}:option.2.selected_bad`); + expect(encounterTextSpy).toHaveBeenCalledWith(`${namespace}:option.2.selected_bad`); }); it("should start battle if fastest pokemon is slower than boss above wave 50", async () => { @@ -216,7 +216,7 @@ describe("Berries Abound - Mystery Encounter", () => { // Should be enraged expect(enemyField[0].summonData.statStages).toEqual([ 1, 1, 1, 1, 1, 0, 0 ]); - expect(encounterTextSpy).toHaveBeenCalledWith(expect.any(BattleScene), `${namespace}:option.2.selected_bad`); + expect(encounterTextSpy).toHaveBeenCalledWith(`${namespace}:option.2.selected_bad`); }); it("Should skip battle when fastest pokemon is faster than boss", async () => { @@ -241,7 +241,7 @@ describe("Berries Abound - Mystery Encounter", () => { expect(option.modifierTypeOption.type.id).toContain("BERRY"); } - expect(EncounterDialogueUtils.showEncounterText).toHaveBeenCalledWith(expect.any(BattleScene), `${namespace}:option.2.selected`); + expect(EncounterDialogueUtils.showEncounterText).toHaveBeenCalledWith(`${namespace}:option.2.selected`); expect(EncounterPhaseUtils.leaveEncounterWithoutBattle).toBeCalled(); }); }); diff --git a/src/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts b/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts similarity index 98% rename from src/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts rename to test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts index e0f37c7e045..6827ea5a463 100644 --- a/src/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts +++ b/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts @@ -2,16 +2,16 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encount import { Biome } from "#app/enums/biome"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; import { Species } from "#app/enums/species"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { runMysteryEncounterToEnd, runSelectMysteryEncounterOption, skipBattleRunMysteryEncounterRewardsPhase } from "#test/mystery-encounter/encounter-test-utils"; import { Moves } from "#enums/moves"; -import BattleScene from "#app/battle-scene"; +import type BattleScene from "#app/battle-scene"; import { PokemonMove } from "#app/field/pokemon"; import { Mode } from "#app/ui/ui"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; -import { initSceneWithoutEncounterPhase } from "#test/utils/gameManagerUtils"; +import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; import { TrainerType } from "#enums/trainer-type"; import { MysteryEncounterPhase, MysteryEncounterRewardsPhase } from "#app/phases/mystery-encounter-phases"; import { ContactHeldItemTransferChanceModifier } from "#app/modifier/modifier"; @@ -209,8 +209,8 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { expect(BugTypeSuperfanEncounter.onInit).toBeDefined(); - BugTypeSuperfanEncounter.populateDialogueTokensFromRequirements(scene); - const onInitResult = onInit!(scene); + BugTypeSuperfanEncounter.populateDialogueTokensFromRequirements(); + const onInitResult = onInit!(); const config = BugTypeSuperfanEncounter.enemyPartyConfigs[0]; expect(config).toBeDefined(); @@ -384,7 +384,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { await game.phaseInterceptor.run(MysteryEncounterRewardsPhase); expect(selectOptionSpy).toHaveBeenCalledTimes(1); - const optionData = selectOptionSpy.mock.calls[0][1]; + const optionData = selectOptionSpy.mock.calls[0][0]; expect(PHYSICAL_TUTOR_MOVES.some(move => new PokemonMove(move).getName() === optionData[0].label)).toBe(true); expect(SPECIAL_TUTOR_MOVES.some(move => new PokemonMove(move).getName() === optionData[1].label)).toBe(true); expect(STATUS_TUTOR_MOVES.some(move => new PokemonMove(move).getName() === optionData[2].label)).toBe(true); diff --git a/src/test/mystery-encounter/encounters/clowning-around-encounter.test.ts b/test/mystery-encounter/encounters/clowning-around-encounter.test.ts similarity index 89% rename from src/test/mystery-encounter/encounters/clowning-around-encounter.test.ts rename to test/mystery-encounter/encounters/clowning-around-encounter.test.ts index e7ea6eea0ea..799e26ea271 100644 --- a/src/test/mystery-encounter/encounters/clowning-around-encounter.test.ts +++ b/test/mystery-encounter/encounters/clowning-around-encounter.test.ts @@ -2,7 +2,7 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encount import { Biome } from "#app/enums/biome"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; import { Species } from "#app/enums/species"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import * as BattleAnims from "#app/data/battle-anims"; @@ -10,23 +10,25 @@ import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encount import { generateModifierType } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { runMysteryEncounterToEnd, skipBattleRunMysteryEncounterRewardsPhase } from "#test/mystery-encounter/encounter-test-utils"; import { Moves } from "#enums/moves"; -import BattleScene from "#app/battle-scene"; -import Pokemon, { PokemonMove } from "#app/field/pokemon"; +import type BattleScene from "#app/battle-scene"; +import type Pokemon from "#app/field/pokemon"; +import { PokemonMove } from "#app/field/pokemon"; import { Mode } from "#app/ui/ui"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; -import { initSceneWithoutEncounterPhase } from "#test/utils/gameManagerUtils"; +import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { ClowningAroundEncounter } from "#app/data/mystery-encounters/encounters/clowning-around-encounter"; import { TrainerType } from "#enums/trainer-type"; import { Abilities } from "#enums/abilities"; import { PostMysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; import { Button } from "#enums/buttons"; -import PartyUiHandler from "#app/ui/party-ui-handler"; -import OptionSelectUiHandler from "#app/ui/settings/option-select-ui-handler"; -import { modifierTypes, PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; +import type PartyUiHandler from "#app/ui/party-ui-handler"; +import type OptionSelectUiHandler from "#app/ui/settings/option-select-ui-handler"; +import type { PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/modifier/modifier-type"; import { BerryType } from "#enums/berry-type"; -import { PokemonHeldItemModifier } from "#app/modifier/modifier"; +import type { PokemonHeldItemModifier } from "#app/modifier/modifier"; import { Type } from "#enums/type"; import { CommandPhase } from "#app/phases/command-phase"; import { MovePhase } from "#app/phases/move-phase"; @@ -105,8 +107,8 @@ describe("Clowning Around - Mystery Encounter", () => { expect(ClowningAroundEncounter.onInit).toBeDefined(); - ClowningAroundEncounter.populateDialogueTokensFromRequirements(scene); - const onInitResult = onInit!(scene); + ClowningAroundEncounter.populateDialogueTokensFromRequirements(); + const onInitResult = onInit!(); const config = ClowningAroundEncounter.enemyPartyConfigs[0]; expect(config.doubleBattle).toBe(true); @@ -255,29 +257,29 @@ describe("Clowning Around - Mystery Encounter", () => { // 2 Sitrus Berries on lead scene.modifiers = []; - let itemType = generateModifierType(scene, modifierTypes.BERRY, [ BerryType.SITRUS ]) as PokemonHeldItemModifierType; + let itemType = generateModifierType(modifierTypes.BERRY, [ BerryType.SITRUS ]) as PokemonHeldItemModifierType; await addItemToPokemon(scene, scene.getPlayerParty()[0], 2, itemType); // 2 Ganlon Berries on lead - itemType = generateModifierType(scene, modifierTypes.BERRY, [ BerryType.GANLON ]) as PokemonHeldItemModifierType; + itemType = generateModifierType(modifierTypes.BERRY, [ BerryType.GANLON ]) as PokemonHeldItemModifierType; await addItemToPokemon(scene, scene.getPlayerParty()[0], 2, itemType); // 5 Golden Punch on lead (ultra) - itemType = generateModifierType(scene, modifierTypes.GOLDEN_PUNCH) as PokemonHeldItemModifierType; + itemType = generateModifierType(modifierTypes.GOLDEN_PUNCH) as PokemonHeldItemModifierType; await addItemToPokemon(scene, scene.getPlayerParty()[0], 5, itemType); // 5 Lucky Egg on lead (ultra) - itemType = generateModifierType(scene, modifierTypes.LUCKY_EGG) as PokemonHeldItemModifierType; + itemType = generateModifierType(modifierTypes.LUCKY_EGG) as PokemonHeldItemModifierType; await addItemToPokemon(scene, scene.getPlayerParty()[0], 5, itemType); // 3 Soothe Bell on lead (great tier, but counted as ultra by this ME) - itemType = generateModifierType(scene, modifierTypes.SOOTHE_BELL) as PokemonHeldItemModifierType; + itemType = generateModifierType(modifierTypes.SOOTHE_BELL) as PokemonHeldItemModifierType; await addItemToPokemon(scene, scene.getPlayerParty()[0], 3, itemType); // 5 Soul Dew on lead (rogue) - itemType = generateModifierType(scene, modifierTypes.SOUL_DEW) as PokemonHeldItemModifierType; + itemType = generateModifierType(modifierTypes.SOUL_DEW) as PokemonHeldItemModifierType; await addItemToPokemon(scene, scene.getPlayerParty()[0], 5, itemType); // 2 Golden Egg on lead (rogue) - itemType = generateModifierType(scene, modifierTypes.GOLDEN_EGG) as PokemonHeldItemModifierType; + itemType = generateModifierType(modifierTypes.GOLDEN_EGG) as PokemonHeldItemModifierType; await addItemToPokemon(scene, scene.getPlayerParty()[0], 2, itemType); // 5 Soul Dew on second party pokemon (these should not change) - itemType = generateModifierType(scene, modifierTypes.SOUL_DEW) as PokemonHeldItemModifierType; + itemType = generateModifierType(modifierTypes.SOUL_DEW) as PokemonHeldItemModifierType; await addItemToPokemon(scene, scene.getPlayerParty()[1], 5, itemType); await runMysteryEncounterToEnd(game, 2); @@ -343,9 +345,9 @@ describe("Clowning Around - Mystery Encounter", () => { scene.getPlayerParty()[2].moveset = []; await runMysteryEncounterToEnd(game, 3); - const leadTypesAfter = scene.getPlayerParty()[0].customPokemonData?.types; - const secondaryTypesAfter = scene.getPlayerParty()[1].customPokemonData?.types; - const thirdTypesAfter = scene.getPlayerParty()[2].customPokemonData?.types; + const leadTypesAfter = scene.getPlayerParty()[0].getTypes(); + const secondaryTypesAfter = scene.getPlayerParty()[1].getTypes(); + const thirdTypesAfter = scene.getPlayerParty()[2].getTypes(); expect(leadTypesAfter.length).toBe(2); expect(leadTypesAfter[0]).toBe(Type.WATER); @@ -370,9 +372,9 @@ describe("Clowning Around - Mystery Encounter", () => { }); }); -async function addItemToPokemon(scene: BattleScene, pokemon: Pokemon, stackCount: integer, itemType: PokemonHeldItemModifierType) { +async function addItemToPokemon(scene: BattleScene, pokemon: Pokemon, stackCount: number, itemType: PokemonHeldItemModifierType) { const itemMod = itemType.newModifier(pokemon) as PokemonHeldItemModifier; itemMod.stackCount = stackCount; - await scene.addModifier(itemMod, true, false, false, true); + scene.addModifier(itemMod, true, false, false, true); await scene.updateModifiers(true); } diff --git a/src/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts b/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts similarity index 97% rename from src/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts rename to test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts index 147930f05d1..46217cca5e2 100644 --- a/src/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts +++ b/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts @@ -1,11 +1,11 @@ import { Biome } from "#app/enums/biome"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; import { Species } from "#app/enums/species"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { runMysteryEncounterToEnd, runSelectMysteryEncounterOption, skipBattleRunMysteryEncounterRewardsPhase } from "#test/mystery-encounter/encounter-test-utils"; -import BattleScene from "#app/battle-scene"; +import type BattleScene from "#app/battle-scene"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; @@ -123,8 +123,6 @@ describe("Dancing Lessons - Mystery Encounter", () => { partyLead.level = 1000; partyLead.calculateStats(); await runMysteryEncounterToEnd(game, 1, undefined, true); - // For some reason updateModifiers breaks in this test and does not resolve promise - vi.spyOn(game.scene, "updateModifiers").mockImplementation(() => new Promise(resolve => resolve())); await skipBattleRunMysteryEncounterRewardsPhase(game); await game.phaseInterceptor.to(SelectModifierPhase, false); expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); diff --git a/src/test/mystery-encounter/encounters/delibirdy-encounter.test.ts b/test/mystery-encounter/encounters/delibirdy-encounter.test.ts similarity index 87% rename from src/test/mystery-encounter/encounters/delibirdy-encounter.test.ts rename to test/mystery-encounter/encounters/delibirdy-encounter.test.ts index c226d60a9b4..baea430fdaf 100644 --- a/src/test/mystery-encounter/encounters/delibirdy-encounter.test.ts +++ b/test/mystery-encounter/encounters/delibirdy-encounter.test.ts @@ -1,16 +1,16 @@ import { Biome } from "#app/enums/biome"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; import { Species } from "#app/enums/species"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { runMysteryEncounterToEnd, runSelectMysteryEncounterOption } from "#test/mystery-encounter/encounter-test-utils"; -import BattleScene from "#app/battle-scene"; +import type BattleScene from "#app/battle-scene"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { DelibirdyEncounter } from "#app/data/mystery-encounters/encounters/delibirdy-encounter"; import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; -import { MoneyRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements"; +import type { MoneyRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements"; import { BerryModifier, HealingBoosterModifier, HitHealModifier, LevelIncrementBoosterModifier, MoneyMultiplierModifier, PokemonInstantReviveModifier, PokemonNatureWeightModifier, PreserveBerryModifier } from "#app/modifier/modifier"; import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; import { generateModifierType } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; @@ -100,7 +100,7 @@ describe("Delibird-y - Mystery Encounter", () => { const price = (scene.currentBattle.mysteryEncounter?.options[0].requirements[0] as MoneyRequirement).requiredMoney; - expect(updateMoneySpy).toHaveBeenCalledWith(scene, -price, true, false); + expect(updateMoneySpy).toHaveBeenCalledWith(-price, true, false); expect(scene.money).toBe(initialMoney - price); }); @@ -121,9 +121,9 @@ describe("Delibird-y - Mystery Encounter", () => { // Max Amulet Coins scene.modifiers = []; - const amuletCoin = generateModifierType(scene, modifierTypes.AMULET_COIN)!.newModifier() as MoneyMultiplierModifier; + const amuletCoin = generateModifierType(modifierTypes.AMULET_COIN)!.newModifier() as MoneyMultiplierModifier; amuletCoin.stackCount = 5; - await scene.addModifier(amuletCoin, true, false, false, true); + scene.addModifier(amuletCoin, true, false, false, true); await scene.updateModifiers(true); await runMysteryEncounterToEnd(game, 1); @@ -190,10 +190,10 @@ describe("Delibird-y - Mystery Encounter", () => { // Set 2 Sitrus berries on party lead scene.modifiers = []; - const sitrus = generateModifierType(scene, modifierTypes.BERRY, [ BerryType.SITRUS ])!; + const sitrus = generateModifierType(modifierTypes.BERRY, [ BerryType.SITRUS ])!; const sitrusMod = sitrus.newModifier(scene.getPlayerParty()[0]) as BerryModifier; sitrusMod.stackCount = 2; - await scene.addModifier(sitrusMod, true, false, false, true); + scene.addModifier(sitrusMod, true, false, false, true); await scene.updateModifiers(true); await runMysteryEncounterToEnd(game, 2, { pokemonNo: 1, optionNo: 1 }); @@ -211,10 +211,10 @@ describe("Delibird-y - Mystery Encounter", () => { // Set 1 Reviver Seed on party lead scene.modifiers = []; - const revSeed = generateModifierType(scene, modifierTypes.REVIVER_SEED)!; + const revSeed = generateModifierType(modifierTypes.REVIVER_SEED)!; const modifier = revSeed.newModifier(scene.getPlayerParty()[0]) as PokemonInstantReviveModifier; modifier.stackCount = 1; - await scene.addModifier(modifier, true, false, false, true); + scene.addModifier(modifier, true, false, false, true); await scene.updateModifiers(true); await runMysteryEncounterToEnd(game, 2, { pokemonNo: 1, optionNo: 1 }); @@ -232,15 +232,15 @@ describe("Delibird-y - Mystery Encounter", () => { // 99 Candy Jars scene.modifiers = []; - const candyJar = generateModifierType(scene, modifierTypes.CANDY_JAR)!.newModifier() as LevelIncrementBoosterModifier; + const candyJar = generateModifierType(modifierTypes.CANDY_JAR)!.newModifier() as LevelIncrementBoosterModifier; candyJar.stackCount = 99; - await scene.addModifier(candyJar, true, false, false, true); - const sitrus = generateModifierType(scene, modifierTypes.BERRY, [ BerryType.SITRUS ])!; + scene.addModifier(candyJar, true, false, false, true); + const sitrus = generateModifierType(modifierTypes.BERRY, [ BerryType.SITRUS ])!; // Sitrus berries on party const sitrusMod = sitrus.newModifier(scene.getPlayerParty()[0]) as BerryModifier; sitrusMod.stackCount = 2; - await scene.addModifier(sitrusMod, true, false, false, true); + scene.addModifier(sitrusMod, true, false, false, true); await scene.updateModifiers(true); await runMysteryEncounterToEnd(game, 2, { pokemonNo: 1, optionNo: 1 }); @@ -261,15 +261,15 @@ describe("Delibird-y - Mystery Encounter", () => { // 3 Berry Pouches scene.modifiers = []; - const healingCharm = generateModifierType(scene, modifierTypes.BERRY_POUCH)!.newModifier() as PreserveBerryModifier; + const healingCharm = generateModifierType(modifierTypes.BERRY_POUCH)!.newModifier() as PreserveBerryModifier; healingCharm.stackCount = 3; - await scene.addModifier(healingCharm, true, false, false, true); + scene.addModifier(healingCharm, true, false, false, true); // Set 1 Reviver Seed on party lead - const revSeed = generateModifierType(scene, modifierTypes.REVIVER_SEED)!; + const revSeed = generateModifierType(modifierTypes.REVIVER_SEED)!; const modifier = revSeed.newModifier(scene.getPlayerParty()[0]) as PokemonInstantReviveModifier; modifier.stackCount = 1; - await scene.addModifier(modifier, true, false, false, true); + scene.addModifier(modifier, true, false, false, true); await scene.updateModifiers(true); await runMysteryEncounterToEnd(game, 2, { pokemonNo: 1, optionNo: 1 }); @@ -290,9 +290,9 @@ describe("Delibird-y - Mystery Encounter", () => { // Set 1 Soul Dew on party lead scene.modifiers = []; - const soulDew = generateModifierType(scene, modifierTypes.SOUL_DEW)!; + const soulDew = generateModifierType(modifierTypes.SOUL_DEW)!; const modifier = soulDew.newModifier(scene.getPlayerParty()[0]); - await scene.addModifier(modifier, true, false, false, true); + scene.addModifier(modifier, true, false, false, true); await scene.updateModifiers(true); await game.phaseInterceptor.to(MysteryEncounterPhase, false); @@ -318,10 +318,10 @@ describe("Delibird-y - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.DELIBIRDY, defaultParty); // Set 1 Reviver Seed on party lead - const revSeed = generateModifierType(scene, modifierTypes.REVIVER_SEED)!; + const revSeed = generateModifierType(modifierTypes.REVIVER_SEED)!; const modifier = revSeed.newModifier(scene.getPlayerParty()[0]) as PokemonInstantReviveModifier; modifier.stackCount = 1; - await scene.addModifier(modifier, true, false, false, true); + scene.addModifier(modifier, true, false, false, true); await scene.updateModifiers(true); await runMysteryEncounterToEnd(game, 2, { pokemonNo: 1, optionNo: 1 }); @@ -352,10 +352,10 @@ describe("Delibird-y - Mystery Encounter", () => { // Set 2 Soul Dew on party lead scene.modifiers = []; - const soulDew = generateModifierType(scene, modifierTypes.SOUL_DEW)!; + const soulDew = generateModifierType(modifierTypes.SOUL_DEW)!; const modifier = soulDew.newModifier(scene.getPlayerParty()[0]) as PokemonNatureWeightModifier; modifier.stackCount = 2; - await scene.addModifier(modifier, true, false, false, true); + scene.addModifier(modifier, true, false, false, true); await scene.updateModifiers(true); await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1 }); @@ -373,10 +373,10 @@ describe("Delibird-y - Mystery Encounter", () => { // Set 1 Soul Dew on party lead scene.modifiers = []; - const soulDew = generateModifierType(scene, modifierTypes.SOUL_DEW)!; + const soulDew = generateModifierType(modifierTypes.SOUL_DEW)!; const modifier = soulDew.newModifier(scene.getPlayerParty()[0]) as PokemonNatureWeightModifier; modifier.stackCount = 1; - await scene.addModifier(modifier, true, false, false, true); + scene.addModifier(modifier, true, false, false, true); await scene.updateModifiers(true); await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1 }); @@ -394,15 +394,15 @@ describe("Delibird-y - Mystery Encounter", () => { // 5 Healing Charms scene.modifiers = []; - const healingCharm = generateModifierType(scene, modifierTypes.HEALING_CHARM)!.newModifier() as HealingBoosterModifier; + const healingCharm = generateModifierType(modifierTypes.HEALING_CHARM)!.newModifier() as HealingBoosterModifier; healingCharm.stackCount = 5; - await scene.addModifier(healingCharm, true, false, false, true); + scene.addModifier(healingCharm, true, false, false, true); // Set 1 Soul Dew on party lead - const soulDew = generateModifierType(scene, modifierTypes.SOUL_DEW)!; + const soulDew = generateModifierType(modifierTypes.SOUL_DEW)!; const modifier = soulDew.newModifier(scene.getPlayerParty()[0]) as PokemonNatureWeightModifier; modifier.stackCount = 1; - await scene.addModifier(modifier, true, false, false, true); + scene.addModifier(modifier, true, false, false, true); await scene.updateModifiers(true); await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1 }); @@ -423,9 +423,9 @@ describe("Delibird-y - Mystery Encounter", () => { // Set 1 Reviver Seed on party lead scene.modifiers = []; - const revSeed = generateModifierType(scene, modifierTypes.REVIVER_SEED)!; + const revSeed = generateModifierType(modifierTypes.REVIVER_SEED)!; const modifier = revSeed.newModifier(scene.getPlayerParty()[0]); - await scene.addModifier(modifier, true, false, false, true); + scene.addModifier(modifier, true, false, false, true); await scene.updateModifiers(true); await game.phaseInterceptor.to(MysteryEncounterPhase, false); @@ -452,10 +452,10 @@ describe("Delibird-y - Mystery Encounter", () => { // Set 1 Soul Dew on party lead scene.modifiers = []; - const soulDew = generateModifierType(scene, modifierTypes.SOUL_DEW)!; + const soulDew = generateModifierType(modifierTypes.SOUL_DEW)!; const modifier = soulDew.newModifier(scene.getPlayerParty()[0]) as PokemonNatureWeightModifier; modifier.stackCount = 1; - await scene.addModifier(modifier, true, false, false, true); + scene.addModifier(modifier, true, false, false, true); await scene.updateModifiers(true); await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1 }); diff --git a/src/test/mystery-encounter/encounters/department-store-sale-encounter.test.ts b/test/mystery-encounter/encounters/department-store-sale-encounter.test.ts similarity index 98% rename from src/test/mystery-encounter/encounters/department-store-sale-encounter.test.ts rename to test/mystery-encounter/encounters/department-store-sale-encounter.test.ts index 1869a4d3c3c..224a4403942 100644 --- a/src/test/mystery-encounter/encounters/department-store-sale-encounter.test.ts +++ b/test/mystery-encounter/encounters/department-store-sale-encounter.test.ts @@ -2,11 +2,11 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encount import { Biome } from "#app/enums/biome"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; import { Species } from "#app/enums/species"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { runMysteryEncounterToEnd } from "#test/mystery-encounter/encounter-test-utils"; -import BattleScene from "#app/battle-scene"; +import type BattleScene from "#app/battle-scene"; import { Mode } from "#app/ui/ui"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { DepartmentStoreSaleEncounter } from "#app/data/mystery-encounters/encounters/department-store-sale-encounter"; diff --git a/src/test/mystery-encounter/encounters/field-trip-encounter.test.ts b/test/mystery-encounter/encounters/field-trip-encounter.test.ts similarity index 99% rename from src/test/mystery-encounter/encounters/field-trip-encounter.test.ts rename to test/mystery-encounter/encounters/field-trip-encounter.test.ts index a6f925274c3..b831a52f116 100644 --- a/src/test/mystery-encounter/encounters/field-trip-encounter.test.ts +++ b/test/mystery-encounter/encounters/field-trip-encounter.test.ts @@ -1,11 +1,11 @@ import { Biome } from "#app/enums/biome"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; import { Species } from "#app/enums/species"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { runMysteryEncounterToEnd } from "#test/mystery-encounter/encounter-test-utils"; -import BattleScene from "#app/battle-scene"; +import type BattleScene from "#app/battle-scene"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; diff --git a/src/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts b/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts similarity index 98% rename from src/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts rename to test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts index 215cab5c65a..96fac78d872 100644 --- a/src/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts +++ b/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts @@ -2,7 +2,7 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encount import { Biome } from "#enums/biome"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { FieryFalloutEncounter } from "#app/data/mystery-encounters/encounters/fiery-fallout-encounter"; import { Gender } from "#app/data/gender"; @@ -11,14 +11,14 @@ import * as BattleAnims from "#app/data/battle-anims"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { runMysteryEncounterToEnd, runSelectMysteryEncounterOption, skipBattleRunMysteryEncounterRewardsPhase } from "#test/mystery-encounter/encounter-test-utils"; import { Moves } from "#enums/moves"; -import BattleScene from "#app/battle-scene"; +import type BattleScene from "#app/battle-scene"; import { AttackTypeBoosterModifier, PokemonHeldItemModifier } from "#app/modifier/modifier"; import { Type } from "#enums/type"; import { Status } from "#app/data/status-effect"; import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; -import { initSceneWithoutEncounterPhase } from "#test/utils/gameManagerUtils"; +import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; import { CommandPhase } from "#app/phases/command-phase"; import { MovePhase } from "#app/phases/move-phase"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; @@ -104,8 +104,8 @@ describe("Fiery Fallout - Mystery Encounter", () => { expect(FieryFalloutEncounter.onInit).toBeDefined(); - FieryFalloutEncounter.populateDialogueTokensFromRequirements(scene); - const onInitResult = onInit!(scene); + FieryFalloutEncounter.populateDialogueTokensFromRequirements(); + const onInitResult = onInit!(); expect(FieryFalloutEncounter.enemyPartyConfigs).toEqual([ { diff --git a/src/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts b/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts similarity index 97% rename from src/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts rename to test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts index a5098f682eb..116c45c1faf 100644 --- a/src/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts +++ b/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts @@ -2,17 +2,17 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encount import { Biome } from "#app/enums/biome"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; import { Species } from "#app/enums/species"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { runMysteryEncounterToEnd, runSelectMysteryEncounterOption, skipBattleRunMysteryEncounterRewardsPhase } from "#test/mystery-encounter/encounter-test-utils"; import { Moves } from "#enums/moves"; -import BattleScene from "#app/battle-scene"; +import type BattleScene from "#app/battle-scene"; import { PokemonMove } from "#app/field/pokemon"; import { Mode } from "#app/ui/ui"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; -import { initSceneWithoutEncounterPhase } from "#test/utils/gameManagerUtils"; +import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { FightOrFlightEncounter } from "#app/data/mystery-encounters/encounters/fight-or-flight-encounter"; import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; @@ -75,8 +75,8 @@ describe("Fight or Flight - Mystery Encounter", () => { expect(FightOrFlightEncounter.onInit).toBeDefined(); - FightOrFlightEncounter.populateDialogueTokensFromRequirements(scene); - const onInitResult = onInit!(scene); + FightOrFlightEncounter.populateDialogueTokensFromRequirements(); + const onInitResult = onInit!(); const config = FightOrFlightEncounter.enemyPartyConfigs[0]; expect(config).toBeDefined(); diff --git a/src/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts b/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts similarity index 98% rename from src/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts rename to test/mystery-encounter/encounters/fun-and-games-encounter.test.ts index 2f4f6bed288..de351e48c76 100644 --- a/src/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts +++ b/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts @@ -3,14 +3,14 @@ import { HUMAN_TRANSITABLE_BIOMES } from "#app/data/mystery-encounters/mystery-e import { Biome } from "#app/enums/biome"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; import { Species } from "#app/enums/species"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { runMysteryEncounterToEnd, runSelectMysteryEncounterOption } from "#test/mystery-encounter/encounter-test-utils"; -import BattleScene from "#app/battle-scene"; +import type BattleScene from "#app/battle-scene"; import { Mode } from "#app/ui/ui"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; -import { initSceneWithoutEncounterPhase } from "#test/utils/gameManagerUtils"; +import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import { Nature } from "#enums/nature"; @@ -95,7 +95,7 @@ describe("Fun And Games! - Mystery Encounter", () => { expect(encounter.onInit).toBeDefined(); - const onInitResult = onInit!(scene); + const onInitResult = onInit!(); expect(onInitResult).toBe(true); }); diff --git a/src/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts b/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts similarity index 97% rename from src/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts rename to test/mystery-encounter/encounters/global-trade-system-encounter.test.ts index 2c226df3c8c..f898b1f574f 100644 --- a/src/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts +++ b/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts @@ -1,11 +1,11 @@ import { Biome } from "#app/enums/biome"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; import { Species } from "#app/enums/species"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { runMysteryEncounterToEnd } from "#test/mystery-encounter/encounter-test-utils"; -import BattleScene from "#app/battle-scene"; +import type BattleScene from "#app/battle-scene"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; @@ -221,10 +221,10 @@ describe("Global Trade System - Mystery Encounter", () => { // Set 2 Soul Dew on party lead scene.modifiers = []; - const soulDew = generateModifierType(scene, modifierTypes.SOUL_DEW)!; + const soulDew = generateModifierType(modifierTypes.SOUL_DEW)!; const modifier = soulDew.newModifier(scene.getPlayerParty()[0]) as PokemonNatureWeightModifier; modifier.stackCount = 2; - await scene.addModifier(modifier, true, false, false, true); + scene.addModifier(modifier, true, false, false, true); await scene.updateModifiers(true); await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1 }); @@ -246,10 +246,10 @@ describe("Global Trade System - Mystery Encounter", () => { // Set 1 Soul Dew on party lead scene.modifiers = []; - const soulDew = generateModifierType(scene, modifierTypes.SOUL_DEW)!; + const soulDew = generateModifierType(modifierTypes.SOUL_DEW)!; const modifier = soulDew.newModifier(scene.getPlayerParty()[0]) as PokemonNatureWeightModifier; modifier.stackCount = 1; - await scene.addModifier(modifier, true, false, false, true); + scene.addModifier(modifier, true, false, false, true); await scene.updateModifiers(true); await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1 }); diff --git a/src/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts b/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts similarity index 97% rename from src/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts rename to test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts index 51f759c9268..09ecbc6c31a 100644 --- a/src/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts +++ b/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts @@ -5,13 +5,13 @@ import { getPokemonSpecies } from "#app/data/pokemon-species"; import { Biome } from "#app/enums/biome"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; import { Species } from "#app/enums/species"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { runMysteryEncounterToEnd, runSelectMysteryEncounterOption } from "../encounter-test-utils"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; -import { initSceneWithoutEncounterPhase } from "#test/utils/gameManagerUtils"; -import BattleScene from "#app/battle-scene"; +import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; +import type BattleScene from "#app/battle-scene"; import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; import { PartyExpPhase } from "#app/phases/party-exp-phase"; import i18next from "i18next"; @@ -83,8 +83,8 @@ describe("Lost at Sea - Mystery Encounter", () => { expect(LostAtSeaEncounter.onInit).toBeDefined(); - LostAtSeaEncounter.populateDialogueTokensFromRequirements(scene); - const onInitResult = onInit!(scene); + LostAtSeaEncounter.populateDialogueTokensFromRequirements(); + const onInitResult = onInit!(); expect(LostAtSeaEncounter.dialogueTokens?.damagePercentage).toBe("25"); expect(LostAtSeaEncounter.dialogueTokens?.option1RequiredMove).toBe(i18next.t("move:surf.name")); diff --git a/src/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts b/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts similarity index 97% rename from src/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts rename to test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts index 7bbc505dd8e..e42cd321cde 100644 --- a/src/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts +++ b/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts @@ -3,14 +3,14 @@ import { HUMAN_TRANSITABLE_BIOMES } from "#app/data/mystery-encounters/mystery-e import { Biome } from "#app/enums/biome"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; import { Species } from "#app/enums/species"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { runMysteryEncounterToEnd, skipBattleRunMysteryEncounterRewardsPhase } from "#test/mystery-encounter/encounter-test-utils"; -import BattleScene from "#app/battle-scene"; +import type BattleScene from "#app/battle-scene"; import { Mode } from "#app/ui/ui"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; -import { initSceneWithoutEncounterPhase } from "#test/utils/gameManagerUtils"; +import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { MysteriousChallengersEncounter } from "#app/data/mystery-encounters/encounters/mysterious-challengers-encounter"; import { TrainerConfig, TrainerPartyCompoundTemplate, TrainerPartyTemplate } from "#app/data/trainer-config"; @@ -89,8 +89,8 @@ describe("Mysterious Challengers - Mystery Encounter", () => { expect(encounter.onInit).toBeDefined(); - encounter.populateDialogueTokensFromRequirements(scene); - const onInitResult = onInit!(scene); + encounter.populateDialogueTokensFromRequirements(); + const onInitResult = onInit!(); expect(encounter.enemyPartyConfigs).toBeDefined(); expect(encounter.enemyPartyConfigs.length).toBe(3); diff --git a/src/test/mystery-encounter/encounters/part-timer-encounter.test.ts b/test/mystery-encounter/encounters/part-timer-encounter.test.ts similarity index 96% rename from src/test/mystery-encounter/encounters/part-timer-encounter.test.ts rename to test/mystery-encounter/encounters/part-timer-encounter.test.ts index e063a4f3349..0cd7bc9bc76 100644 --- a/src/test/mystery-encounter/encounters/part-timer-encounter.test.ts +++ b/test/mystery-encounter/encounters/part-timer-encounter.test.ts @@ -2,11 +2,11 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encount import { Biome } from "#app/enums/biome"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; import { Species } from "#app/enums/species"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { runMysteryEncounterToEnd, runSelectMysteryEncounterOption } from "#test/mystery-encounter/encounter-test-utils"; -import BattleScene from "#app/battle-scene"; +import type BattleScene from "#app/battle-scene"; import { CIVILIZATION_ENCOUNTER_BIOMES } from "#app/data/mystery-encounters/mystery-encounters"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; @@ -107,7 +107,7 @@ describe("Part-Timer - Mystery Encounter", () => { }); await runMysteryEncounterToEnd(game, 1, { pokemonNo: 1 }); - expect(EncounterPhaseUtils.updatePlayerMoney).toHaveBeenCalledWith(scene, scene.getWaveMoneyAmount(1), true, false); + expect(EncounterPhaseUtils.updatePlayerMoney).toHaveBeenCalledWith(scene.getWaveMoneyAmount(1), true, false); // Expect PP of mon's moves to have been reduced to 2 const moves = scene.getPlayerParty()[0].moveset; for (const move of moves) { @@ -127,7 +127,7 @@ describe("Part-Timer - Mystery Encounter", () => { }); await runMysteryEncounterToEnd(game, 1, { pokemonNo: 2 }); - expect(EncounterPhaseUtils.updatePlayerMoney).toHaveBeenCalledWith(scene, scene.getWaveMoneyAmount(4), true, false); + expect(EncounterPhaseUtils.updatePlayerMoney).toHaveBeenCalledWith(scene.getWaveMoneyAmount(4), true, false); // Expect PP of mon's moves to have been reduced to 2 const moves = scene.getPlayerParty()[1].moveset; for (const move of moves) { @@ -172,7 +172,7 @@ describe("Part-Timer - Mystery Encounter", () => { }); await runMysteryEncounterToEnd(game, 2, { pokemonNo: 3 }); - expect(EncounterPhaseUtils.updatePlayerMoney).toHaveBeenCalledWith(scene, scene.getWaveMoneyAmount(1), true, false); + expect(EncounterPhaseUtils.updatePlayerMoney).toHaveBeenCalledWith(scene.getWaveMoneyAmount(1), true, false); // Expect PP of mon's moves to have been reduced to 2 const moves = scene.getPlayerParty()[2].moveset; for (const move of moves) { @@ -192,7 +192,7 @@ describe("Part-Timer - Mystery Encounter", () => { }); await runMysteryEncounterToEnd(game, 2, { pokemonNo: 4 }); - expect(EncounterPhaseUtils.updatePlayerMoney).toHaveBeenCalledWith(scene, scene.getWaveMoneyAmount(4), true, false); + expect(EncounterPhaseUtils.updatePlayerMoney).toHaveBeenCalledWith(scene.getWaveMoneyAmount(4), true, false); // Expect PP of mon's moves to have been reduced to 2 const moves = scene.getPlayerParty()[3].moveset; for (const move of moves) { @@ -259,7 +259,7 @@ describe("Part-Timer - Mystery Encounter", () => { scene.getPlayerParty()[0].moveset = [ new PokemonMove(Moves.ATTRACT) ]; await runMysteryEncounterToEnd(game, 3); - expect(EncounterPhaseUtils.updatePlayerMoney).toHaveBeenCalledWith(scene, scene.getWaveMoneyAmount(2.5), true, false); + expect(EncounterPhaseUtils.updatePlayerMoney).toHaveBeenCalledWith(scene.getWaveMoneyAmount(2.5), true, false); // Expect PP of mon's moves to have been reduced to 2 const moves = scene.getPlayerParty()[0].moveset; for (const move of moves) { diff --git a/src/test/mystery-encounter/encounters/safari-zone.test.ts b/test/mystery-encounter/encounters/safari-zone.test.ts similarity index 96% rename from src/test/mystery-encounter/encounters/safari-zone.test.ts rename to test/mystery-encounter/encounters/safari-zone.test.ts index 5699afe254f..068e28547f4 100644 --- a/src/test/mystery-encounter/encounters/safari-zone.test.ts +++ b/test/mystery-encounter/encounters/safari-zone.test.ts @@ -2,13 +2,13 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encount import { Biome } from "#enums/biome"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { runMysteryEncounterToEnd, runSelectMysteryEncounterOption } from "#test/mystery-encounter/encounter-test-utils"; -import BattleScene from "#app/battle-scene"; +import type BattleScene from "#app/battle-scene"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; -import { initSceneWithoutEncounterPhase } from "#test/utils/gameManagerUtils"; +import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; import MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; import { getSafariSpeciesSpawn, SafariZoneEncounter } from "#app/data/mystery-encounters/encounters/safari-zone-encounter"; @@ -85,8 +85,8 @@ describe("Safari Zone - Mystery Encounter", () => { expect(encounter.onInit).toBeDefined(); - encounter.populateDialogueTokensFromRequirements(scene); - const onInitResult = onInit!(scene); + encounter.populateDialogueTokensFromRequirements(); + const onInitResult = onInit!(); expect(onInitResult).toBe(true); }); diff --git a/src/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts b/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts similarity index 98% rename from src/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts rename to test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts index 02375d83b98..c7fcc1e967f 100644 --- a/src/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts +++ b/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts @@ -1,4 +1,4 @@ -import BattleScene from "#app/battle-scene"; +import type BattleScene from "#app/battle-scene"; import { TeleportingHijinksEncounter } from "#app/data/mystery-encounters/encounters/teleporting-hijinks-encounter"; import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; import { Abilities } from "#enums/abilities"; @@ -8,13 +8,13 @@ import { Species } from "#enums/species"; import { CommandPhase } from "#app/phases/command-phase"; import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { Mode } from "#app/ui/ui"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { runMysteryEncounterToEnd, runSelectMysteryEncounterOption, skipBattleRunMysteryEncounterRewardsPhase } from "#test/mystery-encounter/encounter-test-utils"; -import { initSceneWithoutEncounterPhase } from "#test/utils/gameManagerUtils"; +import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; import i18next from "i18next"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -115,8 +115,8 @@ describe("Teleporting Hijinks - Mystery Encounter", () => { expect(TeleportingHijinksEncounter.onInit).toBeDefined(); - TeleportingHijinksEncounter.populateDialogueTokensFromRequirements(scene); - const onInitResult = onInit!(scene); + TeleportingHijinksEncounter.populateDialogueTokensFromRequirements(); + const onInitResult = onInit!(); expect(TeleportingHijinksEncounter.misc.price).toBeDefined(); expect(TeleportingHijinksEncounter.dialogueTokens.price).toBeDefined(); diff --git a/src/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts b/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts similarity index 98% rename from src/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts rename to test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts index 87ccff71e22..7b10adc9680 100644 --- a/src/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts @@ -3,13 +3,13 @@ import { HUMAN_TRANSITABLE_BIOMES } from "#app/data/mystery-encounters/mystery-e import { Biome } from "#app/enums/biome"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; import { Species } from "#app/enums/species"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { runMysteryEncounterToEnd, skipBattleRunMysteryEncounterRewardsPhase } from "#test/mystery-encounter/encounter-test-utils"; -import BattleScene from "#app/battle-scene"; +import type BattleScene from "#app/battle-scene"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; -import { initSceneWithoutEncounterPhase } from "#test/utils/gameManagerUtils"; +import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; import MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import { CommandPhase } from "#app/phases/command-phase"; @@ -96,8 +96,8 @@ describe("The Expert Pokémon Breeder - Mystery Encounter", () => { expect(encounter.onInit).toBeDefined(); - encounter.populateDialogueTokensFromRequirements(scene); - const onInitResult = onInit!(scene); + encounter.populateDialogueTokensFromRequirements(); + const onInitResult = onInit!(); expect(encounter.enemyPartyConfigs).toBeDefined(); expect(encounter.enemyPartyConfigs.length).toBe(1); diff --git a/src/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts b/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts similarity index 96% rename from src/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts rename to test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts index e90bc4efe56..3a3d94dbc44 100644 --- a/src/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts @@ -2,17 +2,17 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encount import { Biome } from "#app/enums/biome"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; import { Species } from "#app/enums/species"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { runMysteryEncounterToEnd, runSelectMysteryEncounterOption } from "#test/mystery-encounter/encounter-test-utils"; -import BattleScene from "#app/battle-scene"; +import type BattleScene from "#app/battle-scene"; import { PlayerPokemon } from "#app/field/pokemon"; import { HUMAN_TRANSITABLE_BIOMES } from "#app/data/mystery-encounters/mystery-encounters"; import { getSalesmanSpeciesOffer, ThePokemonSalesmanEncounter } from "#app/data/mystery-encounters/encounters/the-pokemon-salesman-encounter"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; -import { initSceneWithoutEncounterPhase } from "#test/utils/gameManagerUtils"; +import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; import { NON_LEGEND_PARADOX_POKEMON } from "#app/data/balance/special-species-groups"; @@ -88,8 +88,8 @@ describe("The Pokemon Salesman - Mystery Encounter", () => { expect(ThePokemonSalesmanEncounter.onInit).toBeDefined(); - ThePokemonSalesmanEncounter.populateDialogueTokensFromRequirements(scene); - const onInitResult = onInit!(scene); + ThePokemonSalesmanEncounter.populateDialogueTokensFromRequirements(); + const onInitResult = onInit!(); expect(ThePokemonSalesmanEncounter.dialogueTokens?.purchasePokemon).toBeDefined(); expect(ThePokemonSalesmanEncounter.dialogueTokens?.price).toBeDefined(); @@ -133,7 +133,7 @@ describe("The Pokemon Salesman - Mystery Encounter", () => { const price = scene.currentBattle.mysteryEncounter!.misc.price; - expect(updateMoneySpy).toHaveBeenCalledWith(scene, -price, true, false); + expect(updateMoneySpy).toHaveBeenCalledWith(-price, true, false); expect(scene.money).toBe(initialMoney - price); }); diff --git a/src/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts b/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts similarity index 97% rename from src/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts rename to test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts index 5c965b13bd4..1a075ffaff2 100644 --- a/src/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts @@ -2,14 +2,14 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encount import { Biome } from "#enums/biome"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import * as BattleAnims from "#app/data/battle-anims"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { runMysteryEncounterToEnd, skipBattleRunMysteryEncounterRewardsPhase } from "#test/mystery-encounter/encounter-test-utils"; import { Moves } from "#enums/moves"; -import BattleScene from "#app/battle-scene"; +import type BattleScene from "#app/battle-scene"; import { TheStrongStuffEncounter } from "#app/data/mystery-encounters/encounters/the-strong-stuff-encounter"; import { Nature } from "#enums/nature"; import { BerryType } from "#enums/berry-type"; @@ -20,7 +20,7 @@ import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { BerryModifier, PokemonBaseStatTotalModifier } from "#app/modifier/modifier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; -import { initSceneWithoutEncounterPhase } from "#test/utils/gameManagerUtils"; +import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; import { CustomPokemonData } from "#app/data/custom-pokemon-data"; import { CommandPhase } from "#app/phases/command-phase"; import { MovePhase } from "#app/phases/move-phase"; @@ -97,8 +97,8 @@ describe("The Strong Stuff - Mystery Encounter", () => { expect(TheStrongStuffEncounter.onInit).toBeDefined(); - TheStrongStuffEncounter.populateDialogueTokensFromRequirements(scene); - const onInitResult = onInit!(scene); + TheStrongStuffEncounter.populateDialogueTokensFromRequirements(); + const onInitResult = onInit!(); expect(TheStrongStuffEncounter.enemyPartyConfigs).toEqual([ { diff --git a/src/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts b/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts similarity index 97% rename from src/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts rename to test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts index 701a3c94add..85dbb4e23ff 100644 --- a/src/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts @@ -3,14 +3,14 @@ import { HUMAN_TRANSITABLE_BIOMES } from "#app/data/mystery-encounters/mystery-e import { Biome } from "#enums/biome"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { runMysteryEncounterToEnd } from "#test/mystery-encounter/encounter-test-utils"; -import BattleScene from "#app/battle-scene"; +import type BattleScene from "#app/battle-scene"; import { Mode } from "#app/ui/ui"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; -import { initSceneWithoutEncounterPhase } from "#test/utils/gameManagerUtils"; +import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; @@ -101,8 +101,8 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { expect(encounter.onInit).toBeDefined(); - encounter.populateDialogueTokensFromRequirements(scene); - const onInitResult = onInit!(scene); + encounter.populateDialogueTokensFromRequirements(); + const onInitResult = onInit!(); expect(encounter.enemyPartyConfigs).toBeDefined(); expect(encounter.enemyPartyConfigs.length).toBe(5); @@ -363,7 +363,7 @@ async function skipBattleToNextBattle(game: GameManager, isFinalBattle: boolean game.scene.field.remove(p); }); game.phaseInterceptor["onHold"] = []; - game.scene.pushPhase(new VictoryPhase(game.scene, 0)); + game.scene.pushPhase(new VictoryPhase(0)); game.phaseInterceptor.superEndPhase(); if (isFinalBattle) { await game.phaseInterceptor.to(MysteryEncounterRewardsPhase); diff --git a/src/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts b/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts similarity index 97% rename from src/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts rename to test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts index f8d96487092..90a13c75dc3 100644 --- a/src/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts +++ b/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts @@ -2,21 +2,21 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encount import { Biome } from "#app/enums/biome"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; import { Species } from "#app/enums/species"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import * as BattleAnims from "#app/data/battle-anims"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { runMysteryEncounterToEnd, skipBattleRunMysteryEncounterRewardsPhase } from "#test/mystery-encounter/encounter-test-utils"; import { Moves } from "#enums/moves"; -import BattleScene from "#app/battle-scene"; +import type BattleScene from "#app/battle-scene"; import { PokemonMove } from "#app/field/pokemon"; import { Mode } from "#app/ui/ui"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { HitHealModifier, HealShopCostModifier, TurnHealModifier } from "#app/modifier/modifier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; -import { initSceneWithoutEncounterPhase } from "#test/utils/gameManagerUtils"; +import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; import { TrashToTreasureEncounter } from "#app/data/mystery-encounters/encounters/trash-to-treasure-encounter"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; @@ -81,8 +81,8 @@ describe("Trash to Treasure - Mystery Encounter", () => { expect(TrashToTreasureEncounter.onInit).toBeDefined(); - TrashToTreasureEncounter.populateDialogueTokensFromRequirements(scene); - const onInitResult = onInit!(scene); + TrashToTreasureEncounter.populateDialogueTokensFromRequirements(); + const onInitResult = onInit!(); expect(TrashToTreasureEncounter.enemyPartyConfigs).toEqual([ { diff --git a/src/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts b/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts similarity index 95% rename from src/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts rename to test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts index c811bda673d..ab50666ab3d 100644 --- a/src/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts +++ b/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts @@ -2,15 +2,15 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encount import { Biome } from "#app/enums/biome"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; import { Species } from "#app/enums/species"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { runMysteryEncounterToEnd, runSelectMysteryEncounterOption } from "#test/mystery-encounter/encounter-test-utils"; import { Moves } from "#enums/moves"; -import BattleScene from "#app/battle-scene"; +import type BattleScene from "#app/battle-scene"; import { PokemonMove } from "#app/field/pokemon"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; -import { initSceneWithoutEncounterPhase } from "#test/utils/gameManagerUtils"; +import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { generateModifierType } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; @@ -22,7 +22,7 @@ import { getPokemonSpecies } from "#app/data/pokemon-species"; import { BerryType } from "#enums/berry-type"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { Stat } from "#enums/stat"; -import { BerryModifier } from "#app/modifier/modifier"; +import type { BerryModifier } from "#app/modifier/modifier"; import { modifierTypes } from "#app/modifier/modifier-type"; import { Abilities } from "#enums/abilities"; @@ -85,8 +85,8 @@ describe("Uncommon Breed - Mystery Encounter", () => { expect(UncommonBreedEncounter.onInit).toBeDefined(); - UncommonBreedEncounter.populateDialogueTokensFromRequirements(scene); - const onInitResult = onInit!(scene); + UncommonBreedEncounter.populateDialogueTokensFromRequirements(); + const onInitResult = onInit!(); const config = UncommonBreedEncounter.enemyPartyConfigs[0]; expect(config).toBeDefined(); @@ -213,14 +213,14 @@ describe("Uncommon Breed - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.UNCOMMON_BREED, defaultParty); // Berries on party lead - const sitrus = generateModifierType(scene, modifierTypes.BERRY, [ BerryType.SITRUS ])!; + const sitrus = generateModifierType(modifierTypes.BERRY, [ BerryType.SITRUS ])!; const sitrusMod = sitrus.newModifier(scene.getPlayerParty()[0]) as BerryModifier; sitrusMod.stackCount = 2; - await scene.addModifier(sitrusMod, true, false, false, true); - const ganlon = generateModifierType(scene, modifierTypes.BERRY, [ BerryType.GANLON ])!; + scene.addModifier(sitrusMod, true, false, false, true); + const ganlon = generateModifierType(modifierTypes.BERRY, [ BerryType.GANLON ])!; const ganlonMod = ganlon.newModifier(scene.getPlayerParty()[0]) as BerryModifier; ganlonMod.stackCount = 3; - await scene.addModifier(ganlonMod, true, false, false, true); + scene.addModifier(ganlonMod, true, false, false, true); await scene.updateModifiers(true); await runMysteryEncounterToEnd(game, 2); diff --git a/src/test/mystery-encounter/encounters/weird-dream-encounter.test.ts b/test/mystery-encounter/encounters/weird-dream-encounter.test.ts similarity index 97% rename from src/test/mystery-encounter/encounters/weird-dream-encounter.test.ts rename to test/mystery-encounter/encounters/weird-dream-encounter.test.ts index ec9cf1509b1..073893f340d 100644 --- a/src/test/mystery-encounter/encounters/weird-dream-encounter.test.ts +++ b/test/mystery-encounter/encounters/weird-dream-encounter.test.ts @@ -2,16 +2,16 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encount import { Biome } from "#app/enums/biome"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; import { Species } from "#app/enums/species"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { runMysteryEncounterToEnd, skipBattleRunMysteryEncounterRewardsPhase } from "#test/mystery-encounter/encounter-test-utils"; -import BattleScene from "#app/battle-scene"; +import type BattleScene from "#app/battle-scene"; import { Mode } from "#app/ui/ui"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; -import { initSceneWithoutEncounterPhase } from "#test/utils/gameManagerUtils"; +import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; import { WeirdDreamEncounter } from "#app/data/mystery-encounters/encounters/weird-dream-encounter"; import * as EncounterTransformationSequence from "#app/data/mystery-encounters/utils/encounter-transformation-sequence"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; @@ -84,8 +84,8 @@ describe("Weird Dream - Mystery Encounter", () => { expect(WeirdDreamEncounter.onInit).toBeDefined(); - WeirdDreamEncounter.populateDialogueTokensFromRequirements(scene); - const onInitResult = onInit!(scene); + WeirdDreamEncounter.populateDialogueTokensFromRequirements(); + const onInitResult = onInit!(); expect(loadBgmSpy).toHaveBeenCalled(); expect(onInitResult).toBe(true); diff --git a/src/test/mystery-encounter/mystery-encounter-utils.test.ts b/test/mystery-encounter/mystery-encounter-utils.test.ts similarity index 79% rename from src/test/mystery-encounter/mystery-encounter-utils.test.ts rename to test/mystery-encounter/mystery-encounter-utils.test.ts index d17b5c8a587..6b467b9fa81 100644 --- a/src/test/mystery-encounter/mystery-encounter-utils.test.ts +++ b/test/mystery-encounter/mystery-encounter-utils.test.ts @@ -1,4 +1,4 @@ -import BattleScene from "#app/battle-scene"; +import type BattleScene from "#app/battle-scene"; import { speciesStarterCosts } from "#app/data/balance/starters"; import MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import { getEncounterText, queueEncounterMessage, showEncounterDialogue, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; @@ -6,10 +6,10 @@ import { getHighestLevelPlayerPokemon, getLowestLevelPlayerPokemon, getRandomPla import { getPokemonSpecies } from "#app/data/pokemon-species"; import { Type } from "#enums/type"; import { MessagePhase } from "#app/phases/message-phase"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; -import { initSceneWithoutEncounterPhase } from "#test/utils/gameManagerUtils"; +import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -39,89 +39,89 @@ describe("Mystery Encounter Utils", () => { // Seeds are calculated to return index 0 first, 1 second (if both pokemon are legal) game.override.seed("random"); - let result = getRandomPlayerPokemon(scene); + let result = getRandomPlayerPokemon(); expect(result.species.speciesId).toBe(Species.MANAPHY); game.override.seed("random2"); - result = getRandomPlayerPokemon(scene); + result = getRandomPlayerPokemon(); expect(result.species.speciesId).toBe(Species.ARCEUS); }); - it("gets a fainted pokemon from player party if isAllowedInBattle is false", () => { + it("gets a fainted pokemon from player party if isAllowedInBattle is false", async () => { // Both pokemon fainted scene.getPlayerParty().forEach(p => { p.hp = 0; p.trySetStatus(StatusEffect.FAINT); - p.updateInfo(); + void p.updateInfo(); }); // Seeds are calculated to return index 0 first, 1 second (if both pokemon are legal) game.override.seed("random"); - let result = getRandomPlayerPokemon(scene); + let result = getRandomPlayerPokemon(); expect(result.species.speciesId).toBe(Species.MANAPHY); game.override.seed("random2"); - result = getRandomPlayerPokemon(scene); + result = getRandomPlayerPokemon(); expect(result.species.speciesId).toBe(Species.ARCEUS); }); - it("gets an unfainted legal pokemon from player party if isAllowed is true and isFainted is false", () => { + it("gets an unfainted legal pokemon from player party if isAllowed is true and isFainted is false", async () => { // Only faint 1st pokemon const party = scene.getPlayerParty(); party[0].hp = 0; party[0].trySetStatus(StatusEffect.FAINT); - party[0].updateInfo(); + await party[0].updateInfo(); // Seeds are calculated to return index 0 first, 1 second (if both pokemon are legal) game.override.seed("random"); - let result = getRandomPlayerPokemon(scene, true); + let result = getRandomPlayerPokemon(true); expect(result.species.speciesId).toBe(Species.MANAPHY); game.override.seed("random2"); - result = getRandomPlayerPokemon(scene, true); + result = getRandomPlayerPokemon(true); expect(result.species.speciesId).toBe(Species.MANAPHY); }); - it("returns last unfainted pokemon if doNotReturnLastAbleMon is false", () => { + it("returns last unfainted pokemon if doNotReturnLastAbleMon is false", async () => { // Only faint 1st pokemon const party = scene.getPlayerParty(); party[0].hp = 0; party[0].trySetStatus(StatusEffect.FAINT); - party[0].updateInfo(); + await party[0].updateInfo(); // Seeds are calculated to return index 0 first, 1 second (if both pokemon are legal) game.override.seed("random"); - let result = getRandomPlayerPokemon(scene, true, false); + let result = getRandomPlayerPokemon(true, false); expect(result.species.speciesId).toBe(Species.MANAPHY); game.override.seed("random2"); - result = getRandomPlayerPokemon(scene, true, false); + result = getRandomPlayerPokemon(true, false); expect(result.species.speciesId).toBe(Species.MANAPHY); }); - it("never returns last unfainted pokemon if doNotReturnLastAbleMon is true", () => { + it("never returns last unfainted pokemon if doNotReturnLastAbleMon is true", async () => { // Only faint 1st pokemon const party = scene.getPlayerParty(); party[0].hp = 0; party[0].trySetStatus(StatusEffect.FAINT); - party[0].updateInfo(); + await party[0].updateInfo(); // Seeds are calculated to return index 0 first, 1 second (if both pokemon are legal) game.override.seed("random"); - let result = getRandomPlayerPokemon(scene, true, false, true); + let result = getRandomPlayerPokemon(true, false, true); expect(result.species.speciesId).toBe(Species.ARCEUS); game.override.seed("random2"); - result = getRandomPlayerPokemon(scene, true, false, true); + result = getRandomPlayerPokemon(true, false, true); expect(result.species.speciesId).toBe(Species.ARCEUS); }); }); @@ -131,7 +131,7 @@ describe("Mystery Encounter Utils", () => { const party = scene.getPlayerParty(); party[0].level = 100; - const result = getHighestLevelPlayerPokemon(scene); + const result = getHighestLevelPlayerPokemon(); expect(result.species.speciesId).toBe(Species.ARCEUS); }); @@ -139,7 +139,7 @@ describe("Mystery Encounter Utils", () => { const party = scene.getPlayerParty(); party[1].level = 100; - const result = getHighestLevelPlayerPokemon(scene); + const result = getHighestLevelPlayerPokemon(); expect(result.species.speciesId).toBe(Species.MANAPHY); }); @@ -148,19 +148,19 @@ describe("Mystery Encounter Utils", () => { party[0].level = 100; party[1].level = 100; - const result = getHighestLevelPlayerPokemon(scene); + const result = getHighestLevelPlayerPokemon(); expect(result.species.speciesId).toBe(Species.ARCEUS); }); - it("returns highest level unfainted if unfainted is true", () => { + it("returns highest level unfainted if unfainted is true", async () => { const party = scene.getPlayerParty(); party[0].level = 100; party[0].hp = 0; party[0].trySetStatus(StatusEffect.FAINT); - party[0].updateInfo(); + await party[0].updateInfo(); party[1].level = 10; - const result = getHighestLevelPlayerPokemon(scene, true); + const result = getHighestLevelPlayerPokemon(true); expect(result.species.speciesId).toBe(Species.MANAPHY); }); }); @@ -170,7 +170,7 @@ describe("Mystery Encounter Utils", () => { const party = scene.getPlayerParty(); party[0].level = 100; - const result = getLowestLevelPlayerPokemon(scene); + const result = getLowestLevelPlayerPokemon(); expect(result.species.speciesId).toBe(Species.MANAPHY); }); @@ -178,7 +178,7 @@ describe("Mystery Encounter Utils", () => { const party = scene.getPlayerParty(); party[1].level = 100; - const result = getLowestLevelPlayerPokemon(scene); + const result = getLowestLevelPlayerPokemon(); expect(result.species.speciesId).toBe(Species.ARCEUS); }); @@ -187,19 +187,19 @@ describe("Mystery Encounter Utils", () => { party[0].level = 100; party[1].level = 100; - const result = getLowestLevelPlayerPokemon(scene); + const result = getLowestLevelPlayerPokemon(); expect(result.species.speciesId).toBe(Species.ARCEUS); }); - it("returns lowest level unfainted if unfainted is true", () => { + it("returns lowest level unfainted if unfainted is true", async () => { const party = scene.getPlayerParty(); party[0].level = 10; party[0].hp = 0; party[0].trySetStatus(StatusEffect.FAINT); - party[0].updateInfo(); + await party[0].updateInfo(); party[1].level = 100; - const result = getLowestLevelPlayerPokemon(scene, true); + const result = getLowestLevelPlayerPokemon(true); expect(result.species.speciesId).toBe(Species.MANAPHY); }); }); @@ -223,14 +223,14 @@ describe("Mystery Encounter Utils", () => { }); it("excludes species from search", () => { - // Only 9 tiers are: Koraidon, Miraidon, Arceus, Rayquaza, Kyogre, Groudon, Zacian - const result = getRandomSpeciesByStarterCost(9, [ Species.KORAIDON, Species.MIRAIDON, Species.ARCEUS, Species.RAYQUAZA, Species.KYOGRE, Species.GROUDON ]); + // Only 9 tiers are: Kyogre, Groudon, Rayquaza, Arceus, Zacian, Koraidon, Miraidon, Terapagos + const result = getRandomSpeciesByStarterCost(9, [ Species.KYOGRE, Species.GROUDON, Species.RAYQUAZA, Species.ARCEUS, Species.KORAIDON, Species.MIRAIDON, Species.TERAPAGOS ]); const pokeSpecies = getPokemonSpecies(result); expect(pokeSpecies.speciesId).toBe(Species.ZACIAN); }); it("gets species of specified types", () => { - // Only 9 tiers are: Koraidon, Miraidon, Arceus, Rayquaza, Kyogre, Groudon, Zacian + // Only 9 tiers are: Kyogre, Groudon, Rayquaza, Arceus, Zacian, Koraidon, Miraidon, Terapagos const result = getRandomSpeciesByStarterCost(9, undefined, [ Type.GROUND ]); const pokeSpecies = getPokemonSpecies(result); expect(pokeSpecies.speciesId).toBe(Species.GROUDON); @@ -244,7 +244,7 @@ describe("Mystery Encounter Utils", () => { arceus.hp = 100; expect(arceus.isAllowedInBattle()).toBe(true); - koPlayerPokemon(scene, arceus); + koPlayerPokemon(arceus); expect(arceus.isAllowedInBattle()).toBe(false); }); }); @@ -254,7 +254,7 @@ describe("Mystery Encounter Utils", () => { scene.currentBattle.mysteryEncounter = new MysteryEncounter(null); scene.currentBattle.mysteryEncounter.setDialogueToken("test", "value"); - const result = getEncounterText(scene, "mysteryEncounter:unit_test_dialogue"); + const result = getEncounterText("mysteryEncounter:unit_test_dialogue"); expect(result).toEqual("mysteryEncounter:unit_test_dialogue"); }); @@ -263,7 +263,7 @@ describe("Mystery Encounter Utils", () => { scene.currentBattle.mysteryEncounter.setDialogueToken("test", "value"); scene.currentBattle.mysteryEncounter.setDialogueToken("testvalue", "new"); - const result = getEncounterText(scene, "mysteryEncounter:unit_test_dialogue"); + const result = getEncounterText("mysteryEncounter:unit_test_dialogue"); expect(result).toEqual("mysteryEncounter:unit_test_dialogue"); }); }); @@ -275,7 +275,7 @@ describe("Mystery Encounter Utils", () => { const spy = vi.spyOn(game.scene, "queueMessage"); const phaseSpy = vi.spyOn(game.scene, "unshiftPhase"); - queueEncounterMessage(scene, "mysteryEncounter:unit_test_dialogue"); + queueEncounterMessage("mysteryEncounter:unit_test_dialogue"); expect(spy).toHaveBeenCalledWith("mysteryEncounter:unit_test_dialogue", null, true); expect(phaseSpy).toHaveBeenCalledWith(expect.any(MessagePhase)); }); @@ -287,7 +287,7 @@ describe("Mystery Encounter Utils", () => { scene.currentBattle.mysteryEncounter.setDialogueToken("test", "value"); const spy = vi.spyOn(game.scene.ui, "showText"); - await showEncounterText(scene, "mysteryEncounter:unit_test_dialogue"); + await showEncounterText("mysteryEncounter:unit_test_dialogue"); expect(spy).toHaveBeenCalledWith("mysteryEncounter:unit_test_dialogue", null, expect.any(Function), 0, true, null); }); }); @@ -298,7 +298,7 @@ describe("Mystery Encounter Utils", () => { scene.currentBattle.mysteryEncounter.setDialogueToken("test", "value"); const spy = vi.spyOn(game.scene.ui, "showDialogue"); - await showEncounterDialogue(scene, "mysteryEncounter:unit_test_dialogue", "mysteryEncounter:unit_test_dialogue"); + await showEncounterDialogue("mysteryEncounter:unit_test_dialogue", "mysteryEncounter:unit_test_dialogue"); expect(spy).toHaveBeenCalledWith("mysteryEncounter:unit_test_dialogue", "mysteryEncounter:unit_test_dialogue", null, expect.any(Function), 0); }); }); diff --git a/src/test/mystery-encounter/mystery-encounter.test.ts b/test/mystery-encounter/mystery-encounter.test.ts similarity index 93% rename from src/test/mystery-encounter/mystery-encounter.test.ts rename to test/mystery-encounter/mystery-encounter.test.ts index eaf6e04a639..c70193a5d56 100644 --- a/src/test/mystery-encounter/mystery-encounter.test.ts +++ b/test/mystery-encounter/mystery-encounter.test.ts @@ -1,10 +1,10 @@ import { afterEach, beforeAll, beforeEach, expect, describe, it } from "vitest"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { Species } from "#enums/species"; import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import BattleScene from "#app/battle-scene"; +import type BattleScene from "#app/battle-scene"; describe("Mystery Encounters", () => { let phaserGame: Phaser.Game; diff --git a/src/test/phases/form-change-phase.test.ts b/test/phases/form-change-phase.test.ts similarity index 93% rename from src/test/phases/form-change-phase.test.ts rename to test/phases/form-change-phase.test.ts index 3c0016260a3..10287cd2046 100644 --- a/src/test/phases/form-change-phase.test.ts +++ b/test/phases/form-change-phase.test.ts @@ -1,7 +1,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import { Type } from "#enums/type"; @@ -44,7 +44,7 @@ describe("Form Change Phase", () => { expect(zacian.calculateBaseStats()).toStrictEqual([ 92, 120, 115, 80, 115, 138 ]); // Give Zacian a Rusted Sword - const rustedSwordType = generateModifierType(game.scene, modifierTypes.RARE_FORM_CHANGE_ITEM)!; + const rustedSwordType = generateModifierType( modifierTypes.RARE_FORM_CHANGE_ITEM)!; const rustedSword = rustedSwordType.newModifier(zacian); await game.scene.addModifier(rustedSword); diff --git a/src/test/phases/frenzy-move-reset.test.ts b/test/phases/frenzy-move-reset.test.ts similarity index 97% rename from src/test/phases/frenzy-move-reset.test.ts rename to test/phases/frenzy-move-reset.test.ts index db9ec2bfe66..0bea8e87f47 100644 --- a/src/test/phases/frenzy-move-reset.test.ts +++ b/test/phases/frenzy-move-reset.test.ts @@ -4,7 +4,7 @@ import { BattlerTagType } from "#enums/battler-tag-type"; import { StatusEffect } from "#enums/status-effect"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest"; diff --git a/src/test/phases/game-over-phase.test.ts b/test/phases/game-over-phase.test.ts similarity index 98% rename from src/test/phases/game-over-phase.test.ts rename to test/phases/game-over-phase.test.ts index 2e19d5fe954..4f5e215959a 100644 --- a/src/test/phases/game-over-phase.test.ts +++ b/test/phases/game-over-phase.test.ts @@ -2,7 +2,7 @@ import { Biome } from "#enums/biome"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { achvs } from "#app/system/achv"; diff --git a/test/phases/learn-move-phase.test.ts b/test/phases/learn-move-phase.test.ts new file mode 100644 index 00000000000..6eb86620877 --- /dev/null +++ b/test/phases/learn-move-phase.test.ts @@ -0,0 +1,150 @@ +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import Phaser from "phaser"; +import GameManager from "#test/testUtils/gameManager"; +import { Species } from "#enums/species"; +import { Moves } from "#enums/moves"; +import { LearnMovePhase } from "#app/phases/learn-move-phase"; +import { Mode } from "#app/ui/ui"; +import { Button } from "#app/enums/buttons"; + +describe("Learn Move Phase", () => { + 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.xpMultiplier(50); + }); + + it("If Pokemon has less than 4 moves, its newest move will be added to the lowest empty index", async () => { + game.override.moveset([ Moves.SPLASH ]); + await game.classicMode.startBattle([ Species.BULBASAUR ]); + const pokemon = game.scene.getPlayerPokemon()!; + const newMovePos = pokemon?.getMoveset().length; + game.move.select(Moves.SPLASH); + await game.doKillOpponents(); + await game.phaseInterceptor.to(LearnMovePhase); + const levelMove = pokemon.getLevelMoves(5)[0]; + const levelReq = levelMove[0]; + const levelMoveId = levelMove[1]; + expect(pokemon.level).toBeGreaterThanOrEqual(levelReq); + expect(pokemon?.moveset[newMovePos]?.moveId).toBe(levelMoveId); + }); + + it("If a pokemon has 4 move slots filled, the chosen move will be deleted and replaced", async () => { + await game.classicMode.startBattle([ Species.BULBASAUR ]); + const bulbasaur = game.scene.getPlayerPokemon()!; + const prevMoveset = [ Moves.SPLASH, Moves.ABSORB, Moves.ACID, Moves.VINE_WHIP ]; + const moveSlotNum = 3; + + game.move.changeMoveset(bulbasaur, prevMoveset); + game.move.select(Moves.SPLASH); + await game.doKillOpponents(); + + // queue up inputs to confirm dialog boxes + game.onNextPrompt("LearnMovePhase", Mode.CONFIRM, () => { + game.scene.ui.processInput(Button.ACTION); + }); + game.onNextPrompt("LearnMovePhase", Mode.SUMMARY, () => { + for (let x = 0; x < moveSlotNum; x++) { + game.scene.ui.processInput(Button.DOWN); + } + game.scene.ui.processInput(Button.ACTION); + }); + await game.phaseInterceptor.to(LearnMovePhase); + + const levelMove = bulbasaur.getLevelMoves(5)[0]; + const levelReq = levelMove[0]; + const levelMoveId = levelMove[1]; + expect(bulbasaur.level).toBeGreaterThanOrEqual(levelReq); + // Check each of mr mime's moveslots to make sure the changed move (and ONLY the changed move) is different + bulbasaur.getMoveset().forEach((move, index) => { + const expectedMove: Moves = (index === moveSlotNum ? levelMoveId : prevMoveset[index]); + expect(move?.moveId).toBe(expectedMove); + }); + }); + + it("selecting the newly deleted move will reject it and keep old moveset", async () => { + await game.classicMode.startBattle([ Species.BULBASAUR ]); + const bulbasaur = game.scene.getPlayerPokemon()!; + const prevMoveset = [ Moves.SPLASH, Moves.ABSORB, Moves.ACID, Moves.VINE_WHIP ]; + + game.move.changeMoveset(bulbasaur, [ Moves.SPLASH, Moves.ABSORB, Moves.ACID, Moves.VINE_WHIP ]); + game.move.select(Moves.SPLASH); + await game.doKillOpponents(); + + // queue up inputs to confirm dialog boxes + game.onNextPrompt("LearnMovePhase", Mode.CONFIRM, () => { + game.scene.ui.processInput(Button.ACTION); + }); + game.onNextPrompt("LearnMovePhase", Mode.SUMMARY, () => { + for (let x = 0; x < 4; x++) { + game.scene.ui.processInput(Button.DOWN); // moves down 4 times to the 5th move slot + } + game.scene.ui.processInput(Button.ACTION); + }); + game.onNextPrompt("LearnMovePhase", Mode.CONFIRM, () => { + game.scene.ui.processInput(Button.ACTION); + }); + await game.phaseInterceptor.to(LearnMovePhase); + + const levelReq = bulbasaur.getLevelMoves(5)[0][0]; + expect(bulbasaur.level).toBeGreaterThanOrEqual(levelReq); + expect(bulbasaur.getMoveset().map(m => m?.moveId)).toEqual(prevMoveset); + }); + + it("macro should add moves in free slots normally", async () => { + await game.classicMode.startBattle([ Species.BULBASAUR ]); + const bulbasaur = game.scene.getPlayerPokemon()!; + + game.move.changeMoveset(bulbasaur, [ Moves.SPLASH, Moves.ABSORB, Moves.ACID ]); + game.move.select(Moves.SPLASH); + await game.move.learnMove(Moves.SACRED_FIRE, 0, 1); + expect(bulbasaur.getMoveset().map(m => m?.moveId)).toEqual([ Moves.SPLASH, Moves.ABSORB, Moves.ACID, Moves.SACRED_FIRE ]); + + }); + + it("macro should replace moves", async () => { + await game.classicMode.startBattle([ Species.BULBASAUR ]); + const bulbasaur = game.scene.getPlayerPokemon()!; + + game.move.changeMoveset(bulbasaur, [ Moves.SPLASH, Moves.ABSORB, Moves.ACID, Moves.VINE_WHIP ]); + game.move.select(Moves.SPLASH); + await game.move.learnMove(Moves.SACRED_FIRE, 0, 1); + expect(bulbasaur.getMoveset().map(m => m?.moveId)).toEqual([ Moves.SPLASH, Moves.SACRED_FIRE, Moves.ACID, Moves.VINE_WHIP ]); + + }); + + it("macro should allow for cancelling move learning", async () => { + await game.classicMode.startBattle([ Species.BULBASAUR ]); + const bulbasaur = game.scene.getPlayerPokemon()!; + + game.move.changeMoveset(bulbasaur, [ Moves.SPLASH, Moves.ABSORB, Moves.ACID, Moves.VINE_WHIP ]); + game.move.select(Moves.SPLASH); + await game.move.learnMove(Moves.SACRED_FIRE, 0, 4); + expect(bulbasaur.getMoveset().map(m => m?.moveId)).toEqual([ Moves.SPLASH, Moves.ABSORB, Moves.ACID, Moves.VINE_WHIP ]); + + }); + + it("macro works on off-field party members", async () => { + await game.classicMode.startBattle([ Species.BULBASAUR, Species.SQUIRTLE ]); + const squirtle = game.scene.getPlayerParty()[1]!; + + game.move.changeMoveset(squirtle, [ Moves.SPLASH, Moves.WATER_GUN, Moves.FREEZE_DRY, Moves.GROWL ]); + game.move.select(Moves.TACKLE); + await game.move.learnMove(Moves.SHELL_SMASH, 1, 0); + expect(squirtle.getMoveset().map(m => m?.moveId)).toEqual([ Moves.SHELL_SMASH, Moves.WATER_GUN, Moves.FREEZE_DRY, Moves.GROWL ]); + + }); + +}); diff --git a/src/test/phases/mystery-encounter-phase.test.ts b/test/phases/mystery-encounter-phase.test.ts similarity index 96% rename from src/test/phases/mystery-encounter-phase.test.ts rename to test/phases/mystery-encounter-phase.test.ts index 32e31ce1c94..aa4e1683aae 100644 --- a/src/test/phases/mystery-encounter-phase.test.ts +++ b/test/phases/mystery-encounter-phase.test.ts @@ -1,13 +1,13 @@ import { afterEach, beforeAll, beforeEach, expect, describe, it, vi } from "vitest"; -import GameManager from "#app/test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { Species } from "#enums/species"; import { MysteryEncounterOptionSelectedPhase, MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; import { Mode } from "#app/ui/ui"; import { Button } from "#enums/buttons"; -import MysteryEncounterUiHandler from "#app/ui/mystery-encounter-ui-handler"; +import type MysteryEncounterUiHandler from "#app/ui/mystery-encounter-ui-handler"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import MessageUiHandler from "#app/ui/message-ui-handler"; +import type MessageUiHandler from "#app/ui/message-ui-handler"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import i18next from "i18next"; diff --git a/src/test/phases/phases.test.ts b/test/phases/phases.test.ts similarity index 85% rename from src/test/phases/phases.test.ts rename to test/phases/phases.test.ts index 5ef25361a3f..4aabeb55b9e 100644 --- a/src/test/phases/phases.test.ts +++ b/test/phases/phases.test.ts @@ -1,9 +1,9 @@ -import BattleScene from "#app/battle-scene"; +import type BattleScene from "#app/battle-scene"; import { LoginPhase } from "#app/phases/login-phase"; import { TitlePhase } from "#app/phases/title-phase"; import { UnavailablePhase } from "#app/phases/unavailable-phase"; import { Mode } from "#app/ui/ui"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -29,7 +29,7 @@ describe("Phases", () => { describe("LoginPhase", () => { it("should start the login phase", async () => { - const loginPhase = new LoginPhase(scene); + const loginPhase = new LoginPhase(); scene.unshiftPhase(loginPhase); await game.phaseInterceptor.run(LoginPhase); expect(scene.ui.getMode()).to.equal(Mode.MESSAGE); @@ -38,7 +38,7 @@ describe("Phases", () => { describe("TitlePhase", () => { it("should start the title phase", async () => { - const titlePhase = new TitlePhase(scene); + const titlePhase = new TitlePhase(); scene.unshiftPhase(titlePhase); await game.phaseInterceptor.run(TitlePhase); expect(scene.ui.getMode()).to.equal(Mode.TITLE); @@ -47,7 +47,7 @@ describe("Phases", () => { describe("UnavailablePhase", () => { it("should start the unavailable phase", async () => { - const unavailablePhase = new UnavailablePhase(scene); + const unavailablePhase = new UnavailablePhase(); scene.unshiftPhase(unavailablePhase); await game.phaseInterceptor.run(UnavailablePhase); expect(scene.ui.getMode()).to.equal(Mode.UNAVAILABLE); diff --git a/src/test/phases/select-modifier-phase.test.ts b/test/phases/select-modifier-phase.test.ts similarity index 70% rename from src/test/phases/select-modifier-phase.test.ts rename to test/phases/select-modifier-phase.test.ts index 60f81f3ad54..0949eeec955 100644 --- a/src/test/phases/select-modifier-phase.test.ts +++ b/test/phases/select-modifier-phase.test.ts @@ -1,17 +1,21 @@ -import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import Phaser from "phaser"; -import GameManager from "#app/test/utils/gameManager"; -import { initSceneWithoutEncounterPhase } from "#app/test/utils/gameManagerUtils"; -import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; -import { ModifierTier } from "#app/modifier/modifier-tier"; -import * as Utils from "#app/utils"; -import { CustomModifierSettings, ModifierTypeOption, modifierTypes } from "#app/modifier/modifier-type"; -import BattleScene from "#app/battle-scene"; -import { Species } from "#enums/species"; -import { Mode } from "#app/ui/ui"; -import { PlayerPokemon } from "#app/field/pokemon"; +import type BattleScene from "#app/battle-scene"; import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { PlayerPokemon } from "#app/field/pokemon"; +import { ModifierTier } from "#app/modifier/modifier-tier"; +import type { CustomModifierSettings } from "#app/modifier/modifier-type"; +import { ModifierTypeOption, modifierTypes } from "#app/modifier/modifier-type"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; +import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; +import { Mode } from "#app/ui/ui"; +import { shiftCharCodes } from "#app/utils"; +import { Abilities } from "#enums/abilities"; +import { Button } from "#enums/buttons"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; describe("SelectModifierPhase", () => { let phaserGame: Phaser.Game; @@ -28,7 +32,11 @@ describe("SelectModifierPhase", () => { game = new GameManager(phaserGame); scene = game.scene; - initSceneWithoutEncounterPhase(scene, [ Species.ABRA, Species.VOLCARONA ]); + game.override + .moveset([ Moves.FISSURE, Moves.SPLASH ]) + .ability(Abilities.NO_GUARD) + .startingLevel(200) + .enemySpecies(Species.MAGIKARP); }); afterEach(() => { @@ -38,7 +46,8 @@ describe("SelectModifierPhase", () => { }); it("should start a select modifier phase", async () => { - const selectModifierPhase = new SelectModifierPhase(scene); + initSceneWithoutEncounterPhase(scene, [ Species.ABRA, Species.VOLCARONA ]); + const selectModifierPhase = new SelectModifierPhase(); scene.pushPhase(selectModifierPhase); await game.phaseInterceptor.run(SelectModifierPhase); @@ -46,10 +55,9 @@ describe("SelectModifierPhase", () => { }); it("should generate random modifiers", async () => { - const selectModifierPhase = new SelectModifierPhase(scene); - scene.pushPhase(selectModifierPhase); - await game.phaseInterceptor.run(SelectModifierPhase); - + await game.classicMode.startBattle([ Species.ABRA, Species.VOLCARONA ]); + game.move.select(Moves.FISSURE); + await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find(h => h instanceof ModifierSelectUiHandler) as ModifierSelectUiHandler; @@ -57,64 +65,63 @@ describe("SelectModifierPhase", () => { }); it("should modify reroll cost", async () => { + initSceneWithoutEncounterPhase(scene, [ Species.ABRA, Species.VOLCARONA ]); const options = [ new ModifierTypeOption(modifierTypes.POTION(), 0, 100), new ModifierTypeOption(modifierTypes.ETHER(), 0, 400), new ModifierTypeOption(modifierTypes.REVIVE(), 0, 1000) ]; - const selectModifierPhase1 = new SelectModifierPhase(scene, 0, undefined, { guaranteedModifierTypeOptions: options }); - const selectModifierPhase2 = new SelectModifierPhase(scene, 0, undefined, { guaranteedModifierTypeOptions: options, rerollMultiplier: 2 }); + const selectModifierPhase1 = new SelectModifierPhase(0, undefined, { guaranteedModifierTypeOptions: options }); + const selectModifierPhase2 = new SelectModifierPhase(0, undefined, { guaranteedModifierTypeOptions: options, rerollMultiplier: 2 }); const cost1 = selectModifierPhase1.getRerollCost(false); const cost2 = selectModifierPhase2.getRerollCost(false); expect(cost2).toEqual(cost1 * 2); }); - it("should generate random modifiers from reroll", async () => { - let selectModifierPhase = new SelectModifierPhase(scene); - scene.pushPhase(selectModifierPhase); - await game.phaseInterceptor.run(SelectModifierPhase); + it.todo("should generate random modifiers from reroll", async () => { + await game.classicMode.startBattle([ Species.ABRA, Species.VOLCARONA ]); + scene.money = 1000000; + scene.shopCursorTarget = 0; + game.move.select(Moves.FISSURE); + await game.phaseInterceptor.to("SelectModifierPhase"); + + // TODO: nagivate the ui to reroll somehow + //const smphase = scene.getCurrentPhase() as SelectModifierPhase; expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find(h => h instanceof ModifierSelectUiHandler) as ModifierSelectUiHandler; expect(modifierSelectHandler.options.length).toEqual(3); - // Simulate selecting reroll - selectModifierPhase = new SelectModifierPhase(scene, 1, [ ModifierTier.COMMON, ModifierTier.COMMON, ModifierTier.COMMON ]); - scene.unshiftPhase(selectModifierPhase); - scene.ui.setMode(Mode.MESSAGE).then(() => game.endPhase()); - await game.phaseInterceptor.run(SelectModifierPhase); + modifierSelectHandler.processInput(Button.ACTION); + expect(scene.money).toBe(1000000 - 250); expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); expect(modifierSelectHandler.options.length).toEqual(3); }); - it("should generate random modifiers of same tier for reroll with reroll lock", async () => { + it.todo("should generate random modifiers of same tier for reroll with reroll lock", async () => { + game.override.startingModifier([{ name: "LOCK_CAPSULE" }]); + await game.classicMode.startBattle([ Species.ABRA, Species.VOLCARONA ]); + scene.money = 1000000; // Just use fully random seed for this test vi.spyOn(scene, "resetSeed").mockImplementation(() => { - scene.waveSeed = Utils.shiftCharCodes(scene.seed, 5); + scene.waveSeed = shiftCharCodes(scene.seed, 5); Phaser.Math.RND.sow([ scene.waveSeed ]); console.log("Wave Seed:", scene.waveSeed, 5); scene.rngCounter = 0; }); - let selectModifierPhase = new SelectModifierPhase(scene); - scene.pushPhase(selectModifierPhase); - await game.phaseInterceptor.run(SelectModifierPhase); + game.move.select(Moves.FISSURE); + await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find(h => h instanceof ModifierSelectUiHandler) as ModifierSelectUiHandler; expect(modifierSelectHandler.options.length).toEqual(3); const firstRollTiers: ModifierTier[] = modifierSelectHandler.options.map(o => o.modifierTypeOption.type.tier); - // Simulate selecting reroll with lock - scene.lockModifierTiers = true; - scene.reroll = true; - selectModifierPhase = new SelectModifierPhase(scene, 1, firstRollTiers); - scene.unshiftPhase(selectModifierPhase); - scene.ui.setMode(Mode.MESSAGE).then(() => game.endPhase()); - await game.phaseInterceptor.run(SelectModifierPhase); + // TODO: nagivate ui to reroll with lock capsule enabled expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); expect(modifierSelectHandler.options.length).toEqual(3); @@ -125,13 +132,15 @@ describe("SelectModifierPhase", () => { }); it("should generate custom modifiers", async () => { + await game.classicMode.startBattle([ Species.ABRA, Species.VOLCARONA ]); + scene.money = 1000000; const customModifiers: CustomModifierSettings = { guaranteedModifierTypeFuncs: [ modifierTypes.MEMORY_MUSHROOM, modifierTypes.TM_ULTRA, modifierTypes.LEFTOVERS, modifierTypes.AMULET_COIN, modifierTypes.GOLDEN_PUNCH ] }; - const selectModifierPhase = new SelectModifierPhase(scene, 0, undefined, customModifiers); - scene.pushPhase(selectModifierPhase); - await game.phaseInterceptor.run(SelectModifierPhase); - + const selectModifierPhase = new SelectModifierPhase(0, undefined, customModifiers); + scene.unshiftPhase(selectModifierPhase); + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find(h => h instanceof ModifierSelectUiHandler) as ModifierSelectUiHandler; @@ -144,10 +153,12 @@ describe("SelectModifierPhase", () => { }); it("should generate custom modifier tiers that can upgrade from luck", async () => { + await game.classicMode.startBattle([ Species.ABRA, Species.VOLCARONA ]); + scene.money = 1000000; const customModifiers: CustomModifierSettings = { guaranteedModifierTiers: [ ModifierTier.COMMON, ModifierTier.GREAT, ModifierTier.ULTRA, ModifierTier.ROGUE, ModifierTier.MASTER ] }; - const pokemon = new PlayerPokemon(scene, getPokemonSpecies(Species.BULBASAUR), 10, undefined, 0, undefined, true, 2, undefined, undefined, undefined); + const pokemon = new PlayerPokemon(getPokemonSpecies(Species.BULBASAUR), 10, undefined, 0, undefined, true, 2); // Fill party with max shinies while (scene.getPlayerParty().length > 0) { @@ -155,10 +166,10 @@ describe("SelectModifierPhase", () => { } scene.getPlayerParty().push(pokemon, pokemon, pokemon, pokemon, pokemon, pokemon); - const selectModifierPhase = new SelectModifierPhase(scene, 0, undefined, customModifiers); - scene.pushPhase(selectModifierPhase); - await game.phaseInterceptor.run(SelectModifierPhase); - + const selectModifierPhase = new SelectModifierPhase(0, undefined, customModifiers); + scene.unshiftPhase(selectModifierPhase); + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find(h => h instanceof ModifierSelectUiHandler) as ModifierSelectUiHandler; @@ -171,12 +182,15 @@ describe("SelectModifierPhase", () => { }); it("should generate custom modifiers and modifier tiers together", async () => { + await game.classicMode.startBattle([ Species.ABRA, Species.VOLCARONA ]); + scene.money = 1000000; const customModifiers: CustomModifierSettings = { guaranteedModifierTypeFuncs: [ modifierTypes.MEMORY_MUSHROOM, modifierTypes.TM_COMMON ], guaranteedModifierTiers: [ ModifierTier.MASTER, ModifierTier.MASTER ] }; - const selectModifierPhase = new SelectModifierPhase(scene, 0, undefined, customModifiers); - scene.pushPhase(selectModifierPhase); + const selectModifierPhase = new SelectModifierPhase(0, undefined, customModifiers); + scene.unshiftPhase(selectModifierPhase); + game.move.select(Moves.SPLASH); await game.phaseInterceptor.run(SelectModifierPhase); @@ -190,13 +204,16 @@ describe("SelectModifierPhase", () => { }); it("should fill remaining modifiers if fillRemaining is true with custom modifiers", async () => { + await game.classicMode.startBattle([ Species.ABRA, Species.VOLCARONA ]); + scene.money = 1000000; const customModifiers: CustomModifierSettings = { guaranteedModifierTypeFuncs: [ modifierTypes.MEMORY_MUSHROOM ], guaranteedModifierTiers: [ ModifierTier.MASTER ], fillRemaining: true }; - const selectModifierPhase = new SelectModifierPhase(scene, 0, undefined, customModifiers); - scene.pushPhase(selectModifierPhase); + const selectModifierPhase = new SelectModifierPhase(0, undefined, customModifiers); + scene.unshiftPhase(selectModifierPhase); + game.move.select(Moves.SPLASH); await game.phaseInterceptor.run(SelectModifierPhase); diff --git a/src/test/plugins/api/pokerogue-account-api.test.ts b/test/plugins/api/pokerogue-account-api.test.ts similarity index 98% rename from src/test/plugins/api/pokerogue-account-api.test.ts rename to test/plugins/api/pokerogue-account-api.test.ts index 90a7d3639ad..e9033c859de 100644 --- a/src/test/plugins/api/pokerogue-account-api.test.ts +++ b/test/plugins/api/pokerogue-account-api.test.ts @@ -1,7 +1,7 @@ import type { AccountInfoResponse } from "#app/@types/PokerogueAccountApi"; import { SESSION_ID_COOKIE_NAME } from "#app/constants"; import { PokerogueAccountApi } from "#app/plugins/api/pokerogue-account-api"; -import { getApiBaseUrl } from "#app/test/utils/testUtils"; +import { getApiBaseUrl } from "#test/testUtils/testUtils"; import * as Utils from "#app/utils"; import { http, HttpResponse } from "msw"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/plugins/api/pokerogue-admin-api.test.ts b/test/plugins/api/pokerogue-admin-api.test.ts similarity index 99% rename from src/test/plugins/api/pokerogue-admin-api.test.ts rename to test/plugins/api/pokerogue-admin-api.test.ts index 5ae46abfcc8..5af55967ae2 100644 --- a/src/test/plugins/api/pokerogue-admin-api.test.ts +++ b/test/plugins/api/pokerogue-admin-api.test.ts @@ -7,7 +7,7 @@ import type { UnlinkAccountFromGoogledIdRequest, } from "#app/@types/PokerogueAdminApi"; import { PokerogueAdminApi } from "#app/plugins/api/pokerogue-admin-api"; -import { getApiBaseUrl } from "#app/test/utils/testUtils"; +import { getApiBaseUrl } from "#test/testUtils/testUtils"; import { http, HttpResponse } from "msw"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/plugins/api/pokerogue-api.test.ts b/test/plugins/api/pokerogue-api.test.ts similarity index 98% rename from src/test/plugins/api/pokerogue-api.test.ts rename to test/plugins/api/pokerogue-api.test.ts index a62174c226d..241453866a5 100644 --- a/src/test/plugins/api/pokerogue-api.test.ts +++ b/test/plugins/api/pokerogue-api.test.ts @@ -1,6 +1,6 @@ import type { TitleStatsResponse } from "#app/@types/PokerogueApi"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; -import { getApiBaseUrl } from "#app/test/utils/testUtils"; +import { getApiBaseUrl } from "#test/testUtils/testUtils"; import { http, HttpResponse } from "msw"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/plugins/api/pokerogue-daily-api.test.ts b/test/plugins/api/pokerogue-daily-api.test.ts similarity index 98% rename from src/test/plugins/api/pokerogue-daily-api.test.ts rename to test/plugins/api/pokerogue-daily-api.test.ts index 569e7cbb15d..95d938e6625 100644 --- a/src/test/plugins/api/pokerogue-daily-api.test.ts +++ b/test/plugins/api/pokerogue-daily-api.test.ts @@ -1,6 +1,6 @@ import type { GetDailyRankingsPageCountRequest, GetDailyRankingsRequest } from "#app/@types/PokerogueDailyApi"; import { PokerogueDailyApi } from "#app/plugins/api/pokerogue-daily-api"; -import { getApiBaseUrl } from "#app/test/utils/testUtils"; +import { getApiBaseUrl } from "#test/testUtils/testUtils"; import { ScoreboardCategory, type RankingEntry } from "#app/ui/daily-run-scoreboard"; import { http, HttpResponse } from "msw"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/plugins/api/pokerogue-savedata-api.test.ts b/test/plugins/api/pokerogue-savedata-api.test.ts similarity index 96% rename from src/test/plugins/api/pokerogue-savedata-api.test.ts rename to test/plugins/api/pokerogue-savedata-api.test.ts index 6dd402206e5..47eafa0a933 100644 --- a/src/test/plugins/api/pokerogue-savedata-api.test.ts +++ b/test/plugins/api/pokerogue-savedata-api.test.ts @@ -1,6 +1,6 @@ import type { UpdateAllSavedataRequest } from "#app/@types/PokerogueSavedataApi"; import { PokerogueSavedataApi } from "#app/plugins/api/pokerogue-savedata-api"; -import { getApiBaseUrl } from "#app/test/utils/testUtils"; +import { getApiBaseUrl } from "#test/testUtils/testUtils"; import { http, HttpResponse } from "msw"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/plugins/api/pokerogue-session-savedata-api.test.ts b/test/plugins/api/pokerogue-session-savedata-api.test.ts similarity index 99% rename from src/test/plugins/api/pokerogue-session-savedata-api.test.ts rename to test/plugins/api/pokerogue-session-savedata-api.test.ts index f453c5edd88..d8103428d59 100644 --- a/src/test/plugins/api/pokerogue-session-savedata-api.test.ts +++ b/test/plugins/api/pokerogue-session-savedata-api.test.ts @@ -8,7 +8,7 @@ import type { } from "#app/@types/PokerogueSessionSavedataApi"; import { PokerogueSessionSavedataApi } from "#app/plugins/api/pokerogue-session-savedata-api"; import type { SessionSaveData } from "#app/system/game-data"; -import { getApiBaseUrl } from "#app/test/utils/testUtils"; +import { getApiBaseUrl } from "#test/testUtils/testUtils"; import { http, HttpResponse } from "msw"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/plugins/api/pokerogue-system-savedata-api.test.ts b/test/plugins/api/pokerogue-system-savedata-api.test.ts similarity index 98% rename from src/test/plugins/api/pokerogue-system-savedata-api.test.ts rename to test/plugins/api/pokerogue-system-savedata-api.test.ts index af377762b77..f108e22ee2c 100644 --- a/src/test/plugins/api/pokerogue-system-savedata-api.test.ts +++ b/test/plugins/api/pokerogue-system-savedata-api.test.ts @@ -6,7 +6,7 @@ import type { } from "#app/@types/PokerogueSystemSavedataApi"; import { PokerogueSystemSavedataApi } from "#app/plugins/api/pokerogue-system-savedata-api"; import type { SystemSaveData } from "#app/system/game-data"; -import { getApiBaseUrl } from "#app/test/utils/testUtils"; +import { getApiBaseUrl } from "#test/testUtils/testUtils"; import { http, HttpResponse } from "msw"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/pre.test.ts b/test/pre.test.ts similarity index 100% rename from src/test/pre.test.ts rename to test/pre.test.ts diff --git a/src/test/reload.test.ts b/test/reload.test.ts similarity index 96% rename from src/test/reload.test.ts rename to test/reload.test.ts index 3b29cadf8e7..019da0a4c2a 100644 --- a/src/test/reload.test.ts +++ b/test/reload.test.ts @@ -1,13 +1,13 @@ import { GameModes } from "#app/game-mode"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; -import OptionSelectUiHandler from "#app/ui/settings/option-select-ui-handler"; +import type OptionSelectUiHandler from "#app/ui/settings/option-select-ui-handler"; import { Mode } from "#app/ui/ui"; import { Biome } from "#enums/biome"; import { Button } from "#enums/buttons"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; -import { MockClock } from "#test/utils/mocks/mockClock"; +import GameManager from "#test/testUtils/gameManager"; +import type { MockClock } from "#test/testUtils/mocks/mockClock"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; describe("Reload", () => { diff --git a/src/test/settingMenu/helpers/inGameManip.ts b/test/settingMenu/helpers/inGameManip.ts similarity index 100% rename from src/test/settingMenu/helpers/inGameManip.ts rename to test/settingMenu/helpers/inGameManip.ts diff --git a/src/test/settingMenu/helpers/menuManip.ts b/test/settingMenu/helpers/menuManip.ts similarity index 92% rename from src/test/settingMenu/helpers/menuManip.ts rename to test/settingMenu/helpers/menuManip.ts index 0b1f48525f1..1d53b845047 100644 --- a/src/test/settingMenu/helpers/menuManip.ts +++ b/test/settingMenu/helpers/menuManip.ts @@ -1,4 +1,15 @@ -import { assign, canIAssignThisKey, canIDeleteThisKey, canIOverrideThisSetting, deleteBind, getIconWithKeycode, getIconWithSettingName, getKeyWithKeycode, getKeyWithSettingName, getSettingNameWithKeycode } from "#app/configs/inputs/configHandler"; +import { + assign, + canIAssignThisKey, + canIDeleteThisKey, + canIOverrideThisSetting, + deleteBind, + getIconWithKeycode, + getIconWithSettingName, + getKeyWithKeycode, + getKeyWithSettingName, + getSettingNameWithKeycode, +} from "#app/configs/inputs/configHandler"; import { SettingKeyboard } from "#app/system/settings/settings-keyboard"; import { expect } from "vitest"; diff --git a/src/test/settingMenu/rebinding_setting.test.ts b/test/settingMenu/rebinding_setting.test.ts similarity index 98% rename from src/test/settingMenu/rebinding_setting.test.ts rename to test/settingMenu/rebinding_setting.test.ts index 37cf8032897..46a37f4e137 100644 --- a/src/test/settingMenu/rebinding_setting.test.ts +++ b/test/settingMenu/rebinding_setting.test.ts @@ -1,6 +1,6 @@ import cfg_keyboard_qwerty from "#app/configs/inputs/cfg_keyboard_qwerty"; import { getKeyWithKeycode, getKeyWithSettingName } from "#app/configs/inputs/configHandler"; -import { InterfaceConfig } from "#app/inputs-controller"; +import type { InterfaceConfig } from "#app/inputs-controller"; import { SettingKeyboard } from "#app/system/settings/settings-keyboard"; import { deepCopy } from "#app/utils"; import { Button } from "#enums/buttons"; @@ -406,9 +406,9 @@ describe("Test Rebinding", () => { }); it("check to delete all the binds of an action", () => { - inGame.whenWePressOnKeyboard("V").weShouldTriggerTheButton("Button_Cycle_Variant"); - inTheSettingMenu.whenCursorIsOnSetting("Alt_Button_Cycle_Variant").thereShouldBeNoIcon().weWantThisBindInstead("K").confirm(); - inTheSettingMenu.whenCursorIsOnSetting("Alt_Button_Cycle_Variant").iconDisplayedIs("KEY_K").whenWeDelete().thereShouldBeNoIconAnymore(); - inTheSettingMenu.whenCursorIsOnSetting("Button_Cycle_Variant").iconDisplayedIs("KEY_V").whenWeDelete().thereShouldBeNoIconAnymore(); + inGame.whenWePressOnKeyboard("V").weShouldTriggerTheButton("Button_Cycle_Tera"); + inTheSettingMenu.whenCursorIsOnSetting("Alt_Button_Cycle_Tera").thereShouldBeNoIcon().weWantThisBindInstead("K").confirm(); + inTheSettingMenu.whenCursorIsOnSetting("Alt_Button_Cycle_Tera").iconDisplayedIs("KEY_K").whenWeDelete().thereShouldBeNoIconAnymore(); + inTheSettingMenu.whenCursorIsOnSetting("Button_Cycle_Tera").iconDisplayedIs("KEY_V").whenWeDelete().thereShouldBeNoIconAnymore(); }); }); diff --git a/src/test/sprites/pokemonSprite.test.ts b/test/sprites/pokemonSprite.test.ts similarity index 86% rename from src/test/sprites/pokemonSprite.test.ts rename to test/sprites/pokemonSprite.test.ts index c29f88d3143..43749015e1c 100644 --- a/src/test/sprites/pokemonSprite.test.ts +++ b/test/sprites/pokemonSprite.test.ts @@ -2,7 +2,7 @@ import { getAppRootDir } from "#test/sprites/spritesUtils"; import fs from "fs"; import path from "path"; import { beforeAll, describe, expect, it } from "vitest"; -import _masterlist from "../../../public/images/pokemon/variant/_masterlist.json"; +import _masterlist from "../../public/images/pokemon/variant/_masterlist.json"; type PokemonVariantMasterlist = typeof _masterlist; @@ -147,7 +147,7 @@ describe("check if every variant's sprite are correctly set", () => { if (errors.length) { console.log("errors", errors); } - expect(errors.length).toBe(0); + expect(errors).toEqual([]); }); it("check female variant files", () => { @@ -156,7 +156,7 @@ describe("check if every variant's sprite are correctly set", () => { if (errors.length) { console.log("errors", errors); } - expect(errors.length).toBe(0); + expect(errors).toEqual([]); }); it("check back female variant files", () => { @@ -165,7 +165,7 @@ describe("check if every variant's sprite are correctly set", () => { if (errors.length) { console.log("errors", errors); } - expect(errors.length).toBe(0); + expect(errors).toEqual([]); }); it("check back male back variant files", () => { @@ -176,25 +176,36 @@ describe("check if every variant's sprite are correctly set", () => { if (errors.length) { console.log("errors", errors); } - expect(errors.length).toBe(0); + expect(errors).toEqual([]); }); - it("check exp back variant files", () => { - const dirPath = `${rootDir}exp${path.sep}back${path.sep}`; - const errors = getMissingFiles(expVariant.back, dirPath); + it("check exp back female variant files", () => { + const dirPath = `${rootDir}exp${path.sep}back${path.sep}female${path.sep}`; + const errors = getMissingFiles(expVariant.back.female, dirPath); if (errors.length) { console.log("errors", errors); } expect(errors.length).toBe(0); }); + it("check exp back male variant files", () => { + const dirPath = `${rootDir}exp${path.sep}back${path.sep}`; + const backMaleVariant = deepCopy(expVariant.back); + delete backMaleVariant.female; + const errors = getMissingFiles(backMaleVariant, dirPath); + if (errors.length) { + console.log("errors", errors); + } + expect(errors).toEqual([]); + }); + it("check exp female variant files", () => { const dirPath = `${rootDir}exp${path.sep}female${path.sep}`; const errors = getMissingFiles(expVariant.female, dirPath); if (errors.length) { console.log("errors", errors); } - expect(errors.length).toBe(0); + expect(errors).toEqual([]); }); it("check exp male variant files", () => { @@ -206,7 +217,7 @@ describe("check if every variant's sprite are correctly set", () => { if (errors.length) { console.log("errors", errors); } - expect(errors.length).toBe(0); + expect(errors).toEqual([]); }); // check over every file if it's correctly set in the masterlist @@ -217,7 +228,7 @@ describe("check if every variant's sprite are correctly set", () => { if (errors.length) { console.log("errors for ", dirPath, errors); } - expect(errors.length).toBe(0); + expect(errors).toEqual([]); }); it("look over every file in variant back female and check if present in masterlist", () => { @@ -226,7 +237,7 @@ describe("check if every variant's sprite are correctly set", () => { if (errors.length) { console.log("errors for ", dirPath, errors); } - expect(errors.length).toBe(0); + expect(errors).toEqual([]); }); it("look over every file in variant back male and check if present in masterlist", () => { @@ -236,15 +247,24 @@ describe("check if every variant's sprite are correctly set", () => { if (errors.length) { console.log("errors for ", dirPath, errors); } - expect(errors.length).toBe(0); + expect(errors).toEqual([]); }); - it("look over every file in variant exp back and check if present in masterlist", () => { - const dirPath = `${rootDir}exp${path.sep}back${path.sep}`; + it("look over every file in variant exp back female and check if present in masterlist", () => { + const dirPath = `${rootDir}exp${path.sep}back${path.sep}female${path.sep}`; const errors = getMissingMasterlist(expVariant.back, dirPath); if (errors.length) { console.log("errors for ", dirPath, errors); } + expect(errors).toEqual([]); + }); + + it("look over every file in variant exp back male and check if present in masterlist", () => { + const dirPath = `${rootDir}exp${path.sep}back${path.sep}`; + const errors = getMissingMasterlist(expVariant.back, dirPath, [ "female" ]); + if (errors.length) { + console.log("errors for ", dirPath, errors); + } expect(errors.length).toBe(0); }); @@ -254,7 +274,7 @@ describe("check if every variant's sprite are correctly set", () => { if (errors.length) { console.log("errors for ", dirPath, errors); } - expect(errors.length).toBe(0); + expect(errors).toEqual([]); }); it("look over every file in variant exp male and check if present in masterlist", () => { @@ -263,7 +283,7 @@ describe("check if every variant's sprite are correctly set", () => { if (errors.length) { console.log("errors for ", dirPath, errors); } - expect(errors.length).toBe(0); + expect(errors).toEqual([]); }); it("look over every file in variant root and check if present in masterlist", () => { @@ -272,6 +292,6 @@ describe("check if every variant's sprite are correctly set", () => { if (errors.length) { console.log("errors for ", dirPath, errors); } - expect(errors.length).toBe(0); + expect(errors).toEqual([]); }); }); diff --git a/src/test/sprites/spritesUtils.ts b/test/sprites/spritesUtils.ts similarity index 100% rename from src/test/sprites/spritesUtils.ts rename to test/sprites/spritesUtils.ts diff --git a/src/test/system/game_data.test.ts b/test/system/game_data.test.ts similarity index 82% rename from src/test/system/game_data.test.ts rename to test/system/game_data.test.ts index 1e349470302..f7940567746 100644 --- a/src/test/system/game_data.test.ts +++ b/test/system/game_data.test.ts @@ -1,12 +1,12 @@ import * as BattleScene from "#app/battle-scene"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; -import { SessionSaveData } from "#app/system/game-data"; +import type { SessionSaveData } from "#app/system/game-data"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import * as account from "../../account"; +import * as account from "#app/account"; describe("System - Game Data", () => { let phaserGame: Phaser.Game; @@ -41,7 +41,7 @@ describe("System - Game Data", () => { it("should return [true, true] if bypassLogin is true", async () => { vi.spyOn(BattleScene, "bypassLogin", "get").mockReturnValue(true); - const result = await game.scene.gameData.tryClearSession(game.scene, 0); + const result = await game.scene.gameData.tryClearSession(0); expect(result).toEqual([ true, true ]); }); @@ -49,7 +49,7 @@ describe("System - Game Data", () => { it("should return [true, true] if successful", async () => { vi.spyOn(pokerogueApi.savedata.session, "clear").mockResolvedValue({ success: true }); - const result = await game.scene.gameData.tryClearSession(game.scene, 0); + const result = await game.scene.gameData.tryClearSession(0); expect(result).toEqual([ true, true ]); expect(account.updateUserInfo).toHaveBeenCalled(); @@ -58,7 +58,7 @@ describe("System - Game Data", () => { it("should return [true, false] if not successful", async () => { vi.spyOn(pokerogueApi.savedata.session, "clear").mockResolvedValue({ success: false }); - const result = await game.scene.gameData.tryClearSession(game.scene, 0); + const result = await game.scene.gameData.tryClearSession(0); expect(result).toEqual([ true, false ]); expect(account.updateUserInfo).toHaveBeenCalled(); @@ -67,7 +67,7 @@ describe("System - Game Data", () => { it("should return [false, false] session is out of date", async () => { vi.spyOn(pokerogueApi.savedata.session, "clear").mockResolvedValue({ error: "session out of date" }); - const result = await game.scene.gameData.tryClearSession(game.scene, 0); + const result = await game.scene.gameData.tryClearSession(0); expect(result).toEqual([ false, false ]); expect(account.updateUserInfo).toHaveBeenCalled(); diff --git a/src/test/utils/TextInterceptor.ts b/test/testUtils/TextInterceptor.ts similarity index 62% rename from src/test/utils/TextInterceptor.ts rename to test/testUtils/TextInterceptor.ts index 466bcbf8052..089d8967c61 100644 --- a/src/test/utils/TextInterceptor.ts +++ b/test/testUtils/TextInterceptor.ts @@ -9,12 +9,12 @@ export default class TextInterceptor { scene.messageWrapper = this; } - showText(text: string, delay?: integer, callback?: Function, callbackDelay?: integer, prompt?: boolean, promptDelay?: integer): void { + showText(text: string, delay?: number, callback?: Function, callbackDelay?: number, prompt?: boolean, promptDelay?: number): void { console.log(text); this.logs.push(text); } - showDialogue(text: string, name: string, delay?: integer, callback?: Function, callbackDelay?: integer, promptDelay?: integer): void { + showDialogue(text: string, name: string, delay?: number, callback?: Function, callbackDelay?: number, promptDelay?: number): void { console.log(name, text); this.logs.push(name, text); } diff --git a/src/test/utils/errorInterceptor.ts b/test/testUtils/errorInterceptor.ts similarity index 100% rename from src/test/utils/errorInterceptor.ts rename to test/testUtils/errorInterceptor.ts diff --git a/src/test/utils/fakeMobile.html b/test/testUtils/fakeMobile.html similarity index 95% rename from src/test/utils/fakeMobile.html rename to test/testUtils/fakeMobile.html index 4b566d592d9..263b03969d4 100644 --- a/src/test/utils/fakeMobile.html +++ b/test/testUtils/fakeMobile.html @@ -35,7 +35,7 @@
R
-
+
V
@@ -59,7 +59,7 @@
N
-
+
V
diff --git a/src/test/utils/gameManager.ts b/test/testUtils/gameManager.ts similarity index 83% rename from src/test/utils/gameManager.ts rename to test/testUtils/gameManager.ts index fe8d06c2c3b..436c97a6967 100644 --- a/src/test/utils/gameManager.ts +++ b/test/testUtils/gameManager.ts @@ -2,7 +2,7 @@ import { updateUserInfo } from "#app/account"; import { BattlerIndex } from "#app/battle"; import BattleScene from "#app/battle-scene"; import { getMoveTargets } from "#app/data/move"; -import { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; +import type { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; import Trainer from "#app/field/trainer"; import { GameModes, getGameMode } from "#app/game-mode"; import { ModifierTypeOption, modifierTypes } from "#app/modifier/modifier-type"; @@ -17,40 +17,41 @@ import { MovePhase } from "#app/phases/move-phase"; import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; import { NewBattlePhase } from "#app/phases/new-battle-phase"; import { SelectStarterPhase } from "#app/phases/select-starter-phase"; -import { SelectTargetPhase } from "#app/phases/select-target-phase"; +import type { SelectTargetPhase } from "#app/phases/select-target-phase"; import { TitlePhase } from "#app/phases/title-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; import { TurnStartPhase } from "#app/phases/turn-start-phase"; -import ErrorInterceptor from "#app/test/utils/errorInterceptor"; -import InputsHandler from "#app/test/utils/inputsHandler"; -import BattleMessageUiHandler from "#app/ui/battle-message-ui-handler"; -import CommandUiHandler from "#app/ui/command-ui-handler"; -import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; -import PartyUiHandler from "#app/ui/party-ui-handler"; -import TargetSelectUiHandler from "#app/ui/target-select-ui-handler"; +import ErrorInterceptor from "#test/testUtils/errorInterceptor"; +import type InputsHandler from "#test/testUtils/inputsHandler"; +import type BallUiHandler from "#app/ui/ball-ui-handler"; +import type BattleMessageUiHandler from "#app/ui/battle-message-ui-handler"; +import type CommandUiHandler from "#app/ui/command-ui-handler"; +import type ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; +import type PartyUiHandler from "#app/ui/party-ui-handler"; +import type TargetSelectUiHandler from "#app/ui/target-select-ui-handler"; import { Mode } from "#app/ui/ui"; import { isNullOrUndefined } from "#app/utils"; import { BattleStyle } from "#enums/battle-style"; import { Button } from "#enums/buttons"; import { ExpGainsSpeed } from "#enums/exp-gains-speed"; import { ExpNotification } from "#enums/exp-notification"; -import { Moves } from "#enums/moves"; -import { MysteryEncounterType } from "#enums/mystery-encounter-type"; +import type { Moves } from "#enums/moves"; +import type { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { PlayerGender } from "#enums/player-gender"; -import { Species } from "#enums/species"; -import { generateStarter, waitUntil } from "#test/utils/gameManagerUtils"; -import GameWrapper from "#test/utils/gameWrapper"; -import { ChallengeModeHelper } from "#test/utils/helpers/challengeModeHelper"; -import { ClassicModeHelper } from "#test/utils/helpers/classicModeHelper"; -import { DailyModeHelper } from "#test/utils/helpers/dailyModeHelper"; -import { ModifierHelper } from "#test/utils/helpers/modifiersHelper"; -import { MoveHelper } from "#test/utils/helpers/moveHelper"; -import { OverridesHelper } from "#test/utils/helpers/overridesHelper"; -import { ReloadHelper } from "#test/utils/helpers/reloadHelper"; -import { SettingsHelper } from "#test/utils/helpers/settingsHelper"; -import PhaseInterceptor from "#test/utils/phaseInterceptor"; -import TextInterceptor from "#test/utils/TextInterceptor"; +import type { Species } from "#enums/species"; +import { generateStarter, waitUntil } from "#test/testUtils/gameManagerUtils"; +import GameWrapper from "#test/testUtils/gameWrapper"; +import { ChallengeModeHelper } from "#test/testUtils/helpers/challengeModeHelper"; +import { ClassicModeHelper } from "#test/testUtils/helpers/classicModeHelper"; +import { DailyModeHelper } from "#test/testUtils/helpers/dailyModeHelper"; +import { ModifierHelper } from "#test/testUtils/helpers/modifiersHelper"; +import { MoveHelper } from "#test/testUtils/helpers/moveHelper"; +import { OverridesHelper } from "#test/testUtils/helpers/overridesHelper"; +import { ReloadHelper } from "#test/testUtils/helpers/reloadHelper"; +import { SettingsHelper } from "#test/testUtils/helpers/settingsHelper"; +import PhaseInterceptor from "#test/testUtils/phaseInterceptor"; +import TextInterceptor from "#test/testUtils/TextInterceptor"; import { AES, enc } from "crypto-js"; import fs from "fs"; import { expect, vi } from "vitest"; @@ -129,9 +130,10 @@ export default class GameManager { /** * Adds an action to be executed on the next prompt. + * This can be used to (among other things) simulate inputs or run functions mid-phase. * @param phaseTarget - The target phase. * @param mode - The mode to wait for. - * @param callback - The callback to execute. + * @param callback - The callback function to execute on next prompt. * @param expireFn - Optional function to determine if the prompt has expired. */ onNextPrompt(phaseTarget: string, mode: Mode, callback: () => void, expireFn?: () => void, awaitingActionInput: boolean = false) { @@ -173,8 +175,8 @@ export default class GameManager { this.onNextPrompt("TitlePhase", Mode.TITLE, () => { this.scene.gameMode = getGameMode(mode); const starters = generateStarter(this.scene, species); - const selectStarterPhase = new SelectStarterPhase(this.scene); - this.scene.pushPhase(new EncounterPhase(this.scene, false)); + const selectStarterPhase = new SelectStarterPhase(); + this.scene.pushPhase(new EncounterPhase(false)); selectStarterPhase.initBattle(starters); }); @@ -206,8 +208,8 @@ export default class GameManager { this.onNextPrompt("TitlePhase", Mode.TITLE, () => { this.scene.gameMode = getGameMode(GameModes.CLASSIC); const starters = generateStarter(this.scene, species); - const selectStarterPhase = new SelectStarterPhase(this.scene); - this.scene.pushPhase(new EncounterPhase(this.scene, false)); + const selectStarterPhase = new SelectStarterPhase(); + this.scene.pushPhase(new EncounterPhase(false)); selectStarterPhase.initBattle(starters); }, () => this.isCurrentPhase(EncounterPhase)); @@ -254,7 +256,7 @@ export default class GameManager { * @param {BattlerIndex} targetIndex The index of the attack target, or `undefined` for multi-target attacks * @param movePosition The index of the move in the pokemon's moveset array */ - selectTarget(movePosition: integer, targetIndex?: BattlerIndex) { + selectTarget(movePosition: number, targetIndex?: BattlerIndex) { this.onNextPrompt("SelectTargetPhase", Mode.TARGET_SELECT, () => { const handler = this.scene.ui.getHandler() as TargetSelectUiHandler; const move = (this.scene.getCurrentPhase() as SelectTargetPhase).getPokemon().getMoveset()[movePosition]!.getMove(); // TODO: is the bang correct? @@ -375,7 +377,7 @@ export default class GameManager { exportSaveToTest(): Promise { const saveKey = "x0i2O7WRiANTqPmZ"; return new Promise(async (resolve) => { - const sessionSaveData = this.scene.gameData.getSessionSaveData(this.scene); + const sessionSaveData = this.scene.gameData.getSessionSaveData(); const encryptedSaveData = AES.encrypt(JSON.stringify(sessionSaveData), saveKey).toString(); resolve(encryptedSaveData); }); @@ -386,7 +388,7 @@ export default class GameManager { * @param path - The path to the data file. * @returns A promise that resolves with a tuple containing a boolean indicating success and an integer status code. */ - async importData(path): Promise<[boolean, integer]> { + async importData(path): Promise<[boolean, number]> { const saveKey = "x0i2O7WRiANTqPmZ"; const dataRaw = fs.readFileSync(path, { encoding: "utf8", flag: "r" }); let dataStr = AES.decrypt(dataRaw, saveKey).toString(enc.Utf8); @@ -400,10 +402,15 @@ export default class GameManager { return updateUserInfo(); } + /** + * Faints a player or enemy pokemon instantly by setting their HP to 0. + * @param pokemon The player/enemy pokemon being fainted + * @returns A promise that resolves once the fainted pokemon's FaintPhase finishes running. + */ async killPokemon(pokemon: PlayerPokemon | EnemyPokemon) { return new Promise(async (resolve, reject) => { pokemon.hp = 0; - this.scene.pushPhase(new FaintPhase(this.scene, pokemon.getBattlerIndex(), true)); + this.scene.pushPhase(new FaintPhase(pokemon.getBattlerIndex(), true)); await this.phaseInterceptor.to(FaintPhase).catch((e) => reject(e)); resolve(); }); @@ -453,8 +460,27 @@ export default class GameManager { } /** - * Intercepts `TurnStartPhase` and mocks the getSpeedOrder's return value {@linkcode TurnStartPhase.getSpeedOrder} - * Used to modify the turn order. + * Select the BALL option from the command menu, then press Action; in the BALL + * menu, select a pokéball type and press Action again to throw it. + * @param ballIndex the index of the pokeball to throw + */ + public doThrowPokeball(ballIndex: number) { + this.onNextPrompt("CommandPhase", Mode.COMMAND, () => { + (this.scene.ui.getHandler() as CommandUiHandler).setCursor(1); + (this.scene.ui.getHandler() as CommandUiHandler).processInput(Button.ACTION); + }); + + this.onNextPrompt("CommandPhase", Mode.BALL, () => { + const ballHandler = this.scene.ui.getHandler() as BallUiHandler; + ballHandler.setCursor(ballIndex); + ballHandler.processInput(Button.ACTION); // select ball and throw + }); + } + + /** + * Intercepts `TurnStartPhase` and mocks {@linkcode TurnStartPhase.getSpeedOrder}'s return value. + * Used to manually modify Pokemon turn order. + * Note: This *DOES NOT* account for priority, only speed. * @param {BattlerIndex[]} order The turn order to set * @example * ```ts @@ -468,7 +494,7 @@ export default class GameManager { } /** - * Removes all held items from enemy pokemon + * Removes all held items from enemy pokemon. */ removeEnemyHeldItems(): void { this.scene.clearEnemyHeldItemModifiers(); diff --git a/src/test/utils/gameManagerUtils.ts b/test/testUtils/gameManagerUtils.ts similarity index 81% rename from src/test/utils/gameManagerUtils.ts rename to test/testUtils/gameManagerUtils.ts index 0c70bcf7f18..757874f0c17 100644 --- a/src/test/utils/gameManagerUtils.ts +++ b/test/testUtils/gameManagerUtils.ts @@ -1,13 +1,14 @@ -import BattleScene from "#app/battle-scene"; +import Battle, { BattleType } from "#app/battle"; +import type BattleScene from "#app/battle-scene"; import { getDailyRunStarters } from "#app/data/daily-run"; import { Gender } from "#app/data/gender"; import { getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species"; -import { Moves } from "#app/enums/moves"; import { PlayerPokemon } from "#app/field/pokemon"; import { GameModes, getGameMode } from "#app/game-mode"; -import { Starter } from "#app/ui/starter-select-ui-handler"; -import { Species } from "#enums/species"; -import Battle, { BattleType } from "#app/battle"; +import type { StarterMoveset } from "#app/system/game-data"; +import type { Starter } from "#app/ui/starter-select-ui-handler"; +import { Moves } from "#enums/moves"; +import type { Species } from "#enums/species"; /** Function to convert Blob to string */ export function blobToString(blob) { @@ -31,9 +32,9 @@ export function holdOn(ms: number) { return new Promise(resolve => setTimeout(resolve, ms)); } -export function generateStarter(scene, species?: Species[]) { +export function generateStarter(scene: BattleScene, species?: Species[]): Starter[] { const seed = "test"; - const starters = getTestRunStarters(scene, seed, species); + const starters = getTestRunStarters(seed, species); const startingLevel = scene.gameMode.getStartingLevel(); for (const starter of starters) { const starterProps = scene.gameData.getSpeciesDexAttrProps(starter.species, starter.dexAttr); @@ -42,14 +43,18 @@ export function generateStarter(scene, species?: Species[]) { ? !starterProps.female ? Gender.MALE : Gender.FEMALE : Gender.GENDERLESS; const starterPokemon = scene.addPlayerPokemon(starter.species, startingLevel, starter.abilityIndex, starterFormIndex, starterGender, starterProps.shiny, starterProps.variant, undefined, starter.nature); - starter.moveset = starterPokemon.moveset; + const moveset: Moves[] = []; + starterPokemon.moveset.forEach((move) => { + moveset.push(move!.getMove().id); + }); + starter.moveset = moveset as StarterMoveset; } return starters; } -function getTestRunStarters(scene, seed, species) { +function getTestRunStarters(seed: string, species?: Species[]): Starter[] { if (!species) { - return getDailyRunStarters(scene, seed); + return getDailyRunStarters(seed); } const starters: Starter[] = []; const startingLevel = getGameMode(GameModes.CLASSIC).getStartingLevel(); @@ -57,7 +62,7 @@ function getTestRunStarters(scene, seed, species) { for (const specie of species) { const starterSpeciesForm = getPokemonSpeciesForm(specie, 0); const starterSpecies = getPokemonSpecies(starterSpeciesForm.speciesId); - const pokemon = new PlayerPokemon(scene, starterSpecies, startingLevel, undefined, 0, undefined, undefined, undefined, undefined, undefined, undefined); + const pokemon = new PlayerPokemon(starterSpecies, startingLevel, undefined, 0); const starter: Starter = { species: starterSpecies, dexAttr: pokemon.getDexAttr(), @@ -71,7 +76,7 @@ function getTestRunStarters(scene, seed, species) { return starters; } -export function waitUntil(truth) { +export function waitUntil(truth): Promise { return new Promise(resolve => { const interval = setInterval(() => { if (truth()) { @@ -83,7 +88,7 @@ export function waitUntil(truth) { } /** Get the index of `move` from the moveset of the pokemon on the player's field at location `pokemonIndex` */ -export function getMovePosition(scene: BattleScene, pokemonIndex: 0 | 1, move: Moves) { +export function getMovePosition(scene: BattleScene, pokemonIndex: 0 | 1, move: Moves): number { const playerPokemon = scene.getPlayerField()[pokemonIndex]; const moveSet = playerPokemon.getMoveset(); const index = moveSet.findIndex((m) => m?.moveId === move && m?.ppUsed < m?.getMovePp()); @@ -93,10 +98,8 @@ export function getMovePosition(scene: BattleScene, pokemonIndex: 0 | 1, move: M /** * Useful for populating party, wave index, etc. without having to spin up and run through an entire EncounterPhase - * @param scene - * @param species */ -export function initSceneWithoutEncounterPhase(scene: BattleScene, species?: Species[]) { +export function initSceneWithoutEncounterPhase(scene: BattleScene, species?: Species[]): void { const starters = generateStarter(scene, species); starters.forEach((starter) => { const starterProps = scene.gameData.getSpeciesDexAttrProps(starter.species, starter.dexAttr); diff --git a/src/test/utils/gameWrapper.ts b/test/testUtils/gameWrapper.ts similarity index 90% rename from src/test/utils/gameWrapper.ts rename to test/testUtils/gameWrapper.ts index ca5a67f901a..c2614b2b61d 100644 --- a/src/test/utils/gameWrapper.ts +++ b/test/testUtils/gameWrapper.ts @@ -4,17 +4,18 @@ import BattleScene, * as battleScene from "#app/battle-scene"; import { MoveAnim } from "#app/data/battle-anims"; import Pokemon from "#app/field/pokemon"; import * as Utils from "#app/utils"; -import { blobToString } from "#test/utils/gameManagerUtils"; -import { MockClock } from "#test/utils/mocks/mockClock"; -import mockConsoleLog from "#test/utils/mocks/mockConsoleLog"; -import { MockFetch } from "#test/utils/mocks/mockFetch"; -import MockLoader from "#test/utils/mocks/mockLoader"; -import mockLocalStorage from "#test/utils/mocks/mockLocalStorage"; -import MockImage from "#test/utils/mocks/mocksContainer/mockImage"; -import MockTextureManager from "#test/utils/mocks/mockTextureManager"; +import { blobToString } from "#test/testUtils/gameManagerUtils"; +import { MockClock } from "#test/testUtils/mocks/mockClock"; +import mockConsoleLog from "#test/testUtils/mocks/mockConsoleLog"; +import { MockFetch } from "#test/testUtils/mocks/mockFetch"; +import MockLoader from "#test/testUtils/mocks/mockLoader"; +import mockLocalStorage from "#test/testUtils/mocks/mockLocalStorage"; +import MockImage from "#test/testUtils/mocks/mocksContainer/mockImage"; +import MockTextureManager from "#test/testUtils/mocks/mockTextureManager"; import fs from "fs"; import Phaser from "phaser"; import InputText from "phaser3-rex-plugins/plugins/inputtext"; +import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; import { vi } from "vitest"; import { MockGameObjectCreator } from "./mocks/mockGameObjectCreator"; import InputManager = Phaser.Input.InputManager; @@ -23,7 +24,7 @@ import KeyboardPlugin = Phaser.Input.Keyboard.KeyboardPlugin; import GamepadPlugin = Phaser.Input.Gamepad.GamepadPlugin; import EventEmitter = Phaser.Events.EventEmitter; import UpdateList = Phaser.GameObjects.UpdateList; -import { version } from "../../../package.json"; +import { version } from "../../package.json"; import { MockTimedEventManager } from "./mocks/mockTimedEventManager"; Object.defineProperty(window, "localStorage", { @@ -33,7 +34,8 @@ Object.defineProperty(window, "console", { value: mockConsoleLog(false), }); - +BBCodeText.prototype.destroy = () => null; +BBCodeText.prototype.resize = () => null; InputText.prototype.setElement = () => null; InputText.prototype.resize = () => null; Phaser.GameObjects.Image = MockImage; @@ -91,6 +93,7 @@ export default class GameWrapper { Pokemon.prototype.updateFusionPalette = () => null; Pokemon.prototype.cry = () => null; Pokemon.prototype.faintCry = (cb) => { if (cb) cb(); }; + BattleScene.prototype.addPokemonIcon = () => new Phaser.GameObjects.Container(this.scene); } setScene(scene: BattleScene) { diff --git a/src/test/utils/helpers/challengeModeHelper.ts b/test/testUtils/helpers/challengeModeHelper.ts similarity index 90% rename from src/test/utils/helpers/challengeModeHelper.ts rename to test/testUtils/helpers/challengeModeHelper.ts index 5210d942d5a..4b5a38e72dc 100644 --- a/src/test/utils/helpers/challengeModeHelper.ts +++ b/test/testUtils/helpers/challengeModeHelper.ts @@ -1,15 +1,15 @@ import { BattleStyle } from "#app/enums/battle-style"; -import { Species } from "#app/enums/species"; +import type { Species } from "#app/enums/species"; import overrides from "#app/overrides"; import { EncounterPhase } from "#app/phases/encounter-phase"; import { SelectStarterPhase } from "#app/phases/select-starter-phase"; import { Mode } from "#app/ui/ui"; import { generateStarter } from "../gameManagerUtils"; import { GameManagerHelper } from "./gameManagerHelper"; -import { Challenge } from "#app/data/challenge"; +import type { Challenge } from "#app/data/challenge"; import { CommandPhase } from "#app/phases/command-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; -import { Challenges } from "#enums/challenges"; +import type { Challenges } from "#enums/challenges"; import { copyChallenge } from "data/challenge"; /** @@ -45,8 +45,8 @@ export class ChallengeModeHelper extends GameManagerHelper { this.game.onNextPrompt("TitlePhase", Mode.TITLE, () => { this.game.scene.gameMode.challenges = this.challenges; const starters = generateStarter(this.game.scene, species); - const selectStarterPhase = new SelectStarterPhase(this.game.scene); - this.game.scene.pushPhase(new EncounterPhase(this.game.scene, false)); + const selectStarterPhase = new SelectStarterPhase(); + this.game.scene.pushPhase(new EncounterPhase(false)); selectStarterPhase.initBattle(starters); }); diff --git a/src/test/utils/helpers/classicModeHelper.ts b/test/testUtils/helpers/classicModeHelper.ts similarity index 92% rename from src/test/utils/helpers/classicModeHelper.ts rename to test/testUtils/helpers/classicModeHelper.ts index 41a21a52b72..40c3d518f1c 100644 --- a/src/test/utils/helpers/classicModeHelper.ts +++ b/test/testUtils/helpers/classicModeHelper.ts @@ -1,5 +1,5 @@ import { BattleStyle } from "#app/enums/battle-style"; -import { Species } from "#app/enums/species"; +import type { Species } from "#app/enums/species"; import { GameModes, getGameMode } from "#app/game-mode"; import overrides from "#app/overrides"; import { CommandPhase } from "#app/phases/command-phase"; @@ -30,8 +30,8 @@ export class ClassicModeHelper extends GameManagerHelper { this.game.onNextPrompt("TitlePhase", Mode.TITLE, () => { this.game.scene.gameMode = getGameMode(GameModes.CLASSIC); const starters = generateStarter(this.game.scene, species); - const selectStarterPhase = new SelectStarterPhase(this.game.scene); - this.game.scene.pushPhase(new EncounterPhase(this.game.scene, false)); + const selectStarterPhase = new SelectStarterPhase(); + this.game.scene.pushPhase(new EncounterPhase(false)); selectStarterPhase.initBattle(starters); }); diff --git a/src/test/utils/helpers/dailyModeHelper.ts b/test/testUtils/helpers/dailyModeHelper.ts similarity index 94% rename from src/test/utils/helpers/dailyModeHelper.ts rename to test/testUtils/helpers/dailyModeHelper.ts index 813544f85df..bd8c6ebb920 100644 --- a/src/test/utils/helpers/dailyModeHelper.ts +++ b/test/testUtils/helpers/dailyModeHelper.ts @@ -5,7 +5,7 @@ import { CommandPhase } from "#app/phases/command-phase"; import { EncounterPhase } from "#app/phases/encounter-phase"; import { TitlePhase } from "#app/phases/title-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; -import SaveSlotSelectUiHandler from "#app/ui/save-slot-select-ui-handler"; +import type SaveSlotSelectUiHandler from "#app/ui/save-slot-select-ui-handler"; import { Mode } from "#app/ui/ui"; import { GameManagerHelper } from "./gameManagerHelper"; @@ -26,7 +26,7 @@ export class DailyModeHelper extends GameManagerHelper { } this.game.onNextPrompt("TitlePhase", Mode.TITLE, () => { - const titlePhase = new TitlePhase(this.game.scene); + const titlePhase = new TitlePhase(); titlePhase.initDailyRun(); }); diff --git a/src/test/utils/helpers/gameManagerHelper.ts b/test/testUtils/helpers/gameManagerHelper.ts similarity index 80% rename from src/test/utils/helpers/gameManagerHelper.ts rename to test/testUtils/helpers/gameManagerHelper.ts index 432e6fdf853..85d7bc0df97 100644 --- a/src/test/utils/helpers/gameManagerHelper.ts +++ b/test/testUtils/helpers/gameManagerHelper.ts @@ -1,4 +1,4 @@ -import GameManager from "../gameManager"; +import type GameManager from "../gameManager"; /** * Base class for defining all game helpers. diff --git a/src/test/utils/helpers/modifiersHelper.ts b/test/testUtils/helpers/modifiersHelper.ts similarity index 93% rename from src/test/utils/helpers/modifiersHelper.ts rename to test/testUtils/helpers/modifiersHelper.ts index c38bf5770a8..22500c87906 100644 --- a/src/test/utils/helpers/modifiersHelper.ts +++ b/test/testUtils/helpers/modifiersHelper.ts @@ -1,6 +1,7 @@ import { expect } from "vitest"; import { GameManagerHelper } from "./gameManagerHelper"; -import { itemPoolChecks, ModifierTypeKeys } from "#app/modifier/modifier-type"; +import type { ModifierTypeKeys } from "#app/modifier/modifier-type"; +import { itemPoolChecks } from "#app/modifier/modifier-type"; export class ModifierHelper extends GameManagerHelper { /** diff --git a/src/test/utils/helpers/moveHelper.ts b/test/testUtils/helpers/moveHelper.ts similarity index 61% rename from src/test/utils/helpers/moveHelper.ts rename to test/testUtils/helpers/moveHelper.ts index 68d3b3d51d7..535537b34a2 100644 --- a/src/test/utils/helpers/moveHelper.ts +++ b/test/testUtils/helpers/moveHelper.ts @@ -1,14 +1,16 @@ -import { BattlerIndex } from "#app/battle"; +import type { BattlerIndex } from "#app/battle"; +import { Button } from "#app/enums/buttons"; import type Pokemon from "#app/field/pokemon"; import { PokemonMove } from "#app/field/pokemon"; import Overrides from "#app/overrides"; -import { CommandPhase } from "#app/phases/command-phase"; +import type { CommandPhase } from "#app/phases/command-phase"; +import { LearnMovePhase } from "#app/phases/learn-move-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Command } from "#app/ui/command-ui-handler"; import { Mode } from "#app/ui/ui"; import { Moves } from "#enums/moves"; -import { getMovePosition } from "#test/utils/gameManagerUtils"; -import { GameManagerHelper } from "#test/utils/helpers/gameManagerHelper"; +import { getMovePosition } from "#test/testUtils/gameManagerUtils"; +import { GameManagerHelper } from "#test/testUtils/helpers/gameManagerHelper"; import { vi } from "vitest"; /** @@ -75,9 +77,10 @@ export class MoveHelper extends GameManagerHelper { } /** - * Used when the normal moveset override can't be used (such as when it's necessary to check updated properties of the moveset). - * @param pokemon - The pokemon being modified - * @param moveset - The moveset to use + * Changes a pokemon's moveset to the given move(s). + * Used when the normal moveset override can't be used (such as when it's necessary to check or update properties of the moveset). + * @param pokemon - The {@linkcode Pokemon} being modified + * @param moveset - The {@linkcode Moves} (single or array) to change the Pokemon's moveset to */ public changeMoveset(pokemon: Pokemon, moveset: Moves | Moves[]): void { if (!Array.isArray(moveset)) { @@ -90,4 +93,40 @@ export class MoveHelper extends GameManagerHelper { const movesetStr = moveset.map((moveId) => Moves[moveId]).join(", "); console.log(`Pokemon ${pokemon.species.name}'s moveset manually set to ${movesetStr} (=[${moveset.join(", ")}])!`); } + + /** + * Simulates learning a move for a player pokemon. + * @param move The {@linkcode Moves} being learnt + * @param partyIndex The party position of the {@linkcode PlayerPokemon} learning the move (defaults to 0) + * @param moveSlotIndex The INDEX (0-4) of the move slot to replace if existent move slots are full; + * defaults to 0 (first slot) and 4 aborts the procedure + * @returns a promise that resolves once the move has been successfully learnt + */ + public async learnMove(move: Moves | number, partyIndex: number = 0, moveSlotIndex: number = 0) { + return new Promise(async (resolve, reject) => { + this.game.scene.pushPhase(new LearnMovePhase(partyIndex, move)); + + // if slots are full, queue up inputs to replace existing moves + if (this.game.scene.getPlayerParty()[partyIndex].moveset.filter(m => m).length === 4) { + this.game.onNextPrompt("LearnMovePhase", Mode.CONFIRM, () => { + this.game.scene.ui.processInput(Button.ACTION); // "Should a move be forgotten and replaced with XXX?" + }); + this.game.onNextPrompt("LearnMovePhase", Mode.SUMMARY, () => { + for (let x = 0; x < (moveSlotIndex ?? 0); x++) { + this.game.scene.ui.processInput(Button.DOWN); // Scrolling in summary pane to move position + } + this.game.scene.ui.processInput(Button.ACTION); + if (moveSlotIndex === 4) { + this.game.onNextPrompt("LearnMovePhase", Mode.CONFIRM, () => { + this.game.scene.ui.processInput(Button.ACTION); // "Give up on learning XXX?" + }); + } + }); + } + + await this.game.phaseInterceptor.to(LearnMovePhase).catch(e => reject(e)); + resolve(); + }); + } + } diff --git a/src/test/utils/helpers/overridesHelper.ts b/test/testUtils/helpers/overridesHelper.ts similarity index 87% rename from src/test/utils/helpers/overridesHelper.ts rename to test/testUtils/helpers/overridesHelper.ts index 1c05f92a334..47358738048 100644 --- a/src/test/utils/helpers/overridesHelper.ts +++ b/test/testUtils/helpers/overridesHelper.ts @@ -1,15 +1,17 @@ -import { Variant } from "#app/data/variant"; +import type { Variant } from "#app/data/variant"; import { Weather } from "#app/data/weather"; import { Abilities } from "#app/enums/abilities"; import * as GameMode from "#app/game-mode"; -import { GameModes, getGameMode } from "#app/game-mode"; -import { ModifierOverride } from "#app/modifier/modifier-type"; -import Overrides, { BattleStyle } from "#app/overrides"; -import { Unlockables } from "#app/system/unlockables"; +import type { GameModes } from "#app/game-mode"; +import { getGameMode } from "#app/game-mode"; +import type { ModifierOverride } from "#app/modifier/modifier-type"; +import type { BattleStyle } from "#app/overrides"; +import Overrides from "#app/overrides"; +import type { Unlockables } from "#app/system/unlockables"; import { Biome } from "#enums/biome"; import { Moves } from "#enums/moves"; -import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; -import { MysteryEncounterType } from "#enums/mystery-encounter-type"; +import type { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; +import type { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import type { WeatherType } from "#enums/weather-type"; @@ -69,6 +71,26 @@ export class OverridesHelper extends GameManagerHelper { return this; } + /** + * Override the wave level cap + * @param cap the level cap value to set; 0 uses normal level caps and negative values + * disable it completely + * @returns `this` + */ + public levelCap(cap: number): this { + vi.spyOn(Overrides, "LEVEL_CAP_OVERRIDE", "get").mockReturnValue(cap); + let capStr: string; + if (cap > 0) { + capStr = `Level cap set to ${cap}!`; + } else if (cap < 0) { + capStr = "Level cap disabled!"; + } else { + capStr = "Level cap reset to default value for wave."; + } + this.log(capStr); + return this; + } + /** * Override the player (pokemon) starting held items * @param items the items to hold @@ -138,7 +160,7 @@ export class OverridesHelper extends GameManagerHelper { } /** - * Override the player (pokemon) {@linkcode Abilities | ability} + * Override the player (pokemon) {@linkcode Abilities | ability}. * @param ability the (pokemon) {@linkcode Abilities | ability} to set * @returns `this` */ @@ -159,6 +181,20 @@ export class OverridesHelper extends GameManagerHelper { return this; } + /** + * Forces the status of the player (pokemon) **passive** {@linkcode Abilities | ability} + * @param hasPassiveAbility forces the passive to be active if `true`, inactive if `false` + * @returns `this` + */ + public hasPassiveAbility(hasPassiveAbility: boolean | null): this { + vi.spyOn(Overrides, "HAS_PASSIVE_ABILITY_OVERRIDE", "get").mockReturnValue(hasPassiveAbility); + if (hasPassiveAbility === null) { + this.log("Player Pokemon PASSIVE ability no longer force enabled or disabled!"); + } else { + this.log(`Player Pokemon PASSIVE ability is force ${hasPassiveAbility ? "enabled" : "disabled"}!`); + } + return this; + } /** * Override the player (pokemon) {@linkcode Moves | moves}set * @param moveset the {@linkcode Moves | moves}set to set @@ -303,6 +339,21 @@ export class OverridesHelper extends GameManagerHelper { return this; } + /** + * Forces the status of the enemy (pokemon) **passive** {@linkcode Abilities | ability} + * @param hasPassiveAbility forces the passive to be active if `true`, inactive if `false` + * @returns `this` + */ + public enemyHasPassiveAbility(hasPassiveAbility: boolean | null): this { + vi.spyOn(Overrides, "OPP_HAS_PASSIVE_ABILITY_OVERRIDE", "get").mockReturnValue(hasPassiveAbility); + if (hasPassiveAbility === null) { + this.log("Enemy Pokemon PASSIVE ability no longer force enabled or disabled!"); + } else { + this.log(`Enemy Pokemon PASSIVE ability is force ${hasPassiveAbility ? "enabled" : "disabled"}!`); + } + return this; + } + /** * Override the enemy (pokemon) {@linkcode Moves | moves}set * @param moveset the {@linkcode Moves | moves}set to set diff --git a/src/test/utils/helpers/reloadHelper.ts b/test/testUtils/helpers/reloadHelper.ts similarity index 91% rename from src/test/utils/helpers/reloadHelper.ts rename to test/testUtils/helpers/reloadHelper.ts index e0e538120cc..5f516584873 100644 --- a/src/test/utils/helpers/reloadHelper.ts +++ b/test/testUtils/helpers/reloadHelper.ts @@ -5,8 +5,8 @@ import { vi } from "vitest"; import { BattleStyle } from "#app/enums/battle-style"; import { CommandPhase } from "#app/phases/command-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; -import { SessionSaveData } from "#app/system/game-data"; -import GameManager from "../gameManager"; +import type { SessionSaveData } from "#app/system/game-data"; +import type GameManager from "../gameManager"; /** * Helper to allow reloading sessions in unit tests. @@ -18,9 +18,9 @@ export class ReloadHelper extends GameManagerHelper { super(game); // Whenever the game saves the session, save it to the reloadHelper instead - vi.spyOn(game.scene.gameData, "saveAll").mockImplementation((scene) => { + vi.spyOn(game.scene.gameData, "saveAll").mockImplementation(() => { return new Promise((resolve, reject) => { - this.sessionData = scene.gameData.getSessionSaveData(scene); + this.sessionData = game.scene.gameData.getSessionSaveData(); resolve(true); }); }); @@ -33,7 +33,7 @@ export class ReloadHelper extends GameManagerHelper { */ async reloadSession() : Promise { const scene = this.game.scene; - const titlePhase = new TitlePhase(scene); + const titlePhase = new TitlePhase(); scene.clearPhaseQueue(); diff --git a/src/test/utils/helpers/settingsHelper.ts b/test/testUtils/helpers/settingsHelper.ts similarity index 100% rename from src/test/utils/helpers/settingsHelper.ts rename to test/testUtils/helpers/settingsHelper.ts diff --git a/src/test/utils/inputsHandler.ts b/test/testUtils/inputsHandler.ts similarity index 84% rename from src/test/utils/inputsHandler.ts rename to test/testUtils/inputsHandler.ts index bf690d5d74c..c526300a75a 100644 --- a/src/test/utils/inputsHandler.ts +++ b/test/testUtils/inputsHandler.ts @@ -1,8 +1,8 @@ -import BattleScene from "#app/battle-scene"; +import type BattleScene from "#app/battle-scene"; import pad_xbox360 from "#app/configs/inputs/pad_xbox360"; -import { InputsController } from "#app/inputs-controller"; +import type { InputsController } from "#app/inputs-controller"; import TouchControl from "#app/touch-controls"; -import { holdOn } from "#test/utils/gameManagerUtils"; +import { holdOn } from "#test/testUtils/gameManagerUtils"; import fs from "fs"; import { JSDOM } from "jsdom"; import Phaser from "phaser"; @@ -30,7 +30,7 @@ export default class InputsHandler { this.init(); } - pressTouch(button: string, duration: integer): Promise { + pressTouch(button: string, duration: number): Promise { return new Promise(async (resolve) => { this.fakeMobile.touchDown(button); await holdOn(duration); @@ -39,7 +39,7 @@ export default class InputsHandler { }); } - pressGamepadButton(button: integer, duration: integer): Promise { + pressGamepadButton(button: number, duration: number): Promise { return new Promise(async (resolve) => { this.scene.input.gamepad?.emit("down", this.fakePad, { index: button }); await holdOn(duration); @@ -48,7 +48,7 @@ export default class InputsHandler { }); } - pressKeyboardKey(key: integer, duration: integer): Promise { + pressKeyboardKey(key: number, duration: number): Promise { return new Promise(async (resolve) => { this.scene.input.keyboard?.emit("keydown", { keyCode: key }); await holdOn(duration); @@ -58,7 +58,7 @@ export default class InputsHandler { } init(): void { - const touchControl = new TouchControl(this.scene); + const touchControl = new TouchControl(); touchControl.deactivatePressedKey(); //test purpose this.events = this.inputController.events; this.scene.input.gamepad?.emit("connected", this.fakePad); @@ -90,7 +90,7 @@ class Fakepad extends Phaser.Input.Gamepad.Gamepad { class FakeMobile { constructor() { - const fakeMobilePage = fs.readFileSync("./src/test/utils/fakeMobile.html", { encoding: "utf8", flag: "r" }); + const fakeMobilePage = fs.readFileSync("././test/testUtils/fakeMobile.html", { encoding: "utf8", flag: "r" }); const dom = new JSDOM(fakeMobilePage); Object.defineProperty(window, "document", { value: dom.window.document, diff --git a/src/test/utils/mocks/mockClock.ts b/test/testUtils/mocks/mockClock.ts similarity index 100% rename from src/test/utils/mocks/mockClock.ts rename to test/testUtils/mocks/mockClock.ts diff --git a/src/test/utils/mocks/mockConsoleLog.ts b/test/testUtils/mocks/mockConsoleLog.ts similarity index 100% rename from src/test/utils/mocks/mockConsoleLog.ts rename to test/testUtils/mocks/mockConsoleLog.ts diff --git a/src/test/utils/mocks/mockFetch.ts b/test/testUtils/mocks/mockFetch.ts similarity index 100% rename from src/test/utils/mocks/mockFetch.ts rename to test/testUtils/mocks/mockFetch.ts diff --git a/src/test/utils/mocks/mockGameObject.ts b/test/testUtils/mocks/mockGameObject.ts similarity index 100% rename from src/test/utils/mocks/mockGameObject.ts rename to test/testUtils/mocks/mockGameObject.ts diff --git a/src/test/utils/mocks/mockGameObjectCreator.ts b/test/testUtils/mocks/mockGameObjectCreator.ts similarity index 89% rename from src/test/utils/mocks/mockGameObjectCreator.ts rename to test/testUtils/mocks/mockGameObjectCreator.ts index 27860be0cec..caf98b79a9f 100644 --- a/src/test/utils/mocks/mockGameObjectCreator.ts +++ b/test/testUtils/mocks/mockGameObjectCreator.ts @@ -1,5 +1,5 @@ import MockGraphics from "./mocksContainer/mockGraphics"; -import MockTextureManager from "./mockTextureManager"; +import type MockTextureManager from "./mockTextureManager"; export class MockGameObjectCreator { private readonly textureManager: MockTextureManager; diff --git a/src/test/utils/mocks/mockLoader.ts b/test/testUtils/mocks/mockLoader.ts similarity index 100% rename from src/test/utils/mocks/mockLoader.ts rename to test/testUtils/mocks/mockLoader.ts diff --git a/src/test/utils/mocks/mockLocalStorage.ts b/test/testUtils/mocks/mockLocalStorage.ts similarity index 100% rename from src/test/utils/mocks/mockLocalStorage.ts rename to test/testUtils/mocks/mockLocalStorage.ts diff --git a/src/test/utils/mocks/mockTextureManager.ts b/test/testUtils/mocks/mockTextureManager.ts similarity index 79% rename from src/test/utils/mocks/mockTextureManager.ts rename to test/testUtils/mocks/mockTextureManager.ts index ce19d6b6432..44d33cf8910 100644 --- a/src/test/utils/mocks/mockTextureManager.ts +++ b/test/testUtils/mocks/mockTextureManager.ts @@ -1,12 +1,12 @@ -import MockContainer from "#test/utils/mocks/mocksContainer/mockContainer"; -import MockImage from "#test/utils/mocks/mocksContainer/mockImage"; -import MockNineslice from "#test/utils/mocks/mocksContainer/mockNineslice"; -import MockPolygon from "#test/utils/mocks/mocksContainer/mockPolygon"; -import MockRectangle from "#test/utils/mocks/mocksContainer/mockRectangle"; -import MockSprite from "#test/utils/mocks/mocksContainer/mockSprite"; -import MockText from "#test/utils/mocks/mocksContainer/mockText"; -import MockTexture from "#test/utils/mocks/mocksContainer/mockTexture"; -import { MockGameObject } from "./mockGameObject"; +import MockContainer from "#test/testUtils/mocks/mocksContainer/mockContainer"; +import MockImage from "#test/testUtils/mocks/mocksContainer/mockImage"; +import MockNineslice from "#test/testUtils/mocks/mocksContainer/mockNineslice"; +import MockPolygon from "#test/testUtils/mocks/mocksContainer/mockPolygon"; +import MockRectangle from "#test/testUtils/mocks/mocksContainer/mockRectangle"; +import MockSprite from "#test/testUtils/mocks/mocksContainer/mockSprite"; +import MockText from "#test/testUtils/mocks/mocksContainer/mockText"; +import MockTexture from "#test/testUtils/mocks/mocksContainer/mockTexture"; +import type { MockGameObject } from "./mockGameObject"; import { MockVideoGameObject } from "./mockVideoGameObject"; /** diff --git a/src/test/utils/mocks/mockTimedEventManager.ts b/test/testUtils/mocks/mockTimedEventManager.ts similarity index 67% rename from src/test/utils/mocks/mockTimedEventManager.ts rename to test/testUtils/mocks/mockTimedEventManager.ts index b44729996a7..10f32fd4c8b 100644 --- a/src/test/utils/mocks/mockTimedEventManager.ts +++ b/test/testUtils/mocks/mockTimedEventManager.ts @@ -1,3 +1,4 @@ +import { CLASSIC_CANDY_FRIENDSHIP_MULTIPLIER } from "#app/data/balance/starters"; import { TimedEventManager } from "#app/timed-event-manager"; /** Mock TimedEventManager so that ongoing events don't impact tests */ @@ -8,8 +9,8 @@ export class MockTimedEventManager extends TimedEventManager { override isEventActive(): boolean { return false; } - override getFriendshipMultiplier(): number { - return 1; + override getClassicFriendshipMultiplier(): number { + return CLASSIC_CANDY_FRIENDSHIP_MULTIPLIER; } override getShinyMultiplier(): number { return 1; diff --git a/src/test/utils/mocks/mockVideoGameObject.ts b/test/testUtils/mocks/mockVideoGameObject.ts similarity index 85% rename from src/test/utils/mocks/mockVideoGameObject.ts rename to test/testUtils/mocks/mockVideoGameObject.ts index d11fb5a44ce..74b05626616 100644 --- a/src/test/utils/mocks/mockVideoGameObject.ts +++ b/test/testUtils/mocks/mockVideoGameObject.ts @@ -1,4 +1,4 @@ -import { MockGameObject } from "./mockGameObject"; +import type { MockGameObject } from "./mockGameObject"; /** Mocks video-related stuff */ export class MockVideoGameObject implements MockGameObject { diff --git a/src/test/utils/mocks/mocksContainer/mockContainer.ts b/test/testUtils/mocks/mocksContainer/mockContainer.ts similarity index 96% rename from src/test/utils/mocks/mocksContainer/mockContainer.ts rename to test/testUtils/mocks/mocksContainer/mockContainer.ts index 05dad327dc6..6c03ff7460d 100644 --- a/src/test/utils/mocks/mocksContainer/mockContainer.ts +++ b/test/testUtils/mocks/mocksContainer/mockContainer.ts @@ -1,5 +1,5 @@ -import MockTextureManager from "#test/utils/mocks/mockTextureManager"; -import { MockGameObject } from "../mockGameObject"; +import type MockTextureManager from "#test/testUtils/mocks/mockTextureManager"; +import type { MockGameObject } from "../mockGameObject"; export default class MockContainer implements MockGameObject { protected x; diff --git a/src/test/utils/mocks/mocksContainer/mockGraphics.ts b/test/testUtils/mocks/mocksContainer/mockGraphics.ts similarity index 96% rename from src/test/utils/mocks/mocksContainer/mockGraphics.ts rename to test/testUtils/mocks/mocksContainer/mockGraphics.ts index b20faf4ed6a..2b4a33b5e4c 100644 --- a/src/test/utils/mocks/mocksContainer/mockGraphics.ts +++ b/test/testUtils/mocks/mocksContainer/mockGraphics.ts @@ -1,4 +1,4 @@ -import { MockGameObject } from "../mockGameObject"; +import type { MockGameObject } from "../mockGameObject"; export default class MockGraphics implements MockGameObject { private scene; diff --git a/src/test/utils/mocks/mocksContainer/mockImage.ts b/test/testUtils/mocks/mocksContainer/mockImage.ts similarity index 70% rename from src/test/utils/mocks/mocksContainer/mockImage.ts rename to test/testUtils/mocks/mocksContainer/mockImage.ts index be183a0dd89..3badde4f8ab 100644 --- a/src/test/utils/mocks/mocksContainer/mockImage.ts +++ b/test/testUtils/mocks/mocksContainer/mockImage.ts @@ -1,4 +1,4 @@ -import MockContainer from "#test/utils/mocks/mocksContainer/mockContainer"; +import MockContainer from "#test/testUtils/mocks/mocksContainer/mockContainer"; export default class MockImage extends MockContainer { diff --git a/src/test/utils/mocks/mocksContainer/mockNineslice.ts b/test/testUtils/mocks/mocksContainer/mockNineslice.ts similarity index 86% rename from src/test/utils/mocks/mocksContainer/mockNineslice.ts rename to test/testUtils/mocks/mocksContainer/mockNineslice.ts index a8e10036a72..4f6b8a5d21d 100644 --- a/src/test/utils/mocks/mocksContainer/mockNineslice.ts +++ b/test/testUtils/mocks/mocksContainer/mockNineslice.ts @@ -1,4 +1,4 @@ -import MockContainer from "#test/utils/mocks/mocksContainer/mockContainer"; +import MockContainer from "#test/testUtils/mocks/mocksContainer/mockContainer"; export default class MockNineslice extends MockContainer { diff --git a/src/test/utils/mocks/mocksContainer/mockPolygon.ts b/test/testUtils/mocks/mocksContainer/mockPolygon.ts similarity index 67% rename from src/test/utils/mocks/mocksContainer/mockPolygon.ts rename to test/testUtils/mocks/mocksContainer/mockPolygon.ts index 12b60904a96..43e9c5460d0 100644 --- a/src/test/utils/mocks/mocksContainer/mockPolygon.ts +++ b/test/testUtils/mocks/mocksContainer/mockPolygon.ts @@ -1,4 +1,4 @@ -import MockContainer from "#test/utils/mocks/mocksContainer/mockContainer"; +import MockContainer from "#test/testUtils/mocks/mocksContainer/mockContainer"; export default class MockPolygon extends MockContainer { diff --git a/src/test/utils/mocks/mocksContainer/mockRectangle.ts b/test/testUtils/mocks/mocksContainer/mockRectangle.ts similarity index 96% rename from src/test/utils/mocks/mocksContainer/mockRectangle.ts rename to test/testUtils/mocks/mocksContainer/mockRectangle.ts index 48cd2cb1380..e4bca76b8fc 100644 --- a/src/test/utils/mocks/mocksContainer/mockRectangle.ts +++ b/test/testUtils/mocks/mocksContainer/mockRectangle.ts @@ -1,4 +1,4 @@ -import { MockGameObject } from "../mockGameObject"; +import type { MockGameObject } from "../mockGameObject"; export default class MockRectangle implements MockGameObject { private fillColor; diff --git a/src/test/utils/mocks/mocksContainer/mockSprite.ts b/test/testUtils/mocks/mocksContainer/mockSprite.ts similarity index 98% rename from src/test/utils/mocks/mocksContainer/mockSprite.ts rename to test/testUtils/mocks/mocksContainer/mockSprite.ts index e726fec454d..6d851330a5e 100644 --- a/src/test/utils/mocks/mocksContainer/mockSprite.ts +++ b/test/testUtils/mocks/mocksContainer/mockSprite.ts @@ -1,5 +1,5 @@ import Phaser from "phaser"; -import { MockGameObject } from "../mockGameObject"; +import type { MockGameObject } from "../mockGameObject"; import Sprite = Phaser.GameObjects.Sprite; import Frame = Phaser.Textures.Frame; diff --git a/src/test/utils/mocks/mocksContainer/mockText.ts b/test/testUtils/mocks/mocksContainer/mockText.ts similarity index 96% rename from src/test/utils/mocks/mocksContainer/mockText.ts rename to test/testUtils/mocks/mocksContainer/mockText.ts index faa32ff8a06..5550e801386 100644 --- a/src/test/utils/mocks/mocksContainer/mockText.ts +++ b/test/testUtils/mocks/mocksContainer/mockText.ts @@ -1,5 +1,5 @@ import UI from "#app/ui/ui"; -import { MockGameObject } from "../mockGameObject"; +import type { MockGameObject } from "../mockGameObject"; export default class MockText implements MockGameObject { private phaserText; @@ -81,11 +81,11 @@ export default class MockText implements MockGameObject { showText( text: string, - delay?: integer | null, + delay?: number | null, callback?: Function | null, - callbackDelay?: integer | null, + callbackDelay?: number | null, prompt?: boolean | null, - promptDelay?: integer | null + promptDelay?: number | null ) { this.scene.messageWrapper.showText(text, delay, callback, callbackDelay, prompt, promptDelay); if (callback) { @@ -93,7 +93,7 @@ export default class MockText implements MockGameObject { } } - showDialogue(keyOrText: string, name: string | undefined, delay: integer | null = 0, callback: Function, callbackDelay?: integer, promptDelay?: integer) { + showDialogue(keyOrText: string, name: string | undefined, delay: number | null = 0, callback: Function, callbackDelay?: number, promptDelay?: number) { this.scene.messageWrapper.showDialogue(keyOrText, name, delay, callback, callbackDelay, promptDelay); if (callback) { callback(); diff --git a/src/test/utils/mocks/mocksContainer/mockTexture.ts b/test/testUtils/mocks/mocksContainer/mockTexture.ts similarity index 86% rename from src/test/utils/mocks/mocksContainer/mockTexture.ts rename to test/testUtils/mocks/mocksContainer/mockTexture.ts index bedd1d2c84a..a9186783d46 100644 --- a/src/test/utils/mocks/mocksContainer/mockTexture.ts +++ b/test/testUtils/mocks/mocksContainer/mockTexture.ts @@ -1,5 +1,5 @@ -import MockTextureManager from "#test/utils/mocks/mockTextureManager"; -import { MockGameObject } from "../mockGameObject"; +import type MockTextureManager from "#test/testUtils/mocks/mockTextureManager"; +import type { MockGameObject } from "../mockGameObject"; /** diff --git a/src/test/utils/phaseInterceptor.ts b/test/testUtils/phaseInterceptor.ts similarity index 96% rename from src/test/utils/phaseInterceptor.ts rename to test/testUtils/phaseInterceptor.ts index 13750609004..fe0fbf82e29 100644 --- a/src/test/utils/phaseInterceptor.ts +++ b/test/testUtils/phaseInterceptor.ts @@ -1,5 +1,5 @@ import { Phase } from "#app/phase"; -import ErrorInterceptor from "#app/test/utils/errorInterceptor"; +import ErrorInterceptor from "#test/testUtils/errorInterceptor"; import { AttemptRunPhase } from "#app/phases/attempt-run-phase"; import { BattleEndPhase } from "#app/phases/battle-end-phase"; import { BerryPhase } from "#app/phases/berry-phase"; @@ -60,6 +60,7 @@ import { RibbonModifierRewardPhase } from "#app/phases/ribbon-modifier-reward-ph import { GameOverModifierRewardPhase } from "#app/phases/game-over-modifier-reward-phase"; import { UnlockPhase } from "#app/phases/unlock-phase"; import { PostGameOverPhase } from "#app/phases/post-game-over-phase"; +import { RevivalBlessingPhase } from "#app/phases/revival-blessing-phase"; export interface PromptHandler { phaseTarget?: string; @@ -126,7 +127,8 @@ type PhaseClass = | typeof EncounterPhase | typeof GameOverPhase | typeof UnlockPhase - | typeof PostGameOverPhase; + | typeof PostGameOverPhase + | typeof RevivalBlessingPhase; type PhaseString = | "LoginPhase" @@ -185,7 +187,8 @@ type PhaseString = | "EncounterPhase" | "GameOverPhase" | "UnlockPhase" - | "PostGameOverPhase"; + | "PostGameOverPhase" + | "RevivalBlessingPhase"; type PhaseInterceptorPhase = PhaseClass | PhaseString; @@ -269,6 +272,7 @@ export default class PhaseInterceptor { [ GameOverPhase, this.startPhase ], [ UnlockPhase, this.startPhase ], [ PostGameOverPhase, this.startPhase ], + [ RevivalBlessingPhase, this.startPhase ], ]; private endBySetMode = [ @@ -510,7 +514,13 @@ export default class PhaseInterceptor { const currentHandler = this.scene.ui.getHandler(); if (expireFn) { this.prompts.shift(); - } else if (currentMode === actionForNextPrompt.mode && currentPhase === actionForNextPrompt.phaseTarget && currentHandler.active && (!actionForNextPrompt.awaitingActionInput || (actionForNextPrompt.awaitingActionInput && currentHandler.awaitingActionInput))) { + } else if ( + currentMode === actionForNextPrompt.mode && + currentPhase === actionForNextPrompt.phaseTarget && + currentHandler.active && + (!actionForNextPrompt.awaitingActionInput || + (actionForNextPrompt.awaitingActionInput && currentHandler.awaitingActionInput)) + ) { const prompt = this.prompts.shift(); if (prompt?.callback) { prompt.callback(); diff --git a/test/testUtils/saves/data_new.prsv b/test/testUtils/saves/data_new.prsv new file mode 100644 index 00000000000..04d13a791a1 --- /dev/null +++ b/test/testUtils/saves/data_new.prsv @@ -0,0 +1 @@ +U2FsdGVkX19MR31wG/zuE2yXyoWwVbNsIqYA8Xea5s2w78yNwHxCfZgEY/TmPvUvEuPpgydwPRGJrafwX74yB9fdaanuKzcsK+EVxUpxQPBxBzGjAQU3K8K92VFNnRZjGgDPCCUbEcg8r9I04u3U4k0YFE00UP0GsMvKMwin6lfcedBV9YLTIvPCmNs9FZHGrSe7MsbY8YFn7MIXchztGCYSUE0UC5PNzHQSWPp2CvP5tabxpgvceYh+WNv8/6Fl12hIAefzPLJINjYJ5V3P2FVYa2Iz3OlLCOX4PQ739OXKXZUdLiVz2ZbRwqkVLPWNYH3yUfA6mAZCiqXVo2iVKWRzoNHPqKREgqBN3zC5jDgf+Mspnmj+X6vQ17W2yU7+u7JGrcU35aNlKOyYWvN0EirFN3rE+5fKRPcNYaYVjOYks9gL0aA1VSJ0O8pTGcjzAN91Snt8PUY3d23Q2qUrQKvmvWXN/+6hcryLfXqczJ5TIdD02MhZWmK1FIHjjq7vCmYRy8cOIHbtryCXA6kfpXGVPL4+rVFTxw64wZbrzDPwDEUXdG53s89OCWyDaxFDnwfs82B69i/ibXRULlXlXNICNgDNKz2v53y3br8Hpe7azbX0YFjQ4QpNgUnpSNjUxvnAiinn6k7ii24HNTNk9wDhEAc8iVZ0nxzqt5dvnh5K/ny2ScJ78WHxXo1a6HlvVJvYc4xE4OI8NLp5q3x8ZKSYGfOLtHO4FUrSBtmH3pJaq8mUK4RKfEIpfN3yx7ZvR9A9LT/MveLozt4qsXDWns0RKTAnU6KiwcVPCTl/RIwxLftmiPlDt/FIIFgVbQWvyfhVcXqJ6kFUctnmIi45IsP24a3blIjHucM+CBKrEpJWl7/49YO7YkdfH0LByygMa4rAX7NSzIgOjuGbrjYgYzQGQ4vhUVD/WVO3dgisc9umMQe/y+MLG1GekpfRsOhS4olJML4vOYAwyp1AqFq/XkQZL7qzB84avPEzMJLivDzeyuDoZna2Q7jfB/PwaKLJWWyvsBEAZUI+DFGP8dxNpKSF4Ax7GeTqv/CVx3YRtdi14VGgXfycrB09DXPDeg+oH9sO76YHLgBfqJ0C48Aihi6ArZTLNUuVaT6mLdGJItcrHWuOQKSMrKYiO/Z0CC/D0ItKKb3rD/SpB9A9OVeDaJOYqt/Xmg3hv7CXEb/16/GqWvz1J2+w2kLOzOq42LgY4Ps9kV1vnyyZZTN8yT5Krm4dYtPmTPD8z3YzO4v7fIMh+0T71IBDduxFC3qMPI28NnorfK8KR0k3Ood8rRZgLvKiZ0IaWrf4Flt+/MyGahk9toMuZVUw4T+2SvQBPpMdLBwHNrRNO+hTI3rXVJLqMt/wjZ/zU8HR1vvIE6dWElwrbdu/H6QBw6ZjLfMkPmtDvKWKE7ziNwO9d7LvBTvVDZZX/W0e2M3kb7c6B4zFHLi2e1XNTP0cfrC3ZfUesqPmQo5hCKP9LA+PINKUUKH/vWg6YZp6Ufq8UEZ5aSUuHsFe0Gg/E2Z0oFu+XPDSQoV8IM1FT+S3GxzSErT3pdx4OGA26r2eI5ENpTwGfnTDLJZKrCpSIQENPF6PcII9b7gJw5h5AxXqfdIYEz/7V+y6F3X0rxQ4G/iws/zlrbRh5w2U8jM3j/khBBnzZhTqF6JixdyocpSXu14YsLv0qQz3tMouyezTR6OY26xKZieQWsaJ6Sj+r8JW2DiTVhyYYd1lSrbYG9GPbAQasQW1V3UXY0VlwU9Gff+GmAaSIIlkRf2IE4UuS4zjdRe4mOfyWQk5WcBckrn7t0lc8OAXB3upBJ0e44+nJd9qmj/P7mi3rYcxvZzMXhQIbf0yqFfKMJnQSWXyQELQP7ZDKduHfVkrqJe+Y8bJu95ZR5w/WFbwESrUdDir3TP/nrolsG9wY3v6OocNSkGx8wb+OU+2KHwGlyZ0ejFmF3rD6vIIZSpjRDfmNx1AxjK+cBuJi7iP3SuKQLHS4gmY10MMoeUDeRKPB7y9tFF/N4VpBhj+YuqWIdYsjpCV8ei2GxReGt3lXkxzknHLdM7KMhKKiLUDQWYgoUd5cdzXJ75By2CAk8zVWA5wgQuBTu+FcL/QYJKA5J90IX4nV2/G1VAjoYswx+JGSC8Az7dxd1jnzkNq/+Wd8rz5oN37ZppzJ8lpmCLr1ugtS8NKTqkT/Hkn77+pFTuC21JgH/tnAFAYjEBTU3HzHJioWc0d2VWlLJsloaSie5l2iNsat6JJYyNr3azsXO71L5laWqLIwHbB79BKNl8bT2+NFsneG5MiicGPIdGjzRK1ym/FSTxsF89okb/psG6vRL3BfyhQ/ez6Qo9OMxJGqYGZEfKSBPMa/CkpP5YM5audxzOf2xmqmqUrTrey2NZiqY2vXl912gwwXVwF4o202cnGXMvY+6/iODN8Afbr4Q8GEHWxzEJ603YrQe9woehazloPEfpHo1oXymTVTvKVAbvDPxKHNk+o3JnpZbOfODS0KwFttwwuiSk7rkaxfi9EpqRms5ITHQ2Z6gzh1pF5AkAbRFS2x8Oq/8XOmVLxQjiugHpiwUfOUv9nNd57K8k+1FDCRg2uzbtgwMkHNjmeB9cAZIAbE9GrXcHo52IAeH3sQuva+sPsebGssHJ1HdNyQJdK5PwjZunF3XGYfdMRHFKJhNLAr95WEAEM2+iNZ1/san7yTg0jXIHseAxyhpTYUQoy+x0zBka95N3CUWoNUDJx0HcSmvrUjnzTGmu4r4agd3Ph+0rBcxv7Lq48/P8HjrFou/pfaBpnn3Mp3o7g6G1DAddR8jStc+47pwG8GhiMoWzueQKRgwK3I5+Vr6EJ0QYHuuVjX1spt3jCWEZMHrXmXYniygWQbuU1AUuxGzv/W48+evIp9SIz0kU9eEnogc1pRLpIp96803244jQrcXUnvofnqLCkJiwSTAJWM/eqbFvDxH99qzbk2N6NdD5uiHEbGMThZRRAZozbnN8FgBG36RY+BrcO201A+y3XWYliZJqaaGzo4BdQjD879NvLxvc4lXfgN6ZbD3TRRlilt9zNDefjWifxGh0kD1H+/q15otj1Q5RAeYuz+d9RRzMHvr+HpThnMakXaYi0j6xaSEZjo/lECU9/qb/q6Axqnjc0w4rJ9no4qmFNBGnd3kvUMvY9DvUpdhlEKRkWRsws85INMPwRZmE2hq2wmH1NrLCYoB3wAve3UcXohW8vUwkT/MC/t02Ev+iUKCbf2DlBw++RnaU8s2CKKoXTpeJ5byNSNeyhkaZnQQXqGYs/1FVNB08CFKKsG5/mQiOQHU6nzmIo5jJ9aUsMDbF3ZRr8CDrp02UHd9Oa+HFufEhW88WLCLGtAPo8YZPDIWaqrJ0mYI+3+ZexsCi0s1MyfcBuhGEoZ5KrsSsLOiyrmASYer7u8o44mqE6KeE5XNy8LWdk7rXoqrb6ZqzuKqqBwf4ffhlEbj6YypbXps2gpNCESZ6iQf+ZOfIYRvfr/PXP0spkERXxfAidN4OdC1N8WlPZeTs3zpaJMK9BIV+UQB6TiE5bjJCm2+NssY+56qXCYg4zvCix5xNSl2HHGhriLOa4oM4jGSuEgq145RSpU+mB5xpz4XcdhOhRihYMeDR7klLVNnVcX/mbLWpm5bgMqbtXSa/0jBRbos1MfEzA+I5NFx4lIXvMb06gmGUfnd5eqakSjGXWnqaJBFlIrXdiIaTSu9KTVkBy2/FjYBnSqwwkVJQdVbXcTVsrxXWkjGqRO8G6TgxtVfPD7ixvRtWPTS+jxDr3rlaEeUITVNWYQsnZGgWZfWVu6/GGhFYmPLyRZZvrzMqi7Y3orVgUiKnaMmavEaHVVmeuy4MMn4SDmJgQUZot6qxOg7xHil+u++5j+fUh9VLLy6uKiM9toThogPCOXn8nBgbcogQnM1lOITN6P/XvwS6DtZoT37KNujDMheSyMz/NI26xyi+5jgwVbakQlSgD+9sGCnlsQ+avWXW2G2xwYj7DQBwfb2G70Cqf1EjAkMU6HuQZy1FEtxNWDmubMkQxhS9x1pFpLqF9LHzqylR/O4HPvdTzUHgSBL8USXpD2IhGBRC+stNQ1M55mpyuDopKiMUPxQYvq/CrEC1+kk0C8AY8Dll5A4zS9U2O6w4BURVwLxUrnwNXouPIRo0ngfmY+ca131p3gEX6X5wZIZpFs2eZnwZQn1iheyR6apqiBLXCU8WnXX+vKmsZ6WsNpCsrtXpxeqAK6nir8j5fd+BBPYjb7MG3MeJdKtXwOB1iqP0rlcIdFgS7hijwdtf+i+aVQILcmq7uPgRYSQbC/fIEtrvZRehHa97+jT7fGxEiTI2bPbK15CJODJK0/AbSjkddWpYz7KdhjewPFZ5KgSmXOM10bTe2Ifws+3VB+/s247tVqnSrFXxzTztfr0Qg2gjDYf5yWXcfIDmnx503EUWpmiT4/XShS2CLRmti4apLbPcRtxqlJE5R2jt6ovY0pRsanmNYMUUyc8AdLsP5bndvp2y/CdmFJ0gNBUEEV+cLp2OsMA1/7f0pRXkSKosc36F+c8HZsaWKvR6hycGTPnRAWd2V+eSNQJADUPpKL2JIeMO0zrD8TWJzmHR3VZj6OqJp0fOBKcklQXUlbfetjkF1G1xH5IKtaij4JJfekAJMKyGPd2rRcd6YrM9eE8YEQGbbdDrAvenKGYJ2gGvHn97dQAzpkei3nbCY1Poc5A0cRY/DuREE0PSMZT95SBVUKgrFQldoIvhwpqvcMlVb9yYSnfY53uLrIouV87fgG4XfCXVJE57ISNtb03os1CLTUbs5fInHZqMKNy/T/TTPDVugxPFNeX8a9Etp+AX/hY2QquGs0xscpyBpUB/CJmgODaQrdipWFPw7z7Cb2ZSZogOaX4xH+4wYBI+ejezc51T0nmSBKB4DUIVc1RaHubQytYxhe0i9sYyBWEDK3izd0Xr3bpnC+MFwaSFsgOhx1FkfyJel7n/uETdXNmCmOaN0HBh1tux4jLL9HqN2lXsh+VSsA0PuWPBA+ZRGtbMs+3X3cHZyKYN7eamJk9or1xofwFW5nzywM8fm1aGIShHY/drDXibHkerxbj5WQFzpbbTRYKQzu7w1hppWm4okrybGihfRMc5CkCazDLiU3Zs3043aI1QheQgyBXzIwFMgCCr7JFSL1vV4SbkI40iiCYLhe8XNG0K044ZCSW41RmxyqEXkPgF4SCcpf6w7xW27baBluIxt9SuS3zc4qH991x688Ec+yNOVHj5C/lqqE5Xs5xnyhDnDL6CH5FMZ9pezk3+vlhxFohVpzTbFtCXuTKFXrAGBePiaLqkllVJ/o39xHM/s5tqeEp3d0mvA1mRiFz8lVDN3Cqzwg9noeA/dR+B9M09o/vW76/1MpA/VDYtcmqesvtLcfQ4WmSkoyxYhdDnO4QagDI7zGRPcLFHSb2FdKiopcjTcT3kUYEuFQ+ZgjDEX+l1YoLDSkf5eHN6xBTXY5DFhuMhEgWOS2edBubFBUf8JX5MPADmjDrbBQr4KuTxPk2RojBDRHuBh3UlNCAUak1bWDh2byeLPaeS/8p6WYefGWD1npDbGq6CDLsWQQVhFswvB3PujaRZkbiHcezxD7vo6BvaWYiXdJUdSZY3d6f1V95ccICkc9/ig7nMQ/bh1/f9tVkfMJicgPGbhzpVDPeNps8vwMFNGBEZrSQU8GS+eWOdnRVHUwJuTgtdjn4LLlyBE5ugwNrRXXkpWkcvvFQywnD3ViSE1OlMXYP6dLWcxWmWLGxj1q+6GXqyd6CPHtmdMowNHqsAFenlwcmr0vEnOSoyGcIcaI/yjzsezKkOthM7JVemLMawLxg9381Kzlij0paqMLoZQMQ+iO078E7sSbPX4EIR/ghg8AQSr/wF72fDE1n+WyA5tV/7CAK2+EElHmjmi5fiNRO1n9mrrbfKZZr0boE9uuBYXUxq5Z4CDRXy7h+AxW0kalw6JRj5uGBUBmq8JlBUS6/3WLDQtyawgQVRNdzttnYH9MW4biFld/xyeYPYPK5Q8M6u8HKCoGOwpnv3gkkfHD8dc3GnnB7P14ANOD77Fk/cv+AmzzviG1yY2oFHMTg2zQsL3nDC/iAYdYi/FLCezD7XOYNFW7cEXOi7heP9dOGDWzUBzNpUmv+Xr7/T2FWEBrvgmSaO1m7hCeSZCm3z0Ihkp+e9dernIWjY29LQS7WTFwAxgHRRwJtLYIURrrkemE6UqKPej23dZ0u2vz5p6i2EWVGOz+Zx/MZiSG4GVzTDOK//CX9A4a23pwMLuJLWesKKDeyKTzrHvcMAkeTqkjaD4T2wJ8gH7A+lhdA6Xy+++YHgxRAjH45vEZ5OnJnp6TgExr8EmBF5mfwuknQEukFQLRy8T6mM4aHuzwRqrbJGEmJnNxCC02ZCnwSgvU2UpNEMvKd4dKnO/zVzsHEonykD2BNI5apoO4J3b+l9dSIqJa1QHFPs5kiMvkCfeNYugreMJfSdt2C1BpgLmOHRmHqNW3GooRLtWEfh5umJsqFBY4iRVnnoUvLABXGbjHTrz1eI1H0FwH/ayHoEGjHHw8+/XG6G9PYPCOrnNjnnG956FGaulk3WqbROxyQpx1EJ4X3pkVB/OeMap1n84CUOZJqQsufK6i2vRd5ZPAepwqnAfmtpAuBehN5cD/o4W/YW1SEctOllJOo+QdzndLeZWJH2i9ZJ+BD7dJjbp+zGxQxsm1humDt21Cve6SgqiJhYbJX1K2tv14HL94IFXID9VjgGfoRxHcEBTaMXcDrPibuxuV6A0UkWiovazyn10mFqpFC+Kbdup9BYuHISzFZElGtDjFpwRokSN5VZ+JWnvGa+5ZPAPu0BbgKaxDGL8kJKhhfMyw33C8duRlooeCssTILa2bp9gTehLbwAkKJahBccSQ4EBAV/fDfdIiOFcCnSuL5LIep1G+vCQ7S+4bblcNy1kWf/PgYHycPUPmTnE25SYiQAAuAdeaRs0ebx4G+j5IRfqHATs1QGtk7N1FuAhDPJg+vbLuhadkTxMInYD9WdROuS1nOva9Jl3Q1pv54AWKOKrmlWNfpnTZ64CYdIs6EfsrvqdAkbgRwv3/o7gb8aaru/FUnwerYCRy5tQOYSj2/y+vgBjp2psAIU6H6Vt49QlTa9F9zeaH0uJowyBzXhD5KzflGoKudXSNk5ucGp3BWP3rv9Fn9eTqiRserX8ezNbhfvYJbYJ4SZyaHXXpLyg6qfWpT+I99Ti/LHLtGRU7S5flLPvRVLR4ZkRcs80zqDyB7uIenG7jTHXpzg9pemwd7VtbuTsv/2/erWZnpLbA64/AWViHRkaSSLWzT/90p9XyxJ4XMxpRUkB7UvIQkip8DyUSj+gqIiXpnTc8IxRNfwsPMm00izPX8ndnOPEWeHSWas9oHjY5aHt/j15NMu+c/uX3o96GB/DDjEcNYnUFLh1pHDmiPEg84lHq04eB6AsabbeW1p4O1g/gBmTIC/kHjJIqIrdvowEcFdHLffqmz013kCxlwh4PwSrlEao8nZ+NfjEILbILv8qZZ53VAk+UErDmk5zXauW+Wfwa6g/Jmt/MoV0hbqmZPJ/7CmZwaUD1yVZ3PhJzkdp8Sgos/Zq7OePe17FUKITdor74LT7nrvmVNpj4uyJJQ37V9vBWoGmVhA1RwLoJfbxA1I3D5IihQc3v4YP6Y2RNn4x3ubaKoCsxeeCyzS9qqN442iQI8yafnrldoKX3GgTX5DexVcPZzg6JJFbdvpXriDU/s+NvsRbAKvvOCppIZ9HfiPAQk4YjO1J7NwEEUYtqDFwUAGEYGYxYt6fuiuyJE4i/h743I1TWGejSPCewLAGxt12zheEn309n2AShfaZHSMiDsDKzj7tnQEIfLq1LuZDHiuc8IfMomsLi2J31TituPF2DDcnWu8LEW5DGylGc3ht/ARrs7nvz9XCqvaqmJ2iCwOBiFi9jddJT5rgbdAyVXWgToZ9CUS4+txUIAvk3rIFJev+HO3nksMFT1iSLi5x//QyGWYEywUoURQ+RLaAUPxRFdrzNa75jsI6eeH37AUQlZJ8NkH+9HKPh+/k9jq4bUBUSxIr6Ub4Hhv05R/Dq2ZuItq1afVmgTTgPPN6OsSgoU61uOIYICYf3HkC9hzUfXd46dLZE3KDCfeAUMMDDzNfV2megjziJb23JIP7iQ5TV5/Om1BnFIDY77FCXusBrADSmoItHEzGW+ow1tplDsd0FrN48SAkVg9PEwxM7xnd8xZ1DFYF0E23VY6+7lbqA0V8WTh/6YWtCgH8ssJcVgk+h9/wLkWD+hW7U/dbsxoadLtm0eFf6WtQxKHdOLgS3asibe/Z9lRlh+NfkINZ0P14oouFBAjiQz/hTvcT+0WNno6XkGKN9+U+Qfse5G2RrmhuoHgNOHBlO0I05vQFUTT70hQaaWW2YxZmutbkQT9uMy+HvzF9faBtFzcnkxNL5GKYcMSaYRLFp+DgWYh8S/HNOlyEGIRVAX+cDskzMYcCY7AWPz/2OG+OYBA0rttFEtRqyIjmYIJLK3rsIHkg/qSCT5/31Edg33spn3KJ6pbyIcT9e4ZUej8nOfXR9LsrwKIfiANpWgOCjvLIeVR0AY2sI1hMIWRFMU3JCYiJrvryKDfuvcRWapRqm36T3tCruHg0m0NfaSN+o5gSwuzz9uZGgUxiIK+MiP0Z1mMqLFjWGIxy0N4QNpdQ2O5PAK+F19jmlcKK2+KjYajg4bWXo1/jXhDLJS9veY66ca2VRakhx91t4WpZeytjZxdVxUsyLFm5ov2p8ycsN23dM5NLvdaenFEL2yREUqAuGsHw09c2DrvzfqvzdQfWSXMnVqRKW5alcJGNq/CdMSM7BGo7+/3nG6VFjyzcgMTpET5wW4Y3dHkizM7EQ3EBCnwCZEp8C7Yf9/l4+Qg/iPK8AuZH36wIqin9vzRoSMXfEnnHPqSXLyBZd9A97mdjjvycOKqApdSeCGXBJLKurNLKOrfy5X4hQq2eliWJTzh8EFPn2uUlY3Y3ynMefh2/GHp5QKajn7/1hjsnXNbrayhYEs/HeTNkGkzwxMhyZPypyUIPhgT0hNN8ZtiIA1Lxbq3XJXyK5YbmaVknNf+wlJxJNNxNL2HMPQ+OUNXpc0wqOxjY0XvI70llhw7CgK69YI0xV7u+ULKwCygA+xJh6EcoOGPpn4PKs0VPUcB5c2JQBgehhCNHwhrdNX6SoH/b5Bj/UlXtQhVms8DOKDzuLhEL25huCgVTlUAQMmGqekC1t+e5aTykcczISk5nILOPc6iZO3sf9r3E2DGxwCfsWOA6eO/zJuvQlVqdDjzQgI3FZiD8q7yk5PiAnumDEtdJQU5SHeiiTSfRpVSt1ivd0xdeRBkaWxqbbNBqU44E+LRQwUz694mnmZhkqhStpZBQo5+v8gxENNdmoTsRvaFNo5CdjBN4LsP75IbEG1A3yO4JekeAgeXNljEr8lEQbInC6fVjwL/yYYdNro098riB3ve05eEMCOnvnY86TtfGu3TOlewhnqW3k0AlqTZ/VwfE+UKSne9+ELljZlmrbhpxRmnQxlZvZ7ZcC1ZMEFfU9/2bAFkC7AKTyMSkqvJbat4gsZA89fmjYZjWa1pzYsB6m3qWHbE9MASTCtW1dcpd9FYZNlBuyKpcdiIUZTH97bwwXLjKdmcWSVN/DZzVOfLcbKf28vGyvqizLKjDH9o09cmYT568cGqX8Svim+LWUg7MoQKW7By/cgN2beOvLqpAuEluxrkLrrI8rqpQhfeziYkwPDT8qaVzx+E21uhFQmJx2iE8qfLIsLVqqXTd/motLJta78A1w79W/qttCyf8zCg/7tcUMDOQeHaxidrm4xIOD3kthgUSKgM6aVFDfspiYv39j3BEm70to7IMhQ0AEBG5cNbwXuPHk/VjDVHr0oeIc0pb0VhPAcELpR0rTmZQptLiibzSBTDa66XBXF8+boUvsW0cfP282oVypMTUpomSuDTNPtic+ZU1BmvAtf3m2gr4fxgYFILMdtHcu494744lUovm2XdYjKcXAVU11s8kLQ8Tp5a84rVpWklXUcrcHTVFnfqCiP5RQvy0cWtqt3FZxrEMe1EO1u79jGBSBaoqvWh1VVjOfSWL6/848ETAdLyqeoMhKDqE+NVVl7ej9dCTXVnGA8rav/0ro5HKitlozjsmPZS+ZKwRn0MDefHuRtPY5sYerxR0VgLQKdXYsFTIFt0niWDfY6/tRLeANgVdaY0EQwHWGlDl9+KwoPZ4+VLL9TgZcq6lNQ47UkI/xRE/E3ejPb9A/ijj19V9T37Zs+Tt7NV+DuFfTqVPNCZmTcYDwE/OMiZDcdU1eVz9GNVeqReIbb3YAfWsi78K/KMFOMfiBoQ34x07wNbQd3Z4tejda9TZvpIaUGmt7y6ANFrxnvSWNbAY+IoAOqKybymCm1UGc4IOUTKDr+7xXkOTbY6BhlWbFvMuQDDMkwAKKA9JZjRLG+ArlOglFfKW4P7uCJjEC2Vcc2pCti2QYKxZ7lutKzuMHsU1U2E89DapqOKvL6LeoIiDsOZSRuXLLEArCDjZqxqW3pgPFqJmEWgtDBUOxck5RXpcMGS7es0W1xculNmStrgSHSyNpcPZeA9pe//zPStqICB6KfdaiFx45Cg1iLt1Cw/f3DTjwolp5dEI79JMVQFWGDUxyiTIOIUvVF58J7UcbiFa2cVzMXzhx/CBhKQri/56OG1XfwCTTy4BZMtY0DVKlNQl49lsYcBlLNdkEM9yY5j4pOWSE9JTOjJYfJSyt2GdQJrTXD+qqVs4MAT5wHcnY2rTMf/Ie7GB4v5+IO8nM6RvIzaLNzeu5sdc9KjYr7XYeiwe5UNJnIWSYnmLGio7elmURJHewvuQr5744/vOObboyVZEBR/KlXaqfufu5QrhBZ0JdOjKq0jvWbX3rp7pmHL+OMbv4dwUUSjGSPFmLg6c94UuFUqaSnIS9Aq3Q0xJKXEOVRA1M5pvmCNM+Iybxx0bIt661em72Eg53bELJrJ3skVNdz2PB3qcrs4MWgZmO6oHDrtrUUecRmTByAS63YEJyF45Vdyw84A1Mhn0hLmIMMALXPLTkrVs0phgiIxefkZdgGbgVCU2LXxKL1aPbOUhBcD9rYcNVhLTPucbPfz07BQgG7Qz9PXir2tWZYkipN0gRc3LSIhpk+R5dMOl/GT5/Ibo8oDxCCU88VrpOMIyQOu0D5hURey60MACnli/O6HQv88a5JB/DrmWUZxYJa+YYFyUc1DCgD77NPJ6ws7F1uaO0WOBrYv0AvlYom93mwmSMO4uwo6P01WkoCbkYW9SENSnRN9h3nZSPgq2mc8nhrfsFK0aX2htHS5xHfP6z/miHYjLQQoSuwU97FcRzMnLw3qsoFSJySO02aa5sfd8orhHj4XR6ww7zTyeKkohIIxM/DCTQDUD42y19/U1fgXfA99KHVuLUEVkYQo5yiiPqK+XFvHC7ZUJFoKyxObpSQPnP/85o9GcWc04wyvWWkkvAMg+vtvsaGVKzQ1CdNarQBa8GPiEW92q6YAnD65x/eU/e6/zItgBQKADSFSk4PKLQwPehhju7j6JUAwp5GYg3SSdDWzdWZ00mgWF6jsLBpEl0faSn668vHiCUk5p33sv/QQ982sF3iU8R2QcM+5NjwfLpS7TpoXrdSYniVbHFwb+p2lhXBocZeuqOSd7Ng8kzo16zT1JD5ObrJvl/qmWeyCr8yuLSchCUx+whOXY8s9LUv5Jj5JQoqAlCDM5kXe5g9G3mMXcsHHmO/rVTneDxoxMEeBsCBt8bTtXqI8aaGaV+inY61MSvNXrzv4TDl0eyQJu4pRUn2hmFhHi8ps2E6f+00YXp0nygizHJXZCm7Ruo2uldawOjtBn3jwxokMBeTy0mfXCx7hkWG4A1umiCEHuFORvIrIuokezaIdQmgHCl9JGbI9byz0P8DTDXEcWnmFp58y4mdEbq1LrnrUarX6OCrNJG8uli916plqTHon0/vbCb/RIO96ChErdixTKj4QHma9tXoad0hJmJc9oHXG6vbgVh1Fqc+mM99gaRkhg4B7LKCcmQWIqs8dyNJ/j1D5bGXk8SGOV0Gr7wQ0bGkhRCij0xudlkyW3P1J1krQmLS51CYorERwwA/CeviHYQIUUsJ07MZZWiKyhhQMWOuXwTrxSzqqD6aAkH/JKupIcj9I6qf4Mk1k+pbk4stITKKE1kGXxwxGX3s4QOThm9VVrJKD2HgjivOR1z18UIF7FH+IMhlEQ+64xKeioKtVXBtSuRCGRivUh02nhiYOu6Qs0dwWL1hsRRSYfYXDD6BFQi3RoMDmogynhcNs/ORim39vvv/riekeUTtj/mTz1fVrLtpFuJNq5q2C7y1ogSkSuHDP+zKPFWmgJKHMgKBGH1f0pYkG+8n43yCgiyrMndxeHSXepwRGY5ZNBGafjL1JZ173mfVO+IqIzN2NIhIQtwDocbF8Br+xZyANoWGcxdmGNO39E3xq9VFvssmf0ukW9k3zlxLccX0u1gEt2zyiQG/4zjscirDdv2WfzKhlXkeMV8KIINsGu8jLGMARt1thTcL5olzUM2MvbRdMlVMFLe51vbJlNrdAs63vk4B7bK79VsfVXXr9dpUaIMNlat5qi7baah87jE/pmYDVnykHDH7dCJIq7zMIk+wHbKU2oWJNDnNPB8TQUbaaGwQb6oy/OCYX0rwPNiQptfrAmAij9nzGq3vTPVzSv8HJisz6ZHVMI/BYNG+D6Cu5LpYlvEPCJs2/qFmc1X8J+Lv0Vu7d6naPVeqsoyDSsIzJUZlC1hSeWvU6AvOUjvkkCBtRTRwG7+T6Hd4x0SBCKR5vWVlJTXdYcM+JVnXcKUD3qA7X5gvviegTb5AKx8DSDuYKIZ9NCdNqpxxwJr0dMlcuA5ESNhg8SD9hvXiopmglnP8A+5sUqaM/WhveJaCR9W1bp6xDpVsKUk68EPKvOuE8ZD3XSmNAKAZrePJrAKlAPrxkx5Wy1rOpajZ/P9ah0r5ieFnXNc3K04iV0AD0EmvFdpEh025iF8HoL04L262gs1LahYrxVjv2R3Q9hSh4Nwk3Urr40k3DRAGo+NrWGp+rxPDhb46PebwUB250MvluOj5t9bjScL7VYhH0tQvKGTG5YKN8K/T4m78duLFHeOAl7uMRZ6oSB6Tjt1wQaX1g/+r7O7SkzyyUwX9C7gBjQ1a9dALi0eFZhGZA21CVjxX1z/PF+Yu2D06Ul/Wdc/onODCUmuBsamqqW+6Umh0dlbaHIdX52EkAxNloxzP6FS3HZnB5dgAJFHds07suPLAbNVsAQ2mm9JkEOWZWgJ6JE0edLURHqePh48hEegpakPh4lhTmOUcLtuYUiK9kOgGiu74mkuSsHHg3rYnoBxUWimf/8zqdnifzLKdpGWvrgBHUl0ya+6pa/obS4iI4G33dgSEOytN+MA93TiT7ZTaUAcCllKIK3hDtrah/PJ8BSNVvbl39AjWDZp4586ggwHRYpomnsnunb2s29komHDmUR6zm0I0QTscE8Ox27n72Yt8+9lfMlEAAeSgiUD3I/GUnZjTNX+Wtz64lFNBvJv82ye3FYijW6AikqDMN+0hHRevEt3jRxjcwNJbDwPfuA6QTIqaCbmJu+Em4N6p97QhFVbuH96FoaFogS+26rHksQsp2XaIsBrFJCZ1xPphupbB0Ab3nKje3by/o5/uGM+55fOnIvTIaAFHvm+boUpmu6wAIGVFsfNnSiRMAuVQz1JW+VFN6hnQApiIdrgyt115aGDjvX4OnHbScjbsrHhG9N+6X8ufleopAgFUSb63mFPsnt3ChVEdKL+k3GruqHoNf4FqFFbpYfi0jnO5LHBwAtyv/DdRGgenT2aiLdaQQlHbAWoXF/bONVOY7b7m7xylgPkK/Vn+4UhRTGFm5cZuNibNFqpVsfZVJd78wewnpoUrlTAQyI7aQRIpiEKvqILdH500bisk37C0is7M/+9W+S/jNBh+Htn5sBPs11yn78xL3MFIsqnhKSuWrVkODMyvM3N+bwzr+lw5rcK6eNjhrizm51NJBDz8clr93qzxuINvstW3/7ZgxJMRd73HqWPe6NMA3gk2n9ctvG3R1KYIpM8afd/ZkMU3UObwH03EFVZAt7SAY/tMKoo2NQlZIGqQvDddGCc4B/7o0vXEDSAOrJPGhJQKQgCh9yXQeMmbe24Uagdpt3mvbeCVQ6DENKnanTSNFwHoM0sELhllbqUha3w+WRc+PAujk0LwchMGrZyVFtBxZtHV89v7tzUjwx8aN53ngpGDsvPkDJAA7y7VH7eI+FiXZbQKyUCx2X6tuiSdwJvCIylgD9+Cz8W89RO2kyMXa5jNfJguLySL8BQcv7QMe6w7Vkjl71ZZqBcPXWycRDEc8FehJshGbO0G32+O/dXEBM8nlHDqPyeidEPsNFPw3jyVbzWLXfqMtX5fVbAjR7WrbPq1unTVYmlCiQDLUc650LzMKUZRlQPoN4FoC2jfpFHAkkyETg77jB+4BjlXMQnEQUc86PBtyMZbqTqcZZsjZ/a18XYF6RSCj1yiCviurRhA5iKXwg5LFE97nGZzBFo9OFMyR42w2F1+ggyNICb1EiPu9Fxc+Fq8Wf9PVmc+zzcAv5VOuZlrC/PTo9QOq+OqRMDsaLuStATNHueHR9WftY4gf65BEdBQTcS4lPOxeatMfuecWXh7Olm7+u4hXOPymgx79n4j1bGW+23SuQuYALQkZBd3PqEz2fqdUltrM69nlXrr42nUy/Dh3SOGqcZ35bBtHEgMjAogh15b5kvxVzh/1JiPvAMP1+IJJ2mF8Wc/QPIFUGx8ZJ2/8mGfzQ1WUyEevS2o+8Mzbr7UNgnW702hfz4unfKhx+8m9W84TIYb88k0bOyDrm07ZcKwx8NUHyfDFhPXTWgWxtpYu0AZxAyw9BnKF4YieJe92LI4q1+kjsnva+LHMxIKvQZYTaqwv5o9n/wHLNccnpC1EG9dPr4Jd9t7/GuXeG059Acqs4b6+/yy5OXjK+QxA3i5hNfvHFdaTyTPDgEmUbSnXE+ibDCNWbb5GP8LsCXIPac/iAC3ji8zRbbF9c3vToYtu637JmMrhzFquP91X20m7ZNm9PDUHS5+oe3xPLgv9dH7nHmKullrKci4d0F881Hdws+tTQbGMs+YRd93pw7alKhZFjvEhbV5UnNjHHF6ZC1tBYz0dlT64CPVHvqw8KsFxchKtEgw/HCrIpF6/Yn8YAy9IISWcp3iomx4oC3phxjZIWGz8gvIrkXG0QAHvObj5+iScZMW2YtgMk2XaThaulkIAgIWv24bPDJDwbrahs1wDCzyw5xSfjC8mEPpVTpA076/JIasO4AB84Iromq105vCONdH3+mG63dME2Ipagke7ppEZmni6KtT7uNrjwE3L+hfbjp/bHG2NJ/Cmka87PYBBRgTnrG4TAdWNwDngnva2rLXk9MGMGyMwDmw8tqVRiML0XQev8VbHNpblB0qnwfn6nSygqW9YSwUlDJn9uwiBrw1qnrIyRAK+VIAF6bYELqcnziFUtm+cj0gXkykO9bPi3y4kILQKgLcoxk0j1FACOvsbQYI2wQJIoLrXaZz1wQqICNKiGuWBIq3L4+edJzUg01Lcr0lmiDAFBZgwLl1NFa4micTya7sm6+cXe2rzvAu11RN34uIftyWROTKFtAtcRiruqI3Sf4bMlqyCTOauLNxPF4ogzakCVqO9wu4aZ7oLD4MguN8+muTpLth8Rl5QA5AFiK9szaO9LCm8eYcN9i9DsXNHvB7cLVXDrwFj7nltsNX/qJovIa5sSQLIil9T9KdH2Oh+/KZpSXl0e2ByBfFcFGBd7sSOPcMwVv4mo1JeihZrzxvDlyAZKM2z3Dle6JyXfAPRecZiJpy7KIkQzyBtptu/wWnWfD9Q0AtVm/HqDYwnQ0qKqP1XaQnsloL9tegNhV1L8xnqxtPcqmWgA8NboQ7nkWKq6mjcIegtU1ej17fM4oLqDUDOAqRR0D6EFkj/0lrOdciNHaydZySPIBxuEMbfoAUi4qxvjW1ZTM5Y/JX+2NfLLOOBoZhtRNU6Uijf0cEOP6WvG8ITVm0O9fVutObq1Yi7uFMOdqfvtNoSCByD45HT2G3zNsYSVJ5L66hfwTeCZ8pSLj77ypZ7s0/QSH7dxMheTir81WPAgz0CTdNzJei5xJlqjApct/T25RqsNp0EOPdQlnOUrlOKUnhwP7s22JA2vh4hGrXNVpjfGku5O4/Y4Vd1UrWcGWGsY3uvFOyK1nT9PCYzeuysxjWGSz0HAQ0vOGMXDw8/uoPXD2Ss+E24BdDmkdj0qbPULZMSZEo71J4M3AmI+/mdoxnvOjdlhWeZHxvRtrfMpbFeLehS8cr7NLlNOPJgcPdx7mfc0GRC6+BnUyGx84sflOdlQ685VoFoI32ZZZ9hU1l+dymfL2up2bFT3BWbhu3yjBKfpsJEKn7nPlz8caR6EH/c7lbJKFfpRY+fgB/fqOkDmhjfONpBQJxYmEjF4KyikuFifWi0uLyyQVgU1j8cLYipxyNdcst8WIPgLYkPOwOoCKjG5RBrOXh54FME/WCF6QBTzzQHozgT4jXx147vcRTxoMrm2N35370+p3pkD2uYdgy2HF+YrG/LLV9O5CtMYKemSFL1KNmEwiWr0giOan/b8C8hSTID1VU5h1VKvt9OXd2XFQIhPq2kFw4eFB52wSMPxOIJoFllry+fw7lDTsrBSuhFf+duyDxX2ZYaNwZyM35IyQg60+2iW4gwKoHJhQ6KBsmFPn0WJqMeCN1n3HHH9BaWr/oEnbe/X8WkeJohuYaZVwpr+XgpDTJEY7nwmFyYajC+CfcE73V0bSk639rTEgDo1NyDhuOCqByVILjq3A4r85nrMLHvtB5k+s6vlDKdqFakN/HtHvlSiukane76+wWDpqu5Kxi34AEUJQ+OJ35Me8sZrqH6J2dM061hzCnut4XUV31tQREYexSRhOT/71oCHA9e11wcYmoi6baFGHwrd21Oquk3t8Wrs8+z2SjzXrLtdh84DWtAwXFCLwWiKY3Rr5UK1AtyGstyEZLQUCvQ5iXSzpmyVVCrOGe5orEV6u087bRarb+/AxFdiBYedG1x6KNx0oy81rTehCb12s20wW4WWVR4e+sUMEAA/Jq2z5OZNyXScU0EXEDBW/yMXz9UVsIjRjZagv828YA1zk6KTiz8dQS+qkhv6NFZ//tcF13SLVOvsTqA27UN24xiGl/ELgfEGzpKEuWUk1BLSwD/Sr5B0JCsDZYc3xb2I2UzzeFiyA7YOlTfovDsjiFQ44MMR1X7V0Jnrp1XPJqYEqmvZRsV0pAPRk3GfO1iquOiZl2pV2Rk2/4maeqHwM9vZmTFICVL3FEA5JQcKSsdDVQ5Oznkmd63bGQP1uRDpe8RJy37fxo8NDsu2hjFrwZ1fLPucMkip+uzRGv8Y7mjNTMPZ4mXctiGGfm4uimf/Qt5bQuCZdjG2wWtDAJReUY9oStKlUz8UAXjWveGl6V+6LmvGUnJKVck1fPdpVEjFgnecMfPSLyI5bnNcQp15NJKmxVX+cflnKYIwccJxARnx6p7cU0T0V6Zt9XvjwtEjzuQvqiGObkqPDlJC4NLFZIWuGuZGK2CWP/kH3P+T13fniSmOTrC5P8JnmY1BHjWJW3/LP0x8FlW8KJs4wG1qrUsdvJgen+43eyyQmWAobyc6T32sx9ZPKHUg8edbn3qAuHfzMqobhcMiAxyMUFOndvwsoyIfHawLr+RnRG6wxQ1LDgYnYONXj2XoFC9aB99xbO+nCo5JtnKfQK9+wMe03YaeHrwr2FNZdT39wF0moe365i/L9i69cyacW2j1awAym2txh5FFMVFVEcTiGNOVL6Kicz0po3BpLUukeoxRUqqbnwz0uRXud479lMLCzY6G3CyMdAtIdITOxddI9PNMCCIvPWc73W6k4iCZ6PYWnRwVg0GAQgAkgavd6pk4PayW6oCVBSrpk+n9CKMnVuX41jV2PHV7l0zjod/CvnWGsyUSZM1phTzno7jD9kLLxqXgFkVNy8Yi1gn6fQvn5sCFsaj/Du9m23Ros2B3QqQYN1Btwv//5U++wQ0uH+MUsO95U7Sd9JN8XKRVVu3SlHMfNwA1Ljdz7sRhVVGjULyqh0zI722OET0twuiaO7hrNQxcY/PoY67Z74D16wBg56P4Ounu5ixwcRuKbEYxtBw7wzvNxbUMIIpp84BHv2W0G3cSiC7OUeN+cfS0gRJ1IcWMjDB6ERjER5yBu9zVlgoevYawlhIyz+gc/cGz09J9/3b7m+1+FEQco+MMe1NuhiNnzYXECOExjm6CM/cJx3riGpEZCmGiicrjPOEzrZ/3ZmR6vfRxt1Gge+gauorQsSF5NOsGh2xENhEemx2ep9JthAsUAFWi85orOZeJ7amtPcnBiqd4mxtB7CCki4I9sZPAs9jPjcZ8nF/9NdbT75R4pb4xW5kqr4k50GXS8Eh4PqveCGNECzAbkbkO31S5raWrOGsw1BDwZg9pxp9HrnOQbrL6sycCrJeUSUSwAgPqETR3CPRUNS1b8/SMQ5Z8e99r3pIGyiMGoLEzn3gOlUvEmZSLePPMcB+uQUPUpFWsJTBv6oGSO0Y1pSHrijP4tJkZGmY4ASOsOoAxpYZ0lCHrp91HrSSjQvqFQy6m1rgVRjOT+r0q059GZxyjf37Z5FJfgbLJf2sY+QDMr4V/+yQU0J1UOf9ord9iL9bNLtQyQ7Ryog5uSzAJLfZDMjAKv2Yt9S99yVKkpXANHWgoQ2sJTETYeDDjNj1+Ep5uabP6h/6n55fXbToqRdf1RVLXodrKBlOS443qONQc3yOkhPjSkrEB0XN6MWLu9IzP2Vs5Q90FOSx5N58/xWZZucm7QgNkvgEGuRL88Eq8LTc2MqLSCIcZQXHnLGDDbT6txcPaVmRoOkeaCAFi96ZhseYOH8MdVsvzLLgDXmBNQfUtLAP47OVeIQwFwGRQC+uHw/upAfOeBATq2k6XtF5yidL9xL+ptfAchuiU2apGAvPVpGwLG8kYWaP/Jk4i2Nx9Z4b/6kiIaV1JwUKo3yCr5+dhsuCTKzvXUtVm/4ca8bLc+UlJc+S4LE/zn8D+nuIMDBbSmzQ2qbi/lb7+KReG8lp0JR/hLCwap4zf0xMAOMpwfEJAGpd3B71IWS1bA8lEeLGzwn8S6FXOvJ2Ook3tFUKWzpCUl9/tFlIWvbQEnbSX2blfLTNyGXHM61aMhB5snjhrm5kis6qwjZoBJd2YdrcrgpVJCcGLnoY0guyxTR98Du730ZJ9PBWN1U7+sKEds1fulKabygCbR6wLWyZrkLM/5XasHfq4pjWukXBt4RIM8JV2DucISxdiYEVbHOOF8/ICbD+Qff5ymjwtwbGY0mRLfHN1oeBEPAZjNq0lt4+W0tIgTbNyB1imXS1hPF5wNkh8PrM/kQ8DwylxR5UkTWj3yeWvaR8LqK63cxiXrhZcCCgd0fmmJ3sJEGmrsEYhXsFP8E006zeiu+6ZO07uSYwBfnI6kG2dU7URH/RFUyWA6dXGTxeFAvWUG2Bc/lINtwZnF1o83MauR74eIp52r+5WBevQfEl3QoyX1CvL/F9zS1uomW2L+SwQoNWs7+M8Gk2YUZmWUJF1f3afO9cxPt/IRQ9l+0NQmRRQuOs1AL2iimtsVNPm9ScHHuxL6Engmke8AVDxqWEvEJuOxRzyNWMPRX8Px7bgQzVIs84VDIvj8NtEYde+3jL7lsvmu0uGcbmMmAEEQBxiC811LA/ALgcD1Dmp6kikPMcVZ3XdGry6SYKPLo/oYFBluNgTpKlQpAYgV0aFCEC8KKrA9IoyksfEgrao1YM+vMF51GCHdtdqAPBzZH0q/nN51rOwNZXELIV+VbmVJA6wSt0yY8gFEa1Fa05jPWv1HuI/B8H+BC0uWpvO2m2OcBCh5mABIKhTJlN5+y+dzjo11oYkrE8V1YBQ3JiPfCoG7IILXhmLXS4APYJGyPN+uBvJbop728Mitew4v5wq36reZ4aYrB2Z/F3Aj4Y1DL1PZaQDtgwzWNbBk0twmok4KiS6JlztRFIzkj6bljl3bwF7paFRzc/xHgKVG7g68xbSqbb9F1x9b8GS0B9F0z8dWVCg9jazBkKY1+Pjs59dq72yoNwSwbkmyBdc/5Evt3Riu9Zskg+swHyttp9XIoq9KpjT62rCGoZKqlaelHapBylRHRR7USMmmVs7VgVoZa0Kx9ioV3tcdGn7YvXcBIjtj/FAG9VL/0AG5X7CuLtDc4NjnBAm8a+pmhnQyfEd6AsV26ETPwhiVpkXq+mDw5AuLh0hlfMEF6yZzDKgw0pMG3QflNeWMq5+401qYZK6BPsekw0hdi/oOuwOI7moC4daR1T5nRIWw8H0zpryIQQT8UExolnsleT+IJQuKnJ6KpTK9JwSH8Bo1ySTl5Ee24P5U5eYDAHR8UEInGQJOMgpZcC1nFIWH+pSObq/tF1FU+yKoKqkTrzjmGljymXoJ3S0hbUPJjXwBe8FN3xF/u8LucqE8EfmHLJIA+ltRNYZhIGRSoEOh5PVvIF3mCdDHzYY+nbkWi8NtZUzN+CPQYUCJOV1IIp8A8Lh1jOx9xuxQEyXWjhzjHqYEn1dLwWiKUkFYvRDh4KPR+Nrf6K23V7rU8r7fJYA9518Wg79E17eJKa8Bir/r7yIPnArlLUyuxHR+puKpvwXgumPp0HOa5dgG42bItlZtNeAT4QL7KRMW48nb4GE/gSFhUajIPaTRTG2QFe42IhwAMcI0AEjJS8lOAMWh8Di/G7ZpuUnnqcaPJQDZVgZI1MpbdRZ4iS4Y4ByUaHxQpvUXUluS0o3/ow03hpzUJ7sGtPJ5oOYwWVjr8/aw+KaIPGYZEMyMect3Fwj8C2w9XIl8Fkd5+XPMUV+xYo89K7vDxHriBjNAhXrJCdCku2HsgfGc69gYJgloAhYHafRQsqKMtgokG6qJiL6pEtoTCyJPXWcghHgv1Yb5nHOrlOfik2AY4lgf6/+kVYR2l0Tpgx5hzCW8wo/BCWnsooscIoz8dNboZoHtKYHv0aKU0b0LfBXM1KDLAFq6W/cucTTABZ2X7/eT0dqPxIkWbRqPog8y9B0D0QeC5ESch+3x+Q77EWA5cIyKb+qzRU+wS8lZEbXYdbulXU/IAorq5ttUKGWVAOFPVNtGsDUt3ExdJXOwqkdZdpTa2ujkS2eXtkyFkNMixBsdk8R+rthNHt57SesZ11m0fCnRdIKlQ19gGrMJ5HIO+BMU5We5R+if5Im+boRdatyOF7QPRnL5VcvL978DMo/rGVFttVbbZtep8LzKF01nQeLaKxJptdCt1GyJ5WaF6s/27Mn//ixvMgBUT3PqH87t824gSfH1Zw0Od+ZTGm+fnssjHFlKKpYZ5EdQ5EKQNk1z//bOXBrh6qJYvSHAyQKqeaoAcqV594h8PQJacu3K9jhm4YojeUbyoX/dApFs3VftiHb1KkVF1Pt8YoJxumc0UVfnw+RuEzRSnbC9lPxLnP/ISPPz4HvhW62+y57LWsUYaG03jTYbBalQQMbWkD/zk1ldTn4EPgT/yQmSwSa0MFw/Y/16zja4KCMS4+EdbJTNJgdsD+5F/gKp3kZ1IpuGE0y4hBXCQW8J8+ejjMaHV8dJxlgrzsnHmTA4XakQoYtCRi7W9t4xbP8RWg44lSHbQbmveg+QksMWeYbVWBlPXZF6Q39TJw6qS7b2K/mYfw6rHqu2eQTYSD7035XsAVo2Ua18VunwXRtwW4b028K+SSZiKtNsNg7hDtyrFP884/tEiikGeCR99nwjOXNZ4Y2HZtLEfvmQ6cd9teTIcpH67PkuXlpsAThqUbXhHOj7twG0O2NrRP77r3SfKF1aI2a2i7N7SrRw7ORrzU7RYFfEZLdal2B08gIklb2sw5Ko1CtyihVB9OJGmU+9hyi6LXaJN31Qv50JJvie4tcL+oV9ttcslJ9Ti+aRToxfqaK2lqtPyZ7x9qgtzGGokKfuJCasbo0rvli23vR838JuTQLFfiFVv9QfFucRE982JhAh3LHMkdGo9GNIPSXs693YAiYKxZbqT7Hczv5QtARb1ePXEW8vMfuxuEUdXqi03qOa8ZTdGgXQp97zZPYZrOE6O2/qZ2eRRArY6BQHSXKkudoTvNlCvPXHRlR627erDU+7rQNxjOUw7CJ858tuRlvERs/zBHq9Qpn0mmtgooZIxKd2rzyJx6cu7YbwiF03cpk/Ch60K4Pj7T1uS5s94nmxE2AGQHQkxdWQQTw8TpLzhR68+F5F0I5ndE+ZDHxeJFg3lRv5hxum6hi2zBwihirv8Gn48+2UEQNq2sOinHAHEA8DRuIREIVRNzlofUETIrrb5EUfTo5qJXH5D6jiE9dxUKxEF6BFd9xnC5wTkOsCpHcH9Xr0sUkxNKnmyO2bSGHE9vKucdlsvI8OmEr7Ix1RocPR4GGBpcn0XcWFk6ZPe3OsLPM7/OupcYXG+gji9QGkDkHr6iSPQny2d6ll8UxRNTNiLSZPec+iC79Ga4a24+a/sB3m9RmGGam0vQvDQSx3A+OIWzK6abHbqH4mInTVtpwP9ptVnXYVKT5yZX+C6AFBS6e/56gXoI3MABAH4d2taEkzaq6fNV03HMWo3GHWUzzwf6C9+1000QjveKWDpAhy592677Xobxe5+JpEWlvqNVQUCNc2wccnJjU6XIgkEOMe6I/8c5i+jBA3pg7vkY6+tRTtEtgUejOzpvqDSdHYzqTzJoNQgueIMk2i5t6Q3jvpuZI6q6yZ65khxnuiiGN8k084kGBwyOXBcdm2lGvBFGagZfdoEqOs78jMVtRX8aou3nVy4oHFNj0ePL0VLGJTOvDEiR/fmib8H733IM1SN7VuvMp2G6+9jWJFP9G+BWCbYrevC9mRo1qfaGqQ+SDpOMb7u79ORZizoZwYckDFVomK+Db9dWSO/LaQJFcvtok007wvgoVqA1v8nlwMpVjv6Md5l2SXMMEbN8SStw7sTUkI20sNjnWeMXQSpK6E8ukcQnqylEiVaB0TRa1COUZJ4p+yqOlhnrVy3yGQ8KD6ty0foLG8GqBV1wHjrWUcm1CeXIIj2UHaClC3E91rfdmREiN3cFnrwHAxF6xKCunBc+det4xsQTmLsm7tknpdTNekQ7K9Nz5EkEjrRxGfDOCy6oVFglw/4M17sCzMNeo4ihiQ0ON7teW6OuznECLGEec+pmDykcEmLzMn/v6KRoNMEuA+Qf4hXoSt4Zcs3Pl1g/FEX5kef1ptXkYU7pmoTmHcB+slXUnki42Uayufu3vaRallngZi2dWDM9vnwSmwb77CxGC6WOlNRBAX2CwnlpN1m7U3JFkBsLlb2JscfcpP633Ep60LwCHxhRzQrJ5EW/ivGGKXGdkvC1YCO8GsIg/bjpvVhhCQaBeENJyMsazcPI9rECcDyfLFgH1Cn2y02aVYaRXvCa1jL53Ck10hSoUuoyV3ql/Dl0HNpt5MGkJZvgwt+RdWpT/2knWiXwHOOwmzu2kH/sypg25aoRFiDb+jN8HN5KP2OKBKefbZhWNwBMl8Y6FzV5kp9q2P2ThjEoHtmY+eBvHOFCL2woW5D0OBvmARNmQInlrQ1BIyHggp/+r9n8hmFudZFnEk29LvhI9EGJdBiklD4k1b+ZYo5zs8Y3/qn1NuDEKKOn6CyASW6D/mGPH2ceSRzKK4Uxh6CS7VXyucmSdFd54bI7Gh7zBTIgy0VjzKQZDnslSIeBjprugPdI9GisnkZ05x+mScitflkcaA2Jkd7TPOdHyomtCjgxmjYsQcoD6XLz4IIPipehsyT/A2lW6qmeGnVi+jMFC8LtkaXD2Z9G8O2/Ku4bbYldpnvTrwEJMpxnhelxh/j/wyn068pvNlfFb5cGbdUyJmqoWr0YGbHodmOUb/p0ZlbGNEjH2mGe18O1oq/doSq3olLPse1IwbPOOCdrJ+yPG1UttMEzyAx0ugAI3tDwiFHexdZf2jp17pILvtZfWy1EdJX0j3JFr2ZgJb9/D7lAWfUooEBNcQmrPJp5lTbqJ2ih9NveAlGRTV4YxQ97VTtqjGMtkSEBfhfE8zQkt/LxFUhRB0wArKp94fidWIW5E3tUdMWYivbn1BGmTZGPEd/5/p2eE+H2IWcK3TnjceApnV9Xb5OPlu3UU4WN+TzyW/2sCMbR1ylCXwD9Yw6aViQNJjMIX56TFpTJcwd6oNAEEJovBYpGmLDkHdHwPzfoFJwfPeuN+GV705Eiv5Gu46qJ5T/aY8qFFI7w/rR+2tVn5guNNPExhZCZpNdwZwk2ucS5em81nNLn8EeFuxlHFTAyfheQB3914IoQGnkILCH0xfnckjDCwjr2XOTpsGNqxByJWAnRLeehS6MCXXbS4YrINEjBzttda0vNTQ5p1PKg9+TQmu9v2akpyaYfK3+sLen7ZCJfirOCEPN6/saeF82ouTq3MSKcvQXbnkh7htrwZCAKsj3OXgKvs4uoJH/H5gXy0/c4dXYXO8mpoEWLTfiqpYUKNJCn83P3HQCtIjr2sI8k6CMQ/ZRf9KFeQkL+uOD1K4QobIK1nBGSbpRoDfvzn/n1AIdhXSRvFDSs1fTV8hjW3rQzut9l9i3ZIHqvDG5V6CaMecyx8DiouKNp4VWpj3y7Phkg/97HC7qyzSu9Tar4R2HZeCdxZxCDRDVymWXiki3mvi5zIIHUEst/nD+kXAHJJEcM9ITtgzdww9ZBtdXfKxnoMyAnCv7nxtMuSJ7xeEvG0IxI6vuG23pvytWhh2bXVv/gZOBwq+NKoLQugUB30dCGXREGgT1KnlFJKrqJpL3xVf72nA3qcosz+T3cNyQxCrHUTFmiHduiiYKhtWS0AFT35UWiFWmwdj3SEgSN4SdanEADFNkJN/bgp47vmW3JQGljq+eq4do39KzONYrMMI7J96ZS5orTlzFoFaDLwNuRcGgb0Y6bEa8iNX6aw1jzWjfXaO+3Erh2oyuMuiHW35SvWlAQ2sVi0u1MOR+lJiTujuI2J6TdV1n+lkxRE6SL8WCSS0tBLaTUL8S+oNgPn2ErCxYghmNkNx/8a+BHyWngjIElP0Qnt/eCSWVXwv8FD43zoXJbdLeBqZRxpT5Uc7dBR3P8JNBBXnlmmJFFc36Nrg6g2vMhW/kO7ylcHAGyczWrqLJn8obbTd8biVtuQuqvKeJJtr9fydPA3Xqlq/BOYMiMNquPNzg/aDqTERUE6PoLwL5zY+M7CkqXVspu6axJhBGrmTnOGQMyudI3ZeADgU13Qe24//Fu8fexfdtZrv5MZYrwYp6UbURFRNM5dfPEo8pKsKRuU3SuHj/ARGuH/lKTKw7hjVXiiago8Adtsh7agl5EWKD8d67PKjENmPNMYyO5tQsWrPrkgTo/l9lamKm7vlLzEBBsfn0vrilP0CBrRhKQ2alMHA3aTOAgclp66FVv/q87H05txtq8S5MTayqMkOPVi49JOs3jg6l7R2my5lZEDQTFjgUQ0bVNT38Uz6TZsEd51hhOP8hiW2VyCA7Ru7d3UTC8xiBYhMvLB2iZA9A6m58PoRZXgx5ZIc+lh2+dFbiSEc93ySWNSj4pdzrakbgM0e9dlbTfGDP84NMw55MrrOsjYMfjpmPyx4ma3Nfo0vXwzpJe4+ASNeqJwgBc7EwcudgkTWEkBnzYLZqrUZ2H3tx4QngZluViyHVk3Y+r6M1JMfacZ2BB5B2Wd2THPEl1jfj4tkaQOUzHaWBXhArS3PPD2j6Fg7mX5vLJGL+IDxde9YpOLrnVQR6VIJIkLzgYstAAGF0yDVsL24pMMy7lWkS0zec8A4CncvMWF8s4OoCzV67Lzc/cunPvliC49puLcxST9Uy9Pfk4j2OKBDw3BSgeWpmO5Mp8ZNlGW1K2iZrNspLGf2Sd0mANjtGZCDb5jkZRQTyYbTWp2PhKvx8qWVc7BGT4AeLDJDxf3TYgaSo25KhSMr4eOHbXo36AFpXBiekt4xAY0/TMZ1ZzT3IlxEgueif1dhTKuQR+4bHA34mEakuH2fggfKxrxQF6M2vpFxjRK5BIoG9uc0eFQ0iH2MzaPJWiVW1KDhTCXyhylt+myGef/sm3tcikKRajMhXi4OYE6XrpGfE1ifh+fOBSIkPwgU83tpzPpzieeyERWY/iJLJ86bF427qV+1M2Fm/ezx08UW3u0g6YUtqZJPuqu8kZ7bEBbnUcQAhvTv/iwh2eMzA7+gsx8wihQU4j5e/F4kJfxfep8D0mkfyZTXiT8S9qymtFWfvJN7mPdzRhwMZjYZEx+7W6rDL18pOPZeOD+aq5gqi/MmAjhKMMCTu9AxJHtJLXe6PCLyjZnaVDE4il0OhfkmausuMNnrFFnCSs7IGeesSsHhqmia23muku9zEPKJfZAVO+Ou+hkJHncesUCv1ua4yKLHb4uDwweS2QI9VyirCkkXMB7UgW1ib/pNMEbi7Vpe48SPtvyNPpFUETQiWY/ToOfz54zc2HBhCYge0nBcU+vkmW25Y/n5jBkKV+WgQ7WE14bzrtEbXG+wTiiOJZqfM/nLniA9b8IzwOUoOhnR78nSDIUNvYZle845TIQwPcSUemOyMhqPmSZni7pBLH2ztNLB7FX0omJiY3eCLu0nUrKnAu8dBxSJPiy4DuzCFNoCwob4T9SDDglQKumJQqukw1qGpTVYqW2VCEeYb4Ui3Sy6lQt5kiXorG5RSnjI2OTDkFwMat2kO2j6wbYjdeakb7Ml6NBOgHggPKepEeXPA6IBZqgW8XR+v2oK3fgfVs4LkQPC+f9CTi/FI1VRNnLRzjHyIKc3nRV2QWDeoYB73GulUhK8wFliIDfDCbg0gQ+KVG4fHPbJqnAhvGkVsVs8+ik3uN5a0x4/rf1JquWuQrY1RZqbqYELVV8+BSji9VIqkdue4sJ8aQ3xK/Ea06Lt8pd9w67IMlbnYqfpHboGFPEeDwPDIanRuiPnd97G3747Pb4yyaWlSt0VNjTxdTaaAB4VuSqOQHFm24/4/PF+LU2JHQEhxjf//bhRJoTAtVPCJ0pAdMGADb/qvonjeT85MjnurlRTdHkFOtXHtlAjjAjYSSeV1K1iYhanM7NPedMAWzFnl3+rVoxpfjtsuNhs75k5bfVFPJs5RNUs3OCDJMaRoedJozqNLIQageQn6HlMbHkFnsCVlphHaUEdVBnGuJxNWEkrcCnwB0L3N7pXB6UgFW7RdulGQwOa8yoRMBcDc8lIToeih9H4Zwp6t2/bz3bOIfl90UjdhCLVF5o06kf4hVE4m5Mtx9gyi8EK8is+XfIZgxYy+AIwR/k0TRZrhPjxh5SHQIA63znN2JzeLx4CT1fxlAWLybSHVlgLDAEye0AGSDlErBvtfjQqP8vQjxlSi1IfRnt3avXrIJ6ihrMLZBT0zfHBNL9JU8GWjdhlWHSmdpBRY9p89Ssqeb8VcMIRblARt7UYSYohKGOPMhIA/5jrHxQYo3FaxwlZC5fmRPktt+mXd/j6RnwWttMdw28BtpI7rM9F5ux/SF/wKQfcvaJDR5OOkEo5CifDBMbDhkaLGxWONHra8wnx9UCWYa4RaBBd8ik3wPQB0WAY+oi8R0Zc5waKP+VIeE4/fUzMJtZMt9zfy/eLYeP0FhUHQt5ZpFrZ/UEOVzd3m/Pk8yaotbnNmK7bulBcQlocCBfSL6eif3GSuJ0MEd88zyjB+VmMJAAna6Zo6+dk4M3BMF+DX/46DO8MooMoABArRuo3uK7MOyTVULhM6lvQobpA8xe718NxQ+/iGbUIUf1m9Q8qGVLISH800H0n3noNxZYct5XfNPoClk2317iTpSvVXH5Ju+KRbWHDbdom0dseaFpSeJZHi0Xk8ygmXPA4iLTsY4qCNUWvVRVpHrriJIh/8ozukAJkCv9sKWGmK0idSLb4BvDMSBiH/cNUgp1kMpt6BYFT8WDS2/NJxWFBxtq8LyyikRD7J1Awo29lsJe2uZjGoMSte0sQ8RLeS3Sbpy+5LemV81J7eDCXneLbD4DMbClkTvw6oXam5pX3ICAUo6uvAHqzmf+FsEUNLZiHe22OlpajSSIlLPtfeO+GnqUCVhVSo73MQkivm719u46vxc2JWRSFbUeGX7Qvh8mWqEmj1ua6dt+I1fnEyrUuPcgQWzPs2tpY8Ll6NNH4rWyA1NkxHoV3ibdpBMp/7mbi38SVCiLfqhexREhRLYIYlkrfpSbtRLcRanVS0iXx4Wc3OCgmL8q6Q/6HtLVCluTQ9P0dj5K+m9aRVPvmwN+QsBu04AzPH0om0p7UmQHbJBFG0vOyRkiFmcn+FIye/oQg8LUjqft6LrVq4f/ecSPWjIV/ePTiYJFqOMclGT1wNBtuz/6IYLbjm4tUdOS/B2Wpf6A+uaIqiza6QKfjDEufb6WCudauCDVJQ5Teq4sJuB2JmomNjouy7behyAR6ghC8LPVcU4z4zCVDl4DLXwEcIlDmkC6ukcoT2Bw6IK6BvsV+i86Mm+wtG5NCLGIBJZDKmFyfUK3rcEKe8PnmCCKJsLLom6TSlAPRqrF4DD6QhknYr375bh1eAjXqdG9TDD0uIzMuBrReycMKmk+iL+Os1XdYCGuqF3dtEuGw34txkSR3wcLwiDgkDEwSHFFWxQvXe3NAdRp4k4zGP3MMmbTAGbgd0JnRLEtaAHQV3/vgkO8hMLc0NZbhbtHJBfHh2p5kh9TniYVwX2TmDpTawY0H/HuHizGysrCm6YYwYX316V4PPWGj+LkX0mJHnmCemRpH8RC9cU8ewwlYtG41U2x2OuszjMNApdMv4RhGK6V1o9ixodKwoyVjszfn1PrZ4DNRR34kSZTuRKZZZ1JM2XuAWafs9wXkRRFSg+zzMmqtw3ahLkAhPb9NRBiC0U6jmeBEtplU2P7WCAAMA3kKe6ZTs2NRNNwEcvf2jTGuw75Dacmpiknx/FAm5YHd9PRtTv4Zod+3p3zkfZNQ49B/l6ThFN1/rG5MXtYqQu5GLbV/TSEyCZ0TFGMirpLCI8gORYH1TDTYS6UvWtBd+j9SiIPT3d4Z9ppm8Mpg3Kq2oikK6FnWVehjvJKmQ8Q5aXWoNwydqmHp1RKyrbM82gh1pWTJqVkUer43nDz3h8/8bUXOSZkHy0kxIE8SdqXdGJ9035FCqw1CFF4UICTgG6shC7dQnjg+jG4lc5BJpmwBC7Bobgk1/z/SqnJyXE3FtIw6Ll3u5nvW2nWsI/S4IwE7n85pECT14ebBng4rnkuGFzrtozVph1ZaPrjNc+aieoH1Ankt/gNGbawWY0ySMWG++ppqB5uvUoGaTj40g2jQbIIQWakHkGL9nnF7dACmVRfoEwkV1BFQh3SD7oyY0TbUGl5c1WmcTQFwFOXLwsrciY6gLOK6fxKyi85WXHICs+d46c5Yw3+uhunHaJZW1tmsCwT6nSW6suyabolergV8rD+9R9a3Pg7UqpFbjeUaOIGt+X0Qa9Q+NMkB4GbJWMebZ2JgKyj2+vUaCJDf5TuW23Tm+mXgeTQpdHz4ZnfY/Lo4hDabIVQTnprl1R1KoA1i4IL5OsMTi/K/EYGRvinH4M/sqvO4TOseE3h1pQlBKjxsY1EcRI34WDUTbzfDDTGISXU6lH4TgGBJpUstwtwJ+X+dIl2lTkr3rROXdxiezmyESky8o6WiCQDFNb7jBUU8hVeEQp93l4eLfKrNfgySjMeWowz2ZVr39Wni+6TeqGg/5tfrl2P1c572Dk6EJ9fA5OcAIt6GyfkrSzwJgPquq4xJKn1qK2zpptMJNf5lTuENLOAjOkvGDc1QZCLg/k2ezfwyL2B3I8nEjocAAQnBOulh3GwWjimzO0Eawg1vrK9C7YByele7hdKN9Ra10xfrYf8C1TZ2d4/yyORcPURkhBJ7pZyBC9yfiXa+Gg3d8ldkLPbqLg8h8SA12jv7GK0Udh+XCcKxaw08OAb07s/xOVgXJvBTA39GiqYKjSfD2aXUUhJNukRCkCPK/NHmiJMWiGbUPRZYTz7TmKGbeJvE1wjcUQXa39XzjIBWi9x4QdYVJxxra3S7GTMK6JwyddIz/u7S9zky5unPImOIanDWg2ZHc9UZhqngtfZq/EK1vQtIpz+OcgUoT4jbSUWPI1HZu3oV/AfSiMES71UpeTjAhkKnlMBcGRK6wKT9KBcZnlOWlUd5TNfZziWNlf6KnVqsL1OOMCgTILG0AxgtYQhG5LBZadHpWcfTYxAMjjLh93Tb4r7oC/KqjMuUItJcjrYazYSNSUGJufUv9vp/CnFmCd6VPB7lGBnUHp9hY3DCFnKvNcTuPrgOrnd7sbKTW46/s6xSiL1+ogPWsjTP2N4/ij6j4FVcqjG7nygak5xmmvZQIpEdgWZwByIRO1t8ywCrZIsYx8T0EvJryCWVL9I+HRPg/MgXmieMJTanP/N9UyLA709tD3B6XODZZHmubINnwZM7SEH72ahoKPOiFBRNhDrsqO/+qJIhm8mXDctCPXJsfobrjkIREvXoyo3W/iCS7dBaRGS2wDVXSeeHRU6ZDBI3+3n4QU5WY9GY4B0lBxK/s8I752SirItpkMe+eEU25PoyHIk4vRebFtDHzmIlRuA4H2jg1RiylRU0T7R9aDsLuZNraZRVPCNxKrw8coF4TPn0JK3l+cvFyy8Ov3ThE9RtpPmcaN+GPGS35axp6C50mupoSVpa//0A5KlZiHAwr1vYzbycm2lTqkd87ylq7pndnhGkdH8rnZPHB1vkn5n7Lnf9rE62+clEmuC82Vvq5kHg0aE+GM+FzzBWteTn+/3EMf05ZzUcKOkEB03yUzsyPS/iOfg/yEeKxU99UIZlkXpfiWh65EYAu1KDST0UNsTLwzef+qskAXvAVP2/1/6mJvieKKpaXYJkMCOxV/eCP1GeC+D5Z5kWgEq5g9WfaWIHR6O6cS4SsJDX/+dAq5qZF4UN0L8ubxDVBQKnvFj4Vz9+NYHyet9YaA+BmSHy4Ydnnbwc/XN4bUMW9Fzjy7gjtYajh3NJhnIHAVGIwO258sRbtgc9cQ260C1VW/c7V3G4QWsf1LyybdftEtkOIFh/IO2FqqDk5HLzX4LJ+ViyL/OjvnMWDT8JtGHY6wiSnIrUbGFP+1qmB/nPPBcsPz70Df5TatGPPtpz5ZANO4s6wUS7E6W0xkaFc0rwnudSjlL0s9UMMvQU/IonRP/BSNjzOJbq+zUen3Xh/whKmomjUwoV2loTr8idKp5J6GajKktyugpQqxq91FovLNq59sxg4GYOHy+j1d1YuQUZk+xQmXdwEqm+rL7PbSlBvkz9uo3huckKuH36Xk23J5KQIR1nUuzPIAy+RNxjjr7XTmOlZtC1ENRiuWDtydUpFHtuzu5d+TscBo3avQwMCdvnsbzkFI+qOpivJMIkQcYn6d4qtde/MSUZeDs4sLLG1SrMHkWSWt/AbxLou/dY3ZW4hpUoqmDFWQChdSDOUixVWHJGtAx7O2yBTtrGRVzTuHdGDD/nx9dPtwGCaVO2FkKFLnpgxARnoyb7nR5B6CyXhtY5vu9QlYWEewMv91nA7yF49P5846U5Gpq2RY68fdPidudkJl6hn9DCpPBKIgvPx7VayugfAz0WBnkOG0+ml4QzDSnDYMD055YzEyOFDOx4d1euISpLA9RKpCF8OhIg8BmW2WEguCRbpJYyRXQVypap7V0qCNE1Pbuq+qFBUq5JgxgAkQ+UN7kz4ingLsVbuHOOatSREmPX/NCc3lXg8wHtiPzA7u1n2MQ84SnBKxc4OysPVThjk+YqkCaNP02D+Q5Pmp9g5vXoimw+2WBoy38v3nQXQE1YtxdzH/FDKjhPdg2xSPSsfGaBfcTaCAFoJCZBmXdAR5Nv/QIAuoePmW2UGrPxTbMKOzCv9ajsZAyZUgKfrsGPPx+9LKL+z4KScJuZqkuVpuSWt7mySgUdOWpSol8QvFWwJtqxhwIf2Ua2YyhTijIURXAxUWpztRpjjtsGNrMEjBIEY9vaVWq6taI6kz0NhP1CGh1ZvhXjT4IZgFctHlGnHjRJQTifYDA4/eZM6RZnDQy7IHzRiVBXb41AKDi7SMr6Iy3m5Fetj7RI13JAaMhHCMAjHN0yT2o+f2prdopeB5HfaiDW0C6TEQreuE3FKJae+EVcN/MvM8sXaIqGhTIRzNiJ+3FlIZBCDrFreDPiw+2Jn8+YY922TMhckinSD4Rn7MCHOuPRmXkdcwUkweSOklY25D2gNimgfOot6F6Ma3sJF/owoMps7kCMksSeTV1egXeISKOrod8VLUek5I+ggwWDrpkpR2U5S/8KDUoklcDkuU6D3f47xUnNqVbZjgoIEOZYS/0pXih6JLY/7Sh+JoZE9XuhOykEeCsRZBC1que2K0C8J6IN/3inXXjJX1zuUa829TnloCYU7/EU2FEHLa4ZUefmafwYdfA0dhAwG5IJnly7isvV7RJfwBxUzUcbaputdRJ42Z6uU7M/IZ/03gbv+FITV42HTLpOauPHu0Re17DFeszFgaDIeK0TbZuiMULt7ike8sIXfzxDZF2IU7CGNE/JEChaPzaLqADDf45x/T9cgFrJDc++9R7/COnOPxPAzlqTprqH+afgdoaYi/rOoQkceKSm/biqJTDdrReIErNqaVOGm8wVDuhfhSxIC8e3bVecxpDbwrTAGDv8cj1CXe9BUst+AvwRMSAllhaNMT7dbghKMfyT7GwHE3GzMIg7MeB6Apv65NnyUVHBkvK9un+uiBb2u2qsnYgtxMBKdq2OMWITXXWw5IYjzvklsdBJrdpTky5QwnlxOPMaGIXK4vvJjqOyvAAKlHNGAZhsVCGTfRyVronXPr7cvAqxpH03br+i4qXrWmOOCWm7xY3QWXbNgVBPvXUQB8spSXT5XqLGjvaiYfNiCRgksbDuXdnhFOSGTtOHvXN8q1lRgRJkyuVVze59IW+gO++SReqPYU6ZcljEa1DUWe5A0Hm4USkuOq+N6fNTx1ZQZDntKgWFE7hZWWyE0GTEUa0dpwg0egvbCOh1FkdIylwqCfnzmJS6oMdU0L6jcDkGsv3zx6vLCGUMAfoFPDYQrta+89DJln6mU7wNuZGAFqh03tVqoT59RqEvIS+Bs5dXLALk0LaPxF+aQbk14HoDvUgvvlBEb1OPCZT9Y9MTRJX9PtOANqqBWg4yRrhtZYSFNoMriZacrQotYdSDcMeimmenUMwGgMDaeEUjQR/lMiIEzujgrZBNjt3JOu9Mm1YhAz2NLAlZU+L4I7GQ5ius8puSaBHRRpidq0/bHYVdCIYO3HzlmKYvpFGmnXIV4aDCfkVTo8JShLxycZp8klktVYy3mDsxWCLlyp3gYkwNgnYDP4VGCXV9VGWgIeBYh9byNzhHfOshGOtC9hXHg4yfZpCael7YoQA9xtc6nsFO58FUQRWqpKKyx2njDokY30Ml27E2wOCaQZkydhl4ctgVq1HtRvtp3KGcVx7MGcce+mtzHMi6NJeqccFr/t72Xnw9894v6C2dPI7nOqOZ6jqt/Gt9Dwg8mFTVJLeNsrNS9GllIyEWhB6GhaSNpDSFs/kRJMUmizw+ObAPyGSJb4mP7aTtjgXODQNiDsdVeuRCfev/Vpgu8WBVPgBIsP/gbX2YpZTGpp5zoqZnDe+DHHtqQ+ZTvDW70Twg1n2EH9Rp1Pok477ygUN4+FwrfdKKIws7RAo7pJgWLsyeE3+3qdy09USytlshDYBPRiMX+b7FuBTugYPSKHc4Kv5PLvh1nPOo54udm01nmQtatg2oQhnXHqGREPFKBw0sBEum9zPtkXyueFVIqIT7KpLv273aiDWLWAaLLjgno2kyjTnWAZGJSe116tX+av+kAaD006/8ywEGSBGaT01x/sNaWuZWS8hIEcm0RnzIF7N1fMlf49W0+4+DKMG7yWradj2ZK14emXbGh5o6XjTwV3Qbbq4l6EatwubWtaklBK2LEqVGQ4dHwEMg3DYDBEZFOivkh1vcrvqjZiQT+gTNjue8Mc4NLZYNMDBpe9DGTassS8fb9TUpFeEaLyKbbI6FJqqt6nejc4gmaOSgizhRruLhc2xvHMhC0Y5dtOzWg2sDh9O331yMeHCKih6TlvciKkirq/RpuOk4wf4RdrCj2Vs7cgcV9FQUd5kPg53Gzi6sdA1xBj38BGP0vycT0msBlCVlOrjLNao+pskZxrFng79/w4nMN7cXmM2vKk+iUFB1XXzgldQdYvl4TzUpa2a4la3ALRDnja3Dp9XHltzpotZIQnDKf/MbLHo2rZqmZ1YpO4GNlWN0rVOFpyDXfAeGl1hMBaALFruF8lCks1XPwHVYF7uZ3ZzcKffkKlvHpYxpSx7PL9BogTXYsV9f2VOdHvUDtr1iTQ/srjo1+ZlwhHypX7Dsld6vV3Rf8OtHl+GA4ZS1D7CSA41PFkxRi3s0h0vaFNFkHGuhskMPilElgUCJjEaYt1qJzqqd4baGWWTef18TjAfeHLTaf7gPnVxLrupr0fa1GRZSaX6+EPyXzQGkexN7YUAL758bSvZ6tLw0WtxquhJn5tFfzyVXrA8aC7NG7SrE1DONg1llkpKTFmVHd1mNEiT7WKWaNZNi9MzZqrJQYvO0Oy2bI2jYTQZv+fgrv/mpI0X57PBtHPbdpWOtm2BtTNeyY2ms6a5jt54tS6glntj/wrO33S89VA3+ScQZqVW9YeGAt5b0Z4fxlKD0ioIx8rKco+KKjSIJJ3Cp6dbNV+XuO1SK0sb5M1CjGxXdGybeFTnwrTSU0HOT11OTG17YifaTsEfddGBmEgs0hUTNUiDPQXsuwlNCJ7xW/E1XAhuj3pISu3nlLTOQ8c9rPKe2KrEw/IOboMby2o70NogeFi/645ame11RC7t8jY57l6y5ecfH5A+HJ+TWiS5uecJGtlBMWl/qpGDhF/tC25JsIbez9oCNeTZOonMS3INZgOh/blU6RYaWb4k9a3/LftUMRxmv6n1ukemigvsENsY8rr84F/ghBz+moFi5B2z90suFuqfGliH09LLP0vIbsGc/+l/A0cYSeheLtu79Q+QDL+xXdNW1XWGn9R56T3ILSmcxnwET7JvyQbMkq02KmvyHvdk9TFzv7/Rl9p9fO2q33DXzOzu1DgdkNrBeD8QgQOQkgKniDBN7N5KqULkZ4PUNw6Uk5ysu1OovoiIQQguURaGwkSx1nhqitzW80hjCdU0eBgh+pIr6QJqKiu2ITpHNDRPqqVllVPuHLjpGpLiEZUoIg1dA+gpib5WTkURhFZbEEZzK1M39mvT4Y6HgqfB8iQggAOPHumkZKhJqJ+NNzj2uo0ullg/i4PYqEQCEwlNJSwe5p6emwfCvhBr+YWHEPjzmTp5GNLFqhYdzzwUEJQ7o33MBZ6JsvtXfJ8PKqGOt+DhgOcEDhWeM0K4706oyvdxt7YKGH0pnnvqRPDdR1gcLvOBMMGKh/Zx+v984d9zQjoEi2ucQsJO4bE+iJHuY0a1kCkfpg5FqUpwRXGle86gNNgvpBG82Bptt2Uur5yH6LV8/VtsDl2TIUKQEpKp2VF6ntGGf+zCbal3RXYspN3TxO2mpR6XIbcN7oofxDJ/EQ8aHyLxGJtotmRT3BOMhrBwMRNpVmX7tKI7vgVkzKdMWsA59vuO+PGatfRbtSX3F5kJ1jB5Whl4yEH/IDdf/ly9NISIOBDs9QobIZT5zRwXD0WeudseE99fqzpQYeHL3izm1bObqFCSlmvPO7NCPwlUp7Z3LiUzSC5R49WjGFzDVwGGjSDWUFxkkcinCA9tVQWfAFq2lpT+4jypOoUOfEzxLc2g01evY4U75SVey3PIlyaYNL/sZoO2D+xD+fSpbwhzeAz71fgnyt8aQ7cQ0jhyJyoSOXRCjjEGOTtHpOtiMrkIirAs2S7Pex8jzxHAt44T1JeSNOsXfEHN6u2FngbOuSj/14erPjqxV0uUOiUQ+tAxUQkTTHYbROQMKVGKpmULzY8bSVFyTF1pKnBiIEEKNpTvJM424zAnLsLMjUTcAKWNEPCmBN96LYpc+z4CxYTCYOgf35zcCBlwve0A4x/psnU/g8imWF8MbmeTZpyByaxSqBWGLbKXJ7qkoL8L+/J6rzxTT7ikSjjgkWw2VDgZPng89aZXppekcued0o2WBxWHNqn7RXu4ylC1XphOT+QvY2iDeyJfm17qlKOYzm7BPkfpz8crD8TgLYEZiot/EejAc4E9zGwG+x+fMiIRsyKK+/Y0ORFr1KUC9TwXYjQFu+JILD2pKYm/n1eNbjb/XFrDArPJgzzpmrIp+qP1hArAgFHFnm/qpD56gpvAyjf2IzvKqRU+hVEdNcZ2OJ/FJYE74GLu1xkTXey2dl8FvlupIVnm6awah6uVL7E32WzBWIitDwXnzNGAj2Z1/c7Mdm8fd4I406zlMpV0xRd+WZwu6q73G83mYzUvRhJQHJwGfyoJt+xTFIQxi+yRJtSw1OZkCwathWMoh0bQTxcts8Joq5XOZjVR7581nXFmKjjl0bNrrCFm7h2ee/xy+w/0rF3x0QGpWHEgQihOqqvVisuW25fxBeUmmdvO0EhdjLOJlzZzk/QWJT6/7Q+BhwDA8Z7IdwpuzimJHa6iZsMgEGgP19mTGJH0B4AR/MkAtlSLZkbTrQKC0jU7coE5pcrXQSSCONv3BFVDIjwIH7ts8lhiXF53EK5uio4cpDHRdCFolKYq2LlNS99YRMBK4K7SO7ZZYai4ARpWr8z4m7BPcx0W3LflhL17H+BG48xqEdVjP3uVQ+2y1S1gnNENwma/7dsFQSnblfmphXU/tFEyleqrOVf4iAGmPusJOXjDgOozLyxPwMXykr1oX0ScrvFIQmF0C0fdl3EYJZ1/CFYkd2a4hVwL7UPA5GwPDvWCJARlvJ++UsSH1kRMGMf31o8yFpOeRICKX9I1sESmIAd5SrLR9LSZq6Y4yiLM0F0md5cbAdD+jrR7kmvYvALsDgnUDAeFYzPK7DJzz9AiGJ0CloTbMbRHt4OlThutBxayY3J07b3Ruz90HEooh+HdnlCOema47cYbY8n7AWp8fTuNxe2ZyBBNx+8g5HG4KdPZYpe0BalegfbuFzsR+cv4HlG15+VBA+RXvPUzXbm/u6SSjS/huwqF/dGp+BTg32c9bNWBUhUrtBqOZV3JdvQVFYwugd4JGpFnOrGmfAHjoUlbeR2qG9jxi7lS9DFrpnBFS8cxiyykHGubPet1XHo5fpVdPBr26LYIm2ykJ1S83v9RFv9Fkvt92gqfF3xoz2qJ1dquU6l7HGAmMMJah5KPIpabWzKqLgwRzmAQ+clC+bMrDYXz+AJFVBjDyMyMrfPS4aLHQvm0K6zWBnve7U2tNqb3U9TiZXdQ5EJb0iXbKCrqJ6tO/14EX/VH+aZsto3b24Mb/QlJUpezum84SkhfmSo3B/Y3MYa5VmaaCbRLbiEnmhLujZH3p/xjsYUXLZVNEZV2PMAA19vmKN0OstbWGMXIhuBqG7dXPlI3rmVI611b07IQQbZQvUXQHCR4KB7797JCyOicTQVNlTJVg/lCDO5+EebmZ3qCJwqcxm6ayRZsI36SnAtgs63YzT6fJIM4MiLhIIIvC7EaNszhMnrqOP7PJENV/qKq7AsYYmS74exBVhAw07fuVuyoDSjMPJ5Ebox5C3paeV2SGwbfyRC0ZZNjnTSBXZqpFRFaXOMEiWO6gFbZRTTVhBDZcwfV6YXUCryh5Z6oTjMUZSpGUJrKttPjYB/Wc3TCjiWVBr5DksgqRELLgNID/hYS1NGto6fT9I80msd7X2h6XqAZ7/Gs4sVHDIEe9jrRNK+hbXrSFgOgbdyiMy5JrPzsIPcYGYXa6L3rXA/SSh+O0zdMZF/PxhV11KnMQe/sAruvtH67Yn0qbF6HGETVGE0N01e5fPiDCWJW3V3fdIz5kUjo+9oigfiRbyTshO8m0zJzoyGFThpCSKyBGr8YJAtd7O4kt+Vzfx8fHGvkAc/pQhWVg+8sf9bL745HuKV0wjGugaDlLIkL98ZguwK67Fui8huDknM3aJghEp68mPTEuJtZEWKhHIoOmfMDrgKNAksY3B/poKn1pLHpwZ4lKGJHfnSOzVhKi1AvTz3khBpGewMu5QUHvD07vvdosn/RdCW9CRzJxrc2OoWA4XF+i6XtDsWt/2sdnPmigwCC813R+2LIbJAchAXv6K+jXNLIqOhEoyxnpJw59+Kg8tj7jp0dsJwj8+3w/J8NOZSlmxUoQA809Si0lZDN1GeQIrmBanY2/KKBzKOWyXePfrLE0rDMTPivsRu6HXm77SYC6OtSTiCccqVPraJMpHLcomlXVd6elL0Co+Er9Wu5brp30t8KTinC6fBDZUwcMB/RGABNo3q3gWM0QmBTwR/sYkNfbMd0P5t06OeTeG6V6WyR7GqjjDcwTLwSBdKZoN7Xqs9jfDt+goL9S+IWS+BO+AqlIrgc4XKqXrhmQsgVJs5fRrc4JEtaxjUqIJMFqlarKSHpC3SfP2h29u99VpFbMukAUu+vSz7W1YtQaUvdJr5pybFCIQ26Uk0a/YEZ9AlevnkqE7aXb1UFrK0cRWPBeO2fl4j2SMvqFqqrpwl4kWMGlalunxLFs9vJtwvf84nthvsutAx20lmLjvKr/DoqyAlmUQ61ufz7q07JAbn5tdmvAO2ivtTBtS9xTaz4y+E6D+8fZVhEoVzcQazdzPLhAyq90JHmbuPOH8GEXaKwNRdXjo9PM3Stb2spHIK7V7TCZjIjbtMP8+k1ToUu1j1CV/iaSjz/E/wgnpng/FBjyJWFYlDtLVvrivrvgjTbqz50EDaj+o6VjILs3YhewQ09WcYedny6OCZ3iiHsCIwcQnn1W1VURO+wcn9xeXMnT+Kd5wdrqXmXmbfmieRidalVaLiVgmo3LCFcOjpKGbscx5AHFtCUKZRoYTWV3/4CAqQBITe3xPaWOSLxoW9UTQZicnPlNUSh44NKrtF10biem2Aoe4DyoF7MonN+u7BGRlV9sFH/d5vxhgsSDbXRIj2ngeii7Qu8dXhPzSjxLV0aCqtJmFjgFZmOKOfLj0pYBytwh378Dbdt8NvUJWI/myaIsBQSaBJpLKSI+EHYrkvyGU76jcSPJ04WRSGMspq5AKdh5wt8EE+OwWv9hrtnPd3cxK2cwgOzFNA6cI4014mj01OvckegkFaNgm0OhQXm6tHYkBsXKTofU4jKI800/eF552wJKDkXOOFYf3qSDQ1EzhMxafjgdvZQG1O4PWFhue0a3iRnZrZE3PfQNr/WA35jVJ3yi5aRG6iErOKODbEF4HTsBOW5+0rvbSSufxDnIprg1vW8liYgNrB2UpMeRwxjxvOvWGgJ9kf2q27tDzWQgbjdc4KQsslVKcvqTlvv9Nvxwte2FNQBBFyj9nLiGDNO/eJ96+gA/Nn2Qi2Yb4qJY5aYoba+gsHmlgoGLca0YL0uzDPIrJkwhJnm54//UaYe2rET0GFkZZ0Q02e72hWqcqElci3pw2MBR741Noh/RQBXQFJd8JX0zm+CxmmT57Bbdz+fXpBXyHrNKwBMTqW0XP3X9IPUPJSgqAL4iPmUJrgFDJis8JxJpYmESftghE9CgVPup5lgCxs++fiOt6SL5BFNphnongKxLhbRXcBMBuvGDleLWGEfmWCryin1KDv/htLhseBYWvLJPAWS9lEada0gn6c2YNcxI3xvatyO9ofG78bqtXZ7XR4zet/bP3fTYUJkkHNgfUidw0PdTaAlfFy/PchoFfpvthaJLBkVjYG07MxKIxzfV1YDVW1FOZJfRNGbSw1VdVzSyRnrhwHavSzfjStgWgio8Ts4DGwDmSTNLAbyminbhanOlKs8FuneHpx3eq17s5OQ0EbGEDeHt6Tuo9Pf0lsEN+gs0LOAxFOWdwvl5Jp471qbe2rFtBx7DOYmy+29WIYt/cCdYkiwc9vR607sDnNIw9AZzEVt6UOyafxHTqRbkjyaNgtyqsf2ZY0KeFYHHWtKkU2JDlPiysPJgP2Q0NktanX5BhTYWz/JxN2iZY28txPQnhZqkPO8TPhrAmrQVJLuB0hOWasFA/HpYcR1QQ7UM5OZLAATDzOII28Zsp/jPkwdHzr+6e0euMrPkcyVjmF+5vTCGUxYAEq2iyoKnUbcKSzCAlTOd3XsJGhlwcMWSazlCS7rc27c26+DT5UJPKCe9e7qhKpmQurb2BswLYOgsxfNHLLBPZnyDxnlJYpMOk8z7RKf0zZu6Q7BvVx3ZR8g6rySYuVifC0E62siAZY2gvvWCM+U2wjWGfjAHcdJ7jXd4arVg3h2n7PhrD8KxJIVyAS1D3BobpysQGeeOxHlXZvsA0szm9yfD2JfAKMZBB0nSIIDimWDc/wSHGnErzybhKwbS3X8YbFU7Wqi2Kq5RNWONS9gJpeA3nuL6twmsumuBoudk1tF4KxbyJs0285F5zBhMA1DUpHoSDrQ3aiAoNtALeQMyuXKvbj5zkO/gNyu4SMPgnmC0qapVbBFu860/2weGAybUSpo8qPspKfaHC6sbPMacYAUegxWgPUBAdN3Ol+xZAw7iORLszHgdL6MJKfd1nowbY3F+d4VQ1BPUQd++6t5ygjCENPZr2YA0J5tVFtDkg7BZSgzn7kx8mfo4WWLoS0GQNMjvLUxvisNA2cy2ioWeiUGdnR3HXq1fibdnwwrp8PfznKxpP5poOQckC+fFBwqwHeIFz3HQzPbuSRwAGkqA0I5C6+GNXQDfonb+oAfIOTLGlXdq00FWpGTmSNOivrY94bP+Rm5c+6h7SMGjra/P//GIcMlvN3FMc7z2d7LUE28kHs4zKHk0aqDw0Oh2Y94rywu/H7M8s8h03qq22jczvnYwLla++9OaKjlz2g/74JLrcQcu3U8jwxS5a8mlUibCX8avg6Hrp1q62QTAxLlJsPiUhU37GM4mheHG0ceOHWHSrY3YjXZ8I2hYrym5jXhKQyDBm9rcWXz2xh67MVHTIeoT3t+EmnDzEvYiz+XGVHsaqW9KBNoea/ogUx7KeCm61JqZsTjvRtc61ZWceje5qJWgfcwjBWWZkAxlmbtzjkLFDyNhCLbXB9GM9higpDCyR+a/6mVYj4iAeQKGwPntK8Ny5SQsKbMNUN4jHjpjSZtsDS+wgYwhRthqr33tMPRcyns+kpazAoowKTrrqi0S3bCl9yyVmhzwCuoK9+sY6ObpYG7Byv05kaAGs0/T+MesRtEBcVpndZg3Dj6/PUlcKnkEnBlpaOxN02Ml+abclWQuNwA9Wxzgh5SKgFKDuwvzhAsNYw84+OXUzigGtorrDV9XbWttx3zU6g5YzvAVpbOwLhILRJ/R4OsC9X/DWEjaqEF1sLCCcit1HYcfhL++p0U4LfiEG5wPzIaaPfOxjyRKewIWWDjg/s77dWOSJ3qNAykVkvLrfG86zrLZ1NhxhOMCT8LF6Zqvt5h/ttF6z7OrVLg0v/ifJbz/tkFrCK5llkvmzePG/xjM412bo5BBATThEwI2qrT0Mlr696+PbTqqovVdtnTGn5CxMz5XSTQbcHp8ydnHO98MCMetR9Q+VDBNberTDJ5JkI3taH7IpD2btXf5druGluGEp+/t2lSlw2TCAclHcitLNWZsFWlLzQIoUpjIY7MxgnQmXaztnZT1k1DHu0CgyPMHFReGj3jCo5c92YYdhHbNT5nQWAO7arV0BGbV9un6ikm1Ll32uYCaCCC9YP60szclSbSRHSNbWYO4M0o9z9KnUvEujwF+9Pb23R93tujcUraCnL5WjhiC9CcSQG9mrcSINJHzQ4CoRM+pe4DXIZSivEtrJhrdlPhHTy7JjjyvKZO3s9s8xlS6YDpahuI830D6d5xWq5fltnltEDEI+3M1t/FyE1m0Jl/pWDhxYa4KxIZjUIeEbgpRQZSFD5lnSi/nxiIw1Z/8YEQ7Tj1vFDz3+qTFmnfcKP8mM3zG+8wQOxgbhW5IR/c5Pi/gpm9Ro2Gnrt3hWzWS3csY9mUrXGCKa7o+QdWXdQPMCKWd/BR/TvMt5VcZ+ZuUdWIkZnZ97JC9NCssajm3CqTCle6zs+CSWUSTtZI3XXQDC2pImG6bRSmioGvpJk3STyt3aAiRt3fMykOYY6Ok/QCVUFOr0x4e8YUk/3G3uEUmJPqgiIP5hStLwRpG1aqrQCeG9FFm5HypY6JvlTpzaUOVZO9bEK+xLXvMTYM9tUsyUq6vpt8dSxaEuzu+R/ZB6Pmp2iU8Bj1ZAQDIV5irTSmvBaLvJuxy4kxbUqrdoEiKbFyIk57+BzMp/fXb5qEPAD9WUgOT5V4X9gHt6uAl2xa4PTO8eNdtCbLgR+NSb1ws/HTtCMZRzlS2SVuS/Nds60Qk7x3rqFonx0NV+NT/8nnntGu3EHQsFErZ0QLlNzeYt/9/HC05jEeI6RjGhKJdLeEc06nw3ld0LMn5ZXEOY1KgpiItV1kFH1MdobGXy0VhCLmtvY4Bkd3tZoszfyCP2s2k9yL812S2l1i/pqLQJf2dxdDa1ekXoACDgd4KK17GZuYBvmMyBoKUN01KO4jQ3U+3j7ov8OHw8KwfJrkCas26PG5dUObMgMrbg/3M4srUGYqLPpcA1q6wFG5ssS9gCn6tT8x8kkyrNdQZUot74ZRGc7rITKA+HjnP4XSI+Yjs7Z09NYko5TAJH1ToxAw2IjX0cIOcI+U8jpnQAM3banFxchvxbPR2fTTVdK6uWpeOw4HrSfQCZLf9wfPZXbB5q2dDVdXbDQZZXSuWjgfoBVtUhMZFt3SlddsnjcqlAgeevNUovkN9/N2w6CyJEFbZHMHF4mlwwdUF9KXmmPX7c8S7q9THYTf2/vv4QKhSv0cAa1aKoWiejs7a92S3IYODP5XYTKFJ+rOlFd6KmvIzdGklrtDPeeDP2fnS6I6vnl0remlo9lMxyJVT03G49pVKtBzQq+mx4w6oUWTxydvWEXE/TFCT1YGs+xCgK50GzkOsdDsSddCKJ0bbHD2/+Rsbr0ZZ9oZlrKFbOSGd7GimeN0XElMRLOo0nOoao0sdJJ72UB9gEV2TArpH6exD+x0A6HgzS9hH5dVtZnw4VmU0y58kVjk6InCntHupl5Qr3OfcgRc7tb1whYg0GS8nIT1CMx1wMoTFjT6IabDU+t/D+8aFlvwyOR846ruEPd0KfrFVdjJlzlaySdlfpBI3MyVJ4Jsx3rSgklXyaabddZ6npN+086rP/PpTJoXfBMav1z0iDK83sTj9ZkXZSaF2GKYxNzL30b5fe+HU+eYrN1gWf+QT9zjYkPGAHnNzQw1DI80X6YFVrOnK8Nhx5DFCV/10Xsg/AelYNuYAbPwj1H0ensqgsDqA5ewZpId/Be3sdKj920bIzzdoUB3vl7YIbW9otvYBzipOc+/IgmjV22xEfByxQ9rftQ8ZInmUgeyWAeyKlTe0T0Da4p2rjpfEfLsdIbh3XpXiBxZ2ldli6VfHXn2WADHDfiwsnqf0UoIBgCszGzokTjk3USOoko34vfoZjc+qNi7PEvGexthh+kwcaHix+4FpjWa+vwgp8+0cqV/rNG6flpBPC2K9ceBaE9x8Sltf7/5eviTJll33w4i60ZO5iC8HILC5LKZEut3WBjU0KpXyGaQ9u0GxShqZofsRwKaIZ0PdB442Eejcn5Oz1jNHcIWQG7pCKgoIq88c+j67fiQ8HlH/WCSv19i1Ww1WO3/B6Ge4GX0IrUQYIA1ul4j+BWyKGaTF36DrtrBIUQGTgmvc9mHFCcdiZsThwoLoR4GrVQKy7tkGcES2nsLLOiQUb8MXfp0Jo0dlD7pkPpSE1rT8LGjTC/wNzaTnCXSkBvsGo2xOAYVDzBrvcI4RWhVMwDuN0vTcV1ndo9riUlikM9leE2rmbc3NH33m28fxOaQmxbP+LiwD6RvFIe+nIJDl/ic++xOp2QSncQMoyYxLd/2uroK+OLiiI/4DVlnC6VzlaYoYhgVvy9DGhUUWwqYhA+ka8EdhKXdAQxsCzlg3fMJ1N6uWxI1jd/JAPrjygEiTDS63hNYuM6mHp4CqTAcv03i8aOxUsPZnHeip1JtwPkWaKco6AoQ8I2yBYOjE6JyaUt30XtkxwqDuYM7HyBtm9JkXUL1994PEsek/4/qVI0a211pUBuU76zio6SYH+QOgAqwc+dj/Kc3DJa93GuO1wwVKoOSW/MHH7zd8mpOAc+/LZZsWJMgYO5SVKsnaOTdwGKD/2aggK19Qa2inpBAmdz00baHTZfHiJVcfrRzp4HjVZOYKp6xZ2zcZS4OIfMx1gcKpsfSzICGhckykjiJCXsaYHLnWeGcoZhzCJGqizDXl1ScsifIqQtLcv7YXLsOG0OQLNCyoqWaBQrB2Wq1do08E5uT1oGbLEG7rZipYEttDkudPz0tUHdkMeZQwXG67qudphBYmuLl0iK1zGn86hcIHDkK+XEiYN37tMrqMU9oOABHFDJSyItE1ulCve1SXk73BpsmVYEmQnrYstGl7yhC5bxFhHCfBIKOgOAxwAIWuF5u5pOFbsQaIs2jgN24G+GgNrLpI1NOEid4VV5q5hoFcmCVlZIvMVyiNQBxejMn/zOsjBDdrUUzZxWqJ/cptYQVHAhHt203BycbKS9D/fvt8rtigcMH3zgL7epbPqnRsKc4cKZ+m6E34riTsoOTnUG1wAZvZgwb6t5WIg60Pd3jVJdQRn+uG3+G8tGgxOXp6dfgNuin3baBZaGsJDekOvsDNbxBaiwyKiMh4MtqtaQ26WEglnMwn/T1lx0tpUvIECPh6Z8SwMfrRnhrCmVr3RzuWGRI2VAprcTrEVw6cWTZ1G42PXFNtypWqprh5X10mK3PXYjrpB1dnvWLKNU9u15Su9rfoXgvGHeqentHNuQrbzWPpGnFGcJedAMw2njPbh72ktkUesHDuZ44TrTSTPUcwD30qSGnb4RmyXGF4tWzopHAQLTYx6TbJ0EBVASjKKHYz7a0gWz2SDOvUbcpsVA1J2JPJO6ikU9r3pzgb+5BJY20gP2QJ2dzU/Gg5jk8WI5KbGUgclfIIdVqRORjJZDz73UTHBXqBaQj73jJ6lRNWjfSMeJBYmQL1IeI/+Vj2myf3zgpt8cEdsIm9K2RkdIVV1CwjjizWYE3I9lH7SQWIBcscQhjv0jG64IOWZCJX9LOsvMgiIb4LAvF72Kh4g539SaMfEnOi1y/bVOJD7tvkju2ayrM2il1yp1BsD2EotyR6ir/fbAEf2fc0KHjpxemhyFXEQ7H1UP0bjximaZgHArNru2QJFQWkyy7dZVkFDvbeRzLg/Uckk8sYaZghTkepzh5oxT+NTvHh+ub01p0ukXMtg4k8v0UOHrEAEhox+bp1BZZ2mJB2nUdolfEa9h4kZQ8HadHaZ7tEDexL2MU4AI5i111rKfkhV/jUh+VZAUzkXqTXAN+QGyIO96blGC2Oc+q0OK3wj6CiK3sZH9BN/ASpk9WwPhdU5pcbvUQISLX24nSjy6IQ5jJwV/IXhzctOmWjOpcIr0R1W0q17dydxAmM/Dause/c9ifdU/iLkz5kQISNzL0bdGtPKiGKGLiTTluT1n88+kGB5Owxcj+y8Lg4t7mzKVR+a6FlAufEYATvxM/ieqE/cUh333hwO16DPsOJ1vIqeS8wOCMbTwTJ+0M/LXh0FuUsSizexvzt4ztThMWthLSbBTDjznohklWk8+8mYcigduEnK45vYCCrkhz+VrBc5ByUGqjATxcCJbzOr7n4xhOmazvUAN3r7AKLwdsNP0e1XYDKFjhTXB9Ggk5ofnNt/LSl6P/ggmlowEc4MN+ElRbcfDMN1n6PI4+tdWnjnsd8GlQRZXzm/FZ4j9nSMj3dI9dwZhxtjcLfWZNCza/kk+SSiWDwA4VjsSqTXBq0y50ZyqDF4c1c+lLtj9eIS9TYqZxHHTf3Rr9N6S4VPb7IfP4VICH8SKVui2Tg9hoxREJGhj+1eJEU2MT7J5QjLoJtU/fLbXVXv+GDU5bE6t54WdxrM9EfkwI7F5ZwBgrpCRSRksZvfE8j3VRr4LPLXAnPQA63ZuLUJWpZJnKpnbABWJGs/XVIMbnIn9PP7+DGam9GoGUnZpX37+DTi2otQiC2NAjnOBDZJp4tXCqZ2ovDjia4J1wetVqY0wZhlTNRrUs7IgspAHG+S/28ARQlh7bsSQzUOP42ICwoNRn8xEL3uaszej2hC6ffZnLTNg/+22J6/IOVLM5+hpE6oJvvAp1H2FvYox7VxmtClTPZZNqMO7hjNjyH4gu8So+hyp/3ejTRRmh/0HERHSSbMjRNPYzxu1YBbPSLdqcMQEj7KYEuhYPFXdyYFLJWQcSqT4+EQ8vB16n4h2PEnhf37iHfoqJ+bqHa5watPPZVhierRIpwho693kYcKPchzETJQslwmr7bpdTGzzv64BA2myyuwYdYcEH1NAS6fDiVQxKQRKFQm4UZc9gQnJl/zDrJRhAAz36rYMvyBqr0ugduA//r7b+eNrLoUDmAvFRU9mv+RA8PWqD2QSGrp9+pTno1VjwplC6uD6nFDvTDdySL+w1hYOho7UroH0rf2kyawh27QO9e7Rf6OHFQ9KHN6uqVeKL+2bQPSZXDu3cvwZiXDPw2xpJoy8yGn5y9+BrJDkNhhx5v353PQlhP9lysPTSPm7egTK0JNhwMJHJ52VYOg7zdovKAbMHV8fGHbHki2QK6LLANeKBK0pOazI83N+DHcKGpIsrx9NojUf6rFAl6r/Qw9BLoIB4AWRBezZQm8/BQwrR31nrDxQBu2Je+SNmtfapxytbXEl0HsgcHf80gGjiT1t1lCTX6oo2s9YnwDhf9s1Enc/gGTu0fd5E1m2XoHale/dwYnXOWlblX7zTjq6h/rrKeiXq3yIjO6thwhNuSKygNEKHOElylRgcn/W9UQ3OYK6N/GVzbCxwGgIOO3cokbcI0CgD/Db2sVvlFELZY9/ydKmKbtAYUFDYOb/Z7fZYFx/Mnyo2LFWI145gihfT5h57iT3DZrqP+SqsiXLgDYSDPYAwCKq22Jk8X8UqPa7neFyW6DuExoU1NdZbcFApWlpTjRqQtbat3HyKXgVLfCGBnRXpa0IIuwB+Q5dqYXllJko5+50G2dgVDk69k/ZD7W/V19QzEQfaVwISaYJvneEwnEkZZWw31gVLKLTY4ncxVZr8T/Fd1qS5B74u2VYIpAA3tOsTfjqVzzRDhKCsqs0TEh1tbnPIuEVjRhab3r8THd7gJoF8DmNA4D3CBaaT38pzMctt6ODv0nBfqtn73ZebNALo4EuEl0+sRRSDOFEvcPrM05JlCo95jzAATk/Ap0/uC+ohk7hOMrwKFb+n/gvsfSysuHEuCP6Qjc3PZrmdIRq0f+COSihdfVISTnF7zg+j0l3Lx1pPDXcrRaLE3HRrwQt6qkQ+mWIy8UFqCUfkk91a/DyvXJwLD+RYmj4W1jGOl5vWzYiGn+EXSxyj8TFGZdzVZCFv++UtmKp6JB7G+ydFFiZ/epGVx3j27Th8E8xZHo64W+MNLnVyr5ir4Y4lkU+wqP90R5xV9UXroz4ABb0gran3eNIgm9M+4JBSc3NGHalyAwzG5uG0V4+cE0+9GtL0NnbF5NXNrdv+fwc5uY0VR412M4qBQTloZCx3Dg3Ium39WAQ1odjaNPZRYuNe5+iX4SjGaj1axn4majPDy7F/nv7amauFNyhFEqA0OXkyWHoeHUjhdr7/CKiq0td+gN/bR9cOTnvz/pnjkEgeYKXCrPGODp5Ay4I8NhI1RDfOXIQGnweQd5rP79StYFABD5zYQGcUXn4UUOd1Y3sF8mfHYhBt/1MMCkh48OjLUxrJ9Xk6r4o5/a15hYEW1rcIhWQl0Ja2o9UcfvOSIvfnNAv4RybhFSni8pnatCjqIqNw4d68tfVRlbIL79VWgMYVTMJ66HEMoXDpLVfEoaR3WiqJu6YHiAQanI8N9x8ozD7XbWynZI+gRRkyktNdHSRzdVA6Y7FZQgR+wPXCco1ie5KXoqISJ7ax+TkkeZSWRt4GjKgMR3lqFsaUKxbCupgRySHIPxtaAehrqx7Q59wvpTfOEp9acf7ko7t+vSdXK/ku5sDtwF93GI4aRFDEoR3LJSs/ICnH5eMTSWRUnwr+Anqn8NX4dY6MCnpfzU3UTpyz+/leI33oP96NvUBEherOlHdcM7uSUnTxQenhMU6Q0GLv2vwcCgWUzUzsz0GNkObodEBm6XQlfK10OcvmvHRKbuHIOjYTgTo5+mLUOwZfxzUy/AedQEh16nb2UxTqFQeymApfuWHbZL2DTW48hg3CycR8l+YzzvFIRJ3veBhFxEMh8qxOfoMuNIhUOKw30o/fVd7tFAJRkdG7VgYhWPpTrqy3fa7gHTPxzCmHGnZhX/PArdYlf/VQclgqIYqi8sWbwxkAavHJRFfgWcHr09WfHNzWNE5j89fOPefeUE9Mflt13G3deoP4CVNZq1xjrsnfeCnsbouxzBJQc+n0nnVG9whU3y3U/Hz4jD+Dz5foEHhdxMi2P6KthQgVQZyuuRKBHFruc87N/Nki/cG6YMJHNoSFFbI0QWZuGbycHtH9mOfI3KvgKUxpa4KEncTvdTXsGcbADHlTZ0g4v1HvmtcAFINYYUsjj7Ns0usrDTn4xvq7LSvMcDNw5dGR9tsgqDK1SxiCBHkC8mHxWrx022ZefLBEkjyZvZA4dz5SbCTrgOaJz3mMabEqv27+unFjqDo7LfupRHnBzjQbhYZ1vc7MrnxJkKavtfTdVGlTiGulRG00evk7SHt9D6A/S44QoVKg+75BQmYYphUwzJ5P44afgTP67lgOxSjtVCGaLYetv8d8716xNZ/PFNOfbLlHCqfVOBVw8Yc1Xpws3V8FJhRN0Ubz+MRjwLS5QVGjhiGMErqVPW1SSG24UJXqA3sF/s+VEzfxoBiamkYZgLzD2W6nntKTlEWidD66761J/2ILct52IkiZvghHHWxhA0Ghw36Fiju7LgV791ApPVMJoSIM+nOGAW696dl5r4LKWrt359kiciLnlmyfE/cMbEsutpTYj9K8XiqHRECuaTcS6EOc28ckkPDlosN49ncUiHlJlR6r19bIfeLX3IP/DDzR2qyODCidcVPNBrQWO9ssOwzFWYxhk9PQm76HeR/sIG5No25Tj/KPiu+XEScC1JfXmoZjcy5glMQztmvbQRmCMGqVgNPyH+QGrVR5FnQftDutkSMnvGD/Sthg9NKNCgaB7muRlDE2N33vy0bYjP5p4Mvkycy6sDDJbvDuVLRcaZvgzmtleGUk2Wy89aG28KkA3tSnIBOPsjfNsG0l1xY0nSB4FkMiEqbm1WNmUQnJbozsGOLvn1+mRYLn/T5GiozhZky2keFaFfYSIRpOj3c9EEOicB3DS1Iigc0laaCAwMgyCe/yJdf1gTkglWqcHKYWOPZVUwTJ1XUQF8ehvhVJzkCEQzSenA2uLZe5ZDUuCmh2ie3fSsC6+QJXK1SvJJDn0vvXt8usf/5hoTvlruh0I8tXsT8RBn+icocqFTb9pCepXHO76c5I5Ntk9evE1c6OOVlYUWsYgdhTRLNESonMqESkuXVpiOhIpC7WGJ4yBR6RxyqJix1k7OKS1TTOeWZKIcgXRyueroxagT1f4yf6onqtsSztTH20tr26ISA6g4cA+BjEA06zBzLULZWNxhY616f7iViHmLIqoITWthMGsAx48t0QFoNaT3gD2avqI8sIStUK5IVWyj4R1QhmnykX6HrBjM5yj7+a91aQ31711F5t1EeYk2q1JNC/xTqsumgCVLh9lyuckUWPPW3Xa6He8/ymuPBjF/cRfvVH/jnvxIMcJNwUrqUtPMR3gJN9TcnQAs2bi4iaC7EgarPvrL6gc/FgwNkaO9KHeMKLPHm3BguyfG8VappydFHSx/wZz8QWTbkogUEcgi2yvjXLER38HjiCYLP3Tj8HFwmlnqvBbhS7l1HBfy7FCRX2+AJsCWs6SpAnB+/S7zwYFX3wvpgdDA7LqR3JPOQvHOo14s+Upk8vYpbADSPDF5VAWw6HXv7yjl2IL/pOWstcY8A+rJ07WaRL7aaW5LTjRVwqYN7fMDKn+EWeow9cJp2quzu3VyvSGX1PNeHXsv4+TTkxAw6QRuil5Na8rf5iW0PMZzucNo8EJmGM4PDZMF8aQYXBqBoWl1u1YMQAyngYJuAot9wX/3Nv7xtJESbi8DYunQr+fhRE4c+CGitu6c3CiKrOCMwn0MoNVriJ/2GDkNhS8qZGWZ796Zi3yxhDBKaf5v7HMetCdzx1+TxHjs9HKdM4jAkC/YIFwlUNOm2vU7B783cvgwPtotyTHeZ6EoNnxu2UETxjvPI8IQz6G9jo/KNRhH/0fuazfdLl4bVh5gWR0w8tSfnF01lIqHoxL2lQfq7Gi2nCPajtB3kqM9M3J83j6di0W8dIOrA+3VYfBj9UmpUtd7NLk1Wfobn5+d2wgOHw2Lmv4aeuhmQEyNQ9M+VeAnW3FeGf0ecE+GZliD6J3ztVzqQlLo1pimqts9dN26n7Ksl1K9FvwS4RFPxH6gkHCNEFeP2jrXZJr+YE2OwBBxiMTQR25VVibqd57gwSuj04Bd/ivAayUssArcREKwxIU3eYJ9oRlUzr+sbI3QuiEb/9y8POEeHWcnsmGhbCx/qS+t1kiQVYnC0uPeJTFhEZTB0dSkhLBiyJGG40aW9ELHYAXHfDPeqMyB8UuntWowCaEBgJV6HTHrFYjB/0EfQ1PWVxyw8gI9VlzmyPHCNTcwkYFT7EQ/ac0UV8QCmYQhmEP/Q4b1C5EeQtDNIjczG0GzErcWlDcDLk9OBWpt80P+wL4T8qmzuwKOEA9Z4IQ5TkzE6zSaHRNxU8ZRaD0iMZ+6X1Y6cmga39EUgnw5izQCRc7FvWvH1BlCSLQKwQkl2GIqPIJlhhTvmKggI6VN3Yr32C9Z9ry81Q0EY6EgcG0EC+t/BKBairH+JxBRk9IGnqXXU+LCEjtOPxeaZIakdj0G+cmWjSIreC3DMDzes5mXELAN9Iz7B6YJ1wSFYlbNx2KE2DnLPZR1hoZKJG7P8SPxEVs8tlh5/50uo6iZ8dq+xnhTTQlYxPpgG/xHy5SdnDusiEhakrtU6ovVNH7we7w7CNtUk+pvdLu13PipyoxgB3X/aQQNPTEUHsKi9uj49dTfEc7YbthpdXfsCcc4Ls8glDl6aiYsjEOMhIdgD0wQJJVZmcRSMIR5BDSB9Jib8E9rD2WNW5yYc8d6FhqBklc8Jq8M8h4cboQxV5CVnszUVHTixFx07y7I3/kXO+uoTdyk+8aKc8VBLloP+DfEAuYuxUhe/PHsShCISvtMnQGcumBe1UbwtZEEAdiaMSmyqMTGJDfPiXfjYl8ua4+xzMGvgcDrOXXRwy2+5UnvKBejBIuZ7NGjHG/PMRVhaTNbkl7FWbDzQxSSahoXb231m2hjIFhPaXb24DJ+pk5N93541CeFaPgoJsV+G3Q1FHY89TWgL3zJz+c4bsRMnIBvUbM0pDHSN+w8BXGKnz6471u4vz+gVIO2B/mLfLxCOjvaS5CsFCopMbDbAlbcIUGtIh5vSYYxpLfY7AeJwRZAB8Bt0sPYAArL2acx2htEktfpFvleSs/9JGZxGin3ZfB/brp2SBxmQL1JPacTYOTFLsBybda1HNHBsK/T6i15HolAPsbDN1SKgwJMYwdyhgSoUB4wIzGUZn9PtATqAyCZDTxo+uZ/6mPOAAk0FGRNRbzAxzGkpp5jftr69KAyqwviFPmSe+Y4OGPoM7HwuVTntYCJBq1wwulhC19510ctr2ynUJwXLo0o+XOMzHZrpChINVxKS5jOeAhusq0O6v0TwbCPacl60gWLplrJbf9T+l1YRUxbzASu0KZCgj/0AOQ8G7ndMh03MqqH80doA7b3HxF+TWHe0YtnuzoCeQHCs/IGB9ObrJPjX+h8P5t2+6BrFu+GNouzjR5FVQhpzdJcQYTpAknMNOc5ii1GSfJTDaALBUsyTRptErEUAE9JkBsTezv+sXAPdmGL7dESojlSagWJ2y62QuMUNvkcJ1Bh06vdK5IRwd59YJ8LBAeM5re80/bsesby5PY/uU7WIoUvshLxBa4m0qq6p1p7PeX9od3DhiZflF3hyAl9aG0VYQ0jddppDA0sYuuzSVvUz0sXFZprs1B9n78wwN4HzLDoN+64FuStZLHPNF2PUjBTrW1Vr5K48dzdL2fq/ZYqzA5ZzMMQwNviCl0tGkT5I3e25LVdXLHMRjrk2qZkTiQYTzoKmYaxcHj4YLjO0Lk/MgHpwnRi3aaozXZ0Sn40QMjeQtURYkBQnme/beW1DqPQl7pK8uUKj1WhsmxL2iOJDb4v9/5ZbWYQkol/7Pk5NL9/o4Aax7vsmB0CgxSvZS7FI/RfP8Uas2DkVo+mEHlwSQI6C5TUgT10+P2M623fCg2OqXAus2evWJRY5kB2/h284B9Yo7jCUGYWdaB0k0WjvfxCBmFMx0qRCZRt8nit27zK2s1xczTSKqWZEa2XRxSsgybEonqR8+ionDxBOnKX5WpsQUVlq3TjV+WT7dSq1hf852W7rIw5ryhuZDaWQK7zBYfZUKgjVCetppcmieLtNZvYLTG3kLIGUuyAnoKfMMC91Fa0QrAbQTAX/Puls7g3iZCdexMt8cI3K9LsZ6GMhxREIJYlfG77HO/1xI8zOz3J04nJND0GYls42FkTgmo/Z263z+5kJUaTLMi2bWDycFW+7bb4CTRJ01RL5Ns7suUxwyH7n0c3xHCu3Y6LhgY6z2VQBzYxoNZtca57wbNfxlevkUwZeiaPzI0kKkWRC0aazsFTPnFk3ykZRuGcbtRNrEiXL6qPRpff7jB29eDqOfMoIL6lCqlGXUQm6/wF016fV8igR3+NRVUbUc5NWS0CmH8V/52wMSYCoZw9fIW9Ikuf+vpFgxU8uTi9sVIh+87v/iYMu98bZW+0MvNE8LZ1ulvv4TBShRFyBq7WlAWDjQP1ccBojBQjtRQe96dAx6NNKc/fle3LUZy1t/3RE5ZR98OxnkqCzhNqf0pIWf8YQ0FWB/wtOMGxpvwyERJrBR+kR9LKj1RcOz0+iG0PXXsA087hsKQKnD7PxS1Z2CdVQuSp6ItNMhLd588sOIeOyyH39TgPZ8lrB2BwTpjQaY6Ix6xnQWnSZnN9V0S0SNrD3TIMrfr6EzSafi687zAyHECf6KwlnlBbmBMGYHnAU0jjR4fSVnpeHe//ziexg6wW7jBWIIfo9cd1H4vTp3G4VbxmC5I7YOA3MMwJUqrQXZkfoeJ1o+dnQ+COWKkRCcsP9aYaAY2Z2bwbtel3Hs4IO78AgaVYwO6D/abHpjOHN7Up+WbDZBcR2BGJ6SoAWSh2qYGLLDzwUaAXpPWu5yW0bLW9RLdKx/oPUOEoDqO+BfrDBU32vLewI04Rdwk8c5ayTse4asbaAOG4AONFPT//7NkJTxufpuoDbMdPmboUr/FhbBFvI9j2rwJFiPNj2E+88qafnPFSpXXR4pMPNhw4pxcBbZQV1s5Wy/DKbpT8+dAtF8EwLOmWh8dmZZAW4BHm7LjfkUioEr8gdriMLBNRCgWxo59jUr9J/fYdXMnu4k67PON+bmF35IQT3WVJ4DNwB8okXRd1gJcK9FKnFAtDdXg3cLyMbmk/rQ8KAs5F/wO3xGJfLJ7581v/kb89oOFk7t4isiDFokZItbd190mEns4gdnMAewLOk+IebRJeGePI8Sv6iO+IfH1jmILiWnwoXBpEaVaE9aqniZjIccuVOcunjhKRoqqbKEl4gMP9QtYII26h0QAvZafoiav6GCU00ivUkxZeO20sdfQeS6RTCHNxl2C5p+fHJe3fBC9W4vJCBRJIfm61bqGottscTXeOkd0luVEvhbUhFnptQqlqWhfYYk+Jpy33Vses/gCcjjF0w2QtmgV+S+DgYiGW810rk1fkkGYAMsvbM8RuoVDKemx6gVsMe7KatZ94JWY4MHQjbibH6Xe5OGFruRwwwIrAx4eEJTrlXfxCnQ/jVedpg4ez8QXhzcYN9nBtf02AZDMxgzUXB/G+gvWKa9CiE31ecIYZg8YeEcIMg5NEnys1xjPYlRLFrUT8N3pJIa/IKoc5x1PZaxfagpHM3HPb5ubTqt8+JNLKrf2Yun8B+rV26I7zbXn5LrHprh4EMb+T74PXyQ2/ZUs0gd0fSYDrzSK6U//ZwrijCKX0YQaAQsPi+kT5CgpKZ9aMxOP70qYqt9SjLQT+D5x0y+FQOrZNEhYXQyma+ChA2zzILdQ1bomBB3aUTL8cW6Jlm8Ji5cqrj8yO139ved3y8H24BP88VHgyXIooYXWq4D6f6x733ENsFUMQfiY5A7/Sji365LG1fj24+i9FXHgYzP9pM+5aD1Q8MspT/6nLtrWrdE52LmRRNq7U4E8JZZkn7ZnKWYWFxZzcJKAelrVKmQjz0knIg2dp+Xg12vV3oceiprkMWWHjyw9Ewf0OrtZrH8k+ukIP3wFPZqgVJNmVZB7X+Tn81E6cOtLn2DlFzrSYeUFopk80ZSTJl9DSdHDN0GJeG4rOHD4iyEHE9GmlyJ+lfduorUix3QiBKHtFnuKMPoA6M0wMKz/23/cUp+TslWAu61RHfAoZv4BY8yKv8KRchvjygYJqEFivrkw1KYVeF7AnIMqiZRS9iOi5LdE3wp1dx/X8h0wL0mS2ArKxZ+1tEZh5eILFyh2h4hRP8vEN3xH6wLP2ndI33Nieo6aqKaVwSmjJTi1xAuJ4Cebefy8k9FnqENgeK4zXwEmBS1XNLU9rKI3TXq2jBj+9wewchv9hD941sCPzI5m0teooJN+W3WbiTkm7VmBAmDlWgaJ+QcXnMsH4syjAEZvf4cBLLH1ym1lPnhr5UQ85afOrYLHOMaUn4nXQOfXeEdngHb8ArlR4Lw2RfyCMb6PiPxfhEJ4ZuAdFh8XMSPXFMHnRwVjkjoxo9E8gXx1h7Ha2Z0caF7+XFPP2ige2Qn9RmRVN//MsM/yIObHpB49hK3sNcl4/xbgG72toLJOw3pU9I3JMc755pV6OYzQ626KptLFXIqRtAYT2q7Ibw8wrKs10E3SFbyJzLO+2ZJBoGa64z2hOF6FpyKPsWaK25mU3Pr/JNvey9D72a0NL5KCwoy+a4JHujIjuK1dhcolbt+5K9yUlRR5TDT68Y2xYfyxx3LduK7hf2x4tJuU8hJaEazxtzg7ANW76qxNtAeGJ73LqVh9X1dQTcmDqrQuixAOBmhb4Poggi5wGuriMDuDQ8XXJW4SC4Qwcn1uj7/Fe/U9+Rb0WOeyIDEWBPZQqFWi0OWto7hA4Mt/GFQB09o+s4hKPKSCmpnqAf+FZyYQvrXtxPxKQfMoogzunbP2upeV41sRsNwFEze0UePCX8daM2i0/3f5hjlJJUof/R1UpA2LjBGa6ZaJ9kk6fRuWvtggFG1xhbq+KCXSoKjEDv3zOm2bGTvu23CzIPT1giHwtlofFCLw7DapAlAZom449e9oYr9K/feR12yCZ/LK2lN6Jz35dn0lFfMItfKikwRPTh+w85ksfgZapZaj1Dn97SaStrXutnbs+jq0wY0SRoCRR74+Cc+GWuOPVNEAMWkMlUrZ5PHA5p7nJtNdrYOO6yL4vctUDiHjbNly/HLtXlPNduIwpTeOXmJE9MRSL1QczHJrYmgIRN6G2NOjiwbydu3nvLrFPJj4CHu2eINEKqxYtfticC4xEXRAhFwGfOlFrWQLk6g3Lph/V8yanYV/Z2rLLrHrs8uvnUsilGsNWLxm748yYwd/YMyLZeE9nliGWqy/HR8vn4c5rR9A1pZP9Gf5leFL420b36P/qK4NMEeyAEjQGz/sLWg5wum4DPZVzue408gsmbS1LCaqjDND0jf3UF/bbU/ua4KQ7pZ3v4/Bn8s4iSZjLoru05dnvEAZH2iC02PmCLpNXmfmHLKKmE8Y+OXr3WqmWzSXukKMBD+V+1VxXlhMalrV5FswymArciJOEgzgxXULRRor9nmpTTcsmGONoP5J0VqEJpnSVjBgzy0eprxRjMk2yswWHCb0JoRFzLk6R+w98AMekfdc1D72IOH/l3OlL6YqoH29O/Jsiofw8BsRu6u1xQpGDJN63axSth6vv2QMkUH8JXuM7rgrDA8qwgcMoT1msC9S8tXzALscZDZN/HUKBO6gpSy0pfZSSh121ShXcHT+7T77YJv5Q/JVzTH3Xs/DiMVf7QHT6kP4mK5EypClRFGx1MvICABrA477duMOU3LPysBpMv+Ft1h9FOnQtN7YG5liR5IO0lLGIwBD7mBuGrqs4Q2f3NGP3fNaphjjXfYGl7kk1oi5bY/AcimeGNAjZEXHkBw1KCQIRykOColn0KUsbBDZoIVRJ4mHSYSqJHkZ4QIjNjowDkd+CbF7dRShHlECrQgkNbUBTZvZZbNSjprx5sGTuEorvjMyug09eDlYMupoThEUbVKgvYgdEjjbVaTIMLigbrvBcFVD4ylon2LsFILgCu4O5fqJ2kmV+WedJpecXSwKhEMqimUy+Ve9Czna05cexxpH3BoFHX7IKqGg+jjMecrFdhobIEVjsk4nsAn3dAfiWtJl0BX107+09O8lfsXnHT8kgaNB+ueeM6PKQPqs9ATh53TBtIBA5a5PT2mLhlRB5hzabZ8e8VIpEZ9MxQQIfAmZFXdwLYLRPOzYrtVCOgPhwUlpbliromGuIo6RmBBOCCrdYnRZz3Lv0Vy4kjZa9cf5Xmcd005kfVqYYIgORxozDzQaT6eetDCw/BLQJNAjjw2ZY7T9ZaRvsq1mleG8Dt9sumlCNO+yDBkt+reI5+DGsM++BbCXX4lCQ+gMG53wK9onaSZzk/2qap5d7+M2dymZ/r/fKr33gJ6PLsp681xOlnRxa5HZy9Tc8M+GdaygXKuxTnL0G6EEAM5ixnibqcOvB7pFVvVp0fe4raeshc3eOHy4FRDA8rAv4busvmAutKlECFzpkTvuoKTOQIfEJMIaibotALBVVS4l1DB6sacjoz9PVX5WzZeEqGgiVcYKa+yWV2bGmyR+R0mhJc7Y3WiabVveGOHrVet10vigWZZOH6+KVdBwWXOn21dvg66GRbgsgxWZ167TDd7h99Q6Hmus4J4Qz8qHh9WA5A1ZIADuVMtzKgQdOZEG20bDc4fadkcXM1yRzdRRcrBVS1r7l5eEocz2SEWV/5O73um8luLh8QusuKtk3ZWlRwGmv2xDZ+z8luhUvMeKqEfAPrkBBAFlhCiq3p42ZfvtFe1VzHNosFmUv/e9HGoYeiszyJl0hI3Ei6vmj38PmG1miLH7OlDVU2VFGfoEEoV/iYZcOKfZD5YHwnDVLyjKQiWjNxZaW18Mf7NHbIasdCTpilayjvrsxTMrnrbp/QfUUvReDl7LmbqeKkGr31jXuYnlQuNu9bD4N7JZRqP/+X6eiaCkZ8BQAQadAxvHtwzdymZmW+5jI35o2UFAANcq+4JbTPhLr2PN3agNzrpuJA9uDLBGeXvlKpnwDKB5v5M1OJUb+QPtqFyMLO05MDBbxfU8+u66NCT4J9XHitdoIs7ZX1yVFRcm0qr9j6dKeRfCsoBHXSlatJrg13NQd9FdBD3mbnMn7uuUbon4wza2eKMJb5eFmwmHA+X0wA/4/azlzpkP+ZY2Fy2kHBQi5NtZKKGizrp0I4Y7KO2htp5JoeEydFFv/B/CdJKEVDrCYwb1TGdh9iFBUso0h5sWAZrjMar8p7XUnET/sTGk3q7uW+Ig6o2htbxnfTODWmXbx5MrFlAhE/QLwDsvtxXmuft///vylE/pleTKNdzNs47hdqIAz1WuxZp4xhu0YJXhMOohZd6Zvd5lHcAl3XekwGQ06qyryn+aiDjUmFcKm0NY9PyUllRcMgevicDXMWd9OTmNqWbUGJ9b7cQseSwpfKcCHkytKOoGCPsQ26Rwihde+ZrJnDinBOx9+xr+8Z+K5xei8qIQPDcNJ4DOWnC4d+3DVZ+vQWsXUIpiKIrWWw9YskmWg0RipovOaztFzfznHhJeWnILHj/ioQWWf5toAUCG9LKtWlHPJF8OhFu2UH4KjIx+wbiUPL9MNg9pb96tobJYSoKaGFrw898Nvc99AfgLyRH+S9H66dYVMfN94TNqTDMPgZGLA7MuYxdWFMINfaYJ3nrxlAnrsp5YqjwJOGHsC3Cnr9XfTQQ7um8HpiR7KgGCrgjv7PxuNiR/HXH0G8rwy8MPjv5Pe4aLSmyj0NlehX6llLX8JWZAgrTtWeD2pVuZnxa0Ft8eYO8KCkNL69ejg4wnLMWCQwQX4LgJWTHR4sQT73Ncf6nF2vgWOqpLUZAj1IcWXyWsmQBPcFIvB+A7oXG+TvuLr5MFJtqbb2jNaj7EvMOpYTvTfyRY6C+Mdh6dT+BWUPXiOHPLk/Wi+KsaM3IGZWwV5DY7b1cmXmLeK1z/VuyOw+CqatBorewsO3+r2IYBqAVrBH9VrxXBvmXO74idN0w2U+y3niCONUazP4LqbGmfigQpfY+p3O96c3uXouz+kBuYjBekZsN8252U4wmi2HP+V4DREMCTqsZ2RE0/ox5XmjYLOzW4ai/TGT4QcUjc+GGaMRYNlKoKQjPfnt3Wh4PzXKW/UiFfEtGFlzgkeWzJ27fBeTon7cOzdhSX0QjHy5iov03MZO9VT7EQlGiQ4fURECIlzAdwUN6H2LppiThOK/pUYde3WKz2rnrkP6TXDZitQgjfKhPEsMF1UARI5jg5/vwVgyg+CAoYJbjUrp7z8aZm0XvUQH5Wa1mV85KYfVIQ9s7wEa7CzizY+vCQQxnDQjF2oyvlUPR4jX5VKODesW2hEFOSndJ0QsoGAFdM4q6mCMrnFohGLn2e3MRwMkxyHcnedDyEp3UwWt4nVs9EH7JnYLH8T4xOia8HZ74eavkdmLYfnRsTwG7ovQ1Kfmu5EYKYJeF+hdkzq++vos2eP3vFcUKbHF7WnhSZwwbD2tgVt12XkCgVDiEkMYXnm/8kAlzw1Ouhb/ffKH1ca3F6km+i4MJWUNHasya1xoKxyHuQsIITxLiZyip3smKx+BQFUz1IycaqhNENpR4tJh3RtBum7W2mMWbsKYUDNa1XM8lUAXykKFhHxSxLtMyQ3wJj2mTtt7uUBgDXwfX6VD3Srx/cB0nCZDwZwoHUxVPhwPN2cGO4LlbMg8n0yGP2/qFlNo3ZgStEMW+d9mx3wPYcRUX5CwBAoG7VxlUh7J+AbPr4CV0otfeW604yVX6iX41walDuHnBjrzUF+OJVID4RUqGqXyUxZxdr0Ld9VkNHUkyBwO4hh2BeW81AZ3X5x8EBw9zpdXdQ4vWMW0u4YAuF2zw4aBCzHjfiSkgkm2pOWJDkBIfZ2aGGrz0Qob3Sek4sTMRW2fzVE8WP/pbMnlTBkf4cIZzObfuvxJPxB2ijbToJNrMXEKP2QjWWF9qd0qQ7PSs4z03HAxUOLIYb9rKvSknN+HDLqkbcA0qAZxrlTY5GGcsl1BmRu+JpykML4UYzPVc4jrhXpOHC2xTY/wEMXHBNTRhY/zEcXFAmGxFEZhMzjH5HyHkBhAEnHLDZ/7JzEUJ8SGmmdn0YRYbjLYUWjrl3IMBBVlJuDv4FlsTAUIdNlkpcyxWoQRLhPhhRQz/zO5Wnv+NAdQdkiYu9BAV2oSWnLDvNdhUY/uEymgoJMvnpYdWJkaxPd7Ek7kRq9nUIwi0iXsi130UJLM915FovQMV2KFj9Kk8hesP2KaKH/XzIiai5na4tWY/V4t0t1h+V8XXnTmlsgWDlLox4ahosJ1faEGm6hFNYVQm8bW0HBeqvDBlwgTYpsnq9LIFADQh3b38Ik8TaV2gvL2iivkZLmZq1yTfXR/lUnhLnjBOFczUbF7KdVq5VvNclwsha/nuHZtZjwGncSAJcxqfWuLxCpLBpo+4qxPi+8UNj+NrTagHDXLZhRX1OcOtIZyoi/xRFs7pd0F0BpeJVJQftonVpO84Iz0fY8aUeHHkdWB/XMmQNX8bgfwXl1zwVgkND6/MuMqccEGRYCbYV2o+AH7PdPHUY7nyjJ8oD9CLVMTsCe4RvlJ1hRzhX0K3LEPTvXHSBpeyuBac5HtsgD05bIbF6V4/i5WzYw1pnT6OtloCCpV73QXCKg8xGS8MQjBfavXBn5FODCsYaHHzxuGMn62rXFatDXLhPc34tZODsW/KhIczYgrIOB1ysD0vouTD5JnMxuMa0ZNaAwQuC129ciwh7t0Bdm+iB5qkg6yg8lFdvSsVEZOrauNpyjc1cpjjqf4wC3gf6EVAianRdCGaCAb7eg2zZ9oie+r9Ar56SLwl9K6fwKKGE8XC9V1dwyhN6bnCPsfTY01Z2t2IdjWzkFupRJoCotp9rV5950UIha3iKoazFdNe4fqC/uQmYtn9zRWeqgnkzFfaNJs3ZtOCH9071ulCxTndnhMdCai2PUFNZrV53jXuDarrsAlnEnO4bxvBUoSqHi6WAFajXIvqmIS2qZzrHO4sIv9icplZusEX6OxFeNFh0d7mhJenzSKLBeg1sZQn73BHrGKa5GyNosqJHsN+QZGdHP3e9Nn7WNY9PnUaH2ee2S66BMUJ7PIJ2UB0LnCp0Z8/RwDp9Mk3lN4THMkTvq1VirxzSNkF53BF74dlcjyz1DWaRbapv5W6iTnMsCAoZBpIpud3kZg0v+WTcOa/luQHT3Aq4XUcdfNpkzCYGhs1VfvwDwsZHVaadk2p9xhNWg5YZbNNTRS7i2qgv2J5hFlOCuRwYHzS5EitoNm3g9Jz0jrPqjkC7WTpH5N47W/VDTjT99qVoi3TI+QpfuGj3JTx3sA7HeiD7kh4j196opNPB+S+cCKK9pdejBJW9AdnkdY0ZQpbH9bY6sLPA6Mn3/ZyqRdLY4uDr8Sl60LyFjfkUJUPNQcH/rOBICzoC8JIXgifo45t9ZvUP6k5FURkRgSE9EGVHDM7omdAIJZDZ3a1u3jnO8dvnAxWoV7+tIrKDcion7ce4lA31bPOv3W8JQIo83XCFFV7lcD10n0ghgWQ04MlmBJhZXPwo/V8aOVusURyRQJBp3DsZxbOuPC7q36JVROUPdLrppF02/ZA3OWk+K/Jj+rbbziJSpNXAxQ4X6oxwD+K5X+LDhryfPoXKap8ibbv9fCWScyJMiKI3ISBd689gS6KC2n724GH/bdUL2AO2bxtYBthTi6pHpx6JLnpP8s43rPCGTrseEv4QPe/gEImILXhFlv/CiycLYEqKktFC5Un+7sMr10+i0DUvR4un5K6j7KP5LhmMUysasF30JA6OsCBw1IG53HFFBEUyVF//L16kL8AzRObkSLXC8rwDo2gB0zTA3S5eBbEpm7yBmebXvPX9QAblDrnP6jxUd61jZXt3f3u5z0amjvIqC0D4jKob7VZGOqaKA9W1xdzTt2XpQwFU/b+T1ubOtuvGqzSJJAGPevoJU8i7fAFwP5P6y8XEYOeZbJaKYRveVIWsGom+aNxQ+ywEzBAIWPN0wGO2ywdL6lOusu4G8bqzDbDyC890my4V5yNMcbC5/f3a+vs8rYI1r8m3a3qCqmk12AT17scJXbn9zmsRH7iDdMi8aGDr7+Yb/UksjzFFWcafQt2yfJXelnSmgq4cDWVBfLQ+Q8kCvAlN8dIedxK/IR8Ux5BSVKfxpWR0JF+wyMoKrhY8xdnAkL7Mz+gRpIFKmHHbHLZBQOqTHvLLuIuWBiRqFBWoT4ZJaGD1eWJfvPazPuWuQM+hCNgGYUG7w63At3hfB614eBshx6MouTT66n49ZDjeqjrdgwQ4Mb+TPfNAQHv6sy73qLRktEAaR/IHSGCdYdM5YuyqG2ePnY69Vy65Sx2V8CaehUtRvQeZVEah835xg73I8Qfc9RDfaIG4xCb6mPLUbixVJARotvln0P1JIxWiMO1oGJERBcks7csPcIsNG3w8Ej6/A7Xv6u8fJWREhtAEKSn3NrYIVYQpVK27fwL47TwTL4vr65G8payTOJVqTjKLN6i/0fFTQ+JZd1ZuB894CaHqS6ftJ3UQV+RQXY3M+CSeq/jXsJPl9qmsQK7Pnvvi43DJ9I8tARtNpl9jiqTpZh1hhwcvzCjTIt29rRvkrXlvizqR2TFiQrYlu8JGQcNBPtJmsddq9FUn8MusnWCWJDUCZdxwu2kuI52SKLr++gjDti2HoI8e1LZIMDFi9SnWSQy7V7EP+PVxDzpLz0i3Zgwp6FcoTHr4ekKqnTQtPgnsf3lqWLGpp+puJJ4TVZKNWqGqLcqIZKvwQDfjxjEyd813GJfF+Z29APpop+0cKHXpQPX7MbVbDgdSDefHB4BhWG3jssU/7wewwtMykgKfD6iK9sVGXbyqqikQFm0B3AhVHeEo/NeoN6VuxhpXUYvhzgEgUxI8hRBOfoR0wcdRfda8BHesD35rFhhUiEVdh8nIUyOSugdzAzILmQwUWKmz+2OfHwXUAKTDmuSRErcWRqVhfuZ3BlyT+GMwoXylzyWmvls11ghminpWSGwnwvLaCT+ebiQe1qtRaHx/tvS2wlkJbvNsZj3lZ8RUPi88FMJnMBQ99hjuebRj2kyGerlG3E8d/wUtNbYyc3E8egcJ2AcpQTz8ptd9sSODjOLF3dlCUgZX16/HUSDwTwRYCkjFD8AnDg12UsYlb/7zbZHgiJ429igshy4/QSe3+NGSTmPPe9BBgNTQ2NQ5oDlLBc/5CNcvZhUKp2K+HlkidAQgIv+ncKBo8VdCVZj89qu8H0W83059BBJheSDbg89fSX5YJwgZ908o2CejaZLms3kKqdQn7ogZmDhftBjaTEVRivku+pxLhBDB9M8TTrOy6bmbC9GSi/TExnxYOvnklqO/RntYJ22xgdbOHttClYPzE4dae0y4vMp9yzQ98oDA/3hinqlhucLynfT2pz0D06PtPyxFPSfZBHmie8IAQTD4Hd+a+oYYnIELBsDOYNd9o40FXpZU6rnauBdN/2YbNfsGKtyheMZAz8MG69LzNTRtBfbRTnaNRvKrbCM/84jnEC8wI6dL/ENZfgy1BgCO5Rb6pDpLtzbzjM2VUaVG8Jj/3zn6q/XGt4j/BDgLYxlEqtqdUu019aqN9/6cUSCR2gnYZqbpUV7isQztW8kxzAuPODuy1LU8f4SGyV/wMTYfzJV7t5NljXvPkHp2iQllr4SvU809SCl32Jr/D711ZECdbQwk3wI2+AW/iQIUIPHbSbGoEYss1srZnFlM0HrcEmNG1N/A6qShHmMLv7xPrquZ4Y9N/NKRGsUY3qgWGCFI9Piq4P13pCI/MOiwvz9aKXk6PmUiUpfBtgBHHKCrKe/qxk+mU64w9TydvaYeORFyjnC3abHbaEN+tgYm8AWRMuBXy8fK+XQHPLRanfaE5Pb9rKntiLuHuE2k/hq15Jfdufd2e91Ndk2iPcDoAeSElx650cPKm7OSNbYph9rV5y3Q15hic2Pon/AE+ZBU4/LgbWTlQAtQ6tJKvdcXNJLtBECa+mS7u6IEqvLY9WHWn8ONmIy2g3Ml2qNayfoGDyapqbF6pjR7Dr2+WowiytBGcrvW7uTpw8qDoAgcz/+zV2MgN+jYRJ8WReUYooa+cZ6lCELGlLdkl7xQYCJBQr0fUAFRQCcUdGcQCtgof0IAarFen5eqL1tytKb5bqT5SGn0GfK+/njo7f7cPr/mVqzB3rX+o3mYRvvzxXtyWHJz3uJTxvdaNKbftToZG5cYfJVNMRxmrQhlIXNw4iKqzNrzzv4bUfS830AjCuflh7UOuDeeU+/PPK3yOzOA3EV/0GJKj3XbhKRq21o+FiM7dXhvAmtMjdT9nB1h9ZuaK3/RKyhz25bVfNqMi2WDiB0hZJcRs8RFs5oA/vzn0cXqP0adKTVq4Ab/54AiHsHisamvH5JMsNRExYfR4s4ejBoS6lUfVZUfg4V8mw3ooj89ccwaCBp9aSzkflTrWbU3O0V2mwlnbrrcz4mIFNywT11sGZVh9sS77z0veZUStw/vnvSB+D2UAO8KpyGlWMjoXYQulBo7KLn6IDt/8H50cI5+X0/26BRpEPu7lE5oBg34NsAiOnFHOxFVZvvCE253K178M2l6nb0Di3epxB3piQjYRl5Vi3NuJdaAT7y23W/JklGwL9UL/xlToXLcS64yDYYagkJVFOFSaAO6pyJ4f7p/iqr07wcsRDNvSFoicfuQhMOdTUbDlg51DD7s25yoRPhZG8PNWllzoF112wNT7AKNZktfmaUe1UAxWwtuQyUcV8IuuVUkn404gxmvs00Tb7rgWiFEi2PDTAfYcococE4pbNHRGmoAnRwPtf5GFa6DxiMqbsG+8Cs1ok3lDohyeBwBGI2gbVtphBmRgxn7Bh36hp9YhfueLCI1R3pmMrD1//UeIA1r1l78noEwDaTwWKCziqpNvmcQuh+3rasIPiE2lugwBeVZw0EqfIA0pq+gQUy/dN8XPX7M6iaVivrH6vZqk+gBNlUu8JHi9EE6+64gkj+JvsqljzsFumqTS3eBlG/zFz/DNPfnNi5K2Kw51EvwnqyJ1ydjSHK7zU6lZ4Q1BbckvlK1hkdpr2wMCu189IXOo7gB1bd3/09CzyTIOVxoGKpLNYTGZS860P1liBofiqIPgptFk7+15a4U9gRa26AOZJVdNnvRNLktBYzrp7y/RWeenYGxVSzQTToSDoKeQ2/+4/fpkFR2hnwSIQ7I6LRZoJjz3badeDrYTWiyhHV6qRXaeQ55a2y5r6/f8Re6t0sygfxNVxMz/zYTNisPHAbd3gNcP1QxFmy/uRbzL7Vs3UoOK3rFZGfdtBemNzmcWKIytqGVafn6CIFWfSE4+jSTyF0Q4rxoUcrQ2X6nClObz7b/n5CEYs11jxzLI1mtWXXy7ZX6s3SDY1iZOaVwBnwTdVXXsP+aMlXHNY1XPxeLy6611MCOgOkikEiXVez+s78BKtsHE7FwECau2mGpeN4OanFE2/pQ1xFkKtmGzaZrrG2Rp7+U/IDXR32iyH4EU4/43g4puLKyD+BctXkJRp8AuDE7XbU1gLh578HlMsBPIrZP3dzMBvgu9qQ5sQ+uU/O0nMG0kLFoVOyobY3chMtg7N2HdlZ38br0pnF3Oc3A7WkNHGZarXZkLXiTavEoEFBLIwilghllW0QlGNCzhiNzKZNHC1fmc4FHF9FuJ2QoxkZjPkMsdsd8R67iRrC6Hf5aew3xlyg5tw1mJKBol8mbvdXIq5wvrXmjuYrFfBmTybdM00zLOxO7h/p3jeDnYE8K0DgqauOV5ifl74iBghk1Z7/zbChbMg4aNNWYCXRwBtHBIt+CozO+wvpa6M1r4YNIE1atVgh17fYpi2TONJPKU4v6ZVDF2LNbkd2H3rQ6HyFGidz6NcNF3dIFm8OqyF7KALq6YrWKjgMRGTiLvpuwgDJH9Iw48YhSWKQMNQuCX+iGa+WGNM6PnNHEC/ScrqQ+KUw+picTxBuopcb7udGjh9pTfpGZPNjjDv/GAf7w2j4zQDeZz/j8HdA39AFoNL7DV5zjiuDMtxwiamO+TgEdaK/PfapJaJLsJC9FPpe7Z/kfaJAZh2Spiwb/ekAQibU078YpYi5KXX7jmHKZ++gH9o9o0jQBs7xxxz44J0gv1R1k6QQ3uM65MiHXJP38+k9u7TMhCHeEuCBUbYm4W6ALfp0lW8nJyOtE4F7XF0q51VTay/3npe8OUtj6oIOvhoMmHUcKagt2CcgJAcxkcuGea1HQprJGvJH623DGG8K5qSngCT552fuTYhcO8onW67xqzaC+BRd96RMFSHEk54jySvqHSGEA+ggVWXMXR/tWNzBWMPJs5q5fAd5rKzq9r7ZEnHinpJgByJo+HstvFIzoldcp9DadIJeTza45kyDMnawFn2qSvtitxWS1HUNl9cH/fYZNDx7tPQOJwI+LsubL/PyzvefqrK+8WgHB9TAxx12UcK0aMAq/Ie2kLdIpmPIMwZIaKMwRQqSr4MPyNv58/MX4KQZ4C7Gkc+ULGuvuNg9hDT3NydnidVklfLAkwWJ+W/WtzgRJdtwR6FqCC46Tkheg8ZWiA5pPkYUcCU12yf8kE34e1uwIrxcNUoIUrFVofMdWKfKmH1zjjIhxh9nFi/SGkOZmVHp33TvLHs4lRRQRS3EQkzIM0TIPLy6wo18G6l31dEvDp8FgVJ0hZXTq1V/0ie7apMQwNAgv9NNiSTbdo0WEY2AFdKm1YSM/ictj4n7rBgwtlzPxmdMw4zAT8R202xKUK9RVKkpYZZO8zipAiZ4DPTvFKUJ4Umo/IITDcLoYvev8lV+VSIoYZn+rmpJC6gE9Be5RmrtiREpY1rCG+91ENr/BhAClcxnywOEaBq7Lwb64YAsnDaephVsyyzDQnb3OevC8JJrYoDu2VgY/OIihJut79hReCEbkqUN+63vxfk9qEXUg1WkkneYBx+wdEunM7eXY3tJ7kpaJHIyXlTpEW6jOM7uxCEB9hv7U0qkkj7cQc0lY4fz6w1qcvWDSrsXVJkGcCZVXlRksDcytuWrHV4rpyZtsbkruREYPJ+2D9OspQsX57nHdDL0WWgi+tCjDc80Fv3As0MXbd6Zk+gJEOEwVrk2UpizCxODarOppLTTHT3whrQg+CNkILnGgeieNQSzva2Sr2GVW7C5iTwKAsQPYZgsF1Bq4MR6VG5JAKYZ/MhEqMvV9GYKCOzYrwQwUTwf2uCZ4ePLOgGAlMjfV0x3rphz0szLMjO/zD/GqeotbJrs5p4Qlw2FF1jgXV+2kV2KwBiT1Xr10smDkMqAutp2B6tWG7SSBLSFt/TgTyUGEVcHiQxIRmb/h7fetqXlBwUqAnLs2p8co1vMqn95s7Gxvok6AyW/1kC/SfX7Ne/Bp7Mp7xc02ldWraU9C5IsBusMPnxpaLtz1VIvk6DUAPakZHFwhCnvs79eFTDDvkKKBANAW4Wz7CDu1e89IJfDN5IGgTACjkFUXhFXXbvDQlugP8kz/mQe5v/W/oFT+go8mEEptB8lJGUNGvBVJa4kh5kzzF3nk6i+eWEuKlc2iiEi9T/q8i5rtnvPJ+3JjqM/WxQqK5LSjc6qzjYrCtcWLrzdTHEBnPdtUPFPIP8C+aaUF4d6H2V936Y27E2DJNX1HzD+ygdsK42waIK7S6kQPivjr91IQr3nvr7zqcINjU0KLevLelJohWL2q4Kx+kfT7X4RSJAx1HMHMx/LQycIz3wNSHkt+iQnj1NZ/IX3ZNj1u5brZoOcYABbaMzpXjdTccv2jX5IDDMYvs84JOC40Qp16zD/U6ziauONMRbyn7HIuZqkPdjtiAg9P1852/EnWYALq62JMHO3ujD0M3yhq188YnMjmI21K14UGJKsmY7wiux2kTDyrASr8chqChzzwmhZ/BuV4178Bu0LNgP7BwNkCN2ldKwq+ALb6TjRBcS56JAwUznMUG/xF0q7AlenfH/P/PU7hM/TFWi7nyBYS+WO9hqV8okIo2NnV82kND+NidMclkxkoZBLUaQbN9AajjrvQIact0LrwrM1wfDz/XbNN9axkjokgbfoSVYsr0x7MQYEZ8m2kiVO7J7FaxQsjubge9Tqs6fybTPtzBLOw+u7eCgZJphfb+D3KVQdGTEZBvEYWqudFTTorkUjpclbi3CiGJ7XLNPkL6Chg+pZ0dgyfWeMY0ubQoTQ/Ao6rFClyZDjsyOJ8CvnQ3oC6F5KMhx/AqIUvfKrZicI5N9BpNpLgqQHb/bVPmN02ZRdtZXn+ZRcnP4CWuzMX6gIARrf1MhD0fsQRAAgVqiS49BM4lsWbpMQgWexKLQM9RRU5WjoLDxAff81CUUXpLGL+TRVrO59U0IEx5rrYtA/O/8AMf6Mkrod+eVzJHooonA/LbsLs5yzj2iGq8Teiei8GALJvMWlZroRybtN3MPiW1lT+VbiEd/TTIlf/CnSGbF1vwJIgJRhzuyHoyjFMJzgtY93PiMvV5W7S3+ilPpzaG02NCcw0XH7r7Rx9Ai/W8Aa6UzCwpOFD/0rOGvLE9Qeo9Eg7Zscgn5PCcZ5mdeuBFee+xYNEtzskx7cfDwAxO5/3ET3YG++UZ+yd0LLtxpTkBOf/tIdovQXtXTJFqgS3MZDB8+o35hXzwxrCfBB4HD5o64RzBHrprH8ZR09qgiWTAsrNKCZTw70uT2l6d+Nz+aNhsBioJB2qgLyFYpvJKEh6WL7vFOMgDAcBY45rQyicm/HNyWQEAjITd5b2wvMu0pIaeRgUsEWvHqw1mM2nAT2CbwjGpt8aCe7LY+dWZv0V95XadxyzJoa85fweuJcHCraNEpAHooIRwRnPcgRYh/qLSYafsAGs0M0hdr6TzpKovypu4MY1+rUXN16TQqNcK/s2m5fiNZYM1PISF5JZ3zvJdz0a9g9KClgkBEwtvHzdFkDaPe3Og8UOqvcIyk1Ng99JVHcM8s7C2LQEBF3Kn2rPBDETNMuX16tKmP/YqOyMeKQt+W28hJW3/fde60r8iNBAoFqV99eEu/qxAMBIkj9mcJi/vHFcmtA7RtNtGINyh1z58QK2A4FV7AzBNfZGnZB/YyZ1QW4sca5q16YrF3vTTk/lPTIbWaLxlqnh/U5/X/RzuhrEc92YGqA88t+fo0bWAAEWxf1WnsM3J65v7AjauEcmNqIWxQyWyWV6lAOhcJufEfs7ShgEcCdH9nG9N0fQSnPUppxH0bPI04yS15NQfaCB7/lcqKNQBZFvyiIUOr9bli35mknum+QOnsx78/2dlLTGZh2Bk2Jmg7uC4X1fVD+jlIRKWIjkpVjqP4eQ9C5/M33cPnI5/z4RDzJtu1k5mUsqXMulQETnz0eqGmJT/8u9DrB/bqFcifLmQbK85PjGrZjAW2DakIsmgH+8eTrB0E+KquY1fhkT3aQoC3ItpvkR26Z4PBnyOsAqUr/bqpTqHQfsxHaJWmBx5b8Jsg9sIANhNdCcfwV8oPa3pCP4Tyxk0TAgWOBMQgGT8gqYNPayk9rfjpNU4GyFMCDzecNavH/bzfrCvLpJhP7houQky21G0Qc3bzIFPQcPIXuKjeWUzvPFipO3qeJ7DddeRrPG16E9UhDd3zgjtRSgAkPGqIg3QnqIQQJIcWmX6QQ+8w3htp0zMRsGaoavKITHUGXRojDKIhuVhuwSHIqmMgp889vOpsJDbuUyrwxFjMIxg0UQf+oKGsSd3ZjHAFB7FVGW7MaIo/8WoXSduTjPykSGZvAsBiG6/+6soRHYIX8iHlLzt2Qef0VnyYpCC6mRSPZFPVN0S3FlXuZRdngN2j0D/ARSWAMz54IKuQ3v5ovwbzvdyt6Y+n9Dt7pK+UFpLnJBF3VbNQCqjXAbyaQhhHs9PaSSYuIlgN/pB9Ip+PtTYvAVn5vOXdutJJL+5Yw1+wA01z9Gkw0PkP4dytTjBNiY+MCaAgEV0MmbplTdgyyGN+SGUf20/5R1ICIhOmtmDcyQk/y3QKNSp4qVgQajShYLzJkofYF43TkzMqijdP6h9l4+31q1764Xra5A/jnkiCh5qdfy6yz3v1F8LAlY90c6w/AnVw4rM5ZP5WwrPu/iWAAWDJV8jL8Bw+rlZ2+KTtOPxhDRF9kh9nGHDdT2TYWElpLi583oKkfXk233npE2DwQoPuXtcG1cL7l8qJh/nhjkdGiw+oWu4/ZLGqaGSLnkLwz+4rgjy4vLl0eRRR70twuk78kRgCxHv5RoxdqD6h0hGRo4sEPGqLRAMbPgtLaUZxfyrCV1sp0kGRF1uZ6714deKXUu95kdsKeUOC7ye+NX5jhAG0zd6hItZN5NbH3v/aeN8BUKQZhrAITcZ0+/QumM2+1oVhw5ph9T3uSAFrXIaylZBqaUOs7UmtebukoyLlUOzeBhuwheem716d2CzVL3QcB3Cfm58KLAbHkVnbm3wSpyd0rbwY3wBwQivAWpYgw0x7/+A6TomVjNV6LE20OgJhxeP8A4P4J5p+6K0Nrgy3NY0fK4tb3oC3tB//AfEBLYKTjjDmV9u2tfJxIe7pRgkoE8TlApWw5L7jsaaWIbQnVQ/CXrrPEh4CnGmhw2axuXxN7tGxylzqDAPnwt/Ylofw1arjLHKIxYaiYlhDoNAfKu/kSAz7NYWxYueAOAzFclziE4XAKntaPsS6uDXUPt/BbSnubjcVi4URI5KN3Uz3+CGGHTum0z37WBvNSOtpApTu1p7WQurHdL82zk+i8PJcV/v1ea8N4ppo1mJzNWIuovrfx+l1O/PIaa9QLkZLXeqtObcHfkU0tCW+RR9GiEdWnX98BUas1llRbJj+q8RAlZbASoIClhW24ojLowMiZg00PgchJSdG1OMXCNYeFk6107oeMViG/nGhEPco3HgU6OdcCTdB/yrKD+J8hNAzVXdj6TdhRbq+q5tBSX78R7T+lg1KQ0kYmeKd+WGBXk7224uSnXUXwF+EhXaW0F0YgvRQ/nul5CHmcWSVJFxKf471qoGjLbcbbTZ9t+xOLh3UDg868ZaeX87WExoHA4HyclLBCF7BzVpDaHlUkEtJpZvRaTv054pG1Wcr8QLcNvmmRxizWiZ4Ut1sosUVE9F/qWJ4yVAfQxLd9SwEy+fts/FBn6xVlUkR8F6hthrD/MMiOrECuHffE3xiR3mefZyA+/t/l7m1CLrndCUKZrcMQDGH4yOQYEwrVZTDIq4D0TcaxYraW2zDfKfJPPp0oXdOZ5gh2z5lwo/2XHgYqCDjvpq6/R0ivgYs8GGs2bPsMVo0/9I1nzIU46u7LHBSn4i6lfT2TXsqpmDTkfYXU0t23Z9U02eXmBy5WuI1oM3Df/19DCfwssMvyCRVq50WgaxCKTrFoi4L41upEZrLugdwqEyF+LlgwvjBfbhjkUYbD6HiZh3fXrn7bxDdDCjerLdCKBvjVa9WeRyeK22vUoyx0s39dieOCQDvsNKc39pouNSAQgm5Cfsd8M75+V1I4irUvoINGl7LajarD9q3PMmAFEo/g6cVB7J+llp9evkKUorMIPc9MscA6fJYHb9f3eYmKAweEitSMDp+BGyWcGDgp705nmdJGuBS3REn7ykzfsOaDYnWW8UTD9u+Y7UOw06L1YBL1XE61Bs8D6Lrzr72cif7gunDXR31ZKFceyQZuVqckeHonEPo3O1KvuAMnI35Aeniaa3AZ/kZEIEF/YclZiHgD+B3ZfTT32u5xXRrLscqbCPlVti6NYmHBPdOjl2AgqzrxWhNJAJ56fdw/Hs4btCtvYyWJD0sUKEx5WQt17MBTxPDHPk3Xg3R8UAXY0rzcs9SgmZXs4O3ZNLcl/voylH4snbsGDo3gSxqfdzF+3PciksA/2bWvVHadQP+uneVWfa6IAcpIPglhhVlEHxUJxCAy4Ys6zkQL9ubjagbWqDqktXIqWyHJHoUT3oY0Bnty0TNwt9uDd4kRReLNDUp9WAnR4SzBTo5tm1Fn9/a2idKPuIVaXoURQIwBqJaqjnUcUXsxUQQ/yykRCWDqy6nbeMeVP34JK2zmsfodAbC8xNyj/ZMLB+AZRlaG5BgYMbCd84SoJZxDWjRGnMGC/WqHFgeZrog+PxX2LIIA6dAo8hdDQXn7Oc5WFnBOk/dHqhDOXShzZDIPHOngp8DQCw0A3Ldjyc/BUzfM1E9XTyqm4V/2kvJ2JaqHQr+U6R2ti5yXDEaqyy5ZamXVd1R3hjEOLSaaznXhzlgFDiH22DvhAW6hYqtquTfji3DfZgG31XQS81GHFOCSYOL4cRpRRJ5YzRhvqSuVHHDShX7ZSDAqriC4vMy+0oRo+mF27iStb9DgBOCo0bE/qrPBp1pb0rWCLwk3eTwem986w0C5QkMjfslNswKDn4zazi1MMAc8t7vqsBh6y3gjNcjcApNHUB/qxe2+vb1B34HO9TfyQhjv7mH0iERqQZYfLpuSDxXy0cguPICIZ84G0qXFdVB3kMioig6BY8Nm7RYghwIrX13NX9142Cjvl+7SHTxnVTAQe4f1OACvpKVwYuFRbrRIUJdamntLgUkyfyHQgx8uvFZMNA68b6z5arwpTyGu+SICQx6OvB0KR+EyK6rY/BH22z15YzGzZQ/pXFN57GNa1fiC3qHPJDNEmmSAYyyo9RoE4dWq4QgRInJee3Q6kd7eGuTq5B00OPCcbl89M09nQt56TW0oWsYQ7rcZUgVUMtqc+iDnkECVQKGmkD05m8RKRObdWXYc6/6fct6um39D8ArTL4+CmnpZq5/p5+Et0dFBeIS7ha7RZuv4YIChhnfct+Jjkp/ginE8GhrJ2TmIXwMQjTk+lbHqEDo2LQu5v4MeEsxX8uo7+tEM6qO9WoREgWgvK1jVbaKXOk61tmP27WV3Cd5VPJ0taxo/bmTWqrvFYLzjY3sNqDRjvungqqt4yPxXLtp16EQNQNcy2Gc8n3LCFJJlOXrQlgGyqLhr55jfmgjyH4V4PreKNBaVFu61oTn76+wdHocZYfV26oMWBqEE/UWRxWuKqyRx2ZZmWRjG2BnVFeZkCXKTsf2O8S4o4a/K+POd+QWXiThpyTPyKjs34CjR7NmDZhOu15Bp9rTfyC9P7xe9xQTHEnk9OBtI/Ud8ieewuydW30dPBof6ENb2rF0go6PSrEBd6leqWumNUwCUCoYGKuocNYK9/MN7UIJz8VqXg97f5X0lEftBt4g9+rFSXySoi+5ulNGy9g/m5nOlh1S+DOn3yagTxGEXuDMueSOQWH1p843Keuo+MiUVC11OyHLTdIYGL/f93tC5cWQv90G16PM6LPRfmv0RJMhKHriZOS5T0PEOEclcT7CRAM06A6P+vGyRFZugB96bndvteNLEodL4Lnu+/vjk8/3mCksztqgcsdi5oP9d0etFsnn3SPEwpStlulohORZW5nvVw86wFSnP2yBQPJEteNTwRQxDC89dNvsAjQ0Qu9Y4HPgCMITnrqA7yr9nKfUPoTjP4hkaOVpj6KZQ/1lI0jhm59e8Mw0mzth5vb5fCQJ5ipdTRtq1v6W7aIidnM9QifOpQFe6k+CzzFQDZp9xom2HpGFgX8teSuZCJioJS6r656hB0X5wDqI4t8GnYrQ8jsuoLQwccRVm+iTKgA26uZB3Pg7zT1HpOj0s4vdmYFXOvHmVuQvltW8TdRBn4wQFH4E1a/T2j22kklXLhAqk2OPxCLuhhcGPAbEJxx/TlDSeSub6Ol+JJSILaPhJ/Qz53U9Qd/kfrutZeJJzzcxBTga68I8TtUnTw5paIJZWKlz3VpzOon1Sy47HtCOs7L7gkqezvY7rAQt2QPxheoj4qkxP9YZgULGaxXxF1v+pYuXB8TlnSWx6wKN6sQU40CNKakNnfRQLw7Pv+9D39DC8iTKDeB3JqFMBJXZ4GKPfztQdFKCf9lddA6ttlf+ltq/S/mz/XO/XQZ+3xwUiQYgFfbkM31gEWBaWiZZPASoe/8I0lCQ6pUEDGq4OPLijhxIGjRq5PkRCITkE8Bm1L6retkdM6Yf3fePPYpdEPINuMFBQgkMk+HwXjj2voaGq7afoGaz1sBkJl3sy3HuAwEdotKmArH5CrTh6PCSIywjAFb22HjmwPBsW8TRnwoH0VQb1BzRY5eO9nG90yGcNKV4EmLgshyuzfhS1o7ssM0i3GSG6mu3kJERpLWiL8yiDBAbZlwZQ9yP51ECLdnH1JN7t3xPq303VyY65hVb1yhBQUdGrG9QaNd9a8WWTI5zhIdE8CMbnEjZZEygylGazNksV8mvQjenFdfMaLCBTZzoQGlhtxnU1JrAvg/AC7shUaTywmbmbscI/oITkMyhaa/TidsS8/+tFZCLP3kowpgQAWc9XSTsKHjyBHPv8+kqDAPOyaXeCrWN06G2gvjhHHrX3H9l1DV9og0+mmOKKCdkOD0LsNmbuavQYq0Q3g1c7bYZ1N156wb58UEUbIdDaaYixBGAnP2fntuFYeBnvk+DDyLTNkeesCI3kannwXF2e/8MKVn7PoLJODvjswkmDYYTkGxPbljY4/csZzchf91FoPD8dFkyU0dgyEjUYuhQsnBr8ttSiP72l+XisSzP0kVxIWZfFaLOVfcacFSyhDUAAqV8XjzzprFQF5Z3DNELkCmmLs7nPsNv6zJXpgUVA/gRD5Pq7GhYXL5PHvtGng9Nr1moIx0YHrLDxIHtjlr6dICBCPrKcsquIIlwpOEB6YTgKCZRsXUnQ6uSJ3IV+EnwIHjWoVa7qjrulNXb0irg3cCOg23mZhnjnG4+a9oDtJx5aRW0Bn9sv5tvGtIsz/HUTxBxrST5pl3XFZ6uCkfrjnTQVHEe+DuzdmIdACmsUlZVBJe+EHQAAQZI6YmSZBXKNCnJ4k1VSN3vAICVG1KcIMUlCrF0HH5m+TJ7u8uNY7gulcMsFsX5E/ZiD/aDZwyEBFlEiRRdidXnMM6FMCgJFKNixbvRtkAjM/vLzBLWIy7XKatnnogxu3MFIMCOh2T0QmQNYbRlPVTnZyN6+uoFpctFlecKR0uJUZ7e6v4Y24bsJ75L3b/iQAOZjjO5cTdMnp1CCOD+UP+FjAHDaV/Hnaf+CpUHb4iKsYq1FKbColctPgDSW28nCtUjaGymhD5SqGwROMhP6KAR/tUkgVrXULYdnNzKVshUwSq/QlxOY5TeGtqrs+ClwIQzgM1ygbZchL6Nw1an+ECh2jpdKHaTPOrQ79A320EFwdhRE8jzjcXKl723vbJBrOTxKQYxLyrhYt8AUcYl97xoNEjCqWUeyOO9Qaz8eCcPVdAlaS+A7wDYEjWzaacrFQPXJZx+wg64kdajvHBhrhW80Z+kxGFf16ZlnA/hxlRj29/hPmDakZIO2pC2N9w7rxsjSHB9lGtTM4YV0HfnVHvF3Ib9Z9Rod0fSwh0hKdBdTcJy84X6uhEMIGQDRufVoG1NqACVn4jyYR7WSXKCs2yqLsEJwteWK9oKLlJZj6fYjGLL5xKR1Um2cKtnvqXNrTuSh2+nEecWIzlIW+mNABnVzNuZKbVLkIp3qTNwjKj5BOILlJ5h5/HiXwvj4OtbW39ThRnQDXfYAMdaKPArQy4/DRstSajHuI0DBTVdnrBI43g45iBLetpHWKpir0VmaQojgfkvfLIbA9I6LAaPhEuSvQjyml82bflf2eud+lmt14Mn9gWxATTDi5WCtQMpI3yPF8BhGNrmEMd+bumIPFtZ0l5v6PC0knZO9gqq6vivOhiAFBeCeEob4lShfyxlVFO0mFp2VVtYe5k64v/BMePxKZmzVsKwCQrtbXzD0+2MivtIKl3HJncPgMwRXA8ffdLVpr/MbysuRO01BoJFZ+jp+8A/qDNKZpPfsrJ+Kj+Zko7Iiw+3GAvhmyNhqQLav9SDxe+QSZ/0lJwq+RkUP4l7im1fKs7U7nrnt+Kea5uBp3jjLzWZyDlksfQ39Fq5bNQoJka8InGeBdfVvd9/3rk7ZfeT9M/I+zx0O3o19SdvsLntW2y0UMRGgvOw+dOdK404aX+CRC+dB8+GosHux0IsFRoqoFOtPCEVvZMluLTaO/0yLtEde7opFF9Kts0tvuK0VPJ9uQgs1zRlg0SBqMdubGIQXhMo882/FjI+WNUIMZTIc8eWiUIRJzb9v/zCdliwOhljSGtSt4i6oZQwtezK9soNN6dIHfhvSJLATehbuYh2nO7+0T331Stb1L1+xTymgE0bUM0P9xQjBmOMQqDh2DpRNiQF3t+PKaPL+DEoBmXK8EuSQ/PCoJZx53NOOLU9WnInWkvQNvrGHItwAzfn0AwiDPfvtzfTWl0h/KELYJ5lYHLKXKNVX095cwt2a3JLnSC6vP50EP06423XwVxLNQUzShufZHErWaFr8ToOoPB4ppZpWaEQWHSQOcVlOOonCOQ7Q872H4RIcGnrkTLe+6w4tWs0Akhn1E/Cw7Xb7y+ebg+2daTgwmJ1FtCG0P6O/QHWN1yTefFC2oYqm36AE5/V/OCvnCdTkI421Sp9q+15BxT2VZd9OcZRUOxhaBdHW0bDPHOq8JypkmhDoiEmrOefR1i7r17AQHpeOYYacP498EgeoLHlnr6MQ/iNqPEcbgMoYfxJzY055XLcL/iH3uqpkxREOe6w0xGqFg3t5BW2yoSn7YBn8OKzEEc+d+y57NTIzX4h8r7ABqZBJ7X5mJ8y0i2ulTtDT69+7EvkKQlOVYNlSX0ILzFyizgiYonIXGrn/M8xF8OcDmSPKa65GVXxncAyZcOBPYF8CcCr1kSvX6UkAccMALHVg1cc3JdVE4IdYYJXmaJNDz9Ga1XJLvNyGY0B1CNodi4W0I/AZKlTe/DgqsyNgXxDoLOJnmp2l7Xgs4qe2Dn830/zZg5/wacsNossVdw7HvjzRKxQkik4j4eU7W4vtYnYZ9YUM/OWZmbmZCRLEMOitytyb/6aggGbdF4BELKfUGSVSctFDJUuA7ciPWK1jwAhqpUqRSlF7huqp9UjTsAY6YX9ppJIYKJlTFRcF5vueHYOyNjUc0Fhr0iNqzgQnRNfVyMV0kk1bhtp+hWEKQ6s1TvCcbDL/1STifuL9wHAldkSeP3DrcZoCSLq3cHJgbuSvAxCjomh2gLcRFfqcOloG+b1JoRtnkRQ1laPwHqUqGL9oKC8wmn4ECyQVQCh8SS08kJQyDs4L1TiMvVEYzDd7gZWWbxqnUeGyOTAjQIzDXp06lJ6EuvQQD57STHgwWb/fPppZwz7o6Z553QfhywhEbCeYiL2tZoXxhNETPIqni1mopchzPbZSOMtd7igsvbWqIR8lhlp8GTrJPatIWSqYN89XAyVGPkJi+KT0PBRDp4tCoA0vo8QjB9wZGSJ+NS5rhcoDw9gY2PGTKbH/jnlZQ/l8+UdR7RvjKODYJUsoInwPf5HUdRczlgkVp9lL5/MPjT+8C9qw6Fx3285ZyO+Rq7xrVDb8uiO6BuRtjSVHomcab+Pmqsdp/TopdDJRx1oJkUKdQheAdWfcjP+WFlbKFpvNBdpVUfxmw1kRwA22aHBia+wSp2XuYzjEjdYxDmd2O0/dk5eI1tXQlXgrZDLKfN+tMr596AvESLK9UNuH4zWlYBSv1vOjh6PkQfqL7CwqUoCuspOuK4LgSs8eP7GqkI/asUKQ+rYPhofnV2JH5vOiaNDskFLD9OI2Rj1qxT+yyaj41vUXLpo++mck4zlQFM99moVVblbhuv2CnBYVoTLDHrzdo8+jw3GPp21Y/IKRO48fG2fz89qlY7C4GPrF/jRLtAqkkjsTGCd6pav06CD4TJXjUB60B7tG33Cltay9R6XmhGrtvJvoW6zrAe01r8FTvLZ014Amkz84fLzB7f7isJYKuTvw62lAFnFCbPEqJzw3fhkT2uFCBbEjmMGd1e4i4AHE9FltDNwYlb7rs+VZfavhWuTGds3ERBzQeBvNtNIvfjGpn8vdoU4b/F9FeTV9qsICyNZ8M+aW9zW79ZBlP4KSq62FiDHOHMhYKrj82sAtH7T5oCMtUDigvyQ/YfbmFfg7tlrBVoo+A8U/trXgBGvt6TPgr7prcJiIl7m0KuQwuf/b4/Tj5NFIqI+P5GewDxCITyEZZfggJxepXruN8/fmGq0Y4yGVg0JdCvDvp57TivdBL+/ubZdrTf4TaK+EDEaN79nOVmLzuYLPDtnQDptt0veUMaC6xQ9SRSmiDmnGK5yrmh9fzJUL56Ti7ot2vqi4IKR+XA6USxW6dAtQpDZ4kMcjqdDyvzCgIC/gLbyJb8C9i9OJ3gYfTuhNIQom6+Mjx0WxswrCRNfv3o6yxxisCKjtOQW46cM1Znqow+mATgFQP1EfIJjTWwRdQ5wSQhupo7/txKmdtC9bsZdm9oMjPVd8demYlfSiXmfPd/iQeP+fAcpXg+pYhdTX0akkrtIH2uIZq1kR/aq0dG/p2+39KzIImj4deT4oU9nxfix+2AqYHUq4sy+M5Sf6arbONgX7Bqp0ZLf7o9mViwnbjmpBQYd41RhOwSuhoKheSsgxSV2q4SFlEgh9wJ6YZMhD3C0Ox/8pZIPjLFxpONC6trLEWdOrJTKkqkUlY5AMC5AGK3XR/mtJcGul+x5xtduNfG7kJfc9DzCxpB+Q547bNZaV+6Q8YNVSWB6QDduWY0PNvEc/OxxNdD01QnFnNWUoHvj1N1uu0CftW6eth4ZxRumi1ECGmjzHf1B40gfXTNJahNZcO/tbkQYO4SgIEdxY6P7MnSHpuU4Rs3JUTZJoQEJanAn9U9gE7d6FTyUpGz2VHw2uiTY6cRcQKgAZ7D61g4ZgsP75Mg0zJLvlqc+Ef1W7hRn73hZPWOtPU6Cy6W0uajOXo9ppsJq3Sc02EnPlMZHgAKdQsHcaasULfsoKjdaGF/zNW9qYQzLR0yOUO6ZHDybRQNUsRvoBoUTzlZSnkL40qGkxcd9Xt9KgdlShEgRikHtEJcJ4pR7AkuudPOgSKcfj/qgO4OMWxn3usS/phzzFQ/N+xPikxMSsNIqzGF4yVe+mYQI0VhBxmHdjwsdY4uOb0dbE+1bDbmdI1F3zYueuSGc6mbF78yi0ekR5xx5eIbk1962BVLhOfMg/4aanFeyZ1cwpgqO8IFhqUtY0spP/3J4SU9sdEjnm0luutSJIB8Ypoi1iPfqwUfXQBr2G4JeVrO8OvOeS0mSwgjQq2Yzk8J9HVZgNFoDxo8mNvrLPKSLSNJGByHoaT/O5Wpzyrh/7IZNW1yB6/bopAwu87O8ISFl1hUu08ozSvaGPglsjm87+SV20fBGbmRJE0Ki6tR7DzKyXg5mPqHOm88+JtKqSafO31qkCU1lMIbIxiZwPHDHW/9FCyO6vs5tmOgs3Ng/1+i+TnFdDHhzznLL4u/e8UsvsZZx4M+Tc4lJ1UlYE5cbd1DVU2o+1305Bcl1s7xQ3zd6GH7ZINIyLwSCpXFgcfzWTxgz6NlUkkVYOMDyDxz6kAtTULgt5384tylVpKwSyOL/z5/h78AYhiRPWYKZkO4jq6lF4ihJWjO2IU2TmfdJbmQuPzPfWe/EAcU+fCk+aYZVXleAv0jwe2U4FATjUjuslVbiaIcckD+2gZdjCFGuBm+Xi9WKKihE3WIx10G+i0XXnPTc798Pa+OZzUxlh/YcFEEvXOuwd1pv8mx8EPd9h+pT/gDlnjrAV1nbkrX5i2r/4mHzyO7zaMwBaNNZmQyoHAYj0m35dDtGNBg6PB9w3/cCkx6FltjqinYwW1ZUjMnWBoYGmVsU9AMQwUIaPCZq8I4VBYSzpsntb1ItwVCnLGGW0XiTXQ0Z5KJ+2q8H7IuQxwg0QwZYG0uDO7A7LfbP9AFXzuLvej582jCLXZIsNIFMctwMQNyKxygNn7xbdabHrA85ilYWSKf30wziOtvO7KiEFrnzwPB1tqxJW4rtGsYY6+oiL9fCsZdmc7LlKes+EpBKiaSfjD2xg/5xLyOM2TkUqxOc+naPC6CTc+7gzsSLfrMAXYNcTzesK1EXrfpxK6Xh7YYYYVvPRIv2KIvm0n5EIQGNSSCMb+mjp6ZAPp5unSvodxmFqsjJQMwvnud/Mg8AV0wBirOiRhNRw/+IV9Q7yba4DiL5Ruyzfp4fpGp7tFRO4hHqAxpSSM2AQVAG5EY2H5ORJa6F1VJWCEvihdsPJkZ4zTPqn65ziXmtKVWMK8BFrGGAmQN4MSRQTL+/gr9ogrs2J6fyiEhE7ypOhWv/hFM91H7dHEyUOqN2MvcN+adp9mOkxBrLx9gqkQCsSeV6q4c9+UwwtLAcuFCFr3y8WCoLekuJVJKJvAppvPASmQafBcqDfvsg4xPxTzjDz6wWnpOxn+mAOPvavtJXYd8H+j91OwmJSoZrT7nVYyJvC/PM0o2E430O61Gk5Rwepw6WYMojmHqlhs3P/wjAO2kIzTxzqZSoG5bN8xd3hIVL48JtGT3LSLIZ4+vwgJKEtA8xkT7If0DdslX4EkyaBJ5fRlT4mW5ExdYcq+t39kADaaVLDxH0YUv5OO4QC1WvteT2FLkDcTqI+IE8zqEwLCqHVmhJiEVvK3tgorchztQXX5Dq21KIvX2nJX4KJ3UY2+9Kf9KZXpwA3lot6/2b4vqz/GwDcEiu25cZAwUun4Jq0fyduQ1Fer4kec1vb2bCBu9wEVQGoLlKxJXDATnSH3NMdN1PSkQU0b7IairvgW9LWVd09zbejcDkural2tydajPDOaz0MWujDaY2UZ4opxRYO5AV3eC4XMM73Yw/hqAHp3qirL5NM1hpE3f1N+FoaQPprM6rkLATaKVvMhi6feCXUN18dzPpVIqfmIxAk8xGUoUJtFUHR/qC1s2IjzaThN0xCbXJuRjoCS8D1ihiSSSpXw9urwpCTdDrb7hO6dGN7wC/7oPxBnX8sUUnLKcEyTVe0n03b0lC6WfO1pScLq/G+2bTLEq9kI6p/1mJWY1N/yZaOYveN1Ypri8Ey4rypgZQqg3MwzZSsg1gD4B4cRtaoMlEolSdF45lqKpooLl8EpiKhsESY//eS2cLfwgxKxllv2svWFVAPPAzNYDqx1RKF0yQKfsT9bhVi8chK0rkMr3Zs4+/OeLp5Zv1F8m2F6epJe+Vl558EBkOD0sNqAbt4yAXsAPrCmIlAihZ5gQutEJjLfyLI2CzT/bYQTJiGnxunw2pQPdiQ+xMQY9YuqRVxk8ZSM8ciTtqkEbnoC0SS6vvehaCviYSvx0RT+njLOH9mhte/NhV7zGPrq0rH0izZZOEqpxcPcQjjpQ2T+/CG/JKNNkbJ2clL7czmNzLBxYGHFLvTTBWUpfYg5utR5mU0ytkRz0FvHsrpZ+5IfxkVBnjrcYEgMRmnCqXnH9FWj3No1iTRy8u2VTdX/HjxB12IP+3wMBQsPTJzB7zKkdEFgl4XfL8bEQ6cEXQ7NAstBzBdbnfhhrZqxX9iqoNarc9hxSxZjBQkx4bDYzEs4S1sMlerLpCBHR0Zz9+pz0NwvbhTr8Om9cc9I8j9xJl2F8xFW3kdn3eDu6QboTE2OANWKa1n+fusfhZZuN3RZrKMSQRcPeRRQ+C5ix5o/O7LoRuuUHrYQDH7lKpm/ZaE7hqe5/fbaS6JcLzGTz6/ry0jAL9YBrQi8y+RvAicd9HVAbAm198gL0QOBZ3+HnJ2Uc7HIZALCyXT/phNPSsD5nCLFyAvqJcHPvOTFT+x6wLXBesQTW/f61em5Jb2EgOD7TfX1f/SCDy/FJxWybSjhe0QCYY2+/jeegCdyZKGnFn92DyA78Xb003hgRJsDGIwsvNOLCcBzAzF6rHxwSPgQV2SdExOv2oQlqjTlsmvMWoG0MOY1k9rpqJpl9Q8JA5TcNzASM4015W3mFw3Ohaab2Mkv1XFGcaGo4+KJokzwmn3IGvWsmoNExAsY4RHn5JWduffBFH5X79l1suRcQA7QwCsp/rUDR9ox1XM607VVnE7ZiZsgkwVoZdWxNWz3PSmX8EUk+MbQkFBhbgofZaCykHv9BqZ+x0qKxkf7TXtPtb4gmSz5yyrFy6ubprMUAPWKcuC1iybnx+NFxeGaoLhi/p1+fOCcwr2ubs2Cy4jzPUF/Ikpj7LZKjr09UG7k9wd8ISsHDj5MWYOewvz8W1VD7stpzSgWMAH5wdK/ytY1KQJlZGwiDWuytbWuGmbCIv1eMJG/TVbUEs+skGCZbvJilCwAepqCWeWU9y6VP3v8eTUa21b2q9UC8EnahFdQPyWsNvL/EmP2j66y8A94M+ts6I1yKieapyyy+MPxRl0jInCgK2rt+Nl6eWOklPDrD4qQgyZ5bHBKrAuS5w8N9URuWgMP1smIEw7ZODfx2eu3kiANV2/D0JWFrKInvoS5cZr4rzGprLN3srikc9/vmhyh70ZaQe/Y511+dYd/XAFBuHubXLrgXo3kOdABH+ANIHCzu6tS04ALDidNbenrx7qj/NyqnYN5V534vfxI9GyGXAp9x5mN1FAqHn5Lvx1ECGHNM79hldOA6A/kHyB+EJ6dV2mNS1PnrTbWSJlirw+chQepcIJFfwuuCRe4yBhn4Zfst1ym91rkW2y8X+8pjU9Qsf007Pxv4kWNZ/HFjpmAA7RqgCvR3HAYSlkM2zJ4hX9ti+nNde12J5oYAV+9dfac4Q9sd/fAaGQ4m3vN8ujO4CHD7vwqFxL0lQC/OJ2WQzogHZDbw3PiHj+V4n5gxBjrzMhY4RUv/94riZ/swQIDI2+QDztt7FIi77HVjda1K6HuLgpQ094XMPWGSmqsITTK0x5suyIkesmE+3o3cBekcO8jiZUlRWQ3dMydvTmYeKJCP9pgVSCHy2vdTgU9c694JIRK/hKm3DVpVDSmd80cb8Ju+I5QO6bPOiDqSq7ZBa84A3uF4PmpsNZ8yER3Awda6HbpTEVomFwmJYdM5q3ecxS76efjASTZlJFwIjShOaYiVZ+UKHU9E72bhkUeX1fcK7eznG3zTuS6+R4guL8LL8Q5NYf5UBTMe5GZux5Ad81yt+2FDNZFKLH6udcJl5AwBfj60AZfFSeku068mH3F0R+9ZSMyiFgNOZxyxJTzZC5oRrA1wUKXwKH7OCz2yPA9glRfKgwyY2luYNCtE5Qp7FsOKT49D97d0SntlhBTVBHB+EJdAMhrxDbsiYmK7THGB1/vt0AUXh93q+F2qZwiQdicsIIRMAlTO1kCJ4QXmXZXRcfqHFmhfrKwEae+rVCzVPiL7zNwhCFO5METeAxNBhc+5jOGNK2Bw4VDJAiKGA5CPiu2yxtZ5ePiTvIoAaNwtynA8iLWwL1Eu8gfiCcg9IebfwQEu2LcxBoOKE7OEcc7pQMlvtZlaP95gMXwoh19dIBeHvKWYFh1x09qj9C8Wdl/souAy/fitVXQUpWqWW9d0X1UZ7M4IHnVbe0rwZUz6r6iH+mGxfzkwfImc059YQEARciFgEEh/bspNYcKjlU4WiGnaimnpMNYTVwMarkHDAos6ZYWJi8FQXuR0RJlaov8cSG5nLgBJYcv9SsumXQlzswOmr7vXktJDhjPQY8438jVwHMQzFk9LOa3bMfF0bdyQqKLJ7dopHe3FBsstrvtHqOn7pbnBS15GE64w4OR1fkBtDbE4gYSSIXtuNHd1Eqe4mWAhzMzZyUO3Htm23YQgcZ4oM+dQ7g0QnRdfWhzv3XouByx/tXxi0NNEMc0lbfAx8Pv8HUTBH1mAFXmJ4TnYWA4bCbrX7QXzNZ1W8znmwblBVAGprp8PB0qd3FFd41SwENNrSNVjiFlOSkIgDAXsBsxCfglC/ApEtbmVFjWfqbrfl/L2YnsnPCB3/wLyh6Q0DztF+n5p023dtq5ZEqiln5M42TyRI0NDdaNUf4ml1d0TkH+5yQ8aLFmccz8lziUbULEAWrEACNn1pcNZyACqV3nHGgjiNiw7toScvLhsIi3EeP0aIllbQoOSZ+EUuPcrROB3EbPfKtKxJLW1SWkpBJ4ZHZllvEWq61UhJotgnY4hcwlHy7SiwHHQS30qPqMltQw/VV1gifV94d44+jbVp2ezibF50S3xqfSfrK+BaAnN/6uZNP4FdyRgD7eqGTGP4wbFr5BIhLDbdGy3yw38fxOVTDDZ+mROwTZDCDkLffSc9ANCVgs+Rxci5QY01KE1E/PiYHZnuyIWnRPMeEr54rFhQQWQll21zCxdyQl89p/66iiVOyA3Im7WhIykkPO30T7X4SdPulVZNy+1iuBFJYVAoePgtM7QKZMnQMow3GoDivhfgvY207Jz9Ib6GttUDKsLcE9mbNO4aP4X9fLEQr/Cx/nZ6Iccs777F3zGgo2HJsU/14zY1zDYZ9VI0kKu9dVvR4qI++RBrkn8N+mgjq/ILsRUdv9AKTSEDC4p+VBb/TzhmgJYY7q4K3Z64XKBxs95ZFEpqIB8pvTKtu8d8O7W5OMV9doYRGzVBcVux3Rl1+LKl5PwkA+oU57gj21bM8bdWtNc7fvDqopDC375d8LV2847K2Rvb5MrgHHvB2EwlJg2VXEVoRWG6MqmNDYy0wkygB9z+XD/aEuM4BvvQuvi1SKtOdXT+y2oozdrLOAhLqSkucNm6zt8q8Y68X87N9fYa0DiO1Vfppezg1Q+Vpaw+zJ8QkWH+nURcMyCXKKfb+ADcKyuqqMOu1CSUVnwMq2Ex7Q0zkasNklPN94C7GLrz+nmD5XzN/rpDpiPvsUS1u6gHj8LWOfc48FByMOPa147Rk0ajlIwW9zWWpVZK2tr1goTXNzHeE42lyvB48beRfNBFTBeE+VM6HMjLifdl4V6EOKzzNKtljRqYYTdUFA1PzUyEN/ZMOSH/1yaFg8Dm3tcnnMr3ujyZI0OEQBJ3wmL6xQmsMTqgBBuWvYUCX7IgapPr+HHsCnAhYIcF8685FkqbD/nBeLWYoR+7svnx7+iQYF8Vj50orsFfrKbrBL7zCoLhIC5AqWg3vICCAWDArWSyd6Nl0SiOYDT2Jbbp7TDM2h3FU8iNxYM48M4VsWRzRf3JVJlxuJHXbxTWLpRszYP9haYousP67kzbhU6PzLes4as1Cna1Zat5FKAY36zM3tdGayh4XAU25wmwwng+EFJHJ+UBL1eIBO3vdQkrbtBciuiuRf4pcauzUMIsnAk/+3Sq50Y/Lxr1utT23rDg0rN8Ebf2oc5F5YCQ3QSocVrT37TWaOvw3/0tklWOBxxCdT7XOP/uYGliMTenie9lwUARaKd7nizet7HdVO7LRI7YwrB16Y4/3OXnAmJgL0mwAO9XUZd0Etwc82GH033hmiDF24pyh9evP5iIhr+K3hnvBybIA9THr/YddQXCxlBfRHeW5z/6VywjfZynx32b2FFwcDJKkYV9MMZuMAhGXiQo1vwRzDTXEMp90YmzoAvU4yZd+lrZoNT6oa+81lG0SNq3hhIp9ElyU14qlo+obGaDY2MX6+lzDWtvRNoNq+JpnBzt5xhGFct/gc+csQNUMtj9ElZYHq2WTFdoVTp5XcDR+eylFv2D+3oHYpuSwFU9sNtK6pALRazmkmGF/dF7FUZv0n3IpN7mSfvtpDuafQWIWnykSzUsvNbaBWr0K/75mi8iJpfV5PuED9PvpTacrhpWzl3UKla08LGBfpLwflUW/Qw5IganB8stK/4O5wyY9B4IRN5pszh2eUPidr+hBJs66sQIIzZO5Ddp0HphpBxV0TfeKxoZo7BDKrPZIGW1ohuqsBY09mdMqIm0QFHYhJybMLl/vCUPZTrDcy4s6yof49X02e5n8qEuafjqUANClzIc72Y4kctLr39ed4Wh94tocYeOYfCixMrQbcAM0jYpE+exhDDt3vmdSrTIuNv7nds+pAEYdOlqD0nD6XBk4KBGwOqShGriH3LDe1mrMw0tr22AM/8YS7HoE2GBlLF4T+Aa0jlORe3/gnadplMzSVK+WjLrsWTRDxAIRX2WxmzmuT1AYOyREvm+pMTySx/dMc6pO5xBO2MdEtrMUK7pl+nq0vlSmg0QZeNJuCCyRCQT9UjgIHxwtAMfGLMixr4dum4Kms7U1//675MMhGq+vPDB6G9sufwIcW28mieP7SfkcV6Xm+4SscEwhO+dQeTpyQfdkrm0wbbLLL97vunQ/KUQnMiHWdQ9VKxqCgEMWmjkOfiSg/TQghI1nMAQupWYNh60bBj4TxeUSg9K6PeKBs0jooVmbHO/ADRnF6/+17xc5x8hVU+Tb728SHz7WOskm2N1tvMIN25ORLgcvrtnhrRw64ou84EnRm3LO7tRgbGKN8piCcitIJiKNFCvdQsxgGqFzyeOTJwkbPtx9n7DhqcJGmdNafEnCW5NArT8tme+AyiMkqaGVTAozFA39w88tTQZMyIW+hy5HgkdkuI2o5m7nqLAKBL1SLwCPzCPHHLIg2fLV4mwqAzMdAd7CsV4aH+jpsPJ3QlxNl8wCXNw8tcAAGI1ZSgoURtKbp/y5zfzxMxKXYptzhyz8KPIiAeEk26q5crA3nBH7RsWoN0RlVXNxShn8hoIZ++uPI/T+gpbrwNijpniHCnv1KoZ43iMImV3sERBQbVda0SMrbsj67sZDMp3y+UV335IwBuoNgLO2Z2z6KHBWmesIchE5P7TfdHoaXLXDQPWv/k7+b07r2OlP+CR8XTV6LR+qgJ1/H2kscWWx2jbe3A2Oa8B2Rl2tUin540m+liRkTFuyOtzRr//SiVkgH6iN0PWhkhgVStdEUnvo95sqofSWM5YaP9o3EhscvPNEy0EVX2rQ0x0nNlzaQrwGQw3YhY0H2Y0hGaTKpkfhFGoFWv6vajukCM9COSP+hEX3CUEQPW3mtkJnVVVbD4+XS2CK65xp5WlUW4hze3My9ecn/WzkRfWLvpTWDYIQgBJB5I439WAPBmv/4gZKGcA4NOrFKiWget7Y3ryqK3cqQ02AqvD1YMFwU1wKoEbpUJ8W+JIU3LpdWu2kQzgF4s86i1VFrY2+fOXMRdKosZn9LCvOfxil712LxNaqhUAO2j6bL6AYqbGHm2GK8BCoG5hElMfu4sMEjnN8V+WQaBE+z6LMNVs2xMt9PeyFX3urVL8hCIlcCFWS2DTgR1Fl4ucCUcGXLyMHZ2BM1oyf4NrsrxhRIp5dw1TVE4ZtFiCeSXciEa9aYCOR0jcfTNQWkoE8kOaBpDkFIP+V1OQU+cUvFdmDGpdo92Ff4x/pugbHP6Sb1afVi4Yv1+srly29y3mJp2wrA0lI7aLlzvXGmD4OO2CVAw8DAp9CblqMTu+N69AbqhCfu3sAIMXMvhJ1UD7+fJWNjtBpFhMTYLaJFPb6H2hKrKUE2wQxyvNWPajcuknbZJdo33N+6t4V5nMmH32D+V01LAN9WcjZn299sGVKr+fuW8glGFOLyNeP/7oiQvh9fSkiqLG2a6+oNxIGx6YkFEs2SN9NXVNUnZdClsULhUlNyniq9C34mLTTwwNaK55xuZufYOX6o/hlZQPHfU/6NuxuzEhCPwyrLbJxh2RSFFJgCVVqdz6MGlJpOop+XXJUt+bemFqeBPDVIJDs1RLABhTV0oO/v6Jgviu3NxkfAnwjzU7LavM+8cruI413wN9JrYy3Gq1HIIl9BZZyJsmSs2gYo+3pLUs0gIdN1wke8VOalIoRxN/rT9Ay3el1H7+DBEAoEF6Ns0pJ8bWSW2DjekusXTnwGM6ElahpJ1144C6TN+WIIsNVI/Cc/i/A4wZyeVLrdS5QmbATpre8SibU7WT/x+QJvZjZ9i43newV/erieqVuGJRNfCI+DG6p3HVSCkC6mQhg/GV9+NHkkDiOBy39woMWePwDMN12r0r9j10fei3j2OltUslLDuOFHAwTFt6/CVgNnGX3rVs5z/d0egkm9wrp464GKDNE7DTh9gaBFbw+d2hmyLgM3IZcYoeM90pIQlgsEjvKzbEioY0tN5wjVrfZ5HaJ6xL3asGo/GPlVz0U9kcerFUvt2brKbws2BJC8OpnxyvKZ0lFA1bzsnQq3Vpg6TVgIuWlxurzUtt8wDalsAN/wB5KmQ1G96z+JW1x6kdUS3T2+GaUAdrEg0ef0HvbXRyqKy2DU++cMcOLGgbASc9rnfSa4kD9pC70W4d2LogY5dWDJOG8UrTT13GYEjMhA+p2kBpHGpq+YOxvSc8ayPZE0HgSF9EwzNTL0LfSKujt0kKC6wOEpWA+O3awVZ5Op92Zl7NcZR8N+nlOFCFw0thumZBvFbpAtkdl5jUCmcfV8NMbUeVVSK/d7sm+821MPZjXNdCcBuxUfG7wwN3goi3YW5TVXW5Isb9pAPYsuIQrQaBMJzJ5l0jShJWa3COk9HV6W1N/X4lwmSFhYF6MB8sczlKR1lqONORtaInbU5dpNDKLlWSeKB4S5uAV9bXL8F77qYwqGAawoVU+0j3KtpG4LO6QEM+JhZZnVmED/d4BvVoliIBUE1vDK/ez8ifJqrxXLQcT2xYqSAl/dYWEKG9z9aBv561oaCExgOfIxP4qMI9lm0lFJ96Bx0Z44cOZljXDgxSzhCkuif7HG9o/nE/bGPA7sldcAI4C1qBzCg/wc1Ig4y1+DpSqeADlmrD133w5uNPUEfOXc7f0m6JXvAXQBNfZXW1JwM6qnLEkEv6wmLGXnvaWmxiD//5/nU5tuqPgFn6DkFIh9Q2rh+3toq6GL2ycRH1ponQCibLrQOiKQWqxg6iYcNIXU45V5p9o4SRwQcN+k3GhaKWEPQS/G/mO6ueEEyqHrkiNEuuPqI0L8rEEjgPYVa+zTPJXYrYWb24VCm43Gha4h7aeHVN+r1e9RpgWdSvOB6tZ42q7NXblmgKkhzDN2ddCfB3pKLbCnkRnFYslca9Js4ElmoNK95BC/JfOWRSdnhoHahGjpZr7BzLgu8EBM5oakveCOkCsHlqNzx434Xogz8lMa+WAa6hV80MV3tAjrDerCD2bsXrOQIqAS4WfjQwbyA2EIkNLBfO4FviSvDaYmEqjxnT3WWOe0lvBx25gah8yqg1lshohH1TI2zcReXHSCe2ARibyhOMI1t6axf7O1TXwmBlXHqohXZDTQ/EKRdeublVsjnzKvpolDn46HIHgJ4VngqO2VM46VpZsKAOD3JEck3Hd/uPU9VZoHCAMfezsTKlMKNtL9PTKPbdg8x4f0+eZDg4/AjkpqP/NTLM2Mb6yMNxhLJqgFaUrdbVA0dg+C7w4CkeI/ythwp1YhO4048bZsus7pvNUvR3KSaHbNkR2nb9APtF4D3jS5n+xQrAQ4aOVmF7cTfQkWrcX57CdD+DCySsmZhnxa8USXpu/FHTZj++UDGkEmHZemSL0+s05BiIlg9+AMRF0vMjAKzDL5FU/8QMceCPqmqK36Dsq9KSubxzERAI8q6dq7RZZtQQ8oiABGPgs+lP5+jTUdSYGrmRDdP5VEdzvT9se+fo6JuR7yhZRzn6I65cmDki4I7WUqJv3XIvugXM3tUsIcQU5J61pqDsejKztzwOu7UvV1zuipITH45KBccElspl8C+krzV4KcKSvgyAHHgdsQkJLit8m+FKjOJKRvhwzdakfDY9Zc1vzVuol+TTe6PkdRZJCX3JbKROlYNVgTxsIDq01swhR5peteljyz8wPN8IGg5adRKjghzsM+2kpTGpOb0Ktd2hMqoZ/a0JM63/nfaDTj2CEssnQUP0K1hm/V5rC7S41l3exShRtbjSJJxdlm7y62ZPVEq1ocOfLsPozzHOVg3tnFvNn5Vwp9EIl+qIGKDwYgKffrH1Hjqh26rYdH3Ak816Zfxx4IGETpm8J4wERoiLJNbwicWq8LyGhPOGi317Q673PU7B9UTfA+8WvKDcTDq9vIn7s7RULFSYafcMIgYzs9Bj6kZKidNEKMAciNC5lxgcUaHsbgCz9Zjh6oF9Dpuz/m5T7qeTvW8bBO9CTwCwFnmeYEJyC+tupwo1pxk9LL4N5Vuc9OhRM6NWR+UaioQ3CeAs1OaFZB1n0MjHcgd71LxAQuKRgRaeus1pbTGpsJ+iwPdYfttzuI2lBDvJo3T0EjhQiwJGdaYOanijd+8+PsTO305+OaK4t6YEuI9gG4oWJHKMDrZl7cDh/zsdZLs3y+sLRAoRVMdi+DHWCMv3CDDSUCx+LtaGk4mZ1QoVx9XMGZOrj/ZITOc4bODQioPbp8hmrau/dXZAV2vlK43nlvpFNS9KDvAU0TPczuFG3hSHuebStD8skpGH9Yb2XgwPcfgqvOrmtT7LxBtxdwZSW+RI7euP/mEbR1xs9KG9OVDCJAY2E07xGARa4TISGGK1RxZGONLzJqPwSyG0wHbBiUsTipRTiriO0+PPrXCopYKFonvWC4cXcAx2QJeQH8pkVYQSInowYSIvS/IxFDz64AU3WJTiI/obiWlm62hW+HD+nnuLnQZPG1yc2bcoV0orfmX4XEUUZebkR7cgLMJ7QGo98AFy5gas/VUr1y69zs8ZlC98zlUa0X2bbDh7fIpPhhZxMRfdEMe5HpgEXHvHFcqvkkAn+uN1U2sGLQPyA83i9xYJKHbPoAP/Kr78AcAYuBtYumgHXUva2JOpUizfmhAq7ylSeyc3pGFYxe9Ae1Qym50/rVt3i/x7YoBTbDtdBSyvi5IsyI3dxG63UEY9JacSN/PJzKRlrgOqHIYhEPullsV9xEkmN8nUS4ekC0q4URVFPjlp6MckHjxGe4xQvwdxC2cCm0hIykw0pVRmcIAfxD+bOEYWKMkmuLCt0WwYEMngejG96OOX4LO/X7rZL9IlMdpfg41ZdiXKyX2rhsnsAgqeaMaN/mIgahhdw/SEQaSxET4tM+o6Uezq/GMFYob5s8Um/tBS1Wum3FL9sRZcIivMA489faLBoOBs328x9yFV7tUTothomwjzvTgdeWVjRHbSCqJRi+E1p07bssml5C3YgqBVO8QOH9mBW5MRF4Ta6MRxT9E6Z/eTDj1a+9WNUYKSN7kfsZvRkS9jkTme0lGMGw0S2EVog01Qn+vY+ZCFFjWL/90314QDtdcZ/7P5/dSULaNuN7oXTEd9nDg0Mjqs6IWFuEST7J2WjymmDceFNQPw8kLrmtdVOm7Im3xmcKNGgiZu7b7ft+px18BAD1nqzSIGg84OWwMe0SnlyolZEKNjkH3AUB9bEripDafaMMF/cjUtP05jArtBXE9Lx6J3hbhiILbXJ9P1cC0YnxdG6YJP3iyVPeVZU/3nsCuY0t57XkXx2/ci3oWhIjiHHW/ew/habpsEwlI8SgT2PV8jxUCZbzuX6md0tdF4MqcZr0i+hPQvAK3Eamp+gpL/0m+uriOIcV9AskxuxbwmWVktoP/V0qa0ScCQeK4TRiO5KYXkrDp0C897A8GaACSWav7K79ZMbRCxMs7Lp8sUbLicbpz/sTk74qjRerK/v2SDs7+kXDT1Cw254Fn2drYJn9iQdAEl5SSJg1zAcwty/dpheHNApiOXy7sHEFEc0brAr9gctK+9GMmJm7iCjcOnpQujnJnTzXoHf7Bt4wuQZo4sTaZtXgIq3ufXh640mwbRo/BmsWRn/NM3tYKDkMstYD/UOv1vK6h6UZRLTlTxyg9D/2RrR4C9h6gyECMIdZaD9no/cDntUAWirLmGhobpsL1sYmQIw6kcSEAvwE8g8jvaS5z+mO9aW0vowMfwO2cq6f/oB3NknV5DT3n6voxKmeriGC4LmgsvwpckhZA+Gd5UOj8Zmoe4+xWszgD8GeWN28ww/88osyQx1bgpz5+95FBGofVa/WRAhptM5WusBBXDYJvXI6kso2Ip8o+cZ8/La47TU9E01CNua5SA2lNm72B9hIGu5p7ynBoO5LhH3r2KXq7vihMP6sKGopfgtU2M6rPh0GleI+h3blioL/5NU7D8nqhvQbGvZXIBdxxL4XG4ZslaZo6QFDCN7OaQCV5svXPz8GjOCgCgTXcgDP8Nj2qwm/zYHo0c49N3M8peZeoDZRdWTSfEZ1OYZ5xquqJstari5OBKprMwBZURa8b/3hvS8B9iuy10B+Cc0Vk8OPCjrQGvUAsPd1r0qXgLopheLLvac+l/1B18QmmOHCK9mSz/4xNzG+7pv10eY3aZ6/xrm6n6czSeSYando6WMRnnWAFsaKKMN5Vw8LbuU3Vt70hob7We1LBBPFmSEIDah0XxzGvOikvV2mmD1uTdb4r/pvvzlHyxnMBJX2VC7DyNT2nTABd6dd5DisYfLT3kph5+e1BJ1EOz+r9phaMIftfW4gijCkiKkpjVQR2wJl/bTCy8q3ExCRU5SultHgDmUmZyE73R608lUp7rczGONbTFPyNTAF/eS5jMa/oRjpC/CMRg+PN80dW3Ymez52SZoSpaTM9sBXsp/i1xIp2ag/NNedp1dIsTAGkka2OtagKj+7oBJ+FfReUWLdmD4qm1B02edV9KJEMPbs5ysRGwmwWgfN2Ijnfg2RQ0zyW71ly8diPq/kJNob+5LMyPpBBm6ZB7YB4CHdP1MsVZzTajOTmsWg1ebeuHw4xdmnUWRBVxiL7HQeQTQ3zX61a8nL+o0HYx6cQwudX3W+/XJ63dKe6am9B84WtGPPVtmgpQcCXfCCcfJGVSNs94ICEO0kOVrTIhfueYPtw4Gpdlb4SQZFKVBB1o78sjqWkWt50CFOaR9PaemdqVkiZ/dQaMQq++db98m5wNIID04uqTLxSQWYqJWxyfHFjJGBw6ZNEk+z2ZyaQ+B76yJYRRuRcG0BovKJMWq1D0X8t7WHUb4ozRAy8ppTDuG3uIY7HR4Cbnsn3WMuOqr/YcXh90ByGgpLrhSz+GyGBE/AWh+KS1+Si5MWmYs+PNHWs/sP6saAVznhhVyqH+JHKaXwGVm5LOnLOt8PtnJ4jp6+P6nX76MykmdfFggLcYz6JeEub5BcZRrwi3lVuQrYgE4g5b67q8NijmYfTdbZ4aKuI4dLHotmz9L4SB8frPkbdNS2D7O3314g/Uq9XZszFSMmPkVf2wCAZT9K64IeRoaKdlZpi1mDFc10r3a5aDdIuUpz8n7iCsW5aoW4ul22Md2nO4MvZVYQrIFNrFYsvQSLBIhGo/DgGs9GPb2PPLum++omKNuWm7Z1Xqpaj7JUdZRi6pP+OLWKeAYTvYQMvIUZFYDjyGiq7EggYSGl+cWX4B5g/P7o5ABVnQQkMmJzxeZsfKYpgXxLjpsm1tTcKsf4M4kW1pxe+Fm1Kp18IGGrTp+Y8sLmTJwa+PS81wocuopKXdCxjHbHOZ3iuZag4uMJ8pE8K+IUSZHvHM71QfhrtVRr04AKAIFUUFOjkGECpe1ZFAz4dVWUKZweezsuQwBZhb1A4seDD1yrD9djdRAUGNX7x1U+7I9kkXDmcPzPbmBJYSWQoxV4fAY6g9R49RsPDYFbpzXzPkScTblI6Qg/ZAXQk+vVL9nq5JWksNn75oDKR8FEk74zKdX7Zr5ni5jgt8qtRKfmLRQp5L+5dP8xBlpjn46BdVsqElxWWxylis3P7ocyOGSjDzApGd6pF78jT3HGBgfUQ6fWutbEPImtTAjhJj3++S8P6SHMatKObZ2SJBEQ855uCekMzrMYGdQGl9sKWI2rYSR2+j+rQEFfWNftdxHyQ+LSSnOcRx5X4H/ACDJxRFgi8HjKBH7mDlWzf1VgrVYydN3Daj1jG64qPOUI0Se0eApqKInao3bcjnBiePT65lpb+lkuRW9MddasglxzDCrIiYTO6QBH8S+ZoKg+RRrau1L+TUYENBCr1GmlY0f24grO487jH+cz2HrRk1sCMVMdrSshLClYDFxEjSrKKYVdoFo4FElYYIh5rVqOqKMb6RqeH/eHSkHDAvopcRZG6THkuaxtZuzIOQ9D2Z65IWes38pSpkEcTtCrbiFjUVgmhKOolwP6gweCBN3uiqdtpB7w83/4QSln8vsHdZsenNiOmYpdt/uSGLfFc2b3CYb4tbIwIbhZ3ekXWRZTvYjsLDuPAcZMW25eNj8zjMI2Rrmtv4B+Lguim3aRAAn4OQh9yuFudXwUvHazBIrpzaYDcY+t205SHHDT1qJYecfxyHUDDdcdxq4+a4RXUI3QXn+1KioAWNIMsFk6Uv3lbxTQFDtvOpWbvtPLV1q01QLayRnlwk8+aNpazV/EUzjBHqJtNs+Lc2tNWj5pHFRSG+pUN/pLrcRymZFht2NsVMz0WFhMDUEFx0ouPm9/zswkMxvEGTMHCXXm2ZDqjvdLqBDRfdj9TlUAumdXzCH6XheFqY3XOBb4ghwDjDW810FpbAJ0YzKZMpBEUJsxcDya34NbHb7SLrmCGgJmXEsJvgUj8CFUeg5l9zQvoQL63YRuw5DZ2GNdM5AFnY+n/vmgDRO0guwhwrBbV8W5LSA7hxSMm2ylv837Gh/DsNb4q1mvINZotYO4/mEVnx/jNMd7zslPmIWXEU87FYxhXdNXHLxSQTkKYKBuHaKOVXvwAaiprfjKhCVU/ezrR5Q2NxtwZl4uh8Wj3wmVKTAfu0p0PfqrB5iFQ9gA8+LHKNusOYOt836SrOdLFMw2ctG1JSCqaXol9PA1wa1NSTrsYHFjyNLSFn85ozBWzIYyCFhTnJjruL+XCEqqc192sj1lEkqLz7v1OyjkwXcjxPeAci2YDEUeH70h7khhyuL10v46ib+D92kqvcBWvx8bx//Ym5aH+AKUPAKZrbiQBJD0DQxB/t5CK/kZdbbP/tPcDSekdoKfKKFpBvb0oiO7cFvhTEkXscv88ZQU97Fxb0ax48VSbfNBiemxAAw2QzfCHFiA5h5Qy7D/RIrxKBdBt0p8LRbv293FefNuv7pu2G+fM9UwDldw+AFJ5KWgzegTLn+QIXpWgt4+5tG3TvE4mVkp5mynCsDPp2rd/EnqngR7l9KufBnCs+kKEi+67Cf//XvFehmMXecitXsu49rfnPQoCMay49jH07HOl6ihsJEN72KOU3qGl/hGnAlwC9mTJ5LpHfEz3oiqpxPhqtQETolP8GMlGCQqtUwFQLRJyW0IinCrF1dJKy0Ro/+s7pIj3qXEpEw1cKreA70hxAdEhz+7/s418pe7EzgVAZ/I21xTNDQl7y5mnjmGcO0tolZIjAr6CCz8nwNM7yBhLKi0d4QeGoSpWh5uYIWHCv22jwydoCLsYFHe+1ynDlKoonar0Rh503yTRNR+GHUss7XzOsmI/2Cf4tElu+/h1dC2LR0Lbc5KiFBD+r6A+/M530pYe+vlSnYShHRj9kkgtKylYEzJwa0uWMANxpypLL9lduQJVVCsCLV91eQZkxntJ8kONT8miXF7HVKVxnKQOoH/2HfneaOIynEIqfd3KqFNZxztZqwPdPS9h9Vfh5PMOfl6oyMKB4ZYOx1P3makA1RFlZVnbEtV4lwdFw30iyHB8BV2e/zsTPuOW0LT6833SR4+uttb1eqxc2gXs7D0VsxSygWFtLk74gib/AeW6nRxVjjllEfwI39ALZNOzTkfKOKDSJ/s6OewSghqOvErtLQf6OWOgvS782xAowUbXsQUbY1r2oVUCcfDYsvdLRsBiZ+pNOv86uXOqgVXoeC0b03QMbhVam0mHcYqY7X/2/pUNRHtYIcaXbD+YFI2E2rTS/KYSWUfbXdWmMiI9vBVRZBkRV3ix1MdEFbMAyWDpQChraspyYxmOITvqsU42b++WMPE0olDNdbUlNXPOOd6m9JkIfqR3F27DWXRXmpdFiE+Chov87kzKyInLdJa3xuZt4BNuUKnyWX6mavpRAn4jzrfENK+vO9wChUYRPxsiAWJ8ECsS8iZxpQQ9pY/G0tgQOixphbDpn8GNqG0fMT5PWGhF/KpUQ5dW6qGRI1m5/dfJEjnMbgUU57fvCRRx+3yCLreHk7NZA+JlTsPNEouJ39Jk9rqhvbEjqaSe3duPguboUEIbRcQ3Hr+kuYnHWzwC3U7L/irEX/UEOksGlU3xW4mKOGCCxZu4Zr7Qg+6TxZYhD/qO/DC2Pz19w3yJPQPb6D+up9p6cRcTm7gqVbfLjBYarZDKEkD8S+dOrJUtM1Ws6W7xqlOZAXA9K7ORGdBheOEpWouAZE1Izhhz5IXyM11zGW7CYlMdeYubgBNHzwylNXIY3KDQxl40JRTgSk4lEjL7D/MkHLhdr+bb57TdidrxZRu70Je8E911Dh5oIESvtchoHelIRL+X/vAnMMYj/fgUKyNQDuGvfwcjolKKSdsVnj01GtQLed/GCP+CboFnykg0638G+h9UUvcOxFXD3urjDcSkKV9oiV4V+Zyv1piHOqZtL2/F1vaFVA0m7+4NSOiswI0lKlIqWdSTJjA2eMpPHUzuPb/105oyQAXaGkpwVmE6BlVU7+nREGYRa0wBp5YenbvHFNimWlb8wQnUTsSAsC8jpLshU1hcxhS0gOKhqfcngXhz5IVTcJ/3A4QB/MVcj3C2wDLWfuOgl1YWj+ezN1EJoNTEeDSQCMajtwSHNWI4Q9l54z2u98+c1ibYdKYdLI6a9X+54a5O8WIDV+boKPXG/8AmFH5OBNxdY79JP2G60KXhb+dA77DJBroAX6XhP30obTJGgKwj6sOIVx/Wl6RCBF7Uy4tg1C88ruTVa0sGR1L6va9w02DbhOe+HP/TQ10R6LQ9cula3phUccGDzDcDGHFxjVF/cMQpF3/yRKnUhr0obj7o3BO+EGb6seHrgU5L7QrqUbpr5vROSTGQD7DX5JjaN/NWDq6CpfSwXh3Rf1Msw+ZQ30PqBpEDAlSYCpsYPN3yr6G9xBtRO2MC3B9Jq2DPbiH6zc8+cBX8r1NBuu+TSCANTiyKkHOooJ1VfFPzGB2tv2Bxv5wV/PP4911qappdQQucvPFhTsUBH960h4217E1EocWvoHZM7Y5RmQ05l1ZXRsaaLCCMhIQ8BYXGQVBvfbDc0HK7hyXQxa4byp6JtDY7sQRm8EI30mfyt+j30cR7TkY2BuZCXcGwG88fEdNFwmIOEMLqDMobzDfFcgrZ2VwjwYyV8+U/iKdU4sycP5VSWL1Sh7aHITjAD0Cur1uOHnd47gcHcotLa6J/qR6eXKcQutw9/7iyJEzfSgK9lFhfIFLdxO0OtjGbT76psUfF5tNfAn1hDdudfyj+js8SD1KaA7dYr5B/jtNKGZsjZonUW62fWvU741IcdUhQf3e959UTKwXQbeatSF8WiFLhP+Rfjx8xxDrrKzYw0VbHqAxbeVLBXqGLLyy9fTRLxfVwfBMSrepuk0p2x09EmzCdku0oLSs8qpPgI5LBZkraDiHPub5mtQoSMWtoGo8HGUpSQYDTLHiPTJZgjuElXL/dfFHWW6Z+By7jXrg7DYkuNQGpovbm4hw7ooVZKVtHye37aRKNCVJ3wR4AIkuLPziVNwnXld2AMYBGCiVppxFOhI796K23ihxTVMCbDd5KHIEbm+T53ONDeRG59CONWuDiBpwBcVnCIXXLWEVrsIycae8PqF6QR6cq4ppmDqpCXDY2tthDtLGNde1w5LL6hY2ybzlV+HZGV73VDAgmoTGGQvlr8H0YxIzj7tlxJZWoREi6AaD1dumQ/KYfzcjD8cT+Hd1i9YufGlaApLi85HR/uOJH5gtCJD/k9vKjbgi8RcuCHDJkJiXyPRj7Tdg9VuNDkw3LuGltV8MDx0evte93pUYLNYPaaiJvfwHrtE4e3WNf4Osn8iWeSfD4xPmCgaJrKgM6IEh4N2GDaNYqqgYVefExV9vJM6Y8RKhjm5pwdse73LE/EZZJ0wV7jNgBfEYx2vI+12w61P7gvv1/7BC57F4c4CItesbWH7HW97SqnBB3kFjJSXzNMjMyWjC7mE6Ukd6bS2x3OBf/kqPBFhEP9G53hECEpxVLh7GC8/2klX1ZWhXJHfN0hpTJ3i3Q746BMbeVVm6ZuFR793w2QGnjVUfkKawZjgw1+N9Q83iCpQzrsGG4SevrqNpjCeMa/uwxh1jfygYwrtEI7Nccp5eZyx/zJQmUSr+MUawExu+l35sMYEf9w58B1DMKAfDBrIK7TM4flWfjiUWFJwJ+puyRkt1QITQ/M7evbXdYh5qAc9FlPYs2mMyoF9ApYBJDLu7KrNa9uxJe0Q0sCr6DIWisOX8bTvWRgqhjrt8GPkJBAwVEJ8j1/qX3kav1idSVquey4ecA1rGapr2wLTdJlt7XNBIf77IA32YuCv0kBrbwil+HRposI8Lb9nlcpm6OJe9IlbLikeIm58T1reVMxypuH+HGES/lQZju/v9RCp6KDAfNxdZerulrv9ir+eiU8IJSEfawcUNSP0o8cpWZOODZ9prRMxNEszWhqfcDfnh8RU+odXfph86TlzbACRkuliab1lmQjUWhxXP6iIw4mc31JlIEhCdzMBcpddYW7ZcVWlciOcma6UKZ6v0BNZH6wCZipvvAj+YIA17Ybw+ng17+WRfkLl3Avi6G0XK+FTZfKNlXSjVPZozIC1Zm8SOCk51gVA4e6DOUy9X9lRcE+QZWcwGMsfWnL8eL4m5gNCALBRlmMylhHvHp3Q8Y8e8fzdUOEvF8otvesn6hrmJ93iuvK7l536zHM0i8J20eMTUT1EBJrdwvlmSpioCRRBE/EXg/ZRxRSE6oCJKULoC10nUAjubxKlOelNifDXVVqvicTKy8R2AoGxFOWyMcjty6OdcH3w5ChRsvN7GhFP/09OxV4rMKBhBQhQ478aGGaga8wBLkcCqeM+CATlyPJkozVH30+18nqasvb7tA9mDMjFPT9SVDQrT/74RNz5A0Szqjrvsp6MjCRHifezWgy6OquT85Mi9cnJuK4lFMQIY3GaPel9SRTq+IRKxyTRAHg2ZbRU0XCi6+Vm8DZMJfEkPdBKTQzXns5CkQHBxIfaNxpxjz5wcSsgdyeIq4H79LEh5G+Y4gyoLS1Ov1LyQMZeKpc5m5zz9rtFyPxgYVpvLy92PrKE8oRJgmVdUOFobvuMsJGzEs+jhaMUsfcu/ZuJgtqUXENc1yjpVnTSgJYNHLv8RIYD7N34GzQIJUtTL9k2OuxQX4+ZUJ474P8n35a0IVsSmcjnPwRUz+/Z/WJX9XG8LqcWmqleetePc/48BFOIziagomVaY/Q/VWyaIsKbz7lnun4dgDyKUp9qzrAVLW8v35oQ/w4UdJnxvq74HCv/9824gS9aNTYzELmxY3fGRVBhERnq4Q9j5QwQrIqrTzgupI+gy7i80eoJ4l7tx7MUIsUQHnSMf2tWZ9EWIzQaz5dHl/c6m9GTSb5jXgZh6GXZxjjyaJc1ycU5jDa9VGFMhVS3W5JgK3ZPZz7EIUkgjK+gsjwbN53If8AzJuTOrPeFqfX+C/yQ+suOFBLDn86IMFx5CjxVpt7nJHf1htlglbNruqSfqh8oF7L8ubUsUI5cS55eep2qcAuFtoRFY2MCi/SgDB+XmtbNcHQ9ih9e3rPtzwYyBlE4lW/ciaccz+usKFsDLASL/Ui0ATZ14ifJrEBDqeYJv56E9wCcMUoNBtwYiLRwqXHDmeW9k4WUXc/Gt5wGDYutHRm8nOgnhtA6thdd5JuaC0SmvRZKxz8rqFO72SuFuWyj5HjvF8Xtn9LNc6fhXm6VBQUi1UB6+9GSEVejHZZ9FEJH+M7o9UOWnWBpGpsAXavgVM5aM/jrmHBbLgpBFTAbAn4HLQZJrd470HXreREpz2u2Bi++NgbJInp0FECKiVvI/Q2mUqRtkd/8GLB2+hYLIsM0rt5TAlqyJ7jK/BZrzPEpaZdBxnc/hKBnbwWaZM8RYa1RXEHd+/eKhy+7/4soQxKPRLSqPVF1QJS6OQMUJKI4o43cIQ+mtgBKv8T0HW9a0/OWwR+iNqtDU76eXDp/WLc90Ys1ndQIcMl7hz0a5hfQjmAG/9x7KqRJ0zKtZKtwf+mMou1EQM5YNtaNO1G4Qm99j+0yEWBdAvNT3Rg0BMbmgLzCdwBpFAaq2/i+GiQm3zTICtQclUcC+UCs/WlEh36LKJgojjE8EewW9HsLP0KM8eMJDTwnSgVrB2rMe5xVDp24KGH8GywyhmmJQJ1u9nyCTAw8iG5SqkEyxJvcTGBOcRtq79IM1d+ig6RDV0YQP7OuM2LAy3G4L09b9Pv2zijaYkiDLEAI/a+X4kl0YcALexYMo+maGwDevBVsfqGKVfIyxjUA5eOMT25nP8fQI6jFs6QjIvu0pR2noR41YQ+DDOnSEEe/Jct6wZri/8q9n+XQj237nMU/v5i5wVm5qatTl2nsYjtI+K+Er5zb3Yi5CLMr2BeQKBJ/ORSSzJbP6fz0aDHVfF2in6/jdnVz2507aglsRlcrFErSU3aULFsSeYG+hzDiGiD1o+5rsfAMwUjlp2OVDdkhJBuxFpy0qLoLf4epj3J27k4wMCJbTT1vGEXjiN9tD5V5D+6pFf6d0A1MxAljk+yWssSbdR/z8NUF4xx3/IzbWsRAmcbvp9rVCIBNQLcmCOYM4Xz8uSYZKnBoK/tyA8yX3NaqHcHaB0ZK0+9bdka+LOQxBh45GIB8yf8ePplwn+IEilQvw/t5pnXmaMMS71T+MyTsl4KiWnVQ4rKHuWHpkHNQ7T2S1k2nEA340Emq712UwiP92pNIfCvGJQrQwEVooG7bIrhD0WMqOzqrqA1wwLu7JvbBY6YmQONaGGObNek/IcjuYIyIwe/JZhPjWSZzZ4VSXJJbjzE5xGv8a8jTxmTy+FGnM+xAdUPjuoPAfH17Swf/Rv3lDq72AlbSMnEKkX9kSl0hyhOJ1vjf7BqAZ8hg7vFtHHnQLyDjj+TAGbIGJBj1FyebI/Oa8p5hIaqyU/vKsLs5i2nBZDNymKveWCsM3Z9Gv4b5KXa/7gyRREl67JWRpGXgZlGeMgwk8K0ncBVkxyWzWjw2CXOex8deufuq3XmkfOkGLc3l5+kLLnDJXWUr1M+rcfylypBUpChZuzKayLT4iB1QZM12+dUX90jM1JJNEc1hlqLlrAcqM4z9WZgiCt36E1GKYNvmPMM9bNMp8EvmXNTbeCDLaRSfkD+LBLfkuvFhzsgZLXQs6L0e4dpIIEP/Wy+ccKMzieLO8K1mGVaTq1hPUdf3EDNM0vvYcFPiqQAdZdAg0QNvF/M/I611zjmKKKm59hVAJ3u8QU/tP12gNy9QmJuletLauHZH5Zzv1dtgz2Y80IflL+IQ38WFauIVDBoODpILt+xURPEk0NWhEIVFIAw03Cqzca+miqvzXapFrOAV+yUIuFQLL7O4eOYns2N8WbbzxHjgxJwxeTBJvgpr0fTM28kIiCbnmdt5PpJ886Mdd8aCzTmkF2yNITmZ7lcw0y+0D/2R2Ddf7rbJ6qXynJEoo2+sjNb890wdV9kkVg5VPP20INN0OqM/2kZA3lWY8g1TKDC6HOYnJ2IDHc96gQxeeM2t3RXK8d2eksxyJy4Nwjgr9ECKpKIYAA2TKbioLihBgl22eIdUCf4ql7d/kvS4OFyUZpBlIJyUuXgSKNJujPBjj5sVOVmfpyKV2qbaw4Kw6PTetuz+JmbMYW/OyHzD2MFDkGlFsf5m4QnrZ8/ayme1vKRXdU41SEZ5dZdev3XWq3qWhQdmMfDNoPTm0GbTyC94JAeRJG5o8Qf0w2iJa5nrZ4mMbidxJ3Zo01Ocz8GyPF2ilLCybZbijp/7cTwpTJC+bSEOMa/D97HCkCRYdOEROBe9j3Zhw5BDLOb710kANnumMAXkiNb5QE2fQkmVxwcwcW1QS5TdcfiPlEkKQqT0kxEO0BnokoDslRWqbXQ80OULK6OYUS0xnf91rGVOKm2ASPjl2NO4lIklw3sYmjttHp2s6Jcvzw89lajOJNL5fkf/6RwPtth01U6grI8UzY04ojvw955cMAa4xYR/RUNjQtf9nuDbbdv+ZI7dq0lDXI26WRhZPrt7EKACoq00i+zLzbWXig3o0m8paCktt5lJnQhNQujX6BF2vS5+WLhGFew9Kt0yyG8ul1sd2rNd9v3tw/eWUAb4beHinkVj4qH5hJUJqwAwdPzwQh6/0AdLjdSIK2MNftogPxGxzpGaadvJVHaXxwNj6D/rr3qOS0GH7UBJIjfBR5Tdcv4ZZt3Nw2jpBgXREBukdTKFEUMQ6sxsAI3fW6Mpk61qjmM/vPhANb9gF7tPD73850kssrdTp9nt9xlgYyg0oHazESBnqX78+IcqgUeSKI5mk6wPIEwOBlUquI8J3qczEkzpaQHS84RMkZGE6ZDrg0rI01q0XtOwSKraPOBxBeyX3k0V/fBnUUdtdDQiB+SdSH62wIYfZoybhSn3GghLFGFCHhMuvvNu+8BBB5RCBrl4+yTB2v3gscilAgqyOcRyZgY5lkaTRWMIuUL+kE5DHxToU0wu57D7InNXRss6jNUZfGd5h8ORpDcSS3EE2TQVwlWXrnukvA4AAkzAHS+G9fZygQT3BgufLfdZ6QWBo3nO1q3WtK94TSuAUuFus3Phlt+Hv85/yJ0CFHlApk8IHU0g1wzsdvKjsmSolDd+BV6FWKbBEKi/YIOnk1NxYoVUXI5VnX/vxkPn85Jq1SAWFoHWIX5qne/fyeHs5dYreqabjN1B8xA2MvTRicjAGb/h9cgRmPBWbV6XriNogInRfTkNEqJX3T5eiy38WV1XHIkt3h+7BTBBIWbR4VAf8t6zl6TfNX06n8pwMNe6YLsay6mfmQxe1WGqVzPsnr0Y7rXFG9X9RToSBuoP0hkSEKPxcZUti+Z4BjuKP4cO5LqyKBl0w4EX5qB0UbNX8glAwbbAZiCfqidfMdvXLop0cMsaRxNITWwxqqGFI5dwW8USUhygWEOUh0YAEXVBJ1Igzbt2eeW5CmGwNXeN61P49CaQJInIs7dDYVyQircbJd2jhfCcjld0+S1itokyo1ROZRht/f0UaiZQQhsJf3vcXw6GauUr6WGuDPsN0cRALVGanxBFbIlPGgzfLHV5BXAEQq83dLzw1OnAavaBEii1eYtj1DvqcMEIKvSEulkA0AobhyUqF2NgYN38+tcqCOhXvDc8bNR5qPiUDr/qPz7S8aP0PtE10+ou1azebeHTG8UduUJX2m9h8G+1FEEpu559by4wLY2Y7Z94JLg1UA/MLdxWz1XX/ERf+yaWQXaXMFnwRo91dfoEEBlR1qPcc9Nn1wjZW0ftuvbK9Xq8Gc6DhfqKJLuuRYcfLSVpL3WNwv1S86uM6+inTxkP0Jhr9DSHip7Sf4daq5UDAX4Bfv1dSr0mywDqeXBnpRoapgNE/T6yO3VugBaoam5R7vJS/xJDqGFYx2ZjvzUcyTf1dZb2NWcJVW+hV6//ZD7dKFbUhP9qYpRCWzSyVIO2pjX5/gQx9Wzxk2wT+eNLsts5fThM8tDt5GjV+OXFeyi0JNmQeSSITHmh4dbBoFZaHbZmv2z5S2Oxicn7ukVeR44v6ghLjM/6IR13nOS8fUQR5fy8FY9mDjHFWjJd89EdnXrzs5Hmg1LeNsWrMre6lmLPXc8MQ5Y0cfLblCJBUkPlq8trhCTWld1Kh8JYO6gMNWQ8S8zjz31rDw99P8I1pozzmpMigDqcxsYUrcGEtJtZabt5pGAQdcJ53CpcS9mgRtztCDHhg6xq+InKu4XgXSqN9t2OwEVnHdxTdQO/BFQFCCdUo2C8hAzn0gS1rXE3AJx5kZxU4uJxt6XooH0uz5viUWGnMmkmUOsO8qBuYgNTCRc1PZajKSuSUIQF6aMz/IVH4puwwVHrVeYEHOTvL7JiIqBqQTvV1LQ71iNcO80RFUTSEPx+3i4IYKBn8FzOAcAIufDXYGeNzJOD0IeB52QJ1+HQl9Lvvrvmotn5EwdUrNXdQlWm80gZSVriuhFnXIOo8uednSwkQ6vkVh/jwtgwbvIDhqjY8EIHbiCRAcPiUvKvSlY/1QJTiQOlBt3mqZQswMJKSRYrK3J56giNAVNVtlPX9W0XJqWgQSQfJtFnPw7DOCBCobx6o29RhA2Gw0c971skKoSJia0OpQsGUYLlAuLpWqNo4nFM9lwKu7KGf8BU66weiIa5lxyrYlFbsT3uCV3ggGbx1qRl9gsndgiNP/5faZdhaTaelKMdT4OEnQug67ruE7YM6ONQ8x6IIsGK0bjsv+j/uecRParxXCvGGspIh8NGnOSRri/0XwG64adb0vvDH49ZSYXXiwlKWZCOzja7e7OaAgOwsfLRuG/mgN846lD0TL4Ag/Mj0jMmhFzB3uP9eexG2AWClfa/i7yEjh67+14TNQ0T532Ni6K+I+I066SiTbyyrkJSXaYTTMJVCSlVtP56748jBdGChtTVFvr5xjDKjGhJakEBTDE0v4x6eQ+vTcg1tK/wiGZmOX3OM/XIi4IkR+oBkB4tAXKJz4XE/wpSsa83jdy22++s0pmMdiHTeAZdLZdTUnUsSZ01xWytlHEGMhnzfDYqKm223bSWzs79BaTp5Fi0r7WxInmJgMC6DrL/I1elGBBGJzw9DUr3DCiVvbO92aOeBXvLGdVeIFKseai5ucK2ZEzMTIPa1jOleOL7JsMmxPFr5v1G7MbJA8ZnrwscUetZL3j+TC8ct/0DUMf1OTAvyX3ZiqrNSQpOmd3ERFEa80aCSqJpvenPNFyl+fY4iKafR6L8+/vkScIDdKC5Q2nKNYQJIrUwEJVJwWgWP4HrXgXcP/hvVr6AN1Cb2nHRSNdLrL2vfYVCcV1DyVh9afhB3zJ5rhm/WTAeoMcQikG83WrAJ/D7gvzw7U5GfDM7BgwdaZWgo7jdwbFTA/pC8kncwMyAExdlMKPngKtBOXW1X1skU0Vfkxll+HLZG11HPKubv691XPVEAkRHYKnDlNj13WffecbLXHKntoPqZtTAqCQFFGjcbz2B5KdFWFe//XqxTJdAfaRGlIoUOCBt/YWF9obwy82nmgN6sJ055Zc/E+eUfqDr/0LM0IKJ1Neslg/dbaEuj3g/CLdsm228VVlygv8PRmG3rEdtc4lwxRyzTW7wmJCFsRzV4a4irNE/N6EbA/RK+AAUrqunC2gDNEouHlZZ2riic+o9+1QFqvrme0N3Tc0VQPRF8LXZ40yeeel5mBBd0B/ii9V/wB+vCkaxcXdSdJGnsG8SBT80YUirMaHpGtOx6oN4M6j38ybdwlXAggmnBI/5C0XUNe85uFnR0cE1G4MJviPmiMVNOet4BvgQlkjugavE4TWDcEdwoyVoPSTIMgm0pNkGqTsEgQifExEG5Uh4L4CIjXRKkpmSMGFJtCLsKveKu8fO0941hiLNvIGrw2KiEp2YN1g/RnRau9admRPqP+G0leTv5r0PJ0K4am9APRngmr5G41N7oj+OJpBtDPxXIYv2md3YkVatUgKk0Au+4Rel5bNCXHmX+F5Kj3BEoFbLk0EN+CeYX1gex0L8DNJhKUb6tQ+Et9netvllkpmY2/4pQeXq45KPywX/QikGYFBKS2JFGawlfmiyT+8ApfeSvip2Gu2ozZhmwT6QYcsAlcuElG2TILpga/+I8yHkYnuOtOZhIH3DaUzlTM1Hg7dpqOrTes9WuCGm2ZS6C/iqfgQUcti8llKn/ixNNLbc/EkJZpkgfxw20RtjRt4KmhInP8R+jYxxv8rdsvOBxIb2YjBhnTs0ZjESjI+yUf6BACKWQso4AsZp5KeUnEIoAfXTVCfEaU+6fP5Sak6+/dnoSxwUZLuLyQTWO+Sbnrt9yP80g0AuTGclB4v1mSNDrneEmpZ4mor2BymFdVqdnlGFLPljZijDRvdCJNLev1/XebgWkw0q4XRTdbPoCbsSaWtEF9Il0CbSjQMVTi2bHHMKtng5Xg/Vm8DeZCDXJNGjsspMq+QQ7amp5Vte0GGwesooENoEyaTXMDgTrlsmU/X2xnMY4J16gH7c6q8tPYtXGWVXmVi1HJl2Pwb/cEXoY4JHLced0QCVJgnBc27xP3Qq69hjME7MwR9Rz5vzioKzPQh9v2e4Ap1AB03LlLDWPugpnEFFpCuTisX4lrCUyblplX67cgKTSbSf1aGYcCSmCkYt4dlgqXeNhhT7zLf+tyCBD8LJZGaWn69ISBcNwB3PMrDYloWyEkFwH7AhbGpLtBNui6y2tGez8DPHIzakha63uC+3KW4exWlPJMg6O6LnUzkK2THXfbzpkoyHtw2k9DykxXt9NbIV5eVnYNcni4/jRbFFuuaIn+3MMnUN74J+cgjNXTZ0psw1UOuBiJuj66w4Gz2vl2Rh6Ze1Iu5ERHIziLGCjWSlnLzM+vDbEju5vh3+braLt1XfOj+hVTMXAmIAbeAGblRCYbM3+gs5vuWGturEzoUDGtaoyb16GFpzXvI6fdcYBvyMVSkCZwMOLmxpD5vyTyG+rM2EGnhthodR+CwD++JjewXoqVc2QVPXVpmqy890JyUQgQAepeMDwy85SIqUNvQ7dIhYcMc3Yq3cEOMB8cXbh7jRTDxOMtdajU5EYRzZY/D1WdR9Ja6KmINuRR16i/MvSZ1JDwGhm4tSDFWnexI+Bxl5el4wXjiz8kZL18hzOKBeoTQrQs47e8uHvo1lsYUbwF7nvnSKRkKQINQtb6F6NCDh4rewpYudw8ntxKVPEv+mPDuCUOo7VBrKm9aHF7XlhdQVxoew09S8RviN4pUqk6FKlSghz0thxiHv4Ezy9lHNObNmZhObYvT8euxw+e6ASWmWVLZuXQJ/5noH6ustrcEybQgwRnD9jB1IMiyyrRPbGIkXkoN8bfjbi/MH6cYBru4UsM4k12uAhUsnmwk/GUYLi6LCAlo5TDtXFI7p1M0N9xo2VGDXSaUvE5IlC5EjGfRq5a957tJUUO8XVYKrxrlcRwAgGVBqFGqdxp5h51NUhMbfWqM9syB0z7VaI460++IeJeTvIMXkTiGSVXsOrgEHZMV3tCboOpRJD1fGxzh6167t9c3AC4WIbS1vY8HFn+JuKhK/dsQKgbyegehS6nljblrJQRtArYJHCWPMqGIRLglTyDzTzNYDZpELPKUNGCC8NsIq5pDnr4F04DsT2rMR26Ilv46xxpzxL0l1mllTb+d7kBcDh8x1Wh88rDnhB53I9+OwwNp4IZAVjgB7q0mSqlN5bg1Sazw+ET/L9TzLViSVNmshTVPsGPEj6RwugMM974wRMt45KFq29Ny7QcNyDuMKhWDPB75HyLbF+4i9pXZr78m1tXb8Chuxx4+rBnr9l1hegr7wbsUHjsny49Ba5rlBfwu2KQpecXix9ymTgAvLOujsXyRqdAQdUL64UwMuiXDzO6igUh+xWnTeomOlEI934gm4UbKuc7I1g1Ol7NFDihtebYDU5Db2lmqRbkxEL+hFmL8miANxw5rxnjlAyjwhQyIDRDSexaABfZ1CB2cS+nKqNLVfb0oVLy3jRbB933H/yTuzzf0YXyqSZJh591NIvojy9FbHXa9lUsDECjkMV3y9yI4qHYKk46z6FbJnPgzQGBW16H31U28DLotNIPkhYQ00Ky6FtP4SPZwtvDX2Kz8nn6peSgQFAD0y5a//H5cNCdFXbkFvAE2xp66JA0nwG1hy8GtTVcMYy/Kvq5WVUY/qGNJ36HHSTRmHp3SXa1jhUc2DwWdYV0jM3nRcAS3yuOxD8wBtvBe5K/Jxlie2RfJOUxCRfk7gtNI4TfkfSNFY6yvX9tWZa66OExb1ZELb/IM4yMh2h0g9CRljtBbSvMKJTpYgSYOVkqX0B+lDGmVQ9x5whc04zmjuILgyGnDlj9pwG2MZg7O3lEJSA7XV6cZII/HacnHnOE9v/Qr8iRMSNcivQFGs/fFLFbdMl7RYPSXPV/7BS+bk6xY3sAweCIfyf6hTmmxoL+wcjAOX9pL3tBzm7QInI7WJAHs7CGhV1T55vsiJldWq7CsYwEnFjaIiboR19T0LB8eyhXxc/yERLNzjwIKHCRUOYB5WMx6u/K9FER3lC/eLxz6LfMMJfCZMZcyd+eDgeusdld7CzcmAd18r9ZuiESkYGNV5Fpiqq0SAC0jnzYeIPvmgfa/6hwoLLpy7B5bKY85AmAoQL3H0AD8/C/rNrMt6d8l5hO2Hn5GSZrS6skH3N4/mYeOhH/cXBHFIqE4boSYhJiUeUft/daoW5f4TpfGVoO1JeSnHVeJdLcyCH7YMuo8zxqeX+CIUfKPc2VnxVX+3xHujqGotAjL/lImv0g6aKwfn6SlGR5VK9WHdHNGW4cwTlcbtR6/suKCIIuL7A5xvLlGqrOJVY2gM6gyKKMEtjV3/LWI02WTm6H8VAdY+qpC724juUrldkBlr1kMANf+oFdbga485+N3TXxjUmeNloTIaaKdgoqxeafipU1ma6fOJafrePoWzaddyMBCFtkHdEMB9hiE4B5Vs46NB03/RVdi9XlHa2KZeEoU48W8tHgxo2YZF9U6Nu/1+2V6W4Y7sqdtX/Y6zFGESWBpF8QUdqma9ZmhB+NLtbGVHz4UtXRVAPejl8giUM+EGyn1zXg0NjgoXMRMvzuGJEGVClaW0dj2HydmX/YZLlyYlNoVeSg40tGWniW/+1MzKx288JB/8Oyxayw6gLVSMuUIZF/F/oQIyzJnsOhhFYcISZoWjyReujsRUp+rTPlVnlPZ/ZOSJGHSeh9H1ZKNPug73Du01bYeobkW7SmArTrzYj2hQMiYzMsSQ4rFJ5I9V8o54qVsms4PghwUVUrTO3yve+uTcGWnV1Nwf9qetTZEaAuzuvOUTk/+AEfa//jZyVTPpLo1Q/XumHVx5T9SiO+pXEFb1PHYE4miMmZmcVS5IGUcnV8cqXu6ACwi+PnsJZ5a5fncT2nv3mF/UWoemBs7E8BNitrbNIoSNb2LJ1eDYCZzTMAO9bAkOhnP/iYOCcsoyro8G/rGjU26KviRnG410JbLRkfEu6k6PGJoNHwF3kgQxbmKdGyrO8NMm61ugpYwW49Rxr2+9At9BqoHPtEEVxMsg/iQzdv1xjDCnmI7VBPwj0n8QoBQQf1rEYlQ51gO86Bk+mIZalJYUENMYiU6Y2C9Eno26wOUOwI6BfJOsz39+a8NsUTEZu/7TncfF0i612T9bcXnrDqt0GTSI8Cdmva5SJJZw/1gp9CUF740Pc9AHZgQq42Q7BhJgYWMevuiJhy/f40mTMHVHbV3rQb2uLSC8fmz2P5iyjwUd/74SWqW75nz9NhGRveSlXkK/+y4fSB6Zyzv46akOJcho/Xu+SPuAhWKih8KGQNElramiGSI7bdsNNBm4yLDp5195iSd+9hVy/uoiV/XhbhB8VNzDfNt7UcyjDIPj4u4uIQTWBNry+Lnc9k/cbkMHekk/1fQBjun4Fg9/5ChOBMeWeWLbruV988MHhvNF/dJfpWmJZg/5EbdF8ztk+8yXCUSUZjISOBCPLl/KNFF77u6MG/zcZ4z9rPppw6Jia+rQO96mcfK4ujYjHEF5qVl917ZZ3xZ8EmoO0xF+HBSuqmKlfckq1B6Bhk96j+Ku0CiswNkcrbi/yUx+7nnGl4H2FivEat002MU9tF6W+4OUWx7ZlWQqa3ofFuIuQyyMHo885GYdymXQ6p5xbCbG0njps6707YHAcuTJqgLHA6L9ZwqGrsIamfsyPD5+miP557mx/Ox8ugEGT20Yb4m9BXrlpF6cG+fYpmUur2GYCj/i8b6a9TiYINzo0v0R6L0IchxkpEmgyNnp8fNp8W6QbP7t7hlqoG4CKmaCE7rAGVtbU666ZHm1WNQVFYALVLOwp6qqdeH4wiWDGptxjZmQu3ZlL1o1yTyAnUca0McFugu2A1Bjfw5+VuKoDFeo16JL4zBXT1LW0oaJNa4ociquhazLDTacZHKh55ixEl6uO+yGa9T86Ff7IjkIHUbUlpMCPzZmXyHDEV4irtJ4QcyugynYkRQrUivqkgYEPB8L3ArVsSpXYyPpDuSWwGlJ8EOE4aE2ZOn2jGE214lQWmCe/sNH6ps3c4jvzEY+C1EqQ4ff8yZBQLpH16jiCq2r6WlzAUhuArXXaOAl1YfmXo7MZom7vifMgyKXCY8Bvhak7PbUjXjw2O71Hgo4ca+h4knzVU/rvtXcWs0ag45uQu3jwCQrIAt6ZMv/kv1q0zrGeiYdmybWKlwdITE2+63S4HLVl5oljB7gMaXRjZWzfh/THwvqHtenqGZnde111CNtb67FnrCYUpIefjIA/ZA4GiNhbUXWEMvXvHeB7mOfI0cbAT7deGHVfueiJvAPVf6XhcuxAEPmk8CgBPTou4zRk8EE/evfa4WNGpsRdSlRfN9+d6LlnC/LmyYkcu5VpCTxMPCo5AUD9hW0EyRyiHhpdptMIoTQcMjUXVVzksIenpdONvL6n34HyqFKA9ahIo8Pg4hpgt17a2liuS7UXjy86AK5W3E2yZvqX4axAJbiTSfztVtVHCGL+lchUb9he85mCqC9MiyBo/A+bR6vIoAoTKFoAI+Wf9lrgWDO71Ni2LJxSC9o1wk4Re8/XQIpOqkUHx+00aMqzA/LN/YeBB6M2RndjtcnxChcoBDlcI86KV2uZevdGNIOZwPg6LO9mU0hgZHZLjWuiRSQB9xYkTWd44u/6hIxFXR03TH0uMioRNYVogK35k7Sz4mD704VILagz62aowid0ubk6280ucmy62yxvqtEGa7dYf7FjiAIDeaVinzREXd3cMWYDnOVuYg/scp8JzgfMWEFk68/dDwI5xJshNirHxjjl9pBApnTs9J0umKq/eRnqQWBxuZYLDBsRbtazDiy5ggPrQSto6vkoot9PDUzQi19qOtccN9Sj0TI+SvY19EsWzyAJUpGXTpeNgmOTqxMGQnogdFvCbMzVHaaJdj3PY5DBD4U27rg/9vEUr7v7QWyQ+RPlZyPJqWd2hVh1K51u1VF1i6VCFHo3F2oEFZCyFnl7elggJgcqPYQMMXWs2nMYYnX4TIahsgTdt6ITdHK8cw943kJikmzyS+SQvK3+8nuIVdHmSd8bGOU1pTPThuOc5fomyAsxbmMHGKsfZiY0h75iO45OW6+pSLKx13uv1dsWm/mZdQpjcWL9LLesEc3owrsPbTi6cP578aGv4V1ieIOYN+B9wd2PRA3S2kqG8/DyTwTMquQNhm7D91uzwi7h6/vOulesYQsI3Znn8x71mfT4rRrC36dlUx/pPYTMdLqVJIARGCpORKJVeTEmhxNJltMd2dGmjHL6Pz0Vo8SOhSMkq9H8w2QQljnI1jCbwJhcTXFcmgCjxU5ciRMhH7SCzv8uEA1nf1DusQzQ2oj/SN2q//eSSEzNC96eBxXa2v8Am/L8mwazjAoTmUAyqGNoX2thYYBzuQ450gX3TPbRfYceByDNox/4d8hDFjQdpKn40LcWhMvb2TdUJfk2iEN6eVM/mkUMZSfgFexY7nKTWF2kFZ4TM01QxKufcjrxnpeOPmTwm8OdH/IHJNjziZT3gc/SvYmCgnGYZC62Lve6ZTxwOZ5myFFp7aPjRgr69M5okWOyNykDCAFRg+OGGkPJxBsvk67L/g6Bpa82YjdsyE32nXEYUTt1gHCCFU2OTsO9GAd3Ckj4LzkSy7+/YsnvHIVVejcKqcQYCT6lUKvCQPkjvKKamRYBxqyRue96QPCBRs5Kk5uOuzG7G3lZV5KyTDgc+MwBvk2Q4bD2sULSXrdeUik9tsW/e87Ha8vu/2IR93qm8Rg3nJdphqawM0tWMlIxRnFC7I4DkRXZIizmT9qF2d2CIVd08P0/Wz5Rkj/22U8NfWabuxWn1PdGyNDIZhMrmSnFFuAy5AWSGyaKSTlF2ejLIEzw3Ur7TEneaMsYV9YIt+3KGwYEJl89nASxQYVyeCEs5x43e3EukiBvlKtVKfazEq2Ar4Z5Ya6DlnXEb0dc1nuiYgqwYzQnT+ULPd/hqDrlsuBZMPXW844BZHShxXJyoVrVaKbKSHTY6teVNVyB9mDFFg71M0ru47KN5sZhBaj1/s1/A1G5Ufng9bLadS1YkrtKLPmknE7xOBbyCAYoceibLN0HzMrxTjpqJykxVa/93MUZwfa2zsXFZNaNDac4cCeai5Q9i4EwImBLNMY0mrgJesF4bt58tB/b52WLSYoV8H4bT//z2faGJpiWH7g7wR7qD/um/IIO33mSE4j4S3AcbUnLfX6vVJuiCV4e/oJzoviD2KyWkII98la3PFsynq6/scIFjwXS5Re3J6QVO3p4zlLywUDsz+499z5g+X1DRzwPvD4sq6LJ5xB4Ds0A6+Mb4EcLX4P9S2Saswa2sf7KcOwHMGKf+kgAMImYxqeY0vHwEhqdPjOb/0qC/wXQU/PLpTw/XYQ6GGzwhWNg0rs5WWw5vNPWVXSnVMQhtKcbiJJhrcLOuf6i9EV5g8DvJzLxwLBgn1Qls54xeRnnw45bAQ1hFK/LqhjVBFIk2DydcEcb+UPKERR6Um4VCgDn1bLnC3uEVt+tnh9d1lil1t6cNIWg7KoaVgJaQX3I7nk7OB+x2v4zD4faqf2NF2YlXK0jAd3ZDep2Iu+t+Bz2jhGqs5zmbxmeV8hvHu8ZC5lmGH4nKj/wuJjxH7ujSEt2EJYzZ5lwciI1TU5fHG6iJJ9NZfgxGQi8kZWVTUMcPFQdImu+uH1youJIFXQV7LnTOrF3Hk8AjdggJbG8WxBaiWOVBRUb9eHZuBrQlV5syLRJ5sst0JgPDeeisNLO4gtIxznzaTfrC306gAbLQqPMk65OaenzbV3Hymm0d8TVLPw9h+NSuL/6bRvzsrcYY6TgHU1rpFHTZ/2inW6YMmr2EYHcqLqDaIDlGlbJVKZjRRO/m9s9amJcxxtCqrZ4s7NawQkeA3Emwq4/UMJH1+pufkS0M1yQRhg0XOxfrrRkF4QsrlBUNH8agEOY1Gga1s9etqCFdJWGwx2PYZAt+Ujc555MKMjm83WQLxUYiSYJfALok4SClrBhR/zqPy04kwqbOuDa8rR5lY85/atuvePyBT9fl7wqStJ0l754U07WrUYDnVlGpD34vWQE1grq9A0xOQpLstvg/gbQL8OERzlAW2fP34Sjm1QVZDszmZ3G+4U3a76lm/whuSlhRCFDPP+dXLzjVS2VVvJZsB+YWpJ4vEsbLUEAJHAu5cIyEPb3cBLsl+3tR9Uof6ozMqMJLkjUDrBJBgEJXNpvD7/N8QuSvtgZyppkgqs3ikuFa6uSrFR+E4nxDeUkYHr5KZuXgP80OjoeI3nFQrnrZQvmgAxeyqRzF81d0LElb5KwlF0OZKPoerc5q70k2VaAqcKdl/0ZN+0ZFND9Jg46q+FiWPt7xJt5pUr4DTSDAO/D8UtUNfV6cB3y6F4Hh+bp001TKMtVT92Y8GALj4plMkoA0F2sMX++zqqafpt2EhOuMAQ+VirAl0PN6lcm0VqrSFvNkbrPtVzpzrFbf8+SewJIDltJvsYzp56N8K+L49SfuU+CscWU/SfCLQxomr7IVrvBvo5rXqJhILqUrNWLHroqN0QR6K6G1xibnsXDjQ6jRiAGUQqzU7Mywb7OHdH86x8M6+SPgQTVq45E0Mw6N1+y7m+p+RJTXXB9Xmhz+kk0/jgg5eP8OE7ZG5/Hx6H8ORvmh26gd6drVWypgEGQEh+n3ty4ma6u+vLhaUurk3Ifne9Yo8Vp0w5NxWoRxHXkkrqS4UPpWgl5Hf0c+2vao8vk3wCdZ+a1agTc9r5CZbhpphjIzVw16hqzkG3AxhKeHpKfrOv7HJPRw5u+7539rid8E0jQyvytEKIuKynoGpKGcQu5ZIvjbERrgc48MSP5a1aqmI5DN+EsV86AXv9chxNROPVJ3MS+k4U2zMids/6LCIX6aEaK6Y24bUaLsJXxKyy48krDbb14vEmqEC8R/HrO9BrcTJpGLNgc1JrnutBTzigkS/YIbPOZS7gm4KoPiODcyccqUqP/7W5eIZAc7F980MSYpeGmOtRJG4+XiHCV5+3TiijcikhmJfH8AN7cvOPbaR3uBbChN1STgRbp3ASYlKs3CBlenX9f9QV4npK1d4OhXkaJa8tZcO1hM2oEnxjfkei39whHQiGaPvLQjGp05BtkGKaymjdmlfSMBNnsk0bSTSa7qqn4dndfES21CrQoVSbMVmwQKsmpMSnw27or86AGXShj5U3ra9/KU8GlBX8XAqtxPrx8wgptAaw9Byz1Qa5LuMztTcwgzJ5CGoodXS7cX+0ao3MzRi16vkGSJY1MkDvlMiJJgtcSXQOFJPAz1Z11OaJSpsTpoF4ujbIlT1QSwMo9qrmasamq5VcyCHpaLtnMfKEtMIoYBRXZx8uT9iPmubsGjMnYfFIskNWhNaFxGKz6NQPhkQH1FUALUVnOfn7UCnSiiNUPjgzWN8FZiOkq3M8PnLxlnvXSnxWt4ikCQNtBOAnJ4rAR2cUPX8i2Vaa69OsPgTbIIbSjLrrIpvSvAWftWt2eKfnpVdssEfMBEDxVhyDnG1n79gKck77rnGiCdP/TTvRhenxjHfl5xcN6hk1+97Ik89e2pI98940WcdkWbeyP/bfYxRwrFh+fy8AKx7baB+6qoEBfD7iz5tXgGo/vauFbUI5UZqFxKHet4gBlEHmREtB49BeyHxYjOck6P9zaFdfrDPeV4oitqx+tizPTwkshhPJKGiwd4iwRMETXc2jMTNglNq2akfEfJhn/2npJ/7OIR2ZsS2xYtoHi+JDoH52k7irRJg4ZKI+cBcCwJEFvZ5SQHD1lTHTWvRfOhz0oDzcZXhxNL1NBoxKUTtEg+IRWBrbYeJBp/3/SoH/596YMhhg0sacDSYqXl+8jKCOwM20wFxeN1RXVXec9zrRNW6TiztzR6QvNPQhQ7/iQPz7wFNG3OHidbhN5WetmfsoZBUlD9+1l1NKw53o8G/TCl+IhC8DWhO+Q0jsjUc0e1APJD75UvsdVkhoG6pUk+tvDCvgjaI6OH1JsGKWf6d8lxYiyEYZuHvdM/lhOj1sN+16cE+yOIXkkyHr8wjxU+OH/rjLl9Z9uoggDH1ubk7hfsIx5ASxr4PYP/I1Hej7BY3J8TXlF0D1x3LG0FQQy13juxAk7dGCoFSt/ZahGL5Eo4HAQMOtuoEuJ/HvIYPq0QvlljDPMlMWfNVLJbAGGaYE5IPYDDJSc8vEu5lhGjTTSByvwYRVWj41gJQgwRakU2l/VNWHctla+htl2GV6ZnRwkd3f/xVCD4r8jx7thgTTKAs8BEWSBrLZqR+AxRlVAFQcypDLwF8Z70xOAHKeFM8t1JeovILWc02BBjRYARjuaxe9lSTx9MxuvgMR5zjZl7s2ScF/1Q7AEFVvVBcBm4247S/CWf4vaKV9Xa+OQlDbPfrssZzj5K51/TPqNcIfvCKmqK5lGJYzwsGpzdWGmLJAj3Y9wXJtM1jjHHyDPDQN3W2aGHMQosQwSzmO3cNP44XDCV4G6ryccN8LZKXYgZweTSrJoOj/QSiwsxdWqdq5Lk+tosUbIGRxBNBXbT5xHjwsztrnuXEUxhHaYXeOsphzZ+gwa/rHBExdw0+/7W7xxNCQGqI+rrfryVGSi5ii+buKIYPuI+MbYpg6wXzZ9MHBIAGRZfYyCl7UgdDqsFlt9Dcn0bLR36LwFRxrnwQ5VVipOWdg1jgakp4TojajF+4eqwx9sfVx8LnKqt7I/kR6RdNG/q9KXxOT1z0RdN+mW5MFlGvcow50yOvaE0KjfmG6Ks09hGtlgdrOrQ7FmnCviFqtptlDtMCdNUtuiFK8ydn/yspSGzg2Ep+clSir6Oq7NKhivw2PcNy1vz3C1dRSuIwj7R/Zdo5fR4EA792BUmw7pYQ5o4fDVIxKZZCX9ehHQxam1NxXIYqufcrjGhcSVosrp0WFwSypy0Jb/oJLcXJCmc6FjZTlBIDNENPJi8J7eFlPgwqTQmkZc8dZiHNDUORtAXVj9/ssQIBX6Amhu91rGiXQp8+RcT9ccmvP5fpA9hLwQkUfh0y/l5M3piQYy1ePljAeVbQZptTa/Wv/fT/paR6uW47lsVHF9gnlLY3KekmrBLb6PQ4wvY7tKHW9XBTsoF79S29BqCwbxEX2ALqsGQ1rI4w335Pe+HwPk0GCPzXcSn3MxfFn5jQox52CT0ISEfouCSFNtcVbijWyJwwOwDvO0/9ujk773GYDz3T7W4EDP7B3n0kpk4IxxM6k2b3TEqTpFnwWC7/t+1Kmn6i9fHBMAt2pnyjtEtcobUGprBiUJ5T1pMYqCTE5ynJ+z6eaCpgEG5QTVB5vqw8oiV2mOWiXf9NoHdAgjywLhDojA4o3USbzOeRc7MDpjqM2XVfB1PxFzbOqeKjKJ5Ae4TNY08gtRif3GK+/w0ZQ9c853F+DR2VSRbU+NRAsow5PgfeISgPev40EcvpXivPgZ2xI69Q6gWUtdwstM6748WvS+IetnjmS/4rrH3bLC317DyebIkF66t5TJGPT8od2plx8CV6H3yompQJ8z5Xy5l67jOO/1MjDq8sNPG5FlrXdmHM0T4YfCavLpVrYWs0b5xClUnlWZaWFUrEHGE5bpxGzec2Kx4QnlnEMSTMqRQeMpwTPniuhdbvfwCk6p235ZzP34UI5A7mxjxTaQxY2WJOyGPLNEbyUtgzFqTjwJjlE2N90Y8ugkKU8XUK54NhdtNY/Yc7R73hP+B519rEQIjhnajbuwTkiEhaUMd9/PxjpjT0peT1vbOgclscp4obPMlPlMMV4bJ/xr9eW6c8wzGYF9tIUTaFcCkHEfloV9UDz5hzKiqPytGYRPote8GavljbCi2qN4AYZ/M9qQtIi/B1uIOAAvpLf8yrnSowqO5/ATe/WVybTrS5Ck2414Hal9RME+dGm9D3tBiodCKSnkHKYYTaCk0vQd/ovhyTe45e/SKRauoWIcBd9tUcUh/+a0TOgSxWdrQ7Vod2dWQCAsPDkLc0mRC+SwLzgwTCG82ssOR2BB/xVQLWmJSfkCfTpfuA8I4o0H3MtWIUrLAUal/l42hUT7OwEs+b6HpIAGLg6qW3NTh5HhlmcsHDNEl856IHpYmStGRZR41x4sruxRANg05Z7FMNIKfQ++qmzAw+d/mIXxTypTGUfvGpsLDchjd3eCJMxKdXa30Ei3tEw5fZVTmz9rRd8frqO+HHlYjKKKN/CpfM5E8rtFICVnNQmbAvdIEtJSOANfXGxrJfqykFkYpiPGFd6KHM0vp09rrWrOW3XreqzXf+gZWHjPwAF90HcsTBkK/Qh9jBvXDajJoE0Kx9EeUpydlnAt+Zjb9TmkLDr+M7JKUBQH6UcGj6d7FUeSjLDrTbNVWU2uuXWF8YjOKh1OyTRRhBhXRjRvcLnzmUkPMv+nWP45iTM9D03umiZUPGIuZN8hvc/8EZTyXS0nIYqXtDfFpZ6D/T7ej0yig2Q9bDL4jeCqGQopUxa6V7iV4IaEl62jPXCjNBMHy7zJ3yUfrKK+o/tozkAjFYRf4pDF8CfhijWM2dT1yHRpaMc4qqjYl7eagEdySyY+faeOcAri9Zdg1Gf4br3ncUp0PEJ6Ah2sS871dOiWEtXDJcH2zPqHf42KUrCE9j9yrTNzxe1IaBqUXCFQMX5tCoJfRdFflQ8RnEyM9xE0FTikakvv3JK+mdj7nG6Z/QB/YcZ0D02KiCKdAZn8oBOrIZgwYmCKxFpFHT/oagiojIdQ2j9FLFR2gavRrKDhPZ0bxyuHLsE5Uzmh6lPdlLvYbTPDh5QQOuKAHPDX0fkgUqokV9TGpsbgJbvW78bUgIVxeM6F1r3llQzqA8yNrYDwB77F+CWggFD8zfXrzJgYlq+rW4k+WrhCBZVx5yCeOzTN3xIayIT3ouMiJAQI2pwtG0hXHs199++GZP/rp2EZ3zzXGyWk7Cgcun5K5KDr/hmrzrX5P3uBYcIj60RgLMJJmmY7hSB0YI6PKvE+HkrVt1kUfiXwQ4OdIYWZeV7+HxX5Ya0jORABzVjfxjVQEAEzjwr/DlGk5mFkArBHSBg0o1nFy8mL60jQV+X72D5WWJpNFW7+HDZJyBpLKaX2w3Uqz/q4fAMS5jkW51tz29dyZNDIeH48RyicCVliBYSjiGvEpNFoSDgpl/3RO4jut7D6CkkfAo7UhZeFUpTHXwZWiG2Jloqkk2XTKpNLriR6axaaSzwf1o+wdc6dS6OF2l3uSauWSdrXum33wZIrqJfsl14kEk13XWeyxU9ZeTzx561RBeTZgPFrUlzyZiF2UZ4jukGyqlCZeQohnkE63KhxObz22klZ51zzE0PAMYtl3pPyhj0kw5TqWESeyRLQ27B/RE48cMBYv6A5VCsM5p8k1uQXB14LReiyFshSHJ6aW1boL3EZ/RzLXiWgrdHi9gH29vErdwTg7UiISBXL3ZOxp+WHF8Tw2b1Owt2IGCK7D5EnTTKK7Q0eGuvrACNtgOifwphNbA/tovtIXStswxuL/3nyx3aBAtp0+mPlaBw+f8J+BgAalD8ohB8GYUKl2+WeQ4RdWRISD2CRSje8USSKx6iajBuQ/KnQebfjcNp83faAB/X2tuczTXVaSQBtd1unzHbYjfEw/4Zlc3TWrIOEhVAmFFU5pWrzh9zcuCQ453u02M0WIQvu/djCs9txpKgsnnsko6fJA272Nx7wgZc8sHICOCEnVsd2EB2+9dtBkkpRnKOPtEVLTdwjmmCASXdKt8gSLmEjYNDBTmlHGSfT6N/kBRwm6nnVZxG5/f62NTe29ekRqx8nQQXABp0ho50PTM2hi1lMzULLAn8rRnyhQJ4AV/OmogGokpHwQWDIr14rb9PB0hXs/8yERQTUyexC74Mt0ISJ8gJbUPk8Bj77TwFfePx6SqEeHqO9+nGH7+lOxr2Z4PfumJGAsJQIjQtc54/quWMg+CQFoOes+pGD62wxfJ2Z5PO+CiIuz/ExVzYM9cKeuXVChMyorU7+aveKhj1L5b7T7MA3IPeK8sEzsnRiZbTjzyLW10LMT5q4/wI+Y2rk4u+D5wDbsTou9/NSe0CKc/fBUS2mktCZXnV93NpDzm+6+nVYAH0Gn3tIVwpLuh5AFvPEImH9tlxXJdqIYk21z9yLZRZr/+tZvtUY9FciA5fYCWID9ewaWWYI60cVfqXDe2Gnoij2oa//OXc9DIltWyF4I2hNxRIk23Isa2b7jtxGT0MvuMq8GyvvjKPxRWtD6Oc0+FaSRyXwVNbal/rr51tFbapsAl2HhfSkmE4adbSClaGFQK1sUbBV2XQhZ+E0DKV++MqAU3rTvnJYX07+QzG0Y1iamsbxXFu6L4wHgiYOvCLYpyyhco9dQwXsjjZUDXgJccipWWMaqPX6/804Y3lRcVa8rZwVo8PtSu70IH6Zc6h9DmQLoIYJQtOfWG2gLAM39DngLOP1P6QSg/ARFf3qqWNfJjEb1VYPcJBY8Ood6ffZFuI+8ne3wonmrKkgnVrc86NRmjy9qpU0bNf8FUOdsDu+LHAz8QVpryxuuc8tfuLQKKvjRQwOAcFIy2lKZp6vKhQ4SJF6L9+FUFlTyXTAAmUa+GO6w8RBVG8bzznw8ti1tixtOTQjiOXMUqDdXxmqwR4L5QYAgofFb3wewe6+3QBS0M+58HEiIiy5K+L9Y4GkOf4QdjqLt3fey3vcSejMRaJiOFRoniZ/lFbxeFo7OM6I2d/Nbz8ilO1EVIaH79CvWHUDKxkwtOkXsHjcGAbrxOGHLefeJp6ePw6hBkZI4WO6fAp29/RyAQQ0dg8qGBfUfE7G4mbX9OALJkLz2oAb/0G5HyfzV9oyAd066dIWjyiIbQKwQPfBhqN61xHtvEh3WzS8BgwnrFteAKMRZMvd5ssDnjELvLXTn+UcJiPbXSCRh/Re2+OXGdK9W05TxotSKgWtgXtsD8U4JNSpnzWG+c8JYdvtZwkLgSNHD+zk8angKArNRfI56fB8d8ZmWELBs6iiLdQQzM//2+/rloPPjsNhHrisJNxRmTU/v8PEwtdciaP6Sho8BypDLQvdjgu0yScCvKKO8FpE4vkE5ylU6jMi2N25LjdHXW0VeqMOdR/QZh1GrCqWKG87Wmdh5rBSl3Ixw8SuVTe8CQkr9dCv2otMKJxRXC3vYKn18/jfHeAOeiCGTpCocX8utR5XDI8A/4MM0oubUa97EkevsiHRbNPfuKLo2biLqo96H7y7NH1jrOE5/3yKbWla1Vr/yQoR0di9ODvx9JTFCVU91ad6QchpLifEjSxsfdT3A69FSZEA3/GwfpumOlh1gUf6rOTamMQS+OSrsYPS+ujVQ8QtTpN77oc3R1p+NjJM+YbVf0fzm1qgYnhH+PdkDSHa8nxaV6v218v4diCvrVulpW9W69k6TshBNLCJZzHPDIITSqN8ZZMLucu/ZTxZMnJxRccqKOytlaB1oCKcLMDZ/ez2JD/R833ihPFIADVJ0jjUhSKD+4jrF/BEFUfujyuE+f/hUgBjFfEvwlHL4xoHwUCtF7z7IWNsw2Z206oZHeJdZxhSd+HAv/3RM38MinEepJUmCBz1va1gTpPfaVjpscpwtTLEVg3H9Z8pudIkyCnzoBDFSZ472+oVRTO+OFfMQCB9u5C83KhW6tb+gU7DG9WSTjBgEBt5j818kR8BfI1XOlz9gsQ/aynZh8VEMIpGkCyn6EA/EpXEEDu7yo57nH+R0K1dEH9fBm4iFswKbdn3tnjj+NPLAwhffryZBgOR5VM1V8hY0DFtbOP4w0zYYkO5P2+SlByJgWcKSAZGt/etHatHOGcahNk0SVIg7IAVrxns62pfV1w6BoJYV9HHwAFpupGLJiRCq8KMnuVwrXacym/gzl6X6Hx7gE5i1Sd7/QYUz9EEik7yDnZ5tK6L3i04fdXI6o6Pahgiugx0jJSsLMPwrtw3LM5CrCZ5TYRggKsuwFp4oJwlO5Xb2/MuNFxBEXuGxYD35aeHIOlkTPd96uNa6RjGVaG5z3FyCkNpQZgQ87nfFC9D7zq3n/1WFnLszWmxzwugLZ343Zg0LFdpN/tIIgdGtd0XLXQ6eSVcXK70vXFFVYemvjXp8yFd62fVSNf5yS3yzvqcsI/VNekv/LIpz8YN48Ef0kMBVINo39kwglEehwqaFYJ1Kdgc4SRZHS/z6zc0pT+GdD3NHvX7zGaIIy98f+2rx1BkOFWR8lRYS+x5o9i0olBTmwWeTV1VeJeG6TB5X1bJYzGsht8HptVy/XvuQaUoLesPKiC2gPuVIkxFdoM6HjlvMpjpoRSbt0Ex2PpIF2UHn5nJVu8sW4TkMFLvAJE7fMU3LjZnPyNzYhXW7khvXmrBvDn9YtLOl7smMSJVWkCYt54iz044eEZr5iwPk/jXwZqq6Rze0IzhMRQhoq/sH/4zX2LvLOMoYkx+eJB8D9dPQCOPhKiUyg0BEgU2tKOiUxfG4aVKB7oNGGsJG7FNRKWp2rRL7aXBmVPNxgZIfL1sYY3BLInfnUAb87xpmOtpB9GXxpaR1/TZQ4Bl1tF2QN4ohKIQuds9dfp3ePGo07GGUqadXjcZjm+6AAPdFw7G0oeqSTMLkRjm4FAve24nDE299zJACQN17phhewfaxztbwmEnVcv80A8FDj5fPWVYnm3wF3aRy9zWwpUHmA6GD5MPwQ7PEg45Dna1v4GZY5TcT5D/kvVr0Heiob0moCt4n36ptC2Rxk9ZHqXNbCEu+98kjCC1ZK1Z8O6G6kxrZVwHUn7FeY742Onds7RCG8Iw7Q1z2GXr7uRZIr0wNMQBB2yQCZiT6U30Ip2JUJ2zKUGS0sT9hzdJy44qJ01y1vD0fa+1sgo8TnuufKFnyEjendVb9g4yVc3xXuc+bRf0PvlI6sdyZE0NbIM1BDR277lLpkbWo4FoRwl0Ud2vs0P5SsoGpUtfnUEsdzTeZdDs7hmidyHNJNIcvJMJMlxsTuZ9WkiGFzxdC+l/lmyznyLJcf0dgYqfEallRdJ9F3M1i5T7S0XK1eaJnMaKjxZJv4ciDD2jiMeULq++UVztKnjPJrRwyHiyeaKcamxETDrK6y98npc0JqOQD/LAK1MwT0wdFY3fYIjBvXl7rBV8BJYV3DMazS/UxpkUD1kgRnoRgMTfyAkMRO10mRmshffLEAS3phwcj9CJBLfyRTJIKFZSnwydrL1vNjdRd4OJQSiHaaZfz93089gbe5tFKywpPus8bI554Fdxp/Q50hdS8iNonO0eZvgaVdDMAQlwlb/Y21AzfIPu1eEezW8jmbOqHuKraiVt2R88cEKbWs59KXpK51uz3h6jYFpn+uOKKoLWQaGOoLJ70awCl+2BG6jTsF9j2teXYLssqU2H7+WQR+7NR6pKC7r0H8OhndsLYWYul+Uv1+Wyx+Q7/Lja5GtNSi9XsOMC0PjokvRcAqYgjkaDvGT4aQjaTDYOylHbtJcK/f46vN6UjhCtvcQogXu4QIHsw6pNVoh2UTjh3UURX+L0xz7m7KIZvQtDfyJPXWYFl2MvnexlGFxzHMcUT3hYd2tkW5UQQz3ZkP0p0E7t0fAd542B2HOUNXocQB6HXnEWQD5d3IZ5K/Sw/asrHMjMUKcQB3ffOTaKWRVHO4sHEEOWi+m6Sd5lg0XSa9CF5FYoAz7M4phlVQ+PIeVnq4w3Yyv3U88DuvS65Y1RVODKlv7mF8qy/r6ePl0jE0WG0d8G7d8dERTDOLQX3SDKSidUvkVhwGx6FP1wa5mDxrtW8GhGDZ6q3obQAaVNiYY8WkPPhDrEtusfBBJ3JNb3PEhrJevvyw+M6ht1tsthwQKc0WXkzDBxLk6Op1QbWcyoQDBUIT9Myhz9ZHxFC4tXGscgcLWvIQe+x4e6E+l9RQjdk3JvHTh20y3795IwB92YL99/UOTRJGkdy37qdaKhSSjK3f4gdUCIJn9WsZxfafWb60+datHX9cQvsWuL6GUGq2YvcszFhFDDVNccqTenq21r56LrhJTYR7E/OUh6YRMqjOe+YxWZZ/6YAChWfRH+z/VAlWIcctjMZgwQRLKOzbAsPaZcOphHfn+rI0XpHyqvWA45Aat7ja9f8T0gWec1M3N9pBwxsu3KHLiQAo9i5kSKUmoJ9nxk44PmrFhn0cvGdfRyZ1Sa2Y/C6dyGLNdNkk5wS25G36PcCZPjDSJIdspzwluAjcSVRemmtITY8NYBNVUDZV3fmXKzTMGUI7YQAXXGjWDXrt5ymYsXKbii2rCmMoc5RNsI0qu8uzkrhXxmOPwN3Okml0TDpib1iAIQ/vlUVCnM5B77lgcHXww3xqereKMGLEcnNS3VdtOwjMCWknrppqtrHQnOTTo38qe34eTf2K2eJoBL6LyEokLwq6ArtAJ1eyo0l/6QMAuBxmLaIpb+F1p7lV9ozxwq/H37lVtQdesXJeONXnUrsV82b69yBXS60bUN2bWvd2JOYNyA1GfNaEqafiGIRrFXYP6/1F/tpuvkhMkZCF6ez4MUPzKkVLDCPJz7TfBXS77wpg5pWNSpLUZFEu0e+0Uqg/I4t+By9rIfAXq9/C/Z95/2Atwib1doHg3A1IDqWSVRKGKWApRWoJ/2dodEy3Dqj+c9WunBtxvGAbUbeWjGI2OYMWzOGU800zpDLOcqagjZp9PZg9mBARgtmNjEum5PeOzs+LPzkqzcKGiJW5VlO7zDM/5Uz9JNnyIKGBWR3cJdxPBOaW/ojlHI4nxV61v32zWBfdakWuYovY5Riu+NtFqsBzBoF2HsHCRnr0Whks7OFSBb5YxmNKMxe2QPd5yk4AdSk8NaZ8d29QS0Ta1c6dTu4X9zCZoJJktzgagOcmvlQhatNQzr/3aQqsnlxuJdhg8pbR2gHfVu9OJqXSsXx1R65DPhxQWBhrJrFj1eL0rdULnouNIDo7VyD5E5zd50IpHVe1QbcxARQJXVD0iNd6x+K6JzbMAjxx4qKw5F5X+Ar4usCZjkFxckwfvR0yJ0B2xV+EjjqljnSpRyqB4WmJ1Nr6lnvgOzPMi4BB7Ry8u8fY1kc8lcgHjwcNBYPLvTHLnJ8qagX2I/Mtcuobon9Q5EcHpT8AHTd1CIps/7Z0JuQNkYzAaRNjD/odrlQqkYE7rCw0QkFWivdpIu8NPJK/jjxsGz1ySYkDzIQbPC1kY+0l4oJ8SlHKEPlEKvkH5FalJaTzpcsPG0ZgRenePOuqqphJWD+lxftxaTQdMX0XKMR+x1j/UwMhsUwsPx3YJH4eIFCyQ2qbbwEPCIQkBh7F6j+ympkA5BvALs5ly5YwixYLFaGzJ5qe4ZLpik5wcfnd6V5cFpG6bhSut5Lb655ChJqHl1LtH2nPoEFR3kq0CErziUGufBJLf4zih49sql8/QNrsJC1n2JWchb3vVwoJqgxC17OTfRosxDmuoyJvYqtgwLZ/fPhGc/nsH0wCvfcGc47QG4l9EEYpSKjSIxrZTrrZlYme+SipshyqAgx1YsKW63apOtUoPiikt9h/GIBS2MpjGhtBZyBVxmctFfnrLxerRQPtjI0t7DDYHJz5jEMi3xFkzu8N0YXcjhD6U6mljkp3OfTa6EEbSlo7qMPtbRYdWX34q00O5bzsKNe56y6cgnICckLOYXfuaUzNEN33wrkx25XsMuW82lHl9PanLKLdwyHZ4MIS9UxQ6XwzGBGBCjSwwMOXG0bilPdgYnrLLLjLEUz33FkFULbJECOw4uVNpjvMsVeKRp0AQPO2bENqSVZyuzDNgvLY3zrIAKwXRwYpI1LBxbmdCBug3DVQkdkoegv4Wv+Eb8gXx3v2/F761mCXZ1PFYFusJ2BaNeoDGytDy7WIkBmxp+kVNEUSE2VlQ9VMVDidERLgCi8OfyfEiDJhN85q7EXihtLe4kQoXs/Dtron4xfns6pVDlBACl4URwMWxKFC3qAzrJmyDHGW5RtLFVYXS0dhts4DxtjpRDlvSNbos0pVJtYmOB3hqt3up9TseRZ9vmRutXVUtdITGxu1np7lCHcVy4Zy1pzYrwd3RTXcqhTpGpxEgvNLi8eqIkGjMCD1KBtHQ8Y5/apTPP75HGzhcnb4fY4nppGCV+wthasZGQN0qtiyHb5cVDXkwlyKKzcvauGN0Ad/Lz53q/f7DiMe8CSasaqD7jj+EObS6C9GzgsRW4DsaZDl6InJpkrYckfYlNzjXuCaHkHZv4NRO155G4qqzdvhDYTiUJFkctha+cwHEaSbLt0Abmq2xJhES23OW6K0Shxnw7bLYgayOhV0XnstQIDssAWlGVPvIGyNMH7xvH/1aX7VFvotQgmgrB+OOJwVe0Y6XVX6tsL/hpYCa0ad96FFf7wnalke0a2SvI9Yn5JWL9U3rcQsyZNJFQifwzkouZr8n9aj/WQYd+tInTQgEcLurCSS6QvoW5sQMGrhgRdDvxJKhJ9Qk7OjaSXQSAnmtznhA5Xh+vKXbSvVDbO5x0eC0ZyrIE8NAbHBsn21qzEv+jumSYrwsRlZjMqHvMCrzYI9S6xDrpoUXgeWqxahRZA3UyxewcurJney9ZVOu67c/rghqgPBWxc+puDLyXWmW1SXrijM1wAARcATjHTCxIp4CwiBloHqmbflFJ4YjxxnLdxxoguEmrXFknt2vq1JLdPaoB/Em8VMKg/B+BEIds7Jq7aNevm4uxzeAe0uKtXw19WP1bxUcc0GDUbeJcO6daHDfJcs6ts1XygdzC9zFpsZZuNByz5Wm7XLydxQLJuRyFaXqWk6rVbSsSx9WkjdClaimEowSTyzU+fm6jK+usFc+DKQKT8VSd9UXwavDfPgt37m2hSsDFcKOd/ehV/PJibWAariDMO8F2aMqu+h6ceFqw7M13WAXJBkCbUBIdTo78K4HMb6SeGKENMQp2GNA3I5IMsxFXu9ALjtqBolkiAuMnDcKv/47JKlPXPdHQ8sd34bT1C9WIwdlqGtsESNsB9S7H9z/0EZBi94tAsxthtWkyLib21JFdK3dbU2pkc471Z4jcY29dXAARJklR68PskC7M+VwrIBIGlYw8RHQu2WdxkLs3Df+mm/sTixr26sGNjHC4yXVzX0lq2CMQCo+zB0XeVUlYleQg3KgbLtpXZiRUzXifYUurzS5bPWLlrkrvjwJIXBjc8P2BG1rtx6XeyA8Z+tjqosFqjIgIjXSO/SpqFdhkSKJ2JJmSLqXaf8m2FV9w/tbUA66KEVbRXo5mtZAa5qV0s8rcaC6FdWq3KMv6dMT5K0W/lhyVYAvp+uXjPTSVdtjdMrOqJRknb3YH7ZofZBGCNQM81UqxmpnCAMUOP7l4EIgmohgUmjiEK3Yq8QuWpToMoePmQeFM2x0mX8cEOGGxQZw7fNdVSbjyE2kkf27LmvFUw2c2u/fpxld2wfneD8jDZ23sAByvyMbWZY1LCX+mT5+uedzHRTMqZIhMoWnI+5AAaYrxNB9Q47OWXxm+zvt36qKR029Vm8yehMms75wm3oPstVSvVNJOENZhaHY0wC9A5SHLeqHyRNRFfejtFT9aimf0tP6NWX5WqCTiz9KDD81UEoNKEaB7WhsdJNJcLIo6klv5q9KxQY5/OM5DvwyG0oADbOHp3lx2g9K0HlYbtGctuKwQwDFXvAngVBZhnOxtvtF85evpOu8HA22gd4vXvhBpkIYOD+zyYntzixWR3YyZqcjCHarxvXMF/NCrUTAnRfd1wCaAwKbj64kTlwfkRbMGYUHJYozqAJ9i2Cr8NCr9wNjYvveeZKf3Aod3MM5B9v2fkh3+gGgMEUygfl8bJo5fxyWcLdY2QNajjvYFKSVBhtUzY5y57HmrVnh4zsUJmqNa/I0xH+nPQD0ipJjs9WYU2TpsOQ7YJanJlB8tfzERzkK/3YNDV23MO0k6elXr8/lQS2s3mAl50OZLZS+zpmMXKRxrNXKNCZTZ73o3YqGfdims+bQANDZgzFy90JKMRZtGIDs2V/E6V+HBCfUUoqiKGXJLfaJ4n6NNLOwYVrrFfZburyDT3wryl4sXs1IZJMLMs0COIgqvb7/NQdLvs3hZWBjNJ7VUS9iUnLFZAyD3sQOPUhtSEWa7OMaScPWeC+y7aVKXEGyIKTll/w8L0wRArMOZuic+6AOwrmoeO7c+8DJmQ1qCH4EVqus0rhqDJ3zjgfoWrY+o+3h0eysAF2S2khC8DK1EZ78FxbC7ofIU1XVEKKzIUbeY7ydqBCB5aZHZBUaL4/4hjK7eNGIev6xAfsv6/Hz9himQRU7BsztupznifngQy29gqKLfctB0ba/gIxP4E89zVS1LXtK6bG8OI4neyEc52LjPcIFwQdYgjRQ3Fklyqu7T9pEbRoiJ3M6B2fyq6jGkyG8FUogU/3uYhvh078eZ9dJymcWcIMrz7yleN+ib7zYYYmb1KGrJ2vbqTjziUWHea/XNdCxqsp0mZnClIHie2nJmuUVwB0g9wPAFzJ9NOSMx5610U45Y/Td35mj35xX60NC9pyE11Woee+6pcX3F9Uc3+rxirDFKbKamXI0czcFxu0lxfx/rpacbrz36c8XGmb1XaS7vzGe9LwCHD7xH+h+K9MKGDaE+XzuXYr/nsxOIjHEgDOTct6cha7W8teV4LGTVkHnzR48yAADd+z/83+73aCuwNv8fzUuvvLbsX5SxmbXVomIsej6J1qmU7OiDOuzyfAC7IVPO8izBUOc+5LvEEwyrPY7I7RTOFPvlyDDVCRFUYTzaqj0lE86qqLrRQFePSZ+YYvybHiB1skTeZ8qqufIUGm4gspUtnoDqAKdNxxR7h48St/F1hB+TXwZ4werZti3Xe9/vyozHLeNQmzMwL1vK0Ch/xNllnD5FZX3qUaww58u4zZUt/0kP/CHsmhdRkyu0eriR9PAshK1MKaYQT/eHtTofWNOz+q6K8WmPt+Aqdzrfv/xmsjLwVbY0aF+iRqj0vU5hiiNxJwdkGE6l/dvCou82RVOGchz9zbYlJzaUx4I14SKAT1EdIcf/R/t9kIF638mL/Tr1Fet2GO1ZC9rrHn740+aA2vEoTcoOd4rfIVx4UApHx6Wh7UBOM9c2rkGr/etE37Sv67N0i0HcmTW4OPSjhQOhvBN3btOFgFccITqbP+NY2XKEfh4n6y7SvujEuskb7Jb3MQcGo4B3OXz8c94bK7SI+RmJBiVN09U1Ynh3eHVXU/WrNq7BhAGCE9qlvH2JNTO+Onf2uXKzt0ULgk4RjvDMwhwfMUg9sDFPI6PPVazRiv9Q4iPW4enzuSzh7D1nHCxi+0+2M4vmE+k8S+LXGz2ZyWaCAPgNA1TZsnekZUGYeYnS9CTt81ACzKiSRA5cduUivHXk+Qo4za64D2K9izYYFsdQmT5ROz1KmrDHm+mzWAu23rHRLvwkcEdPQyjQ2KQIzGZNwLBtgugBtgsYsi1Atk7P9BehWe9JM4IQd2miFO0zW49G2BHrq94HW3CqGZIaGQUaQXQ3XVGXLxaHxRMHyusqp1rnaMW3kVy2roE+v06MMmEEVGMNfO9e/69XMBiyclUMVXNYR79K58sGReGRh+ZsKVQZBNLfdoJCgR1q3ZMtymzNKH6re1HuTn1NNBzrowDBa5MPV+9Guit3pIP3dl4QOQq0gQlI25aiwKmBFqgQGYNvKd+GDhVF252MeO4kK1Cz0Xw4uGW96pOaNhGd8pv7UBqWGUXagUSV6ULBu9QzjFPh+/UVdp4QD6T2bru6U+G4IY0U0TKjVzLn6uJsJc6ZaP8+fNP46aGBp1m8gp7MHkN40YJ70sPPaqTR5hK7yD5YhKS9QZfeBwIlLIPc9KkvLXryA1ko2m5o328Mr+Ox6H5v5LiZv9QjX1NeHGvCjaGwdLZp11FgL3Ww3yRu87nGTjq6KE/p7D5AGP4N+7wVc1tmGRtzY7rbHo3r898OTyPYgJShZiyIgFCFwKOFqkUbvkTzVa9wAnABe7jVqpMficvOa+WOHhdoUr6ftfo7f2qM5nyKfRxsavKcr33+YePDtS7h2YWGcR0y3AEsVKyjH/cibSeI0cLPead2KrdbOtjD/SrGBW0jS063LHFrQOImGA/khNcvrN1d43SlhJWKV638khz6LtHz+z2P0/NNyN8qUWALqX38F4EOdS+bD/3DNAvktTeXzVWjWbKy65duMI/qK+cUnLcKZeOo+v5aVjPhDVD7Fo0mKMJmgyUJt9+f4eZ5qPtUOX9xGMKUtIMhhrPkhT8NU0+jLdNDV+rh0MdgI4sB9Qbms3YfN+24axrbja3pLM/4fJxL0fqRd+qvR14JF6NxaBxzUt7mdVhrT2SVorBP4CGzuC8Amw9kWfJyiAHx5jo1iv0HQ2F55IkdNGavnhE8Z9hm4zy4nax0DJIzIuiX7ly2u1vdg5B1b4nP9261AcuaVpScexuuKZl1R6u0TEH4bpBMFV+UMPF4pHs8YOQyN6FkkvZFJat9e+0frdokZYaWVmhh/W1SxdILm1VfnL3XK+Jqc3l9mdP9uTpWidbz7sBVv4P6+ezxqj0tQpupkmy7BZD1Uq34w4JIFwgwl2CeDEvwOGaMKd4DN899eqs7ybvb5YOsDvwhW64mr7MtxGsH7uEbtKH4TmAcvA7BCNHZKQr560xjadlyg210mVOpCiofQKP6SL4OQBjVOI+sEbftdenRdBIotb/2gm/HvDbKwsFoYFX9oXpqgEhIqrvMmwGsF0RUQO/mZhegr0m5n4v2vPHTRJw3UbOJbk0D/pPzt9wqHLlZe8TQJcFH7udgxXKIofrTBM7gEHmK2UtwEuOPCxuU0ZXfxzj1AwNikV2I/crT7xtUFkze9InK4PA1D5Zcf11OnuH8dwyxhMyPHmX7bFiZwfHfYDzNOKdRROabfvWoJz+rnyrlJbVIneJG568LqvythPVwcqzKZBvvc3WetUMWiq5a79hHFH3xfiLHouk76rOjnMP4dhHKzZlrF21YFx/dJjVsfVRr6ePf5dFe84Q+QFALE2AvyyZck7209Z8re4kGgo1Ibbde94v7V6SV/ofOkBdexhJReEAGqG5xIT527H1QgmiEPyG4kJq6DxMm50gaDOMcSjFaBYpYZDMSzgsEeyrnhFeROI/3Om9Nus6lCY2cxafxYHMdttAKSNW8SPluVpwRA/ROMvY1vIOd7ZgDU0ZwsBXWFbAev8aAoW9ceGNF8HLY7AC3rpzPCicwezlLy2ZBBf3kjesn0MOm6/sAEcs0ijORp3jZKbVYNSJ15J5w59BL4k17GkZdxh9Jt7AhNpe31WK1seyh79sMn7VRNZxzB5VVLmM1zvSnPhkdiJIFX7DUnNfQG1wKph6X+m8DiVM8eXUe5Ig/eeI6i/H1mFgMUMvTK7xDa/GxaDq9wYfrAtzpTiEk9Lar1/9znlngm5frHVIDYgHx8cKf9LleNex3iw/PwVJzBH/mNWCIvbaHNxksoXX1rb0Cerd4jPJhxVAXz+X3cHmZQzIwrlSgz9SzgTmZ7LW+i5xlpliidcizaYo6ZSZkJ5tdfhJLVfcyenwDPPYzzyaiXcJPp01vf04TaOBr+taksrH0MS73Zj/aYUbZv24eitxCaM0OyTkuas3icsaGwN0GUbdY9KFVEzSLI2kfzSo1BiXpDVqzNTh9qWoWIRcFkBy0gthiP0MFJdRxYbNcoJVzlvFzcvHTsF3rnjjY6sxUI7/BX5iZMSwWLrNGNx/9hPQtXE3wmO/wkQNhsBUik1nuyg0WO+m3F5yZmXnIiG3ISN0V3eF5jzCm6fmCpO9uCmBX7JeyTz8A2W4bSP3lrfBTW3f145RlYYlBJnEV3fht3cxal7haO2jyvwZflwKkR56NMSEp/ZcQ3SveGJPjifCSo/AK4i8/QzgOvx3aGughEaYKVFEdunPFiSNhR/y3xy/xGFTDIt8kAVI5dyHmRhVimX1OnsLRu+mgT224Q4d2yUu9Sv84NOakIpbmVNp0Qt4VTQMAGhyLqOmZq7XIB+5Qb8kwukxNS9wI7h1XKsMRykc/zlJcv4FjqO1RxFDoO9AFeXJcwVajHyp5eimDzf7gNp0zDjJt7HsyY2bPrKoUPmegCp9Y4Z+7zivp0Q9ZRUqao2f/MIl1xO4KWeGF/u+raOFBAnOGRQE5V0tzq9NW0fMTWuhbEnPoFR83dq5HlalNd8bGq6msvyDzYvN+jqH+zQkDuiwkTWTIxYukITsH0X0ZxeV+hyXfm8aaQb7bgO9zT0OhXDdLXvPgBskTNjZ+uo4Gb4tqXlkQ9Q1isfmjgbxrHxnkRwgIRamslRffc7WKCRAYXj8fIelJHAwPMKwoH+04PYLtdjMVER+sYvgaT1nWfpT3OWOouCOzGJFH23ZYaHNBEWYlJS8DzG2Zvz4Zkmn6YxekXeoRoHRzWBWhII+MwMgbtvBUCX87O+ZWkX6cedvwa6lfP929otb/4vk7u+kr/B8NGYgmiFVpKeX7Zd2r4ynhRjEJE1ysFgxxhrZQjy1KLScYuB1hk9fk2FSXFNLvFpY9zJLwPjfdY6GYbH13MZQQxrUqUVV8A+DA6pE85dkmK7s61UcImaDZ5t9NbXRClXpwUpaPrD5Aa3a0z9cbo3e8yk+xo/nmlns+KQPr90P0dxRTGqI1SMUdJVgP8GHGwOl21V2xTI14IOmgy1lP6I2FGtFyJ3GOE4s04a/lfi4a5PjIxeKIvUKA+Los/wnEfbULoTMBkax5bIdr3pSUl2n3+MmT3HecqDhRiq9WabSFvSAOhRtt/9EzepYQ4PA6dZwXD6yno2ZzcE+ulacPZqODvBkk/Bhl4AmazhtUMsy9GRx1HaYkZkxWOHp7eCPXWiCubmPuOanIgOAEG97nEBNFVqyfcikbPlMS9ABgdJQHP9PEDYNwjvFombNLuIpP0HX5uCsUspmm7SGUw06qQ/GIomUMw+JhweNq/9p4pVJE3FrXT4ZSWXPXDkGixerDSsO2SLoTBEjljc79NgfHDcSDcN04243066hkaWBsoiEgiEzJyu019TWxKiPQ6AU/nfDeekLGKdgxUZcT9Q3x2eWkUO1YOHbKTFAP269s04QcWScy5MXnDUZZ1bTt/VR10ZZb9qyb9YBQEP9NKrnQI1aarJ4050gg+uanD7vlWiQCUt26m+uurfRu1E5/GiCcKVOuY2TNYqnns+Uqcg1iQn+C4vmceYk275s61WAW7FEvqrAXb+S0m1+mVoqMWpbLHojCa/pi0dAdJHDkSyEnGAOZE3MVbhs64aObX6WY0zdAAdWl5va7ja7bsY0AKUtYBOau/+l9GHnbgmFEDcOLLvo3RwtFK3G9ff96HmgTSRQ+M6/Qjd56t1y2HHidJVo8H5o7CImfTJcJ/7lZxUEQ1q7TqUmdVGRYe6e0nLRy0mW731S1OpDA9kP1jO+ne7mYdkESqNUzONvueKZyPD90GXNI2g77h0E2DZ2qGFejRGhjdMJSWBkL6p4s67WqG2BGZvEyLH0hwRUUhk5QRwkT7moKKq8Nqsdj4ycOM+mE1IbEtDcwy2VgUleT0cN/z+8ZSc4m8hHlwp7usngsCbUQBAq13837UsETge6KcxsnWqE39BUEWTwn/lcK4bOGaE1fh/VxOTKTQDyZBGVUAUvDQClAWHxjbfq0pCEQL1Hx0SJ4xce55261sBQwSkPpYj+MFf5SP1nwMGKfV730e6pHGK2+LO8V1fOmPkWCGjWG8+piR8Yv/m6ozOJSbd4GE78o/sFZdFWKs0xXsYAIbQ3TGD+1bIOx1sruPrz2611LDyrIV3QXdwQoX1waCisORkJzurc2OIhmGpk1FkX3BKZEM4oqgXVyOX2O8gtjmm1VG/lrDNgQ6LyIQp8YSaLDyf078FcuJRC1Qi9dKDEENBVdWxe1TGZTbIv3TJF8vCvJYb0rS45aPkroa7d+zyXA7xstw3eJcn++sGntVuRTB4M5CrDlIQHZDxt3vy+ORpcTSe+8VkrPv19yIqdH1Au79iWpj+D7tPBP80U1TM3wJWdcsbyIf7IcIB0/pOpemzDiv7F8tM8XM/d+4/RQx97cPkuBHV3vc//a5vksHkZUUJtehdBQFEZ56RI5cDSILCihb1way1+LwX6NvkhsC/i79ryqURhD4Bj9y164G2aDH3TBa8ebSPZNfci6mAPR03d7nbKwWy07RXptRG2+ldbfER8/sFD4ph6fOL4kgM71vnDqDZFJ9DRtDFxXd0m9ATm1EB99KAdYtzq7XNbMf64RAtmQYIHY6OMkODdUNLA5EZ2Y6AockIUTL106PEG1/nw4my52cYjr48kUNH/LwpleQPf359OhFrFAVWfRZ0qZ8aZDPIdg7qzxw1eakfTeZKucV4MFxvpNfLi1uXwRSNkWIFh0/RPnIxaXhN66B41ORe/pbihNr1OtyJMsFTVOiWoJyJD8SdVt6rethaWz/ZqwQEFRuZiRxNB3WSwPfe69AqZUzzRo/s315IL5PoVrpjK0Kc5PuFPr8BE3XokYGT35XmTtmiA48msZn8PT7cljSOrABAr7sBChU2J61aUZQi7hIgHrQusd7SsGdc8i+Sj6s1b+8fC9ESyf+plWk/WRufxRv+0Q0RopCGycZ8gGR9SaACTiAhIZ30cnkYAsce1dqD1Xu/kTEJDz+A9V9OzrH56WbDeUc97iRQCR5MYvPF0A4e7UdSkcqc6pomfP4fTB9mCRspBv6wIYx0GH7S7m9Lp+UywRC5RG6Vz6Hrv28Ym1c5DwSM1fltCPAqgmOr9qknbbfYfFpHgzWSMonq2CCrfUQU/8nSjCYSmR2GrhNhauykiqoWjyxQi+2qm0j7+RrBckivzGPo20eUei+iMcQ4lNPY8D9uWzWjeUDR485CKcygWZG16uv89oSDlVnn3ul4K6pIOG4MhQRiNVg0fpADkbB4NeqSIasrujhVQ5PI3e5W8QAuvpeykT7o2JWi6+4iWzNU+d/FzkX7PpEbM1ZYtx8qvf0nF0VFPIwA7GROT/HwWUVJl+hnA7SAwYh0sLQm3lN7suLz6IyTK3Upu3FASqDSkQW8ntoi0x2Ug6r8Dc09GlQxDXC+gAS0Y7zEv03nLcRpxJS7+waK2taCHKpmuQDqTzWyowXg34ka+GZkFq52hhk8FntMtNFr/WY0lGkd2Uq2M+FU+OBBNcOYdFQxz81BB8EaZ7wQoE6pImxeaMNsBHonontLGXlV4Xd9XAi3tUQaf/9sTxkaVqZM9oPg8l4WDV2+N3gsU1Pdnvg7SiP6vLafD/RnC6dxITCM6MHKdgjT0+Svtb3YP3tidmb87AGMT9WyShMWsE5G0EWmjTQ6TswJNr9dUYU7gYXrUEWRRrhZlWpygYwhrEg4ZrlNIqjp4PHd412faRMVdK+sjtG8YiZfeSRH7VyGo1w8hkt7XsAktIKcFqzLRGfVjTRu37ohTpG/P/bNDSfsN/GwzqnUfIrKZ98PY7b8a14kQN6Z5Hn9VE+P/THrvEORdpagmoG+6tzP5X5HhRSV53GAK15BYUMDw+fKOYgdESxHBuLfFSsjS0v/eZxPxkInrksNzPzs8gb1yTUnKvYduFHOnQCxkZxzCs3fBVi1qcHAkvSdyeeM8kY8LzmHwNIfv8tne6zQPy7v/Lu5znIUlL0po0aHdum/W11j/Mqtj6fFK2vJ10mZ/nuyQxIA9CnN2bFKDWLExq846zRssbLVqt1YswXukX6F0rwLLOiCHB+Qf25ksQugag++6d6yLYN/VtWu6TSQR5QjGnOVyble5L3XLaPTYBQ0A0/rmd8k7x7gdA4toGq4UDZGYkziCNOr62tIXP46eoMsjQi2Epw6c68YN5PAjrUAnY2dwhkvbRh3DCtC4HGiVyZFZxHfXIABYENe78eRVPb6Hzj7c9k4YMCJ543RS/WzSPNfhJZaq0I2kHnrr23aHGSF0ac3BpLnMJVr7K0T028FA9ms8Pp717VBFKH6j2nPXSnMHbEYVdfWR8l5DdFeL5ym21jVsFiuNve40H+Glknu7hkaMaNhESzjGsT9rBSExmxRJUi7VhFZDvEh8ZKMxh5v+RnJQBflSC76Pd0plp1MAcRGvv0UjNeZcPsgbleRWyoA7tuOIWlQfEXINce1auQl7wQ/A+Wwp40LPREHyDet6B1bCl76s85vD5yMLd6CawxXGZEB4s9BGw/kb3jMmC+rrs/F0a5/Cuy99TdKkmZAO9Gq5sgTPNOCouUKkDuU+34GCQmzAWdbALXf6cZifsFFKUmUmAMuyAYUi4EDWTQO6PwRFspJFiQBZH1u60xQ9DiroJcIStVeaqXlps1tr5I6nbvRWToZsBZn6D8zobRuzYRRKy/2yLr4r0Jg6eMyNHEy0+SvIPnmWiyNXfgRuGus7MiFzsH7PgRzT7j56o5Ywz62l6J8zYbO/wffjmXQDP8lUmfVrQq9M3K1fS8trPRTNT2cjlXsyByUUQp3Fzuepg0WcRpnNUJ7e7snZNRO8eBnNtIA7dKI2dGikM0qVIKBDYZw8LuwhXd0Xrvu/AcYATldO2q+TbVN4nG86JJiCMu0+Zkz/9qGUQXuyZb0K4J8rNB/YVlPij/z78FVdxQJUNQfkDI26BDTtUaw+R54VsV1yHeDHliuN4zpnoAzkWfK6NCBGjiG2Nqa0z7FTJ0dk5UivMCqP046k4WXhozFwSlYBZiPpv8yV6VAbMNSC+dn+LTM7MdbxTit8/owb732KVHYW06ASYdu9YjOh+WPwi1i/mXfRiC5PavE35th6+Xr78qi3+tO/Ev+MPv5YN8YCJxF4iLze4LjNZuqxxT9JR/JPJ9e/OQHvhuB2vOMWpqZfrXbfal+C3wcylwRMz1t+b40VRmdZZv4Gj77nXQ1EVGRyN1glniHmIMGOgePN2lNUdmplZsd7GuUctLnlKaFqwf3tShe32m0LZ0Id1NbUUk0iPX8/X8wXn8cLM3AH2H+t/XxS+fI6ids9IBhEyQSzDhxLToTvmcVpz+85JzrFmK15iihFa//BWphCjwHdZCgtM+Q23jJ8wTvSLW1M5hXMV8NgR9XRb/TeWWuCfRicAgjODshkWVndDnRE7DL9ULJFJVXmLifWpr8q/hkHgGKmI8n2oE/Vgvtdxu60mhAyUCfWVQ/dRLwlSAoqgppPOnpAec64TlUfL08Mh3Txn4i+bQtklxv3lplirgzR3p437ZVYeM42F1TwljmlNJ7c6/iLxnyyy4X25lIq52yB5RAOXLglKhNxZHYF7fPYofPGqdDR2BsaGMjGwhI4GJ79l4JoKeb8hGwIVwQXxriNX5KuX+3U5N1i9PyBNBm7BtohwVetg7DKaiy14X+IFw6f/o9/rz9Vs4BZhRJC9XECao71Hpjp5owdZiiwwYPcj/GEjgNMEKnHE1n7iXriq+5wsjUCD82d1yW+J4/Rb7d6aW2PwQJ9QyGDfb90qNDonUcUpKwEpvRvHx9mNoBltC+7AOIFxsZpaOMlcDSTBZaUY2pMaz/yUsoq8QzrtL0dKkkcPhYr1t2caioror4PFdHR0RomgB071bKeCHX6KJAFQ9ZNeRarY6sjbJbt5gSShjwo9SBkwsQGrPoisZ6ybfNjJHz+7N2967NfmbZSqYFzeolMwmoErq5zPZvt+IzXSEnijNghF9TtegUdrzDgMK2BKVOXot54p84Ca47qp17jdbGclkjhxjYS1hqLVbaNBYAYn4gJoTFdyWwr5GhTlNFtjs0KQNWEWrsYalEtxyglftoF0zuiz/mwPndrpOD0wvaNYNcJePjZA70mh74otz2mKWF1Y57j46NdoSortGt8WtAwa9Z7AVg6acCYKMnd6flbjdV0N2gj2rV4R3dcAQSQhlzZ+0KbwmPW9Tp/pmVzGdDDHNaEsNAgHRkkrobIkymu8sFok4x4KgSAneP7rtIHfOuwxSpGfPnZXLRFQRUjVEPJzqNPaSCEfj6ZMhsNtKMVSTuDB5dO3ddLWkjT3+Z+UnIdWSSF4t7vUQAQUzttubCZNHMwYE/pbROdwJ2eoqwbf5yScpdLX0F19uqrsLU546KPiyd1874HqCjcHseJ/RxENvUt+62ReOwvlDv0AS9IJAXp/+86iqncr+l1Bb/nSXTp0qXi+cmniUuhEr0RB19Gzpw2N0Tbek8NwVX33IJQDEN/iS3c5G/eEZuYfISGaS7lYwnnG0gcBkQdqQe82vUYjYQyk6EhQ7V9zN67EG+tXecGWTbq8UlAU0pmAIerP1JUy2BUQoJTox66oOQpHlL0X8It2iTQthMdhRraMintrM4CJp7G/x/eFM3b/RwkLZt9xa0etGM7uhouaOSeH/wW2CFQhmk4HZkDCjPNomFE4v9p7kVntFJOcrhFwFUHwIbuQ2QKqIX7wg5g3dOnu27VvClK4tgAVuEKLArl8k7CvVVMESpW0dWE5ThnJUHEgtqTDhdGjWlPDvoV8wtfYyQSrMiBQhoX4pQHnWqDz+3MQUSK0O8LDrhaHm/7Kl2SAdwS8J4Xs8Ja5tb31P7Lwyvpnqjt5p3D7+AognGrY22emInIzctJamiCcxX9Ym0cMtaqGHcUYxMSFrMI+fAT9/gUeu3w6PjndY6/U6lBc+J16Xf9oDYmV6Loen5mQo3pu95NBrKgPXsEKHbZJHjjdmTarCbw+aB8XMsmaCghA3mlLyFjhmu7zhBF7Pq6kmYc0VVvVUvG2wEZ4aKoCBwObdOoC6pRyUXdMYcABtMPwG0+1hEnxTnE0JW1mxBQOJtHmyFv71tc77urxDvvKZCN+AuwmpUa6lN2qShoA1HM00NaxpAhC5D3Y4sYIatbEIAWGyxOTzs28+OVhiWNJJf6TYq+lOn6U/QJIWIxtqzgic00iQo1rZFtowdD09Ziy+urCoN9X92O/UZwxaZz6HH56HgYrIojR5TL3GjKWm5PVat7SAfHEBQrNXkb4EdYlA3bSzjJ1yQu2C9m0ojQm67FTsLT122HuF2IzKn135WK1pwHq9pGhQmAcrhk5OdA7gUKh7YMn3cfOTYqhS579If02lEd0hAthMzdWlVA5C+2PjkdUKckmkyiXWUpEACjevfxT3T4zscNT2+iI5BXk4EaxABesMq0Jiby6w5bdf0Qk26LOtEldNGDuuw/Q9bMJqWFX2OHN5+XITGOENJ94WA+AA91fTuMw6PWZ0SGZAEW9iNDGwP3ksYzRPhGWWRXO4v/fsfSyEPj5g2nOXCFFGfkTsiH1JwyXtfruUMWIeCUMezefF7gqWb1VrVtkjXX53mM5BGDKcstn0Z2kzuMjFJfPWRARCINVJsAqZUFBWW8LH06a6LG9lxMsa7NIVMNEz/Z3WVBxyakmueJ51EYvYzGj67JlHkvjGJFahLqeqGns/y5Z/6sMVZtzRfmMyIiM695GRfvuoNGUj1x1eIeKKqq/de9emgNTr1PgExXAvJH5YpeAlCT7aU0WOFkfYVhOjhMPL7vkB9KLyr72jqs3OTN8GiIamXz2EguFAmyDrd6hD28uUO/MPEBv6DouhlkI+U521+wOvqyCLmDbslTzwaJbb/Zts8RNZg9dZPMBZax8jCqVczn7nT0381jADw2xovHcJ815BZmqmHtWk1scdAmuaLm4tbGSSaUuCIUyozf5/+uXPFr0w2pN+RlNq1S+f7/YvnVXqyFRs8cmjDJilqhhgp9i7TjyjnyKrMtjGHm3cKsKCvzjlRKGBY6W4sMmGUdxjdxMr1yoTTB6AFBj8Frxbe+gFiSwBl0aZU8qkum512ELqu45g8x5DlQp+6Q/ACi9xkAMvbGg0hJWkxlaCq1NR7EyAYatbjPaJy/1pqBkWO2Xr73WX6FEDrNAzCNWzZNaIMSVa7XPD114R6i6U3UrQoBcG/YGdYXVonvDh0ksR2O1epI/toCbC80CgwEd3esLVNqDuqXDuZNr+FB9Cy1v15vclewKUJ1bP/6yZ0yy/+3QFp8KRcaucSYJKceka0s9347KzoW/MAqtAEUaIhUAGWoEuM2Yn3KqcphY/mhibCBf/KQvazWEqUCd94t0rJe+N7TXs2eMX0+zQT/LQ24w5jW/OEJkEVSSHmXzjtEuvyVoWA6n85rLhB8CdH4cQgKwkcMdW5KifhQVaD4YQnagUdb77a36WPYKiQ76z4EXJ9rrYg6yahsay1UuHJHxRze5t59IzNcjPCgd0J8l+mRtpsW/NpowiJnHUy+3mdpRloLr+f3p2QMLEa4xBjS9p6VkhLGlqz5iXWk774HzoOTcpFIdnknTSVrQpGOGJE81pCI0ZH4FTuGDV039vUa0S/lSm0Aaz3UOr445a1e7RHFYoMe8iiFlRPfmSQvFB0OS3ZRSHNgsQeuR6s7wcEJaueCkQqFVW71w1gv5nKi2Ni7QuXW11qXjnmFo5bZVKWjsqEDL74iF4pBtFiPDU4Wq8Zi+MCl99kY66rr+ngxmG7YjfXbD0YG7nabyygdmrJ+YXNx981ZL0U6+DHWs+/cCye6TBa+7iY1CYPqLQ5RZbmj1Iql+CzhBB5U4wc49xBIViCObLhKzUbXjgg9Hqyg9PFnWZ12Ybte2y0uW/GZsPZvp+MGuY/gTejhHRm62RuiTRBdMgwN8JbwoNzaGPgbQUXu7PEsMuuWPiXHSdKBPUVN/XWvozXwkZ8lenRJmFt7R0EnvfKo/eFsk1Tml1dQ3HnyzfFXrqOlibqc+q+iDfU6EdoCVV1g1NUwYqwbOW3+SB4tQaOYGcZ0F6WG8rIoqSGjOCQVHNFgQ7Lx1dAsNnWUoazvVS50VNQZ5cBxODnu0LbKkw3xZAKtbzTDcedvn36+qf3XusQNGFkWuwNQoaUkAbfiBpcVnmkOur1bq3c+XSLVAvYFA4lQVuQHj0w4iLvRr87ct9FUfKBnTXOJxtM7VFp5+tUznatBxnzs94wJE0PEWAyA7BKutNzp2O/JLy7XrSe+AOoMe7GVDdbHIVcsXLwvqyJBkG4LNGZr4luUQRa0FCIU70a3ALqlQBCjvkyHgRG1rOdbLSjjmCyuBAiQkgh08gNQMDdK7NS3QYvWtl4FEEWPVXzfDKZVWfTfj7eSaUrV1HhysCMDBwUhX93za0fa0k+OJ636MRJBKnr6dnHlQkfa+Xdedy079kkuVTb9c3r9/RjduJWWAaPfkJZ/c6rQFxBpTBU/BMLipRqNayHWIkp/wRmAqahhMxy1mtLaS29vEGP7WAVPp2Nw3a+HzGKcPNdxXMysMuA8gJokvBEO/9Z6XMtk9Gn5pyynXJ5SbDGOVNG1NY9txdepgtzsKTGe5gV41uB2PQyCHr0LQzVLZ2LHhYLEy3oBNBIclxqHFQ5Tymmd+ixbj+9YaqkmM/No+ZZfZq7VbFyQFH14eQsj+5fOaRb6dp/SoKzIb0wK/xXQ6momPKW3sq0Uxk0RzUAgdCQeSO1W10p19knv7r7QgSZ+q30sOkLlhq/TY9CIanaRn18ntfLs+cbEBuFH5hQx6j1UAgJGxjUz17Ap5zWGhf250/7a98vrt6ll21dNxj9ssNPyRNn7H0zAukpSl0b++1PZImaBd3XN3967Z1iDOVuAfK9OeXJ1qfcsv4APBd5/qcFkW6hyi6VORI729FVujn/8JkAQkWdXO4KRTgy6hduPTljZDCTaJt04X6VbDVg3ZvUD8iSHWfSlAdRqCy7s4Q3FKWp+DcFxVKNairuAhc4hs0VBpRBCzU6yEXxNNZcWbu9g+Oqm0OYtsFipBJni+sASMqbjpzqJatCwlqlWi2c3FG99/BYI9ap/MFU/3y1XooLjln3Tm8CawfumuNqzh5bkVjW3H9sGKafJHhke/rgFsOyIvYn5iV+DHnLkMobT4Pb0Y4MuefcvfLjAI4YG+6TtL0Adv1t118qa7SEZEt3JFRzI7KvblR7kNZ0QGFB8yIMJrhkfJZmTl1DyCe77PkbrupD9Zh1BvSe49gXcXkcEVCeLauDvnQ9Eul7glA1dsHg3tZ5T3zuvlnm5yVM3fwKVwT+8Qsuwz66kezEOQTd4/j3fFSn6g1KLfG8vQOWOKMMWYcjj/ggVWUM0olUzSbcUp4S6knc16DFf5S0X2cgoVbjY6grTtxsmDg6sZNHBKQ4B9jwGtw5LYWtWnCWcpcaUfGsODE5vXLoyJxgDN/9DMFZxtlPBm7a+4mxH4w3Pgw2FmXKm6Xif0Ip6WEnqHf76pMaNVsfEoDEpYqkJoowkhB1bGknEZzeKZw3mrRExWLLCRtlws0eOYw98UtRM0UTrymwu4S0aC0BfzHLXFe2QGsieHFWpd4GLTFMv7GKLB4Ps+DXEKtPDdT5pstmE6rlEtDP/3FN9aWt5Iltpt0KrdtU2PdqzmocArbxe+6rJoeFg/TGkr999J1UyWeWGNRg82NQTT8aeI+ttKif9CQ4IeIMHOIRvLLSk0Yh+GK1f9i2L36NiBL1Q+wW7oPkt/k+R/gX6PamP5yckKdNFgCi+TZ2TN2p+Ryoztyd1rR8Dod89vw9Qx2ZMKyDYrA0yaPd32I2ACtjGp/Zt1oL9FFpHlDjRj1vlTUfrNSXraatH97iYApwKoG8a0WaQrdvT7ZxedViYQhZndmP/H6+WzdL8y2X4sUIXKsWKfPARh/L16iYJJPeEPWZeg3vzippEL1t8iREYJofZae4dVyZ4Br3pv77JPgsa00RutJdL3ms7J8O05VuHkF2GM6McrQBwF7LwoxBR3TFC/AQffLypinYYGIV3IODT9zxx3JoOe7vLVbFkEkBzgHyD/h3TYHe6S2uDbxSwtBIo1Ltp7X1REggGme5Du70Q7oDLjvmNi3z19xMcCJGt+RwJAW37u/rFI2qSiMBOUUuPKGzJVfRzpyPKJTc3W/tIOlvcxEe41lWwk0ZoRrf2L4sMO0AcI+J4K6lCn7VBKBSRX2LCsv1wZ0McjmTsFCD/sxB+Ji9QUKQ/MluuayoXd2lonrrODkxxZSwHoU1B17uBPLQGHoMlsEqWIF/nQFVUsusj9APoDDnfLWQ5aEEzVMBuVeab66FJsYQts3Fms4hENkv2RQD9LJexZRSDxyL1d9eVeHZAa4kCWG8eRP8mYMUD1Tcu6hFKnIu55+Cv5Zn89RKj92zLZXKgskymeWcxcQMk60IRZJxGH6Z3RFceWyiL9xd7UDOSF3GdShxo29I1TPgQiSHigMswiWhDTz1Xk6mP3EePeQG+PtqBZ8QEeeNO6Cj5TV9TQiFoVzDcui5mf846RnNM49g0P5fXvmCscKxMPtuVzPbTseGEjKTtfKQi3Bs8+K83J35guhGSM1Qk5QvHwVfUcgbmA/yw8tGg4otwBAruVLsbJd9T8LzatH8I9QgiFjevTldFi5lziA46NJC24MjWxtELWfMSUZIm24QAOVOyHZfLJxPFi5TlLtKNmiiuJbHatWc1KPoho/3t7B+rQ5KCv7Y3KcUmrXcuLf1MGtkuUb7ZXhpr2hA6t1ekShkU99FPLYGLMsz64ACUI+KfhmEBDZx/5UV2E30XE55vT7uY/oq3VfXAj4CjQzfgonJgLxE+gaNVNRVTUmBjd0zMpVHbcpH83H/sgunQBEXOplGcn2y+8mpi78p3rUAGI399VKenn8VQ3a10kd0pSAhu4+LzIn+NqFjlbm90kydN9m6KGe2wF98H+829jVYteAdDVTCm9sVTdUoRkmtKsM6vxZrR0rTGO5XL6AmZWNoPPGTIitikjZ6ymyerOdaPbX4kANz46kY5wi5BYyonWMwZeo4hrSdeHKZWJWtkq8icpGJ3U3mvTXJ+xtP0TKw53Mru11k/HdCWI5f865pFc/7Y2+3LRGJ/v6EhX31wH1ftXGR0gQ0iFxgaj3wET1HQU8qeTCmaMKKn8fgDOn68SNxNOKmkFha5TP6YpXX3cUycvsm1enR3dRU8rDyPeH/+KVSuVJKra6Hlkm8qyNYhgwoJSjI7K8HXrKahei6dPKleIzzPYqZBWLvCR5nTG/CJ3CJrSWNaz9RybFscNKbeC/Bt7cqMsf6J4SU/ARs+Nz2c3y7SdjVfvqa9q9HcWtwUp610tlqipmHmD56PZvrAqa+Fb73RuEdbvBpexwhEKbGKKS7BbF34reLA//5NXedDdH19pC3GRr2/qoFyqooK2p/XZunFiDkAv1iT9XL9k5tkQKSYBDAhGUHPtHS1HzjIK0xk/FlXgAZEizTgudVp1afjALbsrtEmwAZogrRb0dJl8TO1QZbbb3H6iXnzoOMFv/gE2i2bzm5DpOQ2vP9JGk/rxlcZB7JPgg6R5hNHCrpIgYvIEg4tYXk3LLoUpqcrTUYe7dVMAyle+jgRqpIlSmQ0nJ6YbCYUW+o7lgyhvfWMQtI2pQKASjx+/ki4e3ysjtYHTwZWrgNFRv2WCxbDa5npYl0nY2kbU2D25zrig88MOG0+K3DvV0n1UXflObhilUFE1BTHHNFsIkyvAbafnGmCljAdieWLhWh4YmbOaqi9lxj0fQnDmPw9UPmhKt2FUxaqTW0rAAGDPdso3GOllLGvuBo6EBYYrvThP4NToWI3n97dRrXt84A7q52H9AX2OnkxRTL/kXRI+1+itz1l03HFKYJXXOeE4WhTExEkyOcpR0XQIV/Nbp4iFse0LZcGmOQOg1+hO4ZkmvVMr+4FovREOcLBc2G6dOpCQsg9m2yh7yT9/3r/lkFUmv1PEcH1OuZ/DSRdRPwlTH8CcXmEyMkuZ84qYKCpay1A87IVQDC81X8ul7PlFFqd3pAiAiNkjVESx5wRZ76Gu9n+rZeL+hupCmlODY72N2O5xFE47DKjGaY8xnGFzGlaYbmoW3O739102vur1GhTNwoCloDFJjFd4VqjLRu1C/KqD1yzktRhOaNjtY6O6fNJNnWDPI8f7Cv4g4f0Zt19tU5qBAT8qaHZNgfQWGduAOsUUSCrRa/nlpcidIpykiJeaiRMchxMDKl48GNLDqFUrsKjThdP68Ki9SPZ1kghs3+Qm1WZmXq3jS6k15zHSTKE7FeDhmHWJg9eramcpCz5SNrytWrW55aGV0xwoHuBLaaTsP051ApTBkd2LbppZk7eR1glLnnLmnqwdUMlD2diYLbBmOIugk43tm1gYnu6Hj7HyZj683xfIV78pnKCfChUIRj3j+hL3OoladCoq4mTlxQngeNAOrfB2CWVbwarHWl5CUozlzjJMvb0v4dFO94gzBqPrRDcuNH/FNJk6ZGl62PM636txclk/uak2VEEBnPQfHqMopj9mB9VPCQ/DKwPhchqyF8KDTtfTBH+g5OVrSMxwtPO0yjNTIkShdMvEFkkcclqOm2dB8zyN3ZdCtu3r9DMoHiTrR/yj8x3AAaMWMc20i/BYlGpTkzhybHuxRJ2d19MyRsm2TLGiddYgI8H1Jg0BzaooihoQpIObWhtMZrGjkR+mw7+MNRKeXNBFk9AcyfFD3nntnxf0+ckmHlYtIf7FWZhTUvpsk5ktUVct9zWL9XyjeBE3JsQrjRmgbspxlYVNlA7fshKS9F9Vk5ElxK+BVGATtMAssE3KdnbpOWY0tA1doQaHJOAHLXQu5kNzvoOp3FfnsxgU55QBbxbOm0QDPAhGJ9stD8Rg4usDJ1fq7yjK3NsXFWbooMk8AhcIJcCjL/aZMxKQQqxWNXIORjyYnd76ZiXVqLR5sCwzRGe9zLm4m/qr7KbngNsTGmdIEqx+vuqNjdOAnlGrIf00pXa35pUNHoJAXJYQ44qB+ikybW0/xUCZFYHafXcjB+UE9H+UocKT52HRnmKXqaW1JNI+Wbz8IZDSZJiyqn7+r/Y9LFQS7RCI6FvPvaF+GE2z2h5kvVxba7KbcPj5JB4fBHJ0EtQ0ZH/NbzqFdNZTwqlMvPMDAWHNpEMNbK+bNjeMIZ5XjhpRoNmPX4PJsLCwQ0v9Ro2UiVH4C2rdkflEftEyy6GZcCN00URSqbYgmEAcI8uz2dLqrveZv+p6/7nxAYcytWRYGXThoig9MGGCqTQtShNphbdo1wXIzJ45gIijdREm2hkftTN1df7Yce/ZAZs0UpV6PzxdyntuEl4uuV7v7tu1UzYwV4wo9yzl5za4jrk3rTtZPqGouYNGOl+i938Bf3PGCQgy9r91Qq3mG3Oy2X15Ll5CWrlh2JKEpwk0Qwr4FZ3h/odCFvRrkj6vhQ3IeKOC7WEeKLIaRh20tO4wi0FPvqX/gCC/8/JecH5MCaFWpoZxrBWyLD35/tqjdPnNWzAPMCEyrQFI87js1pB3YfEPB3CZdJay5bfdCrYrPp5TkYhNqetL34Orl959kvo4EERD//yzuo4MjP5dA2e2ejRMhT7jESy/+71MG3JFofeXfx6SpjSeSz8kfejYFp5vaOQ7eg3nMUxLUMrGWYnkAoqykQ23Wu/uj5pDdWGri7dERQ/3VdxgexSaSaqHrHG5h9nr1gNgxp+vcv/zjdd6ECdSOihrYq7ZYQ7ePHJKJ1WknPAufJ4cbL5/GhW+u6cePGvXwEby5ZNImMnqV/xEUKP0KBP9LzxQLdu9CSRGClyL0fOZ3Erb/VzGEe7j+CtYTO3XPj2xZlUIy2bkzrzlN1b98rGqToYxzLtF9HtGnNzNIav9x8dc/NfTxhGqhhaorb4GqOL0tG2bSPh7yPXmRuPdxSInsSIfPaXhxw2QLi3TYHYj8O4O+dAB9zFps/l2BAXsvgp4evRSdvdgyyuBpppLO/iFjkCCWxYOJLp+mbT3Wso4wygXMzuqhkBQaUT/uPgSD2/dNl0+W7YKBowuhVmfMc3Z0TCCAMredFjw9GPXb+BdV3oe9giXjSuMiV0H2u2OdL+A/LoANwW6xXbX9e3b39f57kagUMKoXgM0AkLMK16OW5lNflHDOs2QIeWSu3MzQQwpjNxhFitCq+Sjrlxwx9fPPo3mpx7UlbYs8Ed5KN6LaIs8kIpP+I+GEz47oDenR7+j9MJR2kA9ggt78cTjRrGdXmQ8YCXwLq+W/y7ZWYmKnE8uN7m1sWRDMzv6LQJCT9Q1jycSVntf1wE2/6hvmLQ3cf7wIrmg3fALmH//KS3LPj3pdGh3qGmnuDAaI2KWwugMo0tSqEky+RV1MsfyFllCDjZvY/XyvYHaRWHtA/bSs1UQmgXSJFCVUn60nfQSMlgo9iFBMEv1GtjnsOdW22Ou6Zz/7S+oNVa+Om/dZuel8HpF4vMbw/TBl/AbS1fTjOFX62cNY/LraBaUD4BkSa+32othP7Wr8BwCFep1a1vWkuNpVT/1WLMmFiwYci+Hsc98k6mCKDYIQUOwMQmJDVOwf1TX9JR2QTqqc6uI962N+lLQZmcFtmf0REEHFm3rg/icQIJNPm551T6lC/1vU0ixN22ds9QE/ePvG1H8nOqzXo1l5Fixbb0ru+zmh7sXlslv+zgr5jbKm6F2WkahWjuT/BaSKLjBFOrm3PDhXT5k4O2L2BU6taqKvdiSSbyZzKglwMhBqG5gyIXAkpy0HoevD9fgYPuV7VCvFxW/+J3F8IDCvR/ANOK8RlN6ag6SK/+VsUL/UynntIXUtjLs80H3Itrh+jHjc9Y6Illk2QTOPA29m7dwRpz82F4s0e1er/5t4LT/Sp9IOdPMnpg3NUKJRpWrKuQhF4Wi9bmXdS4MuyuhPpItzqBlwIx2Wb7ESWkhKSma5qnv4h9Z4W/Gtu1juwyVB2tdwZKUpx5gqqGUxcO63VyO+SNR9cu4o3lgXjobxitPl6/G0uVM1Fk7eOKF6QvYiDRwXl5vJdtfzuTufj771XWStxRjZ5wlbVypiJv9j/4DUyo2k3t1hDJIuYshwLpUdE1MZ9rfC/siwuoi04wUHWoPfGNw/gBtdlXafcyzFOd33a/S+hOAVp54y3/WGe1lVupGDCxs6N2Hl9hAesFp2wA28NvORsedjm4k6UhkEs52nz1lXqeBxBlmf+ZNTRReKkAaWJg9SGob5rGCepiMw3LGn3Tv5Q2gyqI01MoXE6HrIAPTFDPiZpYRgy44U3RzQ/3eFrQcbZxqcLRfiXS1lY+CoyGF1LpmY1HIOU39zBeETwTXHeG4WUGO9wK2FHMqY6bodjZZXPFh03qgJRIsV/mYke2QyiR+ZsfnMgu7yHBAHLPdXC0JzN6AYeoltwHTmbzv2B4s47O59vjJ1BriC1T1Jl/T5p/OEMkQecXl5Vtjt5OQ7etBjZkUymimLMwiIKdsY+duLi53J3j6VCG8bgntwnE/4ZtXnO2OZD+f2FyZmTbpOrsQ7rg6WgFRr4nA+igOYWAGJZCIzsxUFlfbIgY1YLvmoG7hznTAkvLoRNHjRnQkB2vVLk89ZR6IisoTSsxZnyakZSMAGl0BwBILQdZn6m8tELGwAIRug1VWKdfn+ZidZmhZKTOdN8vguSJcdBBvGldN5u8sWqPPSpkyNR6trZeriYK3VzEBgq1uEX30DqEbmvmpzdvmUPHDyVjajiTuc11c0ZS/ZWcBwp3vKyeJbABQ2tf1GGbhFEks4YAKaijtg3VsjT1lRsAHR0vwCEcgGscnysY207eYblx8k3694pEtv6aib6TyaEtCYDLjG+K40WfIojuhyQvuqLqJzVJ3C9zzoIE20TCXxw29jkpWDTv1m4Cx5VEu4wYuZujQrFKbJroa4LYD7uDDrkmxoAyHT1bwZRRRlxkowQpFzadhPqMiWJoSt4ND7raYOG6Gub8+nATZswB+jS51zj8RjCMVZ4pO4xkaPt8zU7lBGQhYZMUm0BaBqvuPTPtynPrc1OgGtcsGMrOCZxG1SH4TNVJTVgy1TMhjCS13F66ytK/Q7IIPXe1ZUtI/yljID6ptGiyxR5yb1Upr6UaZd7QsYjMUrosJpEvNDtnrSEDRwFQz8XPhR3kavrFTq/WTcJF3dYMyM/hoR3o+k98N/mtcAtPC610geo9CKKntbqGu3wQmw19K9VlaV2e/pQjPUaTej7O1TF560XfbtH3CArySUYGb/D6JEBiruPk7z8EwXUr7py3Es8xum5mjhTz+KtDVNFjRvh1fmeFyPV62wzFadh/v7u0V9Pf0gS9nOSWImAMOgP+lwjXnsbQ2dpNFAod5Hd7a4uJE/1vJ4e+7JNKOyfzJ+AM4vqV5hoi7Zl29yWY9ydTn0MLDd7x4DYmQ+sWipPSs2ilGTpffmHToY2Q+FKsUMhEX7Xh0y247tkD2wEM16U+dISX0p/AxUrTNH/bNy8TyHaW3kW3IhrPtZ/rjX2h83v8avwqxx5kcvAYEIvnq3IrwE0g3yawXssIydSwOykb/S5vGfbXdF8Knabh22H/QMZ3yCjcC5SvbBbHGfWqvrxHqAEd1uDzHVneuPp2vhC5pi8ytxbl/oSGCJaXYLhPQxoCYTu5h8tFbWGA+4Fx4fTgTWGLy4BGZN1KR5HOVfZUKUzjroIpALW5ltadHRdNvsMo70YlwSk/qW+u+1ywPiDxRkPQ2pZdT0ES9Fl46oygqMzjEYsCkBELZ/3k3ieRRH1E3BL8okhfz/qRkKJOLS0q7Wy8y/IytHEhT0aZF3u4dbnuHYPlDshSraIzhPOwr5SAu1JHOcXJ/GCaAl8SEqpecc63nWj8HvW2IeiNwHaR4bOc5FX7wFNVQz9w2wcDq8kBwgkkepSuFNcI2LeMNAbIUJTTnDm4skylvEKdy/PxIeO2D++pzTm6ktH/OmCWEbPd1n1yJmHIE4NmhWg++YD1/gYBBfPSov0+YiWuu4DUnmNqO/TfZygPV2P6XgRj9dqw/tZY0EzE2NnSoix65Y7nvsSO27hReQO9ZA7mTZ2J8zFtuChZhMUnQnwwI59gPvxZ4GBw+GOi31ubmMZp0C8yeQKfdzv9Obrq3aMofZvqpLZPHINEMjqBNQAa7YEep7caim4K710v8SRBUF2zumphLqIcLrv93Wq5+77F8J6Q9nJSkbHqjNeJe6UGCXbQVTN0PZDLs5mkxuxzhWSh9CJ0eJmLw509jBcOdqqI6LIfKvz/WqCJuMeR3zLZIbB5e3BcJDlVEuSVvPKVnf4qolkLDisZhe0Rpgl0p21j5TKC8pWsP9UFl9SSbj6c8aIdhNvZR5gVqYyyYCbTyG0mt62fxcn0cATEg1xzgGz4jpuAOlgYcfQ5peRDiT4sdoOE/gXqZ02B2RYEJdIiqldcu+pAiYfrLyLQEpmjD3lQ9qFHtskaFq2Uj9RLOM2Ml/x6QDQMyej5mpo0GDUgYDxIoxp0ZBrHWkU/2ZOyjwlC5FsnMsxXdm1zaxLEOpy3rFM7RFZ/J3aX7XC+yxr4YWlo5D8tQRmbh1JvEas/RWmBrSrlY+p51NOBphRnV98x1ssQphbYeD5bRjBGHFlzNKM/Nih3k/Bc3msPnI4l+V9BPB41r168qq6D/SghqMP9lnjQzQJoEG4BiRv5kaD6fmXEcIJGqs6SdB6NBAxxrQQBkVh7e6I0UR8rHwc92zwdYyjzaZowJh80g3C0YawYIB3NeZ+8sZ2NBrnivgONP67w8+2sA9nzCNsEjJNWCw/hPWIBLYQtz20EH50/pxQlXWVA1pOn+aBQTvo16WFZARa1CIYkMkFmALj/DMI9GsY+Zwm8hWqQynqPWxSBafgRZY3y/2Dsi99aLduCS1CJQceqVWEodp5zsri9GbnH3l7/U3C1Pxjw2KQIMWkrY3/7J1lE+IjDZmHdpQtbPTvunoBCqxVUurtFSP6rFUAYKacAz85H3Dh5wsDVjbLRhFyhW2UAynSVJCkfEHtfOzIqgm+YPbgX84nPfpQlbHWZoQnHibOBH/zT4dlZ5IuBjjXcd+J5t4QL/7q9iJIvkZISu8lvoAKfssdbHCuCJA1ZUH2wKyS1uUELx2zNZlk5ASj6+ku6yO9qVzaM4NPFo+/FWiwHRdWex0jE0TarGIgm83vgegmIxF4y9QD+8TXWa/nyQ/F2FuLFGXIVExVbbjhqJgDZYiJTnw8DwfUqNxLCDT7KbuzthL3tUIxS9qs9dCAZ9zFx+ExH0n4+rmOz6WC84JOQOeZB0Mady1JxA2ce3hRdSU6WHtH+nXwhg3frjWjHlx1ZviBA4wb25CrYooFM66eXemmUj2aewU+JMAjXsch/Dt0sp9s9wJYtMiPfRQ9doA/aytj0pWViuM/gfroFVLuWj7G2a/JCWSBMaHAoYou/9fj3etp6b+Vx6sTzUkftiyq0+p6ScgXQMCnbEh5C52z0UF8S5/W49it/gt0GoLsG8ARCkqJeZ5b2if1pYU06ZBYrBcFu+izuGwO0HUKA6E68i7XsHjTQo8RnNMi+GKo9ccUVsNl2l7uUSx32n9M7dD2oteu+zXbyJ9tLxp/O7ckFiFxrXL5LBc5X/2EvznP1fVk10LEKaXx8PeGzLDGBhcMgt0yK5CQJtLvUjoG4l6j/GWM7T9d30SFFJM2OUmnDBBlOXXv/cBP495bqB7pHUWHdBSH6+iNbDhvnKUyOaxSxNzoebLQ/PvWRRqwhFEAtHQhpXJmok0kxCEEZC1fotwVhOdX91AUbSBoVr5VXREr3utSsnSHwfWJ6xsEMr5pSwWt/9+l/4xfj/cUZiJOV8RZMCpeRP0pP8WhcNBzElqMP/YPBEPBpsUi9iiPuXRZelP2N42/AedBm4VOkQW/AsT7Bm0dMKbrMLJf3zbbV8Szj6KgBu0dkRWBWhuitajxyTuIjmeD9Wbonaw0Fq0+v5Ug3CvAwrV+WAeCAtG59tlYiebdFn8yWqCcXztu7Mhn7u2RAFF9CMgqujqcl7+Ho9kaS2J5wComDNURDpKJ0adz46VDyU8kD40pTNJ0NSeoD/kdk/Qu0qOLvQZd8xB9uOBADwS9mGsQxmuX/4GzqPHhsi9sMsQWtCJjA902eyDWlHw6+om2zIWIGCntnFiDlX6SVEMozrEcPmI3f1inBH0hpqhwisrez83J/13lfHkXX+ZQ8oik2FvuAi+8e0ixyDcoLgn7DQy7prbdWntrgQBPM/XDcuVXKWgt+25PxiTHSiAZM03gHMWnjGmFy5S6r6gUcyjv1N1kTew3XXirDeZth4z/C7TYwoj+UVx2AITAAx8IMZe0mCXQs61VUyMG+H/m99vM4NFIYV6kRTFcjymZo8VwzdJ/RgOybzhSBo3zavGLb+yFuGufyD/NW8veZxyI2KPfFq5Do5cUvtEfBG9sjJNpqsclQcojHaEd00glJg4PLjNrEeVp4YseH7CwIrwfrjO7rWVRh33/JMUZIYAO2BZoFtaWh1WU6/nkLhtUY5kZo4rctG91Wt/XjIUKb6uhNUjJdgEzChShbULWo9ilbfPZZzBiL0e6aLfyMJ3Dj+5k4AcQIvSpdtox9xe65YJ8CQHvNaqb/V7G0zBRYaFN+Yb+fcUdEb8LgfdTmM2mFZsnR9D+YI3pziNDonRL3S6YNJIlrXiiVvPjysNIMQ1PNARpuKQBqwzRXfWhktQfxFz5679JQCWz6nzijvsncJisksAlsE1RXZdWMd1k2IxzhasNJtN4g6e3IxglAB1QmawOnOycmb9QmjAQbLONxOJYansWhZcm181/MOqubOBCCYdScQSosgXYtIk92WU27OY4HuURyvcci934TdG9EmRqaV1s2e4+479f/NebZ5F3rdW5jzjRIP73X0Li7ZOc+RfShHGoZd83ul7jwSyBk6Eft6n1QuhhsiAtKVc7wQelm93bAAQbvo3IM2wfxcrDKlJBI5vexeVdHAVyq/zGYQpdtyz54Su9soE6s2NVd5rAgR2H2hJ/lwpVHdkJVfvTjias5zdIoigttw2jFcjXE2ZcBYxnhsBXi6pFjRdHafWR0Mq/EFGYPPLNNJ/yfGc7OLfZNKRJKkf/+MXSoeqCiMuol8M0ysnLn/eI+VoSgGBnbkpia9XwUCWDSJeAJtQz2U9Ua2VFlnE1xG+n4f7raDyHr4WX3VDcOqJXQGTuqh+PkrQ0XYIqrSXmD2FtXwNI7z5hLYQE7RfsjIYghUmOLGJ22K0n1PcSFghLgzx4NelakdAmAgyIK1o1yUBh6b7Qafk962/TpKbp6QWcmM8cDdSSAytexuKbHIutYXdJ6+e0eu+5fibuLoBQuX/qlmSuGY9ZAKKR5/299k7lhXiKXAkvtQbPwmTkH/6a9cL5UgbZo/hrckLGZKeNIde4yErtMOh3TvMm89bQWZD7MJD2XwhtlTXHc/D1omCgqR9yNhp7vBVCz9lt7jlUQbgAvoOCkXAk0/KKH9bZK82Z1J5JZrptLIE8PO1HKYIKFl7GNqPaw6lnn7Hqy5uozPSmnNGsWIc5EEN+7uBYMMaIKOUMxr/qRMV2NmOAKQgXoAnDHXfOXEbpnz01XcXa1F+GEh7VL6Nr6rCm9sU9jH65MRhHYDDP9XqaMij3sjJjCRSRTwS7XoCKPWIxQeh1lVspklmlTlCGO9RFTOzyAUcguMrMY2yTRVMoeF1m/qHZj8AyNYiaziat6B/iz4SRQaZuFu43ero02L0/ZaBqf0CLQkdhRhR3aV0IZtqVME23Ttpwz9y+5ZQFzIni8QTElMYtdUcJJeUFxDtbn0rMAJFOJ2+FSSJs8MUoNLKmr1ffLakXMQs/CrMJbL3bI8OXEOgVqk92fBciislccoRy4iNlSZCf5pvSbF5+Hqb3HybWd9DguWDjcJLnPALxEAC0ru4bCGEq9g++UoX91AlPnrO4VanqDxWI3RO5/gV7CR8hvNYRSUhsvSRr+g2Be9jMcBZwq3kj1sXStLwDAju17PYkXzval4KZKW2SnfKSuRG3wgN+SqxtO2HPkX3w7wBGfWor4xKzfHI1K+sx/sFNw82k7s9yy94Ro02Gcv4ack44Vs1Iq6vAytVDNGlxg0ZXkcfwVXJ5zOEi0NwrgKQsg0OPVipN4+Jq7Q/3tKIIdo0JFMESvkLgZmn5YiwpZDeZalkeuaAyI3VOUIKdIk/cIrKRFzdTCGO4arY1Ar8Cq2gRKB2KHtBg0vmfbWhAE1jaR7jbLGjcTMHuYV6Sgzxd7IDic/sftYJBbTeTIN28cIKaceZzaa50JnIWCxJqx0Cz8ng2qO+c0RWO3S263M+6mhfvTYm73KqorBUo2crN7Gz9qUQrIEykW9JZhZtzmr/xw0ssAFHD56XLNuzr1n4kPastDJbNaZjF7XZlu76GuOj8Ybmzw3dpbB3dt3YU2d/AZ4p9CjMq5Ek5cZBI9c8bO9eGPearHrTSWfDnznKIx1YBZ92bcPPRlW5qYgVPQK2mA2Pk7WPS5oTxnhTA6a1YCfWNxIxKLmYRkdy+VcccMNWwO3FbuzoqpGiXjKayl/R0XSxu+YPMF8/lCZT/a2zJloZAXTwaaO1e5xY/W8oN+4DAIId0GEB0JScADaqrhU+LNxrWBffO7/7q1mLycdYiwXAR1iaW9fKD5gAEOgmylHpwfjmphfMMSG/hW2kscImFPjrVn+mpuRCW8XrGBC68IhIwb04mDIeY58s2OhYJDecscNAh2gu9QbvUpDz6f+8MJmvJI2MpuAMRRcyYUutYAW6eAwSEbjHFhnnBwCFwys9Zc8n1XF5cH4a6Dnmo+J3uV1iC2VfzgzNNE1uPXuxed5CnRoSpyCfOZ/2lnNKfCo8oJ0VA8G+rXwkYQgpQsyan0KC5+N3WlrEapBKILD4OT7vxN/9UgjTpDIxTH0f+C+rcn15Z2YCJCx7/bp3PYB66U3nx+y3KA9ZlnprEr3ultKmw+OoFepiFYWXBrSFPo7ZdHJKIHC5OwoZPKfstxTHQ1mJE7T+bGD0xs2/HQfP8VpQcCrpO388BzEQcw7Dy2rM6yDN74c+Lm5qL2aMiFQW9MvhaFNVC8lj5dnaDqXZcNvFj/uv71HJXlxtIko+R6rGiZK+0QJ6D/HNmi05AIQPp54dR9RFyWoMQOhL56pnLC4a2xKIAB2ZgCPPiu/yrIknj4WLBZ6tlBI7l7CmvFqT0sTyrO4VigtE0keAL7/uelaqQiKexCtwQiugyupu+fyqkhNimgfBe2pRCgdQb5IHMiWECwk9Fm40UQRNdqcxQm5dQJz6zgRSE/sIIKKD9mrocK51xQ8poajZ+Tdo0ukDcA+UhTtZ/8ccgqcGrGyNPRBktvn+dRdplowiu9oSHa4zRZRE8tMt4EZk7BjHZzvkKheQsTsX0BvWkMFotDetghBHCwRJ5ntp9EsdyQEjKgJhNKKyGSoGwrbCSHA6NHTAOR7dmVV555EvjwHGBEkk4ey+qPRhpPPwXA+nFMl3I4gNYAILT1EM+GUzbrjCb0uZnu+ZnJXgLfWUmTq+rDiInqN1hb7CnIiJlm/bT6WOwtKz7I4YRT3nFgkJirCl8nKaWo48mTZZcNk/7SNpKGKU3VHbCv/l1ScC/s02e39PDHtWhK0EH/fLWHaKZ99PVMV22ckCMDER9PRk6ttEhCObra3lVljs0DAhxwDAMqOyKMEXfO7YxdOCVxetE55jQE80GCa294yonG4B1gz3r+4DoIy/zWcY+j0XxHPuPi479cg/Eo3Q9gQNqW3RxRXkrJozANDjtxv9cV8gS1biV6n2AyK6SWrICwFDHS9GaqMRQuP0zFqYush7RjatIZjxUfSi4nAVBuawQcEOe1nKxDarqyEi4o+Zu90RfmB0ct2n82XSdbhJXI+cBpkr9qPiA+5Q3Iu1uEARxZq7N1XmH7TSv3VThjfwBFRLF+RbcUkfU7ytVdINCDLoIN97Kmc6MSuIm8hVMsMj0Oin7Gi+medIKrGXbd85K8dhVVOBs2OcWiOVvfRhGMEGnIv3c/X4/k+fVkeyRPnlVnTmwddOMOxmSs5zFinDSQ/k4/AZx1Pvldlt16yifqepjYSJckQCMmlXMrLZCOIEj4ElOvZKNmeA1LylrcmjRXHMj4rv3v4Oj7d3F47GogCJ4UJrpeF9bZPnmuZuvE7jZt3tA/n95xV6npJ4OxYwhjXO6m5QBvAAKUTiARpnLBMU44enugl9puu874BSh5BiUI+W29OOWpgnnNA6DjktepswCsnEQiZanVzfdtyL/B/1is3JYl4fbp5MtvOqJui3fUGtfqejToq2xbtfvKokRn6puEIAs/uYNfdl0Cyu2OMhYogp5TgQBcQF+oXfAGgDN0RLLIRD5GVGA6E+qNxF607boAm3NQS09Uw3MIuWDw7sB1ZCucH7IUzJY6nizY/WNwUJfLDGM9vTcnJXT+WrOOPWxy7BH5zBvpzGWoFe8lk1tFCBTwbYRtrW01Duoavh4c6echZVQdG2bpp9t+9lJUWUS6zWqEtCvXSqddHS/Gjc7KHam3gVrDxLAmNiorSrinlcKr1R+t3e8Fe6KOLLA6TcA00vgwbNISgfhnjerb9NjGg1r9oBiOoLicQrvIyxWMuswH3mraUmv1fvH2en+YFtef9kV4pObcMcJCIQthQOVtWAPFciahopoZoTCzQU6cPsyAnF+bTrcPX3iylVT/3apVta9RBkFmZQl2snFb/gX6GMtWYmVncKdzU1v17GFWWro5jqgRGSb0dikFtJ/wGvPezdygnCVDBi+QjJPXSDV06g0lxD2hAshXGP0LTTDMUEDDAV5bOWZBDGvk26czzmUvGrsgxMSQQKb98KeoA5fvw9h7xRAyXoFCd60L2gPXFDqXa7ysnzFCafm/FJrgPZt/bKF9FzaHpO8rNW4mLbOT0co0SOuolekaA+WqHyZ8SE2v84LgKS9sDyS6cgDE3ZQefrCrZ4Q7n64gRdmAMiv0N0XpAJ115aN80wZRZ1+M8/SfVoUAE+OCD8QlXYBBvG6rkYo+0I5EOW46NtgUgXcnBx/DDk2JhgqcGbhK8kSbB+y6bAXgEZYAS0de6J3vAny26ScOysat0aVqWsoQ1OBAeMeWpgm2qBFT6vqsfCKtwSGLw8pI4r9GSczHvvNunWeFWxwapzWlM2TOn0prLY3QFJRq7Xgu3D0ihuoSTJIS7cL5xr4SkJPREEY25aTQyvGUu0U0cCAp+ItzU9t/bAd5JoQCzkhZkGU6MIiOweF5/yT9NNkDqPd615I31nlBXO0b5AYr87LtOuZKNYXBCqSA8DHPHnowkJVmDoYw0Cf4Q8nZq/cnIZ6wMF9rJkJb8DlMRN7frYiHXW0822eDFYb+YRLkXJBMroEzeFb11+xMg2rTOQ7CTWYKcmMykX6JEsnxGc8ugCR8JD+hIL/Q+iy/Jzdur2qHmIR7Ibh2zch80J4RXzlqi2HSmLLaNZpHo82B3mwwpW8xMJNwKzXgiMFU2UABU0wOlVZukSMvjagQ8ASCvdpU78LVjpS8dq0b+XUfTDsM1EUwnEPKwPRoxsCtGUVJF/QMnUWMLtxI3IQg+S+qS4e1GaKE2vdyxW9KMjrD0XUrPOSr09E5ciOuAzWmUNbwc+pdSiiKMlm8AHm+vKq5Q6FhNGSzbRg4o2b7VYUOuzyiEuWIY3jxht1H7qed/cjs04gmd1h372FUPzvsv/doRh15hT3GLpVRKObavWmyKXOjk6uiJfIIcES1mI/dsxQNic6Wg+YRmqlgRKx7ZfKkpjQMq14gZEgMyTnbdTp1lPVL54BAXvc4kp6wm21jM3lAiXecmhnExpsAz8sAp/CPT83hfsGcxgE8pfWufc1guCeV6pkT+Hv5jtNYyjaRwTrCcK9QLRnk/1Sumso8tmSDxKweik4Hqu8+xwRwtB7LE0/6tohp40MdfnH4do62PLQuPUyu6QV+AtOijQDffzHWdTIJbfwUHSoNGvHe+DsV5BbSOzeWIjZjEJEPAfLD4x6b3TCFM9TUwCHY03DvUgHRw70ocIv2Z/2PSUNd1GBes3nTtmnBkxF7o/FQKy85/T2s6nuce8rWaKnXEzRZpslg+yBmO1QXYzIDXCSGci/Kb5n3OwYlxZKYlYD8a2hTp/QdQiu0yLIQsBaiev1360gGNmXCjya/Tj8gR0IiU8/uvy8Hyxij9I0pe7462Lp5jly0gxhN/iyXK+sRQwemdTTL3ubPDmhJT00vs3yPrJ4Mgvcj836JwHzcS6Eq2+itNpfpfLCSWZxKoCY8QupHWvCIR8jj2kkVwaOBk/PoEHAgPTQfKrNcU60KPViMQujPh5YX/i5juL6YUTEhcqI3Nzlf6LXOa8U3ai326BDYgstDavTSQ5wIUhuygw6vceqZOAqtgytwVwDQXIz9+xKFGcVdVz84QJDPaRHP4OOww7pIzs6lJEiGFhBjxzm81XuZqarhzFIYCCw+1z/IxQ1nzN7bixfes0Rvgd5V9LvoFx5UkyPekp9TXuxM3/LOi/IB1T4nVWiq9iDtcPT5yJufCm5yEhFgSVe0lmttq/MGusOWU8NHTqlJ/ypOmQD8DXOJCHYesSF9SGi3Cwfx8hfktzgksNSPRmfBBCfgqX96dwymVeUr8iTRVmVcwefW+QPs54v9hehUGmUzv36aoB781Xn57mCSAtJVhaOBlC08MqTVBQXKvdJ0+Z215+u1ovJVP08aM/ip9WNfsb1hAzKHoOk/zye+BXNhzfQtRMRAUKYtBtHtg228h4W0zblmEmJkvTeJPDxjfyJsCpTa64+XE7qHarTVkWD8shXne0eCSXAvFq48ojdl+ojNiVm7xGIe8fvos8AckZZehgcAdDptGDAVY6USBHzNr/SJFx6t91OO6WOBf7SrvALGV6HYTFyxBOR6puWmGYzAwZugmD/zYJl7uZl7vvgrmy1uvtmR3jgjp1MNuOxe0URL9tUDNsMD2D7Vz6IS82giyDwiLtR1F0MerJwUd6oEY9DEiJQLNagTb5FHWQk/RlCStVVRO0/23tLOeTuGdirxIcHEn5/WX/iJsV7xf7CQSdj65/TiRg0kMQdsIPYf68d34+JgJvwecpW/Ae173scp26RyJGZYbcPdPNXIXwuDiXt9vpwvfTkZmpxfzIPl8eeYjMJgxnsYUh8Jke6H0mxIRMuWeUi3dI2rTO5RzoaFErtt8yV9pxoXnEBANepwf9QtksAbPvH2nmjLF48B92GURU0sgMqo+3gLR/hRzU5iO7gD9D06I6aedAzfmJHnKaJnElIugAv1gVNjesl3XOk9cFcu2KZsJcLy+7dwTalZz+p7p8LsczcQynD7RnQh+/fXMzPcKUaJtczVJpG3KGBcW4xkLxlUpSp77dDe41pcs6sayogzsGkzuyrkJ1Yp4bSVsWZA7Gj+uE46vEsWGRI7skU3y3xB2GDUl/P5ET7YpM6eXMkGhWoX6QCOX2XfiueIvSajRc20nkGOQZeGfiAoDsJ6grjPJqjKr1DRCXax0AHu+4iPau2QdP9cIjPMUU34hRk5iyweJJfm6gpNX5rIXprMgh7oe+qtbU8dVC6gaq0ZZVnwD4dTjQipfW8GohxQdqQzQMSBRfMmcd+Cn9AmXqJFl6uQFv2TPJWSxoS1LQdd2wU72Y0sq5yE9cg5+SKnG38zVR69EheFbXOekzmlab4H5cLEoHxmJjcz9bBiv1Nbp764HITIb+Az3QUP6fn1N9WKtSf/ha9Yoz1ltaNpFLDjxEsujSQ/5DG6CIxaS/13csgkr9vGGQd7vtaWnR0JxLliM9GKjUQi67mpnEam1XG7XqjKJSYluO+/VbbCEMVekJn6hC+Y7e6V8BOey0/eFabA4q8R/aSGTtX9U9GbiSaFzl6w+rkcVPbrXTK2hhtn2tmY/u8lmmO5sRFMTWRe+P66ocEvsZQJUpeX+8q9WLqeQaJabSZTNidHZRJYO55uB+5siUhM2ZT+YVyHteSMYC3MD/AmTRf6yS5E6PUkQODVGxuj00uGN49Y8HmUfrMPoMX8RAoIYuOKqI+0OHH3N7ksypcIP5EEK/vHrNQi6MvYmv/WnuB+6boifz/qCZCpzG9gw41ShXySatgA6RzW4yq9F4C49YoAI4dMqwB1O1iGXE5LSn/RYmh1mn7qSLgWdAMjRw1osD6oAXtieR68vmhkPi2qRd/Jdb3MGOJ0s5WiSPw26Q+NBcBmfcMw7/UcLQiH6iufU5XW+BbG8X2LdQWjXz88+ZCrANCNLAEUcVZAiEir41s+9JLoy1P+dGKH1EgJtmHSYvDaNBPEpci5elfJtvQm9mhewCKfOXZdrh3qokcNE91+vM4md4i2z3elH2dhfi/DM1b64FqsgwXii2O7f/ecvxyiAzalmxfKpL4EdeVHFTX/bxw3CL5txN9l16sYgP9Wv2K5pWEwLkXSCjAq2pCR/o8iF5CEwJ4z/mMkeOakIfWY+01eO+LvDwn3VZ+YBxGc5gfTnostyt8iTWBR1daRic13WHUkO9W1NxrrRVELKV3CVeQ9oZERpDZvXve0jdUoBJrCz4rlkPxDGOrw3YHvhxNoKxf6bX657XCODLFboHjVWVyoqUiqo+P/C1m71+5JhMPsQNMMW8nvY6wqrtABwnPlUukUsmJiggT7yjRD/X5X9E5VS69oxWgGVMJRWvAGJ+rYiR2qy4bEWJsR7GHJVq5aoHdJsE+pBPLfS5gZZoZ9o9mRrPCTDRpyvyvfF84MEtsWc3C8lFAFU6fw7Q9Zyos3SlKkxF31i66IdWqri5P0m9VMF1PMScoD7QG+IBhJZuFCBUOVTatRsqEHplOfJ35L3Hla7CBMZlH7vD99F4Sb/x4r73GsKvYhhGkxr0hHvAn8TMNh4q6ODvXM0ZRQTZ2wvM72EoFIVTdDUlWl0Jk/aplmQcaB3EwmmlFpHdY2NW8M6y4K9oyWPKGeqJ1crYhP1djPAaiJayiIjfZrTwAR5UNZqbNbxXQoUvUp6NsuzP4UWmKze+3zU7hrb00fDwFgNhWOmHzaXhJ63/TN9o0IDkUtuAUyxNnH5DXUCACa9pgC48TgISw3R7o1oeikNNWiRlJHoLkzxpN8EV2f08Fk88YxcwPWN06B7hSFJy3YjowepFOabvfEspmcljk5a+vKMLeaykLZvPEble6a0s3KHRD74XzSqKDKVlY1RFu7FG/skFeu1FwTOfuR+0zvP9xlUIDwEgePPMxYvy+Z2GGATHr0KxhN3aIatp9whJD/DyHvXMEu+f30O4vcFJ9pNOO+91hf6EOS9rM5p/HCsj+4cGgEFD5b5Nfc3NMZtsXuGlzkTgD/fY+CfBkl1R5k5JmViUWTw8z5eU9+jdQusyL0xqzagQxl7fCrAM7565f7WiBFqH9HlHO6lANrjdrpYw7VOrt6bJ9Q9carZqdLyoKFoTCHLANTFHWBZqhzFfqrN5k8z2vrmDhn5f/hjCpz/t4YN4S6qy12yflsa7GO+udpLHZi3PNLUdEpCyAT7ZcLZ2s6ZMHR8PX8dcc0cI3shwQLM7TK+Xk7gh8ski6aBUGXmUoRueh8GVvR+TA9VCzCpH0ik2CLyzEMS9l6p0XYBLCsDHcQjoxBaQ+gncGY1Sf5oSzN4Syg+5qRApCpKGZAgrmbiy0aKWznxMobqiDSxbJBeXhoWldI/FVpKs0K8zRdXouXcsqCiGLAyKJhoIcTOl+tNiPWn/IYip5MEBqvXEGeFV9OIwhDyDFWvBE+YtIqUO7HqJJJNz55Txhv4k2lbv3i5QcWb+yvcVVOTE/0cesj9SdE76GxK4F7uuq6diKXRz2+0adT9e4wOUWRZ5aOwWB+oWnBQt3hVPFVd86nE0wfFnoDyw9Eb1Aea5Yyq3jQQn0EjD2IKJWIfjo65Z0aB3i2ZiA3NC92Wd6rWTpJwQgHDVztGfeDnWdXPFBywErPhkKp3wSdP1SeFwOdUTkJsyTqDg+4FOolM9DTJsXXCnYTXsHvD+Sd5N6s4GhzSWF0nlM7uaYfe9sU3cTCkowERUSg+pLAqFeaj+V0aPCyGByspsBSBbEG4il5rqgO/MHCC/akPbqo6DWOucTmQzS3IbgLvdKwlXk75p2yAQjTWrsBs7W7SFg/uLJWlUPnbD2EwagCIs9Kb2MpclyXSretYs1XMDRqb7L8zAsnmgExab6qE0R1/fUc7VijaBSlNjGpDajFWv9eJNh/tNsYu17lJM0PgY3ou5BUIv+7TYHeFg80YEy6F9h49ZEC7ay6wYuxRCOKhIZ67fTR2kbF1mNfPLssHBZz00yx9M+rjPQjo5Gcskru0pnbxR9gwtMYcK1OTgn2SOUufN/4f20Wvw6T8dFBDsZa5fGa7YlSRxfbh4YfUd3E/aGrKX7/diAaiGBW1YtUWjObDbvN/V4prtuocHxXPAQVHLZRlmjYqokhzzcybRcodQ6C1ZvNM9bjt3yWKuG/iGseVtjAd2kYMIcOIFM72+GcA4Yyos2ZIDs2eNd4FqEU4zB8eOHeies1p2xtZUP4EG17m+m6IkzqTW3wO0OS97gqwUoMGvp6eZBiW78noUSW5EgD3FFWfgSEEw1qOIrAQSi0IJ9aEDHhsbd4nR4kXi7XQy3M2Lmgka5r2q6xuyK3cdcJmbgY71KBs0UGrjKCmKPaND1Q9sLfs7iHyXA71h2Kg5CVyb6O2DLn27T+eNkRSfIrf4g5IIfXRQzNy47zZi97s06ZqUWyzGbe4n+wfRJRZzbvm0XXwkjbHTP3NTmhKdCb797rzHX9dB9R8B8IWdQB2Ip/w6gjhdrVj4jyAwbcxeYvagN6j0EwQibAw7OIInUDp2pOF34viBgbG3AZW9Qj7qds+gM2fr7c4VOX/C1UVhNFp2SaR82uoXUELft5dQc40jfQvAOJ2Cq8A7QIkKKF7GUujyuSuQCH5znR3DMw5Jz34SLeM8uxnESSXZwh4FRUL8F7+XYYOs5BwYKurOpGszZyJTTGycebK58PoKjCZdVOjO2vA2ryl+GpgtGqf7c3bTTWmjUhUSzzyVQ9Fivmn/MEii+Bn6MTjCs79mxuFcjwLCysup6hf8FZmCNv1gO5CYdYSdTZgEzIpLxK0YcjZO0fbxODCFkYKwQuXAdZUPTBh4ErqYE0lbrTkN1hR5AyPRqvHPJ0A+iDVagNGB9yDELR/1q1+t+9Kra60wlgAxIykCfEV3vNa3GA7SSNR1ud3nRpFtp5JKcw9tNWv+CnCbfD9hgu8VRbrMMe0JaJwf2ua+dacVHO/C6KA5ud9IHIkP6AL85ViQC4hCRDo0pM18WYUuvFE8octrYS+xev0F8U8GSpxDNAlXKES7Kvo8bDreSGlsSp+6EQ5RDB1xSCW05bR8+GSQPQEvstaRP0VptcNmwkgRkxXeMNWd1yKN4L8UQA0BWmcXa9NoHyNF4DKsHrUZ7TQiOBCywuvh/mfVdLrKrgYh4PgKUmBf+3vrdjLB28BBwtaPklvoSV5RtkSgvUnCBaJL/b+jC9DVqB2frIpWpZeoSgCElvRKAIl7mo0YBS6hclegKS7WqhOpeo7XHEALaDgj0G6rDFQC5aweO7F28+LBJQ1GiMFqrP0mJhEClvXTgKrrMAbxKRT8Aiie0cb6KwCWx9VOYC5eVMRKwJRJSsSW3rwC2U93H3lCp0S/HwtcFN0t9DzPBDQ3ZWEeytbAK+zS+JaJgXo473ejqYNdvslRpZXZuMQBFEIS4wt4vloiV02ChcRG/L2deqfYkxgDoiTM/wLIGjVZZVRBiKLpTomrgaEiWM5i/Pz3ujsER4wLQ1bHd/uxPxOcR0L6WeRiyhR0Xe33a6v3440TuWUUL6lkRLvKA4aUGpfE4LzAvl8wvPzLxME6paLconZeP1okoAw08N3rhpjwuEO2bDytGkG/I/Lysu31/musaunYrAOQbb2h4MnNSZzyXv4lMkrimpKJutyoD7U74PqMiBzSA6GbeUtLXqiC9OGrtdZI0lBJvi4bHaAy6Vw7UQd3rg+41bNH5VWlOhRl34gaqaTIooufhzH0+HCL3xRlkuRF2lO2dMwlF8gUxYKa/xtR/+LqOWornWxjWI7ESb91tqE72fPMXQV9xE6/OzF0Oe5l/ZYmCj5WzhBX/cE6cb+ylqeQ/u5/OPI5kNlWroeo1QPH1twy5MpK7+5EfNSeJpN/dwOaCbazjSwcj9zP+9aE7wPl90Oay/1MNVK0mTay83vOkWqotU34r27VN+Wgas/+AmF43opAe0QUe3ab9JPn9bCPFdeb+sD74QC2HN1FQLvjFO1mkx2eAHtxFOAwi0AIpBrWLHg83Ed2ODTJHEq0znDMwBHKrtNHao06+DiwlJ3r4bEr5NB2K1m9G+bFt94Xi2FM6wfyVXj2Eyq2eaDScHKf2Iq+ISMHBI79EORPHbU4WnsjckHfgcfKBi4gZH1ZNYizndW1ZKVXCxh1JqHct0L4H+gWfdizPBaSMKM2Iiy+38rRyeAumOIt95LKIIA8Lfg9EiAURsG3n/OppyNXrlmOkBis6wUGh/deVZAH4jD6Za1tJLBSVMVlOFLF/Nii/FVroNwfWmNxYNbcMTCyYryjBzs1S0NTiu+y4fzMm9ASVti4FFy4m1d2heGMIenI9aLPyqJhCsHn47V+Ujp+zCjUAUe+MMs6+Vp088o9MwOmVQSWssRp7sIuaXKJqmBITvhEVZVxkt164F+4Vg2CZQpgy11QHTWSzAGuPX3NFbGZwEFpVo9oi4NtwRJ8vR0D+kOXfgArwSRwIrj8EUgFh/chiq1ER2erLW69y0r4NZBEryTifTTQWGIurudxqqflTtjYEtvDCwQyaTW6szocvgrXU2PZGQno/YrAaPsntVSeXeyv13wxoKk2bXxP9toT+HDjq63XKgoZohOHuG9SgyOY3QO6IRjMhXqdrOyRzAFPwN+FgmLiGLElwMqEfa2mI27IdY6yUkLxslkwvg3/+bTHsFiCBFoS43MBA5ZOJhJV/fdz+asRjwR3BScFuInqq83bByYXWIcXLx/cEI1qSfrqUOlzj0fMpyiiHoEz/MUpGgFqTA4qoZZmTCa3VeAk8DobtJ7sQWr5zyM+MexjCUxiWWA+tCCcG4TBmw5JAp599mbxIYX8qi9ulYCwj8RA== \ No newline at end of file diff --git a/src/test/utils/saves/everything.prsv b/test/testUtils/saves/everything.prsv similarity index 100% rename from src/test/utils/saves/everything.prsv rename to test/testUtils/saves/everything.prsv diff --git a/src/test/utils/testUtils.ts b/test/testUtils/testUtils.ts similarity index 93% rename from src/test/utils/testUtils.ts rename to test/testUtils/testUtils.ts index a8410f8ba40..40e4bbe8775 100644 --- a/src/test/utils/testUtils.ts +++ b/test/testUtils/testUtils.ts @@ -18,7 +18,7 @@ export function mockI18next() { * @param end end number e.g. 10 * @returns an array of numbers */ -export function arrayOfRange(start: integer, end: integer) { +export function arrayOfRange(start: number, end: number) { return Array.from({ length: end - start }, (_v, k) => k + start); } diff --git a/src/test/ui/battle_info.test.ts b/test/ui/battle_info.test.ts similarity index 96% rename from src/test/ui/battle_info.test.ts rename to test/ui/battle_info.test.ts index 3100372f091..6209312c451 100644 --- a/src/test/ui/battle_info.test.ts +++ b/test/ui/battle_info.test.ts @@ -3,7 +3,7 @@ import { Species } from "#app/enums/species"; import { ExpPhase } from "#app/phases/exp-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/src/test/ui/starter-select.test.ts b/test/ui/starter-select.test.ts similarity index 95% rename from src/test/ui/starter-select.test.ts rename to test/ui/starter-select.test.ts index 15af3619ed3..685debf098d 100644 --- a/src/test/ui/starter-select.test.ts +++ b/test/ui/starter-select.test.ts @@ -4,16 +4,16 @@ import { allSpecies } from "#app/data/pokemon-species"; import { GameModes } from "#app/game-mode"; import { EncounterPhase } from "#app/phases/encounter-phase"; import { SelectStarterPhase } from "#app/phases/select-starter-phase"; -import { TitlePhase } from "#app/phases/title-phase"; -import { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; -import SaveSlotSelectUiHandler from "#app/ui/save-slot-select-ui-handler"; -import OptionSelectUiHandler from "#app/ui/settings/option-select-ui-handler"; -import StarterSelectUiHandler from "#app/ui/starter-select-ui-handler"; +import type { TitlePhase } from "#app/phases/title-phase"; +import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; +import type SaveSlotSelectUiHandler from "#app/ui/save-slot-select-ui-handler"; +import type OptionSelectUiHandler from "#app/ui/settings/option-select-ui-handler"; +import type StarterSelectUiHandler from "#app/ui/starter-select-ui-handler"; import { Mode } from "#app/ui/ui"; import { Abilities } from "#enums/abilities"; import { Button } from "#enums/buttons"; import { Species } from "#enums/species"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import i18next from "i18next"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -38,7 +38,7 @@ describe("UI - Starter select", () => { }); it("Bulbasaur - shiny - variant 2 male", async() => { - await game.importData("src/test/utils/saves/everything.prsv"); + await game.importData("./test/testUtils/saves/everything.prsv"); const caughtCount = Object.keys(game.scene.gameData.dexData).filter((key) => { const species = game.scene.gameData.dexData[key]; return species.caughtAttr !== 0n; @@ -98,7 +98,7 @@ describe("UI - Starter select", () => { }, 20000); it("Bulbasaur - shiny - variant 2 female hardy overgrow", async() => { - await game.importData("src/test/utils/saves/everything.prsv"); + await game.importData("./test/testUtils/saves/everything.prsv"); const caughtCount = Object.keys(game.scene.gameData.dexData).filter((key) => { const species = game.scene.gameData.dexData[key]; return species.caughtAttr !== 0n; @@ -160,7 +160,7 @@ describe("UI - Starter select", () => { }, 20000); it("Bulbasaur - shiny - variant 2 female lonely chlorophyl", async() => { - await game.importData("src/test/utils/saves/everything.prsv"); + await game.importData("./test/testUtils/saves/everything.prsv"); const caughtCount = Object.keys(game.scene.gameData.dexData).filter((key) => { const species = game.scene.gameData.dexData[key]; return species.caughtAttr !== 0n; @@ -225,7 +225,7 @@ describe("UI - Starter select", () => { }, 20000); it("Bulbasaur - shiny - variant 2 female", async() => { - await game.importData("src/test/utils/saves/everything.prsv"); + await game.importData("./test/testUtils/saves/everything.prsv"); const caughtCount = Object.keys(game.scene.gameData.dexData).filter((key) => { const species = game.scene.gameData.dexData[key]; return species.caughtAttr !== 0n; @@ -286,7 +286,7 @@ describe("UI - Starter select", () => { }, 20000); it("Bulbasaur - not shiny", async() => { - await game.importData("src/test/utils/saves/everything.prsv"); + await game.importData("./test/testUtils/saves/everything.prsv"); const caughtCount = Object.keys(game.scene.gameData.dexData).filter((key) => { const species = game.scene.gameData.dexData[key]; return species.caughtAttr !== 0n; @@ -346,7 +346,7 @@ describe("UI - Starter select", () => { }, 20000); it("Bulbasaur - shiny - variant 1", async() => { - await game.importData("src/test/utils/saves/everything.prsv"); + await game.importData("./test/testUtils/saves/everything.prsv"); const caughtCount = Object.keys(game.scene.gameData.dexData).filter((key) => { const species = game.scene.gameData.dexData[key]; return species.caughtAttr !== 0n; @@ -362,8 +362,9 @@ describe("UI - Starter select", () => { const handler = game.scene.ui.getHandler() as StarterSelectUiHandler; handler.processInput(Button.RIGHT); handler.processInput(Button.LEFT); - handler.processInput(Button.V); - handler.processInput(Button.V); + handler.processInput(Button.CYCLE_SHINY); + handler.processInput(Button.CYCLE_SHINY); + handler.processInput(Button.CYCLE_SHINY); handler.processInput(Button.ACTION); game.phaseInterceptor.unlock(); }); @@ -407,7 +408,7 @@ describe("UI - Starter select", () => { }, 20000); it("Bulbasaur - shiny - variant 0", async() => { - await game.importData("src/test/utils/saves/everything.prsv"); + await game.importData("./test/testUtils/saves/everything.prsv"); const caughtCount = Object.keys(game.scene.gameData.dexData).filter((key) => { const species = game.scene.gameData.dexData[key]; return species.caughtAttr !== 0n; @@ -423,7 +424,8 @@ describe("UI - Starter select", () => { const handler = game.scene.ui.getHandler() as StarterSelectUiHandler; handler.processInput(Button.RIGHT); handler.processInput(Button.LEFT); - handler.processInput(Button.V); + handler.processInput(Button.CYCLE_SHINY); + handler.processInput(Button.CYCLE_SHINY); handler.processInput(Button.ACTION); game.phaseInterceptor.unlock(); }); @@ -467,7 +469,7 @@ describe("UI - Starter select", () => { }, 20000); it("Check if first pokemon in party is caterpie from gen 1 and 1rd row, 3rd column", async() => { - await game.importData("src/test/utils/saves/everything.prsv"); + await game.importData("./test/testUtils/saves/everything.prsv"); const caughtCount = Object.keys(game.scene.gameData.dexData).filter((key) => { const species = game.scene.gameData.dexData[key]; return species.caughtAttr !== 0n; @@ -531,7 +533,7 @@ describe("UI - Starter select", () => { }, 20000); it("Check if first pokemon in party is nidoran_m from gen 1 and 2nd row, 4th column (cursor (9+4)-1)", async() => { - await game.importData("src/test/utils/saves/everything.prsv"); + await game.importData("./test/testUtils/saves/everything.prsv"); const caughtCount = Object.keys(game.scene.gameData.dexData).filter((key) => { const species = game.scene.gameData.dexData[key]; return species.caughtAttr !== 0n; diff --git a/src/test/ui/transfer-item.test.ts b/test/ui/transfer-item.test.ts similarity index 84% rename from src/test/ui/transfer-item.test.ts rename to test/ui/transfer-item.test.ts index 0fbd4a52c61..83c2eb2ef79 100644 --- a/src/test/ui/transfer-item.test.ts +++ b/test/ui/transfer-item.test.ts @@ -2,17 +2,14 @@ import { BerryType } from "#app/enums/berry-type"; import { Button } from "#app/enums/buttons"; import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; -import { BattleEndPhase } from "#app/phases/battle-end-phase"; -import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import PartyUiHandler, { PartyUiMode } from "#app/ui/party-ui-handler"; import { Mode } from "#app/ui/ui"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; -import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; +import type BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; - describe("UI - Transfer Items", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -41,7 +38,7 @@ describe("UI - Transfer Items", () => { game.override.enemySpecies(Species.MAGIKARP); game.override.enemyMoveset([ Moves.SPLASH ]); - await game.startBattle([ Species.RAYQUAZA, Species.RAYQUAZA, Species.RAYQUAZA ]); + await game.classicMode.startBattle([ Species.RAYQUAZA, Species.RAYQUAZA, Species.RAYQUAZA ]); game.move.select(Moves.DRAGON_CLAW); @@ -52,10 +49,10 @@ describe("UI - Transfer Items", () => { handler.setCursor(1); handler.processInput(Button.ACTION); - game.scene.ui.setModeWithoutClear(Mode.PARTY, PartyUiMode.MODIFIER_TRANSFER); + void game.scene.ui.setModeWithoutClear(Mode.PARTY, PartyUiMode.MODIFIER_TRANSFER); }); - await game.phaseInterceptor.to(BattleEndPhase); + await game.phaseInterceptor.to("BattleEndPhase"); }); it("check red tint for held item limit in transfer menu", async () => { @@ -72,7 +69,7 @@ describe("UI - Transfer Items", () => { game.phaseInterceptor.unlock(); }); - await game.phaseInterceptor.to(SelectModifierPhase); + await game.phaseInterceptor.to("SelectModifierPhase"); }, 20000); it("check transfer option for pokemon to transfer to", async () => { @@ -91,6 +88,6 @@ describe("UI - Transfer Items", () => { game.phaseInterceptor.unlock(); }); - await game.phaseInterceptor.to(SelectModifierPhase); + await game.phaseInterceptor.to("SelectModifierPhase"); }, 20000); }); diff --git a/src/test/ui/type-hints.test.ts b/test/ui/type-hints.test.ts similarity index 95% rename from src/test/ui/type-hints.test.ts rename to test/ui/type-hints.test.ts index 2977262dda7..0838ab01f51 100644 --- a/src/test/ui/type-hints.test.ts +++ b/test/ui/type-hints.test.ts @@ -4,10 +4,10 @@ import { Species } from "#app/enums/species"; import { CommandPhase } from "#app/phases/command-phase"; import FightUiHandler from "#app/ui/fight-ui-handler"; import { Mode } from "#app/ui/ui"; -import GameManager from "#test/utils/gameManager"; +import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; -import MockText from "#test/utils/mocks/mocksContainer/mockText"; +import type MockText from "#test/testUtils/mocks/mocksContainer/mockText"; import i18next from "i18next"; describe("UI - Type Hints", () => { diff --git a/src/test/vitest.setup.ts b/test/vitest.setup.ts similarity index 92% rename from src/test/vitest.setup.ts rename to test/vitest.setup.ts index 0b83d112522..bc7db8ea591 100644 --- a/src/test/vitest.setup.ts +++ b/test/vitest.setup.ts @@ -19,11 +19,13 @@ process.env.TZ = "UTC"; /** Mock the override import to always return default values, ignoring any custom overrides. */ vi.mock("#app/overrides", async (importOriginal) => { + // eslint-disable-next-line @typescript-eslint/consistent-type-imports const { defaultOverrides } = await importOriginal(); return { default: defaultOverrides, defaultOverrides, + // eslint-disable-next-line @typescript-eslint/consistent-type-imports } satisfies typeof import("#app/overrides"); }); @@ -43,7 +45,7 @@ vi.mock("i18next", async (importOriginal) => { const filename = req.params[0]; try { - const json = await import(`../../public/locales/en/${req.params[0]}`); + const json = await import(`../public/locales/en/${req.params[0]}`); console.log("Loaded locale", filename); return HttpResponse.json(json); } catch (err) { diff --git a/tsconfig.json b/tsconfig.json index f8e019a1b8b..6bb0ae51c1b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,13 +8,12 @@ "strictNullChecks": true, "sourceMap": false, "strict": false, - "rootDir": "./src", + "rootDir": ".", "baseUrl": "./src", "paths": { "#enums/*": ["./enums/*.ts"], "#app/*": ["*.ts"], - "#app": ["."], - "#test/*": ["./test/*.ts"] + "#test/*": ["../test/*.ts"] }, "outDir": "./build", "noEmit": true @@ -32,4 +31,4 @@ "vitest.config.ts", "vitest.workspace.ts", ] -} \ No newline at end of file +} diff --git a/vitest.config.ts b/vitest.config.ts index 9f9245687a1..b52c16ec00c 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -5,7 +5,7 @@ export default defineProject(({ mode }) => ({ ...defaultConfig, test: { testTimeout: 20000, - setupFiles: ["./src/test/fontFace.setup.ts", "./src/test/vitest.setup.ts"], + setupFiles: ["./test/fontFace.setup.ts", "./test/vitest.setup.ts"], server: { deps: { inline: ["vitest-canvas-mock"], @@ -33,8 +33,8 @@ export default defineProject(({ mode }) => ({ reporters: ["text-summary", "html"], }, name: "main", - include: ["./src/test/**/*.{test,spec}.ts"], - exclude: ["./src/test/pre.test.ts"], + include: ["./test/**/*.{test,spec}.ts"], + exclude: ["./test/pre.test.ts"], }, esbuild: { pure: mode === "production" ? ["console.log"] : [], diff --git a/vitest.workspace.ts b/vitest.workspace.ts index 38121942004..2f5d1f1e2c8 100644 --- a/vitest.workspace.ts +++ b/vitest.workspace.ts @@ -6,7 +6,7 @@ export default defineWorkspace([ ...defaultConfig, test: { name: "pre", - include: ["src/test/pre.test.ts"], + include: ["./test/pre.test.ts"], environment: "jsdom", }, },